iio: expose shared parameter in IIO_ENUM_AVAILABLE
authorAntoniu Miclaus <antoniu.miclaus@analog.com>
Fri, 19 Nov 2021 08:56:27 +0000 (10:56 +0200)
committerJonathan Cameron <Jonathan.Cameron@huawei.com>
Sat, 27 Nov 2021 16:12:23 +0000 (16:12 +0000)
The shared parameter should be configurable based on its usage, and not
constrained to IIO_SHARED_BY_TYPE.

This patch aims to improve the flexibility in using the
IIO_ENUM_AVAILABLE define and avoid redefining custom iio enums that
expose the shared parameter.

An example is the ad5766.c driver where IIO_ENUM_AVAILABLE_SHARED was
defined in order to achieve `shared` parameter customization.

The current state of the IIO_ENUM_AVAILABLE implementation will imply
similar redefinitions each time a driver will require access to the
`shared` parameter. An example would be admv1013 driver which will
require custom device attribute for the frequency translation modes:
Quadrature I/Q mode and Intermediate Frequency mode.

Signed-off-by: Antoniu Miclaus <antoniu.miclaus@analog.com>
Reviewed-by: Alexandru Ardelean <ardeleanalex@gmail.com>
Link: https://lore.kernel.org/r/20211119085627.6348-1-antoniu.miclaus@analog.com
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
21 files changed:
drivers/iio/accel/bma180.c
drivers/iio/accel/mma9553.c
drivers/iio/adc/ad7192.c
drivers/iio/adc/hi8435.c
drivers/iio/dac/ad5064.c
drivers/iio/dac/ad5380.c
drivers/iio/dac/ad5446.c
drivers/iio/dac/ad5504.c
drivers/iio/dac/ad5624r_spi.c
drivers/iio/dac/ad5686.c
drivers/iio/dac/ad5766.c
drivers/iio/dac/ad5791.c
drivers/iio/dac/max5821.c
drivers/iio/dac/mcp4725.c
drivers/iio/dac/stm32-dac.c
drivers/iio/dac/ti-dac082s085.c
drivers/iio/dac/ti-dac5571.c
drivers/iio/dac/ti-dac7311.c
drivers/iio/magnetometer/hmc5843_core.c
drivers/iio/trigger/stm32-timer-trigger.c
include/linux/iio/iio.h

index 2edfcb4..09496f3 100644 (file)
@@ -658,7 +658,7 @@ static const struct iio_chan_spec_ext_info bma023_ext_info[] = {
 
 static const struct iio_chan_spec_ext_info bma180_ext_info[] = {
        IIO_ENUM("power_mode", IIO_SHARED_BY_TYPE, &bma180_power_mode_enum),
-       IIO_ENUM_AVAILABLE("power_mode", &bma180_power_mode_enum),
+       IIO_ENUM_AVAILABLE("power_mode", IIO_SHARED_BY_TYPE, &bma180_power_mode_enum),
        IIO_MOUNT_MATRIX(IIO_SHARED_BY_DIR, bma180_accel_get_mount_matrix),
        { }
 };
index ba3ecb3..0570ab1 100644 (file)
@@ -917,7 +917,7 @@ static const struct iio_enum mma9553_calibgender_enum = {
 
 static const struct iio_chan_spec_ext_info mma9553_ext_info[] = {
        IIO_ENUM("calibgender", IIO_SHARED_BY_TYPE, &mma9553_calibgender_enum),
-       IIO_ENUM_AVAILABLE("calibgender", &mma9553_calibgender_enum),
+       IIO_ENUM_AVAILABLE("calibgender", IIO_SHARED_BY_TYPE, &mma9553_calibgender_enum),
        {},
 };
 
index 2121a81..cc99020 100644 (file)
@@ -257,7 +257,8 @@ static const struct iio_chan_spec_ext_info ad7192_calibsys_ext_info[] = {
        },
        IIO_ENUM("sys_calibration_mode", IIO_SEPARATE,
                 &ad7192_syscalib_mode_enum),
-       IIO_ENUM_AVAILABLE("sys_calibration_mode", &ad7192_syscalib_mode_enum),
+       IIO_ENUM_AVAILABLE("sys_calibration_mode", IIO_SHARED_BY_TYPE,
+                          &ad7192_syscalib_mode_enum),
        {}
 };
 
index 8b353e2..e665e14 100644 (file)
@@ -350,7 +350,7 @@ static const struct iio_enum hi8435_sensing_mode = {
 
 static const struct iio_chan_spec_ext_info hi8435_ext_info[] = {
        IIO_ENUM("sensing_mode", IIO_SEPARATE, &hi8435_sensing_mode),
-       IIO_ENUM_AVAILABLE("sensing_mode", &hi8435_sensing_mode),
+       IIO_ENUM_AVAILABLE("sensing_mode", IIO_SHARED_BY_TYPE, &hi8435_sensing_mode),
        {},
 };
 
index fd9cac4..27ee2c6 100644 (file)
@@ -377,7 +377,7 @@ static const struct iio_chan_spec_ext_info ad5064_ext_info[] = {
                .shared = IIO_SEPARATE,
        },
        IIO_ENUM("powerdown_mode", IIO_SEPARATE, &ad5064_powerdown_mode_enum),
-       IIO_ENUM_AVAILABLE("powerdown_mode", &ad5064_powerdown_mode_enum),
+       IIO_ENUM_AVAILABLE("powerdown_mode", IIO_SHARED_BY_TYPE, &ad5064_powerdown_mode_enum),
        { },
 };
 
@@ -389,7 +389,7 @@ static const struct iio_chan_spec_ext_info ltc2617_ext_info[] = {
                .shared = IIO_SEPARATE,
        },
        IIO_ENUM("powerdown_mode", IIO_SEPARATE, &ltc2617_powerdown_mode_enum),
-       IIO_ENUM_AVAILABLE("powerdown_mode", &ltc2617_powerdown_mode_enum),
+       IIO_ENUM_AVAILABLE("powerdown_mode", IIO_SHARED_BY_TYPE, &ltc2617_powerdown_mode_enum),
        { },
 };
 
index 8ca26bb..e38860a 100644 (file)
@@ -249,7 +249,7 @@ static const struct iio_chan_spec_ext_info ad5380_ext_info[] = {
        },
        IIO_ENUM("powerdown_mode", IIO_SHARED_BY_TYPE,
                 &ad5380_powerdown_mode_enum),
-       IIO_ENUM_AVAILABLE("powerdown_mode", &ad5380_powerdown_mode_enum),
+       IIO_ENUM_AVAILABLE("powerdown_mode", IIO_SHARED_BY_TYPE, &ad5380_powerdown_mode_enum),
        { },
 };
 
index 3cc5513..1c9b54c 100644 (file)
@@ -142,7 +142,7 @@ static const struct iio_chan_spec_ext_info ad5446_ext_info_powerdown[] = {
                .shared = IIO_SEPARATE,
        },
        IIO_ENUM("powerdown_mode", IIO_SEPARATE, &ad5446_powerdown_mode_enum),
-       IIO_ENUM_AVAILABLE("powerdown_mode", &ad5446_powerdown_mode_enum),
+       IIO_ENUM_AVAILABLE("powerdown_mode", IIO_SHARED_BY_TYPE, &ad5446_powerdown_mode_enum),
        { },
 };
 
index 19cdf98..b631261 100644 (file)
@@ -241,7 +241,7 @@ static const struct iio_chan_spec_ext_info ad5504_ext_info[] = {
        },
        IIO_ENUM("powerdown_mode", IIO_SHARED_BY_TYPE,
                 &ad5504_powerdown_mode_enum),
-       IIO_ENUM_AVAILABLE("powerdown_mode", &ad5504_powerdown_mode_enum),
+       IIO_ENUM_AVAILABLE("powerdown_mode", IIO_SHARED_BY_TYPE, &ad5504_powerdown_mode_enum),
        { },
 };
 
index 530529f..3c98941 100644 (file)
@@ -159,7 +159,7 @@ static const struct iio_chan_spec_ext_info ad5624r_ext_info[] = {
        },
        IIO_ENUM("powerdown_mode", IIO_SHARED_BY_TYPE,
                 &ad5624r_powerdown_mode_enum),
-       IIO_ENUM_AVAILABLE("powerdown_mode", &ad5624r_powerdown_mode_enum),
+       IIO_ENUM_AVAILABLE("powerdown_mode", IIO_SHARED_BY_TYPE, &ad5624r_powerdown_mode_enum),
        { },
 };
 
index 8f001db..e592a99 100644 (file)
@@ -184,7 +184,7 @@ static const struct iio_chan_spec_ext_info ad5686_ext_info[] = {
                .shared = IIO_SEPARATE,
        },
        IIO_ENUM("powerdown_mode", IIO_SEPARATE, &ad5686_powerdown_mode_enum),
-       IIO_ENUM_AVAILABLE("powerdown_mode", &ad5686_powerdown_mode_enum),
+       IIO_ENUM_AVAILABLE("powerdown_mode", IIO_SHARED_BY_TYPE, &ad5686_powerdown_mode_enum),
        { },
 };
 
index b0d220c..43189af 100644 (file)
@@ -426,14 +426,6 @@ static ssize_t ad5766_write_ext(struct iio_dev *indio_dev,
        .shared = _shared, \
 }
 
-#define IIO_ENUM_AVAILABLE_SHARED(_name, _shared, _e) \
-{ \
-       .name = (_name "_available"), \
-       .shared = _shared, \
-       .read = iio_enum_available_read, \
-       .private = (uintptr_t)(_e), \
-}
-
 static const struct iio_chan_spec_ext_info ad5766_ext_info[] = {
 
        _AD5766_CHAN_EXT_INFO("dither_enable", AD5766_DITHER_ENABLE,
@@ -443,9 +435,8 @@ static const struct iio_chan_spec_ext_info ad5766_ext_info[] = {
        _AD5766_CHAN_EXT_INFO("dither_source", AD5766_DITHER_SOURCE,
                              IIO_SEPARATE),
        IIO_ENUM("dither_scale", IIO_SEPARATE, &ad5766_dither_scale_enum),
-       IIO_ENUM_AVAILABLE_SHARED("dither_scale",
-                                 IIO_SEPARATE,
-                                 &ad5766_dither_scale_enum),
+       IIO_ENUM_AVAILABLE("dither_scale", IIO_SEPARATE,
+                          &ad5766_dither_scale_enum),
        {}
 };
 
index a0923b7..7b4579d 100644 (file)
@@ -285,7 +285,7 @@ static const struct iio_chan_spec_ext_info ad5791_ext_info[] = {
        },
        IIO_ENUM("powerdown_mode", IIO_SHARED_BY_TYPE,
                 &ad5791_powerdown_mode_enum),
-       IIO_ENUM_AVAILABLE("powerdown_mode", &ad5791_powerdown_mode_enum),
+       IIO_ENUM_AVAILABLE("powerdown_mode", IIO_SHARED_BY_TYPE, &ad5791_powerdown_mode_enum),
        { },
 };
 
index 7da4710..fce640b 100644 (file)
@@ -137,7 +137,7 @@ static const struct iio_chan_spec_ext_info max5821_ext_info[] = {
                .shared = IIO_SEPARATE,
        },
        IIO_ENUM("powerdown_mode", IIO_SEPARATE, &max5821_powerdown_mode_enum),
-       IIO_ENUM_AVAILABLE("powerdown_mode", &max5821_powerdown_mode_enum),
+       IIO_ENUM_AVAILABLE("powerdown_mode", IIO_SHARED_BY_TYPE, &max5821_powerdown_mode_enum),
        { },
 };
 
index 34b14aa..98b2c2f 100644 (file)
@@ -221,8 +221,8 @@ static const struct iio_chan_spec_ext_info mcp4725_ext_info[] = {
        },
        IIO_ENUM("powerdown_mode", IIO_SEPARATE,
                        &mcp472x_powerdown_mode_enum[MCP4725]),
-       IIO_ENUM_AVAILABLE("powerdown_mode",
-                       &mcp472x_powerdown_mode_enum[MCP4725]),
+       IIO_ENUM_AVAILABLE("powerdown_mode", IIO_SHARED_BY_TYPE,
+                          &mcp472x_powerdown_mode_enum[MCP4725]),
        { },
 };
 
@@ -235,8 +235,8 @@ static const struct iio_chan_spec_ext_info mcp4726_ext_info[] = {
        },
        IIO_ENUM("powerdown_mode", IIO_SEPARATE,
                        &mcp472x_powerdown_mode_enum[MCP4726]),
-       IIO_ENUM_AVAILABLE("powerdown_mode",
-                       &mcp472x_powerdown_mode_enum[MCP4726]),
+       IIO_ENUM_AVAILABLE("powerdown_mode", IIO_SHARED_BY_TYPE,
+                          &mcp472x_powerdown_mode_enum[MCP4726]),
        { },
 };
 
index dd2e306..cd71cc4 100644 (file)
@@ -246,7 +246,7 @@ static const struct iio_chan_spec_ext_info stm32_dac_ext_info[] = {
                .shared = IIO_SEPARATE,
        },
        IIO_ENUM("powerdown_mode", IIO_SEPARATE, &stm32_dac_powerdown_mode_en),
-       IIO_ENUM_AVAILABLE("powerdown_mode", &stm32_dac_powerdown_mode_en),
+       IIO_ENUM_AVAILABLE("powerdown_mode", IIO_SHARED_BY_TYPE, &stm32_dac_powerdown_mode_en),
        {},
 };
 
index 5c14bfb..6beda21 100644 (file)
@@ -160,7 +160,7 @@ static const struct iio_chan_spec_ext_info ti_dac_ext_info[] = {
                .shared    = IIO_SHARED_BY_TYPE,
        },
        IIO_ENUM("powerdown_mode", IIO_SHARED_BY_TYPE, &ti_dac_powerdown_mode),
-       IIO_ENUM_AVAILABLE("powerdown_mode", &ti_dac_powerdown_mode),
+       IIO_ENUM_AVAILABLE("powerdown_mode", IIO_SHARED_BY_TYPE, &ti_dac_powerdown_mode),
        { },
 };
 
index 546a4cf..4a3b8d8 100644 (file)
@@ -212,7 +212,7 @@ static const struct iio_chan_spec_ext_info dac5571_ext_info[] = {
                .shared    = IIO_SEPARATE,
        },
        IIO_ENUM("powerdown_mode", IIO_SEPARATE, &dac5571_powerdown_mode),
-       IIO_ENUM_AVAILABLE("powerdown_mode", &dac5571_powerdown_mode),
+       IIO_ENUM_AVAILABLE("powerdown_mode", IIO_SHARED_BY_TYPE, &dac5571_powerdown_mode),
        {},
 };
 
index 09218c3..99f2758 100644 (file)
@@ -146,7 +146,7 @@ static const struct iio_chan_spec_ext_info ti_dac_ext_info[] = {
                .shared    = IIO_SHARED_BY_TYPE,
        },
        IIO_ENUM("powerdown_mode", IIO_SHARED_BY_TYPE, &ti_dac_powerdown_mode),
-       IIO_ENUM_AVAILABLE("powerdown_mode", &ti_dac_powerdown_mode),
+       IIO_ENUM_AVAILABLE("powerdown_mode", IIO_SHARED_BY_TYPE, &ti_dac_powerdown_mode),
        { },
 };
 
index f08726b..5a730d9 100644 (file)
@@ -246,7 +246,7 @@ static const struct iio_enum hmc5843_meas_conf_enum = {
 
 static const struct iio_chan_spec_ext_info hmc5843_ext_info[] = {
        IIO_ENUM("meas_conf", IIO_SHARED_BY_TYPE, &hmc5843_meas_conf_enum),
-       IIO_ENUM_AVAILABLE("meas_conf", &hmc5843_meas_conf_enum),
+       IIO_ENUM_AVAILABLE("meas_conf", IIO_SHARED_BY_TYPE, &hmc5843_meas_conf_enum),
        IIO_MOUNT_MATRIX(IIO_SHARED_BY_DIR, hmc5843_get_mount_matrix),
        { }
 };
@@ -260,7 +260,7 @@ static const struct iio_enum hmc5983_meas_conf_enum = {
 
 static const struct iio_chan_spec_ext_info hmc5983_ext_info[] = {
        IIO_ENUM("meas_conf", IIO_SHARED_BY_TYPE, &hmc5983_meas_conf_enum),
-       IIO_ENUM_AVAILABLE("meas_conf", &hmc5983_meas_conf_enum),
+       IIO_ENUM_AVAILABLE("meas_conf", IIO_SHARED_BY_TYPE, &hmc5983_meas_conf_enum),
        IIO_MOUNT_MATRIX(IIO_SHARED_BY_DIR, hmc5843_get_mount_matrix),
        { }
 };
index 3308387..02b87b0 100644 (file)
@@ -696,9 +696,9 @@ static const struct iio_chan_spec_ext_info stm32_trigger_count_info[] = {
                .write = stm32_count_set_preset
        },
        IIO_ENUM("enable_mode", IIO_SEPARATE, &stm32_enable_mode_enum),
-       IIO_ENUM_AVAILABLE("enable_mode", &stm32_enable_mode_enum),
+       IIO_ENUM_AVAILABLE("enable_mode", IIO_SHARED_BY_TYPE, &stm32_enable_mode_enum),
        IIO_ENUM("trigger_mode", IIO_SEPARATE, &stm32_trigger_mode_enum),
-       IIO_ENUM_AVAILABLE("trigger_mode", &stm32_trigger_mode_enum),
+       IIO_ENUM_AVAILABLE("trigger_mode", IIO_SHARED_BY_TYPE, &stm32_trigger_mode_enum),
        {}
 };
 
index 324561b..07025d6 100644 (file)
@@ -103,15 +103,16 @@ ssize_t iio_enum_write(struct iio_dev *indio_dev,
 /**
  * IIO_ENUM_AVAILABLE() - Initialize enum available extended channel attribute
  * @_name:     Attribute name ("_available" will be appended to the name)
+ * @_shared:   Whether the attribute is shared between all channels
  * @_e:                Pointer to an iio_enum struct
  *
  * Creates a read only attribute which lists all the available enum items in a
  * space separated list. This should usually be used together with IIO_ENUM()
  */
-#define IIO_ENUM_AVAILABLE(_name, _e) \
+#define IIO_ENUM_AVAILABLE(_name, _shared, _e) \
 { \
        .name = (_name "_available"), \
-       .shared = IIO_SHARED_BY_TYPE, \
+       .shared = _shared, \
        .read = iio_enum_available_read, \
        .private = (uintptr_t)(_e), \
 }