Skip to contentSkip to conversation

leds: max8997: Simplify max8997_led_set_mode implementation

PATCH In review Axel Lin 2 participants 2 messages Jul 24, 2012 LED

lore
Share & tools
lore

Axel Lin

author
#0 lore raw

PATCH 1/1 leds: max8997: Simplify max8997_led_set_mode implementation

It is not necessary to call max8997_update_reg() twice just for updating MAX8997_REG_LEN_CNTL register. With proper val and mask arguments to max8997_update_reg() call, this can be done in one max8997_update_reg() call. And then we can remove max8997_led_clear_mode() function.

---
 drivers/leds/leds-max8997.c |   60 ++++++++++---------------------------------
 1 file changed, 13 insertions(+), 47 deletions(-)
drivers/leds/leds-max8997.c +13 -47
index bf86d54..569e36d 100644
@@ -49,71 +49,37 @@ struct max8997_led {
 	struct mutex mutex;
 };
 
-static void max8997_led_clear_mode(struct max8997_led *led,
-			enum max8997_led_mode mode)
-{
-	struct i2c_client *client = led->iodev->i2c;
-	u8 val = 0, mask = 0;
-	int ret;
-
-	switch (mode) {
-	case MAX8997_FLASH_MODE:
-		mask = led->id ?
-		      MAX8997_LED1_FLASH_MASK : MAX8997_LED0_FLASH_MASK;
-		break;
-	case MAX8997_MOVIE_MODE:
-		mask = led->id ?
-		      MAX8997_LED1_MOVIE_MASK : MAX8997_LED0_MOVIE_MASK;
-		break;
-	case MAX8997_FLASH_PIN_CONTROL_MODE:
-		mask = led->id ?
-		      MAX8997_LED1_FLASH_PIN_MASK : MAX8997_LED0_FLASH_PIN_MASK;
-		break;
-	case MAX8997_MOVIE_PIN_CONTROL_MODE:
-		mask = led->id ?
-		      MAX8997_LED1_MOVIE_PIN_MASK : MAX8997_LED0_MOVIE_PIN_MASK;
-		break;
-	default:
-		break;
-	}
-
-	if (mask) {
-		ret = max8997_update_reg(client,
-				MAX8997_REG_LEN_CNTL, val, mask);
-		if (ret)
-			dev_err(led->iodev->dev,
-				"failed to update register(%d)\n", ret);
-	}
-}
-
 static void max8997_led_set_mode(struct max8997_led *led,
 			enum max8997_led_mode mode)
 {
 	int ret;
 	struct i2c_client *client = led->iodev->i2c;
-	u8 mask = 0;
-
-	/* First, clear the previous mode */
-	max8997_led_clear_mode(led, led->led_mode);
+	u8 mask = 0, val;
 
 	switch (mode) {
 	case MAX8997_FLASH_MODE:
-		mask = led->id ?
+		mask = MAX8997_LED1_FLASH_MASK | MAX8997_LED0_FLASH_MASK;
+		val = led->id ?
 		      MAX8997_LED1_FLASH_MASK : MAX8997_LED0_FLASH_MASK;
 		led->cdev.max_brightness = MAX8997_LED_FLASH_MAX_BRIGHTNESS;
 		break;
 	case MAX8997_MOVIE_MODE:
-		mask = led->id ?
+		mask = MAX8997_LED1_MOVIE_MASK | MAX8997_LED0_MOVIE_MASK;
+		val = led->id ?
 		      MAX8997_LED1_MOVIE_MASK : MAX8997_LED0_MOVIE_MASK;
 		led->cdev.max_brightness = MAX8997_LED_MOVIE_MAX_BRIGHTNESS;
 		break;
 	case MAX8997_FLASH_PIN_CONTROL_MODE:
-		mask = led->id ?
+		mask = MAX8997_LED1_FLASH_PIN_MASK |
+		       MAX8997_LED0_FLASH_PIN_MASK;
+		val = led->id ?
 		      MAX8997_LED1_FLASH_PIN_MASK : MAX8997_LED0_FLASH_PIN_MASK;
 		led->cdev.max_brightness = MAX8997_LED_FLASH_MAX_BRIGHTNESS;
 		break;
 	case MAX8997_MOVIE_PIN_CONTROL_MODE:
-		mask = led->id ?
+		mask = MAX8997_LED1_MOVIE_PIN_MASK |
+		       MAX8997_LED0_MOVIE_PIN_MASK;
+		val = led->id ?
 		      MAX8997_LED1_MOVIE_PIN_MASK : MAX8997_LED0_MOVIE_PIN_MASK;
 		led->cdev.max_brightness = MAX8997_LED_MOVIE_MAX_BRIGHTNESS;
 		break;
@@ -123,8 +89,8 @@ static void max8997_led_set_mode(struct max8997_led *led,
 	}
 
 	if (mask) {
-		ret = max8997_update_reg(client,
-				MAX8997_REG_LEN_CNTL, mask, mask);
+		ret = max8997_update_reg(client, MAX8997_REG_LEN_CNTL, val,
+					 mask);
 		if (ret)
 			dev_err(led->iodev->dev,
 				"failed to update register(%d)\n", ret);
Signature · 1 line
1.7.9.5
#1 lore raw
Quoted 6 lines · Axel Lin

It is not necessary to call max8997_update_reg() twice just for updating MAX8997_REG_LEN_CNTL register. With proper val and mask arguments to max8997_update_reg() call, this can be done in one max8997_update_reg() call. And then we can remove max8997_led_clear_mode() function.

Fair enough, I've applied it to my for-next.

Thanks,
-Bryan

Quoted 107 lines
---
 drivers/leds/leds-max8997.c |   60 ++++++++++---------------------------------
 1 file changed, 13 insertions(+), 47 deletions(-)
drivers/leds/leds-max8997.c +13 -48
index bf86d54..569e36d 100644
@@ -49,71 +49,37 @@ struct max8997_led {
        struct mutex mutex;
 };
 
-static void max8997_led_clear_mode(struct max8997_led *led,
-                       enum max8997_led_mode mode)
-{
-       struct i2c_client *client = led->iodev->i2c;
-       u8 val = 0, mask = 0;
-       int ret;
-
-       switch (mode) {
-       case MAX8997_FLASH_MODE:
-               mask = led->id ?
-                     MAX8997_LED1_FLASH_MASK : MAX8997_LED0_FLASH_MASK;
-               break;
-       case MAX8997_MOVIE_MODE:
-               mask = led->id ?
-                     MAX8997_LED1_MOVIE_MASK : MAX8997_LED0_MOVIE_MASK;
-               break;
-       case MAX8997_FLASH_PIN_CONTROL_MODE:
-               mask = led->id ?
-                     MAX8997_LED1_FLASH_PIN_MASK : MAX8997_LED0_FLASH_PIN_MASK;
-               break;
-       case MAX8997_MOVIE_PIN_CONTROL_MODE:
-               mask = led->id ?
-                     MAX8997_LED1_MOVIE_PIN_MASK : MAX8997_LED0_MOVIE_PIN_MASK;
-               break;
-       default:
-               break;
-       }
-
-       if (mask) {
-               ret = max8997_update_reg(client,
-                               MAX8997_REG_LEN_CNTL, val, mask);
-               if (ret)
-                       dev_err(led->iodev->dev,
-                               "failed to update register(%d)\n", ret);
-       }
-}
-
 static void max8997_led_set_mode(struct max8997_led *led,
                        enum max8997_led_mode mode)
 {
        int ret;
        struct i2c_client *client = led->iodev->i2c;
-       u8 mask = 0;
-
-       /* First, clear the previous mode */
-       max8997_led_clear_mode(led, led->led_mode);
+       u8 mask = 0, val;
 
        switch (mode) {
        case MAX8997_FLASH_MODE:
-               mask = led->id ?
+               mask = MAX8997_LED1_FLASH_MASK | MAX8997_LED0_FLASH_MASK;
+               val = led->id ?
                      MAX8997_LED1_FLASH_MASK : MAX8997_LED0_FLASH_MASK;
                led->cdev.max_brightness = MAX8997_LED_FLASH_MAX_BRIGHTNESS;
                break;
        case MAX8997_MOVIE_MODE:
-               mask = led->id ?
+               mask = MAX8997_LED1_MOVIE_MASK | MAX8997_LED0_MOVIE_MASK;
+               val = led->id ?
                      MAX8997_LED1_MOVIE_MASK : MAX8997_LED0_MOVIE_MASK;
                led->cdev.max_brightness = MAX8997_LED_MOVIE_MAX_BRIGHTNESS;
                break;
        case MAX8997_FLASH_PIN_CONTROL_MODE:
-               mask = led->id ?
+               mask = MAX8997_LED1_FLASH_PIN_MASK |
+                      MAX8997_LED0_FLASH_PIN_MASK;
+               val = led->id ?
                      MAX8997_LED1_FLASH_PIN_MASK : MAX8997_LED0_FLASH_PIN_MASK;
                led->cdev.max_brightness = MAX8997_LED_FLASH_MAX_BRIGHTNESS;
                break;
        case MAX8997_MOVIE_PIN_CONTROL_MODE:
-               mask = led->id ?
+               mask = MAX8997_LED1_MOVIE_PIN_MASK |
+                      MAX8997_LED0_MOVIE_PIN_MASK;
+               val = led->id ?
                      MAX8997_LED1_MOVIE_PIN_MASK : MAX8997_LED0_MOVIE_PIN_MASK;
                led->cdev.max_brightness = MAX8997_LED_MOVIE_MAX_BRIGHTNESS;
                break;
@@ -123,8 +89,8 @@ static void max8997_led_set_mode(struct max8997_led *led,
        }
 
        if (mask) {
-               ret = max8997_update_reg(client,
-                               MAX8997_REG_LEN_CNTL, mask, mask);
+               ret = max8997_update_reg(client, MAX8997_REG_LEN_CNTL, val,
+                                        mask);
                if (ret)
                        dev_err(led->iodev->dev,
                                "failed to update register(%d)\n", ret);
--

1.7.9.5

Signature · 4 lines
Bryan Wu <[email protected]>
Kernel Developer    +86.186-168-78255 Mobile
Canonical Ltd.      www.canonical.com
Ubuntu - Linux for human beings | www.ubuntu.com