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 2edfcb4819b7db92317fe8f8569b911a43a749ea..09496f358ad9803153a916fcb4955d94e14e74a1 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 ba3ecb3b57dcdca7533c856890316e20754bbbd8..0570ab1cc0643699944f06178dc126d4776b1aec 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 2121a812b0c3148054b241da5e8c0da4c7fc4db0..cc990205f306149b20795f9392454ad12fc1fb24 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 8b353e26668e263c4fcb7661aabde5e4106a378a..e665e14c6e546a05cdd8e9017de9e7fd8e5ee47e 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 fd9cac4f6321c4828975321e33ed70f8e57e328c..27ee2c63c5d45e55e60a74abe0931048102e03ef 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 8ca26bb4b62f162c07ebd357f49a1ac4fab57437..e38860a6a9f3f5e1ac9ce82d9920bc335f31b91c 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 3cc5513a6cbfd5dbc27858d3ba697d2051c197fe..1c9b54c012a7e55fe491573f806c863569f82dfa 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 19cdf9890d02ecb70e0abd68ecb3ae13e4b1946e..b631261efa97aba3c3a18c26b36a9661a011e928 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 530529feebb519a39cefbe36a953843bc36f3806..3c98941b9f99ab071a5f7380453767e146294567 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 8f001db775f481a46ce4fc47d732219cdabb6e5c..e592a995f404cbe61a22f25c61b03709d781845d 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 b0d220c3a12686fa74f3990dd8a553c250ef2e00..43189af2fb1f3a43d1930478fbbcdd7a6a4c9232 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 a0923b76e8b65dbb6210447a9af205b33b8c7340..7b4579d73d18b9c5bdac055c6f9528aa89d2a4ff 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 7da4710a64086a7bc6a4a538b4c6f6090ab4dbe6..fce640b7f1c81625390fe9666a5e8b1f82ec2eee 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 34b14aafb630188d0e1121cfae085fa8b8973506..98b2c2f10bf3759ef79988f4f806aa937b1f241d 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 dd2e306824e7dac6f8e02d632b7bd81160fbc41c..cd71cc4553a73095e92f8dadfe835a75fcc5013b 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 5c14bfb165219e4e37cb4753545507ef5081ae09..6beda2193683a4dd076793db60252221b4d48c83 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 546a4cf6c5ef8325937b248b883f1663f6ae8a0d..4a3b8d8755183ce50732707dfb29d8eed10f88cb 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 09218c3029f0ad905cfd9f4cbbf769092c757c95..99f275829ec211178c7f18b8a955f121b86d2109 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 f08726bf5ec359c6b478ee7e4731ce43abf29602..5a730d9bdbb088a1f4d42e3651dbdb7fa4e3e4ff 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 33083877cd19d134857f647b8f80030c7cc7e3a1..02b87b0f9d70a7fba56eedef0295d878866e9f93 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 324561b7a5e861f38ed289d8fce03dbe0bcff474..07025d6b3de1ad38d234e853cea99902c2b42f39 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), \
 }