* [PATCH 0/2] at24: use devm_i2c_new_dummy_device()
@ 2019-05-19 20:40 Bartosz Golaszewski
2019-05-19 20:40 ` [PATCH 1/2] eeprom: " Bartosz Golaszewski
2019-05-19 20:40 ` [PATCH 2/2] eeprom: at24: drop unnecessary label Bartosz Golaszewski
0 siblings, 2 replies; 5+ messages in thread
From: Bartosz Golaszewski @ 2019-05-19 20:40 UTC (permalink / raw)
To: linux-i2c; +Cc: Wolfram Sang, linux-kernel, Bartosz Golaszewski
From: Bartosz Golaszewski <bgolaszewski@baylibre.com>
I see Linus pulled the new helper, so here's a patch using it in at24
and also a small code tweak for better readability.
Bartosz Golaszewski (2):
eeprom: at24: use devm_i2c_new_dummy_device()
eeprom: at24: drop unnecessary label
drivers/misc/eeprom/at24.c | 65 ++++++++++++--------------------------
1 file changed, 21 insertions(+), 44 deletions(-)
--
2.21.0
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH 1/2] eeprom: at24: use devm_i2c_new_dummy_device()
2019-05-19 20:40 [PATCH 0/2] at24: use devm_i2c_new_dummy_device() Bartosz Golaszewski
@ 2019-05-19 20:40 ` Bartosz Golaszewski
2019-05-19 20:52 ` Wolfram Sang
2019-05-19 20:40 ` [PATCH 2/2] eeprom: at24: drop unnecessary label Bartosz Golaszewski
1 sibling, 1 reply; 5+ messages in thread
From: Bartosz Golaszewski @ 2019-05-19 20:40 UTC (permalink / raw)
To: linux-i2c; +Cc: Wolfram Sang, linux-kernel, Bartosz Golaszewski
From: Bartosz Golaszewski <bgolaszewski@baylibre.com>
Now that it's upstream, use the resource managed version
of i2c_new_dummy().
Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
---
drivers/misc/eeprom/at24.c | 28 ++++++----------------------
1 file changed, 6 insertions(+), 22 deletions(-)
diff --git a/drivers/misc/eeprom/at24.c b/drivers/misc/eeprom/at24.c
index 63aa541c9608..9ea196f0749f 100644
--- a/drivers/misc/eeprom/at24.c
+++ b/drivers/misc/eeprom/at24.c
@@ -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,8 +519,8 @@ 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);
+ dummy_client = devm_i2c_new_dummy_device(dev, base_client->adapter,
+ base_client->addr + index);
if (!dummy_client) {
dev_err(dev, "address 0x%02x unavailable\n", addr);
return -EADDRINUSE;
@@ -693,10 +685,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 +703,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 +723,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 +732,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 +740,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);
--
2.21.0
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH 2/2] eeprom: at24: drop unnecessary label
2019-05-19 20:40 [PATCH 0/2] at24: use devm_i2c_new_dummy_device() Bartosz Golaszewski
2019-05-19 20:40 ` [PATCH 1/2] eeprom: " Bartosz Golaszewski
@ 2019-05-19 20:40 ` Bartosz Golaszewski
1 sibling, 0 replies; 5+ messages in thread
From: Bartosz Golaszewski @ 2019-05-19 20:40 UTC (permalink / raw)
To: linux-i2c; +Cc: Wolfram Sang, linux-kernel, Bartosz Golaszewski
From: Bartosz Golaszewski <bgolaszewski@baylibre.com>
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.
Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
---
drivers/misc/eeprom/at24.c | 43 ++++++++++++++++----------------------
1 file changed, 18 insertions(+), 25 deletions(-)
diff --git a/drivers/misc/eeprom/at24.c b/drivers/misc/eeprom/at24.c
index 9ea196f0749f..0bc0a45fb98e 100644
--- a/drivers/misc/eeprom/at24.c
+++ b/drivers/misc/eeprom/at24.c
@@ -689,23 +689,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;
@@ -721,9 +704,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",
@@ -731,11 +729,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)
--
2.21.0
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH 1/2] eeprom: at24: use devm_i2c_new_dummy_device()
2019-05-19 20:40 ` [PATCH 1/2] eeprom: " Bartosz Golaszewski
@ 2019-05-19 20:52 ` Wolfram Sang
2019-05-20 6:14 ` Bartosz Golaszewski
0 siblings, 1 reply; 5+ messages in thread
From: Wolfram Sang @ 2019-05-19 20:52 UTC (permalink / raw)
To: Bartosz Golaszewski; +Cc: linux-i2c, linux-kernel, Bartosz Golaszewski
[-- Attachment #1: Type: text/plain, Size: 422 bytes --]
> Now that it's upstream, use the resource managed version
> of i2c_new_dummy().
That was fast :)
> - dummy_client = i2c_new_dummy(base_client->adapter,
> - base_client->addr + index);
> + dummy_client = devm_i2c_new_dummy_device(dev, base_client->adapter,
> + base_client->addr + index);
> if (!dummy_client) {
Oh well, the confusion starts already :/ devm_i2c_new_dummy_device()
returns an ERR_PTR.
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 1/2] eeprom: at24: use devm_i2c_new_dummy_device()
2019-05-19 20:52 ` Wolfram Sang
@ 2019-05-20 6:14 ` Bartosz Golaszewski
0 siblings, 0 replies; 5+ messages in thread
From: Bartosz Golaszewski @ 2019-05-20 6:14 UTC (permalink / raw)
To: Wolfram Sang; +Cc: Bartosz Golaszewski, linux-i2c, LKML
niedz., 19 maj 2019 o 22:52 Wolfram Sang <wsa@the-dreams.de> napisał(a):
>
>
> > Now that it's upstream, use the resource managed version
> > of i2c_new_dummy().
>
> That was fast :)
>
> > - dummy_client = i2c_new_dummy(base_client->adapter,
> > - base_client->addr + index);
> > + dummy_client = devm_i2c_new_dummy_device(dev, base_client->adapter,
> > + base_client->addr + index);
> > if (!dummy_client) {
>
> Oh well, the confusion starts already :/ devm_i2c_new_dummy_device()
> returns an ERR_PTR.
>
Ugh, sorry for that, especially since I followed the discussion on
that series. :(
I should not be sending out patches late on Sundays I guess.
Bart
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2019-05-20 6:14 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2019-05-19 20:40 [PATCH 0/2] at24: use devm_i2c_new_dummy_device() Bartosz Golaszewski
2019-05-19 20:40 ` [PATCH 1/2] eeprom: " Bartosz Golaszewski
2019-05-19 20:52 ` Wolfram Sang
2019-05-20 6:14 ` Bartosz Golaszewski
2019-05-19 20:40 ` [PATCH 2/2] eeprom: at24: drop unnecessary label Bartosz Golaszewski
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.