diff options
Diffstat (limited to 'drivers/gpio/gpio-mcp23s08.c')
| -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++) { |
