summaryrefslogtreecommitdiffstats
path: root/drivers/staging/greybus/spilib.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/staging/greybus/spilib.c')
-rw-r--r--drivers/staging/greybus/spilib.c29
1 files changed, 29 insertions, 0 deletions
diff --git a/drivers/staging/greybus/spilib.c b/drivers/staging/greybus/spilib.c
index 527909b..e4c82e0 100644
--- a/drivers/staging/greybus/spilib.c
+++ b/drivers/staging/greybus/spilib.c
@@ -15,6 +15,7 @@
#include "greybus.h"
#include "spilib.h"
+#include "gbphy.h"
struct gb_spilib {
struct gb_connection *connection;
@@ -372,6 +373,26 @@ out:
return ret;
}
+#ifndef SPI_CORE_SUPPORT_PM
+static int gb_spi_prepare_transfer_hardware(struct spi_master *master)
+{
+ struct gb_spilib *spi = spi_master_get_devdata(master);
+ struct gbphy_device *gbphy_dev = to_gbphy_dev(spi->parent);
+
+ return gbphy_runtime_get_sync(gbphy_dev);
+}
+
+static int gb_spi_unprepare_transfer_hardware(struct spi_master *master)
+{
+ struct gb_spilib *spi = spi_master_get_devdata(master);
+ struct gbphy_device *gbphy_dev = to_gbphy_dev(spi->parent);
+
+ gbphy_runtime_put_autosuspend(gbphy_dev);
+
+ return 0;
+}
+#endif
+
static int gb_spi_setup(struct spi_device *spi)
{
/* Nothing to do for now */
@@ -497,6 +518,14 @@ int gb_spilib_master_init(struct gb_connection *connection, struct device *dev)
master->setup = gb_spi_setup;
master->transfer_one_message = gb_spi_transfer_one_message;
+#ifndef SPI_CORE_SUPPORT_PM
+ master->prepare_transfer_hardware = gb_spi_prepare_transfer_hardware;
+ master->unprepare_transfer_hardware =
+ gb_spi_unprepare_transfer_hardware;
+#else
+ master->auto_runtime_pm = true;
+#endif
+
ret = spi_register_master(master);
if (ret < 0)
goto exit_spi_put;
OpenPOWER on IntegriCloud