Daniel, Lars, Peter: can either of you have a look at this patch and ACK/NACK it? Yours, Linus Walleij On Thu, Apr 17, 2014 at 3:00 AM, Michael Welling <mwelling@xxxxxxxx> wrote: > The chips variable needs to be incremented for each chip that is found in the > spi_present_mask when register via device tree. Without this and the checking > a negative index is passed to the data->chip array in a subsequent loop. > > Signed-off-by: Michael Welling <mwelling@xxxxxxxx> > --- > drivers/gpio/gpio-mcp23s08.c | 12 +++++++----- > 1 file changed, 7 insertions(+), 5 deletions(-) > > diff --git a/drivers/gpio/gpio-mcp23s08.c b/drivers/gpio/gpio-mcp23s08.c > index 99a6831..3d53fd6 100644 > --- a/drivers/gpio/gpio-mcp23s08.c > +++ b/drivers/gpio/gpio-mcp23s08.c > @@ -894,9 +894,11 @@ static int mcp23s08_probe(struct spi_device *spi) > dev_err(&spi->dev, "invalid spi-present-mask\n"); > return -ENODEV; > } > - > - for (addr = 0; addr < ARRAY_SIZE(pdata->chip); addr++) > + for (addr = 0; addr < ARRAY_SIZE(pdata->chip); addr++) { > + if ((spi_present_mask & (1 << addr))) > + chips++; > pullups[addr] = 0; > + } > } else { > type = spi_get_device_id(spi)->driver_data; > pdata = dev_get_platdata(&spi->dev); > @@ -919,12 +921,12 @@ static int mcp23s08_probe(struct spi_device *spi) > pullups[addr] = pdata->chip[addr].pullups; > } > > - if (!chips) > - return -ENODEV; > - > base = pdata->base; > } > > + if (!chips) > + return -ENODEV; > + > data = kzalloc(sizeof(*data) + chips * sizeof(struct mcp23s08), > GFP_KERNEL); > if (!data) > -- > 1.7.9.5 > -- To unsubscribe from this list: send the line "unsubscribe linux-gpio" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html