return 0;
}
+static int s2mu106_cc_instead_of_vbus(void *_data, int enable)
+{
+ struct usbpd_data *data = (struct usbpd_data *)_data;
+ struct s2mu106_usbpd_data *pdic_data = data->phy_driver_data;
+ struct i2c_client *i2c = pdic_data->i2c;
+ u8 val;
+
+ //Setting for CC Detection with Vbus
+ //It is recognized that Vbus falls when CC line falls
+ s2mu106_usbpd_read_reg(i2c, S2MU106_REG_PLUG_CTRL_VBUS_MUX, &val);
+ val &= ~S2MU106_REG_RD_OR_VBUS_MUX_SEL;
+ s2mu106_usbpd_write_reg(i2c, S2MU106_REG_PLUG_CTRL_VBUS_MUX, val);
+ s2mu106_usbpd_read_reg(i2c, S2MU106_REG_PLUG_CTRL, &val);
+ if (enable)
+ val |= S2MU106_REG_PLUG_CTRL_ATTACH_OPT_EN;
+ else
+ val &= ~S2MU106_REG_PLUG_CTRL_ATTACH_OPT_EN;
+ s2mu106_usbpd_write_reg(i2c, S2MU106_REG_PLUG_CTRL, val);
+
+ return 0;
+}
+
static int s2mu106_set_cc_control(void *_data, int val)
{
struct usbpd_data *data = (struct usbpd_data *) _data;
.driver_reset = s2mu106_driver_reset,
.set_otg_control = s2mu106_set_otg_control,
.set_cc_control = s2mu106_set_cc_control,
+ .cc_instead_of_vbus = s2mu106_cc_instead_of_vbus,
.get_side_check = s2mu106_get_side_check,
- .pr_swap = s2mu106_pr_swap,
+ .pr_swap = s2mu106_pr_swap,
.vbus_on_check = s2mu106_vbus_on_check,
.set_pwr_opmode = s2mu106_set_pwr_opmode,
.set_rp_control = s2mu106_set_rp_control,
pd_data->phy_ops.poll_status = ops->poll_status;
pd_data->phy_ops.driver_reset = ops->driver_reset;
pd_data->phy_ops.set_otg_control = ops->set_otg_control;
+ pd_data->phy_ops.cc_instead_of_vbus = ops->cc_instead_of_vbus;
pd_data->phy_ops.set_cc_control = ops->set_cc_control;
pd_data->phy_ops.get_side_check = ops->get_side_check;
pd_data->phy_ops.pr_swap = ops->pr_swap;
return ret;
usbpd_send_ctrl_msg(pd_data, &policy->tx_msg_header, USBPD_PS_RDY, USBPD_DFP, USBPD_SOURCE);
+
+ /* Check CC instead of Vbus */
+ pd_data->phy_ops.cc_instead_of_vbus(pd_data, 1);
+
pd_data->phy_ops.set_rp_control(pd_data, PLUG_CTRL_RP180);
ret = PE_SRC_Ready;
bool (*poll_status)(void *);
void (*driver_reset)(void *);
int (*set_otg_control)(void *, int);
+ int (*cc_instead_of_vbus)(void*, int);
int (*set_cc_control)(void *, int);
void (*pr_swap)(void *, int);
int (*vbus_on_check)(void *);