@@ -591,8 +591,9 @@ void cypd_send_msg(int controller, int port, uint32_t pd_header, uint16_t ext_hd
591591 cypd_write_reg_block (controller , CYP5525_WRITE_DATA_MEMORY_REG (port , 0 ),
592592 (void * )header , 4 );
593593
594- cypd_write_reg_block (controller , CYP5525_WRITE_DATA_MEMORY_REG (port , 4 ),
595- data , data_size );
594+ if (data_size != 0 )
595+ cypd_write_reg_block (controller , CYP5525_WRITE_DATA_MEMORY_REG (port , 4 ),
596+ data , data_size );
596597
597598 /**
598599 * The DM_CONTROL register should then be written to in the following format:
@@ -613,7 +614,8 @@ void cypd_send_msg(int controller, int port, uint32_t pd_header, uint16_t ext_hd
613614 dm_control_data |= CYP5525_DM_CTRL_PD3_DATA_REQUEST ;
614615 if (!response_timer )
615616 dm_control_data |= CYP5525_DM_CTRL_SENDER_RESPONSE_TIMER_DISABLE ;
616- dm_control_data += ((data_size + 4 ) << 8 );
617+ if (data_size != 0 )
618+ dm_control_data += ((data_size + 4 ) << 8 );
617619
618620 cypd_write_reg16 (controller , CYP5525_DM_CONTROL_REG (port ), dm_control_data );
619621}
@@ -756,6 +758,15 @@ int cypd_response_get_battery_status(int controller, int port, uint32_t pd_heade
756758 return rv ;
757759}
758760
761+ void cypd_response_no_support_msg (int controller , int port , uint32_t pd_header ,
762+ enum pd_msg_type sop_type )
763+ {
764+ uint32_t msg = 0 ;
765+ uint32_t header = PD_CTRL_NOT_SUPPORTED + PD_HEADER_SOP (sop_type );
766+
767+ cypd_send_msg (controller , port , header , 0 , false, false, & msg , 0 );
768+ }
769+
759770int cypd_handle_extend_msg (int controller , int port , int len , enum pd_msg_type sop_type )
760771{
761772 /**
@@ -804,6 +815,7 @@ int cypd_handle_extend_msg(int controller, int port, int len, enum pd_msg_type s
804815 CPRINTF ("%02x" , rx_emsg [port_idx ].buf [i ]);
805816 }
806817 CPRINTF ("\n" );
818+ cypd_response_no_support_msg (controller , port , pd_header , sop_type );
807819 rv = EC_ERROR_INVAL ;
808820 break ;
809821 }
@@ -2221,6 +2233,8 @@ static int cmd_cypd_msg(int argc, char **argv)
22212233
22222234 } else if (!strncmp (argv [2 ], "batterystatus" , 13 )) {
22232235 data [0 ] = PD_EXT_GET_BATTERY_STATUS ; /*ext msg type*/
2236+ } else if (!strncmp (argv [2 ], "test" , 4 )) {
2237+ data [0 ] = 256 ; /*test for not_support command*/
22242238 }
22252239 /* ext msg header*/
22262240 data [1 ] = 0x01 ; /*data size*/
@@ -2243,5 +2257,5 @@ static int cmd_cypd_msg(int argc, char **argv)
22432257
22442258}
22452259DECLARE_CONSOLE_COMMAND (cypdmsg , cmd_cypd_msg ,
2246- "port [batterycap|batterystatus] chunked=1,0" ,
2260+ "port [batterycap|batterystatus|test ] chunked=1,0" ,
22472261 "Trigger extended message ams" );
0 commit comments