linux-pm.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v1 0/2] i2c: Reduce use of i2c_of_match_device()
@ 2025-02-12 16:46 Andy Shevchenko
  2025-02-12 16:46 ` [PATCH v1 1/2] power: ip5xxx_power: Make use of i2c_get_match_data() Andy Shevchenko
  2025-02-12 16:46 ` [PATCH v1 2/2] i2c: Unexport i2c_of_match_device() Andy Shevchenko
  0 siblings, 2 replies; 5+ messages in thread
From: Andy Shevchenko @ 2025-02-12 16:46 UTC (permalink / raw)
  To: Andy Shevchenko, Bence Csókás, Sebastian Reichel,
	Wolfram Sang, linux-i2c, linux-kernel, linux-pm
  Cc: Samuel Holland, Sebastian Reichel

The i2c_of_match_device() was developed as internal API and was exported just
in case well before we get an idea of the generic helper for getting driver
data for the matched device. For all the times of i2c_of_match_device() being
exported there were _only_ three users, two of which had been already converted
to better API. For preventing the use of i2c_of_match_device(), make it private
to I²C subsystem.

This is assumed to go via I²C tree, but can be done differently taking into
account the immutable tag or branch for involved subsystems.

Please, review and ack.

Andy Shevchenko (2):
  power: ip5xxx_power: Make use of i2c_get_match_data()
  i2c: Unexport i2c_of_match_device()

 drivers/i2c/i2c-core-of.c           |  1 -
 drivers/i2c/i2c-core.h              |  9 +++++++++
 drivers/power/supply/ip5xxx_power.c |  6 ++----
 include/linux/i2c.h                 | 11 -----------
 4 files changed, 11 insertions(+), 16 deletions(-)

-- 
2.45.1.3035.g276e886db78b


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

* [PATCH v1 1/2] power: ip5xxx_power: Make use of i2c_get_match_data()
  2025-02-12 16:46 [PATCH v1 0/2] i2c: Reduce use of i2c_of_match_device() Andy Shevchenko
@ 2025-02-12 16:46 ` Andy Shevchenko
  2025-02-12 17:07   ` Sebastian Reichel
  2025-02-12 16:46 ` [PATCH v1 2/2] i2c: Unexport i2c_of_match_device() Andy Shevchenko
  1 sibling, 1 reply; 5+ messages in thread
From: Andy Shevchenko @ 2025-02-12 16:46 UTC (permalink / raw)
  To: Andy Shevchenko, Bence Csókás, Sebastian Reichel,
	Wolfram Sang, linux-i2c, linux-kernel, linux-pm
  Cc: Samuel Holland, Sebastian Reichel

Get matching data in one step by switching to use i2c_get_match_data().

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 drivers/power/supply/ip5xxx_power.c | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/drivers/power/supply/ip5xxx_power.c b/drivers/power/supply/ip5xxx_power.c
index c448e0ac0dfa..717ec86c769b 100644
--- a/drivers/power/supply/ip5xxx_power.c
+++ b/drivers/power/supply/ip5xxx_power.c
@@ -828,7 +828,7 @@ static void ip5xxx_setup_regs(struct device *dev, struct ip5xxx *ip5xxx,
 
 static int ip5xxx_power_probe(struct i2c_client *client)
 {
-	const struct ip5xxx_regfield_config *fields = &ip51xx_fields;
+	const struct ip5xxx_regfield_config *fields;
 	struct power_supply_config psy_cfg = {};
 	struct device *dev = &client->dev;
 	const struct of_device_id *of_id;
@@ -843,9 +843,7 @@ static int ip5xxx_power_probe(struct i2c_client *client)
 	if (IS_ERR(ip5xxx->regmap))
 		return PTR_ERR(ip5xxx->regmap);
 
-	of_id = i2c_of_match_device(dev->driver->of_match_table, client);
-	if (of_id)
-		fields = (const struct ip5xxx_regfield_config *)of_id->data;
+	fields = i2c_get_match_data(client) ?: &ip51xx_fields;
 	ip5xxx_setup_regs(dev, ip5xxx, fields);
 
 	psy_cfg.of_node = dev->of_node;
-- 
2.45.1.3035.g276e886db78b


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

* [PATCH v1 2/2] i2c: Unexport i2c_of_match_device()
  2025-02-12 16:46 [PATCH v1 0/2] i2c: Reduce use of i2c_of_match_device() Andy Shevchenko
  2025-02-12 16:46 ` [PATCH v1 1/2] power: ip5xxx_power: Make use of i2c_get_match_data() Andy Shevchenko
@ 2025-02-12 16:46 ` Andy Shevchenko
  1 sibling, 0 replies; 5+ messages in thread
From: Andy Shevchenko @ 2025-02-12 16:46 UTC (permalink / raw)
  To: Andy Shevchenko, Bence Csókás, Sebastian Reichel,
	Wolfram Sang, linux-i2c, linux-kernel, linux-pm
  Cc: Samuel Holland, Sebastian Reichel

i2c_of_match_device() is not used anymore outside of I²C framework,
unexport it.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 drivers/i2c/i2c-core-of.c |  1 -
 drivers/i2c/i2c-core.h    |  9 +++++++++
 include/linux/i2c.h       | 11 -----------
 3 files changed, 9 insertions(+), 12 deletions(-)

diff --git a/drivers/i2c/i2c-core-of.c b/drivers/i2c/i2c-core-of.c
index a6c407d36800..02feee6c9ba9 100644
--- a/drivers/i2c/i2c-core-of.c
+++ b/drivers/i2c/i2c-core-of.c
@@ -157,7 +157,6 @@ const struct of_device_id
 
 	return i2c_of_match_device_sysfs(matches, client);
 }
-EXPORT_SYMBOL_GPL(i2c_of_match_device);
 
 #if IS_ENABLED(CONFIG_OF_DYNAMIC)
 static int of_i2c_notify(struct notifier_block *nb, unsigned long action,
diff --git a/drivers/i2c/i2c-core.h b/drivers/i2c/i2c-core.h
index 36587f38dff3..4797ba88331c 100644
--- a/drivers/i2c/i2c-core.h
+++ b/drivers/i2c/i2c-core.h
@@ -84,8 +84,17 @@ static inline void i2c_acpi_remove_space_handler(struct i2c_adapter *adapter) {
 
 #ifdef CONFIG_OF
 void of_i2c_register_devices(struct i2c_adapter *adap);
+const struct of_device_id *i2c_of_match_device(const struct of_device_id *matches,
+					       struct i2c_client *client);
+
 #else
 static inline void of_i2c_register_devices(struct i2c_adapter *adap) { }
+static inline
+const struct of_device_id *i2c_of_match_device(const struct of_device_id *matches,
+					       struct i2c_client *client)
+{
+	return NULL;
+}
 #endif
 extern struct notifier_block i2c_of_notifier;
 
diff --git a/include/linux/i2c.h b/include/linux/i2c.h
index ae2ef3da6ecd..4d281ff5582b 100644
--- a/include/linux/i2c.h
+++ b/include/linux/i2c.h
@@ -1039,10 +1039,6 @@ static inline struct i2c_adapter *of_get_i2c_adapter_by_node(struct device_node
 	return i2c_get_adapter_by_fwnode(of_fwnode_handle(node));
 }
 
-const struct of_device_id
-*i2c_of_match_device(const struct of_device_id *matches,
-		     struct i2c_client *client);
-
 int of_i2c_get_board_info(struct device *dev, struct device_node *node,
 			  struct i2c_board_info *info);
 
@@ -1063,13 +1059,6 @@ static inline struct i2c_adapter *of_get_i2c_adapter_by_node(struct device_node
 	return NULL;
 }
 
-static inline const struct of_device_id
-*i2c_of_match_device(const struct of_device_id *matches,
-		     struct i2c_client *client)
-{
-	return NULL;
-}
-
 static inline int of_i2c_get_board_info(struct device *dev,
 					struct device_node *node,
 					struct i2c_board_info *info)
-- 
2.45.1.3035.g276e886db78b


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

* Re: [PATCH v1 1/2] power: ip5xxx_power: Make use of i2c_get_match_data()
  2025-02-12 16:46 ` [PATCH v1 1/2] power: ip5xxx_power: Make use of i2c_get_match_data() Andy Shevchenko
@ 2025-02-12 17:07   ` Sebastian Reichel
  2025-02-13  9:56     ` Andy Shevchenko
  0 siblings, 1 reply; 5+ messages in thread
From: Sebastian Reichel @ 2025-02-12 17:07 UTC (permalink / raw)
  To: Andy Shevchenko
  Cc: Bence Csókás, Wolfram Sang, linux-i2c, linux-kernel,
	linux-pm, Samuel Holland

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

Hi,

On Wed, Feb 12, 2025 at 06:46:23PM +0200, Andy Shevchenko wrote:
> Get matching data in one step by switching to use i2c_get_match_data().
> 
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> ---

Acked-by: Sebastian Reichel <sebastian.reichel@collabora.com>

-- Sebastian

>  drivers/power/supply/ip5xxx_power.c | 6 ++----
>  1 file changed, 2 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/power/supply/ip5xxx_power.c b/drivers/power/supply/ip5xxx_power.c
> index c448e0ac0dfa..717ec86c769b 100644
> --- a/drivers/power/supply/ip5xxx_power.c
> +++ b/drivers/power/supply/ip5xxx_power.c
> @@ -828,7 +828,7 @@ static void ip5xxx_setup_regs(struct device *dev, struct ip5xxx *ip5xxx,
>  
>  static int ip5xxx_power_probe(struct i2c_client *client)
>  {
> -	const struct ip5xxx_regfield_config *fields = &ip51xx_fields;
> +	const struct ip5xxx_regfield_config *fields;
>  	struct power_supply_config psy_cfg = {};
>  	struct device *dev = &client->dev;
>  	const struct of_device_id *of_id;
> @@ -843,9 +843,7 @@ static int ip5xxx_power_probe(struct i2c_client *client)
>  	if (IS_ERR(ip5xxx->regmap))
>  		return PTR_ERR(ip5xxx->regmap);
>  
> -	of_id = i2c_of_match_device(dev->driver->of_match_table, client);
> -	if (of_id)
> -		fields = (const struct ip5xxx_regfield_config *)of_id->data;
> +	fields = i2c_get_match_data(client) ?: &ip51xx_fields;
>  	ip5xxx_setup_regs(dev, ip5xxx, fields);
>  
>  	psy_cfg.of_node = dev->of_node;
> -- 
> 2.45.1.3035.g276e886db78b
> 

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

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

* Re: [PATCH v1 1/2] power: ip5xxx_power: Make use of i2c_get_match_data()
  2025-02-12 17:07   ` Sebastian Reichel
@ 2025-02-13  9:56     ` Andy Shevchenko
  0 siblings, 0 replies; 5+ messages in thread
From: Andy Shevchenko @ 2025-02-13  9:56 UTC (permalink / raw)
  To: Sebastian Reichel
  Cc: Bence Csókás, Wolfram Sang, linux-i2c, linux-kernel,
	linux-pm, Samuel Holland

On Wed, Feb 12, 2025 at 06:07:19PM +0100, Sebastian Reichel wrote:
> On Wed, Feb 12, 2025 at 06:46:23PM +0200, Andy Shevchenko wrote:
> > Get matching data in one step by switching to use i2c_get_match_data().

...

> Acked-by: Sebastian Reichel <sebastian.reichel@collabora.com>

Thank you!

...

> >  static int ip5xxx_power_probe(struct i2c_client *client)
> >  {
> > -	const struct ip5xxx_regfield_config *fields = &ip51xx_fields;
> > +	const struct ip5xxx_regfield_config *fields;
> >  	struct power_supply_config psy_cfg = {};
> >  	struct device *dev = &client->dev;

> >  	const struct of_device_id *of_id;

Seems I forgot to drop this (unused) variable.

> > @@ -843,9 +843,7 @@ static int ip5xxx_power_probe(struct i2c_client *client)
> >  	if (IS_ERR(ip5xxx->regmap))
> >  		return PTR_ERR(ip5xxx->regmap);
> >  
> > -	of_id = i2c_of_match_device(dev->driver->of_match_table, client);
> > -	if (of_id)
> > -		fields = (const struct ip5xxx_regfield_config *)of_id->data;
> > +	fields = i2c_get_match_data(client) ?: &ip51xx_fields;

-- 
With Best Regards,
Andy Shevchenko



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

end of thread, other threads:[~2025-02-13  9:56 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-02-12 16:46 [PATCH v1 0/2] i2c: Reduce use of i2c_of_match_device() Andy Shevchenko
2025-02-12 16:46 ` [PATCH v1 1/2] power: ip5xxx_power: Make use of i2c_get_match_data() Andy Shevchenko
2025-02-12 17:07   ` Sebastian Reichel
2025-02-13  9:56     ` Andy Shevchenko
2025-02-12 16:46 ` [PATCH v1 2/2] i2c: Unexport i2c_of_match_device() Andy Shevchenko

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).