From 4b060003957db07fa0e35beafe6559f9cc91954c Mon Sep 17 00:00:00 2001 From: Bin Meng Date: Mon, 9 Sep 2019 06:00:01 -0700 Subject: [PATCH] dm: spi: Change cs_info op to return -EINVAL for invalid cs num We need distinguish the following two situations in various SPI APIs: - given chip select num is invalid - given chip select num is valid, but no device is attached Currently -ENODEV is returned for both cases. For the first case, it's more reasonable to return -EINVAL instead of -ENODEV for invalid chip select numbers. Signed-off-by: Bin Meng Tested-by: Jagan Teki # SoPine Reviewed-by: Jagan Teki --- doc/driver-model/spi-howto.rst | 4 ++-- drivers/spi/ath79_spi.c | 2 +- drivers/spi/bcm63xx_hsspi.c | 2 +- drivers/spi/bcm63xx_spi.c | 2 +- drivers/spi/sandbox_spi.c | 2 +- drivers/spi/tegra20_sflash.c | 2 +- include/spi.h | 2 +- 7 files changed, 8 insertions(+), 8 deletions(-) diff --git a/doc/driver-model/spi-howto.rst b/doc/driver-model/spi-howto.rst index 44eab3947e..9631a5059d 100644 --- a/doc/driver-model/spi-howto.rst +++ b/doc/driver-model/spi-howto.rst @@ -116,7 +116,7 @@ Put this code at the bottom of your existing driver file: static int exynos_cs_info(struct udevice *bus, uint cs, struct spi_cs_info *info) { - return -ENODEV; + return -EINVAL; } static const struct dm_spi_ops exynos_spi_ops = { @@ -633,7 +633,7 @@ is not obvious from outside the driver. In this case you can provide a method for cs_info() to deal with this. If you don't provide it, then the device tree will be used to determine what chip selects are valid. -Return -ENODEV if the supplied chip select is invalid, or 0 if it is valid. +Return -EINVAL if the supplied chip select is invalid, or 0 if it is valid. If you don't provide the cs_info() method, 0 is assumed for all chip selects that do not appear in the device tree. diff --git a/drivers/spi/ath79_spi.c b/drivers/spi/ath79_spi.c index 4fd3c050e8..207069218f 100644 --- a/drivers/spi/ath79_spi.c +++ b/drivers/spi/ath79_spi.c @@ -198,7 +198,7 @@ static int ath79_cs_info(struct udevice *bus, uint cs, { /* Always allow activity on CS 0/1/2 */ if (cs >= 3) - return -ENODEV; + return -EINVAL; return 0; } diff --git a/drivers/spi/bcm63xx_hsspi.c b/drivers/spi/bcm63xx_hsspi.c index e82b80c107..529adfbc4e 100644 --- a/drivers/spi/bcm63xx_hsspi.c +++ b/drivers/spi/bcm63xx_hsspi.c @@ -108,7 +108,7 @@ static int bcm63xx_hsspi_cs_info(struct udevice *bus, uint cs, if (cs >= priv->num_cs) { printf("no cs %u\n", cs); - return -ENODEV; + return -EINVAL; } return 0; diff --git a/drivers/spi/bcm63xx_spi.c b/drivers/spi/bcm63xx_spi.c index 4d19e03523..69f88c9e08 100644 --- a/drivers/spi/bcm63xx_spi.c +++ b/drivers/spi/bcm63xx_spi.c @@ -130,7 +130,7 @@ static int bcm63xx_spi_cs_info(struct udevice *bus, uint cs, if (cs >= priv->num_cs) { printf("no cs %u\n", cs); - return -ENODEV; + return -EINVAL; } return 0; diff --git a/drivers/spi/sandbox_spi.c b/drivers/spi/sandbox_spi.c index 906401ec8a..16473ec7a0 100644 --- a/drivers/spi/sandbox_spi.c +++ b/drivers/spi/sandbox_spi.c @@ -117,7 +117,7 @@ static int sandbox_cs_info(struct udevice *bus, uint cs, { /* Always allow activity on CS 0 */ if (cs >= 1) - return -ENODEV; + return -EINVAL; return 0; } diff --git a/drivers/spi/tegra20_sflash.c b/drivers/spi/tegra20_sflash.c index a54b10fdeb..567e33f156 100644 --- a/drivers/spi/tegra20_sflash.c +++ b/drivers/spi/tegra20_sflash.c @@ -78,7 +78,7 @@ int tegra20_sflash_cs_info(struct udevice *bus, unsigned int cs, { /* Tegra20 SPI-Flash - only 1 device ('bus/cs') */ if (cs != 0) - return -ENODEV; + return -EINVAL; else return 0; } diff --git a/include/spi.h b/include/spi.h index 5eec0c4775..3f79168df3 100644 --- a/include/spi.h +++ b/include/spi.h @@ -458,7 +458,7 @@ struct dm_spi_ops { * @cs: The chip select (0..n-1) * @info: Returns information about the chip select, if valid. * On entry info->dev is NULL - * @return 0 if OK (and @info is set up), -ENODEV if the chip select + * @return 0 if OK (and @info is set up), -EINVAL if the chip select * is invalid, other -ve value on error */ int (*cs_info)(struct udevice *bus, uint cs, struct spi_cs_info *info); -- 2.25.1