From cf394eddf24b3df0dd213fdd9ea7ac541a262411 Mon Sep 17 00:00:00 2001 From: Tao Huang Date: Mon, 14 Mar 2022 19:53:43 +0800 Subject: [PATCH] usb: typec: tcpm: Fix for GKI Fixes: b1302e6a8305 ("usb: typec: tcpm: add pd handler lock") Signed-off-by: Tao Huang Change-Id: Ic0709a80851490a8dca4c53a8e0fa50b18bf0a63 --- drivers/usb/typec/tcpm/tcpm.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/drivers/usb/typec/tcpm/tcpm.c b/drivers/usb/typec/tcpm/tcpm.c index 6fa80042cd05..a7d4d2e99fc3 100644 --- a/drivers/usb/typec/tcpm/tcpm.c +++ b/drivers/usb/typec/tcpm/tcpm.c @@ -360,7 +360,9 @@ struct tcpm_port { unsigned long delay_ms; spinlock_t pd_event_lock; +#ifdef CONFIG_NO_GKI struct mutex pd_handler_lock; +#endif u32 pd_events; struct kthread_work event_work; @@ -1464,16 +1466,18 @@ static void tcpm_queue_vdm(struct tcpm_port *port, const u32 header, static void tcpm_queue_vdm_unlocked(struct tcpm_port *port, const u32 header, const u32 *data, int cnt) { +#ifdef CONFIG_NO_GKI mutex_lock(&port->pd_handler_lock); if (tcpm_port_is_disconnected(port)) goto unlock; - +#endif mutex_lock(&port->lock); tcpm_queue_vdm(port, header, data, cnt); mutex_unlock(&port->lock); - +#ifdef CONFIG_NO_GKI unlock: mutex_unlock(&port->pd_handler_lock); +#endif } static void svdm_consume_identity(struct tcpm_port *port, const u32 *p, int cnt) @@ -5396,7 +5400,9 @@ static void tcpm_pd_event_handler(struct kthread_work *work) event_work); u32 events; +#ifdef CONFIG_NO_GKI mutex_lock(&port->pd_handler_lock); +#endif mutex_lock(&port->lock); spin_lock(&port->pd_event_lock); @@ -5459,7 +5465,9 @@ static void tcpm_pd_event_handler(struct kthread_work *work) } spin_unlock(&port->pd_event_lock); mutex_unlock(&port->lock); +#ifdef CONFIG_NO_GKI mutex_unlock(&port->pd_handler_lock); +#endif } void tcpm_cc_change(struct tcpm_port *port) @@ -6467,7 +6475,9 @@ struct tcpm_port *tcpm_register_port(struct device *dev, struct tcpc_dev *tcpc) mutex_init(&port->lock); mutex_init(&port->swap_lock); +#ifdef CONFIG_NO_GKI mutex_init(&port->pd_handler_lock); +#endif port->wq = kthread_create_worker(0, dev_name(dev)); if (IS_ERR(port->wq))