linux/arch/arm/mach-tegra/include/mach/usb_phy.h
<<
>>
Prefs
   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
  23struct 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
  33struct tegra_ulpi_config {
  34        int reset_gpio;
  35        const char *clk;
  36};
  37
  38enum 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
  44enum tegra_usb_phy_mode {
  45        TEGRA_USB_PHY_MODE_DEVICE,
  46        TEGRA_USB_PHY_MODE_HOST,
  47};
  48
  49struct tegra_xtal_freq;
  50
  51struct 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 otg_transceiver *ulpi;
  62};
  63
  64struct tegra_usb_phy *tegra_usb_phy_open(int instance, void __iomem *regs,
  65                        void *config, enum tegra_usb_phy_mode phy_mode);
  66
  67int tegra_usb_phy_power_on(struct tegra_usb_phy *phy);
  68
  69void tegra_usb_phy_clk_disable(struct tegra_usb_phy *phy);
  70
  71void tegra_usb_phy_clk_enable(struct tegra_usb_phy *phy);
  72
  73void tegra_usb_phy_power_off(struct tegra_usb_phy *phy);
  74
  75void tegra_usb_phy_preresume(struct tegra_usb_phy *phy);
  76
  77void tegra_usb_phy_postresume(struct tegra_usb_phy *phy);
  78
  79void tegra_ehci_phy_restore_start(struct tegra_usb_phy *phy,
  80                                 enum tegra_usb_phy_port_speed port_speed);
  81
  82void tegra_ehci_phy_restore_end(struct tegra_usb_phy *phy);
  83
  84void tegra_usb_phy_close(struct tegra_usb_phy *phy);
  85
  86#endif /* __MACH_USB_PHY_H */
  87