@@ -893,17 +893,20 @@ static int cypd_update_power_status(int controller)
893893 int i ;
894894 int rv = EC_SUCCESS ;
895895 int power_stat = 0 ;
896-
897- if (battery_is_present () == BP_YES )
898- power_stat |= BIT (3 );
899- if (extpower_is_present ())
900- power_stat |= BIT (1 ) + BIT (2 );
896+ int pd_controller_is_sink = (prev_charge_port & 0x02 ) >> 1 ;
901897
902898 CPRINTS ("C%d, %s power_stat 0x%x" , controller , __func__ , power_stat );
903899 if (controller < PD_CHIP_COUNT )
904900 rv = cypd_write_reg8_wait_ack (controller , CCG_POWER_STAT , power_stat );
905901 else {
906902 for (i = 0 ; i < PD_CHIP_COUNT ; i ++ ) {
903+ power_stat = 0 ;
904+ if (battery_is_present () == BP_YES )
905+ power_stat |= BIT (3 );
906+ if ((extpower_is_present () && battery_is_present () == BP_YES ) ||
907+ (extpower_is_present () && i != pd_controller_is_sink && prev_charge_port >=0 ))
908+ power_stat |= BIT (1 ) + BIT (2 );
909+
907910 rv = cypd_write_reg8_wait_ack (i , CCG_POWER_STAT , power_stat );
908911 if (rv != EC_SUCCESS )
909912 break ;
@@ -1080,7 +1083,7 @@ static void cypd_handle_state(int controller)
10801083 cypd_get_version (controller );
10811084 cypd_update_power_status (controller );
10821085
1083- // update_system_power_state(controller);
1086+ update_system_power_state (controller );
10841087 cypd_setup (controller );
10851088
10861089 /* After initial complete, update the type-c port state */
@@ -1089,7 +1092,6 @@ static void cypd_handle_state(int controller)
10891092
10901093 ucsi_startup (controller );
10911094
1092- update_system_power_state (controller );
10931095 gpio_enable_interrupt (pd_chip_config [controller ].gpio );
10941096
10951097 /* Update PDO format after init complete */
0 commit comments