diff options
author | Samu Onkalo <samu.p.onkalo@nokia.com> | 2010-11-24 15:57:05 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-11-24 16:50:44 -0500 |
commit | 11e7946f196e5fdde20584e3e58c60335ee3b3bc (patch) | |
tree | 81a1ee57bd8bc9a434af718a0769cf609fc7356f /drivers/leds/leds-lp5523.c | |
parent | 95ea8eec341c1fc881407c96114de7e4173c1b7c (diff) |
drivers/leds/leds-lp5523.c: perform SW reset before detection
Chip detection may fail if the chip is in some odd state for example after
system restart. Chip doesn't have HW reset line.
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>
Diffstat (limited to 'drivers/leds/leds-lp5523.c')
-rw-r--r-- | drivers/leds/leds-lp5523.c | 12 |
1 files changed, 5 insertions, 7 deletions
diff --git a/drivers/leds/leds-lp5523.c b/drivers/leds/leds-lp5523.c index 4248d78cec37..0cc4ead2fd8b 100644 --- a/drivers/leds/leds-lp5523.c +++ b/drivers/leds/leds-lp5523.c | |||
@@ -203,13 +203,6 @@ static int lp5523_configure(struct i2c_client *client) | |||
203 | { 0x9c, 0x50, 0x9c, 0xd0, 0x9d, 0x80, 0xd8, 0x00, 0}, | 203 | { 0x9c, 0x50, 0x9c, 0xd0, 0x9d, 0x80, 0xd8, 0x00, 0}, |
204 | }; | 204 | }; |
205 | 205 | ||
206 | lp5523_write(client, LP5523_REG_RESET, 0xff); | ||
207 | |||
208 | usleep_range(10000, 20000); /* | ||
209 | * Exact value is not available. 10 - 20ms | ||
210 | * appears to be enough for reset. | ||
211 | */ | ||
212 | |||
213 | ret |= lp5523_write(client, LP5523_REG_ENABLE, LP5523_ENABLE); | 206 | ret |= lp5523_write(client, LP5523_REG_ENABLE, LP5523_ENABLE); |
214 | /* Chip startup time is 500 us, 1 - 2 ms gives some margin */ | 207 | /* Chip startup time is 500 us, 1 - 2 ms gives some margin */ |
215 | usleep_range(1000, 2000); | 208 | usleep_range(1000, 2000); |
@@ -941,6 +934,11 @@ static int lp5523_probe(struct i2c_client *client, | |||
941 | usleep_range(1000, 2000); /* 500us abs min. */ | 934 | usleep_range(1000, 2000); /* 500us abs min. */ |
942 | } | 935 | } |
943 | 936 | ||
937 | lp5523_write(client, LP5523_REG_RESET, 0xff); | ||
938 | usleep_range(10000, 20000); /* | ||
939 | * Exact value is not available. 10 - 20ms | ||
940 | * appears to be enough for reset. | ||
941 | */ | ||
944 | ret = lp5523_detect(client); | 942 | ret = lp5523_detect(client); |
945 | if (ret) | 943 | if (ret) |
946 | goto fail2; | 944 | goto fail2; |