Beispiel #1
0
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
}
Beispiel #2
0
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__);
		}
	}
}
Beispiel #3
0
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__);
		}
	}
}
Beispiel #4
0
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
}