Input: ads7846 - return error on regulator_get() failure
In probe(), if regulator_get() failed, an error code was not being returned causing the driver to be successfully bound, even though probe failed. This in turn caused the suspend, resume and remove methods to be registered and accessed via the SPI core. Since these functions all access private driver data using pointers that had been freed during the failed probe, this would lead to unpredictable behavior. This patch ensures that probe() returns an error code in this failure case so the driver is not bound. Found using lockdep and noticing the lock used in the suspend/resum path pointed to a bogus lock due to the freed memory. Signed-off-by: Kevin Hilman <khilman@deeprootsystems.com> Acked-by: Mike Frysinger <vapier@gentoo.org> Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
This commit is contained in:
parent
f2126a9967
commit
067fb2f648
|
@ -1163,8 +1163,8 @@ static int __devinit ads7846_probe(struct spi_device *spi)
|
|||
|
||||
ts->reg = regulator_get(&spi->dev, "vcc");
|
||||
if (IS_ERR(ts->reg)) {
|
||||
dev_err(&spi->dev, "unable to get regulator: %ld\n",
|
||||
PTR_ERR(ts->reg));
|
||||
err = PTR_ERR(ts->reg);
|
||||
dev_err(&spi->dev, "unable to get regulator: %ld\n", err);
|
||||
goto err_free_gpio;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue