Re: [PATCH v1 1/2] i2c: designware: Make master module optional

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

 



On Mon, Mar 23, 2020 at 12:04:50PM +0200, Andy Shevchenko wrote:
> In some cases we know that the controller will be always used in slave mode and
> master is just a bulk. In order to drop that, introduce a separate configuration
> parameter for master mode. Default it to core to avoid regressions.
> 

This series depends to [1] "Provide generic definitions for bus frequencies".

[1]: http://patchwork.ozlabs.org/patch/1259203/

> Signed-off-by: Andy Shevchenko <andriy.shevchenko@xxxxxxxxxxxxxxx>
> ---
>  drivers/i2c/busses/Kconfig                  | 10 ++++++++++
>  drivers/i2c/busses/Makefile                 |  5 ++++-
>  drivers/i2c/busses/i2c-designware-core.h    | 19 ++++++++++++++++++-
>  drivers/i2c/busses/i2c-designware-master.c  |  4 ++--
>  drivers/i2c/busses/i2c-designware-pcidrv.c  |  2 +-
>  drivers/i2c/busses/i2c-designware-platdrv.c |  6 +-----
>  6 files changed, 36 insertions(+), 10 deletions(-)
> 
> diff --git a/drivers/i2c/busses/Kconfig b/drivers/i2c/busses/Kconfig
> index 2ddca08f8a76..1df238ff8dd0 100644
> --- a/drivers/i2c/busses/Kconfig
> +++ b/drivers/i2c/busses/Kconfig
> @@ -527,6 +527,16 @@ config I2C_DAVINCI
>  config I2C_DESIGNWARE_CORE
>  	tristate
>  
> +config I2C_DESIGNWARE_MASTER
> +	bool "Synopsys DesignWare Master"
> +	default I2C_DESIGNWARE_CORE
> +	help
> +	  If you say yes to this option, support will be included for the
> +	  Synopsys DesignWare I2C master adapter.
> +
> +	  This is not a standalone module, this module compiles together with
> +	  i2c-designware-core.
> +
>  config I2C_DESIGNWARE_PLATFORM
>  	tristate "Synopsys DesignWare Platform"
>  	select I2C_DESIGNWARE_CORE
> diff --git a/drivers/i2c/busses/Makefile b/drivers/i2c/busses/Makefile
> index 25d60889713c..829731d4a1f9 100644
> --- a/drivers/i2c/busses/Makefile
> +++ b/drivers/i2c/busses/Makefile
> @@ -49,7 +49,10 @@ obj-$(CONFIG_I2C_CBUS_GPIO)	+= i2c-cbus-gpio.o
>  obj-$(CONFIG_I2C_CPM)		+= i2c-cpm.o
>  obj-$(CONFIG_I2C_DAVINCI)	+= i2c-davinci.o
>  obj-$(CONFIG_I2C_DESIGNWARE_CORE)	+= i2c-designware-core.o
> -i2c-designware-core-objs := i2c-designware-common.o i2c-designware-master.o
> +i2c-designware-core-objs := i2c-designware-common.o
> +ifeq ($(CONFIG_I2C_DESIGNWARE_MASTER),y)
> +i2c-designware-core-objs += i2c-designware-master.o
> +endif
>  ifeq ($(CONFIG_I2C_DESIGNWARE_SLAVE),y)
>  i2c-designware-core-objs += i2c-designware-slave.o
>  endif
> diff --git a/drivers/i2c/busses/i2c-designware-core.h b/drivers/i2c/busses/i2c-designware-core.h
> index b220ad64c38d..2d34c15dca75 100644
> --- a/drivers/i2c/busses/i2c-designware-core.h
> +++ b/drivers/i2c/busses/i2c-designware-core.h
> @@ -314,13 +314,30 @@ static inline void __i2c_dw_disable_nowait(struct dw_i2c_dev *dev)
>  
>  void __i2c_dw_disable(struct dw_i2c_dev *dev);
>  
> -extern int i2c_dw_probe(struct dw_i2c_dev *dev);
> +#if IS_ENABLED(CONFIG_I2C_DESIGNWARE_MASTER)
> +extern int i2c_dw_probe_master(struct dw_i2c_dev *dev);
> +#else
> +static inline int i2c_dw_probe_master(struct dw_i2c_dev *dev) { return -EINVAL; }
> +#endif
>  #if IS_ENABLED(CONFIG_I2C_DESIGNWARE_SLAVE)
>  extern int i2c_dw_probe_slave(struct dw_i2c_dev *dev);
>  #else
>  static inline int i2c_dw_probe_slave(struct dw_i2c_dev *dev) { return -EINVAL; }
>  #endif
>  
> +static inline int i2c_dw_probe(struct dw_i2c_dev *dev)
> +{
> +	switch (dev->mode) {
> +	case DW_IC_SLAVE:
> +		return i2c_dw_probe_slave(dev);
> +	case DW_IC_MASTER:
> +		return i2c_dw_probe_master(dev);
> +	default:
> +		dev_err(dev->dev, "Wrong operation mode: %d\n", dev->mode);
> +		return -EINVAL;
> +	}
> +}
> +
>  #if IS_ENABLED(CONFIG_I2C_DESIGNWARE_BAYTRAIL)
>  extern int i2c_dw_probe_lock_support(struct dw_i2c_dev *dev);
>  #else
> diff --git a/drivers/i2c/busses/i2c-designware-master.c b/drivers/i2c/busses/i2c-designware-master.c
> index 3a58eef20936..9d2af87f45f1 100644
> --- a/drivers/i2c/busses/i2c-designware-master.c
> +++ b/drivers/i2c/busses/i2c-designware-master.c
> @@ -678,7 +678,7 @@ static int i2c_dw_init_recovery_info(struct dw_i2c_dev *dev)
>  	return 0;
>  }
>  
> -int i2c_dw_probe(struct dw_i2c_dev *dev)
> +int i2c_dw_probe_master(struct dw_i2c_dev *dev)
>  {
>  	struct i2c_adapter *adap = &dev->adapter;
>  	unsigned long irq_flags;
> @@ -745,7 +745,7 @@ int i2c_dw_probe(struct dw_i2c_dev *dev)
>  
>  	return ret;
>  }
> -EXPORT_SYMBOL_GPL(i2c_dw_probe);
> +EXPORT_SYMBOL_GPL(i2c_dw_probe_master);
>  
>  MODULE_DESCRIPTION("Synopsys DesignWare I2C bus master adapter");
>  MODULE_LICENSE("GPL");
> diff --git a/drivers/i2c/busses/i2c-designware-pcidrv.c b/drivers/i2c/busses/i2c-designware-pcidrv.c
> index 7a0b65b5b5b5..cbab5346e311 100644
> --- a/drivers/i2c/busses/i2c-designware-pcidrv.c
> +++ b/drivers/i2c/busses/i2c-designware-pcidrv.c
> @@ -290,7 +290,7 @@ static int i2c_dw_pci_probe(struct pci_dev *pdev,
>  	ACPI_COMPANION_SET(&adap->dev, ACPI_COMPANION(&pdev->dev));
>  	adap->nr = controller->bus_num;
>  
> -	r = i2c_dw_probe(dev);
> +	r = i2c_dw_probe_master(dev);
>  	if (r) {
>  		pci_free_irq_vectors(pdev);
>  		return r;
> diff --git a/drivers/i2c/busses/i2c-designware-platdrv.c b/drivers/i2c/busses/i2c-designware-platdrv.c
> index c98befe2a92e..0edcebe2168f 100644
> --- a/drivers/i2c/busses/i2c-designware-platdrv.c
> +++ b/drivers/i2c/busses/i2c-designware-platdrv.c
> @@ -371,11 +371,7 @@ static int dw_i2c_plat_probe(struct platform_device *pdev)
>  
>  	pm_runtime_enable(&pdev->dev);
>  
> -	if (dev->mode == DW_IC_SLAVE)
> -		ret = i2c_dw_probe_slave(dev);
> -	else
> -		ret = i2c_dw_probe(dev);
> -
> +	ret = i2c_dw_probe(dev);
>  	if (ret)
>  		goto exit_probe;
>  
> -- 
> 2.25.1
> 

-- 
With Best Regards,
Andy Shevchenko





[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