void ambarella_disable_usb_port(int owner) { #if defined(CONFIG_PLAT_AMBARELLA_SUPPORT_HAL) #if (CHIP_REV == A5S) || (CHIP_REV == A7) if (amb_set_usb_interface_state(HAL_BASE_VP, AMB_USB_OFF) != AMB_HAL_SUCCESS) { pr_info("%s: amb_set_usb_interface_state fail!\n", __func__); } #elif (CHIP_REV == I1) if (amb_set_usb_port0_state(HAL_BASE_VP, AMB_USB_OFF) != AMB_HAL_SUCCESS) { pr_info("%s: amb_set_usb_port0_state fail!\n", __func__); } /* We disable usb port1 when neither UHC nor UDC use it */ ambarella_usb_port_owner &= (~owner); if (ambarella_usb_port_owner == 0) { if (amb_set_usb_port1_state(HAL_BASE_VP, AMB_USB_OFF) != AMB_HAL_SUCCESS) { pr_info("%s: amb_set_usb_port1_state fail!\n", __func__); } } #elif (CHIP_REV == S2) /* We disable usb port when neither UHC nor UDC use it */ ambarella_usb_port_owner &= (~owner); if (ambarella_usb_port_owner == 0) amb_set_usb_port_state(HAL_BASE_VP, AMB_USB_OFF); #elif (CHIP_REV == A7L) if (amb_set_usb_port1_state(HAL_BASE_VP, AMB_USB_OFF) != AMB_HAL_SUCCESS) { pr_info("%s: amb_set_usb_port1_state fail!\n", __func__); } #endif #else #if (CHIP_REV == A5S) || (CHIP_REV == A7) || (CHIP_REV == A7L) amba_clrbitsl(ANA_PWR_REG, 0x6); #elif (CHIP_REV == I1) amba_clrbitsl(ANA_PWR_REG, 0x3000); /* We disable usb port when neither UHC nor UDC use it */ ambarella_usb_port_owner &= (~owner); if (ambarella_usb_port_owner == 0) amba_clrbitsl(ANA_PWR_REG, 0x6); #elif (CHIP_REV == S2) /* We disable usb port when neither UHC nor UDC use it */ ambarella_usb_port_owner &= (~owner); if (ambarella_usb_port_owner == 0) amba_clrbitsl(ANA_PWR_REG, 0x6); #endif #endif }
static void ambarella_enable_usb_host(struct ambarella_uhc_controller *pdata) { u32 sys_config; amb_usb_port_state_t state; sys_config = amba_readl(SYS_CONFIG_REG); if (sys_config & USB1_IS_HOST) pdata->usb1_is_host = 1; if (usb_host_initialized == 1) return; usb_host_initialized = 1; /* GPIO8 and GPIO10 are programmed as hardware mode */ if (sys_config & USB1_IS_HOST) amba_setbitsl(GPIO0_AFSEL_REG, 0x00000500); /* GPIO7 and GPIO9 are programmed as hardware mode */ amba_setbitsl(GPIO0_AFSEL_REG, 0x00000280); /* Reset usb host controller */ if (amb_usb_host_soft_reset(HAL_BASE_VP) != AMB_HAL_SUCCESS) pr_info("%s: amb_set_usb_port0_state fail!\n", __func__); /* * We must enable both of the usb ports first, then we can disable * usb port1 if it is configured as device port. */ state = amb_get_usb_port1_state(HAL_BASE_VP); if (state != AMB_USB_ON && amb_set_usb_port1_state(HAL_BASE_VP, AMB_USB_ON) != AMB_HAL_SUCCESS) { pr_info("%s: amb_set_usb_port1_state fail!\n", __func__); } if (amb_set_usb_port0_state(HAL_BASE_VP, AMB_USB_ON) != AMB_HAL_SUCCESS) { pr_info("%s: amb_set_usb_port0_state fail!\n", __func__); } if (!(sys_config & USB1_IS_HOST) && state != AMB_USB_ON) { if (amb_set_usb_port1_state(HAL_BASE_VP, state) != AMB_HAL_SUCCESS) { pr_info("%s: amb_set_usb_port1_state fail!\n", __func__); } } }
static void ambarella_disable_usb_host(void) { u32 sys_config; if (usb_host_initialized == 0) return; usb_host_initialized = 0; sys_config = amba_readl(SYS_CONFIG_REG); if (amb_set_usb_port0_state(HAL_BASE_VP, AMB_USB_OFF) != AMB_HAL_SUCCESS) { pr_info("%s: amb_set_usb_port0_state fail!\n", __func__); } if (sys_config & USB1_IS_HOST) { if (amb_set_usb_port1_state(HAL_BASE_VP, AMB_USB_OFF) != AMB_HAL_SUCCESS) { pr_info("%s: amb_set_usb_port1_state fail!\n", __func__); } } }
void ambarella_enable_usb_port(int owner) { #if defined(CONFIG_PLAT_AMBARELLA_SUPPORT_HAL) #if (CHIP_REV == A5S) amb_usb_interface_state_t state; state = amb_get_usb_interface_state(HAL_BASE_VP); if (state != AMB_USB_ALWAYS_ON && amb_set_usb_interface_state(HAL_BASE_VP, AMB_USB_ALWAYS_ON) != AMB_HAL_SUCCESS) { pr_info("amb_set_usb_interface_state() failed"); } #elif (CHIP_REV == A7) amb_usb_interface_state_t state; state = amb_get_usb_interface_state(HAL_BASE_VP); if (state != AMB_USB_ON && amb_set_usb_interface_state(HAL_BASE_VP, AMB_USB_ON) != AMB_HAL_SUCCESS) { pr_info("amb_set_usb_interface_state() failed"); } #elif (CHIP_REV == I1) amb_usb_port_state_t state; ambarella_usb_port_owner |= owner; /* We must enable usb port1 first. Note: no matter usb port1 is * configured as Host or Slave, we always enable it. */ state = amb_get_usb_port1_state(HAL_BASE_VP); if (state != AMB_USB_ON && amb_set_usb_port1_state(HAL_BASE_VP, AMB_USB_ON) != AMB_HAL_SUCCESS) { pr_info("%s: amb_set_usb_port1_state fail!\n", __func__); } /* Then we enable usb port0. */ state = amb_get_usb_port0_state(HAL_BASE_VP); if (state != AMB_USB_ON && amb_set_usb_port0_state(HAL_BASE_VP, AMB_USB_ON) != AMB_HAL_SUCCESS) { pr_info("%s: amb_set_usb_port0_state fail!\n", __func__); } #elif (CHIP_REV == S2) amb_usb_port_state_t state; ambarella_usb_port_owner |= owner; /* Enable usb port (usbphy), and it may have been enabled before. */ state = amb_get_usb_port_state(HAL_BASE_VP); if (state != AMB_USB_ALWAYS_ON && amb_set_usb_port_state(HAL_BASE_VP, AMB_USB_ALWAYS_ON) != AMB_HAL_SUCCESS) { pr_info("%s: amb_set_usb_port_state fail!\n", __func__); } #elif (CHIP_REV == A7L) amb_usb_port_state_t state; /* Enable usb port (usbphy), and it may have been enabled before. */ state = amb_get_usb_port1_state(HAL_BASE_VP); if (state != AMB_USB_ALWAYS_ON && amb_set_usb_port1_state(HAL_BASE_VP, AMB_USB_ALWAYS_ON) != AMB_HAL_SUCCESS) { pr_info("%s: amb_set_usb_port_state fail!\n", __func__); } #endif #else #if (CHIP_REV == A5S) || (CHIP_REV == A7L) amba_setbitsl(ANA_PWR_REG, 0x4); /* always on */ #elif (CHIP_REV == A7) amba_setbitsl(ANA_PWR_REG, 0x2); /* on */ #elif (CHIP_REV == I1) ambarella_usb_port_owner |= owner; /* We must enable usb port1 first. Note: no matter usb port1 is * configured as Host or Slave, we always enable it. */ amba_setbitsl(ANA_PWR_REG, 0x2); /* on */ amba_setbitsl(ANA_PWR_REG, 0x1000); /* on */ #elif (CHIP_REV == S2) ambarella_usb_port_owner |= owner; amba_setbitsl(ANA_PWR_REG, 0x4); /* always on */ #endif #endif }