Lines Matching full:adc

88 typedef struct ADC {  struct
91 } ADC; argument
93 ADC adc_defs = {
98 static uint32_t adc_read_con(QTestState *qts, const ADC *adc) in adc_read_con() argument
100 return qtest_readl(qts, adc->base_addr + CON_OFFSET); in adc_read_con()
103 static void adc_write_con(QTestState *qts, const ADC *adc, uint32_t value) in adc_write_con() argument
105 qtest_writel(qts, adc->base_addr + CON_OFFSET, value); in adc_write_con()
108 static uint32_t adc_read_data(QTestState *qts, const ADC *adc) in adc_read_data() argument
110 return qtest_readl(qts, adc->base_addr + DATA_OFFSET); in adc_read_data()
119 static void adc_qom_set(QTestState *qts, const ADC *adc, in adc_qom_set() argument
123 const char *path = "/machine/soc/adc"; in adc_qom_set()
135 static void adc_write_input(QTestState *qts, const ADC *adc, in adc_write_input() argument
141 adc_qom_set(qts, adc, name, value); in adc_write_input()
144 static void adc_write_vref(QTestState *qts, const ADC *adc, uint32_t value) in adc_write_vref() argument
146 adc_qom_set(qts, adc, "vref", value); in adc_write_vref()
162 static uint32_t adc_prescaler(QTestState *qts, const ADC *adc) in adc_prescaler() argument
164 uint32_t div = extract32(adc_read_con(qts, adc), 1, 8); in adc_prescaler()
175 static void adc_wait_conv_finished(QTestState *qts, const ADC *adc, in adc_wait_conv_finished() argument
178 uint32_t prescaler = adc_prescaler(qts, adc); in adc_wait_conv_finished()
181 * ADC should takes roughly 20 cycles to convert one sample. So we assert it in adc_wait_conv_finished()
186 /* ADC is still converting. */ in adc_wait_conv_finished()
187 g_assert_true(adc_read_con(qts, adc) & CON_CONV); in adc_wait_conv_finished()
189 /* ADC has finished conversion. */ in adc_wait_conv_finished()
190 g_assert_false(adc_read_con(qts, adc) & CON_CONV); in adc_wait_conv_finished()
193 /* Check ADC can be reset to default value. */
196 const ADC *adc = adc_p; in test_init() local
199 adc_write_con(qts, adc, CON_REFSEL | CON_INT); in test_init()
200 g_assert_cmphex(adc_read_con(qts, adc), ==, CON_REFSEL); in test_init()
204 /* Check ADC can convert from an internal reference. */
207 const ADC *adc = adc_p; in test_convert_internal() local
217 adc_write_input(qts, adc, index, input); in test_convert_internal()
218 adc_write_con(qts, adc, CON_MUX(index) | CON_REFSEL | CON_INT | in test_convert_internal()
220 adc_wait_conv_finished(qts, adc, DEFAULT_CLKDIV); in test_convert_internal()
221 g_assert_cmphex(adc_read_con(qts, adc), ==, CON_MUX(index) | in test_convert_internal()
223 g_assert_false(qtest_get_irq(qts, adc->irq)); in test_convert_internal()
224 output = adc_read_data(qts, adc); in test_convert_internal()
232 /* Check ADC can convert from an external reference. */
235 const ADC *adc = adc_p; in test_convert_external() local
247 adc_write_input(qts, adc, index, input); in test_convert_external()
248 adc_write_vref(qts, adc, vref); in test_convert_external()
249 adc_write_con(qts, adc, CON_MUX(index) | CON_INT | CON_EN | in test_convert_external()
251 adc_wait_conv_finished(qts, adc, DEFAULT_CLKDIV); in test_convert_external()
252 g_assert_cmphex(adc_read_con(qts, adc), ==, in test_convert_external()
254 g_assert_false(qtest_get_irq(qts, adc->irq)); in test_convert_external()
255 output = adc_read_data(qts, adc); in test_convert_external()
264 /* Check ADC interrupt files if and only if CON_INT_EN is set. */
267 const ADC *adc = adc_p; in test_interrupt() local
276 adc_write_input(qts, adc, index, input); in test_interrupt()
277 g_assert_false(qtest_get_irq(qts, adc->irq)); in test_interrupt()
278 adc_write_con(qts, adc, CON_MUX(index) | CON_INT_EN | CON_REFSEL | CON_INT in test_interrupt()
280 adc_wait_conv_finished(qts, adc, DEFAULT_CLKDIV); in test_interrupt()
281 g_assert_cmphex(adc_read_con(qts, adc), ==, CON_MUX(index) | CON_INT_EN in test_interrupt()
283 g_assert_true(qtest_get_irq(qts, adc->irq)); in test_interrupt()
284 output = adc_read_data(qts, adc); in test_interrupt()
290 /* Check ADC is reset after setting ADC_RST for 10 ADC cycles. */
293 const ADC *adc = adc_p; in test_reset() local
299 adc_write_con(qts, adc, CON_INT | CON_EN | CON_RST | CON_DIV(div)); in test_reset()
301 adc_prescaler(qts, adc), DEFAULT_CLKDIV)); in test_reset()
302 g_assert_false(adc_read_con(qts, adc) & CON_EN); in test_reset()
307 /* Check ADC Calibration works as desired. */
311 const ADC *adc = adc_p; in test_calibrate() local
322 sprintf(buf, "-machine quanta-gsj -global npcm7xx-adc.iref=%u", iref); in test_calibrate()
340 adc_write_input(qts, adc, index, input); in test_calibrate()
341 adc_write_con(qts, adc, CON_MUX(index) | CON_REFSEL | CON_INT | in test_calibrate()
343 adc_wait_conv_finished(qts, adc, DEFAULT_CLKDIV); in test_calibrate()
344 g_assert_cmphex(adc_read_con(qts, adc), ==, in test_calibrate()
346 output = adc_read_data(qts, adc); in test_calibrate()
358 static void adc_add_test(const char *name, const ADC* wd, in adc_add_test()