Skip to content

Commit

Permalink
drivers/leds/leds-lp5521.c: adjust delays and add comments to them
Browse files Browse the repository at this point in the history
Delays were little bit too long.  Adjust delay times and add some comments
to them.

Signed-off-by: Samu Onkalo <samu.p.onkalo@nokia.com>
Cc: Richard Purdie <rpurdie@rpsys.net>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
  • Loading branch information
Samu Onkalo authored and Linus Torvalds committed Nov 24, 2010
1 parent 87dbf62 commit 09c76b0
Showing 1 changed file with 16 additions and 9 deletions.
25 changes: 16 additions & 9 deletions drivers/leds/leds-lp5521.c
Original file line number Diff line number Diff line change
Expand Up @@ -196,14 +196,17 @@ static int lp5521_load_program(struct lp5521_engine *eng, const u8 *pattern)

/* move current engine to direct mode and remember the state */
ret = lp5521_set_engine_mode(eng, LP5521_CMD_DIRECT);
usleep_range(1000, 10000);
/* Mode change requires min 500 us delay. 1 - 2 ms with margin */
usleep_range(1000, 2000);
ret |= lp5521_read(client, LP5521_REG_OP_MODE, &mode);

/* For loading, all the engines to load mode */
lp5521_write(client, LP5521_REG_OP_MODE, LP5521_CMD_DIRECT);
usleep_range(1000, 10000);
/* Mode change requires min 500 us delay. 1 - 2 ms with margin */
usleep_range(1000, 2000);
lp5521_write(client, LP5521_REG_OP_MODE, LP5521_CMD_LOAD);
usleep_range(1000, 10000);
/* Mode change requires min 500 us delay. 1 - 2 ms with margin */
usleep_range(1000, 2000);

addr = LP5521_PROG_MEM_BASE + eng->prog_page * LP5521_PROG_MEM_SIZE;
i2c_smbus_write_i2c_block_data(client,
Expand Down Expand Up @@ -244,7 +247,10 @@ static int lp5521_configure(struct i2c_client *client,

lp5521_write(client, LP5521_REG_RESET, 0xff);

usleep_range(10000, 20000);
usleep_range(10000, 20000); /*
* Exact value is not available. 10 - 20ms
* appears to be enough for reset.
*/

/* Set all PWMs to direct control mode */
ret = lp5521_write(client, LP5521_REG_OP_MODE, 0x3F);
Expand All @@ -262,8 +268,8 @@ static int lp5521_configure(struct i2c_client *client,
ret |= lp5521_write(client, LP5521_REG_ENABLE,
LP5521_MASTER_ENABLE | LP5521_LOGARITHMIC_PWM |
LP5521_EXEC_RUN);
/* enable takes 500us */
usleep_range(500, 20000);
/* enable takes 500us. 1 - 2 ms leaves some margin */
usleep_range(1000, 2000);

return ret;
}
Expand Down Expand Up @@ -316,7 +322,8 @@ static int lp5521_detect(struct i2c_client *client)
LP5521_MASTER_ENABLE | LP5521_LOGARITHMIC_PWM);
if (ret)
return ret;
usleep_range(1000, 10000);
/* enable takes 500us. 1 - 2 ms leaves some margin */
usleep_range(1000, 2000);
ret = lp5521_read(client, LP5521_REG_ENABLE, &buf);
if (ret)
return ret;
Expand Down Expand Up @@ -704,9 +711,9 @@ static int lp5521_probe(struct i2c_client *client,

if (pdata->enable) {
pdata->enable(0);
usleep_range(1000, 10000);
usleep_range(1000, 2000); /* Keep enable down at least 1ms */
pdata->enable(1);
usleep_range(1000, 10000); /* Spec says min 500us */
usleep_range(1000, 2000); /* 500us abs min. */
}

ret = lp5521_detect(client);
Expand Down

0 comments on commit 09c76b0

Please sign in to comment.