[PATCH v2 6/7] spi/imx: copy gpio number passed by platform data into driver private data

Uwe Kleine-König u.kleine-koenig at pengutronix.de
Mon Jul 11 03:45:29 EDT 2011


On Sun, Jul 10, 2011 at 01:16:40AM +0800, Shawn Guo wrote:
> It copies gpio number passed via platform data embedded pointer into
> driver private data, so that we do not need to refer to this embedded
> pointer passed by platform data after probe function exits.
> 
> Signed-off-by: Shawn Guo <shawn.guo at linaro.org>
> Cc: Uwe Kleine-König <u.kleine-koenig at pengutronix.de>
> Cc: Sascha Hauer <s.hauer at pengutronix.de>
> Cc: Grant Likely <grant.likely at secretlab.ca>
> ---
>  drivers/spi/spi-imx.c |   12 +++++++-----
>  1 files changed, 7 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/spi/spi-imx.c b/drivers/spi/spi-imx.c
> index 2ed9c32..ad61828 100644
> --- a/drivers/spi/spi-imx.c
> +++ b/drivers/spi/spi-imx.c
> @@ -84,7 +84,6 @@ struct spi_imx_data {
>  	int irq;
>  	struct clk *clk;
>  	unsigned long spi_clk;
> -	int *chipselect;
>  
>  	unsigned int count;
>  	void (*tx)(struct spi_imx_data *);
> @@ -94,6 +93,7 @@ struct spi_imx_data {
>  	unsigned int txfifo; /* number of words pushed in tx FIFO */
>  
>  	struct spi_imx_devtype_data *devtype_data;
> +	int chipselect[0];
It's not needed to use a zero-length array here (which is a gcc
extension). A (C99) flexible array member should be fine.
Long words short: s/0//

>  };
>  
>  static inline int is_imx27_cspi(struct spi_imx_data *d)
> @@ -743,7 +743,7 @@ static int __devinit spi_imx_probe(struct platform_device *pdev)
>  	struct spi_master *master;
>  	struct spi_imx_data *spi_imx;
>  	struct resource *res;
> -	int i, ret;
> +	int i, ret, num_cs;
>  
>  	mxc_platform_info = dev_get_platdata(&pdev->dev);
>  	if (!mxc_platform_info) {
> @@ -751,20 +751,22 @@ static int __devinit spi_imx_probe(struct platform_device *pdev)
>  		return -EINVAL;
>  	}
>  
> -	master = spi_alloc_master(&pdev->dev, sizeof(struct spi_imx_data));
> +	num_cs = mxc_platform_info->num_chipselect;
> +	master = spi_alloc_master(&pdev->dev,
> +			sizeof(struct spi_imx_data) + sizeof(int) * num_cs);
>  	if (!master)
>  		return -ENOMEM;
>  
>  	platform_set_drvdata(pdev, master);
>  
>  	master->bus_num = pdev->id;
> -	master->num_chipselect = mxc_platform_info->num_chipselect;
> +	master->num_chipselect = num_cs;
>  
>  	spi_imx = spi_master_get_devdata(master);
>  	spi_imx->bitbang.master = spi_master_get(master);
> -	spi_imx->chipselect = mxc_platform_info->chipselect;
>  
>  	for (i = 0; i < master->num_chipselect; i++) {
> +		spi_imx->chipselect[i] = mxc_platform_info->chipselect[i];
>  		if (spi_imx->chipselect[i] < 0)
>  			continue;
>  		ret = gpio_request(spi_imx->chipselect[i], DRIVER_NAME);
> -- 
> 1.7.4.1
> 
> 

-- 
Pengutronix e.K.                           | Uwe Kleine-König            |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |



More information about the linux-arm-kernel mailing list