|
From: | Hao Wu |
Subject: | Re: [PATCH v2 3/4] hw/adc: Add an ADC module for NPCM7XX |
Date: | Mon, 14 Dec 2020 09:48:56 -0800 |
On 12/11/20 11:22 PM, Hao Wu via wrote:
> The ADC is part of NPCM7XX Module. Its behavior is controled by the
> ADC_CON register. It converts one of the eight analog inputs into a
> digital input and stores it in the ADC_DATA register when enabled.
>
> Reviewed-by: Havard Skinnemoen <hskinnemoen@google.com>
> Reviewed-by: Tyrone Ting <kfting@nuvoton.com>
> Signed-off-by: Hao Wu <wuhaotsh@google.com>
> ---
> docs/system/arm/nuvoton.rst | 2 +-
> hw/adc/meson.build | 1 +
> hw/adc/npcm7xx_adc.c | 318 ++++++++++++++++++++++++++
> hw/arm/npcm7xx.c | 24 +-
> include/hw/adc/npcm7xx_adc.h | 72 ++++++
> include/hw/arm/npcm7xx.h | 2 +
> tests/qtest/meson.build | 3 +-
> tests/qtest/npcm7xx_adc-test.c | 400 +++++++++++++++++++++++++++++++++
> 8 files changed, 819 insertions(+), 3 deletions(-)
> create mode 100644 hw/adc/npcm7xx_adc.c
> create mode 100644 include/hw/adc/npcm7xx_adc.h
> create mode 100644 tests/qtest/npcm7xx_adc-test.c
...
> +static void npcm7xx_adc_init(Object *obj)
> +{
> + NPCM7xxADCState *s = NPCM7XX_ADC(obj);
> + SysBusDevice *sbd = &s->parent;
> + int i;
> +
> + sysbus_init_irq(sbd, &s->irq);
> +
> + timer_init_ns(&s->conv_timer, QEMU_CLOCK_VIRTUAL,
> + npcm7xx_adc_convert_done, s);
> + timer_init_ns(&s->reset_timer, QEMU_CLOCK_VIRTUAL,
> + npcm7xx_adc_reset_done, s);
> + memory_region_init_io(&s->iomem, obj, &npcm7xx_adc_ops, s,
> + TYPE_NPCM7XX_ADC, 4 * KiB);
> + sysbus_init_mmio(sbd, &s->iomem);
> + s->clock = qdev_init_clock_in(DEVICE(s), "clock", NULL, NULL);
> +
> + for (i = 0; i < NPCM7XX_ADC_NUM_INPUTS; ++i) {
> + object_property_add_uint32_ptr(obj, "adci[*]",
> + &s->adci[i], OBJ_PROP_FLAG_WRITE);
How do you use this, any example?
FWIW I'm experimenting with other ADC to use the "audio/audio.h"
API (which is not voice/audio specific, but generic DSP), then
I can pass any QEMU source and consume it using AUD_read() to fill
the ADC buffer (device sram or in main ram).
But I'm doing that alone during my free time, so don't expect it
any time soon :(
> + }
> + object_property_add_uint32_ptr(obj, "vref",
> + &s->vref, OBJ_PROP_FLAG_WRITE);
> + npcm7xx_adc_calibrate(s);
> +}
[Prev in Thread] | Current Thread | [Next in Thread] |