summaryrefslogtreecommitdiff
path: root/drivers/hsi/controllers/omap_ssi.h
diff options
context:
space:
mode:
authorSebastian Reichel <sre@kernel.org>2016-05-11 21:33:45 +0300
committerSebastian Reichel <sre@kernel.org>2016-06-28 01:39:15 +0300
commit7c5d81620ecd37702e86232de819eb1dd4c738e0 (patch)
tree6d47fa843b20df8ce67b842f454d07b6cefbde95 /drivers/hsi/controllers/omap_ssi.h
parentde5a3774dde2c2f3b3a9a48b880fd820142706f0 (diff)
downloadlinux-7c5d81620ecd37702e86232de819eb1dd4c738e0.tar.xz
HSI: omap_ssi_port: prepare start_tx/stop_tx for blocking pm_runtime calls
ssi_start_tx and ssi_stop_tx may be called from atomic context. Once pm_runtime_irq_safe() is removed for omap-ssi, this will fail, due to blocking pm_runtime_*_sync() calls. This fixes ssi_stop_tx by using non-sync API and ssi_start_tx by using a worker thread. Signed-off-by: Sebastian Reichel <sre@kernel.org> Tested-by: Pavel Machek <pavel@ucw.cz>
Diffstat (limited to 'drivers/hsi/controllers/omap_ssi.h')
-rw-r--r--drivers/hsi/controllers/omap_ssi.h2
1 files changed, 2 insertions, 0 deletions
diff --git a/drivers/hsi/controllers/omap_ssi.h b/drivers/hsi/controllers/omap_ssi.h
index 6cdaad8805f7..5467f61e5086 100644
--- a/drivers/hsi/controllers/omap_ssi.h
+++ b/drivers/hsi/controllers/omap_ssi.h
@@ -79,6 +79,7 @@ struct omap_ssm_ctx {
* @pio_tasklet: Bottom half for PIO transfers and events
* @flags: flags to keep track of states
* @wk_refcount: Reference count for output wake line
+ * @work: worker for starting TX
* @sys_mpu_enable: Context for the interrupt enable register for irq 0
* @sst: Context for the synchronous serial transmitter
* @ssr: Context for the synchronous serial receiver
@@ -103,6 +104,7 @@ struct omap_ssi_port {
bool wktest:1; /* FIXME: HACK to be removed */
unsigned long flags;
unsigned int wk_refcount;
+ struct work_struct work;
/* OMAP SSI port context */
u32 sys_mpu_enable; /* We use only one irq */
struct omap_ssm_ctx sst;