* [PATCH RFT] leds: max8997: Simplify max8997_led_set_mode implementation
@ 2012-07-24 6:29 Axel Lin
2012-07-24 7:56 ` Bryan Wu
0 siblings, 1 reply; 2+ messages in thread
From: Axel Lin @ 2012-07-24 6:29 UTC (permalink / raw)
To: Bryan Wu; +Cc: Donggeun Kim, Richard Purdie, linux-leds, linux-kernel
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.
Signed-off-by: Axel Lin <axel.lin@gmail.com>
---
drivers/leds/leds-max8997.c | 60 ++++++++++---------------------------------
1 file changed, 13 insertions(+), 47 deletions(-)
diff --git a/drivers/leds/leds-max8997.c b/drivers/leds/leds-max8997.c
index bf86d54..569e36d 100644
--- a/drivers/leds/leds-max8997.c
+++ b/drivers/leds/leds-max8997.c
@@ -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
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH RFT] leds: max8997: Simplify max8997_led_set_mode implementation
2012-07-24 6:29 [PATCH RFT] leds: max8997: Simplify max8997_led_set_mode implementation Axel Lin
@ 2012-07-24 7:56 ` Bryan Wu
0 siblings, 0 replies; 2+ messages in thread
From: Bryan Wu @ 2012-07-24 7:56 UTC (permalink / raw)
To: Axel Lin; +Cc: Donggeun Kim, Richard Purdie, linux-leds, linux-kernel
On Tue, Jul 24, 2012 at 2:29 PM, Axel Lin <axel.lin@gmail.com> wrote:
> 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.
>
> Signed-off-by: Axel Lin <axel.lin@gmail.com>
Fair enough, I've applied it to my for-next.
Thanks,
-Bryan
> ---
> drivers/leds/leds-max8997.c | 60 ++++++++++---------------------------------
> 1 file changed, 13 insertions(+), 47 deletions(-)
>
> diff --git a/drivers/leds/leds-max8997.c b/drivers/leds/leds-max8997.c
> index bf86d54..569e36d 100644
> --- a/drivers/leds/leds-max8997.c
> +++ b/drivers/leds/leds-max8997.c
> @@ -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
>
>
>
--
Bryan Wu <bryan.wu@canonical.com>
Kernel Developer +86.186-168-78255 Mobile
Canonical Ltd. www.canonical.com
Ubuntu - Linux for human beings | www.ubuntu.com
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2012-07-24 7:57 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-07-24 6:29 [PATCH RFT] leds: max8997: Simplify max8997_led_set_mode implementation Axel Lin
2012-07-24 7:56 ` Bryan Wu
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).