static void usb_charger_init(void) { int i; struct charge_port_info charge_none; /* Initialize all charge suppliers to 0 */ charge_none.voltage = USB_CHARGER_VOLTAGE_MV; charge_none.current = 0; for (i = 0; i < CONFIG_USB_PD_PORT_COUNT; i++) { charge_manager_update_charge(CHARGE_SUPPLIER_PROPRIETARY, i, &charge_none); charge_manager_update_charge(CHARGE_SUPPLIER_BC12_CDP, i, &charge_none); charge_manager_update_charge(CHARGE_SUPPLIER_BC12_DCP, i, &charge_none); charge_manager_update_charge(CHARGE_SUPPLIER_BC12_SDP, i, &charge_none); charge_manager_update_charge(CHARGE_SUPPLIER_OTHER, i, &charge_none); #ifndef CONFIG_USB_PD_VBUS_DETECT_TCPC /* * Initialize VBUS supplier based on whether VBUS is present. * For CONFIG_USB_PD_VBUS_DETECT_TCPC, usb_charger_vbus_change() * will be called directly from TCPC alert. */ update_vbus_supplier(i, pd_snk_is_vbus_provided(i)); #endif } }
static void usb_charger_init(void) { int i; struct charge_port_info charge_none; /* Initialize all pericom charge suppliers to 0 */ charge_none.voltage = USB_CHARGER_VOLTAGE_MV; charge_none.current = 0; for (i = 0; i < CONFIG_USB_PD_PORT_COUNT; i++) { charge_manager_update_charge(CHARGE_SUPPLIER_PROPRIETARY, i, &charge_none); charge_manager_update_charge(CHARGE_SUPPLIER_BC12_CDP, i, &charge_none); charge_manager_update_charge(CHARGE_SUPPLIER_BC12_DCP, i, &charge_none); charge_manager_update_charge(CHARGE_SUPPLIER_BC12_SDP, i, &charge_none); charge_manager_update_charge(CHARGE_SUPPLIER_OTHER, i, &charge_none); #ifndef CONFIG_USB_PD_TCPM_VBUS /* Initialize VBUS supplier based on whether VBUS is present */ update_vbus_supplier(i, pd_snk_is_vbus_provided(i)); #endif } }
int pd_set_power_supply_ready(int port) { /* provide VBUS */ board_pd_vbus_ctrl(port, 1); /* vbus provided or not */ return !pd_snk_is_vbus_provided(port); }
void usb_charger_task(void) { int port = (task_get_current() == TASK_ID_USB_CHG_P0 ? 0 : 1); uint32_t evt; /* Initialize chip and enable interrupts */ pi3usb9281_init(port); usb_charger_bc12_detect(port); while (1) { /* Wait for interrupt */ evt = task_wait_event(-1); /* Interrupt from the Pericom chip, determine charger type */ if (evt & USB_CHG_EVENT_BC12) usb_charger_bc12_detect(port); /* * Re-enable interrupts on pericom charger detector since the * chip may periodically reset itself, and come back up with * registers in default state. TODO(crosbug.com/p/33823): Fix * these unwanted resets. */ if (evt & USB_CHG_EVENT_VBUS) { pi3usb9281_enable_interrupts(port); #ifndef CONFIG_USB_PD_TCPM_VBUS CPRINTS("VBUS p%d %d", port, pd_snk_is_vbus_provided(port)); #endif } } }