[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