Commit 2e4840ed authored by Samu Onkalo's avatar Samu Onkalo Committed by Linus Torvalds

drivers/leds/leds-lp5523.c: adjust delays and add comments to them

Delays were little bit too long.  Adjust delay times and add some comments
to them.
Signed-off-by: default avatarSamu Onkalo <samu.p.onkalo@nokia.com>
Cc: Richard Purdie <rpurdie@rpsys.net>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 09c76b0f
...@@ -205,11 +205,14 @@ static int lp5523_configure(struct i2c_client *client) ...@@ -205,11 +205,14 @@ static int lp5523_configure(struct i2c_client *client)
lp5523_write(client, LP5523_REG_RESET, 0xff); lp5523_write(client, LP5523_REG_RESET, 0xff);
usleep_range(10000, 100000); usleep_range(10000, 20000); /*
* Exact value is not available. 10 - 20ms
* appears to be enough for reset.
*/
ret |= lp5523_write(client, LP5523_REG_ENABLE, LP5523_ENABLE); ret |= lp5523_write(client, LP5523_REG_ENABLE, LP5523_ENABLE);
/* Chip startup time after reset is 500 us */ /* Chip startup time is 500 us, 1 - 2 ms gives some margin */
usleep_range(1000, 10000); usleep_range(1000, 2000);
ret |= lp5523_write(client, LP5523_REG_CONFIG, ret |= lp5523_write(client, LP5523_REG_CONFIG,
LP5523_AUTO_INC | LP5523_PWR_SAVE | LP5523_AUTO_INC | LP5523_PWR_SAVE |
...@@ -246,8 +249,8 @@ static int lp5523_configure(struct i2c_client *client) ...@@ -246,8 +249,8 @@ static int lp5523_configure(struct i2c_client *client)
return -1; return -1;
} }
/* Wait 3ms and check the engine status */ /* Let the programs run for couple of ms and check the engine status */
usleep_range(3000, 20000); usleep_range(3000, 6000);
lp5523_read(client, LP5523_REG_STATUS, &status); lp5523_read(client, LP5523_REG_STATUS, &status);
status &= LP5523_ENG_STATUS_MASK; status &= LP5523_ENG_STATUS_MASK;
...@@ -452,10 +455,10 @@ static ssize_t lp5523_selftest(struct device *dev, ...@@ -452,10 +455,10 @@ static ssize_t lp5523_selftest(struct device *dev,
/* Measure VDD (i.e. VBAT) first (channel 16 corresponds to VDD) */ /* Measure VDD (i.e. VBAT) first (channel 16 corresponds to VDD) */
lp5523_write(chip->client, LP5523_REG_LED_TEST_CTRL, lp5523_write(chip->client, LP5523_REG_LED_TEST_CTRL,
LP5523_EN_LEDTEST | 16); LP5523_EN_LEDTEST | 16);
usleep_range(3000, 10000); usleep_range(3000, 6000); /* ADC conversion time is typically 2.7 ms */
ret = lp5523_read(chip->client, LP5523_REG_STATUS, &status); ret = lp5523_read(chip->client, LP5523_REG_STATUS, &status);
if (!(status & LP5523_LEDTEST_DONE)) if (!(status & LP5523_LEDTEST_DONE))
usleep_range(3000, 10000); usleep_range(3000, 6000); /* Was not ready. Wait little bit */
ret |= lp5523_read(chip->client, LP5523_REG_LED_TEST_ADC, &vdd); ret |= lp5523_read(chip->client, LP5523_REG_LED_TEST_ADC, &vdd);
vdd--; /* There may be some fluctuation in measurement */ vdd--; /* There may be some fluctuation in measurement */
...@@ -471,16 +474,16 @@ static ssize_t lp5523_selftest(struct device *dev, ...@@ -471,16 +474,16 @@ static ssize_t lp5523_selftest(struct device *dev,
chip->pdata->led_config[i].led_current); chip->pdata->led_config[i].led_current);
lp5523_write(chip->client, LP5523_REG_LED_PWM_BASE + i, 0xff); lp5523_write(chip->client, LP5523_REG_LED_PWM_BASE + i, 0xff);
/* let current stabilize 2ms before measurements start */ /* let current stabilize 2 - 4ms before measurements start */
usleep_range(2000, 10000); usleep_range(2000, 4000);
lp5523_write(chip->client, lp5523_write(chip->client,
LP5523_REG_LED_TEST_CTRL, LP5523_REG_LED_TEST_CTRL,
LP5523_EN_LEDTEST | i); LP5523_EN_LEDTEST | i);
/* ledtest takes 2.7ms */ /* ADC conversion time is 2.7 ms typically */
usleep_range(3000, 10000); usleep_range(3000, 6000);
ret = lp5523_read(chip->client, LP5523_REG_STATUS, &status); ret = lp5523_read(chip->client, LP5523_REG_STATUS, &status);
if (!(status & LP5523_LEDTEST_DONE)) if (!(status & LP5523_LEDTEST_DONE))
usleep_range(3000, 10000); usleep_range(3000, 6000);/* Was not ready. Wait. */
ret |= lp5523_read(chip->client, LP5523_REG_LED_TEST_ADC, &adc); ret |= lp5523_read(chip->client, LP5523_REG_LED_TEST_ADC, &adc);
if (adc >= vdd || adc < LP5523_ADC_SHORTCIRC_LIM) if (adc >= vdd || adc < LP5523_ADC_SHORTCIRC_LIM)
...@@ -933,9 +936,9 @@ static int lp5523_probe(struct i2c_client *client, ...@@ -933,9 +936,9 @@ static int lp5523_probe(struct i2c_client *client,
if (pdata->enable) { if (pdata->enable) {
pdata->enable(0); pdata->enable(0);
usleep_range(1000, 10000); usleep_range(1000, 2000); /* Keep enable down at least 1ms */
pdata->enable(1); pdata->enable(1);
usleep_range(1000, 10000); /* Spec says min 500us */ usleep_range(1000, 2000); /* 500us abs min. */
} }
ret = lp5523_detect(client); ret = lp5523_detect(client);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment