diff options
| -rw-r--r-- | drivers/spi/spi-imx.c | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/drivers/spi/spi-imx.c b/drivers/spi/spi-imx.c index 5ddd32ba2521..70dcc8ee1f6b 100644 --- a/drivers/spi/spi-imx.c +++ b/drivers/spi/spi-imx.c | |||
| @@ -1523,6 +1523,7 @@ static int spi_imx_probe(struct platform_device *pdev) | |||
| 1523 | 1523 | ||
| 1524 | spi_imx->devtype_data = devtype_data; | 1524 | spi_imx->devtype_data = devtype_data; |
| 1525 | 1525 | ||
| 1526 | /* Get number of chip selects, either platform data or OF */ | ||
| 1526 | if (mxc_platform_info) { | 1527 | if (mxc_platform_info) { |
| 1527 | master->num_chipselect = mxc_platform_info->num_chipselect; | 1528 | master->num_chipselect = mxc_platform_info->num_chipselect; |
| 1528 | master->cs_gpios = devm_kzalloc(&master->dev, | 1529 | master->cs_gpios = devm_kzalloc(&master->dev, |
| @@ -1532,7 +1533,13 @@ static int spi_imx_probe(struct platform_device *pdev) | |||
| 1532 | 1533 | ||
| 1533 | for (i = 0; i < master->num_chipselect; i++) | 1534 | for (i = 0; i < master->num_chipselect; i++) |
| 1534 | master->cs_gpios[i] = mxc_platform_info->chipselect[i]; | 1535 | master->cs_gpios[i] = mxc_platform_info->chipselect[i]; |
| 1535 | } | 1536 | } else { |
| 1537 | u32 num_cs; | ||
| 1538 | |||
| 1539 | if (!of_property_read_u32(np, "num-cs", &num_cs)) | ||
| 1540 | master->num_chipselect = num_cs; | ||
| 1541 | /* If not preset, default value of 1 is used */ | ||
| 1542 | } | ||
| 1536 | 1543 | ||
| 1537 | spi_imx->bitbang.chipselect = spi_imx_chipselect; | 1544 | spi_imx->bitbang.chipselect = spi_imx_chipselect; |
| 1538 | spi_imx->bitbang.setup_transfer = spi_imx_setupxfer; | 1545 | spi_imx->bitbang.setup_transfer = spi_imx_setupxfer; |
| @@ -1614,13 +1621,8 @@ static int spi_imx_probe(struct platform_device *pdev) | |||
| 1614 | 1621 | ||
| 1615 | master->dev.of_node = pdev->dev.of_node; | 1622 | master->dev.of_node = pdev->dev.of_node; |
| 1616 | 1623 | ||
| 1617 | if (!spi_imx->slave_mode) { | 1624 | /* Request GPIO CS lines, if any */ |
| 1618 | if (!master->cs_gpios) { | 1625 | if (!spi_imx->slave_mode && master->cs_gpios) { |
| 1619 | dev_err(&pdev->dev, "No CS GPIOs available\n"); | ||
| 1620 | ret = -EINVAL; | ||
| 1621 | goto out_clk_put; | ||
| 1622 | } | ||
| 1623 | |||
| 1624 | for (i = 0; i < master->num_chipselect; i++) { | 1626 | for (i = 0; i < master->num_chipselect; i++) { |
| 1625 | if (!gpio_is_valid(master->cs_gpios[i])) | 1627 | if (!gpio_is_valid(master->cs_gpios[i])) |
| 1626 | continue; | 1628 | continue; |
