Skip to content

Commit 3ea977a

Browse files
author
Josh Tsai
committed
Modified the update power status and system power state funvtion
When PD chips initialize, it should update the power status and system power state itself. Signed-off-by: Josh Tsai <josh_tsai@compal.corp-partner.google.com>
1 parent 4479103 commit 3ea977a

1 file changed

Lines changed: 32 additions & 25 deletions

File tree

board/hx30/cypress5525.c

Lines changed: 32 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -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
}
433441
DECLARE_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

11591166
void 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

Comments
 (0)