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