]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
iio: light: ltr501: Factor out core of write_raw() where direct mode claim is held.
authorJonathan Cameron <Jonathan.Cameron@huawei.com>
Sun, 9 Mar 2025 17:06:22 +0000 (17:06 +0000)
committerJonathan Cameron <Jonathan.Cameron@huawei.com>
Tue, 22 Apr 2025 18:09:56 +0000 (19:09 +0100)
Factoring this code out allows for direct returns on error simplifying code
flow.

Reviewed-by: David Lechner <dlechner@baylibre.com>
Link: https://patch.msgid.link/20250309170633.1347476-8-jic23@kernel.org
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
drivers/iio/light/ltr501.c

index b42df15b36e133eff65bbaddb0ec7d75a1916ac4..c44c852a7d768f4d08550bb287bd9e0d59b8834c 100644 (file)
@@ -763,18 +763,14 @@ static int ltr501_get_gain_index(const struct ltr501_gain *gain, int size,
        return -1;
 }
 
-static int ltr501_write_raw(struct iio_dev *indio_dev,
-                           struct iio_chan_spec const *chan,
-                           int val, int val2, long mask)
+static int __ltr501_write_raw(struct iio_dev *indio_dev,
+                             struct iio_chan_spec const *chan,
+                             int val, int val2, long mask)
 {
        struct ltr501_data *data = iio_priv(indio_dev);
        int i, ret, freq_val, freq_val2;
        const struct ltr501_chip_info *info = data->chip_info;
 
-       ret = iio_device_claim_direct_mode(indio_dev);
-       if (ret)
-               return ret;
-
        switch (mask) {
        case IIO_CHAN_INFO_SCALE:
                switch (chan->type) {
@@ -782,53 +778,43 @@ static int ltr501_write_raw(struct iio_dev *indio_dev,
                        i = ltr501_get_gain_index(info->als_gain,
                                                  info->als_gain_tbl_size,
                                                  val, val2);
-                       if (i < 0) {
-                               ret = -EINVAL;
-                               break;
-                       }
+                       if (i < 0)
+                               return -EINVAL;
 
                        data->als_contr &= ~info->als_gain_mask;
                        data->als_contr |= i << info->als_gain_shift;
 
-                       ret = regmap_write(data->regmap, LTR501_ALS_CONTR,
-                                          data->als_contr);
-                       break;
+                       return regmap_write(data->regmap, LTR501_ALS_CONTR,
+                                           data->als_contr);
                case IIO_PROXIMITY:
                        i = ltr501_get_gain_index(info->ps_gain,
                                                  info->ps_gain_tbl_size,
                                                  val, val2);
-                       if (i < 0) {
-                               ret = -EINVAL;
-                               break;
-                       }
+                       if (i < 0)
+                               return -EINVAL;
+
                        data->ps_contr &= ~LTR501_CONTR_PS_GAIN_MASK;
                        data->ps_contr |= i << LTR501_CONTR_PS_GAIN_SHIFT;
 
-                       ret = regmap_write(data->regmap, LTR501_PS_CONTR,
-                                          data->ps_contr);
-                       break;
+                       return regmap_write(data->regmap, LTR501_PS_CONTR,
+                                           data->ps_contr);
                default:
-                       ret = -EINVAL;
-                       break;
+                       return -EINVAL;
                }
-               break;
 
        case IIO_CHAN_INFO_INT_TIME:
                switch (chan->type) {
                case IIO_INTENSITY:
-                       if (val != 0) {
-                               ret = -EINVAL;
-                               break;
-                       }
+                       if (val != 0)
+                               return -EINVAL;
+
                        mutex_lock(&data->lock_als);
                        ret = ltr501_set_it_time(data, val2);
                        mutex_unlock(&data->lock_als);
-                       break;
+                       return ret;
                default:
-                       ret = -EINVAL;
-                       break;
+                       return -EINVAL;
                }
-               break;
 
        case IIO_CHAN_INFO_SAMP_FREQ:
                switch (chan->type) {
@@ -836,50 +822,62 @@ static int ltr501_write_raw(struct iio_dev *indio_dev,
                        ret = ltr501_als_read_samp_freq(data, &freq_val,
                                                        &freq_val2);
                        if (ret < 0)
-                               break;
+                               return ret;
 
                        ret = ltr501_als_write_samp_freq(data, val, val2);
                        if (ret < 0)
-                               break;
+                               return ret;
 
                        /* update persistence count when changing frequency */
                        ret = ltr501_write_intr_prst(data, chan->type,
                                                     0, data->als_period);
 
                        if (ret < 0)
-                               ret = ltr501_als_write_samp_freq(data, freq_val,
-                                                                freq_val2);
-                       break;
+                               /* Do not ovewrite error */
+                               ltr501_als_write_samp_freq(data, freq_val,
+                                                          freq_val2);
+                       return ret;
                case IIO_PROXIMITY:
                        ret = ltr501_ps_read_samp_freq(data, &freq_val,
                                                       &freq_val2);
                        if (ret < 0)
-                               break;
+                               return ret;
 
                        ret = ltr501_ps_write_samp_freq(data, val, val2);
                        if (ret < 0)
-                               break;
+                               return ret;
 
                        /* update persistence count when changing frequency */
                        ret = ltr501_write_intr_prst(data, chan->type,
                                                     0, data->ps_period);
 
                        if (ret < 0)
-                               ret = ltr501_ps_write_samp_freq(data, freq_val,
-                                                               freq_val2);
-                       break;
+                               /* Do not overwrite error */
+                               ltr501_ps_write_samp_freq(data, freq_val,
+                                                         freq_val2);
+                       return ret;
                default:
-                       ret = -EINVAL;
-                       break;
+                       return -EINVAL;
                }
-               break;
-
        default:
-               ret = -EINVAL;
-               break;
+               return -EINVAL;
        }
+}
+
+static int ltr501_write_raw(struct iio_dev *indio_dev,
+                           struct iio_chan_spec const *chan,
+                           int val, int val2, long mask)
+{
+       int ret;
+
+       ret = iio_device_claim_direct_mode(indio_dev);
+       if (ret)
+               return ret;
+
+       ret = __ltr501_write_raw(indio_dev, chan, val, val2, mask);
 
        iio_device_release_direct_mode(indio_dev);
+
        return ret;
 }