diff --git a/drivers/power/bq2589x_chg_mmi/bq2589x_charger.c b/drivers/power/bq2589x_chg_mmi/bq2589x_charger.c index f5574acd3a41..81687c2ee16c 100644 --- a/drivers/power/bq2589x_chg_mmi/bq2589x_charger.c +++ b/drivers/power/bq2589x_chg_mmi/bq2589x_charger.c @@ -202,8 +202,6 @@ struct pe_ctrl { }; static struct pe_ctrl pe; -extern bool mmi_is_factory_mode(void); - static int bq2589x_read_byte(struct bq2589x *bq, u8 *data, u8 reg) { int ret; @@ -1527,7 +1525,7 @@ static bq2589x_reuqest_dpdm(struct bq2589x *bq, bool enable) { int ret = 0; - if(mmi_is_factory_mode() && bq->ignore_request_dpdm) { + if(bq->ignore_request_dpdm) { dev_err(bq->dev, "%s ignore_request_dpdm\n", __func__); return ret; } diff --git a/drivers/power/sgm4154x_chg_mmi/sgm4154x_charger.c b/drivers/power/sgm4154x_chg_mmi/sgm4154x_charger.c index 113a4ee08d35..7af1152e614e 100644 --- a/drivers/power/sgm4154x_chg_mmi/sgm4154x_charger.c +++ b/drivers/power/sgm4154x_chg_mmi/sgm4154x_charger.c @@ -79,8 +79,6 @@ static enum power_supply_usb_type sgm4154x_usb_type[] = { POWER_SUPPLY_USB_TYPE_CDP, }; -extern bool mmi_is_factory_mode(void); - #define WAIT_I2C_COUNT 50 #define WAIT_I2C_TIME 10 int mmi_regmap_update_bits(struct sgm4154x_device *sgm, unsigned int reg, @@ -1391,7 +1389,7 @@ static int sgm4154x_request_dpdm(struct sgm4154x_device *sgm, bool enable) { int rc = 0; - if(mmi_is_factory_mode() && sgm->ignore_request_dpdm) { + if(sgm->ignore_request_dpdm) { dev_err(sgm->dev, "%s ignore_request_dpdm\n", __func__); return rc; } diff --git a/drivers/usb/typec/mmi_tcpc/Android.mk b/drivers/usb/typec/mmi_tcpc/Android.mk index 1ae2d8be46e3..f3be5769a12b 100644 --- a/drivers/usb/typec/mmi_tcpc/Android.mk +++ b/drivers/usb/typec/mmi_tcpc/Android.mk @@ -50,4 +50,5 @@ include $(CLEAR_VARS) LOCAL_MODULE_TAGS := optional LOCAL_MODULE := rt_pd_manager.ko LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT) +LOCAL_ADDITIONAL_DEPENDENCIES := $(KERNEL_MODULES_OUT)/mmi_discrete_charger_class.ko include $(DLKM_DIR)/AndroidKernelModule.mk diff --git a/drivers/usb/typec/mmi_tcpc/Kbuild b/drivers/usb/typec/mmi_tcpc/Kbuild index 5ae487705624..e6ef9c2547e7 100644 --- a/drivers/usb/typec/mmi_tcpc/Kbuild +++ b/drivers/usb/typec/mmi_tcpc/Kbuild @@ -48,3 +48,4 @@ obj-m += tcpc_class.o obj-m += rt_pd_manager.o KBUILD_EXTRA_SYMBOLS += $(CURDIR)/$(KBUILD_EXTMOD)/../adapter_class/$(GKI_OBJ_MODULE_DIR)/Module.symvers +KBUILD_EXTRA_SYMBOLS += $(CURDIR)/$(KBUILD_EXTMOD)/../../../power/mmi_discrete_charger/$(GKI_OBJ_MODULE_DIR)/Module.symvers diff --git a/drivers/usb/typec/mmi_tcpc/rt_pd_manager.c b/drivers/usb/typec/mmi_tcpc/rt_pd_manager.c index f2ccdcfef8dd..153459a37dc8 100644 --- a/drivers/usb/typec/mmi_tcpc/rt_pd_manager.c +++ b/drivers/usb/typec/mmi_tcpc/rt_pd_manager.c @@ -24,6 +24,7 @@ #include #include "inc/tcpci_typec.h" #include +#include #define RT_PD_MANAGER_VERSION "0.0.8_G" @@ -68,6 +69,8 @@ struct rt_pd_manager_data { struct typec_partner *partner; struct typec_partner_desc partner_desc; struct usb_pd_identity partner_identity; + + struct charger_device *master_chg_dev; }; static const unsigned int rpm_extcon_cable[] = { @@ -163,9 +166,31 @@ out: return ret; } +static void mmi_ignore_require_dpdm(struct rt_pd_manager_data *rpmd, bool value) +{ + int rc = 0; + + if (!rpmd->master_chg_dev) + rpmd->master_chg_dev = get_charger_by_name("master_chg"); + + if (!rpmd->master_chg_dev) + return; + + if (value) { + rc = charger_dev_set_dp_dm(rpmd->master_chg_dev, + MMI_POWER_SUPPLY_IGNORE_REQUEST_DPDM); + dev_info(rpmd->dev, "%s ignore dp dm request rc=%d\n", rc? "Couldn't" : " ", rc); + } else { + rc = charger_dev_set_dp_dm(rpmd->master_chg_dev, + MMI_POWER_SUPPLY_DONOT_IGNORE_REQUEST_DPDM); + dev_info(rpmd->dev, "%s enable dp dm request rc=%d\n", rc? "Couldn't" : " ", rc); + } +} + static inline void stop_usb_host(struct rt_pd_manager_data *rpmd) { extcon_set_state_sync(rpmd->extcon, EXTCON_USB_HOST, false); + mmi_ignore_require_dpdm(rpmd, false); } static inline void start_usb_host(struct rt_pd_manager_data *rpmd) @@ -181,6 +206,7 @@ static inline void start_usb_host(struct rt_pd_manager_data *rpmd) EXTCON_PROP_USB_SS, val); extcon_set_state_sync(rpmd->extcon, EXTCON_USB_HOST, true); + mmi_ignore_require_dpdm(rpmd, true); } static inline void stop_usb_peripheral(struct rt_pd_manager_data *rpmd)