Re: [Re-send: PATCH i2c-next 6/6] i2c: mux: mlxcpld: Extend supported mux number

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi!

Sorry for the late review.

On 2020-11-18 15:44, Vadim Pasternak wrote:
> Allow to extend mux number supported by driver.
> Currently it is limited by eight, which is not enough for new coming
> Mellanox modular system with line cards, which require up to 64 mux
> support.
> 
> Signed-off-by: Vadim Pasternak <vadimp@xxxxxxxxxx>
> Reviewed-by: Michael Shych <michaelsh@xxxxxxxxxx>
> ---
>  drivers/i2c/muxes/i2c-mux-mlxcpld.c   | 17 +++++------------
>  include/linux/platform_data/mlxcpld.h |  3 +++
>  2 files changed, 8 insertions(+), 12 deletions(-)
> 
> diff --git a/drivers/i2c/muxes/i2c-mux-mlxcpld.c b/drivers/i2c/muxes/i2c-mux-mlxcpld.c
> index c76180919fc3..760636b507fa 100644
> --- a/drivers/i2c/muxes/i2c-mux-mlxcpld.c
> +++ b/drivers/i2c/muxes/i2c-mux-mlxcpld.c
> @@ -15,8 +15,6 @@
>  #include <linux/platform_device.h>
>  #include <linux/slab.h>
>  
> -#define CPLD_MUX_MAX_NCHANS	8
> -
>  /* mlxcpld_mux - mux control structure:
>   * @last_chan - last register value
>   * @client - I2C device client
> @@ -24,7 +22,7 @@
>   * @sel_buf: I2C message buffer for mux select 16 bits transactions
>   */
>  struct mlxcpld_mux {
> -	u8 last_chan;
> +	int last_chan;
>  	struct i2c_client *client;
>  	struct mlxcpld_mux_plat_data pdata;
>  	u8 sel_buf[3];
> @@ -94,7 +92,6 @@ static int mlxcpld_mux_select_chan(struct i2c_mux_core *muxc, u32 chan)
>  	int err = 0;
>  
>  	/* Only select the channel if its different from the last channel */
> -	chan++;

This breaks a property of _deselect which previously always triggered a write to the
register. It's also a subtle change without any motivation. How is this connected to
extending the mux channel count?

>  	if (mux->last_chan != chan) {
>  		err = mlxcpld_mux_reg_write(muxc->parent, mux, chan);
>  		mux->last_chan = err < 0 ? 0 : chan;
> @@ -143,7 +140,7 @@ static int mlxcpld_mux_probe(struct platform_device *pdev)
>  	if (!i2c_check_functionality(client->adapter, func))
>  		return -ENODEV;
>  
> -	muxc = i2c_mux_alloc(client->adapter, &pdev->dev, CPLD_MUX_MAX_NCHANS,
> +	muxc = i2c_mux_alloc(client->adapter, &pdev->dev, pdata->num_adaps,
>  			     sizeof(*data), 0, mlxcpld_mux_select_chan,
>  			     mlxcpld_mux_deselect);
>  	if (!muxc)
> @@ -158,13 +155,9 @@ static int mlxcpld_mux_probe(struct platform_device *pdev)
>  	data->last_chan = 0; /* force the first selection */
>  
>  	/* Create an adapter for each channel. */
> -	for (num = 0; num < CPLD_MUX_MAX_NCHANS; num++) {
> -		if (num >= pdata->num_adaps)
> -			/* discard unconfigured channels */
> -			break;
> -
> -		force = pdata->adap_ids[num];
> -
> +	for (num = 0; num < pdata->num_adaps; num++) {
> +		force = pdata->base_nr ? (pdata->base_nr +
> +			pdata->adap_ids[num]) : pdata->adap_ids[num];
>  		err = i2c_mux_add_adapter(muxc, force, num, 0);
>  		if (err)
>  			goto virt_reg_failed;
> diff --git a/include/linux/platform_data/mlxcpld.h b/include/linux/platform_data/mlxcpld.h
> index da4f7e8f5721..ea88817b3b35 100644
> --- a/include/linux/platform_data/mlxcpld.h
> +++ b/include/linux/platform_data/mlxcpld.h
> @@ -11,12 +11,15 @@
>  /* Platform data for the CPLD I2C multiplexers */
>  
>  /* mlxcpld_mux_plat_data - per mux data, used with i2c_register_board_info
> + * @base_nr: base I2C bus number to number adapters from or zero for setting
> + *	     to adap_ids vector
>   * @adap_ids - adapter array
>   * @num_adaps - number of adapters
>   * @sel_reg_addr - mux select register offset in CPLD space
>   * @reg_size: register size in bytes (default 0 - 1 byte data, 1 - 2 bytes data
>   */
>  struct mlxcpld_mux_plat_data {
> +	int base_nr;

The changes related to adding a base is not mentioned in the commit message. It's
totally unrelated to extending the number of supported channels, AFAICT.

Cheers,
Peter

>  	int *adap_ids;
>  	int num_adaps;
>  	int sel_reg_addr;
> 




[Index of Archives]     [Linux GPIO]     [Linux SPI]     [Linux Hardward Monitoring]     [LM Sensors]     [Linux USB Devel]     [Linux Media]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux