From: Junhan Bae Date: Mon, 19 Nov 2018 07:40:16 +0000 (+0900) Subject: BSP : add CCIC TRY SNK FUNCTION X-Git-Url: https://git.stricted.de/?a=commitdiff_plain;h=43a281da3fec6c444a2f278ec2e75c1ed1267e3e;p=GitHub%2FLineageOS%2Fandroid_kernel_motorola_exynos9610.git BSP : add CCIC TRY SNK FUNCTION [9609][EVB] drivers: add ccic try snk function Bug:HQ00000000 Workaround:no Change-Id: I6d1165e226065505d2e4ea7b3914247a60b1f88e --- diff --git a/arch/arm64/configs/robusta2_evb_defconfig b/arch/arm64/configs/robusta2_evb_defconfig index b5ef1d708a5e..edc4cf49a473 100755 --- a/arch/arm64/configs/robusta2_evb_defconfig +++ b/arch/arm64/configs/robusta2_evb_defconfig @@ -493,6 +493,7 @@ CONFIG_USE_CCIC=y CONFIG_CCIC_S2MU106=y CONFIG_CCIC_VDM=y CONFIG_CCIC_SYSFS=y +CONFIG_CCIC_TRY_SNK=y CONFIG_EXT2_FS=y CONFIG_EXT3_FS=y CONFIG_EXT4_FS_SECURITY=y diff --git a/drivers/ccic/Kconfig b/drivers/ccic/Kconfig index d08787d1e94e..f3d3c69a3e6c 100755 --- a/drivers/ccic/Kconfig +++ b/drivers/ccic/Kconfig @@ -28,6 +28,14 @@ config CCIC_S2MU106 If you say yes here you will get support for for the S2MU106 USBPD chip. +config CCIC_TRY_SNK + bool "Using USB PD TRY SNK FUNCTION" + depends on USE_CCIC + default n + help + If you say yes here you will get support for + Try Snk Function. + config CCIC_VDM bool "Using USB PD VDM Message" depends on USE_CCIC diff --git a/drivers/ccic/s2mu106-usbpd.c b/drivers/ccic/s2mu106-usbpd.c index 3de61b921e10..edfb7f0c05c8 100644 --- a/drivers/ccic/s2mu106-usbpd.c +++ b/drivers/ccic/s2mu106-usbpd.c @@ -2185,6 +2185,7 @@ static void s2mu106_usbpd_detach_init(struct s2mu106_usbpd_data *pdic_data) struct device *dev = pdic_data->dev; struct usbpd_data *pd_data = dev_get_drvdata(dev); int ret = 0; + u8 data = 0; dev_info(dev, "%s\n", __func__); @@ -2210,6 +2211,24 @@ static void s2mu106_usbpd_detach_init(struct s2mu106_usbpd_data *pdic_data) pdic_data->status_reg = 0; usbpd_reinit(dev); +#ifdef CONFIG_CCIC_TRY_SNK + s2mu106_usbpd_read_reg(i2c, S2MU106_REG_PLUG_CTRL_PORT, &data); + data &= ~(S2MU106_REG_PLUG_CTRL_MODE_MASK | S2MU106_REG_PLUG_CTRL_RP_SEL_MASK); + data |= S2MU106_REG_PLUG_CTRL_DRP | S2MU106_REG_PLUG_CTRL_RP180; + s2mu106_usbpd_write_reg(i2c, S2MU106_REG_PLUG_CTRL_PORT, data); + + s2mu106_usbpd_read_reg(i2c, S2MU106_REG_PLUG_CTRL, &data); + data |= S2MU106_REG_PLUG_CTRL_UFP_ATTACH_OPT; + s2mu106_usbpd_write_reg(i2c, S2MU106_REG_PLUG_CTRL, data); + + s2mu106_usbpd_read_reg(i2c, S2MU106_REG_PLUG_CTRL_SET_RD, &data); + data &= ~S2MU106_REG_USB31_EN; + s2mu106_usbpd_write_reg(i2c, S2MU106_REG_PLUG_CTRL_SET_RD, data); + + s2mu106_usbpd_read_reg(i2c, S2MU106_REG_PLUG_CTRL_DET, &data); + data |= S2MU106_REG_DET_RD_OR_VBUS; + s2mu106_usbpd_write_reg(i2c, S2MU106_REG_PLUG_CTRL_DET, data); +#endif pdic_data->rid = REG_RID_MAX; pdic_data->check_rid_wa = false; pdic_data->is_factory_mode = false;