Lines Matching refs:dln2

83 static void dln2_adc_add_demux(struct dln2_adc *dln2,  in dln2_adc_add_demux()  argument
87 struct dln2_adc_demux_table *p = dln2->demux_count ? in dln2_adc_add_demux()
88 &dln2->demux[dln2->demux_count - 1] : NULL; in dln2_adc_add_demux()
93 } else if (dln2->demux_count < DLN2_ADC_MAX_CHANNELS) { in dln2_adc_add_demux()
94 p = &dln2->demux[dln2->demux_count++]; in dln2_adc_add_demux()
101 static void dln2_adc_update_demux(struct dln2_adc *dln2) in dln2_adc_update_demux() argument
105 struct iio_dev *indio_dev = platform_get_drvdata(dln2->pdev); in dln2_adc_update_demux()
108 dln2->demux_count = 0; in dln2_adc_update_demux()
113 dln2_adc_add_demux(dln2, 0, 0, 16); in dln2_adc_update_demux()
114 dln2->ts_pad_offset = 0; in dln2_adc_update_demux()
115 dln2->ts_pad_length = 0; in dln2_adc_update_demux()
128 dln2_adc_add_demux(dln2, in_loc, out_loc, 2); in dln2_adc_update_demux()
136 dln2->ts_pad_offset = out_loc; in dln2_adc_update_demux()
137 dln2->ts_pad_length = ts_offset * sizeof(int64_t) - out_loc; in dln2_adc_update_demux()
139 dln2->ts_pad_offset = 0; in dln2_adc_update_demux()
140 dln2->ts_pad_length = 0; in dln2_adc_update_demux()
144 static int dln2_adc_get_chan_count(struct dln2_adc *dln2) in dln2_adc_get_chan_count() argument
147 u8 port = dln2->port; in dln2_adc_get_chan_count()
151 ret = dln2_transfer(dln2->pdev, DLN2_ADC_GET_CHANNEL_COUNT, in dln2_adc_get_chan_count()
154 dev_dbg(&dln2->pdev->dev, "Problem in %s\n", __func__); in dln2_adc_get_chan_count()
163 static int dln2_adc_set_port_resolution(struct dln2_adc *dln2) in dln2_adc_set_port_resolution() argument
167 .port = dln2->port, in dln2_adc_set_port_resolution()
171 ret = dln2_transfer_tx(dln2->pdev, DLN2_ADC_SET_RESOLUTION, in dln2_adc_set_port_resolution()
174 dev_dbg(&dln2->pdev->dev, "Problem in %s\n", __func__); in dln2_adc_set_port_resolution()
179 static int dln2_adc_set_chan_enabled(struct dln2_adc *dln2, in dln2_adc_set_chan_enabled() argument
184 .port = dln2->port, in dln2_adc_set_chan_enabled()
189 ret = dln2_transfer_tx(dln2->pdev, cmd, &port_chan, sizeof(port_chan)); in dln2_adc_set_chan_enabled()
191 dev_dbg(&dln2->pdev->dev, "Problem in %s\n", __func__); in dln2_adc_set_chan_enabled()
196 static int dln2_adc_set_port_enabled(struct dln2_adc *dln2, bool enable, in dln2_adc_set_port_enabled() argument
200 u8 port = dln2->port; in dln2_adc_set_port_enabled()
208 ret = dln2_transfer(dln2->pdev, cmd, &port, sizeof(port), in dln2_adc_set_port_enabled()
211 dev_dbg(&dln2->pdev->dev, "Problem in %s(%d)\n", in dln2_adc_set_port_enabled()
223 static int dln2_adc_set_chan_period(struct dln2_adc *dln2, in dln2_adc_set_chan_period() argument
234 .port_chan.port = dln2->port, in dln2_adc_set_chan_period()
240 ret = dln2_transfer_tx(dln2->pdev, DLN2_ADC_CHANNEL_SET_CFG, in dln2_adc_set_chan_period()
243 dev_dbg(&dln2->pdev->dev, "Problem in %s\n", __func__); in dln2_adc_set_chan_period()
248 static int dln2_adc_read(struct dln2_adc *dln2, unsigned int channel) in dln2_adc_read() argument
251 struct iio_dev *indio_dev = platform_get_drvdata(dln2->pdev); in dln2_adc_read()
256 .port = dln2->port, in dln2_adc_read()
264 ret = dln2_adc_set_chan_enabled(dln2, channel, true); in dln2_adc_read()
268 ret = dln2_adc_set_port_enabled(dln2, true, &conflict); in dln2_adc_read()
271 dev_err(&dln2->pdev->dev, in dln2_adc_read()
284 ret = dln2_transfer(dln2->pdev, DLN2_ADC_CHANNEL_GET_VAL, in dln2_adc_read()
288 dev_dbg(&dln2->pdev->dev, "Problem in %s\n", __func__); in dln2_adc_read()
300 dln2_adc_set_port_enabled(dln2, false, NULL); in dln2_adc_read()
302 dln2_adc_set_chan_enabled(dln2, channel, false); in dln2_adc_read()
309 static int dln2_adc_read_all(struct dln2_adc *dln2, in dln2_adc_read_all() argument
313 __u8 port = dln2->port; in dln2_adc_read_all()
316 ret = dln2_transfer(dln2->pdev, DLN2_ADC_CHANNEL_GET_ALL_VAL, in dln2_adc_read_all()
319 dev_dbg(&dln2->pdev->dev, "Problem in %s\n", __func__); in dln2_adc_read_all()
336 struct dln2_adc *dln2 = iio_priv(indio_dev); in dln2_adc_read_raw() local
340 mutex_lock(&dln2->mutex); in dln2_adc_read_raw()
341 ret = dln2_adc_read(dln2, chan->channel); in dln2_adc_read_raw()
342 mutex_unlock(&dln2->mutex); in dln2_adc_read_raw()
360 if (dln2->sample_period) { in dln2_adc_read_raw()
361 microhertz = 1000000000 / dln2->sample_period; in dln2_adc_read_raw()
384 struct dln2_adc *dln2 = iio_priv(indio_dev); in dln2_adc_write_raw() local
390 mutex_lock(&dln2->mutex); in dln2_adc_write_raw()
392 dln2->sample_period = in dln2_adc_write_raw()
394 if (dln2->sample_period > 65535) { in dln2_adc_write_raw()
395 dln2->sample_period = 65535; in dln2_adc_write_raw()
396 dev_warn(&dln2->pdev->dev, in dln2_adc_write_raw()
407 if (dln2->trigger_chan != -1) in dln2_adc_write_raw()
408 ret = dln2_adc_set_chan_period(dln2, in dln2_adc_write_raw()
409 dln2->trigger_chan, dln2->sample_period); in dln2_adc_write_raw()
413 mutex_unlock(&dln2->mutex); in dln2_adc_write_raw()
425 struct dln2_adc *dln2 = iio_priv(indio_dev); in dln2_update_scan_mode() local
429 mutex_lock(&dln2->mutex); in dln2_update_scan_mode()
432 ret = dln2_adc_set_chan_enabled(dln2, i, in dln2_update_scan_mode()
436 dln2_adc_set_chan_enabled(dln2, j, false); in dln2_update_scan_mode()
437 mutex_unlock(&dln2->mutex); in dln2_update_scan_mode()
438 dev_err(&dln2->pdev->dev, in dln2_update_scan_mode()
444 dln2_adc_update_demux(dln2); in dln2_update_scan_mode()
446 mutex_unlock(&dln2->mutex); in dln2_update_scan_mode()
490 struct dln2_adc *dln2 = iio_priv(indio_dev); in dln2_adc_trigger_h() local
494 mutex_lock(&dln2->mutex); in dln2_adc_trigger_h()
495 ret = dln2_adc_read_all(dln2, &dev_data); in dln2_adc_trigger_h()
496 mutex_unlock(&dln2->mutex); in dln2_adc_trigger_h()
501 for (i = 0; i < dln2->demux_count; ++i) { in dln2_adc_trigger_h()
502 t = &dln2->demux[i]; in dln2_adc_trigger_h()
508 if (dln2->ts_pad_length) in dln2_adc_trigger_h()
509 memset((void *)data.values + dln2->ts_pad_offset, in dln2_adc_trigger_h()
510 0, dln2->ts_pad_length); in dln2_adc_trigger_h()
523 struct dln2_adc *dln2 = iio_priv(indio_dev); in dln2_adc_triggered_buffer_postenable() local
527 mutex_lock(&dln2->mutex); in dln2_adc_triggered_buffer_postenable()
530 ret = dln2_adc_set_port_enabled(dln2, true, &conflict); in dln2_adc_triggered_buffer_postenable()
532 mutex_unlock(&dln2->mutex); in dln2_adc_triggered_buffer_postenable()
533 dev_dbg(&dln2->pdev->dev, "Problem in %s\n", __func__); in dln2_adc_triggered_buffer_postenable()
535 dev_err(&dln2->pdev->dev, in dln2_adc_triggered_buffer_postenable()
547 dln2->trigger_chan = trigger_chan; in dln2_adc_triggered_buffer_postenable()
548 ret = dln2_adc_set_chan_period(dln2, dln2->trigger_chan, in dln2_adc_triggered_buffer_postenable()
549 dln2->sample_period); in dln2_adc_triggered_buffer_postenable()
550 mutex_unlock(&dln2->mutex); in dln2_adc_triggered_buffer_postenable()
552 dev_dbg(&dln2->pdev->dev, "Problem in %s\n", __func__); in dln2_adc_triggered_buffer_postenable()
556 dln2->trigger_chan = -1; in dln2_adc_triggered_buffer_postenable()
557 mutex_unlock(&dln2->mutex); in dln2_adc_triggered_buffer_postenable()
566 struct dln2_adc *dln2 = iio_priv(indio_dev); in dln2_adc_triggered_buffer_predisable() local
568 mutex_lock(&dln2->mutex); in dln2_adc_triggered_buffer_predisable()
571 if (dln2->trigger_chan != -1) { in dln2_adc_triggered_buffer_predisable()
572 dln2_adc_set_chan_period(dln2, dln2->trigger_chan, 0); in dln2_adc_triggered_buffer_predisable()
573 dln2->trigger_chan = -1; in dln2_adc_triggered_buffer_predisable()
577 ret = dln2_adc_set_port_enabled(dln2, false, NULL); in dln2_adc_triggered_buffer_predisable()
579 mutex_unlock(&dln2->mutex); in dln2_adc_triggered_buffer_predisable()
581 dev_dbg(&dln2->pdev->dev, "Problem in %s\n", __func__); in dln2_adc_triggered_buffer_predisable()
595 struct dln2_adc *dln2 = iio_priv(indio_dev); in dln2_adc_event() local
598 iio_trigger_poll(dln2->trig); in dln2_adc_event()
604 struct dln2_adc *dln2; in dln2_adc_probe() local
609 indio_dev = devm_iio_device_alloc(dev, sizeof(*dln2)); in dln2_adc_probe()
615 dln2 = iio_priv(indio_dev); in dln2_adc_probe()
616 dln2->pdev = pdev; in dln2_adc_probe()
617 dln2->port = pdata->port; in dln2_adc_probe()
618 dln2->trigger_chan = -1; in dln2_adc_probe()
619 mutex_init(&dln2->mutex); in dln2_adc_probe()
623 ret = dln2_adc_set_port_resolution(dln2); in dln2_adc_probe()
629 chans = dln2_adc_get_chan_count(dln2); in dln2_adc_probe()
641 DLN2_ADC_CHAN(dln2->iio_channels[i], i) in dln2_adc_probe()
642 IIO_CHAN_SOFT_TIMESTAMP_ASSIGN(dln2->iio_channels[i], i); in dln2_adc_probe()
647 indio_dev->channels = dln2->iio_channels; in dln2_adc_probe()
651 dln2->trig = devm_iio_trigger_alloc(dev, "%s-dev%d", in dln2_adc_probe()
654 if (!dln2->trig) { in dln2_adc_probe()
658 iio_trigger_set_drvdata(dln2->trig, dln2); in dln2_adc_probe()
659 devm_iio_trigger_register(dev, dln2->trig); in dln2_adc_probe()
660 iio_trigger_set_immutable(indio_dev, dln2->trig); in dln2_adc_probe()