Lines Matching refs:info

179 static void imx7d_adc_feature_config(struct imx7d_adc *info)
181 info->adc_feature.clk_pre_div = IMX7D_ADC_ANALOG_CLK_PRE_DIV_4;
182 info->adc_feature.avg_num = IMX7D_ADC_AVERAGE_NUM_32;
183 info->adc_feature.core_time_unit = 1;
186 static void imx7d_adc_sample_rate_set(struct imx7d_adc *info)
188 struct imx7d_adc_feature *adc_feature = &info->adc_feature;
200 readl(info->regs + i * IMX7D_EACH_CHANNEL_REG_OFFSET);
203 info->regs + i * IMX7D_EACH_CHANNEL_REG_OFFSET);
208 info->pre_div_num = adc_analogure_clk.pre_div;
211 writel(sample_rate, info->regs + IMX7D_REG_ADC_TIMER_UNIT);
214 static void imx7d_adc_hw_init(struct imx7d_adc *info)
219 cfg = readl(info->regs + IMX7D_REG_ADC_ADC_CFG);
223 writel(cfg, info->regs + IMX7D_REG_ADC_ADC_CFG);
227 info->regs + IMX7D_REG_ADC_INT_SIG_EN);
229 info->regs + IMX7D_REG_ADC_INT_EN);
231 imx7d_adc_sample_rate_set(info);
234 static void imx7d_adc_channel_set(struct imx7d_adc *info)
240 channel = info->channel;
259 cfg2 = readl(info->regs + IMX7D_EACH_CHANNEL_REG_OFFSET * channel +
262 cfg2 |= imx7d_adc_average_num[info->adc_feature.avg_num];
268 writel(cfg2, info->regs + IMX7D_EACH_CHANNEL_REG_OFFSET * channel +
270 writel(cfg1, info->regs + IMX7D_EACH_CHANNEL_REG_OFFSET * channel);
273 static u32 imx7d_adc_get_sample_rate(struct imx7d_adc *info)
276 u32 core_time_unit = info->adc_feature.core_time_unit;
279 analogue_core_clk = IMX7D_ADC_INPUT_CLK / info->pre_div_num;
291 struct imx7d_adc *info = iio_priv(indio_dev);
298 mutex_lock(&info->lock);
299 reinit_completion(&info->completion);
302 info->channel = channel;
303 imx7d_adc_channel_set(info);
306 (&info->completion, IMX7D_ADC_TIMEOUT);
308 mutex_unlock(&info->lock);
312 mutex_unlock(&info->lock);
316 *val = info->value;
317 mutex_unlock(&info->lock);
321 info->vref_uv = regulator_get_voltage(info->vref);
322 *val = info->vref_uv / 1000;
327 *val = imx7d_adc_get_sample_rate(info);
335 static int imx7d_adc_read_data(struct imx7d_adc *info)
340 channel = info->channel & 0x03;
349 value = readl(info->regs + IMX7D_REG_ADC_CHA_B_CNV_RSLT);
351 value = readl(info->regs + IMX7D_REG_ADC_CHC_D_CNV_RSLT);
362 struct imx7d_adc *info = dev_id;
365 status = readl(info->regs + IMX7D_REG_ADC_INT_STATUS);
367 info->value = imx7d_adc_read_data(info);
368 complete(&info->completion);
377 writel(status, info->regs + IMX7D_REG_ADC_INT_STATUS);
385 dev_err(info->dev,
389 writel(status, info->regs + IMX7D_REG_ADC_INT_STATUS);
399 struct imx7d_adc *info = iio_priv(indio_dev);
404 *readval = readl(info->regs + reg);
420 static void imx7d_adc_power_down(struct imx7d_adc *info)
424 adc_cfg = readl(info->regs + IMX7D_REG_ADC_ADC_CFG);
428 writel(adc_cfg, info->regs + IMX7D_REG_ADC_ADC_CFG);
434 struct imx7d_adc *info = iio_priv(indio_dev);
437 ret = regulator_enable(info->vref);
439 dev_err(info->dev,
445 ret = clk_prepare_enable(info->clk);
447 dev_err(info->dev,
449 regulator_disable(info->vref);
453 imx7d_adc_hw_init(info);
461 struct imx7d_adc *info = iio_priv(indio_dev);
463 imx7d_adc_power_down(info);
465 clk_disable_unprepare(info->clk);
466 regulator_disable(info->vref);
478 struct imx7d_adc *info;
484 indio_dev = devm_iio_device_alloc(dev, sizeof(*info));
490 info = iio_priv(indio_dev);
491 info->dev = dev;
493 info->regs = devm_platform_ioremap_resource(pdev, 0);
494 if (IS_ERR(info->regs))
495 return PTR_ERR(info->regs);
501 info->clk = devm_clk_get(dev, "adc");
502 if (IS_ERR(info->clk))
503 return dev_err_probe(dev, PTR_ERR(info->clk), "Failed getting clock\n");
505 info->vref = devm_regulator_get(dev, "vref");
506 if (IS_ERR(info->vref))
507 return dev_err_probe(dev, PTR_ERR(info->vref),
512 init_completion(&info->completion);
515 indio_dev->info = &imx7d_adc_iio_info;
520 ret = devm_request_irq(dev, irq, imx7d_adc_isr, 0, dev_name(dev), info);
526 imx7d_adc_feature_config(info);
536 mutex_init(&info->lock);