1 // SPDX-License-Identifier: GPL-2.0-only
3 * AD5592R Digital <-> Analog converters driver
5 * Copyright 2014-2016 Analog Devices Inc.
6 * Author: Paul Cercueil <paul.cercueil@analog.com>
9 #include <linux/bitops.h>
10 #include <linux/delay.h>
11 #include <linux/iio/iio.h>
12 #include <linux/module.h>
13 #include <linux/mutex.h>
14 #include <linux/regulator/consumer.h>
15 #include <linux/gpio/consumer.h>
16 #include <linux/gpio/driver.h>
17 #include <linux/property.h>
19 #include <dt-bindings/iio/adi,ad5592r.h>
21 #include "ad5592r-base.h"
23 static int ad5592r_gpio_get(struct gpio_chip
*chip
, unsigned offset
)
25 struct ad5592r_state
*st
= gpiochip_get_data(chip
);
29 mutex_lock(&st
->gpio_lock
);
31 if (st
->gpio_out
& BIT(offset
))
34 ret
= st
->ops
->gpio_read(st
, &val
);
36 mutex_unlock(&st
->gpio_lock
);
41 return !!(val
& BIT(offset
));
44 static void ad5592r_gpio_set(struct gpio_chip
*chip
, unsigned offset
, int value
)
46 struct ad5592r_state
*st
= gpiochip_get_data(chip
);
48 mutex_lock(&st
->gpio_lock
);
51 st
->gpio_val
|= BIT(offset
);
53 st
->gpio_val
&= ~BIT(offset
);
55 st
->ops
->reg_write(st
, AD5592R_REG_GPIO_SET
, st
->gpio_val
);
57 mutex_unlock(&st
->gpio_lock
);
60 static int ad5592r_gpio_direction_input(struct gpio_chip
*chip
, unsigned offset
)
62 struct ad5592r_state
*st
= gpiochip_get_data(chip
);
65 mutex_lock(&st
->gpio_lock
);
67 st
->gpio_out
&= ~BIT(offset
);
68 st
->gpio_in
|= BIT(offset
);
70 ret
= st
->ops
->reg_write(st
, AD5592R_REG_GPIO_OUT_EN
, st
->gpio_out
);
74 ret
= st
->ops
->reg_write(st
, AD5592R_REG_GPIO_IN_EN
, st
->gpio_in
);
77 mutex_unlock(&st
->gpio_lock
);
82 static int ad5592r_gpio_direction_output(struct gpio_chip
*chip
,
83 unsigned offset
, int value
)
85 struct ad5592r_state
*st
= gpiochip_get_data(chip
);
88 mutex_lock(&st
->gpio_lock
);
91 st
->gpio_val
|= BIT(offset
);
93 st
->gpio_val
&= ~BIT(offset
);
95 st
->gpio_in
&= ~BIT(offset
);
96 st
->gpio_out
|= BIT(offset
);
98 ret
= st
->ops
->reg_write(st
, AD5592R_REG_GPIO_SET
, st
->gpio_val
);
102 ret
= st
->ops
->reg_write(st
, AD5592R_REG_GPIO_OUT_EN
, st
->gpio_out
);
106 ret
= st
->ops
->reg_write(st
, AD5592R_REG_GPIO_IN_EN
, st
->gpio_in
);
109 mutex_unlock(&st
->gpio_lock
);
114 static int ad5592r_gpio_request(struct gpio_chip
*chip
, unsigned offset
)
116 struct ad5592r_state
*st
= gpiochip_get_data(chip
);
118 if (!(st
->gpio_map
& BIT(offset
))) {
119 dev_err(st
->dev
, "GPIO %d is reserved by alternate function\n",
127 static const char * const ad5592r_gpio_names
[] = {
128 "GPIO0", "GPIO1", "GPIO2", "GPIO3", "GPIO4", "GPIO5", "GPIO6", "GPIO7",
131 static int ad5592r_gpio_init(struct ad5592r_state
*st
)
136 st
->gpiochip
.label
= dev_name(st
->dev
);
137 st
->gpiochip
.base
= -1;
138 st
->gpiochip
.ngpio
= 8;
139 st
->gpiochip
.parent
= st
->dev
;
140 st
->gpiochip
.can_sleep
= true;
141 st
->gpiochip
.direction_input
= ad5592r_gpio_direction_input
;
142 st
->gpiochip
.direction_output
= ad5592r_gpio_direction_output
;
143 st
->gpiochip
.get
= ad5592r_gpio_get
;
144 st
->gpiochip
.set
= ad5592r_gpio_set
;
145 st
->gpiochip
.request
= ad5592r_gpio_request
;
146 st
->gpiochip
.owner
= THIS_MODULE
;
147 st
->gpiochip
.names
= ad5592r_gpio_names
;
149 mutex_init(&st
->gpio_lock
);
151 return gpiochip_add_data(&st
->gpiochip
, st
);
154 static void ad5592r_gpio_cleanup(struct ad5592r_state
*st
)
157 gpiochip_remove(&st
->gpiochip
);
160 static int ad5592r_reset(struct ad5592r_state
*st
)
162 struct gpio_desc
*gpio
;
164 gpio
= devm_gpiod_get_optional(st
->dev
, "reset", GPIOD_OUT_LOW
);
166 return PTR_ERR(gpio
);
170 gpiod_set_value(gpio
, 1);
172 mutex_lock(&st
->lock
);
173 /* Writing this magic value resets the device */
174 st
->ops
->reg_write(st
, AD5592R_REG_RESET
, 0xdac);
175 mutex_unlock(&st
->lock
);
183 static int ad5592r_get_vref(struct ad5592r_state
*st
)
188 ret
= regulator_get_voltage(st
->reg
);
198 static int ad5592r_set_channel_modes(struct ad5592r_state
*st
)
200 const struct ad5592r_rw_ops
*ops
= st
->ops
;
203 u8 pulldown
= 0, tristate
= 0, dac
= 0, adc
= 0;
206 for (i
= 0; i
< st
->num_channels
; i
++) {
207 switch (st
->channel_modes
[i
]) {
216 case CH_MODE_DAC_AND_ADC
:
222 st
->gpio_map
|= BIT(i
);
223 st
->gpio_in
|= BIT(i
); /* Default to input */
228 switch (st
->channel_offstate
[i
]) {
229 case CH_OFFSTATE_OUT_TRISTATE
:
233 case CH_OFFSTATE_OUT_LOW
:
234 st
->gpio_out
|= BIT(i
);
237 case CH_OFFSTATE_OUT_HIGH
:
238 st
->gpio_out
|= BIT(i
);
239 st
->gpio_val
|= BIT(i
);
242 case CH_OFFSTATE_PULLDOWN
:
250 mutex_lock(&st
->lock
);
252 /* Pull down unused pins to GND */
253 ret
= ops
->reg_write(st
, AD5592R_REG_PULLDOWN
, pulldown
);
257 ret
= ops
->reg_write(st
, AD5592R_REG_TRISTATE
, tristate
);
261 /* Configure pins that we use */
262 ret
= ops
->reg_write(st
, AD5592R_REG_DAC_EN
, dac
);
266 ret
= ops
->reg_write(st
, AD5592R_REG_ADC_EN
, adc
);
270 ret
= ops
->reg_write(st
, AD5592R_REG_GPIO_SET
, st
->gpio_val
);
274 ret
= ops
->reg_write(st
, AD5592R_REG_GPIO_OUT_EN
, st
->gpio_out
);
278 ret
= ops
->reg_write(st
, AD5592R_REG_GPIO_IN_EN
, st
->gpio_in
);
282 /* Verify that we can read back at least one register */
283 ret
= ops
->reg_read(st
, AD5592R_REG_ADC_EN
, &read_back
);
284 if (!ret
&& (read_back
& 0xff) != adc
)
288 mutex_unlock(&st
->lock
);
292 static int ad5592r_reset_channel_modes(struct ad5592r_state
*st
)
296 for (i
= 0; i
< ARRAY_SIZE(st
->channel_modes
); i
++)
297 st
->channel_modes
[i
] = CH_MODE_UNUSED
;
299 return ad5592r_set_channel_modes(st
);
302 static int ad5592r_write_raw(struct iio_dev
*iio_dev
,
303 struct iio_chan_spec
const *chan
, int val
, int val2
, long mask
)
305 struct ad5592r_state
*st
= iio_priv(iio_dev
);
309 case IIO_CHAN_INFO_RAW
:
311 if (val
>= (1 << chan
->scan_type
.realbits
) || val
< 0)
317 mutex_lock(&st
->lock
);
318 ret
= st
->ops
->write_dac(st
, chan
->channel
, val
);
320 st
->cached_dac
[chan
->channel
] = val
;
321 mutex_unlock(&st
->lock
);
323 case IIO_CHAN_INFO_SCALE
:
324 if (chan
->type
== IIO_VOLTAGE
) {
327 if (val
== st
->scale_avail
[0][0] &&
328 val2
== st
->scale_avail
[0][1])
330 else if (val
== st
->scale_avail
[1][0] &&
331 val2
== st
->scale_avail
[1][1])
336 mutex_lock(&st
->lock
);
338 ret
= st
->ops
->reg_read(st
, AD5592R_REG_CTRL
,
339 &st
->cached_gp_ctrl
);
341 mutex_unlock(&st
->lock
);
347 st
->cached_gp_ctrl
|=
348 AD5592R_REG_CTRL_DAC_RANGE
;
350 st
->cached_gp_ctrl
&=
351 ~AD5592R_REG_CTRL_DAC_RANGE
;
354 st
->cached_gp_ctrl
|=
355 AD5592R_REG_CTRL_ADC_RANGE
;
357 st
->cached_gp_ctrl
&=
358 ~AD5592R_REG_CTRL_ADC_RANGE
;
361 ret
= st
->ops
->reg_write(st
, AD5592R_REG_CTRL
,
363 mutex_unlock(&st
->lock
);
375 static int ad5592r_read_raw(struct iio_dev
*iio_dev
,
376 struct iio_chan_spec
const *chan
,
377 int *val
, int *val2
, long m
)
379 struct ad5592r_state
*st
= iio_priv(iio_dev
);
384 case IIO_CHAN_INFO_RAW
:
386 mutex_lock(&st
->lock
);
387 ret
= st
->ops
->read_adc(st
, chan
->channel
, &read_val
);
388 mutex_unlock(&st
->lock
);
392 if ((read_val
>> 12 & 0x7) != (chan
->channel
& 0x7)) {
393 dev_err(st
->dev
, "Error while reading channel %u\n",
398 read_val
&= GENMASK(11, 0);
401 mutex_lock(&st
->lock
);
402 read_val
= st
->cached_dac
[chan
->channel
];
403 mutex_unlock(&st
->lock
);
406 dev_dbg(st
->dev
, "Channel %u read: 0x%04hX\n",
407 chan
->channel
, read_val
);
409 *val
= (int) read_val
;
411 case IIO_CHAN_INFO_SCALE
:
412 *val
= ad5592r_get_vref(st
);
414 if (chan
->type
== IIO_TEMP
) {
415 s64 tmp
= *val
* (3767897513LL / 25LL);
416 *val
= div_s64_rem(tmp
, 1000000000LL, val2
);
418 return IIO_VAL_INT_PLUS_NANO
;
421 mutex_lock(&st
->lock
);
424 mult
= !!(st
->cached_gp_ctrl
&
425 AD5592R_REG_CTRL_DAC_RANGE
);
427 mult
= !!(st
->cached_gp_ctrl
&
428 AD5592R_REG_CTRL_ADC_RANGE
);
430 mutex_unlock(&st
->lock
);
434 *val2
= chan
->scan_type
.realbits
;
436 return IIO_VAL_FRACTIONAL_LOG2
;
437 case IIO_CHAN_INFO_OFFSET
:
438 ret
= ad5592r_get_vref(st
);
440 mutex_lock(&st
->lock
);
442 if (st
->cached_gp_ctrl
& AD5592R_REG_CTRL_ADC_RANGE
)
443 *val
= (-34365 * 25) / ret
;
445 *val
= (-75365 * 25) / ret
;
447 mutex_unlock(&st
->lock
);
455 static int ad5592r_write_raw_get_fmt(struct iio_dev
*indio_dev
,
456 struct iio_chan_spec
const *chan
, long mask
)
459 case IIO_CHAN_INFO_SCALE
:
460 return IIO_VAL_INT_PLUS_NANO
;
463 return IIO_VAL_INT_PLUS_MICRO
;
469 static const struct iio_info ad5592r_info
= {
470 .read_raw
= ad5592r_read_raw
,
471 .write_raw
= ad5592r_write_raw
,
472 .write_raw_get_fmt
= ad5592r_write_raw_get_fmt
,
475 static ssize_t
ad5592r_show_scale_available(struct iio_dev
*iio_dev
,
477 const struct iio_chan_spec
*chan
,
480 struct ad5592r_state
*st
= iio_priv(iio_dev
);
482 return sprintf(buf
, "%d.%09u %d.%09u\n",
483 st
->scale_avail
[0][0], st
->scale_avail
[0][1],
484 st
->scale_avail
[1][0], st
->scale_avail
[1][1]);
487 static const struct iio_chan_spec_ext_info ad5592r_ext_info
[] = {
489 .name
= "scale_available",
490 .read
= ad5592r_show_scale_available
,
491 .shared
= IIO_SHARED_BY_TYPE
,
496 static void ad5592r_setup_channel(struct iio_dev
*iio_dev
,
497 struct iio_chan_spec
*chan
, bool output
, unsigned id
)
499 chan
->type
= IIO_VOLTAGE
;
501 chan
->output
= output
;
503 chan
->info_mask_separate
= BIT(IIO_CHAN_INFO_RAW
);
504 chan
->info_mask_shared_by_type
= BIT(IIO_CHAN_INFO_SCALE
);
505 chan
->scan_type
.sign
= 'u';
506 chan
->scan_type
.realbits
= 12;
507 chan
->scan_type
.storagebits
= 16;
508 chan
->ext_info
= ad5592r_ext_info
;
511 static int ad5592r_alloc_channels(struct iio_dev
*iio_dev
)
513 struct ad5592r_state
*st
= iio_priv(iio_dev
);
514 unsigned i
, curr_channel
= 0,
515 num_channels
= st
->num_channels
;
516 struct iio_chan_spec
*channels
;
517 struct fwnode_handle
*child
;
521 device_for_each_child_node(st
->dev
, child
) {
522 ret
= fwnode_property_read_u32(child
, "reg", ®
);
523 if (ret
|| reg
>= ARRAY_SIZE(st
->channel_modes
))
526 ret
= fwnode_property_read_u32(child
, "adi,mode", &tmp
);
528 st
->channel_modes
[reg
] = tmp
;
530 ret
= fwnode_property_read_u32(child
, "adi,off-state", &tmp
);
532 st
->channel_offstate
[reg
] = tmp
;
535 channels
= devm_kcalloc(st
->dev
,
536 1 + 2 * num_channels
, sizeof(*channels
),
541 for (i
= 0; i
< num_channels
; i
++) {
542 switch (st
->channel_modes
[i
]) {
544 ad5592r_setup_channel(iio_dev
, &channels
[curr_channel
],
550 ad5592r_setup_channel(iio_dev
, &channels
[curr_channel
],
555 case CH_MODE_DAC_AND_ADC
:
556 ad5592r_setup_channel(iio_dev
, &channels
[curr_channel
],
559 ad5592r_setup_channel(iio_dev
, &channels
[curr_channel
],
569 channels
[curr_channel
].type
= IIO_TEMP
;
570 channels
[curr_channel
].channel
= 8;
571 channels
[curr_channel
].info_mask_separate
= BIT(IIO_CHAN_INFO_RAW
) |
572 BIT(IIO_CHAN_INFO_SCALE
) |
573 BIT(IIO_CHAN_INFO_OFFSET
);
576 iio_dev
->num_channels
= curr_channel
;
577 iio_dev
->channels
= channels
;
582 static void ad5592r_init_scales(struct ad5592r_state
*st
, int vref_mV
)
584 s64 tmp
= (s64
)vref_mV
* 1000000000LL >> 12;
586 st
->scale_avail
[0][0] =
587 div_s64_rem(tmp
, 1000000000LL, &st
->scale_avail
[0][1]);
588 st
->scale_avail
[1][0] =
589 div_s64_rem(tmp
* 2, 1000000000LL, &st
->scale_avail
[1][1]);
592 int ad5592r_probe(struct device
*dev
, const char *name
,
593 const struct ad5592r_rw_ops
*ops
)
595 struct iio_dev
*iio_dev
;
596 struct ad5592r_state
*st
;
599 iio_dev
= devm_iio_device_alloc(dev
, sizeof(*st
));
603 st
= iio_priv(iio_dev
);
606 st
->num_channels
= 8;
607 dev_set_drvdata(dev
, iio_dev
);
609 st
->reg
= devm_regulator_get_optional(dev
, "vref");
610 if (IS_ERR(st
->reg
)) {
611 if ((PTR_ERR(st
->reg
) != -ENODEV
) && dev_fwnode(dev
))
612 return PTR_ERR(st
->reg
);
616 ret
= regulator_enable(st
->reg
);
621 iio_dev
->name
= name
;
622 iio_dev
->info
= &ad5592r_info
;
623 iio_dev
->modes
= INDIO_DIRECT_MODE
;
625 mutex_init(&st
->lock
);
627 ad5592r_init_scales(st
, ad5592r_get_vref(st
));
629 ret
= ad5592r_reset(st
);
631 goto error_disable_reg
;
633 ret
= ops
->reg_write(st
, AD5592R_REG_PD
,
634 (st
->reg
== NULL
) ? AD5592R_REG_PD_EN_REF
: 0);
636 goto error_disable_reg
;
638 ret
= ad5592r_alloc_channels(iio_dev
);
640 goto error_disable_reg
;
642 ret
= ad5592r_set_channel_modes(st
);
644 goto error_reset_ch_modes
;
646 ret
= iio_device_register(iio_dev
);
648 goto error_reset_ch_modes
;
650 ret
= ad5592r_gpio_init(st
);
652 goto error_dev_unregister
;
656 error_dev_unregister
:
657 iio_device_unregister(iio_dev
);
659 error_reset_ch_modes
:
660 ad5592r_reset_channel_modes(st
);
664 regulator_disable(st
->reg
);
668 EXPORT_SYMBOL_NS_GPL(ad5592r_probe
, "IIO_AD5592R");
670 void ad5592r_remove(struct device
*dev
)
672 struct iio_dev
*iio_dev
= dev_get_drvdata(dev
);
673 struct ad5592r_state
*st
= iio_priv(iio_dev
);
675 iio_device_unregister(iio_dev
);
676 ad5592r_reset_channel_modes(st
);
677 ad5592r_gpio_cleanup(st
);
680 regulator_disable(st
->reg
);
682 EXPORT_SYMBOL_NS_GPL(ad5592r_remove
, "IIO_AD5592R");
684 MODULE_AUTHOR("Paul Cercueil <paul.cercueil@analog.com>");
685 MODULE_DESCRIPTION("Analog Devices AD5592R multi-channel converters");
686 MODULE_LICENSE("GPL v2");