mirror of
https://github.com/Ralim/IronOS.git
synced 2025-07-23 20:30:38 +02:00
sink caps: Add default profiles
This commit is contained in:
@@ -337,6 +337,13 @@ bool pdbs_dpm_evaluate_capability(const pd_msg *capabilities, pd_msg *request) {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void add_v_record(pd_msg *cap, uint16_t voltage_mv, int numobj) {
|
||||||
|
|
||||||
|
uint16_t current = (voltage_mv) / getTipResistanceX10(); // In centi-amps
|
||||||
|
|
||||||
|
/* Add a PDO for the desired power. */
|
||||||
|
cap->obj[numobj] = PD_PDO_TYPE_FIXED | PD_PDO_SNK_FIXED_VOLTAGE_SET(PD_MV2PDV(voltage_mv)) | PD_PDO_SNK_FIXED_CURRENT_SET(current);
|
||||||
|
}
|
||||||
void pdbs_dpm_get_sink_capability(pd_msg *cap, const bool isPD3) {
|
void pdbs_dpm_get_sink_capability(pd_msg *cap, const bool isPD3) {
|
||||||
/* Keep track of how many PDOs we've added */
|
/* Keep track of how many PDOs we've added */
|
||||||
int numobj = 0;
|
int numobj = 0;
|
||||||
@@ -345,16 +352,30 @@ void pdbs_dpm_get_sink_capability(pd_msg *cap, const bool isPD3) {
|
|||||||
* for vSafe5V */
|
* for vSafe5V */
|
||||||
/* Minimum current, 5 V, and higher capability. */
|
/* Minimum current, 5 V, and higher capability. */
|
||||||
cap->obj[numobj++] = PD_PDO_TYPE_FIXED | PD_PDO_SNK_FIXED_VOLTAGE_SET(PD_MV2PDV(5000)) | PD_PDO_SNK_FIXED_CURRENT_SET(DPM_MIN_CURRENT);
|
cap->obj[numobj++] = PD_PDO_TYPE_FIXED | PD_PDO_SNK_FIXED_VOLTAGE_SET(PD_MV2PDV(5000)) | PD_PDO_SNK_FIXED_CURRENT_SET(DPM_MIN_CURRENT);
|
||||||
|
// Voltages must be in order of lowest -> highest
|
||||||
/* Get the current we want */
|
#if USB_PD_VMAX >= 20
|
||||||
uint16_t voltage = USB_PD_VMAX * 1000; // in mv
|
add_v_record(cap, 9000, numobj);
|
||||||
if (requested_voltage_mv != 5000) {
|
numobj++;
|
||||||
voltage = requested_voltage_mv;
|
add_v_record(cap, 15000, numobj);
|
||||||
}
|
numobj++;
|
||||||
uint16_t current = (voltage) / getTipResistanceX10(); // In centi-amps
|
add_v_record(cap, 20000, numobj);
|
||||||
|
numobj++;
|
||||||
/* Add a PDO for the desired power. */
|
#elif USB_PD_VMAX >= 15
|
||||||
cap->obj[numobj++] = PD_PDO_TYPE_FIXED | PD_PDO_SNK_FIXED_VOLTAGE_SET(PD_MV2PDV(voltage)) | PD_PDO_SNK_FIXED_CURRENT_SET(current);
|
add_v_record(cap, 9000, numobj);
|
||||||
|
numobj++;
|
||||||
|
add_v_record(cap, 12000, numobj);
|
||||||
|
numobj++;
|
||||||
|
add_v_record(cap, 15000, numobj);
|
||||||
|
numobj++;
|
||||||
|
#elif USB_PD_VMAX >= 12
|
||||||
|
add_v_record(cap, 9000, numobj);
|
||||||
|
numobj++;
|
||||||
|
add_v_record(cap, 12000, numobj);
|
||||||
|
numobj++;
|
||||||
|
#elif USB_PD_VMAX >= 9
|
||||||
|
add_v_record(cap, 9000, numobj);
|
||||||
|
numobj++;
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Set the USB communications capable flag. */
|
/* Set the USB communications capable flag. */
|
||||||
cap->obj[0] |= PD_PDO_SNK_FIXED_USB_COMMS;
|
cap->obj[0] |= PD_PDO_SNK_FIXED_USB_COMMS;
|
||||||
|
Reference in New Issue
Block a user