Message ID | 20200831015539.26811-4-vadym.kochan@plvision.eu |
---|---|
State | Awaiting Upstream |
Delegated to: | Bartosz Golaszewski |
Headers | show |
Series | nvmem: add ONIE NVMEM cells provider | expand |
On Mon, Aug 31, 2020 at 3:56 AM Vadym Kochan <vadym.kochan@plvision.eu> wrote: > > During nvmem_register() the nvmem core sends notifications when: > > - cell added > - nvmem added > > and during these notifications some callback func may access the nvmem > device, which will fail in case of at24 eeprom because regulator and pm > are enabled after nvmem_register(). > > Signed-off-by: Vadym Kochan <vadym.kochan@plvision.eu> > --- > v3: > 1) at24 driver enables regulator and pm state machine after nvmem > registration which does not allow to use it on handing NVMEM_PRE_ADD event. > > drivers/misc/eeprom/at24.c | 11 +++++++---- > 1 file changed, 7 insertions(+), 4 deletions(-) > > diff --git a/drivers/misc/eeprom/at24.c b/drivers/misc/eeprom/at24.c > index 2591c21b2b5d..26a23abc053d 100644 > --- a/drivers/misc/eeprom/at24.c > +++ b/drivers/misc/eeprom/at24.c > @@ -692,10 +692,6 @@ static int at24_probe(struct i2c_client *client) > nvmem_config.word_size = 1; > nvmem_config.size = byte_len; > > - at24->nvmem = devm_nvmem_register(dev, &nvmem_config); > - if (IS_ERR(at24->nvmem)) > - return PTR_ERR(at24->nvmem); > - > i2c_set_clientdata(client, at24); > > err = regulator_enable(at24->vcc_reg); > @@ -708,6 +704,13 @@ static int at24_probe(struct i2c_client *client) > pm_runtime_set_active(dev); > pm_runtime_enable(dev); > > + at24->nvmem = devm_nvmem_register(dev, &nvmem_config); > + if (IS_ERR(at24->nvmem)) { > + pm_runtime_disable(dev); > + regulator_disable(at24->vcc_reg); > + return PTR_ERR(at24->nvmem); > + } > + > /* > * Perform a one-byte test read to verify that the > * chip is functional. > -- > 2.17.1 > Good catch! Thanks for the patch. Can I queue it for fixes independently from the earlier patches in this series? Bart
Hi Bartosz, On Mon, Aug 31, 2020 at 07:21:39PM +0200, Bartosz Golaszewski wrote: > On Mon, Aug 31, 2020 at 3:56 AM Vadym Kochan <vadym.kochan@plvision.eu> wrote: > > > > During nvmem_register() the nvmem core sends notifications when: > > > > - cell added > > - nvmem added > > > > and during these notifications some callback func may access the nvmem > > device, which will fail in case of at24 eeprom because regulator and pm > > are enabled after nvmem_register(). > > > > Signed-off-by: Vadym Kochan <vadym.kochan@plvision.eu> > > --- > > v3: > > 1) at24 driver enables regulator and pm state machine after nvmem > > registration which does not allow to use it on handing NVMEM_PRE_ADD event. > > > > drivers/misc/eeprom/at24.c | 11 +++++++---- > > 1 file changed, 7 insertions(+), 4 deletions(-) > > > > diff --git a/drivers/misc/eeprom/at24.c b/drivers/misc/eeprom/at24.c > > index 2591c21b2b5d..26a23abc053d 100644 > > --- a/drivers/misc/eeprom/at24.c > > +++ b/drivers/misc/eeprom/at24.c > > @@ -692,10 +692,6 @@ static int at24_probe(struct i2c_client *client) > > nvmem_config.word_size = 1; > > nvmem_config.size = byte_len; > > > > - at24->nvmem = devm_nvmem_register(dev, &nvmem_config); > > - if (IS_ERR(at24->nvmem)) > > - return PTR_ERR(at24->nvmem); > > - > > i2c_set_clientdata(client, at24); > > > > err = regulator_enable(at24->vcc_reg); > > @@ -708,6 +704,13 @@ static int at24_probe(struct i2c_client *client) > > pm_runtime_set_active(dev); > > pm_runtime_enable(dev); > > > > + at24->nvmem = devm_nvmem_register(dev, &nvmem_config); > > + if (IS_ERR(at24->nvmem)) { > > + pm_runtime_disable(dev); > > + regulator_disable(at24->vcc_reg); > > + return PTR_ERR(at24->nvmem); > > + } > > + > > /* > > * Perform a one-byte test read to verify that the > > * chip is functional. > > -- > > 2.17.1 > > > > Good catch! Thanks for the patch. Can I queue it for fixes > independently from the earlier patches in this series? > > Bart Sure. Regards, Vadym Kochan
On Mon, Aug 31, 2020 at 3:56 AM Vadym Kochan <vadym.kochan@plvision.eu> wrote: > > During nvmem_register() the nvmem core sends notifications when: > > - cell added > - nvmem added > > and during these notifications some callback func may access the nvmem > device, which will fail in case of at24 eeprom because regulator and pm > are enabled after nvmem_register(). > > Signed-off-by: Vadym Kochan <vadym.kochan@plvision.eu> > --- > v3: > 1) at24 driver enables regulator and pm state machine after nvmem > registration which does not allow to use it on handing NVMEM_PRE_ADD event. > > drivers/misc/eeprom/at24.c | 11 +++++++---- > 1 file changed, 7 insertions(+), 4 deletions(-) > > diff --git a/drivers/misc/eeprom/at24.c b/drivers/misc/eeprom/at24.c > index 2591c21b2b5d..26a23abc053d 100644 > --- a/drivers/misc/eeprom/at24.c > +++ b/drivers/misc/eeprom/at24.c > @@ -692,10 +692,6 @@ static int at24_probe(struct i2c_client *client) > nvmem_config.word_size = 1; > nvmem_config.size = byte_len; > > - at24->nvmem = devm_nvmem_register(dev, &nvmem_config); > - if (IS_ERR(at24->nvmem)) > - return PTR_ERR(at24->nvmem); > - > i2c_set_clientdata(client, at24); > > err = regulator_enable(at24->vcc_reg); > @@ -708,6 +704,13 @@ static int at24_probe(struct i2c_client *client) > pm_runtime_set_active(dev); > pm_runtime_enable(dev); > > + at24->nvmem = devm_nvmem_register(dev, &nvmem_config); > + if (IS_ERR(at24->nvmem)) { > + pm_runtime_disable(dev); > + regulator_disable(at24->vcc_reg); > + return PTR_ERR(at24->nvmem); > + } > + > /* > * Perform a one-byte test read to verify that the > * chip is functional. > -- > 2.17.1 > Queued for fixes, Cc'ed stable and added Fixes: tag. Thanks! Bart
diff --git a/drivers/misc/eeprom/at24.c b/drivers/misc/eeprom/at24.c index 2591c21b2b5d..26a23abc053d 100644 --- a/drivers/misc/eeprom/at24.c +++ b/drivers/misc/eeprom/at24.c @@ -692,10 +692,6 @@ static int at24_probe(struct i2c_client *client) nvmem_config.word_size = 1; nvmem_config.size = byte_len; - at24->nvmem = devm_nvmem_register(dev, &nvmem_config); - if (IS_ERR(at24->nvmem)) - return PTR_ERR(at24->nvmem); - i2c_set_clientdata(client, at24); err = regulator_enable(at24->vcc_reg); @@ -708,6 +704,13 @@ static int at24_probe(struct i2c_client *client) pm_runtime_set_active(dev); pm_runtime_enable(dev); + at24->nvmem = devm_nvmem_register(dev, &nvmem_config); + if (IS_ERR(at24->nvmem)) { + pm_runtime_disable(dev); + regulator_disable(at24->vcc_reg); + return PTR_ERR(at24->nvmem); + } + /* * Perform a one-byte test read to verify that the * chip is functional.
During nvmem_register() the nvmem core sends notifications when: - cell added - nvmem added and during these notifications some callback func may access the nvmem device, which will fail in case of at24 eeprom because regulator and pm are enabled after nvmem_register(). Signed-off-by: Vadym Kochan <vadym.kochan@plvision.eu> --- v3: 1) at24 driver enables regulator and pm state machine after nvmem registration which does not allow to use it on handing NVMEM_PRE_ADD event. drivers/misc/eeprom/at24.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-)