#include "xhci-mtk.h" #include "xhci-mtk-power.h" #include "xhci.h" #include /* printk() */ #include #include static int g_num_u3_port; static int g_num_u2_port; void enableXhciAllPortPower(struct xhci_hcd *xhci){ int i; u32 port_id, temp; u32 __iomem *addr; g_num_u3_port = SSUSB_U3_PORT_NUM(readl(SSUSB_IP_CAP)); g_num_u2_port = SSUSB_U2_PORT_NUM(readl(SSUSB_IP_CAP)); for(i=1; i<=g_num_u3_port; i++){ port_id=i; addr = &xhci->op_regs->port_status_base + NUM_PORT_REGS*(port_id-1 & 0xff); temp = xhci_readl(xhci, addr); temp = xhci_port_state_to_neutral(temp); temp |= PORT_POWER; xhci_writel(xhci, temp, addr); } for(i=1; i<=g_num_u2_port; i++){ port_id=i+g_num_u3_port; addr = &xhci->op_regs->port_status_base + NUM_PORT_REGS*(port_id-1 & 0xff); temp = xhci_readl(xhci, addr); temp = xhci_port_state_to_neutral(temp); temp |= PORT_POWER; xhci_writel(xhci, temp, addr); } } void enableAllClockPower(){ int i; u32 temp; g_num_u3_port = SSUSB_U3_PORT_NUM(readl(SSUSB_IP_CAP)); g_num_u2_port = SSUSB_U2_PORT_NUM(readl(SSUSB_IP_CAP)); //2. Enable xHC writel(readl(SSUSB_IP_PW_CTRL) | (SSUSB_IP_SW_RST), SSUSB_IP_PW_CTRL); writel(readl(SSUSB_IP_PW_CTRL) & (~SSUSB_IP_SW_RST), SSUSB_IP_PW_CTRL); writel(readl(SSUSB_IP_PW_CTRL_1) & (~SSUSB_IP_PDN), SSUSB_IP_PW_CTRL_1); //1. Enable target ports for(i=0; i