Skip to content

Commit

Permalink
always use vSafe5V PDO
Browse files Browse the repository at this point in the history
  • Loading branch information
ChrisDick committed Aug 15, 2024
1 parent d93894b commit 8d9b636
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 34 deletions.
22 changes: 0 additions & 22 deletions drivers/tildagon_power/fusb302b/fusb302b_pd.c
Original file line number Diff line number Diff line change
Expand Up @@ -84,28 +84,6 @@ void fusbpd_decode( pd_state_t* state, fusb_state_t* fusb )
}
}

/**
* @brief select the highest voltage pdo up to 14V
* @param state the comms state onject
* @return the index of the pdo object
*/
uint8_t fusbpd_select_pdo( pd_state_t* state )
{
uint8_t i = 0U;
for ( i = 0U ; i < state->last_rx_header.sop.number_objects; i++ )
{
const uint16_t voltage = state->pdos[i].fixed.voltage * 50;
if (
( state->pdos[i].fixed.pdo_type == PD_FIXED_SUPPLY )
&& ( voltage == 5000U )
)
{
break;
}
}
return i;
}

/**
* @brief creat a request power message
* @param state the comms state onject
Expand Down
6 changes: 0 additions & 6 deletions drivers/tildagon_power/fusb302b/fusb302b_pd.h
Original file line number Diff line number Diff line change
Expand Up @@ -164,12 +164,6 @@ typedef struct
* @param fusb the object for the fusb to use
*/
extern void fusbpd_decode( pd_state_t* state, fusb_state_t* fusb );
/**
* @brief select the highest voltage pdo up to 14V
* @param state the comms state onject
* @return the index of the pdo object
*/
extern uint8_t fusbpd_select_pdo( pd_state_t* state );
/**
* @brief creat a request power message
* @param state the comms state onject
Expand Down
21 changes: 15 additions & 6 deletions drivers/tildagon_power/tildagon_power.c
Original file line number Diff line number Diff line change
Expand Up @@ -362,20 +362,29 @@ void device_pd_machine ( event_t event )
fusbpd_decode( &usb_in.pd, &usb_in.fusb );
if ( usb_in.pd.last_rx_data_msg_type == PD_DATA_SOURCE_CAPABILITIES )
{
uint8_t index = fusbpd_select_pdo( &usb_in.pd );
uint32_t current = usb_in.pd.pdos[index].fixed.max_current * 10;
if ( current > 3250 )
/*
We only need 5V so can use the first object, from the usb 3 standard:
The vSafe5V Fixed Supply Object Shall always be the first object.
A Source Shall Not offer multiple Power Data Objects of the same
type (fixed, variable, Battery) and the same Voltage but Shall
instead offer one Power Data Object with the highest available
current for that Source capability and Voltage.
*/
uint32_t current = usb_in.pd.pdos[0].fixed.max_current * 10;
/* limit current to the maximum current of a non active cable */
if ( current > 3000 )
{
current = 3250;
current = 3000;
}
fusbpd_request_power( &usb_in.pd, index, current, current );
fusbpd_request_power( &usb_in.pd, 0, current, current );
fusb_send( &usb_in.fusb, usb_in.pd.tx_buffer, usb_in.pd.message_length );
usb_in.pd.last_rx_data_msg_type = PD_DATA_DO_NOT_USE;
device_pd_state = POWER_REQUESTED;
}
else if( usb_in.pd.last_rx_data_msg_type == PD_DATA_VENDOR_DEFINED )
{
/* if vendor pdo received decide on badge to badge and callback? */
/* ToDo: if vendor pdo received decide on badge to badge and callback? */
}
}
break;
Expand Down

0 comments on commit 8d9b636

Please sign in to comment.