Recently my patch was found to be a duplicated in the gpio tree during a manual merge with linux-next. The patch was similar but not identical and it was smoothed out by Stephen Rothwell. Though I did found a bit of redundant code in the Linux next version. https://lkml.org/lkml/2014/5/28/197 I am willing to recreate the patch but I am wondering if I should model it after my original patch or after the merged version in linux-next. Suggestions? On Wed, Jun 04, 2014 at 03:55:50PM -0700, gregkh@xxxxxxxxxxxxxxxxxxx wrote: > > The patch below does not apply to the 3.14-stable tree. > If someone wants it applied there, or to any other stable or longterm > tree, then please email the backport, including the original git commit > id to <stable@xxxxxxxxxxxxxxx>. > > thanks, > > greg k-h > > ------------------ original commit in Linus's tree ------------------ > > >From 99e4b98dbe3ad1fe38a74d12c3b8d44a55930de4 Mon Sep 17 00:00:00 2001 > From: Michael Welling <mwelling@xxxxxxxx> > Date: Wed, 16 Apr 2014 20:00:24 -0500 > Subject: [PATCH] gpio: mcp23s08: Bug fix of SPI device tree registration. > > The chips variable needs to be incremented for each chip that is > found in the spi_present_mask when registering via device tree. > Without this and the checking a negative index is passed to the > data->chip array in a subsequent loop. > > Cc: stable@xxxxxxxxxxxxxxx > Signed-off-by: Michael Welling <mwelling@xxxxxxxx> > Acked-by: Peter Korsgaard <peter@xxxxxxxxxxxxx> > Signed-off-by: Linus Walleij <linus.walleij@xxxxxxxxxx> > > diff --git a/drivers/gpio/gpio-mcp23s08.c b/drivers/gpio/gpio-mcp23s08.c > index 99a68310e7c0..3d53fd6880d1 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) -- To unsubscribe from this list: send the line "unsubscribe stable" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html