Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

spi/imx: copy gpio number passed by platform data into driver private data

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@linaro.org>
Cc: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Cc: Sascha Hauer <s.hauer@pengutronix.de>
Cc: Grant Likely <grant.likely@secretlab.ca>
Signed-off-by: Grant Likely <grant.likely@secretlab.ca>

authored by

Shawn Guo and committed by
Grant Likely
c2387cb9 04ee5854

+7 -5
+7 -5
drivers/spi/spi-imx.c
··· 84 84 int irq; 85 85 struct clk *clk; 86 86 unsigned long spi_clk; 87 - int *chipselect; 88 87 89 88 unsigned int count; 90 89 void (*tx)(struct spi_imx_data *); ··· 93 94 unsigned int txfifo; /* number of words pushed in tx FIFO */ 94 95 95 96 struct spi_imx_devtype_data *devtype_data; 97 + int chipselect[0]; 96 98 }; 97 99 98 100 static inline int is_imx27_cspi(struct spi_imx_data *d) ··· 741 741 struct spi_master *master; 742 742 struct spi_imx_data *spi_imx; 743 743 struct resource *res; 744 - int i, ret; 744 + int i, ret, num_cs; 745 745 746 746 mxc_platform_info = dev_get_platdata(&pdev->dev); 747 747 if (!mxc_platform_info) { ··· 749 749 return -EINVAL; 750 750 } 751 751 752 - master = spi_alloc_master(&pdev->dev, sizeof(struct spi_imx_data)); 752 + num_cs = mxc_platform_info->num_chipselect; 753 + master = spi_alloc_master(&pdev->dev, 754 + sizeof(struct spi_imx_data) + sizeof(int) * num_cs); 753 755 if (!master) 754 756 return -ENOMEM; 755 757 756 758 platform_set_drvdata(pdev, master); 757 759 758 760 master->bus_num = pdev->id; 759 - master->num_chipselect = mxc_platform_info->num_chipselect; 761 + master->num_chipselect = num_cs; 760 762 761 763 spi_imx = spi_master_get_devdata(master); 762 764 spi_imx->bitbang.master = spi_master_get(master); 763 - spi_imx->chipselect = mxc_platform_info->chipselect; 764 765 765 766 for (i = 0; i < master->num_chipselect; i++) { 767 + spi_imx->chipselect[i] = mxc_platform_info->chipselect[i]; 766 768 if (spi_imx->chipselect[i] < 0) 767 769 continue; 768 770 ret = gpio_request(spi_imx->chipselect[i], DRIVER_NAME);