linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v3 0/2] i2c: core: Introduce i2c_client_get_device_id helper
@ 2022-11-13 17:45 Angel Iglesias
  2022-11-13 17:46 ` [PATCH v3 1/2] i2c: core: Introduce i2c_client_get_device_id helper function Angel Iglesias
  2022-11-13 17:54 ` [PATCH v3 2/2] iio: pressure: bmp280: convert to i2c's .probe_new() Angel Iglesias
  0 siblings, 2 replies; 6+ messages in thread
From: Angel Iglesias @ 2022-11-13 17:45 UTC (permalink / raw)
  To: linux-iio
  Cc: Uwe Kleine-König, linux-kernel, Angel Iglesias,
	Wolfram Sang, linux-i2c

Introduces a new i2c helper to query driver match tables and recover the
identity of the bound device. This helper should help with the migration
of existing drivers to use the new i2c_driver .probe_new callback, which
does not provide the device id with the pointer to the driver data as the
previous .probe callback.

As part of the patchset, migrated the bmp280 IIO driver to .new_probe
callback using the new helper.

Changes from v2 --> v3:
* Update helper function doc comment dropping misleading sentence.

Changes from v1 --> v2:
* Add further clarification that the device queried needs to be bound to
  the driver.
* Drops extra newline after function return.
* Discard unrelated style changes.

Previous version:
 https://lore.kernel.org/all/cover.1667750698.git.ang.iglesiasg@gmail.com/

Angel Iglesias (2):
  i2c: core: Introduce i2c_client_get_device_id helper function
  iio: pressure: bmp280: convert to i2c's .probe_new()

 drivers/i2c/i2c-core-base.c       | 14 ++++++++++++++
 drivers/iio/pressure/bmp280-i2c.c |  6 +++---
 include/linux/i2c.h               |  1 +
 3 files changed, 18 insertions(+), 3 deletions(-)


base-commit: 474b4c719c40ded10b0b3450a396c0698e337802
-- 
2.38.1


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH v3 1/2] i2c: core: Introduce i2c_client_get_device_id helper function
  2022-11-13 17:45 [PATCH v3 0/2] i2c: core: Introduce i2c_client_get_device_id helper Angel Iglesias
@ 2022-11-13 17:46 ` Angel Iglesias
  2022-11-14 19:53   ` Wolfram Sang
  2022-11-14 19:55   ` Jonathan Cameron
  2022-11-13 17:54 ` [PATCH v3 2/2] iio: pressure: bmp280: convert to i2c's .probe_new() Angel Iglesias
  1 sibling, 2 replies; 6+ messages in thread
From: Angel Iglesias @ 2022-11-13 17:46 UTC (permalink / raw)
  To: linux-iio
  Cc: Uwe Kleine-König, linux-kernel, Angel Iglesias, Nuno Sá,
	Andy Shevchenko, Jonathan Cameron, Wolfram Sang, linux-i2c

Introduces new helper function to aid in .probe_new() refactors. In order
to use existing i2c_get_device_id() on the probe callback, the device
match table needs to be accessible in that function, which would require
bigger refactors in some drivers using the deprecated .probe callback.

This issue was discussed in more detail in the IIO mailing list.

Link: https://lore.kernel.org/all/20221023132302.911644-11-u.kleine-koenig@pengutronix.de/
Suggested-by: Nuno Sá <noname.nuno@gmail.com>
Suggested-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Suggested-by: Jonathan Cameron <jic23@kernel.org>
Signed-off-by: Angel Iglesias <ang.iglesiasg@gmail.com>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>

diff --git a/drivers/i2c/i2c-core-base.c b/drivers/i2c/i2c-core-base.c
index b4edf10e8fd0..9aa7b9d9a485 100644
--- a/drivers/i2c/i2c-core-base.c
+++ b/drivers/i2c/i2c-core-base.c
@@ -2236,6 +2236,20 @@ int i2c_get_device_id(const struct i2c_client *client,
 }
 EXPORT_SYMBOL_GPL(i2c_get_device_id);
 
+/**
+ * i2c_client_get_device_id - get the driver match table entry of a device
+ * @client: the device to query. The device must be bound to a driver
+ *
+ * Returns a pointer to the matching entry if found, NULL otherwise.
+ */
+const struct i2c_device_id *i2c_client_get_device_id(const struct i2c_client *client)
+{
+	const struct i2c_driver *drv = to_i2c_driver(client->dev.driver);
+
+	return i2c_match_id(drv->id_table, client);
+}
+EXPORT_SYMBOL_GPL(i2c_client_get_device_id);
+
 /* ----------------------------------------------------
  * the i2c address scanning function
  * Will not work for 10-bit addresses!
diff --git a/include/linux/i2c.h b/include/linux/i2c.h
index f7c49bbdb8a1..d84e0e99f084 100644
--- a/include/linux/i2c.h
+++ b/include/linux/i2c.h
@@ -189,6 +189,7 @@ s32 i2c_smbus_read_i2c_block_data_or_emulated(const struct i2c_client *client,
 					      u8 *values);
 int i2c_get_device_id(const struct i2c_client *client,
 		      struct i2c_device_identity *id);
+const struct i2c_device_id *i2c_client_get_device_id(const struct i2c_client *client);
 #endif /* I2C */
 
 /**
-- 
2.38.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH v3 2/2] iio: pressure: bmp280: convert to i2c's .probe_new()
  2022-11-13 17:45 [PATCH v3 0/2] i2c: core: Introduce i2c_client_get_device_id helper Angel Iglesias
  2022-11-13 17:46 ` [PATCH v3 1/2] i2c: core: Introduce i2c_client_get_device_id helper function Angel Iglesias
@ 2022-11-13 17:54 ` Angel Iglesias
  1 sibling, 0 replies; 6+ messages in thread
From: Angel Iglesias @ 2022-11-13 17:54 UTC (permalink / raw)
  To: linux-iio
  Cc: linux-kernel, Angel Iglesias, Andy Shevchenko, Jonathan Cameron,
	Jonathan Cameron, Lars-Peter Clausen, Ulf Hansson, Paul Cercueil,
	Rafael J. Wysocki

Use i2c_client_get_device_id() to get the i2c_device_id* parameter in the
.new_probe() callback.

Signed-off-by: Angel Iglesias <ang.iglesiasg@gmail.com>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Acked-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>

diff --git a/drivers/iio/pressure/bmp280-i2c.c b/drivers/iio/pressure/bmp280-i2c.c
index 0c27211f3ea0..14eab086d24a 100644
--- a/drivers/iio/pressure/bmp280-i2c.c
+++ b/drivers/iio/pressure/bmp280-i2c.c
@@ -5,11 +5,11 @@
 
 #include "bmp280.h"
 
-static int bmp280_i2c_probe(struct i2c_client *client,
-			    const struct i2c_device_id *id)
+static int bmp280_i2c_probe(struct i2c_client *client)
 {
 	struct regmap *regmap;
 	const struct regmap_config *regmap_config;
+	const struct i2c_device_id *id = i2c_client_get_device_id(client);
 
 	switch (id->driver_data) {
 	case BMP180_CHIP_ID:
@@ -65,7 +65,7 @@ static struct i2c_driver bmp280_i2c_driver = {
 		.of_match_table = bmp280_of_i2c_match,
 		.pm = pm_ptr(&bmp280_dev_pm_ops),
 	},
-	.probe		= bmp280_i2c_probe,
+	.probe_new	= bmp280_i2c_probe,
 	.id_table	= bmp280_i2c_id,
 };
 module_i2c_driver(bmp280_i2c_driver);
-- 
2.38.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH v3 1/2] i2c: core: Introduce i2c_client_get_device_id helper function
  2022-11-13 17:46 ` [PATCH v3 1/2] i2c: core: Introduce i2c_client_get_device_id helper function Angel Iglesias
@ 2022-11-14 19:53   ` Wolfram Sang
  2022-11-14 20:41     ` Jonathan Cameron
  2022-11-14 19:55   ` Jonathan Cameron
  1 sibling, 1 reply; 6+ messages in thread
From: Wolfram Sang @ 2022-11-14 19:53 UTC (permalink / raw)
  To: Angel Iglesias
  Cc: linux-iio, Uwe Kleine-König, linux-kernel, Nuno Sá,
	Andy Shevchenko, Jonathan Cameron, linux-i2c

[-- Attachment #1: Type: text/plain, Size: 1042 bytes --]

On Sun, Nov 13, 2022 at 06:46:30PM +0100, Angel Iglesias wrote:
> Introduces new helper function to aid in .probe_new() refactors. In order
> to use existing i2c_get_device_id() on the probe callback, the device
> match table needs to be accessible in that function, which would require
> bigger refactors in some drivers using the deprecated .probe callback.
> 
> This issue was discussed in more detail in the IIO mailing list.
> 
> Link: https://lore.kernel.org/all/20221023132302.911644-11-u.kleine-koenig@pengutronix.de/
> Suggested-by: Nuno Sá <noname.nuno@gmail.com>
> Suggested-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> Suggested-by: Jonathan Cameron <jic23@kernel.org>
> Signed-off-by: Angel Iglesias <ang.iglesiasg@gmail.com>
> Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>

Immutable branch here:

git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux.git i2c/client_device_id_helper-immutable

I merged this branch also into i2c/for-mergewindow.

Thank you, everyone!


[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH v3 1/2] i2c: core: Introduce i2c_client_get_device_id helper function
  2022-11-13 17:46 ` [PATCH v3 1/2] i2c: core: Introduce i2c_client_get_device_id helper function Angel Iglesias
  2022-11-14 19:53   ` Wolfram Sang
@ 2022-11-14 19:55   ` Jonathan Cameron
  1 sibling, 0 replies; 6+ messages in thread
From: Jonathan Cameron @ 2022-11-14 19:55 UTC (permalink / raw)
  To: Angel Iglesias
  Cc: linux-iio, Uwe Kleine-König, linux-kernel, Nuno Sá,
	Andy Shevchenko, Wolfram Sang, linux-i2c

On Sun, 13 Nov 2022 18:46:30 +0100
Angel Iglesias <ang.iglesiasg@gmail.com> wrote:

> Introduces new helper function to aid in .probe_new() refactors. In order
> to use existing i2c_get_device_id() on the probe callback, the device
> match table needs to be accessible in that function, which would require
> bigger refactors in some drivers using the deprecated .probe callback.
> 
> This issue was discussed in more detail in the IIO mailing list.
> 
> Link: https://lore.kernel.org/all/20221023132302.911644-11-u.kleine-koenig@pengutronix.de/
> Suggested-by: Nuno Sá <noname.nuno@gmail.com>
> Suggested-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> Suggested-by: Jonathan Cameron <jic23@kernel.org>
> Signed-off-by: Angel Iglesias <ang.iglesiasg@gmail.com>
> Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>

> 
> diff --git a/drivers/i2c/i2c-core-base.c b/drivers/i2c/i2c-core-base.c
> index b4edf10e8fd0..9aa7b9d9a485 100644
> --- a/drivers/i2c/i2c-core-base.c
> +++ b/drivers/i2c/i2c-core-base.c
> @@ -2236,6 +2236,20 @@ int i2c_get_device_id(const struct i2c_client *client,
>  }
>  EXPORT_SYMBOL_GPL(i2c_get_device_id);
>  
> +/**
> + * i2c_client_get_device_id - get the driver match table entry of a device
> + * @client: the device to query. The device must be bound to a driver
> + *
> + * Returns a pointer to the matching entry if found, NULL otherwise.
> + */
> +const struct i2c_device_id *i2c_client_get_device_id(const struct i2c_client *client)
> +{
> +	const struct i2c_driver *drv = to_i2c_driver(client->dev.driver);
> +
> +	return i2c_match_id(drv->id_table, client);
> +}
> +EXPORT_SYMBOL_GPL(i2c_client_get_device_id);
> +
>  /* ----------------------------------------------------
>   * the i2c address scanning function
>   * Will not work for 10-bit addresses!
> diff --git a/include/linux/i2c.h b/include/linux/i2c.h
> index f7c49bbdb8a1..d84e0e99f084 100644
> --- a/include/linux/i2c.h
> +++ b/include/linux/i2c.h
> @@ -189,6 +189,7 @@ s32 i2c_smbus_read_i2c_block_data_or_emulated(const struct i2c_client *client,
>  					      u8 *values);
>  int i2c_get_device_id(const struct i2c_client *client,
>  		      struct i2c_device_identity *id);
> +const struct i2c_device_id *i2c_client_get_device_id(const struct i2c_client *client);
>  #endif /* I2C */
>  
>  /**


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH v3 1/2] i2c: core: Introduce i2c_client_get_device_id helper function
  2022-11-14 19:53   ` Wolfram Sang
@ 2022-11-14 20:41     ` Jonathan Cameron
  0 siblings, 0 replies; 6+ messages in thread
From: Jonathan Cameron @ 2022-11-14 20:41 UTC (permalink / raw)
  To: Wolfram Sang
  Cc: Angel Iglesias, linux-iio, Uwe Kleine-König, linux-kernel,
	Nuno Sá,
	Andy Shevchenko, linux-i2c

On Mon, 14 Nov 2022 20:53:20 +0100
Wolfram Sang <wsa@kernel.org> wrote:

> On Sun, Nov 13, 2022 at 06:46:30PM +0100, Angel Iglesias wrote:
> > Introduces new helper function to aid in .probe_new() refactors. In order
> > to use existing i2c_get_device_id() on the probe callback, the device
> > match table needs to be accessible in that function, which would require
> > bigger refactors in some drivers using the deprecated .probe callback.
> > 
> > This issue was discussed in more detail in the IIO mailing list.
> > 
> > Link: https://lore.kernel.org/all/20221023132302.911644-11-u.kleine-koenig@pengutronix.de/
> > Suggested-by: Nuno Sá <noname.nuno@gmail.com>
> > Suggested-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> > Suggested-by: Jonathan Cameron <jic23@kernel.org>
> > Signed-off-by: Angel Iglesias <ang.iglesiasg@gmail.com>
> > Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>  
> 
> Immutable branch here:
> 
> git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux.git i2c/client_device_id_helper-immutable
> 
> I merged this branch also into i2c/for-mergewindow.
> 
> Thank you, everyone!
> 

Excellent.  Merged that into iio.git/togreg and applied patch 2.

Thanks,

Jonathan

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2022-11-14 20:29 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-11-13 17:45 [PATCH v3 0/2] i2c: core: Introduce i2c_client_get_device_id helper Angel Iglesias
2022-11-13 17:46 ` [PATCH v3 1/2] i2c: core: Introduce i2c_client_get_device_id helper function Angel Iglesias
2022-11-14 19:53   ` Wolfram Sang
2022-11-14 20:41     ` Jonathan Cameron
2022-11-14 19:55   ` Jonathan Cameron
2022-11-13 17:54 ` [PATCH v3 2/2] iio: pressure: bmp280: convert to i2c's .probe_new() Angel Iglesias

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).