GPIO: Fix probe() error return in gpio driver probes
Subsystems (3)
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 <[email protected]>
drivers/gpio/max7301.c +4 -2
@@ -217,8 +217,10 @@ static int __devinit max7301_probe(strucint 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
drivers/gpio/max732x.c +4 -2
@@ -267,8 +267,10 @@ static int __devinit max732x_probe(strucint 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 )
drivers/gpio/mcp23s08.c +4 -2
@@ -310,8 +310,10 @@ static int mcp23s08_probe(struct spi_devunsigned base; 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)
drivers/gpio/pca953x.c +4 -2
@@ -200,8 +200,10 @@ static int __devinit pca953x_probe(strucint 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 )
drivers/gpio/pcf857x.c +8 -4
@@ -188,8 +188,10 @@ static int pcf857x_probe(struct i2c_clieint 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_clieelse 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;
Signature · 3 lines
Ben ([email protected], http://www.fluff.org/) 'a smiley only costs 4 bytes'