Lines Matching refs:info
187 static inline void vf610_adc_calculate_rates(struct vf610_adc *info) in vf610_adc_calculate_rates() argument
189 unsigned long adck_rate, ipg_rate = clk_get_rate(info->clk); in vf610_adc_calculate_rates()
203 adck_rate = ipg_rate / info->adc_feature.clk_div; in vf610_adc_calculate_rates()
205 info->sample_freq_avail[i] = in vf610_adc_calculate_rates()
209 static inline void vf610_adc_cfg_init(struct vf610_adc *info) in vf610_adc_cfg_init() argument
211 struct vf610_adc_feature *adc_feature = &info->adc_feature; in vf610_adc_cfg_init()
227 vf610_adc_calculate_rates(info); in vf610_adc_cfg_init()
230 static void vf610_adc_cfg_post_set(struct vf610_adc *info) in vf610_adc_cfg_post_set() argument
232 struct vf610_adc_feature *adc_feature = &info->adc_feature; in vf610_adc_cfg_post_set()
264 dev_err(info->dev, "error voltage reference\n"); in vf610_adc_cfg_post_set()
271 writel(cfg_data, info->regs + VF610_REG_ADC_CFG); in vf610_adc_cfg_post_set()
272 writel(gc_data, info->regs + VF610_REG_ADC_GC); in vf610_adc_cfg_post_set()
275 static void vf610_adc_calibration(struct vf610_adc *info) in vf610_adc_calibration() argument
279 if (!info->adc_feature.calibration) in vf610_adc_calibration()
284 writel(hc_cfg, info->regs + VF610_REG_ADC_HC0); in vf610_adc_calibration()
286 adc_gc = readl(info->regs + VF610_REG_ADC_GC); in vf610_adc_calibration()
287 writel(adc_gc | VF610_ADC_CAL, info->regs + VF610_REG_ADC_GC); in vf610_adc_calibration()
289 if (!wait_for_completion_timeout(&info->completion, VF610_ADC_TIMEOUT)) in vf610_adc_calibration()
290 dev_err(info->dev, "Timeout for adc calibration\n"); in vf610_adc_calibration()
292 adc_gc = readl(info->regs + VF610_REG_ADC_GS); in vf610_adc_calibration()
294 dev_err(info->dev, "ADC calibration failed\n"); in vf610_adc_calibration()
296 info->adc_feature.calibration = false; in vf610_adc_calibration()
299 static void vf610_adc_cfg_set(struct vf610_adc *info) in vf610_adc_cfg_set() argument
301 struct vf610_adc_feature *adc_feature = &(info->adc_feature); in vf610_adc_cfg_set()
304 cfg_data = readl(info->regs + VF610_REG_ADC_CFG); in vf610_adc_cfg_set()
312 writel(cfg_data, info->regs + VF610_REG_ADC_CFG); in vf610_adc_cfg_set()
315 static void vf610_adc_sample_set(struct vf610_adc *info) in vf610_adc_sample_set() argument
317 struct vf610_adc_feature *adc_feature = &(info->adc_feature); in vf610_adc_sample_set()
320 cfg_data = readl(info->regs + VF610_REG_ADC_CFG); in vf610_adc_sample_set()
321 gc_data = readl(info->regs + VF610_REG_ADC_GC); in vf610_adc_sample_set()
336 dev_err(info->dev, "error resolution mode\n"); in vf610_adc_sample_set()
360 dev_err(info->dev, "error clk divider\n"); in vf610_adc_sample_set()
391 dev_err(info->dev, in vf610_adc_sample_set()
395 writel(cfg_data, info->regs + VF610_REG_ADC_CFG); in vf610_adc_sample_set()
396 writel(gc_data, info->regs + VF610_REG_ADC_GC); in vf610_adc_sample_set()
399 static void vf610_adc_hw_init(struct vf610_adc *info) in vf610_adc_hw_init() argument
402 vf610_adc_cfg_post_set(info); in vf610_adc_hw_init()
403 vf610_adc_sample_set(info); in vf610_adc_hw_init()
406 vf610_adc_calibration(info); in vf610_adc_hw_init()
409 vf610_adc_cfg_set(info); in vf610_adc_hw_init()
412 static int vf610_adc_read_data(struct vf610_adc *info) in vf610_adc_read_data() argument
416 result = readl(info->regs + VF610_REG_ADC_R0); in vf610_adc_read_data()
418 switch (info->adc_feature.res_mode) { in vf610_adc_read_data()
437 struct vf610_adc *info = (struct vf610_adc *)dev_id; in vf610_adc_isr() local
440 coco = readl(info->regs + VF610_REG_ADC_HS); in vf610_adc_isr()
442 info->value = vf610_adc_read_data(info); in vf610_adc_isr()
443 complete(&info->completion); in vf610_adc_isr()
452 struct vf610_adc *info = iio_priv(dev_to_iio_dev(dev)); in vf610_show_samp_freq_avail() local
456 for (i = 0; i < ARRAY_SIZE(info->sample_freq_avail); i++) in vf610_show_samp_freq_avail()
458 "%u ", info->sample_freq_avail[i]); in vf610_show_samp_freq_avail()
483 struct vf610_adc *info = iio_priv(indio_dev); in vf610_read_raw() local
491 reinit_completion(&info->completion); in vf610_read_raw()
495 writel(hc_cfg, info->regs + VF610_REG_ADC_HC0); in vf610_read_raw()
497 (&info->completion, VF610_ADC_TIMEOUT); in vf610_read_raw()
509 *val = info->value; in vf610_read_raw()
517 *val = 25000 - ((int)info->value - 864) * 1000000 / 1840; in vf610_read_raw()
528 *val = info->vref_uv / 1000; in vf610_read_raw()
529 *val2 = info->adc_feature.res_mode; in vf610_read_raw()
533 *val = info->sample_freq_avail[info->adc_feature.sample_rate]; in vf610_read_raw()
550 struct vf610_adc *info = iio_priv(indio_dev); in vf610_write_raw() local
556 i < ARRAY_SIZE(info->sample_freq_avail); in vf610_write_raw()
558 if (val == info->sample_freq_avail[i]) { in vf610_write_raw()
559 info->adc_feature.sample_rate = i; in vf610_write_raw()
560 vf610_adc_sample_set(info); in vf610_write_raw()
576 struct vf610_adc *info = iio_priv(indio_dev); in vf610_adc_reg_access() local
582 *readval = readl(info->regs + reg); in vf610_adc_reg_access()
603 struct vf610_adc *info; in vf610_adc_probe() local
615 info = iio_priv(indio_dev); in vf610_adc_probe()
616 info->dev = &pdev->dev; in vf610_adc_probe()
619 info->regs = devm_ioremap_resource(&pdev->dev, mem); in vf610_adc_probe()
620 if (IS_ERR(info->regs)) in vf610_adc_probe()
621 return PTR_ERR(info->regs); in vf610_adc_probe()
629 ret = devm_request_irq(info->dev, irq, in vf610_adc_probe()
631 dev_name(&pdev->dev), info); in vf610_adc_probe()
637 info->clk = devm_clk_get(&pdev->dev, "adc"); in vf610_adc_probe()
638 if (IS_ERR(info->clk)) { in vf610_adc_probe()
640 PTR_ERR(info->clk)); in vf610_adc_probe()
641 return PTR_ERR(info->clk); in vf610_adc_probe()
644 info->vref = devm_regulator_get(&pdev->dev, "vref"); in vf610_adc_probe()
645 if (IS_ERR(info->vref)) in vf610_adc_probe()
646 return PTR_ERR(info->vref); in vf610_adc_probe()
648 ret = regulator_enable(info->vref); in vf610_adc_probe()
652 info->vref_uv = regulator_get_voltage(info->vref); in vf610_adc_probe()
656 init_completion(&info->completion); in vf610_adc_probe()
661 indio_dev->info = &vf610_adc_iio_info; in vf610_adc_probe()
666 ret = clk_prepare_enable(info->clk); in vf610_adc_probe()
673 vf610_adc_cfg_init(info); in vf610_adc_probe()
674 vf610_adc_hw_init(info); in vf610_adc_probe()
686 clk_disable_unprepare(info->clk); in vf610_adc_probe()
688 regulator_disable(info->vref); in vf610_adc_probe()
696 struct vf610_adc *info = iio_priv(indio_dev); in vf610_adc_remove() local
699 regulator_disable(info->vref); in vf610_adc_remove()
700 clk_disable_unprepare(info->clk); in vf610_adc_remove()
709 struct vf610_adc *info = iio_priv(indio_dev); in vf610_adc_suspend() local
713 hc_cfg = readl(info->regs + VF610_REG_ADC_HC0); in vf610_adc_suspend()
715 writel(hc_cfg, info->regs + VF610_REG_ADC_HC0); in vf610_adc_suspend()
717 clk_disable_unprepare(info->clk); in vf610_adc_suspend()
718 regulator_disable(info->vref); in vf610_adc_suspend()
726 struct vf610_adc *info = iio_priv(indio_dev); in vf610_adc_resume() local
729 ret = regulator_enable(info->vref); in vf610_adc_resume()
733 ret = clk_prepare_enable(info->clk); in vf610_adc_resume()
737 vf610_adc_hw_init(info); in vf610_adc_resume()
742 regulator_disable(info->vref); in vf610_adc_resume()