1 // SPDX-License-Identifier: GPL-2.0-or-later 2 /* 3 * This file configures the internal USB PHY in OMAP4430. Used 4 * with TWL6030 transceiver and MUSB on OMAP4430. 5 * 6 * Copyright (C) 2010 Texas Instruments Incorporated - https://www.ti.com 7 * Author: Hema HK <hemahk@ti.com> 8 */ 9 10 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 11 12 #include <linux/types.h> 13 #include <linux/delay.h> 14 #include <linux/clk.h> 15 #include <linux/io.h> 16 #include <linux/err.h> 17 #include <linux/usb.h> 18 #include <linux/usb/musb.h> 19 20 #include "soc.h" 21 #include "control.h" 22 23 #define CONTROL_DEV_CONF 0x300 24 #define PHY_PD 0x1 25 26 /** 27 * omap4430_phy_power_down: disable MUSB PHY during early init 28 * 29 * OMAP4 MUSB PHY module is enabled by default on reset, but this will 30 * prevent core retention if not disabled by SW. USB driver will 31 * later on enable this, once and if the driver needs it. 32 */ omap4430_phy_power_down(void)33static int __init omap4430_phy_power_down(void) 34 { 35 void __iomem *ctrl_base; 36 37 if (!cpu_is_omap44xx()) 38 return 0; 39 40 ctrl_base = ioremap(OMAP443X_SCM_BASE, SZ_1K); 41 if (!ctrl_base) { 42 pr_err("control module ioremap failed\n"); 43 return -ENOMEM; 44 } 45 46 /* Power down the phy */ 47 writel_relaxed(PHY_PD, ctrl_base + CONTROL_DEV_CONF); 48 49 iounmap(ctrl_base); 50 51 return 0; 52 } 53 omap_early_initcall(omap4430_phy_power_down); 54