Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b184c388 authored by Sonic Zhang's avatar Sonic Zhang Committed by Linus Walleij
Browse files

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: default avatarSonic Zhang <sonic.zhang@analog.com>
Reviewed-by: default avatarAlexandre Courbot <acourbot@nvidia.com>
Tested-by: default avatarAntonio Fiol <antonio@fiol.es>
Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
parent 3d009c8c
Loading
Loading
Loading
Loading
+10 −7
Original line number Diff line number Diff line
@@ -801,9 +801,11 @@ static int mcp230xx_probe(struct i2c_client *client,
		client->irq = irq_of_parse_and_map(client->dev.of_node, 0);
	} else {
		pdata = dev_get_platdata(&client->dev);
		if (!pdata || !gpio_is_valid(pdata->base)) {
			dev_dbg(&client->dev, "invalid platform data\n");
			return -EINVAL;
		if (!pdata) {
			pdata = devm_kzalloc(&client->dev,
					sizeof(struct mcp23s08_platform_data),
					GFP_KERNEL);
			pdata->base = -1;
		}
	}

@@ -924,10 +926,11 @@ static int mcp23s08_probe(struct spi_device *spi)
	} else {
		type = spi_get_device_id(spi)->driver_data;
		pdata = dev_get_platdata(&spi->dev);
		if (!pdata || !gpio_is_valid(pdata->base)) {
			dev_dbg(&spi->dev,
					"invalid or missing platform data\n");
			return -EINVAL;
		if (!pdata) {
			pdata = devm_kzalloc(&spi->dev,
					sizeof(struct mcp23s08_platform_data),
					GFP_KERNEL);
			pdata->base = -1;
		}

		for (addr = 0; addr < ARRAY_SIZE(pdata->chip); addr++) {