diff mbox series

i2c: mux: reg: Remove class-based device auto-detection support

Message ID 69f19443-f2ca-4158-9d25-160db55bfb57@gmail.com
State Accepted
Headers show
Series i2c: mux: reg: Remove class-based device auto-detection support | expand

Commit Message

Heiner Kallweit Nov. 8, 2023, 6:38 a.m. UTC
Legacy class-based device auto-detection shouldn't be used in new code.
Therefore remove support in i2c-mux-reg as long as we don't have a
user of this feature yet.

Link: https://lore.kernel.org/linux-i2c/a22978a4-88e4-46f4-b71c-032b22321599@gmail.com/
Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
---
 drivers/i2c/muxes/i2c-mux-reg.c           | 4 +---
 include/linux/platform_data/i2c-mux-reg.h | 2 --
 2 files changed, 1 insertion(+), 5 deletions(-)

Comments

Heiner Kallweit Dec. 19, 2023, 9:44 p.m. UTC | #1
On 08.11.2023 07:38, Heiner Kallweit wrote:
> Legacy class-based device auto-detection shouldn't be used in new code.
> Therefore remove support in i2c-mux-reg as long as we don't have a
> user of this feature yet.
> 
> Link: https://lore.kernel.org/linux-i2c/a22978a4-88e4-46f4-b71c-032b22321599@gmail.com/
> Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
> ---
>  drivers/i2c/muxes/i2c-mux-reg.c           | 4 +---
>  include/linux/platform_data/i2c-mux-reg.h | 2 --
>  2 files changed, 1 insertion(+), 5 deletions(-)
> 
> diff --git a/drivers/i2c/muxes/i2c-mux-reg.c b/drivers/i2c/muxes/i2c-mux-reg.c
> index 9efc1ed01..8489971ba 100644
> --- a/drivers/i2c/muxes/i2c-mux-reg.c
> +++ b/drivers/i2c/muxes/i2c-mux-reg.c
> @@ -159,7 +159,6 @@ static int i2c_mux_reg_probe(struct platform_device *pdev)
>  	struct regmux *mux;
>  	struct i2c_adapter *parent;
>  	struct resource *res;
> -	unsigned int class;
>  	int i, ret, nr;
>  
>  	mux = devm_kzalloc(&pdev->dev, sizeof(*mux), GFP_KERNEL);
> @@ -213,9 +212,8 @@ static int i2c_mux_reg_probe(struct platform_device *pdev)
>  
>  	for (i = 0; i < mux->data.n_values; i++) {
>  		nr = mux->data.base_nr ? (mux->data.base_nr + i) : 0;
> -		class = mux->data.classes ? mux->data.classes[i] : 0;
>  
> -		ret = i2c_mux_add_adapter(muxc, nr, mux->data.values[i], class);
> +		ret = i2c_mux_add_adapter(muxc, nr, mux->data.values[i], 0);
>  		if (ret)
>  			goto err_del_mux_adapters;
>  	}
> diff --git a/include/linux/platform_data/i2c-mux-reg.h b/include/linux/platform_data/i2c-mux-reg.h
> index 2543c2a1c..e2e895768 100644
> --- a/include/linux/platform_data/i2c-mux-reg.h
> +++ b/include/linux/platform_data/i2c-mux-reg.h
> @@ -17,7 +17,6 @@
>   * @n_values: Number of multiplexer channels
>   * @little_endian: Indicating if the register is in little endian
>   * @write_only: Reading the register is not allowed by hardware
> - * @classes: Optional I2C auto-detection classes
>   * @idle: Value to write to mux when idle
>   * @idle_in_use: indicate if idle value is in use
>   * @reg: Virtual address of the register to switch channel
> @@ -30,7 +29,6 @@ struct i2c_mux_reg_platform_data {
>  	int n_values;
>  	bool little_endian;
>  	bool write_only;
> -	const unsigned int *classes;
>  	u32 idle;
>  	bool idle_in_use;
>  	void __iomem *reg;

Any feedback on this patch? We're at 6.7-rc6 and I if there's any
feedback I'd like to incorporate it before the 6.8 merge window.
Wolfram Sang Dec. 20, 2023, 8:45 p.m. UTC | #2
On Wed, Nov 08, 2023 at 07:38:07AM +0100, Heiner Kallweit wrote:
> Legacy class-based device auto-detection shouldn't be used in new code.
> Therefore remove support in i2c-mux-reg as long as we don't have a
> user of this feature yet.
> 
> Link: https://lore.kernel.org/linux-i2c/a22978a4-88e4-46f4-b71c-032b22321599@gmail.com/
> Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>

Applied to for-next, thanks!

I guess i2c-mux-gpio is more difficult because it has users already?
Heiner Kallweit Dec. 20, 2023, 8:58 p.m. UTC | #3
On 20.12.2023 21:45, Wolfram Sang wrote:
> On Wed, Nov 08, 2023 at 07:38:07AM +0100, Heiner Kallweit wrote:
>> Legacy class-based device auto-detection shouldn't be used in new code.
>> Therefore remove support in i2c-mux-reg as long as we don't have a
>> user of this feature yet.
>>
>> Link: https://lore.kernel.org/linux-i2c/a22978a4-88e4-46f4-b71c-032b22321599@gmail.com/
>> Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
> 
> Applied to for-next, thanks!
> 
> I guess i2c-mux-gpio is more difficult because it has users already?
> 
Right. i801 has a special handling for certain Asus server models with
> 8 memory slots where the smbus to the SPD eeproms is gpio-muxed.
I2C_CLASS_HWMON is passed to the child adapters to probe for DIMM
thermal sensors.

For getting rid of the class-based probing we have to:
- Extend i2c_register_spd() for use on muxed smbus segments.
  Then i2c_register_spd() instantiates at24 to handle the SPD eeprom (for DDR3)
- at24 then checks the SPD for an advertised thermal sensor, and instantiates
  jc42 to handle the thermal sensor -> a patch for this has been submitted

The extension of i2c_register_spd() needs some more thoughts.
diff mbox series

Patch

diff --git a/drivers/i2c/muxes/i2c-mux-reg.c b/drivers/i2c/muxes/i2c-mux-reg.c
index 9efc1ed01..8489971ba 100644
--- a/drivers/i2c/muxes/i2c-mux-reg.c
+++ b/drivers/i2c/muxes/i2c-mux-reg.c
@@ -159,7 +159,6 @@  static int i2c_mux_reg_probe(struct platform_device *pdev)
 	struct regmux *mux;
 	struct i2c_adapter *parent;
 	struct resource *res;
-	unsigned int class;
 	int i, ret, nr;
 
 	mux = devm_kzalloc(&pdev->dev, sizeof(*mux), GFP_KERNEL);
@@ -213,9 +212,8 @@  static int i2c_mux_reg_probe(struct platform_device *pdev)
 
 	for (i = 0; i < mux->data.n_values; i++) {
 		nr = mux->data.base_nr ? (mux->data.base_nr + i) : 0;
-		class = mux->data.classes ? mux->data.classes[i] : 0;
 
-		ret = i2c_mux_add_adapter(muxc, nr, mux->data.values[i], class);
+		ret = i2c_mux_add_adapter(muxc, nr, mux->data.values[i], 0);
 		if (ret)
 			goto err_del_mux_adapters;
 	}
diff --git a/include/linux/platform_data/i2c-mux-reg.h b/include/linux/platform_data/i2c-mux-reg.h
index 2543c2a1c..e2e895768 100644
--- a/include/linux/platform_data/i2c-mux-reg.h
+++ b/include/linux/platform_data/i2c-mux-reg.h
@@ -17,7 +17,6 @@ 
  * @n_values: Number of multiplexer channels
  * @little_endian: Indicating if the register is in little endian
  * @write_only: Reading the register is not allowed by hardware
- * @classes: Optional I2C auto-detection classes
  * @idle: Value to write to mux when idle
  * @idle_in_use: indicate if idle value is in use
  * @reg: Virtual address of the register to switch channel
@@ -30,7 +29,6 @@  struct i2c_mux_reg_platform_data {
 	int n_values;
 	bool little_endian;
 	bool write_only;
-	const unsigned int *classes;
 	u32 idle;
 	bool idle_in_use;
 	void __iomem *reg;