* [PATCH v1] Revert "spi: pxa2xx: Only claim CS GPIOs when the slave device is created"
@ 2017-07-27 10:09 Andy Shevchenko
[not found] ` <20170727100954.46801-1-andriy.shevchenko-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
0 siblings, 1 reply; 3+ messages in thread
From: Andy Shevchenko @ 2017-07-27 10:09 UTC (permalink / raw)
To: Mark Brown, linux-spi-u79uwXL29TY76Z2rM5mHXA, Jan Kiszka,
Mika Westerberg
Cc: Andy Shevchenko
There is a valid case to call setup() following by setup_cs() several
times for the same chip.
With the commit
676a4e3bab44 ("spi: pxa2xx: Only claim CS GPIOs when the slave device is created")
it is not possible anymore due to GPIO line being requested already
during the first call to setup_cs().
For now, revert the commit to make things work again.
Signed-off-by: Andy Shevchenko <andriy.shevchenko-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
---
drivers/spi/spi-pxa2xx.c | 59 +++++++++++++++++++++++++++++++-----------------
1 file changed, 38 insertions(+), 21 deletions(-)
diff --git a/drivers/spi/spi-pxa2xx.c b/drivers/spi/spi-pxa2xx.c
index be991266a6ce..38d053682892 100644
--- a/drivers/spi/spi-pxa2xx.c
+++ b/drivers/spi/spi-pxa2xx.c
@@ -1213,33 +1213,21 @@ static int setup_cs(struct spi_device *spi, struct chip_data *chip,
struct pxa2xx_spi_chip *chip_info)
{
struct driver_data *drv_data = spi_master_get_devdata(spi->master);
- struct device *pdev = &drv_data->pdev->dev;
- struct gpio_desc *gpiod;
int err = 0;
- int count;
if (chip == NULL)
return 0;
- count = gpiod_count(pdev, "cs");
- if (count > 0) {
- if (spi->chip_select >= count)
- return -EINVAL;
-
- gpiod = gpiod_get_index(pdev, "cs", spi->chip_select,
- GPIOD_OUT_HIGH);
- if (IS_ERR(gpiod)) {
- /* Means use native chip select */
- if (PTR_ERR(gpiod) == -ENOENT)
- return 0;
+ if (drv_data->cs_gpiods) {
+ struct gpio_desc *gpiod;
- return PTR_ERR(gpiod);
+ gpiod = drv_data->cs_gpiods[spi->chip_select];
+ if (gpiod) {
+ chip->gpio_cs = desc_to_gpio(gpiod);
+ chip->gpio_cs_inverted = spi->mode & SPI_CS_HIGH;
+ gpiod_set_value(gpiod, chip->gpio_cs_inverted);
}
- chip->gpio_cs = desc_to_gpio(gpiod);
- chip->gpio_cs_inverted = spi->mode & SPI_CS_HIGH;
- gpiod_set_value(gpiod, chip->gpio_cs_inverted);
-
return 0;
}
@@ -1427,7 +1415,8 @@ static void cleanup(struct spi_device *spi)
if (!chip)
return;
- if (drv_data->ssp_type != CE4100_SSP && gpio_is_valid(chip->gpio_cs))
+ if (drv_data->ssp_type != CE4100_SSP && !drv_data->cs_gpiods &&
+ gpio_is_valid(chip->gpio_cs))
gpio_free(chip->gpio_cs);
kfree(chip);
@@ -1763,10 +1752,38 @@ static int pxa2xx_spi_probe(struct platform_device *pdev)
master->num_chipselect = platform_info->num_chipselect;
count = gpiod_count(&pdev->dev, "cs");
- if (count > 0)
+ if (count > 0) {
+ int i;
+
master->num_chipselect = max_t(int, count,
master->num_chipselect);
+ drv_data->cs_gpiods = devm_kcalloc(&pdev->dev,
+ master->num_chipselect, sizeof(struct gpio_desc *),
+ GFP_KERNEL);
+ if (!drv_data->cs_gpiods) {
+ status = -ENOMEM;
+ goto out_error_clock_enabled;
+ }
+
+ for (i = 0; i < master->num_chipselect; i++) {
+ struct gpio_desc *gpiod;
+
+ gpiod = devm_gpiod_get_index(dev, "cs", i,
+ GPIOD_OUT_HIGH);
+ if (IS_ERR(gpiod)) {
+ /* Means use native chip select */
+ if (PTR_ERR(gpiod) == -ENOENT)
+ continue;
+
+ status = (int)PTR_ERR(gpiod);
+ goto out_error_clock_enabled;
+ } else {
+ drv_data->cs_gpiods[i] = gpiod;
+ }
+ }
+ }
+
tasklet_init(&drv_data->pump_transfers, pump_transfers,
(unsigned long)drv_data);
--
2.13.2
--
To unsubscribe from this list: send the line "unsubscribe linux-spi" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply related [flat|nested] 3+ messages in thread[parent not found: <20170727100954.46801-1-andriy.shevchenko-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>]
* Re: [PATCH v1] Revert "spi: pxa2xx: Only claim CS GPIOs when the slave device is created" [not found] ` <20170727100954.46801-1-andriy.shevchenko-VuQAYsv1563Yd54FQh9/CA@public.gmane.org> @ 2017-07-27 10:15 ` Mark Brown 2017-07-27 19:02 ` Applied "spi: pxa2xx: Revert "Only claim CS GPIOs when the slave device is created"" to the spi tree Mark Brown 1 sibling, 0 replies; 3+ messages in thread From: Mark Brown @ 2017-07-27 10:15 UTC (permalink / raw) To: Andy Shevchenko Cc: linux-spi-u79uwXL29TY76Z2rM5mHXA, Jan Kiszka, Mika Westerberg [-- Attachment #1: Type: text/plain, Size: 450 bytes --] On Thu, Jul 27, 2017 at 01:09:54PM +0300, Andy Shevchenko wrote: > There is a valid case to call setup() following by setup_cs() several > times for the same chip. Please submit patches using subject lines reflecting the style for the subsystem. This makes it easier for people to identify relevant patches. Look at what existing commits in the area you're changing are doing and make sure your subject lines visually resemble what they're doing. [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 488 bytes --] ^ permalink raw reply [flat|nested] 3+ messages in thread
* Applied "spi: pxa2xx: Revert "Only claim CS GPIOs when the slave device is created"" to the spi tree [not found] ` <20170727100954.46801-1-andriy.shevchenko-VuQAYsv1563Yd54FQh9/CA@public.gmane.org> 2017-07-27 10:15 ` Mark Brown @ 2017-07-27 19:02 ` Mark Brown 1 sibling, 0 replies; 3+ messages in thread From: Mark Brown @ 2017-07-27 19:02 UTC (permalink / raw) To: Andy Shevchenko Cc: Mark Brown, Mark Brown, linux-spi-u79uwXL29TY76Z2rM5mHXA, Jan Kiszka, Mika Westerberg, linux-spi-u79uwXL29TY76Z2rM5mHXA The patch spi: pxa2xx: Revert "Only claim CS GPIOs when the slave device is created" has been applied to the spi tree at git://git.kernel.org/pub/scm/linux/kernel/git/broonie/spi.git All being well this means that it will be integrated into the linux-next tree (usually sometime in the next 24 hours) and sent to Linus during the next merge window (or sooner if it is a bug fix), however if problems are discovered then the patch may be dropped or reverted. You may get further e-mails resulting from automated or manual testing and review of the tree, please engage with people reporting problems and send followup patches addressing any issues that are reported if needed. If any updates are required or you are submitting further changes they should be sent as incremental updates against current git, existing patches will not be replaced. Please add any relevant lists and maintainers to the CCs when replying to this mail. Thanks, Mark >From 6ac5a435ae6739c06ebbf79939e86e721b88a90f Mon Sep 17 00:00:00 2001 From: Andy Shevchenko <andriy.shevchenko-VuQAYsv1563Yd54FQh9/CA@public.gmane.org> Date: Thu, 27 Jul 2017 14:37:08 +0300 Subject: [PATCH] spi: pxa2xx: Revert "Only claim CS GPIOs when the slave device is created" There is a valid case to call setup() following by setup_cs() several times for the same chip. With the commit 676a4e3bab44 ("spi: pxa2xx: Only claim CS GPIOs when the slave device is created") it is not possible anymore due to GPIO line being requested already during the first call to setup_cs(). For now, revert the commit to make things work again. Signed-off-by: Andy Shevchenko <andriy.shevchenko-VuQAYsv1563Yd54FQh9/CA@public.gmane.org> Signed-off-by: Mark Brown <broonie-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org> --- drivers/spi/spi-pxa2xx.c | 59 +++++++++++++++++++++++++++++++----------------- 1 file changed, 38 insertions(+), 21 deletions(-) diff --git a/drivers/spi/spi-pxa2xx.c b/drivers/spi/spi-pxa2xx.c index be991266a6ce..38d053682892 100644 --- a/drivers/spi/spi-pxa2xx.c +++ b/drivers/spi/spi-pxa2xx.c @@ -1213,33 +1213,21 @@ static int setup_cs(struct spi_device *spi, struct chip_data *chip, struct pxa2xx_spi_chip *chip_info) { struct driver_data *drv_data = spi_master_get_devdata(spi->master); - struct device *pdev = &drv_data->pdev->dev; - struct gpio_desc *gpiod; int err = 0; - int count; if (chip == NULL) return 0; - count = gpiod_count(pdev, "cs"); - if (count > 0) { - if (spi->chip_select >= count) - return -EINVAL; - - gpiod = gpiod_get_index(pdev, "cs", spi->chip_select, - GPIOD_OUT_HIGH); - if (IS_ERR(gpiod)) { - /* Means use native chip select */ - if (PTR_ERR(gpiod) == -ENOENT) - return 0; + if (drv_data->cs_gpiods) { + struct gpio_desc *gpiod; - return PTR_ERR(gpiod); + gpiod = drv_data->cs_gpiods[spi->chip_select]; + if (gpiod) { + chip->gpio_cs = desc_to_gpio(gpiod); + chip->gpio_cs_inverted = spi->mode & SPI_CS_HIGH; + gpiod_set_value(gpiod, chip->gpio_cs_inverted); } - chip->gpio_cs = desc_to_gpio(gpiod); - chip->gpio_cs_inverted = spi->mode & SPI_CS_HIGH; - gpiod_set_value(gpiod, chip->gpio_cs_inverted); - return 0; } @@ -1427,7 +1415,8 @@ static void cleanup(struct spi_device *spi) if (!chip) return; - if (drv_data->ssp_type != CE4100_SSP && gpio_is_valid(chip->gpio_cs)) + if (drv_data->ssp_type != CE4100_SSP && !drv_data->cs_gpiods && + gpio_is_valid(chip->gpio_cs)) gpio_free(chip->gpio_cs); kfree(chip); @@ -1763,10 +1752,38 @@ static int pxa2xx_spi_probe(struct platform_device *pdev) master->num_chipselect = platform_info->num_chipselect; count = gpiod_count(&pdev->dev, "cs"); - if (count > 0) + if (count > 0) { + int i; + master->num_chipselect = max_t(int, count, master->num_chipselect); + drv_data->cs_gpiods = devm_kcalloc(&pdev->dev, + master->num_chipselect, sizeof(struct gpio_desc *), + GFP_KERNEL); + if (!drv_data->cs_gpiods) { + status = -ENOMEM; + goto out_error_clock_enabled; + } + + for (i = 0; i < master->num_chipselect; i++) { + struct gpio_desc *gpiod; + + gpiod = devm_gpiod_get_index(dev, "cs", i, + GPIOD_OUT_HIGH); + if (IS_ERR(gpiod)) { + /* Means use native chip select */ + if (PTR_ERR(gpiod) == -ENOENT) + continue; + + status = (int)PTR_ERR(gpiod); + goto out_error_clock_enabled; + } else { + drv_data->cs_gpiods[i] = gpiod; + } + } + } + tasklet_init(&drv_data->pump_transfers, pump_transfers, (unsigned long)drv_data); -- 2.13.2 -- To unsubscribe from this list: send the line "unsubscribe linux-spi" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply related [flat|nested] 3+ messages in thread
end of thread, other threads:[~2017-07-27 19:02 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-07-27 10:09 [PATCH v1] Revert "spi: pxa2xx: Only claim CS GPIOs when the slave device is created" Andy Shevchenko
[not found] ` <20170727100954.46801-1-andriy.shevchenko-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
2017-07-27 10:15 ` Mark Brown
2017-07-27 19:02 ` Applied "spi: pxa2xx: Revert "Only claim CS GPIOs when the slave device is created"" to the spi tree Mark Brown
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).