p54spi: Release GPIO lines and IRQ on error in p54spi_probe
This makes it possible to reload driver if insmod has failed due to missing firmware. Signed-off-by: Max Filippov <jcmvbkbc@gmail.com> Cc: stable <stable@vger.kernel.org> Acked-by: Christian Lamparter <chunkeey@googlemail.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
Родитель
461bc26c93
Коммит
62ebeed8d0
|
@ -618,19 +618,19 @@ static int __devinit p54spi_probe(struct spi_device *spi)
|
|||
ret = spi_setup(spi);
|
||||
if (ret < 0) {
|
||||
dev_err(&priv->spi->dev, "spi_setup failed");
|
||||
goto err_free_common;
|
||||
goto err_free;
|
||||
}
|
||||
|
||||
ret = gpio_request(p54spi_gpio_power, "p54spi power");
|
||||
if (ret < 0) {
|
||||
dev_err(&priv->spi->dev, "power GPIO request failed: %d", ret);
|
||||
goto err_free_common;
|
||||
goto err_free;
|
||||
}
|
||||
|
||||
ret = gpio_request(p54spi_gpio_irq, "p54spi irq");
|
||||
if (ret < 0) {
|
||||
dev_err(&priv->spi->dev, "irq GPIO request failed: %d", ret);
|
||||
goto err_free_common;
|
||||
goto err_free_gpio_power;
|
||||
}
|
||||
|
||||
gpio_direction_output(p54spi_gpio_power, 0);
|
||||
|
@ -641,7 +641,7 @@ static int __devinit p54spi_probe(struct spi_device *spi)
|
|||
priv->spi);
|
||||
if (ret < 0) {
|
||||
dev_err(&priv->spi->dev, "request_irq() failed");
|
||||
goto err_free_common;
|
||||
goto err_free_gpio_irq;
|
||||
}
|
||||
|
||||
irq_set_irq_type(gpio_to_irq(p54spi_gpio_irq), IRQ_TYPE_EDGE_RISING);
|
||||
|
@ -673,6 +673,12 @@ static int __devinit p54spi_probe(struct spi_device *spi)
|
|||
return 0;
|
||||
|
||||
err_free_common:
|
||||
free_irq(gpio_to_irq(p54spi_gpio_irq), spi);
|
||||
err_free_gpio_irq:
|
||||
gpio_free(p54spi_gpio_irq);
|
||||
err_free_gpio_power:
|
||||
gpio_free(p54spi_gpio_power);
|
||||
err_free:
|
||||
p54_free_common(priv->hw);
|
||||
return ret;
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче