iio: multiplexer: iio-mux: Support settle-time-us property
authorVincent Whitchurch <vincent.whitchurch@axis.com>
Thu, 7 Oct 2021 13:46:41 +0000 (15:46 +0200)
committerJonathan Cameron <Jonathan.Cameron@huawei.com>
Thu, 21 Oct 2021 19:02:54 +0000 (20:02 +0100)
If the devicetree specifies that the hardware requires a settle time,
pass this time on to the mux APIs.

Signed-off-by: Vincent Whitchurch <vincent.whitchurch@axis.com>
Reviewed-by: Lars-Peter Clausen <lars@metafoo.de>
Tested-by: Lars-Peter Clausen <lars@metafoo.de>
Acked-by: Peter Rosin <peda@axentia.se>
Link: https://lore.kernel.org/r/20211007134641.13417-4-vincent.whitchurch@axis.com
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
drivers/iio/multiplexer/iio-mux.c

index d54ae5c..f422d44 100644 (file)
@@ -33,6 +33,7 @@ struct mux {
        struct iio_chan_spec *chan;
        struct iio_chan_spec_ext_info *ext_info;
        struct mux_child *child;
+       u32 delay_us;
 };
 
 static int iio_mux_select(struct mux *mux, int idx)
@@ -42,7 +43,8 @@ static int iio_mux_select(struct mux *mux, int idx)
        int ret;
        int i;
 
-       ret = mux_control_select(mux->control, chan->channel);
+       ret = mux_control_select_delay(mux->control, chan->channel,
+                                      mux->delay_us);
        if (ret < 0) {
                mux->cached_state = -1;
                return ret;
@@ -392,6 +394,9 @@ static int mux_probe(struct platform_device *pdev)
        mux->parent = parent;
        mux->cached_state = -1;
 
+       mux->delay_us = 0;
+       of_property_read_u32(np, "settle-time-us", &mux->delay_us);
+
        indio_dev->name = dev_name(dev);
        indio_dev->info = &mux_info;
        indio_dev->modes = INDIO_DIRECT_MODE;