diff options
author | Mark Brown <broonie@kernel.org> | 2019-12-25 18:18:54 +0000 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2019-12-25 18:18:54 +0000 |
commit | 790514ed7715334949125de39989720dc0985f15 (patch) | |
tree | c2dd3cdabcf825170349f9f39b284dc59e11e065 /drivers/spi/spi-fsl-spi.c | |
parent | 0d9c75481a8e0129f82e0b09a5e36eb1cc76c2b8 (diff) | |
parent | 9cd34efbd3012171c102910ce17ee632a3cccb44 (diff) | |
download | linux-790514ed7715334949125de39989720dc0985f15.tar.gz linux-790514ed7715334949125de39989720dc0985f15.tar.bz2 linux-790514ed7715334949125de39989720dc0985f15.zip |
Merge branch 'for-5.5' of https://git.kernel.org/pub/scm/linux/kernel/git/broonie/spi into spi-5.6
Diffstat (limited to 'drivers/spi/spi-fsl-spi.c')
-rw-r--r-- | drivers/spi/spi-fsl-spi.c | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/drivers/spi/spi-fsl-spi.c b/drivers/spi/spi-fsl-spi.c index 114801a32371..fb4159ad6bf6 100644 --- a/drivers/spi/spi-fsl-spi.c +++ b/drivers/spi/spi-fsl-spi.c @@ -611,6 +611,7 @@ static struct spi_master * fsl_spi_probe(struct device *dev, master->setup = fsl_spi_setup; master->cleanup = fsl_spi_cleanup; master->transfer_one_message = fsl_spi_do_one_msg; + master->use_gpio_descriptors = true; mpc8xxx_spi = spi_master_get_devdata(master); mpc8xxx_spi->max_bits_per_word = 32; @@ -727,17 +728,27 @@ static int of_fsl_spi_probe(struct platform_device *ofdev) } } #endif - - pdata->cs_control = fsl_spi_cs_control; + /* + * Handle the case where we have one hardwired (always selected) + * device on the first "chipselect". Else we let the core code + * handle any GPIOs or native chip selects and assign the + * appropriate callback for dealing with the CS lines. This isn't + * supported on the GRLIB variant. + */ + ret = gpiod_count(dev, "cs"); + if (ret <= 0) + pdata->max_chipselect = 1; + else + pdata->cs_control = fsl_spi_cs_control; } ret = of_address_to_resource(np, 0, &mem); if (ret) goto err; - irq = irq_of_parse_and_map(np, 0); - if (!irq) { - ret = -EINVAL; + irq = platform_get_irq(ofdev, 0); + if (irq < 0) { + ret = irq; goto err; } @@ -750,7 +761,6 @@ static int of_fsl_spi_probe(struct platform_device *ofdev) return 0; err: - irq_dispose_mapping(irq); return ret; } |