@@ -259,6 +259,24 @@ int cypd_write_reg8_wait_ack(int controller, int reg, int data, int delay_ms)
259
259
default :
260
260
CPRINTS ("Check AC get unknown event 0x%04x" , event );
261
261
}
262
+ } else if (data == CYP5525_ICL_CTRL_REG ||
263
+ data == CYP5525_ICL_BB_RETIMER_CMD_REG ||
264
+ data == CYP5525_ICL_BB_RETIMER_DAT_REG ) {
265
+ rv = cypd_read_reg8 (controller , CYP5525_RESPONSE_REG , & event );
266
+ if (rv != EC_SUCCESS )
267
+ CPRINTS ("fail to read response" );
268
+ switch (event ) {
269
+ case CYPD_RESPONSE_SUCCESS :
270
+ rv = EC_SUCCESS ;
271
+ break ;
272
+ case CYPD_RESPONSE_INVALID_ARGUMENTS :
273
+ CPRINTS ("CYPD_RESPONSE_INVALID_ARGUMENTS cmd:%x" , data );
274
+ rv = EC_ERROR_INVAL ;
275
+ break ;
276
+ default :
277
+ rv = EC_ERROR_INVAL ;
278
+ CPRINTS ("Check AC get unknown event 0x%04x" , event );
279
+ }
262
280
}
263
281
cypd_clear_int (controller , CYP5525_DEV_INTR );
264
282
}
@@ -390,24 +408,46 @@ void disable_compliance_mode(int controller)
390
408
CPRINTS ("Write CYP5525_ICL_BB_RETIMER_CMD_REG fail" );
391
409
}
392
410
393
- void entry_tbt_mode (int controller )
411
+ int entry_tbt_mode (int controller )
394
412
{
395
413
int rv ;
396
414
uint8_t force_tbt_mode = 0x01 ;
415
+ int force_retimer_power = 0x0100 ;
397
416
398
- rv = cypd_write_reg8 (controller , CYP5525_ICL_CTRL_REG , force_tbt_mode );
417
+ /* Write 0x0100 to address 0x0046 */
418
+ rv = cypd_write_reg16 (controller , CYP5525_ICL_BB_RETIMER_CMD_REG , force_retimer_power );
419
+ if (rv != EC_SUCCESS ) {
420
+ CPRINTS ("Write CYP5525_ICL_BB_RETIMER_CMD_REG fail" );
421
+ return rv ;
422
+ }
423
+
424
+ /* according to HPI spec after write 0x40 need wait 100~125ms */
425
+ rv = cypd_write_reg8_wait_ack (controller , CYP5525_ICL_CTRL_REG , force_tbt_mode , 110 );
399
426
if (rv != EC_SUCCESS )
400
427
CPRINTS ("Write CYP5525_ICL_CTRL_REG fail" );
428
+
429
+ return rv ;
401
430
}
402
431
403
- void exit_tbt_mode (int controller )
432
+ int exit_tbt_mode (int controller )
404
433
{
405
434
int rv ;
406
435
uint8_t force_tbt_mode = 0x00 ;
436
+ int force_retimer_power = 0x0000 ;
407
437
408
- rv = cypd_write_reg8 (controller , CYP5525_ICL_CTRL_REG , force_tbt_mode );
409
- if (rv != EC_SUCCESS )
438
+ /* according to HPI spec after write 0x40 need wait 100~125ms */
439
+ rv = cypd_write_reg8_wait_ack (controller , CYP5525_ICL_CTRL_REG , force_tbt_mode , 110 );
440
+ if (rv != EC_SUCCESS ) {
410
441
CPRINTS ("Write CYP5525_ICL_CTRL_REG fail" );
442
+ return rv ;
443
+ }
444
+
445
+ /* Write 0x0000 to address 0x0046 */
446
+ rv = cypd_write_reg16 (controller , CYP5525_ICL_BB_RETIMER_CMD_REG , force_retimer_power );
447
+ if (rv != EC_SUCCESS )
448
+ CPRINTS ("Write CYP5525_ICL_BB_RETIMER_CMD_REG fail" );
449
+
450
+ return rv ;
411
451
}
412
452
413
453
int check_tbt_mode (int controller )
0 commit comments