}
static const char * const ad5446_powerdown_modes[] = {
- "", "1kohm_to_gnd", "100kohm_to_gnd", "three_state"
+ "1kohm_to_gnd", "100kohm_to_gnd", "three_state"
};
-static ssize_t ad5446_read_powerdown_mode_available(struct iio_dev *indio_dev,
- uintptr_t private, const struct iio_chan_spec *chan, char *buf)
-{
- return sprintf(buf, "%s %s %s\n", ad5446_powerdown_modes[1],
- ad5446_powerdown_modes[2], ad5446_powerdown_modes[3]);
-}
-
-static ssize_t ad5446_write_powerdown_mode(struct iio_dev *indio_dev,
- uintptr_t private,
- const struct iio_chan_spec *chan,
- const char *buf, size_t len)
+static int ad5446_set_powerdown_mode(struct iio_dev *indio_dev,
+ const struct iio_chan_spec *chan, unsigned int mode)
{
struct ad5446_state *st = iio_priv(indio_dev);
- int i;
-
- for (i = 1; i < ARRAY_SIZE(ad5446_powerdown_modes); i++) {
- if (sysfs_streq(buf, ad5446_powerdown_modes[i])) {
- st->pwr_down_mode = i;
- break;
- }
- }
- if (i == ARRAY_SIZE(ad5446_powerdown_modes))
- return -EINVAL;
+ st->pwr_down_mode = mode + 1;
- return len;
+ return 0;
}
-static ssize_t ad5446_read_powerdown_mode(struct iio_dev *indio_dev,
- uintptr_t private,
- const struct iio_chan_spec *chan,
- char *buf)
+static int ad5446_get_powerdown_mode(struct iio_dev *indio_dev,
+ const struct iio_chan_spec *chan)
{
struct ad5446_state *st = iio_priv(indio_dev);
- return sprintf(buf, "%s\n", ad5446_powerdown_modes[st->pwr_down_mode]);
+ return st->pwr_down_mode - 1;
}
+static const struct iio_enum ad5446_powerdown_mode_enum = {
+ .items = ad5446_powerdown_modes,
+ .num_items = ARRAY_SIZE(ad5446_powerdown_modes),
+ .get = ad5446_get_powerdown_mode,
+ .set = ad5446_set_powerdown_mode,
+};
+
static ssize_t ad5446_read_dac_powerdown(struct iio_dev *indio_dev,
uintptr_t private,
const struct iio_chan_spec *chan,
.name = "powerdown",
.read = ad5446_read_dac_powerdown,
.write = ad5446_write_dac_powerdown,
- }, {
- .name = "powerdown_mode",
- .read = ad5446_read_powerdown_mode,
- .write = ad5446_write_powerdown_mode,
- }, {
- .name = "powerdown_mode_available",
- .shared = true,
- .read = ad5446_read_powerdown_mode_available,
},
+ IIO_ENUM("powerdown_mode", false, &ad5446_powerdown_mode_enum),
+ IIO_ENUM_AVAILABLE("powerdown_mode", &ad5446_powerdown_mode_enum),
{ },
};
indio_dev->channels = &st->chip_info->channel;
indio_dev->num_channels = 1;
+ st->pwr_down_mode = MODE_PWRDWN_1k;
+
if (st->chip_info->int_vref_mv)
st->vref_mv = st->chip_info->int_vref_mv;
else if (voltage_uv)