From 325d5f396f755c5c2c29110c5821d594c5cc303d Mon Sep 17 00:00:00 2001 From: Kavya Nunna Date: Thu, 3 Sep 2020 16:21:13 +0530 Subject: [PATCH 1/2] power: smblite-lib/smb5-lib: Add partner registration for microusb otg Add partner registration for otg to provide UX. USB_HAL expects power_role and data_role to be updated for the notification to UI. Update power_role and data_role for microusb otg. Change-Id: I741df638e18a400c862845bddd5bb19130adecd7 Signed-off-by: Kavya Nunna Signed-off-by: Ashish Chavan --- drivers/power/supply/qcom/smb5-lib.c | 21 +++++++++++++++++++-- drivers/power/supply/qcom/smblite-lib.c | 16 ++++++++++++++++ 2 files changed, 35 insertions(+), 2 deletions(-) diff --git a/drivers/power/supply/qcom/smb5-lib.c b/drivers/power/supply/qcom/smb5-lib.c index d991eb0f1360..4d0358d450c2 100644 --- a/drivers/power/supply/qcom/smb5-lib.c +++ b/drivers/power/supply/qcom/smb5-lib.c @@ -7308,10 +7308,27 @@ static void smblib_uusb_otg_work(struct work_struct *work) goto out; } otg = !!(stat & U_USB_GROUND_NOVBUS_BIT); - if (chg->otg_present != otg) + if (chg->otg_present != otg) { + if (otg) { + /* otg cable inserted */ + if (chg->typec_port) { + typec_partner_register(chg); + typec_set_data_role(chg->typec_port, + TYPEC_HOST); + typec_set_pwr_role(chg->typec_port, + TYPEC_SOURCE); + } + } else if (chg->typec_port) { + /* otg cable removed */ + typec_set_data_role(chg->typec_port, TYPEC_DEVICE); + typec_set_pwr_role(chg->typec_port, TYPEC_SINK); + typec_partner_unregister(chg); + } + smblib_notify_usb_host(chg, otg); - else + } else { goto out; + } chg->otg_present = otg; if (!otg) diff --git a/drivers/power/supply/qcom/smblite-lib.c b/drivers/power/supply/qcom/smblite-lib.c index 0d1690ca10b6..6740cc9350a9 100644 --- a/drivers/power/supply/qcom/smblite-lib.c +++ b/drivers/power/supply/qcom/smblite-lib.c @@ -2907,6 +2907,22 @@ irqreturn_t smblite_usb_id_irq_handler(int irq, void *data) smblite_lib_dbg(chg, PR_INTERRUPT, "IRQ: %s, id_state=%d\n", "usb-id-irq", id_state); + if (id_state) { + /*otg cable removed */ + if (chg->otg_present) { + if (chg->typec_port) { + typec_set_data_role(chg->typec_port, + TYPEC_DEVICE); + typec_set_pwr_role(chg->typec_port, TYPEC_SINK); + typec_partner_unregister(chg); + } + } + } else if (chg->typec_port) { + /*otg cable inserted */ + typec_partner_register(chg); + typec_set_data_role(chg->typec_port, TYPEC_HOST); + typec_set_pwr_role(chg->typec_port, TYPEC_SOURCE); + } smblite_lib_notify_usb_host(chg, !id_state); From a00317108c78be79bafd11a0e6242f87b3bf7575 Mon Sep 17 00:00:00 2001 From: Kavya Nunna Date: Wed, 15 Jul 2020 11:46:19 +0530 Subject: [PATCH 2/2] power: smblite-lib/smb5-lib: Fix partner registration for microusb Typec attach_detach handler gets executed which is not expected for micro-usb design. Return from type-C attach-detach handler for micro-usb stack. Change-Id: Ia7bfe6b407757663be4f7d143ccd88a60079657b Signed-off-by: Kavya Nunna Signed-off-by: Ashish Chavan --- drivers/power/supply/qcom/smb5-lib.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/power/supply/qcom/smb5-lib.c b/drivers/power/supply/qcom/smb5-lib.c index 4d0358d450c2..aed72500fb72 100644 --- a/drivers/power/supply/qcom/smb5-lib.c +++ b/drivers/power/supply/qcom/smb5-lib.c @@ -6574,6 +6574,10 @@ irqreturn_t smb5_typec_attach_detach_irq_handler(int irq, void *data) bool attached = false; int rc; + /* IRQ not expected to be executed for uUSB, return */ + if (chg->connector_type == QTI_POWER_SUPPLY_CONNECTOR_MICRO_USB) + return IRQ_HANDLED; + smblib_dbg(chg, PR_INTERRUPT, "IRQ: %s\n", irq_data->name); rc = smblib_read(chg, TYPE_C_STATE_MACHINE_STATUS_REG, &stat);