Skip to content

Commit 15c9c90

Browse files
glneolag-linaro
authored andcommitted
leds: lp8860: Do not always program EEPROM on probe
The EEPROM has limited writes and the contents might have factory set values that should not be changed. The values currently written by this driver are just one example of values, but might not be correct for many use-cases. Do not overwrite the EEPROM with these example values every probe. At some point it would be better to populate the content of the EEPROM based on a configuration provided by the user and check that the values in EEPROM are not already the same to avoid unneeded write cycles. That configuration would depend on how the device is used on the board to which it is attached, for that Device Tree might be the right way. Until a method can be devised, gate the EEPROM writing behind a module param. Reported-by: David Owens <daowens01@gmail.com> Signed-off-by: Andrew Davis <afd@ti.com> Link: https://patch.msgid.link/20260305203706.841384-5-afd@ti.com Signed-off-by: Lee Jones <lee@kernel.org>
1 parent ca4b5ff commit 15c9c90

1 file changed

Lines changed: 15 additions & 3 deletions

File tree

drivers/leds/leds-lp8860.c

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,16 @@ struct lp8860_led {
9797
struct regmap *regmap;
9898
};
9999

100+
static bool program_eeprom;
101+
module_param(program_eeprom, bool, 0644);
102+
MODULE_PARM_DESC(program_eeprom, "Program the configuration EEPROM on device startup");
103+
104+
/*
105+
* EEPROM bits are intended to be set/programmed before normal operation only
106+
* once during silicon production, but can be reprogrammed for evaluation purposes
107+
* up to 1000 cycles. To program this EEPROM using this driver, update the below
108+
* table and set the module param "program_eeprom" to 1
109+
*/
100110
static const struct reg_sequence lp8860_eeprom_disp_regs[] = {
101111
{ LP8860_EEPROM_REG_0, 0xed },
102112
{ LP8860_EEPROM_REG_1, 0xdf },
@@ -302,9 +312,11 @@ static int lp8860_probe(struct i2c_client *client)
302312
return ret;
303313
}
304314

305-
ret = lp8860_program_eeprom(led);
306-
if (ret)
307-
return ret;
315+
if (program_eeprom) {
316+
ret = lp8860_program_eeprom(led);
317+
if (ret)
318+
return ret;
319+
}
308320

309321
init_data.fwnode = of_fwnode_handle(child_node);
310322
init_data.devicename = LP8860_NAME;

0 commit comments

Comments
 (0)