aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/spi/spi-imx.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/spi/spi-imx.c')
-rw-r--r--drivers/spi/spi-imx.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/drivers/spi/spi-imx.c b/drivers/spi/spi-imx.c
index 87981b417967..591ebc3546d6 100644
--- a/drivers/spi/spi-imx.c
+++ b/drivers/spi/spi-imx.c
@@ -84,7 +84,6 @@ struct spi_imx_data {
84 int irq; 84 int irq;
85 struct clk *clk; 85 struct clk *clk;
86 unsigned long spi_clk; 86 unsigned long spi_clk;
87 int *chipselect;
88 87
89 unsigned int count; 88 unsigned int count;
90 void (*tx)(struct spi_imx_data *); 89 void (*tx)(struct spi_imx_data *);
@@ -94,6 +93,7 @@ struct spi_imx_data {
94 unsigned int txfifo; /* number of words pushed in tx FIFO */ 93 unsigned int txfifo; /* number of words pushed in tx FIFO */
95 94
96 struct spi_imx_devtype_data *devtype_data; 95 struct spi_imx_devtype_data *devtype_data;
96 int chipselect[0];
97}; 97};
98 98
99static inline int is_imx27_cspi(struct spi_imx_data *d) 99static inline int is_imx27_cspi(struct spi_imx_data *d)
@@ -741,7 +741,7 @@ static int __devinit spi_imx_probe(struct platform_device *pdev)
741 struct spi_master *master; 741 struct spi_master *master;
742 struct spi_imx_data *spi_imx; 742 struct spi_imx_data *spi_imx;
743 struct resource *res; 743 struct resource *res;
744 int i, ret; 744 int i, ret, num_cs;
745 745
746 mxc_platform_info = dev_get_platdata(&pdev->dev); 746 mxc_platform_info = dev_get_platdata(&pdev->dev);
747 if (!mxc_platform_info) { 747 if (!mxc_platform_info) {
@@ -749,20 +749,22 @@ static int __devinit spi_imx_probe(struct platform_device *pdev)
749 return -EINVAL; 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 if (!master) 755 if (!master)
754 return -ENOMEM; 756 return -ENOMEM;
755 757
756 platform_set_drvdata(pdev, master); 758 platform_set_drvdata(pdev, master);
757 759
758 master->bus_num = pdev->id; 760 master->bus_num = pdev->id;
759 master->num_chipselect = mxc_platform_info->num_chipselect; 761 master->num_chipselect = num_cs;
760 762
761 spi_imx = spi_master_get_devdata(master); 763 spi_imx = spi_master_get_devdata(master);
762 spi_imx->bitbang.master = spi_master_get(master); 764 spi_imx->bitbang.master = spi_master_get(master);
763 spi_imx->chipselect = mxc_platform_info->chipselect;
764 765
765 for (i = 0; i < master->num_chipselect; i++) { 766 for (i = 0; i < master->num_chipselect; i++) {
767 spi_imx->chipselect[i] = mxc_platform_info->chipselect[i];
766 if (spi_imx->chipselect[i] < 0) 768 if (spi_imx->chipselect[i] < 0)
767 continue; 769 continue;
768 ret = gpio_request(spi_imx->chipselect[i], DRIVER_NAME); 770 ret = gpio_request(spi_imx->chipselect[i], DRIVER_NAME);