diff options
Diffstat (limited to 'drivers/leds/leds-lp5523.c')
-rw-r--r-- | drivers/leds/leds-lp5523.c | 23 |
1 files changed, 10 insertions, 13 deletions
diff --git a/drivers/leds/leds-lp5523.c b/drivers/leds/leds-lp5523.c index 8e602047ce35..00547783db77 100644 --- a/drivers/leds/leds-lp5523.c +++ b/drivers/leds/leds-lp5523.c | |||
@@ -87,6 +87,7 @@ | |||
87 | #define LP5523_AUTO_CLK 0x02 | 87 | #define LP5523_AUTO_CLK 0x02 |
88 | #define LP5523_EN_LEDTEST 0x80 | 88 | #define LP5523_EN_LEDTEST 0x80 |
89 | #define LP5523_LEDTEST_DONE 0x80 | 89 | #define LP5523_LEDTEST_DONE 0x80 |
90 | #define LP5523_RESET 0xFF | ||
90 | 91 | ||
91 | #define LP5523_DEFAULT_CURRENT 50 /* microAmps */ | 92 | #define LP5523_DEFAULT_CURRENT 50 /* microAmps */ |
92 | #define LP5523_PROGRAM_LENGTH 32 /* in bytes */ | 93 | #define LP5523_PROGRAM_LENGTH 32 /* in bytes */ |
@@ -900,25 +901,12 @@ static void lp5523_unregister_leds(struct lp5523_chip *chip) | |||
900 | } | 901 | } |
901 | } | 902 | } |
902 | 903 | ||
903 | static void lp5523_reset_device(struct lp5523_chip *chip) | ||
904 | { | ||
905 | struct i2c_client *client = chip->client; | ||
906 | |||
907 | lp5523_write(client, LP5523_REG_RESET, 0xff); | ||
908 | } | ||
909 | |||
910 | static void lp5523_deinit_device(struct lp5523_chip *chip); | 904 | static void lp5523_deinit_device(struct lp5523_chip *chip); |
911 | static int lp5523_init_device(struct lp5523_chip *chip) | 905 | static int lp5523_init_device(struct lp5523_chip *chip) |
912 | { | 906 | { |
913 | struct i2c_client *client = chip->client; | 907 | struct i2c_client *client = chip->client; |
914 | int ret; | 908 | int ret; |
915 | 909 | ||
916 | lp5523_reset_device(chip); | ||
917 | |||
918 | usleep_range(10000, 20000); /* | ||
919 | * Exact value is not available. 10 - 20ms | ||
920 | * appears to be enough for reset. | ||
921 | */ | ||
922 | ret = lp5523_detect(client); | 910 | ret = lp5523_detect(client); |
923 | if (ret) | 911 | if (ret) |
924 | goto err; | 912 | goto err; |
@@ -947,6 +935,14 @@ static void lp5523_deinit_device(struct lp5523_chip *chip) | |||
947 | pdata->release_resources(); | 935 | pdata->release_resources(); |
948 | } | 936 | } |
949 | 937 | ||
938 | /* Chip specific configurations */ | ||
939 | static struct lp55xx_device_config lp5523_cfg = { | ||
940 | .reset = { | ||
941 | .addr = LP5523_REG_RESET, | ||
942 | .val = LP5523_RESET, | ||
943 | }, | ||
944 | }; | ||
945 | |||
950 | static int lp5523_probe(struct i2c_client *client, | 946 | static int lp5523_probe(struct i2c_client *client, |
951 | const struct i2c_device_id *id) | 947 | const struct i2c_device_id *id) |
952 | { | 948 | { |
@@ -972,6 +968,7 @@ static int lp5523_probe(struct i2c_client *client, | |||
972 | 968 | ||
973 | chip->cl = client; | 969 | chip->cl = client; |
974 | chip->pdata = pdata; | 970 | chip->pdata = pdata; |
971 | chip->cfg = &lp5523_cfg; | ||
975 | 972 | ||
976 | mutex_init(&chip->lock); | 973 | mutex_init(&chip->lock); |
977 | 974 | ||