162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-or-later 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * This file configures the internal USB PHY in OMAP4430. Used 462306a36Sopenharmony_ci * with TWL6030 transceiver and MUSB on OMAP4430. 562306a36Sopenharmony_ci * 662306a36Sopenharmony_ci * Copyright (C) 2010 Texas Instruments Incorporated - https://www.ti.com 762306a36Sopenharmony_ci * Author: Hema HK <hemahk@ti.com> 862306a36Sopenharmony_ci */ 962306a36Sopenharmony_ci 1062306a36Sopenharmony_ci#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_ci#include <linux/types.h> 1362306a36Sopenharmony_ci#include <linux/delay.h> 1462306a36Sopenharmony_ci#include <linux/clk.h> 1562306a36Sopenharmony_ci#include <linux/io.h> 1662306a36Sopenharmony_ci#include <linux/err.h> 1762306a36Sopenharmony_ci#include <linux/usb.h> 1862306a36Sopenharmony_ci#include <linux/usb/musb.h> 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_ci#include "soc.h" 2162306a36Sopenharmony_ci#include "control.h" 2262306a36Sopenharmony_ci 2362306a36Sopenharmony_ci#define CONTROL_DEV_CONF 0x300 2462306a36Sopenharmony_ci#define PHY_PD 0x1 2562306a36Sopenharmony_ci 2662306a36Sopenharmony_ci/** 2762306a36Sopenharmony_ci * omap4430_phy_power_down: disable MUSB PHY during early init 2862306a36Sopenharmony_ci * 2962306a36Sopenharmony_ci * OMAP4 MUSB PHY module is enabled by default on reset, but this will 3062306a36Sopenharmony_ci * prevent core retention if not disabled by SW. USB driver will 3162306a36Sopenharmony_ci * later on enable this, once and if the driver needs it. 3262306a36Sopenharmony_ci */ 3362306a36Sopenharmony_cistatic int __init omap4430_phy_power_down(void) 3462306a36Sopenharmony_ci{ 3562306a36Sopenharmony_ci void __iomem *ctrl_base; 3662306a36Sopenharmony_ci 3762306a36Sopenharmony_ci if (!cpu_is_omap44xx()) 3862306a36Sopenharmony_ci return 0; 3962306a36Sopenharmony_ci 4062306a36Sopenharmony_ci ctrl_base = ioremap(OMAP443X_SCM_BASE, SZ_1K); 4162306a36Sopenharmony_ci if (!ctrl_base) { 4262306a36Sopenharmony_ci pr_err("control module ioremap failed\n"); 4362306a36Sopenharmony_ci return -ENOMEM; 4462306a36Sopenharmony_ci } 4562306a36Sopenharmony_ci 4662306a36Sopenharmony_ci /* Power down the phy */ 4762306a36Sopenharmony_ci writel_relaxed(PHY_PD, ctrl_base + CONTROL_DEV_CONF); 4862306a36Sopenharmony_ci 4962306a36Sopenharmony_ci iounmap(ctrl_base); 5062306a36Sopenharmony_ci 5162306a36Sopenharmony_ci return 0; 5262306a36Sopenharmony_ci} 5362306a36Sopenharmony_ciomap_early_initcall(omap4430_phy_power_down); 54