Skip to content

Commit

Permalink
spi/imx: copy gpio number passed by platform data into driver private…
Browse files Browse the repository at this point in the history
… 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>
  • Loading branch information
Shawn Guo authored and Grant Likely committed Jul 14, 2011
1 parent 04ee585 commit c2387cb
Showing 1 changed file with 7 additions and 5 deletions.
12 changes: 7 additions & 5 deletions drivers/spi/spi-imx.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 *);
Expand All @@ -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];
};

static inline int is_imx27_cspi(struct spi_imx_data *d)
Expand Down Expand Up @@ -741,28 +741,30 @@ 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) {
dev_err(&pdev->dev, "can't get the platform data\n");
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);
Expand Down

0 comments on commit c2387cb

Please sign in to comment.