diff options
Diffstat (limited to 'drivers/spi/spi.c')
-rw-r--r-- | drivers/spi/spi.c | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c index 9e039c60c068..740f9ddda227 100644 --- a/drivers/spi/spi.c +++ b/drivers/spi/spi.c | |||
@@ -240,15 +240,27 @@ EXPORT_SYMBOL_GPL(spi_bus_type); | |||
240 | static int spi_drv_probe(struct device *dev) | 240 | static int spi_drv_probe(struct device *dev) |
241 | { | 241 | { |
242 | const struct spi_driver *sdrv = to_spi_driver(dev->driver); | 242 | const struct spi_driver *sdrv = to_spi_driver(dev->driver); |
243 | struct spi_device *spi = to_spi_device(dev); | ||
244 | int ret; | ||
245 | |||
246 | acpi_dev_pm_attach(&spi->dev, true); | ||
247 | ret = sdrv->probe(spi); | ||
248 | if (ret) | ||
249 | acpi_dev_pm_detach(&spi->dev, true); | ||
243 | 250 | ||
244 | return sdrv->probe(to_spi_device(dev)); | 251 | return ret; |
245 | } | 252 | } |
246 | 253 | ||
247 | static int spi_drv_remove(struct device *dev) | 254 | static int spi_drv_remove(struct device *dev) |
248 | { | 255 | { |
249 | const struct spi_driver *sdrv = to_spi_driver(dev->driver); | 256 | const struct spi_driver *sdrv = to_spi_driver(dev->driver); |
257 | struct spi_device *spi = to_spi_device(dev); | ||
258 | int ret; | ||
259 | |||
260 | ret = sdrv->remove(spi); | ||
261 | acpi_dev_pm_detach(&spi->dev, true); | ||
250 | 262 | ||
251 | return sdrv->remove(to_spi_device(dev)); | 263 | return ret; |
252 | } | 264 | } |
253 | 265 | ||
254 | static void spi_drv_shutdown(struct device *dev) | 266 | static void spi_drv_shutdown(struct device *dev) |
@@ -1025,8 +1037,10 @@ static acpi_status acpi_spi_add_device(acpi_handle handle, u32 level, | |||
1025 | return AE_OK; | 1037 | return AE_OK; |
1026 | } | 1038 | } |
1027 | 1039 | ||
1040 | adev->power.flags.ignore_parent = true; | ||
1028 | strlcpy(spi->modalias, dev_name(&adev->dev), sizeof(spi->modalias)); | 1041 | strlcpy(spi->modalias, dev_name(&adev->dev), sizeof(spi->modalias)); |
1029 | if (spi_add_device(spi)) { | 1042 | if (spi_add_device(spi)) { |
1043 | adev->power.flags.ignore_parent = false; | ||
1030 | dev_err(&master->dev, "failed to add SPI device %s from ACPI\n", | 1044 | dev_err(&master->dev, "failed to add SPI device %s from ACPI\n", |
1031 | dev_name(&adev->dev)); | 1045 | dev_name(&adev->dev)); |
1032 | spi_dev_put(spi); | 1046 | spi_dev_put(spi); |