]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
light: tsl2591: simplify tsl2591_persist functions via lookup table
authorMatheus Silveira <matheus.feitosa@usp.br>
Thu, 28 May 2026 18:55:12 +0000 (15:55 -0300)
committerJonathan Cameron <jic23@kernel.org>
Sun, 31 May 2026 10:01:51 +0000 (11:01 +0100)
Replace switch statements with an indexed lookup table for
persist cycle conversions.

Both functions contain redundant switch statements. This
reduces code duplication and makes future updates to
TSL2591_PRST_ALS_INT_CYCLE_* definitions easier to maintain
by keeping the mapping in a single place.

Signed-off-by: Matheus Silveira <matheus.feitosa@usp.br>
Co-developed-by: Lucas Rabaquim <lucas.rabaquim@usp.br>
Signed-off-by: Lucas Rabaquim <lucas.rabaquim@usp.br>
Signed-off-by: Jonathan Cameron <jic23@kernel.org>
drivers/iio/light/tsl2591.c

index c5557867ea43d1305c05f4bee0983b97d2d2c620..ac5e1822b993d84741f50285c3796070c6f2379c 100644 (file)
@@ -192,6 +192,24 @@ static const int tsl2591_calibscale_available[] = {
        1, 25, 428, 9876,
 };
 
+static const u8 tsl2591_persist_table[] = {
+       [TSL2591_PRST_ALS_INT_CYCLE_ANY] = 1,
+       [TSL2591_PRST_ALS_INT_CYCLE_2]   = 2,
+       [TSL2591_PRST_ALS_INT_CYCLE_3]   = 3,
+       [TSL2591_PRST_ALS_INT_CYCLE_5]   = 5,
+       [TSL2591_PRST_ALS_INT_CYCLE_10]  = 10,
+       [TSL2591_PRST_ALS_INT_CYCLE_15]  = 15,
+       [TSL2591_PRST_ALS_INT_CYCLE_20]  = 20,
+       [TSL2591_PRST_ALS_INT_CYCLE_25]  = 25,
+       [TSL2591_PRST_ALS_INT_CYCLE_30]  = 30,
+       [TSL2591_PRST_ALS_INT_CYCLE_35]  = 35,
+       [TSL2591_PRST_ALS_INT_CYCLE_40]  = 40,
+       [TSL2591_PRST_ALS_INT_CYCLE_45]  = 45,
+       [TSL2591_PRST_ALS_INT_CYCLE_50]  = 50,
+       [TSL2591_PRST_ALS_INT_CYCLE_55]  = 55,
+       [TSL2591_PRST_ALS_INT_CYCLE_60]  = 60,
+};
+
 static int tsl2591_set_als_lower_threshold(struct tsl2591_chip *chip,
                                           u16 als_lower_threshold);
 static int tsl2591_set_als_upper_threshold(struct tsl2591_chip *chip,
@@ -231,78 +249,22 @@ static int tsl2591_multiplier_to_gain(const u32 multiplier)
 
 static int tsl2591_persist_cycle_to_lit(const u8 als_persist)
 {
-       switch (als_persist) {
-       case TSL2591_PRST_ALS_INT_CYCLE_ANY:
-               return 1;
-       case TSL2591_PRST_ALS_INT_CYCLE_2:
-               return 2;
-       case TSL2591_PRST_ALS_INT_CYCLE_3:
-               return 3;
-       case TSL2591_PRST_ALS_INT_CYCLE_5:
-               return 5;
-       case TSL2591_PRST_ALS_INT_CYCLE_10:
-               return 10;
-       case TSL2591_PRST_ALS_INT_CYCLE_15:
-               return 15;
-       case TSL2591_PRST_ALS_INT_CYCLE_20:
-               return 20;
-       case TSL2591_PRST_ALS_INT_CYCLE_25:
-               return 25;
-       case TSL2591_PRST_ALS_INT_CYCLE_30:
-               return 30;
-       case TSL2591_PRST_ALS_INT_CYCLE_35:
-               return 35;
-       case TSL2591_PRST_ALS_INT_CYCLE_40:
-               return 40;
-       case TSL2591_PRST_ALS_INT_CYCLE_45:
-               return 45;
-       case TSL2591_PRST_ALS_INT_CYCLE_50:
-               return 50;
-       case TSL2591_PRST_ALS_INT_CYCLE_55:
-               return 55;
-       case TSL2591_PRST_ALS_INT_CYCLE_60:
-               return 60;
-       default:
+       if (als_persist >= ARRAY_SIZE(tsl2591_persist_table) ||
+           !tsl2591_persist_table[als_persist])
                return -EINVAL;
-       }
+
+       return tsl2591_persist_table[als_persist];
 }
 
 static int tsl2591_persist_lit_to_cycle(const u8 als_persist)
 {
-       switch (als_persist) {
-       case 1:
-               return TSL2591_PRST_ALS_INT_CYCLE_ANY;
-       case 2:
-               return TSL2591_PRST_ALS_INT_CYCLE_2;
-       case 3:
-               return TSL2591_PRST_ALS_INT_CYCLE_3;
-       case 5:
-               return TSL2591_PRST_ALS_INT_CYCLE_5;
-       case 10:
-               return TSL2591_PRST_ALS_INT_CYCLE_10;
-       case 15:
-               return TSL2591_PRST_ALS_INT_CYCLE_15;
-       case 20:
-               return TSL2591_PRST_ALS_INT_CYCLE_20;
-       case 25:
-               return TSL2591_PRST_ALS_INT_CYCLE_25;
-       case 30:
-               return TSL2591_PRST_ALS_INT_CYCLE_30;
-       case 35:
-               return TSL2591_PRST_ALS_INT_CYCLE_35;
-       case 40:
-               return TSL2591_PRST_ALS_INT_CYCLE_40;
-       case 45:
-               return TSL2591_PRST_ALS_INT_CYCLE_45;
-       case 50:
-               return TSL2591_PRST_ALS_INT_CYCLE_50;
-       case 55:
-               return TSL2591_PRST_ALS_INT_CYCLE_55;
-       case 60:
-               return TSL2591_PRST_ALS_INT_CYCLE_60;
-       default:
-               return -EINVAL;
+       for (unsigned int i = TSL2591_PRST_ALS_INT_CYCLE_ANY;
+            i < ARRAY_SIZE(tsl2591_persist_table); i++) {
+               if (als_persist == tsl2591_persist_table[i])
+                       return i;
        }
+
+       return -EINVAL;
 }
 
 static int tsl2591_compatible_int_time(struct tsl2591_chip *chip,