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()
599 return meson_sar_adc_get_sample(indio_dev, chan, in meson_sar_adc_iio_info_read_raw()
608 dev_err(indio_dev->dev.parent, in meson_sar_adc_iio_info_read_raw()
651 static int meson_sar_adc_clk_init(struct iio_dev *indio_dev, in meson_sar_adc_clk_init() argument
654 struct meson_sar_adc_priv *priv = iio_priv(indio_dev); in meson_sar_adc_clk_init()
658 init.name = devm_kasprintf(&indio_dev->dev, GFP_KERNEL, "%s#adc_div", in meson_sar_adc_clk_init()
659 dev_name(indio_dev->dev.parent)); in meson_sar_adc_clk_init()
675 priv->adc_div_clk = devm_clk_register(&indio_dev->dev, in meson_sar_adc_clk_init()
680 init.name = devm_kasprintf(&indio_dev->dev, GFP_KERNEL, "%s#adc_en", in meson_sar_adc_clk_init()
681 dev_name(indio_dev->dev.parent)); in meson_sar_adc_clk_init()
695 priv->adc_clk = devm_clk_register(&indio_dev->dev, &priv->clk_gate.hw); in meson_sar_adc_clk_init()
702 static int meson_sar_adc_temp_sensor_init(struct iio_dev *indio_dev) in meson_sar_adc_temp_sensor_init() argument
704 struct meson_sar_adc_priv *priv = iio_priv(indio_dev); in meson_sar_adc_temp_sensor_init()
710 temperature_calib = devm_nvmem_cell_get(indio_dev->dev.parent, in meson_sar_adc_temp_sensor_init()
722 return dev_err_probe(indio_dev->dev.parent, ret, in meson_sar_adc_temp_sensor_init()
727 syscon_regmap_lookup_by_phandle(indio_dev->dev.parent->of_node, in meson_sar_adc_temp_sensor_init()
730 dev_err(indio_dev->dev.parent, in meson_sar_adc_temp_sensor_init()
738 dev_err(indio_dev->dev.parent, in meson_sar_adc_temp_sensor_init()
743 dev_err(indio_dev->dev.parent, in meson_sar_adc_temp_sensor_init()
767 static int meson_sar_adc_init(struct iio_dev *indio_dev) in meson_sar_adc_init() argument
769 struct meson_sar_adc_priv *priv = iio_priv(indio_dev); in meson_sar_adc_init()
776 meson_sar_adc_set_chan7_mux(indio_dev, CHAN7_MUX_CH7_INPUT); in meson_sar_adc_init()
789 meson_sar_adc_stop_sample_engine(indio_dev); in meson_sar_adc_init()
894 dev_err(indio_dev->dev.parent, in meson_sar_adc_init()
901 dev_err(indio_dev->dev.parent, in meson_sar_adc_init()
909 static void meson_sar_adc_set_bandgap(struct iio_dev *indio_dev, bool on_off) in meson_sar_adc_set_bandgap() argument
911 struct meson_sar_adc_priv *priv = iio_priv(indio_dev); in meson_sar_adc_set_bandgap()
924 static int meson_sar_adc_hw_enable(struct iio_dev *indio_dev) in meson_sar_adc_hw_enable() argument
926 struct meson_sar_adc_priv *priv = iio_priv(indio_dev); in meson_sar_adc_hw_enable()
930 ret = meson_sar_adc_lock(indio_dev); in meson_sar_adc_hw_enable()
936 dev_err(indio_dev->dev.parent, in meson_sar_adc_hw_enable()
943 dev_err(indio_dev->dev.parent, "failed to enable core clk\n"); in meson_sar_adc_hw_enable()
951 meson_sar_adc_set_bandgap(indio_dev, true); in meson_sar_adc_hw_enable()
961 dev_err(indio_dev->dev.parent, "failed to enable adc clk\n"); in meson_sar_adc_hw_enable()
965 meson_sar_adc_unlock(indio_dev); in meson_sar_adc_hw_enable()
972 meson_sar_adc_set_bandgap(indio_dev, false); in meson_sar_adc_hw_enable()
977 meson_sar_adc_unlock(indio_dev); in meson_sar_adc_hw_enable()
982 static int meson_sar_adc_hw_disable(struct iio_dev *indio_dev) in meson_sar_adc_hw_disable() argument
984 struct meson_sar_adc_priv *priv = iio_priv(indio_dev); in meson_sar_adc_hw_disable()
987 ret = meson_sar_adc_lock(indio_dev); in meson_sar_adc_hw_disable()
996 meson_sar_adc_set_bandgap(indio_dev, false); in meson_sar_adc_hw_disable()
1002 meson_sar_adc_unlock(indio_dev); in meson_sar_adc_hw_disable()
1009 struct iio_dev *indio_dev = data; in meson_sar_adc_irq() local
1010 struct meson_sar_adc_priv *priv = iio_priv(indio_dev); in meson_sar_adc_irq()
1026 static int meson_sar_adc_calib(struct iio_dev *indio_dev) in meson_sar_adc_calib() argument
1028 struct meson_sar_adc_priv *priv = iio_priv(indio_dev); in meson_sar_adc_calib()
1035 meson_sar_adc_set_chan7_mux(indio_dev, CHAN7_MUX_VDD_DIV4); in meson_sar_adc_calib()
1037 ret = meson_sar_adc_get_sample(indio_dev, in meson_sar_adc_calib()
1038 &indio_dev->channels[7], in meson_sar_adc_calib()
1043 meson_sar_adc_set_chan7_mux(indio_dev, CHAN7_MUX_VDD_MUL3_DIV4); in meson_sar_adc_calib()
1045 ret = meson_sar_adc_get_sample(indio_dev, in meson_sar_adc_calib()
1046 &indio_dev->channels[7], in meson_sar_adc_calib()
1062 meson_sar_adc_set_chan7_mux(indio_dev, CHAN7_MUX_CH7_INPUT); in meson_sar_adc_calib()
1183 struct iio_dev *indio_dev; in meson_sar_adc_probe() local
1187 indio_dev = devm_iio_device_alloc(&pdev->dev, sizeof(*priv)); in meson_sar_adc_probe()
1188 if (!indio_dev) { in meson_sar_adc_probe()
1193 priv = iio_priv(indio_dev); in meson_sar_adc_probe()
1204 indio_dev->name = match_data->name; in meson_sar_adc_probe()
1205 indio_dev->modes = INDIO_DIRECT_MODE; in meson_sar_adc_probe()
1206 indio_dev->info = &meson_sar_adc_iio_info; in meson_sar_adc_probe()
1222 dev_name(&pdev->dev), indio_dev); in meson_sar_adc_probe()
1260 ret = meson_sar_adc_clk_init(indio_dev, base); in meson_sar_adc_probe()
1274 ret = meson_sar_adc_temp_sensor_init(indio_dev); in meson_sar_adc_probe()
1280 indio_dev->channels = meson_sar_adc_and_temp_iio_channels; in meson_sar_adc_probe()
1281 indio_dev->num_channels = in meson_sar_adc_probe()
1284 indio_dev->channels = meson_sar_adc_iio_channels; in meson_sar_adc_probe()
1285 indio_dev->num_channels = in meson_sar_adc_probe()
1289 ret = meson_sar_adc_init(indio_dev); in meson_sar_adc_probe()
1293 ret = meson_sar_adc_hw_enable(indio_dev); in meson_sar_adc_probe()
1297 ret = meson_sar_adc_calib(indio_dev); in meson_sar_adc_probe()
1301 platform_set_drvdata(pdev, indio_dev); in meson_sar_adc_probe()
1303 ret = iio_device_register(indio_dev); in meson_sar_adc_probe()
1310 meson_sar_adc_hw_disable(indio_dev); in meson_sar_adc_probe()
1317 struct iio_dev *indio_dev = platform_get_drvdata(pdev); in meson_sar_adc_remove() local
1319 iio_device_unregister(indio_dev); in meson_sar_adc_remove()
1321 return meson_sar_adc_hw_disable(indio_dev); in meson_sar_adc_remove()
1326 struct iio_dev *indio_dev = dev_get_drvdata(dev); in meson_sar_adc_suspend() local
1328 return meson_sar_adc_hw_disable(indio_dev); in meson_sar_adc_suspend()
1333 struct iio_dev *indio_dev = dev_get_drvdata(dev); in meson_sar_adc_resume() local
1335 return meson_sar_adc_hw_enable(indio_dev); in meson_sar_adc_resume()