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 } }
void usb_charger_vbus_change(int port, int vbus_level) { /* Update VBUS supplier and signal VBUS change to USB_CHG task */ update_vbus_supplier(port, vbus_level); #if CONFIG_USB_PD_PORT_COUNT == 2 task_set_event(port ? TASK_ID_USB_CHG_P1 : TASK_ID_USB_CHG_P0, USB_CHG_EVENT_VBUS, 0); #else task_set_event(TASK_ID_USB_CHG_P0, USB_CHG_EVENT_VBUS, 0); #endif }
/* Initialize board. */ static void board_init(void) { int i; /* Initialize all BC1.2 charge suppliers to 0 */ for (i = 0; i < CONFIG_USB_PD_PORT_COUNT; i++) reset_charge(i); /* Enable charge status interrupt */ gpio_enable_interrupt(GPIO_CHARGE_STATUS); /* Initialize VBUS supplier based on whether or not VBUS is present */ update_vbus_supplier(gpio_get_level(GPIO_AC_PRESENT)); }
void vbus_evt(enum gpio_signal signal) { /* * We are using AC_PRESENT signal to detect VBUS presence since * lucid only has one port and charging is always enabled. */ hook_call_deferred(&usb_charger_bc12_detect_data, USB_CHG_DETECT_DELAY_US); update_vbus_supplier(gpio_get_level(signal)); task_wake(TASK_ID_PD_C0); /* trigger AC present interrupt */ extpower_interrupt(signal); }
void usb_charger_vbus_change(int port, int vbus_level) { /* If VBUS has transitioned low, notify PD module directly */ if (!vbus_level) pd_vbus_low(port); /* Update VBUS supplier and signal VBUS change to USB_CHG task */ update_vbus_supplier(port, vbus_level); #ifdef HAS_TASK_USB_CHG_P0 /* USB Charger task(s) */ task_set_event(USB_CHG_PORT_TO_TASK_ID(port), USB_CHG_EVENT_VBUS, 0); #endif #ifdef CONFIG_USB_PD_VBUS_DETECT_CHARGER /* USB PD task */ task_wake(PD_PORT_TO_TASK_ID(port)); #endif }