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 */ 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} 53omap_early_initcall(omap4430_phy_power_down); 54