Lines Matching refs:indio_dev

301 static unsigned int meson_sar_adc_get_fifo_count(struct iio_dev *indio_dev)  in meson_sar_adc_get_fifo_count()  argument
303 struct meson_sar_adc_priv *priv = iio_priv(indio_dev); in meson_sar_adc_get_fifo_count()
311 static int meson_sar_adc_calib_val(struct iio_dev *indio_dev, int val) in meson_sar_adc_calib_val() argument
313 struct meson_sar_adc_priv *priv = iio_priv(indio_dev); in meson_sar_adc_calib_val()
322 static int meson_sar_adc_wait_busy_clear(struct iio_dev *indio_dev) in meson_sar_adc_wait_busy_clear() argument
324 struct meson_sar_adc_priv *priv = iio_priv(indio_dev); in meson_sar_adc_wait_busy_clear()
343 static int meson_sar_adc_read_raw_sample(struct iio_dev *indio_dev, in meson_sar_adc_read_raw_sample() argument
347 struct meson_sar_adc_priv *priv = iio_priv(indio_dev); in meson_sar_adc_read_raw_sample()
354 count = meson_sar_adc_get_fifo_count(indio_dev); in meson_sar_adc_read_raw_sample()
356 dev_err(&indio_dev->dev, in meson_sar_adc_read_raw_sample()
364 dev_err(&indio_dev->dev, in meson_sar_adc_read_raw_sample()
372 *val = meson_sar_adc_calib_val(indio_dev, fifo_val); in meson_sar_adc_read_raw_sample()
377 static void meson_sar_adc_set_averaging(struct iio_dev *indio_dev, in meson_sar_adc_set_averaging() argument
382 struct meson_sar_adc_priv *priv = iio_priv(indio_dev); in meson_sar_adc_set_averaging()
395 static void meson_sar_adc_enable_channel(struct iio_dev *indio_dev, in meson_sar_adc_enable_channel() argument
398 struct meson_sar_adc_priv *priv = iio_priv(indio_dev); in meson_sar_adc_enable_channel()
440 static void meson_sar_adc_set_chan7_mux(struct iio_dev *indio_dev, in meson_sar_adc_set_chan7_mux() argument
443 struct meson_sar_adc_priv *priv = iio_priv(indio_dev); in meson_sar_adc_set_chan7_mux()
453 static void meson_sar_adc_start_sample_engine(struct iio_dev *indio_dev) in meson_sar_adc_start_sample_engine() argument
455 struct meson_sar_adc_priv *priv = iio_priv(indio_dev); in meson_sar_adc_start_sample_engine()
472 static void meson_sar_adc_stop_sample_engine(struct iio_dev *indio_dev) in meson_sar_adc_stop_sample_engine() argument
474 struct meson_sar_adc_priv *priv = iio_priv(indio_dev); in meson_sar_adc_stop_sample_engine()
484 meson_sar_adc_wait_busy_clear(indio_dev); in meson_sar_adc_stop_sample_engine()
490 static int meson_sar_adc_lock(struct iio_dev *indio_dev) in meson_sar_adc_lock() argument
492 struct meson_sar_adc_priv *priv = iio_priv(indio_dev); in meson_sar_adc_lock()
495 mutex_lock(&indio_dev->mlock); in meson_sar_adc_lock()
513 mutex_unlock(&indio_dev->mlock); in meson_sar_adc_lock()
521 static void meson_sar_adc_unlock(struct iio_dev *indio_dev) in meson_sar_adc_unlock() argument
523 struct meson_sar_adc_priv *priv = iio_priv(indio_dev); in meson_sar_adc_unlock()
530 mutex_unlock(&indio_dev->mlock); in meson_sar_adc_unlock()
533 static void meson_sar_adc_clear_fifo(struct iio_dev *indio_dev) in meson_sar_adc_clear_fifo() argument
535 struct meson_sar_adc_priv *priv = iio_priv(indio_dev); in meson_sar_adc_clear_fifo()
539 if (!meson_sar_adc_get_fifo_count(indio_dev)) in meson_sar_adc_clear_fifo()
546 static int meson_sar_adc_get_sample(struct iio_dev *indio_dev, in meson_sar_adc_get_sample() argument
552 struct meson_sar_adc_priv *priv = iio_priv(indio_dev); in meson_sar_adc_get_sample()
558 ret = meson_sar_adc_lock(indio_dev); in meson_sar_adc_get_sample()
563 meson_sar_adc_clear_fifo(indio_dev); in meson_sar_adc_get_sample()
565 meson_sar_adc_set_averaging(indio_dev, chan, avg_mode, avg_samples); in meson_sar_adc_get_sample()
567 meson_sar_adc_enable_channel(indio_dev, chan); in meson_sar_adc_get_sample()
569 meson_sar_adc_start_sample_engine(indio_dev); in meson_sar_adc_get_sample()
570 ret = meson_sar_adc_read_raw_sample(indio_dev, chan, val); in meson_sar_adc_get_sample()
571 meson_sar_adc_stop_sample_engine(indio_dev); in meson_sar_adc_get_sample()
573 meson_sar_adc_unlock(indio_dev); in meson_sar_adc_get_sample()
576 dev_warn(indio_dev->dev.parent, in meson_sar_adc_get_sample()
585 static int meson_sar_adc_iio_info_read_raw(struct iio_dev *indio_dev, in meson_sar_adc_iio_info_read_raw() argument
589 struct meson_sar_adc_priv *priv = iio_priv(indio_dev); in meson_sar_adc_iio_info_read_raw()
594 return meson_sar_adc_get_sample(indio_dev, chan, NO_AVERAGING, in meson_sar_adc_iio_info_read_raw()
598 return meson_sar_adc_get_sample(indio_dev, chan, in meson_sar_adc_iio_info_read_raw()
606 dev_err(indio_dev->dev.parent, in meson_sar_adc_iio_info_read_raw()
649 static int meson_sar_adc_clk_init(struct iio_dev *indio_dev, in meson_sar_adc_clk_init() argument
652 struct meson_sar_adc_priv *priv = iio_priv(indio_dev); in meson_sar_adc_clk_init()
656 init.name = devm_kasprintf(&indio_dev->dev, GFP_KERNEL, "%s#adc_div", in meson_sar_adc_clk_init()
657 dev_name(indio_dev->dev.parent)); in meson_sar_adc_clk_init()
673 priv->adc_div_clk = devm_clk_register(&indio_dev->dev, in meson_sar_adc_clk_init()
678 init.name = devm_kasprintf(&indio_dev->dev, GFP_KERNEL, "%s#adc_en", in meson_sar_adc_clk_init()
679 dev_name(indio_dev->dev.parent)); in meson_sar_adc_clk_init()
693 priv->adc_clk = devm_clk_register(&indio_dev->dev, &priv->clk_gate.hw); in meson_sar_adc_clk_init()
700 static int meson_sar_adc_temp_sensor_init(struct iio_dev *indio_dev) in meson_sar_adc_temp_sensor_init() argument
702 struct meson_sar_adc_priv *priv = iio_priv(indio_dev); in meson_sar_adc_temp_sensor_init()
708 temperature_calib = devm_nvmem_cell_get(indio_dev->dev.parent, in meson_sar_adc_temp_sensor_init()
720 return dev_err_probe(indio_dev->dev.parent, ret, in meson_sar_adc_temp_sensor_init()
725 syscon_regmap_lookup_by_phandle(indio_dev->dev.parent->of_node, in meson_sar_adc_temp_sensor_init()
728 dev_err(indio_dev->dev.parent, in meson_sar_adc_temp_sensor_init()
736 dev_err(indio_dev->dev.parent, in meson_sar_adc_temp_sensor_init()
741 dev_err(indio_dev->dev.parent, in meson_sar_adc_temp_sensor_init()
765 static int meson_sar_adc_init(struct iio_dev *indio_dev) in meson_sar_adc_init() argument
767 struct meson_sar_adc_priv *priv = iio_priv(indio_dev); in meson_sar_adc_init()
774 meson_sar_adc_set_chan7_mux(indio_dev, CHAN7_MUX_CH7_INPUT); in meson_sar_adc_init()
787 meson_sar_adc_stop_sample_engine(indio_dev); in meson_sar_adc_init()
892 dev_err(indio_dev->dev.parent, in meson_sar_adc_init()
899 dev_err(indio_dev->dev.parent, in meson_sar_adc_init()
907 static void meson_sar_adc_set_bandgap(struct iio_dev *indio_dev, bool on_off) in meson_sar_adc_set_bandgap() argument
909 struct meson_sar_adc_priv *priv = iio_priv(indio_dev); in meson_sar_adc_set_bandgap()
922 static int meson_sar_adc_hw_enable(struct iio_dev *indio_dev) in meson_sar_adc_hw_enable() argument
924 struct meson_sar_adc_priv *priv = iio_priv(indio_dev); in meson_sar_adc_hw_enable()
928 ret = meson_sar_adc_lock(indio_dev); in meson_sar_adc_hw_enable()
934 dev_err(indio_dev->dev.parent, in meson_sar_adc_hw_enable()
941 dev_err(indio_dev->dev.parent, "failed to enable core clk\n"); in meson_sar_adc_hw_enable()
949 meson_sar_adc_set_bandgap(indio_dev, true); in meson_sar_adc_hw_enable()
959 dev_err(indio_dev->dev.parent, "failed to enable adc clk\n"); in meson_sar_adc_hw_enable()
963 meson_sar_adc_unlock(indio_dev); in meson_sar_adc_hw_enable()
970 meson_sar_adc_set_bandgap(indio_dev, false); in meson_sar_adc_hw_enable()
975 meson_sar_adc_unlock(indio_dev); in meson_sar_adc_hw_enable()
980 static int meson_sar_adc_hw_disable(struct iio_dev *indio_dev) in meson_sar_adc_hw_disable() argument
982 struct meson_sar_adc_priv *priv = iio_priv(indio_dev); in meson_sar_adc_hw_disable()
985 ret = meson_sar_adc_lock(indio_dev); in meson_sar_adc_hw_disable()
994 meson_sar_adc_set_bandgap(indio_dev, false); in meson_sar_adc_hw_disable()
1000 meson_sar_adc_unlock(indio_dev); in meson_sar_adc_hw_disable()
1007 struct iio_dev *indio_dev = data; in meson_sar_adc_irq() local
1008 struct meson_sar_adc_priv *priv = iio_priv(indio_dev); in meson_sar_adc_irq()
1024 static int meson_sar_adc_calib(struct iio_dev *indio_dev) in meson_sar_adc_calib() argument
1026 struct meson_sar_adc_priv *priv = iio_priv(indio_dev); in meson_sar_adc_calib()
1033 meson_sar_adc_set_chan7_mux(indio_dev, CHAN7_MUX_VDD_DIV4); in meson_sar_adc_calib()
1035 ret = meson_sar_adc_get_sample(indio_dev, in meson_sar_adc_calib()
1036 &indio_dev->channels[7], in meson_sar_adc_calib()
1041 meson_sar_adc_set_chan7_mux(indio_dev, CHAN7_MUX_VDD_MUL3_DIV4); in meson_sar_adc_calib()
1043 ret = meson_sar_adc_get_sample(indio_dev, in meson_sar_adc_calib()
1044 &indio_dev->channels[7], in meson_sar_adc_calib()
1060 meson_sar_adc_set_chan7_mux(indio_dev, CHAN7_MUX_CH7_INPUT); in meson_sar_adc_calib()
1189 struct iio_dev *indio_dev; in meson_sar_adc_probe() local
1193 indio_dev = devm_iio_device_alloc(&pdev->dev, sizeof(*priv)); in meson_sar_adc_probe()
1194 if (!indio_dev) { in meson_sar_adc_probe()
1199 priv = iio_priv(indio_dev); in meson_sar_adc_probe()
1210 indio_dev->name = match_data->name; in meson_sar_adc_probe()
1211 indio_dev->modes = INDIO_DIRECT_MODE; in meson_sar_adc_probe()
1212 indio_dev->info = &meson_sar_adc_iio_info; in meson_sar_adc_probe()
1228 dev_name(&pdev->dev), indio_dev); in meson_sar_adc_probe()
1266 ret = meson_sar_adc_clk_init(indio_dev, base); in meson_sar_adc_probe()
1280 ret = meson_sar_adc_temp_sensor_init(indio_dev); in meson_sar_adc_probe()
1286 indio_dev->channels = meson_sar_adc_and_temp_iio_channels; in meson_sar_adc_probe()
1287 indio_dev->num_channels = in meson_sar_adc_probe()
1290 indio_dev->channels = meson_sar_adc_iio_channels; in meson_sar_adc_probe()
1291 indio_dev->num_channels = in meson_sar_adc_probe()
1295 ret = meson_sar_adc_init(indio_dev); in meson_sar_adc_probe()
1299 ret = meson_sar_adc_hw_enable(indio_dev); in meson_sar_adc_probe()
1303 ret = meson_sar_adc_calib(indio_dev); in meson_sar_adc_probe()
1307 platform_set_drvdata(pdev, indio_dev); in meson_sar_adc_probe()
1309 ret = iio_device_register(indio_dev); in meson_sar_adc_probe()
1316 meson_sar_adc_hw_disable(indio_dev); in meson_sar_adc_probe()
1323 struct iio_dev *indio_dev = platform_get_drvdata(pdev); in meson_sar_adc_remove() local
1325 iio_device_unregister(indio_dev); in meson_sar_adc_remove()
1327 return meson_sar_adc_hw_disable(indio_dev); in meson_sar_adc_remove()
1332 struct iio_dev *indio_dev = dev_get_drvdata(dev); in meson_sar_adc_suspend() local
1334 return meson_sar_adc_hw_disable(indio_dev); in meson_sar_adc_suspend()
1339 struct iio_dev *indio_dev = dev_get_drvdata(dev); in meson_sar_adc_resume() local
1341 return meson_sar_adc_hw_enable(indio_dev); in meson_sar_adc_resume()