Lines Matching refs:dln2
12 #include <linux/mfd/dln2.h>
22 #define DLN2_ADC_MOD_NAME "dln2-adc"
83 static void dln2_adc_add_demux(struct dln2_adc *dln2,
87 struct dln2_adc_demux_table *p = dln2->demux_count ?
88 &dln2->demux[dln2->demux_count - 1] : NULL;
93 } else if (dln2->demux_count < DLN2_ADC_MAX_CHANNELS) {
94 p = &dln2->demux[dln2->demux_count++];
101 static void dln2_adc_update_demux(struct dln2_adc *dln2)
105 struct iio_dev *indio_dev = platform_get_drvdata(dln2->pdev);
108 dln2->demux_count = 0;
113 dln2_adc_add_demux(dln2, 0, 0, 16);
114 dln2->ts_pad_offset = 0;
115 dln2->ts_pad_length = 0;
128 dln2_adc_add_demux(dln2, in_loc, out_loc, 2);
136 dln2->ts_pad_offset = out_loc;
137 dln2->ts_pad_length = ts_offset * sizeof(int64_t) - out_loc;
139 dln2->ts_pad_offset = 0;
140 dln2->ts_pad_length = 0;
144 static int dln2_adc_get_chan_count(struct dln2_adc *dln2)
147 u8 port = dln2->port;
151 ret = dln2_transfer(dln2->pdev, DLN2_ADC_GET_CHANNEL_COUNT,
154 dev_dbg(&dln2->pdev->dev, "Problem in %s\n", __func__);
163 static int dln2_adc_set_port_resolution(struct dln2_adc *dln2)
167 .port = dln2->port,
171 ret = dln2_transfer_tx(dln2->pdev, DLN2_ADC_SET_RESOLUTION,
174 dev_dbg(&dln2->pdev->dev, "Problem in %s\n", __func__);
179 static int dln2_adc_set_chan_enabled(struct dln2_adc *dln2,
184 .port = dln2->port,
189 ret = dln2_transfer_tx(dln2->pdev, cmd, &port_chan, sizeof(port_chan));
191 dev_dbg(&dln2->pdev->dev, "Problem in %s\n", __func__);
196 static int dln2_adc_set_port_enabled(struct dln2_adc *dln2, bool enable,
200 u8 port = dln2->port;
208 ret = dln2_transfer(dln2->pdev, cmd, &port, sizeof(port),
211 dev_dbg(&dln2->pdev->dev, "Problem in %s(%d)\n",
223 static int dln2_adc_set_chan_period(struct dln2_adc *dln2,
234 .port_chan.port = dln2->port,
240 ret = dln2_transfer_tx(dln2->pdev, DLN2_ADC_CHANNEL_SET_CFG,
243 dev_dbg(&dln2->pdev->dev, "Problem in %s\n", __func__);
248 static int dln2_adc_read(struct dln2_adc *dln2, unsigned int channel)
255 .port = dln2->port,
259 ret = dln2_adc_set_chan_enabled(dln2, channel, true);
263 ret = dln2_adc_set_port_enabled(dln2, true, &conflict);
266 dev_err(&dln2->pdev->dev,
279 ret = dln2_transfer(dln2->pdev, DLN2_ADC_CHANNEL_GET_VAL,
283 dev_dbg(&dln2->pdev->dev, "Problem in %s\n", __func__);
295 dln2_adc_set_port_enabled(dln2, false, NULL);
297 dln2_adc_set_chan_enabled(dln2, channel, false);
302 static int dln2_adc_read_all(struct dln2_adc *dln2,
306 __u8 port = dln2->port;
309 ret = dln2_transfer(dln2->pdev, DLN2_ADC_CHANNEL_GET_ALL_VAL,
312 dev_dbg(&dln2->pdev->dev, "Problem in %s\n", __func__);
329 struct dln2_adc *dln2 = iio_priv(indio_dev);
337 mutex_lock(&dln2->mutex);
338 ret = dln2_adc_read(dln2, chan->channel);
339 mutex_unlock(&dln2->mutex);
359 if (dln2->sample_period) {
360 microhertz = 1000000000 / dln2->sample_period;
383 struct dln2_adc *dln2 = iio_priv(indio_dev);
389 mutex_lock(&dln2->mutex);
391 dln2->sample_period =
393 if (dln2->sample_period > 65535) {
394 dln2->sample_period = 65535;
395 dev_warn(&dln2->pdev->dev,
406 if (dln2->trigger_chan != -1)
407 ret = dln2_adc_set_chan_period(dln2,
408 dln2->trigger_chan, dln2->sample_period);
412 mutex_unlock(&dln2->mutex);
424 struct dln2_adc *dln2 = iio_priv(indio_dev);
428 mutex_lock(&dln2->mutex);
431 ret = dln2_adc_set_chan_enabled(dln2, i,
435 dln2_adc_set_chan_enabled(dln2, j, false);
436 mutex_unlock(&dln2->mutex);
437 dev_err(&dln2->pdev->dev,
443 dln2_adc_update_demux(dln2);
445 mutex_unlock(&dln2->mutex);
489 struct dln2_adc *dln2 = iio_priv(indio_dev);
493 mutex_lock(&dln2->mutex);
494 ret = dln2_adc_read_all(dln2, &dev_data);
495 mutex_unlock(&dln2->mutex);
500 for (i = 0; i < dln2->demux_count; ++i) {
501 t = &dln2->demux[i];
507 if (dln2->ts_pad_length)
508 memset((void *)data.values + dln2->ts_pad_offset,
509 0, dln2->ts_pad_length);
522 struct dln2_adc *dln2 = iio_priv(indio_dev);
526 mutex_lock(&dln2->mutex);
529 ret = dln2_adc_set_port_enabled(dln2, true, &conflict);
531 mutex_unlock(&dln2->mutex);
532 dev_dbg(&dln2->pdev->dev, "Problem in %s\n", __func__);
534 dev_err(&dln2->pdev->dev,
546 dln2->trigger_chan = trigger_chan;
547 ret = dln2_adc_set_chan_period(dln2, dln2->trigger_chan,
548 dln2->sample_period);
549 mutex_unlock(&dln2->mutex);
551 dev_dbg(&dln2->pdev->dev, "Problem in %s\n", __func__);
555 dln2->trigger_chan = -1;
556 mutex_unlock(&dln2->mutex);
565 struct dln2_adc *dln2 = iio_priv(indio_dev);
567 mutex_lock(&dln2->mutex);
570 if (dln2->trigger_chan != -1) {
571 dln2_adc_set_chan_period(dln2, dln2->trigger_chan, 0);
572 dln2->trigger_chan = -1;
576 ret = dln2_adc_set_port_enabled(dln2, false, NULL);
578 mutex_unlock(&dln2->mutex);
580 dev_dbg(&dln2->pdev->dev, "Problem in %s\n", __func__);
594 struct dln2_adc *dln2 = iio_priv(indio_dev);
597 iio_trigger_poll(dln2->trig);
603 struct dln2_adc *dln2;
608 indio_dev = devm_iio_device_alloc(dev, sizeof(*dln2));
614 dln2 = iio_priv(indio_dev);
615 dln2->pdev = pdev;
616 dln2->port = pdata->port;
617 dln2->trigger_chan = -1;
618 mutex_init(&dln2->mutex);
622 ret = dln2_adc_set_port_resolution(dln2);
628 chans = dln2_adc_get_chan_count(dln2);
640 DLN2_ADC_CHAN(dln2->iio_channels[i], i)
641 IIO_CHAN_SOFT_TIMESTAMP_ASSIGN(dln2->iio_channels[i], i);
646 indio_dev->channels = dln2->iio_channels;
650 dln2->trig = devm_iio_trigger_alloc(dev, "%s-dev%d",
652 if (!dln2->trig) {
656 iio_trigger_set_drvdata(dln2->trig, dln2);
657 ret = devm_iio_trigger_register(dev, dln2->trig);
662 iio_trigger_set_immutable(indio_dev, dln2->trig);
713 MODULE_ALIAS("platform:dln2-adc");