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
255 .port = dln2->port, in dln2_adc_read()
259 ret = dln2_adc_set_chan_enabled(dln2, channel, true); in dln2_adc_read()
263 ret = dln2_adc_set_port_enabled(dln2, true, &conflict); in dln2_adc_read()
266 dev_err(&dln2->pdev->dev, in dln2_adc_read()
279 ret = dln2_transfer(dln2->pdev, DLN2_ADC_CHANNEL_GET_VAL, in dln2_adc_read()
283 dev_dbg(&dln2->pdev->dev, "Problem in %s\n", __func__); in dln2_adc_read()
295 dln2_adc_set_port_enabled(dln2, false, NULL); in dln2_adc_read()
297 dln2_adc_set_chan_enabled(dln2, channel, false); in dln2_adc_read()
302 static int dln2_adc_read_all(struct dln2_adc *dln2, in dln2_adc_read_all() argument
306 __u8 port = dln2->port; in dln2_adc_read_all()
309 ret = dln2_transfer(dln2->pdev, DLN2_ADC_CHANNEL_GET_ALL_VAL, in dln2_adc_read_all()
312 dev_dbg(&dln2->pdev->dev, "Problem in %s\n", __func__); in dln2_adc_read_all()
329 struct dln2_adc *dln2 = iio_priv(indio_dev); in dln2_adc_read_raw() local
337 mutex_lock(&dln2->mutex); in dln2_adc_read_raw()
338 ret = dln2_adc_read(dln2, chan->channel); in dln2_adc_read_raw()
339 mutex_unlock(&dln2->mutex); in dln2_adc_read_raw()
359 if (dln2->sample_period) { in dln2_adc_read_raw()
360 microhertz = 1000000000 / dln2->sample_period; in dln2_adc_read_raw()
383 struct dln2_adc *dln2 = iio_priv(indio_dev); in dln2_adc_write_raw() local
389 mutex_lock(&dln2->mutex); in dln2_adc_write_raw()
391 dln2->sample_period = in dln2_adc_write_raw()
393 if (dln2->sample_period > 65535) { in dln2_adc_write_raw()
394 dln2->sample_period = 65535; in dln2_adc_write_raw()
395 dev_warn(&dln2->pdev->dev, in dln2_adc_write_raw()
406 if (dln2->trigger_chan != -1) in dln2_adc_write_raw()
407 ret = dln2_adc_set_chan_period(dln2, in dln2_adc_write_raw()
408 dln2->trigger_chan, dln2->sample_period); in dln2_adc_write_raw()
412 mutex_unlock(&dln2->mutex); in dln2_adc_write_raw()
424 struct dln2_adc *dln2 = iio_priv(indio_dev); in dln2_update_scan_mode() local
428 mutex_lock(&dln2->mutex); in dln2_update_scan_mode()
431 ret = dln2_adc_set_chan_enabled(dln2, i, in dln2_update_scan_mode()
435 dln2_adc_set_chan_enabled(dln2, j, false); in dln2_update_scan_mode()
436 mutex_unlock(&dln2->mutex); in dln2_update_scan_mode()
437 dev_err(&dln2->pdev->dev, in dln2_update_scan_mode()
443 dln2_adc_update_demux(dln2); in dln2_update_scan_mode()
445 mutex_unlock(&dln2->mutex); in dln2_update_scan_mode()
489 struct dln2_adc *dln2 = iio_priv(indio_dev); in dln2_adc_trigger_h() local
493 mutex_lock(&dln2->mutex); in dln2_adc_trigger_h()
494 ret = dln2_adc_read_all(dln2, &dev_data); in dln2_adc_trigger_h()
495 mutex_unlock(&dln2->mutex); in dln2_adc_trigger_h()
500 for (i = 0; i < dln2->demux_count; ++i) { in dln2_adc_trigger_h()
501 t = &dln2->demux[i]; in dln2_adc_trigger_h()
507 if (dln2->ts_pad_length) in dln2_adc_trigger_h()
508 memset((void *)data.values + dln2->ts_pad_offset, in dln2_adc_trigger_h()
509 0, dln2->ts_pad_length); in dln2_adc_trigger_h()
522 struct dln2_adc *dln2 = iio_priv(indio_dev); in dln2_adc_triggered_buffer_postenable() local
526 mutex_lock(&dln2->mutex); in dln2_adc_triggered_buffer_postenable()
529 ret = dln2_adc_set_port_enabled(dln2, true, &conflict); in dln2_adc_triggered_buffer_postenable()
531 mutex_unlock(&dln2->mutex); in dln2_adc_triggered_buffer_postenable()
532 dev_dbg(&dln2->pdev->dev, "Problem in %s\n", __func__); in dln2_adc_triggered_buffer_postenable()
534 dev_err(&dln2->pdev->dev, in dln2_adc_triggered_buffer_postenable()
546 dln2->trigger_chan = trigger_chan; in dln2_adc_triggered_buffer_postenable()
547 ret = dln2_adc_set_chan_period(dln2, dln2->trigger_chan, in dln2_adc_triggered_buffer_postenable()
548 dln2->sample_period); in dln2_adc_triggered_buffer_postenable()
549 mutex_unlock(&dln2->mutex); in dln2_adc_triggered_buffer_postenable()
551 dev_dbg(&dln2->pdev->dev, "Problem in %s\n", __func__); in dln2_adc_triggered_buffer_postenable()
555 dln2->trigger_chan = -1; in dln2_adc_triggered_buffer_postenable()
556 mutex_unlock(&dln2->mutex); in dln2_adc_triggered_buffer_postenable()
565 struct dln2_adc *dln2 = iio_priv(indio_dev); in dln2_adc_triggered_buffer_predisable() local
567 mutex_lock(&dln2->mutex); in dln2_adc_triggered_buffer_predisable()
570 if (dln2->trigger_chan != -1) { in dln2_adc_triggered_buffer_predisable()
571 dln2_adc_set_chan_period(dln2, dln2->trigger_chan, 0); in dln2_adc_triggered_buffer_predisable()
572 dln2->trigger_chan = -1; in dln2_adc_triggered_buffer_predisable()
576 ret = dln2_adc_set_port_enabled(dln2, false, NULL); in dln2_adc_triggered_buffer_predisable()
578 mutex_unlock(&dln2->mutex); in dln2_adc_triggered_buffer_predisable()
580 dev_dbg(&dln2->pdev->dev, "Problem in %s\n", __func__); in dln2_adc_triggered_buffer_predisable()
594 struct dln2_adc *dln2 = iio_priv(indio_dev); in dln2_adc_event() local
597 iio_trigger_poll(dln2->trig); in dln2_adc_event()
603 struct dln2_adc *dln2; in dln2_adc_probe() local
608 indio_dev = devm_iio_device_alloc(dev, sizeof(*dln2)); in dln2_adc_probe()
614 dln2 = iio_priv(indio_dev); in dln2_adc_probe()
615 dln2->pdev = pdev; in dln2_adc_probe()
616 dln2->port = pdata->port; in dln2_adc_probe()
617 dln2->trigger_chan = -1; in dln2_adc_probe()
618 mutex_init(&dln2->mutex); in dln2_adc_probe()
622 ret = dln2_adc_set_port_resolution(dln2); in dln2_adc_probe()
628 chans = dln2_adc_get_chan_count(dln2); in dln2_adc_probe()
640 DLN2_ADC_CHAN(dln2->iio_channels[i], i) in dln2_adc_probe()
641 IIO_CHAN_SOFT_TIMESTAMP_ASSIGN(dln2->iio_channels[i], i); in dln2_adc_probe()
646 indio_dev->channels = dln2->iio_channels; in dln2_adc_probe()
650 dln2->trig = devm_iio_trigger_alloc(dev, "%s-dev%d", in dln2_adc_probe()
653 if (!dln2->trig) { in dln2_adc_probe()
657 iio_trigger_set_drvdata(dln2->trig, dln2); in dln2_adc_probe()
658 ret = devm_iio_trigger_register(dev, dln2->trig); in dln2_adc_probe()
663 iio_trigger_set_immutable(indio_dev, dln2->trig); in dln2_adc_probe()