ARM: tegra: usb: enable pmu vbus interrupts
[linux-2.6.git] / arch / arm / mach-tegra / tegra_usb_phy.h
1 /*
2  * arch/arm/mach-tegra/include/mach/tegra_usb_phy.h
3  *
4  * Copyright (C) 2011 NVIDIA Corporation.
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_TEGRA_USB_PHY_H
18 #define __MACH_TEGRA_USB_PHY_H
19
20 /**
21  * defines USB port speeds supported in USB2.0
22  */
23 enum usb_phy_port_speed {
24         USB_PHY_PORT_SPEED_FULL = 0,
25         USB_PHY_PORT_SPEED_LOW,
26         USB_PHY_PORT_SPEED_HIGH,
27         USB_PHY_PORT_SPEED_UNKNOWN,
28 };
29
30 /**
31  * defines structure for oscillator dependent parameters
32  */
33 struct tegra_xtal_freq {
34         int freq;
35         u8 enable_delay;
36         u8 stable_count;
37         u8 active_delay;
38         u16 xtal_freq_count;
39         u16 debounce;
40         u8 pdtrk_count;
41 };
42
43 /**
44  * pre decleration of the usb phy data structure
45  */
46 struct tegra_usb_phy;
47
48 /**
49  * defines function pointers used for differnt phy interfaces
50  */
51 struct tegra_usb_phy_ops {
52         int (*open)(struct tegra_usb_phy *phy);
53         void (*close)(struct tegra_usb_phy *phy);
54         int (*irq)(struct tegra_usb_phy *phy);
55         int (*init)(struct tegra_usb_phy *phy);
56         int (*reset)(struct tegra_usb_phy *phy);
57         int (*pre_suspend)(struct tegra_usb_phy *phy);
58         int (*suspend)(struct tegra_usb_phy *phy);
59         int (*post_suspend)(struct tegra_usb_phy *phy);
60         int (*pre_resume)(struct tegra_usb_phy *phy, bool remote_wakeup);
61         int (*resume)(struct tegra_usb_phy *phy);
62         int (*post_resume)(struct tegra_usb_phy *phy);
63         int (*port_power)(struct tegra_usb_phy *phy);
64         int (*bus_reset)(struct tegra_usb_phy *phy);
65         int (*power_off)(struct tegra_usb_phy *phy);
66         int (*power_on)(struct tegra_usb_phy *phy);
67         bool (*charger_detect)(struct tegra_usb_phy *phy);
68 };
69
70 /**
71  * defines usb phy data structure
72  */
73 struct tegra_usb_phy {
74         struct platform_device *pdev;
75         struct tegra_usb_platform_data *pdata;
76         struct clk *pllu_clk;
77         struct clk *ctrlr_clk;
78         struct clk *ulpi_clk;
79         struct clk *utmi_pad_clk;
80         struct clk *emc_clk;
81         struct clk *sys_clk;
82         struct regulator *vdd_reg;
83         struct regulator *vbus_reg;
84         struct tegra_usb_phy_ops *ops;
85         struct tegra_xtal_freq *freq;
86         struct usb_phy *ulpi_vp;
87         enum usb_phy_port_speed port_speed;
88         signed char utmi_xcvr_setup;
89         void __iomem *regs;
90         int inst;
91         bool phy_clk_on;
92         bool ctrl_clk_on; /* used only for pmu irq */
93         bool phy_power_on;
94         bool remote_wakeup;
95         bool hw_accessible;
96 };
97
98 int usb_phy_reg_status_wait(void __iomem *reg, u32 mask,
99                 u32 result, u32 timeout);
100
101 int tegra3_usb_phy_init_ops(struct tegra_usb_phy *phy);
102 int tegra2_usb_phy_init_ops(struct tegra_usb_phy *phy);
103
104
105 #endif /* __MACH_TEGRA_USB_PHY_H */