diff options
| author | Sonic Zhang <sonic.zhang@analog.com> | 2015-01-20 04:00:08 -0500 |
|---|---|---|
| committer | Linus Walleij <linus.walleij@linaro.org> | 2015-01-26 03:10:44 -0500 |
| commit | b184c388f773f30b6c707d3d4599b2db80f4390c (patch) | |
| tree | 40819016a42677debbafb2f11b47d28396259dbe /drivers | |
| parent | 3d009c8c61f96b50c068c8122e929352c359f877 (diff) | |
gpio: mcp23s08: handle default gpio base
Create default gpio base if neither device node nor
platform data is defined.
Cc: Stable <stable@vger.kernel.org>
Signed-off-by: Sonic Zhang <sonic.zhang@analog.com>
Reviewed-by: Alexandre Courbot <acourbot@nvidia.com>
Tested-by: Antonio Fiol <antonio@fiol.es>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/gpio/gpio-mcp23s08.c | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/drivers/gpio/gpio-mcp23s08.c b/drivers/gpio/gpio-mcp23s08.c index da9c316059bc..eea5d7e578c9 100644 --- a/drivers/gpio/gpio-mcp23s08.c +++ b/drivers/gpio/gpio-mcp23s08.c | |||
| @@ -801,9 +801,11 @@ static int mcp230xx_probe(struct i2c_client *client, | |||
| 801 | client->irq = irq_of_parse_and_map(client->dev.of_node, 0); | 801 | client->irq = irq_of_parse_and_map(client->dev.of_node, 0); |
| 802 | } else { | 802 | } else { |
| 803 | pdata = dev_get_platdata(&client->dev); | 803 | pdata = dev_get_platdata(&client->dev); |
| 804 | if (!pdata || !gpio_is_valid(pdata->base)) { | 804 | if (!pdata) { |
| 805 | dev_dbg(&client->dev, "invalid platform data\n"); | 805 | pdata = devm_kzalloc(&client->dev, |
| 806 | return -EINVAL; | 806 | sizeof(struct mcp23s08_platform_data), |
| 807 | GFP_KERNEL); | ||
| 808 | pdata->base = -1; | ||
| 807 | } | 809 | } |
| 808 | } | 810 | } |
| 809 | 811 | ||
| @@ -924,10 +926,11 @@ static int mcp23s08_probe(struct spi_device *spi) | |||
| 924 | } else { | 926 | } else { |
| 925 | type = spi_get_device_id(spi)->driver_data; | 927 | type = spi_get_device_id(spi)->driver_data; |
| 926 | pdata = dev_get_platdata(&spi->dev); | 928 | pdata = dev_get_platdata(&spi->dev); |
| 927 | if (!pdata || !gpio_is_valid(pdata->base)) { | 929 | if (!pdata) { |
| 928 | dev_dbg(&spi->dev, | 930 | pdata = devm_kzalloc(&spi->dev, |
| 929 | "invalid or missing platform data\n"); | 931 | sizeof(struct mcp23s08_platform_data), |
| 930 | return -EINVAL; | 932 | GFP_KERNEL); |
| 933 | pdata->base = -1; | ||
| 931 | } | 934 | } |
| 932 | 935 | ||
| 933 | for (addr = 0; addr < ARRAY_SIZE(pdata->chip); addr++) { | 936 | for (addr = 0; addr < ARRAY_SIZE(pdata->chip); addr++) { |
