@@ -258,18 +258,22 @@ int cypd_write_reg16_wait_ack(int controller, int reg, int data)
258258 return rv ;
259259}
260260
261- int cypd_set_power_state (int power_state )
261+ int cypd_set_power_state (int power_state , int controller )
262262{
263263 int i ;
264264 int rv = EC_SUCCESS ;
265265
266- CPRINTS ("% s pwr state %d" , __func__ , power_state );
266+ CPRINTS ("C%d, % s pwr state %d" , controller , __func__ , power_state );
267267
268- for (i = 0 ; i < PD_CHIP_COUNT ; i ++ ) {
268+ if (controller < 2 )
269+ rv = cypd_write_reg8_wait_ack (controller , CYP5525_SYS_PWR_STATE , power_state );
270+ else {
271+ for (i = 0 ; i < PD_CHIP_COUNT ; i ++ ) {
269272
270- rv = cypd_write_reg8_wait_ack (i , CYP5525_SYS_PWR_STATE , power_state );
271- if (rv != EC_SUCCESS )
272- break ;
273+ rv = cypd_write_reg8_wait_ack (i , CYP5525_SYS_PWR_STATE , power_state );
274+ if (rv != EC_SUCCESS )
275+ break ;
276+ }
273277 }
274278 return rv ;
275279}
@@ -281,7 +285,7 @@ void cypd_charger_init_complete(void)
281285}
282286
283287
284- int cypd_update_power_status (void )
288+ int cypd_update_power_status (int controller )
285289{
286290 int i ;
287291 int rv = EC_SUCCESS ;
@@ -293,12 +297,16 @@ int cypd_update_power_status(void)
293297 power_stat |= BIT (1 ) + BIT (2 );
294298 }
295299
296- CPRINTS ("%s power_stat 0x%x" , __func__ , power_stat );
297300
298- for (i = 0 ; i < PD_CHIP_COUNT ; i ++ ) {
299- rv = cypd_write_reg8_wait_ack (i , CYP5525_POWER_STAT , power_stat );
300- if (rv != EC_SUCCESS )
301- break ;
301+ CPRINTS ("C%d, %s power_stat 0x%x" , controller , __func__ , power_stat );
302+ if (controller < 2 ) {
303+ rv = cypd_write_reg8_wait_ack (controller , CYP5525_POWER_STAT , power_stat );
304+ } else {
305+ for (i = 0 ; i < PD_CHIP_COUNT ; i ++ ) {
306+ rv = cypd_write_reg8_wait_ack (i , CYP5525_POWER_STAT , power_stat );
307+ if (rv != EC_SUCCESS )
308+ break ;
309+ }
302310 }
303311 return rv ;
304312}
@@ -432,7 +440,7 @@ static void reconnect_port_deferred(void)
432440}
433441DECLARE_DEFERRED (reconnect_port_deferred );
434442
435- void update_system_power_state (void )
443+ void update_system_power_state (int controller )
436444{
437445
438446 enum power_state ps = power_get_state ();
@@ -441,15 +449,15 @@ void update_system_power_state(void)
441449 case POWER_S5 :
442450 case POWER_S5G3 :
443451 case POWER_S3S5 :
444- cypd_set_power_state (CYP5525_POWERSTATE_S5 );
452+ cypd_set_power_state (CYP5525_POWERSTATE_S5 , controller );
445453 reconnect_flag = true;
446454 break ;
447455 case POWER_S0S0ix :
448- cypd_set_power_state (CYP5525_POWERSTATE_S3 );
456+ cypd_set_power_state (CYP5525_POWERSTATE_S3 , controller );
449457 break ;
450458 default :
451459 cypd_set_error_recovery ();
452- cypd_set_power_state (CYP5525_POWERSTATE_S0 );
460+ cypd_set_power_state (CYP5525_POWERSTATE_S0 , controller );
453461 if (reconnect_flag ) {
454462 reconnect_flag = false;
455463 CPRINTS ("CYPD reconnect" );
@@ -1089,10 +1097,10 @@ void cypd_handle_state(int controller)
10891097 gpio_disable_interrupt (pd_chip_config [controller ].gpio );
10901098 cyp5525_get_version (controller );
10911099 cypd_write_reg8_wait_ack (controller , CYP5225_USER_MAINBOARD_VERSION , board_get_version ());
1100+ /* We should update the power status and system power state by pd chip at initial*/
1101+ cypd_update_power_status (controller );
10921102
1093- cypd_update_power_status ();
1094-
1095- cypd_set_power_state (CYP5525_POWERSTATE_S5 );
1103+ cypd_set_power_state (CYP5525_POWERSTATE_S5 , controller );
10961104
10971105
10981106 cyp5525_setup (controller );
@@ -1101,8 +1109,7 @@ void cypd_handle_state(int controller)
11011109
11021110 cyp5525_ucsi_startup (controller );
11031111 gpio_enable_interrupt (pd_chip_config [controller ].gpio );
1104- cypd_write_reg16_wait_ack (controller , CYP5225_USER_BB_POWER_EVT , RT_EVT_VSYS_ADDED );
1105- update_system_power_state ();
1112+ update_system_power_state (controller );
11061113
11071114 CPRINTS ("CYPD %d Ready!" , controller );
11081115 pd_chip_config [controller ].state = CYP5525_STATE_READY ;
@@ -1158,7 +1165,7 @@ static uint8_t cypd_int_task_id;
11581165
11591166void cypd_enque_evt (int evt , int delay )
11601167{
1161- task_set_event (TASK_ID_CYPD , evt , delay );
1168+ task_set_event (TASK_ID_CYPD , evt , 0 );
11621169}
11631170
11641171
@@ -1305,7 +1312,7 @@ void cypd_interrupt_handler_task(void *p)
13051312 }
13061313
13071314 if (evt & CYPD_EVT_S_CHANGE ) {
1308- update_system_power_state ();
1315+ update_system_power_state (2 );
13091316 }
13101317
13111318 if (evt & CYPD_EVT_INT_CTRL_0 ) {
@@ -1323,7 +1330,7 @@ void cypd_interrupt_handler_task(void *p)
13231330 task_wait_event_mask (TASK_EVENT_TIMER ,10 );
13241331 }
13251332 if (evt & CYPD_EVT_UPDATE_PWRSTAT ) {
1326- cypd_update_power_status ();
1333+ cypd_update_power_status (2 );
13271334 }
13281335
13291336 if (evt & (CYPD_EVT_INT_CTRL_0 | CYPD_EVT_INT_CTRL_1 |
@@ -2007,7 +2014,7 @@ static int cmd_cypd_control(int argc, char **argv)
20072014 pwrstate = strtoul (argv [3 ], & e , 0 );
20082015 if (* e )
20092016 return EC_ERROR_PARAM3 ;
2010- cypd_set_power_state (pwrstate );
2017+ cypd_set_power_state (pwrstate , 2 );
20112018 } else if (!strncmp (argv [1 ], "reg" , 3 )) {
20122019 int r ;
20132020 int regval ;
0 commit comments