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 <[email protected]>
> Cc: Uwe Kleine-König <[email protected]>
> Cc: Sascha Hauer <[email protected]>
> Cc: Grant Likely <[email protected]>
> ---
>  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/  |
_______________________________________________
devicetree-discuss mailing list
[email protected]
https://lists.ozlabs.org/listinfo/devicetree-discuss

Reply via email to