Re: [spi-devel-general] GPIO: Fix probe() error return in gpio driver probes

2009-01-08 Thread Ben Dooks
On Wed, Jan 07, 2009 at 12:56:19PM +, b...@fluff.org.uk wrote:
 A number of drivers in drivers/gpio return -ENODEV when confronted
 with missing setup parameters such as the platform data. However,
 returning -ENODEV causes the driver layer to silently ignore the
 driver as it assumes the probe did not find anything and was only
 speculative.
 
 To make life easier to discern why a driver is not being attached,
 change to returning -EINVAL, which is a better description of the
 fact that the driver data was not valid.
 
 Also add a set of dev_dbg() statements to the error paths to provide
 an better explanation of the error as there may be more that one point
 in the driver.

sorry, sent from the wrong email address please ignore.
-- 
Ben (b...@fluff.org, http://www.fluff.org/)

  'a smiley only costs 4 bytes'

--
Check out the new SourceForge.net Marketplace.
It is the best place to buy or sell services for
just about anything Open Source.
http://p.sf.net/sfu/Xq1LFB
___
spi-devel-general mailing list
spi-devel-general@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/spi-devel-general


[spi-devel-general] GPIO: Fix probe() error return in gpio driver probes

2009-01-07 Thread Ben Dooks
A number of drivers in drivers/gpio return -ENODEV when confronted
with missing setup parameters such as the platform data. However,
returning -ENODEV causes the driver layer to silently ignore the
driver as it assumes the probe did not find anything and was only
speculative.

To make life easier to discern why a driver is not being attached,
change to returning -EINVAL, which is a better description of the
fact that the driver data was not valid.

Also add a set of dev_dbg() statements to the error paths to provide
an better explanation of the error as there may be more that one point
in the driver.

Signed-off-by: Ben Dooks ben-li...@fluff.org
Index: linux.git3/drivers/gpio/max7301.c
===
--- linux.git3.orig/drivers/gpio/max7301.c  2008-10-22 09:50:45.0 
+0100
+++ linux.git3/drivers/gpio/max7301.c   2009-01-07 12:37:46.0 +
@@ -217,8 +217,10 @@ static int __devinit max7301_probe(struc
int i, ret;
 
pdata = spi-dev.platform_data;
-   if (!pdata || !pdata-base)
-   return -ENODEV;
+   if (!pdata || !pdata-base) {
+   dev_dbg(spi-dev, incorrect or missing platform data\n);
+   return -EINVAL;
+   }
 
/*
 * bits_per_word cannot be configured in platform data
Index: linux.git3/drivers/gpio/max732x.c
===
--- linux.git3.orig/drivers/gpio/max732x.c  2008-10-22 09:50:45.0 
+0100
+++ linux.git3/drivers/gpio/max732x.c   2009-01-07 12:22:10.0 +
@@ -267,8 +267,10 @@ static int __devinit max732x_probe(struc
int ret, nr_port;
 
pdata = client-dev.platform_data;
-   if (pdata == NULL)
-   return -ENODEV;
+   if (pdata == NULL) {
+   dev_dbg(client-dev, no platform data\n);
+   return -EINVAL;
+   }
 
chip = kzalloc(sizeof(struct max732x_chip), GFP_KERNEL);
if (chip == NULL)
Index: linux.git3/drivers/gpio/mcp23s08.c
===
--- linux.git3.orig/drivers/gpio/mcp23s08.c 2008-10-22 09:50:45.0 
+0100
+++ linux.git3/drivers/gpio/mcp23s08.c  2009-01-07 12:23:24.0 +
@@ -310,8 +310,10 @@ static int mcp23s08_probe(struct spi_dev
unsignedbase;
 
pdata = spi-dev.platform_data;
-   if (!pdata || !gpio_is_valid(pdata-base))
-   return -ENODEV;
+   if (!pdata || !gpio_is_valid(pdata-base)) {
+   dev_dbg(spi-dev, invalid or missing platform data\n);
+   return -EINVAL;
+   }
 
for (addr = 0; addr  4; addr++) {
if (!pdata-chip[addr].is_present)
Index: linux.git3/drivers/gpio/pca953x.c
===
--- linux.git3.orig/drivers/gpio/pca953x.c  2008-10-22 09:50:45.0 
+0100
+++ linux.git3/drivers/gpio/pca953x.c   2009-01-07 12:36:00.0 +
@@ -200,8 +200,10 @@ static int __devinit pca953x_probe(struc
int ret;
 
pdata = client-dev.platform_data;
-   if (pdata == NULL)
-   return -ENODEV;
+   if (pdata == NULL) {
+   dev_dbg(client-dev, no platform data\n);
+   return -EINVAL;
+   }
 
chip = kzalloc(sizeof(struct pca953x_chip), GFP_KERNEL);
if (chip == NULL)
Index: linux.git3/drivers/gpio/pcf857x.c
===
--- linux.git3.orig/drivers/gpio/pcf857x.c  2008-10-22 09:50:45.0 
+0100
+++ linux.git3/drivers/gpio/pcf857x.c   2009-01-07 12:27:00.0 +
@@ -188,8 +188,10 @@ static int pcf857x_probe(struct i2c_clie
int status;
 
pdata = client-dev.platform_data;
-   if (!pdata)
-   return -ENODEV;
+   if (!pdata) {
+   dev_dbg(client-dev, no platform data\n);
+   return -EINVAL;
+   }
 
/* Allocate, initialize, and register this gpio_chip. */
gpio = kzalloc(sizeof *gpio, GFP_KERNEL);
@@ -248,8 +250,10 @@ static int pcf857x_probe(struct i2c_clie
else
status = i2c_read_le16(client);
 
-   } else
-   status = -ENODEV;
+   } else {
+   dev_dbg(client-dev, unsupported number of gpios\n);
+   status = -EINVAL;
+   }
 
if (status  0)
goto fail;

-- 
Ben (b...@fluff.org, http://www.fluff.org/)

  'a smiley only costs 4 bytes'

--
Check out the new SourceForge.net Marketplace.
It is the best place to buy or sell services for
just about anything Open Source.
http://p.sf.net/sfu/Xq1LFB
___
spi-devel-general mailing list
spi-devel-general@lists.sourceforge.net

[spi-devel-general] GPIO: Fix probe() error return in gpio driver probes

2009-01-07 Thread ben
A number of drivers in drivers/gpio return -ENODEV when confronted
with missing setup parameters such as the platform data. However,
returning -ENODEV causes the driver layer to silently ignore the
driver as it assumes the probe did not find anything and was only
speculative.

To make life easier to discern why a driver is not being attached,
change to returning -EINVAL, which is a better description of the
fact that the driver data was not valid.

Also add a set of dev_dbg() statements to the error paths to provide
an better explanation of the error as there may be more that one point
in the driver.

Signed-off-by: Ben Dooks ben-li...@fluff.org
Index: linux.git3/drivers/gpio/max7301.c
===
--- linux.git3.orig/drivers/gpio/max7301.c  2008-10-22 09:50:45.0 
+0100
+++ linux.git3/drivers/gpio/max7301.c   2009-01-07 12:37:46.0 +
@@ -217,8 +217,10 @@ static int __devinit max7301_probe(struc
int i, ret;
 
pdata = spi-dev.platform_data;
-   if (!pdata || !pdata-base)
-   return -ENODEV;
+   if (!pdata || !pdata-base) {
+   dev_dbg(spi-dev, incorrect or missing platform data\n);
+   return -EINVAL;
+   }
 
/*
 * bits_per_word cannot be configured in platform data
Index: linux.git3/drivers/gpio/max732x.c
===
--- linux.git3.orig/drivers/gpio/max732x.c  2008-10-22 09:50:45.0 
+0100
+++ linux.git3/drivers/gpio/max732x.c   2009-01-07 12:22:10.0 +
@@ -267,8 +267,10 @@ static int __devinit max732x_probe(struc
int ret, nr_port;
 
pdata = client-dev.platform_data;
-   if (pdata == NULL)
-   return -ENODEV;
+   if (pdata == NULL) {
+   dev_dbg(client-dev, no platform data\n);
+   return -EINVAL;
+   }
 
chip = kzalloc(sizeof(struct max732x_chip), GFP_KERNEL);
if (chip == NULL)
Index: linux.git3/drivers/gpio/mcp23s08.c
===
--- linux.git3.orig/drivers/gpio/mcp23s08.c 2008-10-22 09:50:45.0 
+0100
+++ linux.git3/drivers/gpio/mcp23s08.c  2009-01-07 12:23:24.0 +
@@ -310,8 +310,10 @@ static int mcp23s08_probe(struct spi_dev
unsignedbase;
 
pdata = spi-dev.platform_data;
-   if (!pdata || !gpio_is_valid(pdata-base))
-   return -ENODEV;
+   if (!pdata || !gpio_is_valid(pdata-base)) {
+   dev_dbg(spi-dev, invalid or missing platform data\n);
+   return -EINVAL;
+   }
 
for (addr = 0; addr  4; addr++) {
if (!pdata-chip[addr].is_present)
Index: linux.git3/drivers/gpio/pca953x.c
===
--- linux.git3.orig/drivers/gpio/pca953x.c  2008-10-22 09:50:45.0 
+0100
+++ linux.git3/drivers/gpio/pca953x.c   2009-01-07 12:36:00.0 +
@@ -200,8 +200,10 @@ static int __devinit pca953x_probe(struc
int ret;
 
pdata = client-dev.platform_data;
-   if (pdata == NULL)
-   return -ENODEV;
+   if (pdata == NULL) {
+   dev_dbg(client-dev, no platform data\n);
+   return -EINVAL;
+   }
 
chip = kzalloc(sizeof(struct pca953x_chip), GFP_KERNEL);
if (chip == NULL)
Index: linux.git3/drivers/gpio/pcf857x.c
===
--- linux.git3.orig/drivers/gpio/pcf857x.c  2008-10-22 09:50:45.0 
+0100
+++ linux.git3/drivers/gpio/pcf857x.c   2009-01-07 12:27:00.0 +
@@ -188,8 +188,10 @@ static int pcf857x_probe(struct i2c_clie
int status;
 
pdata = client-dev.platform_data;
-   if (!pdata)
-   return -ENODEV;
+   if (!pdata) {
+   dev_dbg(client-dev, no platform data\n);
+   return -EINVAL;
+   }
 
/* Allocate, initialize, and register this gpio_chip. */
gpio = kzalloc(sizeof *gpio, GFP_KERNEL);
@@ -248,8 +250,10 @@ static int pcf857x_probe(struct i2c_clie
else
status = i2c_read_le16(client);
 
-   } else
-   status = -ENODEV;
+   } else {
+   dev_dbg(client-dev, unsupported number of gpios\n);
+   status = -EINVAL;
+   }
 
if (status  0)
goto fail;

-- 
Ben (b...@fluff.org, http://www.fluff.org/)

  'a smiley only costs 4 bytes'

--
Check out the new SourceForge.net Marketplace.
It is the best place to buy or sell services for
just about anything Open Source.
http://p.sf.net/sfu/Xq1LFB
___
spi-devel-general mailing list
spi-devel-general@lists.sourceforge.net