From: Manuel Fombuena fombuena@outlook.com
[ Upstream commit a17d9e736ddd78323e77d3066c1e86371a99023c ]
Arguably, there are more chances of errors occurring during the initialization of the hardware, so this should complete successfully before the devicetree node's children are initialized.
st1202_dt_init() fills the led_classdev struct.
st1202_setup() initializes the hardware. Specifically, resets the chip, enables its phase-shift delay feature, enables the device and disables all the LEDs channels. All that writing to registers, with no input from st1202_dt_init().
Real-world testing corroborates that calling st1202_setup() before st1202_dt_init() doesn't cause any issue during initialization.
Switch the order of st1202_dt_init() and st1202_setup() to ensure the hardware is correctly initialized before the led_classdev struct is filled.
Signed-off-by: Manuel Fombuena fombuena@outlook.com Link: https://lore.kernel.org/r/CWLP123MB54731877A8DC54EDD33F0229C5C22@CWLP123MB54... Signed-off-by: Lee Jones lee@kernel.org Signed-off-by: Sasha Levin sashal@kernel.org --- drivers/leds/leds-st1202.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/leds/leds-st1202.c b/drivers/leds/leds-st1202.c index 4cebc0203c227..ccea216c11f9b 100644 --- a/drivers/leds/leds-st1202.c +++ b/drivers/leds/leds-st1202.c @@ -350,11 +350,11 @@ static int st1202_probe(struct i2c_client *client) return ret; chip->client = client;
- ret = st1202_dt_init(chip); + ret = st1202_setup(chip); if (ret < 0) return ret;
- ret = st1202_setup(chip); + ret = st1202_dt_init(chip); if (ret < 0) return ret;