]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
leds: pca955x: Use pointers to driver data rather than I2C client
authorEddie James <eajames@linux.ibm.com>
Wed, 12 Feb 2025 14:30:36 +0000 (08:30 -0600)
committerLee Jones <lee@kernel.org>
Thu, 20 Feb 2025 14:29:08 +0000 (14:29 +0000)
As a minor clean up item, pass the driver data pointer instead of the
I2C client to the reader and writer helper functions. Now the PCA
driver data doesn't have to be looked up again in the I2C client data

Signed-off-by: Eddie James <eajames@linux.ibm.com>
Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
Link: https://lore.kernel.org/r/20250212143038.1416501-3-eajames@linux.ibm.com
Signed-off-by: Lee Jones <lee@kernel.org>
drivers/leds/leds-pca955x.c

index 4a7111a24ab49cf9cac0132a8b1a6683ef38cf9f..4990f8aff6d16377e29955699c281bae08dc3326 100644 (file)
@@ -156,16 +156,15 @@ static inline int pca955x_ledstate(u8 ls, int led_num)
  * Write to frequency prescaler register, used to program the
  * period of the PWM output.  period = (PSCx + 1) / 38
  */
-static int pca955x_write_psc(struct i2c_client *client, int n, u8 val)
+static int pca955x_write_psc(struct pca955x *pca955x, int n, u8 val)
 {
-       struct pca955x *pca955x = i2c_get_clientdata(client);
        u8 cmd = pca955x_num_input_regs(pca955x->chipdef->bits) + (2 * n);
        int ret;
 
-       ret = i2c_smbus_write_byte_data(client, cmd, val);
+       ret = i2c_smbus_write_byte_data(pca955x->client, cmd, val);
        if (ret < 0)
-               dev_err(&client->dev, "%s: reg 0x%x, val 0x%x, err %d\n",
-                       __func__, n, val, ret);
+               dev_err(&pca955x->client->dev, "%s: reg 0x%x, val 0x%x, err %d\n", __func__, n,
+                       val, ret);
        return ret;
 }
 
@@ -176,16 +175,15 @@ static int pca955x_write_psc(struct i2c_client *client, int n, u8 val)
  *
  * Duty cycle is (256 - PWMx) / 256
  */
-static int pca955x_write_pwm(struct i2c_client *client, int n, u8 val)
+static int pca955x_write_pwm(struct pca955x *pca955x, int n, u8 val)
 {
-       struct pca955x *pca955x = i2c_get_clientdata(client);
        u8 cmd = pca955x_num_input_regs(pca955x->chipdef->bits) + 1 + (2 * n);
        int ret;
 
-       ret = i2c_smbus_write_byte_data(client, cmd, val);
+       ret = i2c_smbus_write_byte_data(pca955x->client, cmd, val);
        if (ret < 0)
-               dev_err(&client->dev, "%s: reg 0x%x, val 0x%x, err %d\n",
-                       __func__, n, val, ret);
+               dev_err(&pca955x->client->dev, "%s: reg 0x%x, val 0x%x, err %d\n", __func__, n,
+                       val, ret);
        return ret;
 }
 
@@ -193,16 +191,15 @@ static int pca955x_write_pwm(struct i2c_client *client, int n, u8 val)
  * Write to LED selector register, which determines the source that
  * drives the LED output.
  */
-static int pca955x_write_ls(struct i2c_client *client, int n, u8 val)
+static int pca955x_write_ls(struct pca955x *pca955x, int n, u8 val)
 {
-       struct pca955x *pca955x = i2c_get_clientdata(client);
        u8 cmd = pca955x_num_input_regs(pca955x->chipdef->bits) + 4 + n;
        int ret;
 
-       ret = i2c_smbus_write_byte_data(client, cmd, val);
+       ret = i2c_smbus_write_byte_data(pca955x->client, cmd, val);
        if (ret < 0)
-               dev_err(&client->dev, "%s: reg 0x%x, val 0x%x, err %d\n",
-                       __func__, n, val, ret);
+               dev_err(&pca955x->client->dev, "%s: reg 0x%x, val 0x%x, err %d\n", __func__, n,
+                       val, ret);
        return ret;
 }
 
@@ -210,32 +207,28 @@ static int pca955x_write_ls(struct i2c_client *client, int n, u8 val)
  * Read the LED selector register, which determines the source that
  * drives the LED output.
  */
-static int pca955x_read_ls(struct i2c_client *client, int n, u8 *val)
+static int pca955x_read_ls(struct pca955x *pca955x, int n, u8 *val)
 {
-       struct pca955x *pca955x = i2c_get_clientdata(client);
        u8 cmd = pca955x_num_input_regs(pca955x->chipdef->bits) + 4 + n;
        int ret;
 
-       ret = i2c_smbus_read_byte_data(client, cmd);
+       ret = i2c_smbus_read_byte_data(pca955x->client, cmd);
        if (ret < 0) {
-               dev_err(&client->dev, "%s: reg 0x%x, err %d\n",
-                       __func__, n, ret);
+               dev_err(&pca955x->client->dev, "%s: reg 0x%x, err %d\n", __func__, n, ret);
                return ret;
        }
        *val = (u8)ret;
        return 0;
 }
 
-static int pca955x_read_pwm(struct i2c_client *client, int n, u8 *val)
+static int pca955x_read_pwm(struct pca955x *pca955x, int n, u8 *val)
 {
-       struct pca955x *pca955x = i2c_get_clientdata(client);
        u8 cmd = pca955x_num_input_regs(pca955x->chipdef->bits) + 1 + (2 * n);
        int ret;
 
-       ret = i2c_smbus_read_byte_data(client, cmd);
+       ret = i2c_smbus_read_byte_data(pca955x->client, cmd);
        if (ret < 0) {
-               dev_err(&client->dev, "%s: reg 0x%x, err %d\n",
-                       __func__, n, ret);
+               dev_err(&pca955x->client->dev, "%s: reg 0x%x, err %d\n", __func__, n, ret);
                return ret;
        }
        *val = (u8)ret;
@@ -249,7 +242,7 @@ static enum led_brightness pca955x_led_get(struct led_classdev *led_cdev)
        u8 ls, pwm;
        int ret;
 
-       ret = pca955x_read_ls(pca955x->client, pca955x_led->led_num / 4, &ls);
+       ret = pca955x_read_ls(pca955x, pca955x_led->led_num / 4, &ls);
        if (ret)
                return ret;
 
@@ -264,7 +257,7 @@ static enum led_brightness pca955x_led_get(struct led_classdev *led_cdev)
                ret = LED_HALF;
                break;
        case PCA955X_LS_BLINK1:
-               ret = pca955x_read_pwm(pca955x->client, 1, &pwm);
+               ret = pca955x_read_pwm(pca955x, 1, &pwm);
                if (ret)
                        return ret;
                ret = 255 - pwm;
@@ -286,7 +279,7 @@ static int pca955x_led_set(struct led_classdev *led_cdev,
 
        mutex_lock(&pca955x->lock);
 
-       ret = pca955x_read_ls(pca955x->client, reg, &ls);
+       ret = pca955x_read_ls(pca955x, reg, &ls);
        if (ret)
                goto out;
 
@@ -308,14 +301,14 @@ static int pca955x_led_set(struct led_classdev *led_cdev,
                 * OFF, HALF, or FULL.  But, this is probably better than
                 * just turning off for all other values.
                 */
-               ret = pca955x_write_pwm(pca955x->client, 1, 255 - value);
+               ret = pca955x_write_pwm(pca955x, 1, 255 - value);
                if (ret)
                        goto out;
                ls = pca955x_ledsel(ls, bit, PCA955X_LS_BLINK1);
                break;
        }
 
-       ret = pca955x_write_ls(pca955x->client, reg, ls);
+       ret = pca955x_write_ls(pca955x, reg, ls);
 
 out:
        mutex_unlock(&pca955x->lock);
@@ -579,22 +572,22 @@ static int pca955x_probe(struct i2c_client *client)
        }
 
        /* PWM0 is used for half brightness or 50% duty cycle */
-       err = pca955x_write_pwm(client, 0, 255 - LED_HALF);
+       err = pca955x_write_pwm(pca955x, 0, 255 - LED_HALF);
        if (err)
                return err;
 
        if (!keep_pwm) {
                /* PWM1 is used for variable brightness, default to OFF */
-               err = pca955x_write_pwm(client, 1, 0);
+               err = pca955x_write_pwm(pca955x, 1, 0);
                if (err)
                        return err;
        }
 
        /* Set to fast frequency so we do not see flashing */
-       err = pca955x_write_psc(client, 0, 0);
+       err = pca955x_write_psc(pca955x, 0, 0);
        if (err)
                return err;
-       err = pca955x_write_psc(client, 1, 0);
+       err = pca955x_write_psc(pca955x, 1, 0);
        if (err)
                return err;