diff options
author | Zhang Bo <bo.zhang@nxp.com> | 2017-12-28 18:15:17 +0800 |
---|---|---|
committer | Zhang Bo <bo.zhang@nxp.com> | 2017-12-28 18:40:15 +0800 |
commit | ad785b859ac6dcfcf73c25d0af93f88c655c8580 (patch) | |
tree | 5f42708efd05b6f161011ed8a91b161f17fad84c | |
parent | 6341a5e7e7816e5293100d2f25616b74b6ff93f1 (diff) |
MA-10975[Android] Add USB device wakelock for imx8mq-evk boardo8.0.0_1.3.0_8m-prc
Add wakeup source in USB typec tcpm. So imx8mq-evk board will not
enter suspend mode when connect with USB host.
Change-Id: If3386ff8eece31fb464febd65c747259625b19ff
Signed-off-by: Zhang Bo <bo.zhang@nxp.com>
-rw-r--r-- | drivers/staging/typec/tcpm.c | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/drivers/staging/typec/tcpm.c b/drivers/staging/typec/tcpm.c index 723b80b230ee..cb02915f557a 100644 --- a/drivers/staging/typec/tcpm.c +++ b/drivers/staging/typec/tcpm.c @@ -27,6 +27,9 @@ #include <linux/spinlock.h> #include <linux/usb/typec.h> #include <linux/workqueue.h> +#ifdef CONFIG_PM_WAKELOCKS +#include <linux/wakelock.h> +#endif #include "pd.h" #include "pd_vdo.h" @@ -343,6 +346,10 @@ static enum tcpm_state tcpm_default_state(struct tcpm_port *port) return SRC_UNATTACHED; } +#ifdef CONFIG_PM_WAKELOCKS +static struct wake_lock wakelock; +#endif + static inline struct tcpm_port *typec_cap_to_tcpm(const struct typec_capability *cap) { @@ -2057,7 +2064,9 @@ static int tcpm_snk_attach(struct tcpm_port *port) port->tcpc->ss_mux_sel(port->tcpc, polarity); tcpm_start_drp_toggling(port); - +#ifdef CONFIG_PM_WAKELOCKS + wake_lock(&wakelock); +#endif ret = tcpm_set_roles(port, true, TYPEC_SINK, TYPEC_DEVICE); if (ret < 0) return ret; @@ -2077,6 +2086,9 @@ static void tcpm_snk_detach(struct tcpm_port *port) tcpm_detach(port); /* XXX: (Dis)connect SuperSpeed mux? */ +#ifdef CONFIG_PM_WAKELOCKS + wake_unlock(&wakelock); +#endif } static int tcpm_acc_attach(struct tcpm_port *port) @@ -3567,6 +3579,10 @@ struct tcpm_port *tcpm_register_port(struct device *dev, struct tcpc_dev *tcpc) tcpm_init(port); mutex_unlock(&port->lock); +#ifdef CONFIG_PM_WAKELOCKS + wake_lock_init(&wakelock, WAKE_LOCK_SUSPEND, "gadget"); +#endif + tcpm_log(port, "%s: registered", dev_name(dev)); return port; @@ -3585,6 +3601,10 @@ void tcpm_unregister_port(struct tcpm_port *port) typec_unregister_port(port->typec_port); tcpm_debugfs_exit(port); destroy_workqueue(port->wq); + +#ifdef CONFIG_PM_WAKELOCKS + wake_lock_destroy(&wakelock); +#endif } EXPORT_SYMBOL_GPL(tcpm_unregister_port); |