Lines Matching refs:adc_dev
71 static inline void cc10001_adc_write_reg(struct cc10001_adc_device *adc_dev, in cc10001_adc_write_reg() argument
74 writel(val, adc_dev->reg_base + reg); in cc10001_adc_write_reg()
77 static inline u32 cc10001_adc_read_reg(struct cc10001_adc_device *adc_dev, in cc10001_adc_read_reg() argument
80 return readl(adc_dev->reg_base + reg); in cc10001_adc_read_reg()
83 static void cc10001_adc_power_up(struct cc10001_adc_device *adc_dev) in cc10001_adc_power_up() argument
85 cc10001_adc_write_reg(adc_dev, CC10001_ADC_POWER_DOWN, 0); in cc10001_adc_power_up()
86 ndelay(adc_dev->start_delay_ns); in cc10001_adc_power_up()
89 static void cc10001_adc_power_down(struct cc10001_adc_device *adc_dev) in cc10001_adc_power_down() argument
91 cc10001_adc_write_reg(adc_dev, CC10001_ADC_POWER_DOWN, in cc10001_adc_power_down()
95 static void cc10001_adc_start(struct cc10001_adc_device *adc_dev, in cc10001_adc_start() argument
102 cc10001_adc_write_reg(adc_dev, CC10001_ADC_CONFIG, val); in cc10001_adc_start()
105 val = cc10001_adc_read_reg(adc_dev, CC10001_ADC_CONFIG); in cc10001_adc_start()
107 cc10001_adc_write_reg(adc_dev, CC10001_ADC_CONFIG, val); in cc10001_adc_start()
114 struct cc10001_adc_device *adc_dev = iio_priv(indio_dev); in cc10001_adc_poll_done() local
117 while (!(cc10001_adc_read_reg(adc_dev, CC10001_ADC_EOC) & in cc10001_adc_poll_done()
126 while ((cc10001_adc_read_reg(adc_dev, CC10001_ADC_CHSEL_SAMPLED) & in cc10001_adc_poll_done()
135 return cc10001_adc_read_reg(adc_dev, CC10001_ADC_DDATA_OUT) & in cc10001_adc_poll_done()
141 struct cc10001_adc_device *adc_dev; in cc10001_adc_trigger_h() local
152 adc_dev = iio_priv(indio_dev); in cc10001_adc_trigger_h()
153 data = adc_dev->buf; in cc10001_adc_trigger_h()
155 mutex_lock(&adc_dev->lock); in cc10001_adc_trigger_h()
157 if (!adc_dev->shared) in cc10001_adc_trigger_h()
158 cc10001_adc_power_up(adc_dev); in cc10001_adc_trigger_h()
161 delay_ns = adc_dev->eoc_delay_ns / CC10001_MAX_POLL_COUNT; in cc10001_adc_trigger_h()
169 cc10001_adc_start(adc_dev, channel); in cc10001_adc_trigger_h()
182 if (!adc_dev->shared) in cc10001_adc_trigger_h()
183 cc10001_adc_power_down(adc_dev); in cc10001_adc_trigger_h()
185 mutex_unlock(&adc_dev->lock); in cc10001_adc_trigger_h()
198 struct cc10001_adc_device *adc_dev = iio_priv(indio_dev); in cc10001_adc_read_raw_voltage() local
202 if (!adc_dev->shared) in cc10001_adc_read_raw_voltage()
203 cc10001_adc_power_up(adc_dev); in cc10001_adc_read_raw_voltage()
206 delay_ns = adc_dev->eoc_delay_ns / CC10001_MAX_POLL_COUNT; in cc10001_adc_read_raw_voltage()
208 cc10001_adc_start(adc_dev, chan->channel); in cc10001_adc_read_raw_voltage()
212 if (!adc_dev->shared) in cc10001_adc_read_raw_voltage()
213 cc10001_adc_power_down(adc_dev); in cc10001_adc_read_raw_voltage()
222 struct cc10001_adc_device *adc_dev = iio_priv(indio_dev); in cc10001_adc_read_raw() local
229 mutex_lock(&adc_dev->lock); in cc10001_adc_read_raw()
231 mutex_unlock(&adc_dev->lock); in cc10001_adc_read_raw()
238 ret = regulator_get_voltage(adc_dev->reg); in cc10001_adc_read_raw()
254 struct cc10001_adc_device *adc_dev = iio_priv(indio_dev); in cc10001_update_scan_mode() local
256 kfree(adc_dev->buf); in cc10001_update_scan_mode()
257 adc_dev->buf = kmalloc(indio_dev->scan_bytes, GFP_KERNEL); in cc10001_update_scan_mode()
258 if (!adc_dev->buf) in cc10001_update_scan_mode()
316 struct cc10001_adc_device *adc_dev; in cc10001_adc_probe() local
323 indio_dev = devm_iio_device_alloc(&pdev->dev, sizeof(*adc_dev)); in cc10001_adc_probe()
327 adc_dev = iio_priv(indio_dev); in cc10001_adc_probe()
331 adc_dev->shared = true; in cc10001_adc_probe()
335 adc_dev->reg = devm_regulator_get(&pdev->dev, "vref"); in cc10001_adc_probe()
336 if (IS_ERR(adc_dev->reg)) in cc10001_adc_probe()
337 return PTR_ERR(adc_dev->reg); in cc10001_adc_probe()
339 ret = regulator_enable(adc_dev->reg); in cc10001_adc_probe()
349 adc_dev->reg_base = devm_ioremap_resource(&pdev->dev, res); in cc10001_adc_probe()
350 if (IS_ERR(adc_dev->reg_base)) { in cc10001_adc_probe()
351 ret = PTR_ERR(adc_dev->reg_base); in cc10001_adc_probe()
355 adc_dev->adc_clk = devm_clk_get(&pdev->dev, "adc"); in cc10001_adc_probe()
356 if (IS_ERR(adc_dev->adc_clk)) { in cc10001_adc_probe()
358 ret = PTR_ERR(adc_dev->adc_clk); in cc10001_adc_probe()
362 ret = clk_prepare_enable(adc_dev->adc_clk); in cc10001_adc_probe()
368 adc_clk_rate = clk_get_rate(adc_dev->adc_clk); in cc10001_adc_probe()
375 adc_dev->eoc_delay_ns = NSEC_PER_SEC / adc_clk_rate; in cc10001_adc_probe()
376 adc_dev->start_delay_ns = adc_dev->eoc_delay_ns * CC10001_WAIT_CYCLES; in cc10001_adc_probe()
383 if (adc_dev->shared) in cc10001_adc_probe()
384 cc10001_adc_power_up(adc_dev); in cc10001_adc_probe()
391 mutex_init(&adc_dev->lock); in cc10001_adc_probe()
409 clk_disable_unprepare(adc_dev->adc_clk); in cc10001_adc_probe()
411 regulator_disable(adc_dev->reg); in cc10001_adc_probe()
418 struct cc10001_adc_device *adc_dev = iio_priv(indio_dev); in cc10001_adc_remove() local
420 cc10001_adc_power_down(adc_dev); in cc10001_adc_remove()
423 clk_disable_unprepare(adc_dev->adc_clk); in cc10001_adc_remove()
424 regulator_disable(adc_dev->reg); in cc10001_adc_remove()