Ejemplo n.º 1
0
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
	}
}
Ejemplo n.º 2
0
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
	}
}
Ejemplo n.º 3
0
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
}
Ejemplo n.º 4
0
/* 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));
}
Ejemplo n.º 5
0
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);
}
Ejemplo n.º 6
0
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
}