static void utmip_phy_disable_pmc_bus_ctrl(struct tegra_usb_pmc_data *pmc_data, int enable_sof) { unsigned long val; void __iomem *usb_base; unsigned int inst = pmc_data->instance; usb_base = pmc_data->usb_base; DBG("%s(%d) inst:[%d]\n", __func__, __LINE__, pmc_data->instance); spin_lock_irqsave(&pmc_lock, flags); if (pmc_data->controller_type == TEGRA_USB_2_0 && usb_base) { /* disable PMC master control */ val = readl(usb_base + UTMIP_PMC_WAKEUP0); val &= ~EVENT_INT_ENB; writel(val, usb_base + UTMIP_PMC_WAKEUP0); } val = readl(pmc_base + PMC_SLEEP_CFG); val &= ~UTMIP_WAKE_VAL(inst, 0xF); val |= UTMIP_WAKE_VAL(inst, WAKE_VAL_NONE); writel(val, pmc_base + PMC_SLEEP_CFG); /* Disable PMC master mode by clearing MASTER_EN */ val = readl(pmc_base + PMC_SLEEP_CFG); /* WAR for xusb */ if (pmc_data->controller_type == TEGRA_USB_3_0) val |= UTMIP_RCTRL_USE_PMC(inst) | UTMIP_TCTRL_USE_PMC(inst); else val &= ~(UTMIP_RCTRL_USE_PMC(inst) | UTMIP_TCTRL_USE_PMC(inst)); val &= ~(UTMIP_FSLS_USE_PMC(inst) | UTMIP_MASTER_ENABLE(inst)); writel(val, pmc_base + PMC_SLEEP_CFG); val = readl(pmc_base + PMC_TRIGGERS); val &= ~UTMIP_CAP_CFG(inst); writel(val, pmc_base + PMC_TRIGGERS); /* turn off pad detectors */ val = readl(pmc_base + PMC_USB_AO); val |= (USBOP_VAL_PD(inst) | USBON_VAL_PD(inst)); writel(val, pmc_base + PMC_USB_AO); val = readl(pmc_base + PMC_TRIGGERS); val |= UTMIP_CLR_WALK_PTR(inst); val |= UTMIP_CLR_WAKE_ALARM(inst); writel(val, pmc_base + PMC_TRIGGERS); if (pmc_data->controller_type == TEGRA_USB_2_0 && enable_sof == 1 && usb_base) { val = readl(usb_base + USB_USBCMD); val |= USB_USBCMD_RS; writel(val, usb_base + USB_USBCMD); } spin_unlock_irqrestore(&pmc_lock, flags); }
static void utmip_phy_disable_pmc_bus_ctrl(struct tegra_usb_pmc_data *pmc_data) { unsigned long val; unsigned int inst = pmc_data->instance; DBG("%s(%d) inst:[%d]\n", __func__, __LINE__, pmc_data->instance); spin_lock_irqsave(&pmc_lock, flags); val = readl(pmc_base + PMC_SLEEP_CFG); val &= ~UTMIP_WAKE_VAL(inst, 0xF); val |= UTMIP_WAKE_VAL(inst, WAKE_VAL_NONE); writel(val, pmc_base + PMC_SLEEP_CFG); /* Disable PMC master mode by clearing MASTER_EN */ val = readl(pmc_base + PMC_SLEEP_CFG); val &= ~(UTMIP_RCTRL_USE_PMC(inst) | UTMIP_TCTRL_USE_PMC(inst) | UTMIP_FSLS_USE_PMC(inst) | UTMIP_MASTER_ENABLE(inst)); writel(val, pmc_base + PMC_SLEEP_CFG); val = readl(pmc_base + PMC_TRIGGERS); val &= ~UTMIP_CAP_CFG(inst); writel(val, pmc_base + PMC_TRIGGERS); /* turn off pad detectors */ val = readl(pmc_base + PMC_USB_AO); val |= (USBOP_VAL_PD(inst) | USBON_VAL_PD(inst)); writel(val, pmc_base + PMC_USB_AO); val = readl(pmc_base + PMC_TRIGGERS); val |= UTMIP_CLR_WALK_PTR(inst); val |= UTMIP_CLR_WAKE_ALARM(inst); writel(val, pmc_base + PMC_TRIGGERS); spin_unlock_irqrestore(&pmc_lock, flags); }