Lines Matching refs:info

121 	void (*init_hw)(struct exynos_adc *info);
122 void (*exit_hw)(struct exynos_adc *info);
123 void (*clear_irq)(struct exynos_adc *info);
124 void (*start_conv)(struct exynos_adc *info, unsigned long addr);
127 static void exynos_adc_unprepare_clk(struct exynos_adc *info) in exynos_adc_unprepare_clk() argument
129 if (info->data->needs_sclk) in exynos_adc_unprepare_clk()
130 clk_unprepare(info->sclk); in exynos_adc_unprepare_clk()
131 clk_unprepare(info->clk); in exynos_adc_unprepare_clk()
134 static int exynos_adc_prepare_clk(struct exynos_adc *info) in exynos_adc_prepare_clk() argument
138 ret = clk_prepare(info->clk); in exynos_adc_prepare_clk()
140 dev_err(info->dev, "failed preparing adc clock: %d\n", ret); in exynos_adc_prepare_clk()
144 if (info->data->needs_sclk) { in exynos_adc_prepare_clk()
145 ret = clk_prepare(info->sclk); in exynos_adc_prepare_clk()
147 clk_unprepare(info->clk); in exynos_adc_prepare_clk()
148 dev_err(info->dev, in exynos_adc_prepare_clk()
157 static void exynos_adc_disable_clk(struct exynos_adc *info) in exynos_adc_disable_clk() argument
159 if (info->data->needs_sclk) in exynos_adc_disable_clk()
160 clk_disable(info->sclk); in exynos_adc_disable_clk()
161 clk_disable(info->clk); in exynos_adc_disable_clk()
164 static int exynos_adc_enable_clk(struct exynos_adc *info) in exynos_adc_enable_clk() argument
168 ret = clk_enable(info->clk); in exynos_adc_enable_clk()
170 dev_err(info->dev, "failed enabling adc clock: %d\n", ret); in exynos_adc_enable_clk()
174 if (info->data->needs_sclk) { in exynos_adc_enable_clk()
175 ret = clk_enable(info->sclk); in exynos_adc_enable_clk()
177 clk_disable(info->clk); in exynos_adc_enable_clk()
178 dev_err(info->dev, in exynos_adc_enable_clk()
187 static void exynos_adc_v1_init_hw(struct exynos_adc *info) in exynos_adc_v1_init_hw() argument
191 if (info->data->needs_adc_phy) in exynos_adc_v1_init_hw()
192 regmap_write(info->pmu_map, info->data->phy_offset, 1); in exynos_adc_v1_init_hw()
199 writel(con1, ADC_V1_CON(info->regs)); in exynos_adc_v1_init_hw()
202 static void exynos_adc_v1_exit_hw(struct exynos_adc *info) in exynos_adc_v1_exit_hw() argument
206 if (info->data->needs_adc_phy) in exynos_adc_v1_exit_hw()
207 regmap_write(info->pmu_map, info->data->phy_offset, 0); in exynos_adc_v1_exit_hw()
209 con = readl(ADC_V1_CON(info->regs)); in exynos_adc_v1_exit_hw()
211 writel(con, ADC_V1_CON(info->regs)); in exynos_adc_v1_exit_hw()
214 static void exynos_adc_v1_clear_irq(struct exynos_adc *info) in exynos_adc_v1_clear_irq() argument
216 writel(1, ADC_V1_INTCLR(info->regs)); in exynos_adc_v1_clear_irq()
219 static void exynos_adc_v1_start_conv(struct exynos_adc *info, in exynos_adc_v1_start_conv() argument
224 writel(addr, ADC_V1_MUX(info->regs)); in exynos_adc_v1_start_conv()
226 con1 = readl(ADC_V1_CON(info->regs)); in exynos_adc_v1_start_conv()
227 writel(con1 | ADC_CON_EN_START, ADC_V1_CON(info->regs)); in exynos_adc_v1_start_conv()
242 static void exynos_adc_s3c2416_start_conv(struct exynos_adc *info, in exynos_adc_s3c2416_start_conv() argument
248 con1 = readl(ADC_V1_CON(info->regs)); in exynos_adc_s3c2416_start_conv()
250 writel(con1, ADC_V1_CON(info->regs)); in exynos_adc_s3c2416_start_conv()
253 writel(addr, ADC_S3C2410_MUX(info->regs)); in exynos_adc_s3c2416_start_conv()
255 con1 = readl(ADC_V1_CON(info->regs)); in exynos_adc_s3c2416_start_conv()
256 writel(con1 | ADC_CON_EN_START, ADC_V1_CON(info->regs)); in exynos_adc_s3c2416_start_conv()
268 static void exynos_adc_s3c2443_start_conv(struct exynos_adc *info, in exynos_adc_s3c2443_start_conv() argument
274 writel(addr, ADC_S3C2410_MUX(info->regs)); in exynos_adc_s3c2443_start_conv()
276 con1 = readl(ADC_V1_CON(info->regs)); in exynos_adc_s3c2443_start_conv()
277 writel(con1 | ADC_CON_EN_START, ADC_V1_CON(info->regs)); in exynos_adc_s3c2443_start_conv()
289 static void exynos_adc_s3c64xx_start_conv(struct exynos_adc *info, in exynos_adc_s3c64xx_start_conv() argument
294 con1 = readl(ADC_V1_CON(info->regs)); in exynos_adc_s3c64xx_start_conv()
297 writel(con1 | ADC_CON_EN_START, ADC_V1_CON(info->regs)); in exynos_adc_s3c64xx_start_conv()
319 static void exynos_adc_v2_init_hw(struct exynos_adc *info) in exynos_adc_v2_init_hw() argument
323 if (info->data->needs_adc_phy) in exynos_adc_v2_init_hw()
324 regmap_write(info->pmu_map, info->data->phy_offset, 1); in exynos_adc_v2_init_hw()
327 writel(con1, ADC_V2_CON1(info->regs)); in exynos_adc_v2_init_hw()
331 writel(con2, ADC_V2_CON2(info->regs)); in exynos_adc_v2_init_hw()
334 writel(1, ADC_V2_INT_EN(info->regs)); in exynos_adc_v2_init_hw()
337 static void exynos_adc_v2_exit_hw(struct exynos_adc *info) in exynos_adc_v2_exit_hw() argument
341 if (info->data->needs_adc_phy) in exynos_adc_v2_exit_hw()
342 regmap_write(info->pmu_map, info->data->phy_offset, 0); in exynos_adc_v2_exit_hw()
344 con = readl(ADC_V2_CON1(info->regs)); in exynos_adc_v2_exit_hw()
346 writel(con, ADC_V2_CON1(info->regs)); in exynos_adc_v2_exit_hw()
349 static void exynos_adc_v2_clear_irq(struct exynos_adc *info) in exynos_adc_v2_clear_irq() argument
351 writel(1, ADC_V2_INT_ST(info->regs)); in exynos_adc_v2_clear_irq()
354 static void exynos_adc_v2_start_conv(struct exynos_adc *info, in exynos_adc_v2_start_conv() argument
359 con2 = readl(ADC_V2_CON2(info->regs)); in exynos_adc_v2_start_conv()
362 writel(con2, ADC_V2_CON2(info->regs)); in exynos_adc_v2_start_conv()
364 con1 = readl(ADC_V2_CON1(info->regs)); in exynos_adc_v2_start_conv()
365 writel(con1 | ADC_CON_EN_START, ADC_V2_CON1(info->regs)); in exynos_adc_v2_start_conv()
393 static void exynos_adc_exynos7_init_hw(struct exynos_adc *info) in exynos_adc_exynos7_init_hw() argument
397 if (info->data->needs_adc_phy) in exynos_adc_exynos7_init_hw()
398 regmap_write(info->pmu_map, info->data->phy_offset, 1); in exynos_adc_exynos7_init_hw()
401 writel(con1, ADC_V2_CON1(info->regs)); in exynos_adc_exynos7_init_hw()
403 con2 = readl(ADC_V2_CON2(info->regs)); in exynos_adc_exynos7_init_hw()
406 writel(con2, ADC_V2_CON2(info->regs)); in exynos_adc_exynos7_init_hw()
409 writel(1, ADC_V2_INT_EN(info->regs)); in exynos_adc_exynos7_init_hw()
469 struct exynos_adc *info = iio_priv(indio_dev); in exynos_read_raw() local
477 reinit_completion(&info->completion); in exynos_read_raw()
480 if (info->data->start_conv) in exynos_read_raw()
481 info->data->start_conv(info, chan->address); in exynos_read_raw()
484 (&info->completion, EXYNOS_ADC_TIMEOUT); in exynos_read_raw()
487 if (info->data->init_hw) in exynos_read_raw()
488 info->data->init_hw(info); in exynos_read_raw()
491 *val = info->value; in exynos_read_raw()
503 struct exynos_adc *info = (struct exynos_adc *)dev_id; in exynos_adc_isr() local
504 u32 mask = info->data->mask; in exynos_adc_isr()
507 info->value = readl(ADC_V1_DATX(info->regs)) & mask; in exynos_adc_isr()
510 if (info->data->clear_irq) in exynos_adc_isr()
511 info->data->clear_irq(info); in exynos_adc_isr()
513 complete(&info->completion); in exynos_adc_isr()
522 struct exynos_adc *info = iio_priv(indio_dev); in exynos_adc_reg_access() local
527 *readval = readl(info->regs + reg); in exynos_adc_reg_access()
571 struct exynos_adc *info = NULL; in exynos_adc_probe() local
587 info = iio_priv(indio_dev); in exynos_adc_probe()
589 info->data = exynos_adc_get_data(pdev); in exynos_adc_probe()
590 if (!info->data) { in exynos_adc_probe()
596 info->regs = devm_ioremap_resource(&pdev->dev, mem); in exynos_adc_probe()
597 if (IS_ERR(info->regs)) in exynos_adc_probe()
598 return PTR_ERR(info->regs); in exynos_adc_probe()
601 if (info->data->needs_adc_phy) { in exynos_adc_probe()
602 info->pmu_map = syscon_regmap_lookup_by_phandle( in exynos_adc_probe()
605 if (IS_ERR(info->pmu_map)) { in exynos_adc_probe()
607 return PTR_ERR(info->pmu_map); in exynos_adc_probe()
617 info->irq = irq; in exynos_adc_probe()
618 info->dev = &pdev->dev; in exynos_adc_probe()
620 init_completion(&info->completion); in exynos_adc_probe()
622 info->clk = devm_clk_get(&pdev->dev, "adc"); in exynos_adc_probe()
623 if (IS_ERR(info->clk)) { in exynos_adc_probe()
625 PTR_ERR(info->clk)); in exynos_adc_probe()
626 return PTR_ERR(info->clk); in exynos_adc_probe()
629 if (info->data->needs_sclk) { in exynos_adc_probe()
630 info->sclk = devm_clk_get(&pdev->dev, "sclk"); in exynos_adc_probe()
631 if (IS_ERR(info->sclk)) { in exynos_adc_probe()
634 PTR_ERR(info->sclk)); in exynos_adc_probe()
635 return PTR_ERR(info->sclk); in exynos_adc_probe()
639 info->vdd = devm_regulator_get(&pdev->dev, "vdd"); in exynos_adc_probe()
640 if (IS_ERR(info->vdd)) { in exynos_adc_probe()
642 PTR_ERR(info->vdd)); in exynos_adc_probe()
643 return PTR_ERR(info->vdd); in exynos_adc_probe()
646 ret = regulator_enable(info->vdd); in exynos_adc_probe()
650 ret = exynos_adc_prepare_clk(info); in exynos_adc_probe()
654 ret = exynos_adc_enable_clk(info); in exynos_adc_probe()
663 indio_dev->info = &exynos_adc_iio_info; in exynos_adc_probe()
666 indio_dev->num_channels = info->data->num_channels; in exynos_adc_probe()
668 ret = request_irq(info->irq, exynos_adc_isr, in exynos_adc_probe()
669 0, dev_name(&pdev->dev), info); in exynos_adc_probe()
672 info->irq); in exynos_adc_probe()
680 if (info->data->init_hw) in exynos_adc_probe()
681 info->data->init_hw(info); in exynos_adc_probe()
696 free_irq(info->irq, info); in exynos_adc_probe()
698 if (info->data->exit_hw) in exynos_adc_probe()
699 info->data->exit_hw(info); in exynos_adc_probe()
700 exynos_adc_disable_clk(info); in exynos_adc_probe()
702 exynos_adc_unprepare_clk(info); in exynos_adc_probe()
704 regulator_disable(info->vdd); in exynos_adc_probe()
711 struct exynos_adc *info = iio_priv(indio_dev); in exynos_adc_remove() local
716 free_irq(info->irq, info); in exynos_adc_remove()
717 if (info->data->exit_hw) in exynos_adc_remove()
718 info->data->exit_hw(info); in exynos_adc_remove()
719 exynos_adc_disable_clk(info); in exynos_adc_remove()
720 exynos_adc_unprepare_clk(info); in exynos_adc_remove()
721 regulator_disable(info->vdd); in exynos_adc_remove()
730 struct exynos_adc *info = iio_priv(indio_dev); in exynos_adc_suspend() local
732 if (info->data->exit_hw) in exynos_adc_suspend()
733 info->data->exit_hw(info); in exynos_adc_suspend()
734 exynos_adc_disable_clk(info); in exynos_adc_suspend()
735 regulator_disable(info->vdd); in exynos_adc_suspend()
743 struct exynos_adc *info = iio_priv(indio_dev); in exynos_adc_resume() local
746 ret = regulator_enable(info->vdd); in exynos_adc_resume()
750 ret = exynos_adc_enable_clk(info); in exynos_adc_resume()
754 if (info->data->init_hw) in exynos_adc_resume()
755 info->data->init_hw(info); in exynos_adc_resume()