staging: typec: tcpm: Report right typec_pwr_opmode
PATCH 1/2 staging: typec: tcpm: Report right typec_pwr_opmode
At present, TCPM does not take into account the actual resistor value presented in the CC line and therefore reports TYPEC_PWR_MODE_USB irrespective of the power_op_mode it is in.
This patch makes TCPM consider the actual value of Rp.
Signed-off-by Badhri Jagan Sridharan <[email protected]>
--- drivers/staging/typec/tcpm.c | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-)
drivers/staging/typec/tcpm.c +19 -2
@@ -2123,9 +2123,23 @@ static void tcpm_swap_complete(struct tcpm_port *port, int result) } } +enum typec_pwr_opmode tcpm_get_pwr_opmode (enum typec_cc_status cc) +{ +switch (cc) { +case TYPEC_CC_RP_1_5 : +return TYPEC_PWR_MODE_1_5A ; +case TYPEC_CC_RP_3_0 : +return TYPEC_PWR_MODE_3_0A ; +case TYPEC_CC_RP_DEF : +default : +return TYPEC_PWR_MODE_USB ; + } +} +static void run_state_machine (struct tcpm_port *port) {int ret; +enum typec_pwr_opmode opmode; port->enter_state = port->state;switch (port->state) {
@@ -2201,7 +2215,8 @@ static void run_state_machine(struct tcpm_port *port) ret < 0 ? 0 : PD_T_PS_SOURCE_ON);break ;case SRC_STARTUP : -typec_set_pwr_opmode (port->typec_port,TYPEC_PWR_MODE_USB ); + opmode =tcpm_get_pwr_opmode (tcpm_rp_cc (port)); +typec_set_pwr_opmode (port->typec_port, opmode); port->pwr_opmode =TYPEC_PWR_MODE_USB ; port->caps_count =0 ; port->message_id =0 ;
@@ -2362,7 +2377,9 @@ static void run_state_machine(struct tcpm_port *port)break ;case SNK_STARTUP :/* XXX: callback into infrastructure */ -typec_set_pwr_opmode (port->typec_port,TYPEC_PWR_MODE_USB ); + opmode =tcpm_get_pwr_opmode (port->polarity ? + port->cc2 : port->cc1); +typec_set_pwr_opmode (port->typec_port, opmode); port->pwr_opmode =TYPEC_PWR_MODE_USB ; port->message_id =0 ; port->rx_msgid =-1 ;
Signature · 1 line
2.14.1.480.gb18f417b89-goog
Quoted 6 lines · Badhri Jagan Sridharan
At present, TCPM does not take into account the actual resistor value presented in the CC line and therefore reports
TYPEC_PWR_MODE_USBirrespective of thepower_op_modeit is in.
This patch makes TCPM consider the actual value of Rp.Signed-off-by Badhri Jagan Sridharan <[email protected]>
Reviewed-by Guenter Roeck <[email protected]>
Quoted 54 lines
--- drivers/staging/typec/tcpm.c | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-)drivers/staging/typec/tcpm.c +19
-2@@ -2123,9 +2123,23 @@ static void tcpm_swap_complete(struct tcpm_port *port, int result) } } +enum typec_pwr_opmode tcpm_get_pwr_opmode (enum typec_cc_status cc) +{ +switch (cc) { +case TYPEC_CC_RP_1_5 : +return TYPEC_PWR_MODE_1_5A ; +case TYPEC_CC_RP_3_0 : +return TYPEC_PWR_MODE_3_0A ; +case TYPEC_CC_RP_DEF : +default : +return TYPEC_PWR_MODE_USB ; + } +} +static void run_state_machine (struct tcpm_port *port) {int ret; +enum typec_pwr_opmode opmode; port->enter_state = port->state;switch (port->state) {@@ -2201,7 +2215,8 @@ static void run_state_machine(struct tcpm_port *port) ret < 0 ? 0 : PD_T_PS_SOURCE_ON);break ;case SRC_STARTUP : -typec_set_pwr_opmode (port->typec_port,TYPEC_PWR_MODE_USB ); + opmode =tcpm_get_pwr_opmode (tcpm_rp_cc (port)); +typec_set_pwr_opmode (port->typec_port, opmode); port->pwr_opmode =TYPEC_PWR_MODE_USB ; port->caps_count =0 ; port->message_id =0 ;@@ -2362,7 +2377,9 @@ static void run_state_machine(struct tcpm_port *port)break ;case SNK_STARTUP :/* XXX: callback into infrastructure */ -typec_set_pwr_opmode (port->typec_port,TYPEC_PWR_MODE_USB ); + opmode =tcpm_get_pwr_opmode (port->polarity ? + port->cc2 : port->cc1); +typec_set_pwr_opmode (port->typec_port, opmode); port->pwr_opmode =TYPEC_PWR_MODE_USB ; port->message_id =0 ; port->rx_msgid =-1 ;