]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
iio: dac: ad3530r: Fix AD3531/AD3531R powerdown mode strings
authorKim Seer Paller <kimseer.paller@analog.com>
Tue, 5 May 2026 04:34:32 +0000 (12:34 +0800)
committerJonathan Cameron <jic23@kernel.org>
Fri, 15 May 2026 11:05:35 +0000 (12:05 +0100)
The AD3531/AD3531R has different output operating modes from the
AD3530/AD3530R. According to the AD3531/AD3531R datasheet, the
powerdown modes are:
  01: 500 Ohm output impedance
  10: 3.85 kOhm output impedance
  11: 16 kOhm output impedance

The driver currently uses the AD3530R modes (1k, 7.7k, 32k) for all
variants, which is incorrect for AD3531/AD3531R.

Add AD3531R-specific powerdown mode strings and assign them to the
AD3531/AD3531R chip variants.

Fixes: 93583174a3df ("iio: dac: ad3530r: Add driver for AD3530R and AD3531R")
Signed-off-by: Kim Seer Paller <kimseer.paller@analog.com>
Cc: <Stable@vger.kernel.org>
Signed-off-by: Jonathan Cameron <jic23@kernel.org>
drivers/iio/dac/ad3530r.c

index b97b46090d808ee7835d7b19abf8d611b0cbb025..d9db3226ecd64da02aac1116ca0760c5ebd9ffcb 100644 (file)
@@ -105,6 +105,12 @@ static const char * const ad3530r_powerdown_modes[] = {
        "32kohm_to_gnd",
 };
 
+static const char * const ad3531r_powerdown_modes[] = {
+       "500ohm_to_gnd",
+       "3.85kohm_to_gnd",
+       "16kohm_to_gnd",
+};
+
 static int ad3530r_get_powerdown_mode(struct iio_dev *indio_dev,
                                      const struct iio_chan_spec *chan)
 {
@@ -133,6 +139,13 @@ static const struct iio_enum ad3530r_powerdown_mode_enum = {
        .set = ad3530r_set_powerdown_mode,
 };
 
+static const struct iio_enum ad3531r_powerdown_mode_enum = {
+       .items = ad3531r_powerdown_modes,
+       .num_items = ARRAY_SIZE(ad3531r_powerdown_modes),
+       .get = ad3530r_get_powerdown_mode,
+       .set = ad3530r_set_powerdown_mode,
+};
+
 static ssize_t ad3530r_get_dac_powerdown(struct iio_dev *indio_dev,
                                         uintptr_t private,
                                         const struct iio_chan_spec *chan,
@@ -276,7 +289,20 @@ static const struct iio_chan_spec_ext_info ad3530r_ext_info[] = {
        { }
 };
 
-#define AD3530R_CHAN(_chan)                                    \
+static const struct iio_chan_spec_ext_info ad3531r_ext_info[] = {
+       {
+               .name = "powerdown",
+               .shared = IIO_SEPARATE,
+               .read = ad3530r_get_dac_powerdown,
+               .write = ad3530r_set_dac_powerdown,
+       },
+       IIO_ENUM("powerdown_mode", IIO_SEPARATE, &ad3531r_powerdown_mode_enum),
+       IIO_ENUM_AVAILABLE("powerdown_mode", IIO_SHARED_BY_TYPE,
+                          &ad3531r_powerdown_mode_enum),
+       { }
+};
+
+#define AD3530R_CHAN(_chan, _ext_info)                         \
 {                                                              \
        .type = IIO_VOLTAGE,                                    \
        .indexed = 1,                                           \
@@ -284,25 +310,25 @@ static const struct iio_chan_spec_ext_info ad3530r_ext_info[] = {
        .output = 1,                                            \
        .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |          \
                              BIT(IIO_CHAN_INFO_SCALE),         \
-       .ext_info = ad3530r_ext_info,                           \
+       .ext_info = _ext_info,                                  \
 }
 
 static const struct iio_chan_spec ad3530r_channels[] = {
-       AD3530R_CHAN(0),
-       AD3530R_CHAN(1),
-       AD3530R_CHAN(2),
-       AD3530R_CHAN(3),
-       AD3530R_CHAN(4),
-       AD3530R_CHAN(5),
-       AD3530R_CHAN(6),
-       AD3530R_CHAN(7),
+       AD3530R_CHAN(0, ad3530r_ext_info),
+       AD3530R_CHAN(1, ad3530r_ext_info),
+       AD3530R_CHAN(2, ad3530r_ext_info),
+       AD3530R_CHAN(3, ad3530r_ext_info),
+       AD3530R_CHAN(4, ad3530r_ext_info),
+       AD3530R_CHAN(5, ad3530r_ext_info),
+       AD3530R_CHAN(6, ad3530r_ext_info),
+       AD3530R_CHAN(7, ad3530r_ext_info),
 };
 
 static const struct iio_chan_spec ad3531r_channels[] = {
-       AD3530R_CHAN(0),
-       AD3530R_CHAN(1),
-       AD3530R_CHAN(2),
-       AD3530R_CHAN(3),
+       AD3530R_CHAN(0, ad3531r_ext_info),
+       AD3530R_CHAN(1, ad3531r_ext_info),
+       AD3530R_CHAN(2, ad3531r_ext_info),
+       AD3530R_CHAN(3, ad3531r_ext_info),
 };
 
 static const struct ad3530r_chip_info ad3530_chip = {