adc: adc_emul: support adc_read_async with no signal

`adc_read_async` is documented as supporting the `async` signal as NULL.
Update the emulator to no longer block until completion when
`adc_read_async` is called in this situation.

Signed-off-by: Jordan Yates <jordan@embeint.com>
This commit is contained in:
Jordan Yates 2025-01-14 21:14:41 +10:00 committed by Benjamin Cabé
parent 5e2b9980bc
commit 055b7e886e

View file

@ -394,24 +394,34 @@ static int adc_emul_start_read(const struct device *dev,
return adc_context_wait_for_completion(&data->ctx); return adc_context_wait_for_completion(&data->ctx);
} }
static int adc_emul_read_async(const struct device *dev, static int adc_emul_read_common(const struct device *dev,
const struct adc_sequence *sequence, const struct adc_sequence *sequence,
bool is_async,
struct k_poll_signal *async) struct k_poll_signal *async)
{ {
struct adc_emul_data *data = dev->data; struct adc_emul_data *data = dev->data;
int err; int err;
adc_context_lock(&data->ctx, async ? true : false, async); adc_context_lock(&data->ctx, is_async, async);
err = adc_emul_start_read(dev, sequence); err = adc_emul_start_read(dev, sequence);
adc_context_release(&data->ctx, err); adc_context_release(&data->ctx, err);
return err; return err;
} }
#ifdef CONFIG_ADC_ASYNC
static int adc_emul_read_async(const struct device *dev,
const struct adc_sequence *sequence,
struct k_poll_signal *async)
{
return adc_emul_read_common(dev, sequence, true, async);
}
#endif
static int adc_emul_read(const struct device *dev, static int adc_emul_read(const struct device *dev,
const struct adc_sequence *sequence) const struct adc_sequence *sequence)
{ {
return adc_emul_read_async(dev, sequence, NULL); return adc_emul_read_common(dev, sequence, false, NULL);
} }
static void adc_context_start_sampling(struct adc_context *ctx) static void adc_context_start_sampling(struct adc_context *ctx)