at24: use devm_i2c_new_dummy_device()
Subsystems (2)
v2 cover at24: use devm_i2c_new_dummy_device()
From: Bartosz Golaszewski <[email protected]>
Now that we have a resource managed version of i2c_new_dummy_device(), use it in at24.
v1 -> v2:
- i2c_new_dummy_device() returns ERR_PTR(), not NULL so check the value correctly
- remove the no longer needed i2c_unregister_device() in error path
Bartosz Golaszewski (2):
eeprom: at24: use devm_i2c_new_dummy_device()
eeprom: at24: drop unnecessary label
drivers/misc/eeprom/at24.c | 75 ++++++++++++-------------------------- 1 file changed, 24 insertions(+), 51 deletions(-)
Signature · 1 line
2.21.0
PATCH v2 1/2 eeprom: at24: use devm_i2c_new_dummy_device()
From: Bartosz Golaszewski <[email protected]>
Now that it's upstream, use the resource managed version of i2c_new_dummy_device().
--- drivers/misc/eeprom/at24.c | 38 +++++++++----------------------------- 1 file changed, 9 insertions(+), 29 deletions(-)
drivers/misc/eeprom/at24.c +9 -29
@@ -507,14 +507,6 @@ static const struct at24_chip_data *at24_get_chip_data(struct device *dev)return cdata; } -static void at24_remove_dummy_clients (struct at24_data *at24) -{ -int i; - -for (i =1 ; i < at24->num_addresses; i++) -i2c_unregister_device (at24->client[i].client); -} -static int at24_make_dummy_client (struct at24_data *at24,unsigned int index,struct regmap_config *regmap_config) {
@@ -527,18 +519,14 @@ static int at24_make_dummy_client(struct at24_data *at24, unsigned int index, dev = &base_client->dev; addr = base_client->addr + index; - dummy_client =i2c_new_dummy (base_client->adapter, - base_client->addr + index); -if (!dummy_client) { -dev_err (dev,"address 0x%02x unavailable\n" , addr); -return -EADDRINUSE ; - } + dummy_client =devm_i2c_new_dummy_device (dev, base_client->adapter, + base_client->addr + index); +if (IS_ERR (dummy_client)) +return PTR_ERR (dummy_client); regmap =devm_regmap_init_i2c (dummy_client, regmap_config); -if (IS_ERR (regmap)) { -i2c_unregister_device (dummy_client); +if (IS_ERR (regmap))return PTR_ERR (regmap); - } at24->client[index].client = dummy_client; at24->client[index].regmap = regmap;
@@ -693,10 +681,8 @@ static int at24_probe(struct i2c_client *client)/* use dummy devices for multiple-address chips */ for (i =1 ; i < num_addresses; i++) { err =at24_make_dummy_client (at24, i, ®map_config); -if (err) { -at24_remove_dummy_clients (at24); +if (err)return err; - } }i2c_set_clientdata (client, at24);
@@ -713,7 +699,7 @@ static int at24_probe(struct i2c_client *client)pm_runtime_idle (dev);if (err) { err = -ENODEV ; - goto err_clients; + goto err_runtime_pm; } nvmem_config.name =dev_name (dev);
@@ -733,7 +719,7 @@ static int at24_probe(struct i2c_client *client) at24->nvmem =devm_nvmem_register (dev, &nvmem_config);if (IS_ERR (at24->nvmem)) { err =PTR_ERR (at24->nvmem); - goto err_clients; + goto err_runtime_pm; } dev_info(dev, "%u byte %s EEPROM, %s, %u bytes/write\n",
@@ -742,8 +728,7 @@ static int at24_probe(struct i2c_client *client)return 0 ; -err_clients: -at24_remove_dummy_clients (at24); +err_runtime_pm:pm_runtime_disable (dev);return err;
@@ -751,11 +736,6 @@ static int at24_probe(struct i2c_client *client)static int at24_remove (struct i2c_client *client) { -struct at24_data *at24; - - at24 =i2c_get_clientdata (client); - -at24_remove_dummy_clients (at24);pm_runtime_disable (&client->dev);pm_runtime_set_suspended (&client->dev);
Signature · 1 line
2.21.0
PATCH v2 2/2 eeprom: at24: drop unnecessary label
In reply to Bartosz GolaszewskiFrom: Bartosz Golaszewski <[email protected]>
If we move the nvmem registration above the pm enable calls and the test read, we can drop the error label and make the code more readable as there's now only a single place where we must call pm_runtime_disable() in error path.
--- drivers/misc/eeprom/at24.c | 43 ++++++++++++++++---------------------- 1 file changed, 18 insertions(+), 25 deletions(-)
drivers/misc/eeprom/at24.c +18 -25
@@ -685,23 +685,6 @@ static int at24_probe(struct i2c_client *client)return err; } -i2c_set_clientdata (client, at24); - -/* enable runtime pm */ -pm_runtime_set_active (dev); -pm_runtime_enable (dev); - -/* -* Perform a one-byte test read to verify that the -* chip is functional. -*/ - err =at24_read (at24,0 , &test_byte,1 ); -pm_runtime_idle (dev); -if (err) { - err = -ENODEV ; - goto err_runtime_pm; - } - nvmem_config.name =dev_name (dev); nvmem_config.dev = dev; nvmem_config.read_only = !writable;
@@ -717,9 +700,24 @@ static int at24_probe(struct i2c_client *client) nvmem_config.size = byte_len; at24->nvmem =devm_nvmem_register (dev, &nvmem_config); -if (IS_ERR (at24->nvmem)) { - err =PTR_ERR (at24->nvmem); - goto err_runtime_pm; +if (IS_ERR (at24->nvmem)) +return PTR_ERR (at24->nvmem); + +i2c_set_clientdata (client, at24); + +/* enable runtime pm */ +pm_runtime_set_active (dev); +pm_runtime_enable (dev); + +/* +* Perform a one-byte test read to verify that the +* chip is functional. +*/ + err =at24_read (at24,0 , &test_byte,1 ); +pm_runtime_idle (dev); +if (err) { +pm_runtime_disable (dev); +return -ENODEV ; } dev_info(dev, "%u byte %s EEPROM, %s, %u bytes/write\n",
@@ -727,11 +725,6 @@ static int at24_probe(struct i2c_client *client) writable ? "writable" : "read-only", at24->write_max);return 0 ; - -err_runtime_pm: -pm_runtime_disable (dev); - -return err; }static int at24_remove (struct i2c_client *client)
Signature · 1 line
2.21.0
Re: [PATCH v2 1/2] eeprom: at24: use devm_i2c_new_dummy_device()
In reply to Bartosz GolaszewskiQuoted 6 lines · Bartosz Golaszewski
From: Bartosz Golaszewski <[email protected]>
Now that it's upstream, use the resource managed version of
i2c_new_dummy_device().Signed-off-by Bartosz Golaszewski <[email protected]>
Looks good now (not tested, though):
Thanks!
Bartosz Golaszewski
AppliedRe: [PATCH v2 1/2] eeprom: at24: use devm_i2c_new_dummy_device()
pon., 20 maj 2019 o 15:08 Wolfram Sang <[email protected]> napisał(a):
Quoted 7 lines · Bartosz Golaszewski
Quoted 5 lines
From: Bartosz Golaszewski <[email protected]>
Now that it's upstream, use the resource managed version of
i2c_new_dummy_device().
Quoted 8 lines
Quoted 1 line
Signed-off-by Bartosz Golaszewski <[email protected]>Looks good now (not tested, though):
Reviewed-by Wolfram Sang <[email protected]>Thanks!
Applied.
Bart