1 /* 2 * arch/arm/mach-tegra/include/mach/usb_phy.h 3 * 4 * Copyright (C) 2010 Google, Inc. 5 * 6 * This software is licensed under the terms of the GNU General Public 7 * License version 2, as published by the Free Software Foundation, and 8 * may be copied, distributed, and modified under those terms. 9 * 10 * This program is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 * GNU General Public License for more details. 14 * 15 */ 16 17 #ifndef __MACH_USB_PHY_H 18 #define __MACH_USB_PHY_H 19 20 #include <linux/clk.h> 21 #include <linux/usb/otg.h> 22 23 struct tegra_utmip_config { 24 u8 hssync_start_delay; 25 u8 elastic_limit; 26 u8 idle_wait_delay; 27 u8 term_range_adj; 28 u8 xcvr_setup; 29 u8 xcvr_lsfslew; 30 u8 xcvr_lsrslew; 31 }; 32 33 struct tegra_ulpi_config { 34 int reset_gpio; 35 const char *clk; 36 }; 37 38 enum tegra_usb_phy_port_speed { 39 TEGRA_USB_PHY_PORT_SPEED_FULL = 0, 40 TEGRA_USB_PHY_PORT_SPEED_LOW, 41 TEGRA_USB_PHY_PORT_SPEED_HIGH, 42 }; 43 44 enum tegra_usb_phy_mode { 45 TEGRA_USB_PHY_MODE_DEVICE, 46 TEGRA_USB_PHY_MODE_HOST, 47 }; 48 49 struct tegra_xtal_freq; 50 51 struct tegra_usb_phy { 52 int instance; 53 const struct tegra_xtal_freq *freq; 54 void __iomem *regs; 55 void __iomem *pad_regs; 56 struct clk *clk; 57 struct clk *pll_u; 58 struct clk *pad_clk; 59 enum tegra_usb_phy_mode mode; 60 void *config; 61 struct usb_phy *ulpi; 62 }; 63 64 struct tegra_usb_phy *tegra_usb_phy_open(int instance, void __iomem *regs, 65 void *config, enum tegra_usb_phy_mode phy_mode); 66 67 int tegra_usb_phy_power_on(struct tegra_usb_phy *phy); 68 69 void tegra_usb_phy_clk_disable(struct tegra_usb_phy *phy); 70 71 void tegra_usb_phy_clk_enable(struct tegra_usb_phy *phy); 72 73 void tegra_usb_phy_power_off(struct tegra_usb_phy *phy); 74 75 void tegra_usb_phy_preresume(struct tegra_usb_phy *phy); 76 77 void tegra_usb_phy_postresume(struct tegra_usb_phy *phy); 78 79 void tegra_ehci_phy_restore_start(struct tegra_usb_phy *phy, 80 enum tegra_usb_phy_port_speed port_speed); 81 82 void tegra_ehci_phy_restore_end(struct tegra_usb_phy *phy); 83 84 void tegra_usb_phy_close(struct tegra_usb_phy *phy); 85 86 #endif /* __MACH_USB_PHY_H */ 87