unknown changes from android-tegra-nv-3.4
[linux-3.10.git] / include / linux / platform_data / tegra_usb.h
1 /*
2  * Copyright (C) 2010 Google, Inc.
3  * Copyright (C) 2010-2011 NVIDIA Corporation
4  *
5  * This software is licensed under the terms of the GNU General Public
6  * License version 2, as published by the Free Software Foundation, and
7  * may be copied, distributed, and modified under those terms.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  */
15
16 #ifndef _TEGRA_USB_H_
17 #define _TEGRA_USB_H_
18
19 /**
20  * defines operation mode of the USB controller
21  */
22 enum tegra_usb_operation_mode {
23         TEGRA_USB_OPMODE_DEVICE,
24         TEGRA_USB_OPMODE_HOST,
25 };
26
27 /**
28  * defines the various phy interface mode supported by controller
29  */
30 enum tegra_usb_phy_interface {
31         TEGRA_USB_PHY_INTF_UTMI = 0,
32         TEGRA_USB_PHY_INTF_ULPI_LINK = 1,
33         TEGRA_USB_PHY_INTF_ULPI_NULL = 2,
34         TEGRA_USB_PHY_INTF_HSIC = 3,
35         TEGRA_USB_PHY_INTF_ICUSB = 4,
36 };
37
38 /**
39  * configuration structure for setting up utmi phy
40  */
41 struct tegra_utmi_config {
42         u8 hssync_start_delay;
43         u8 elastic_limit;
44         u8 idle_wait_delay;
45         u8 term_range_adj;
46         u8 xcvr_setup;
47         u8 xcvr_lsfslew;
48         u8 xcvr_lsrslew;
49         signed char xcvr_setup_offset;
50         u8 xcvr_use_lsb;
51         u8 xcvr_use_fuses;
52 };
53
54 /**
55  * configuration structure for setting up ulpi phy
56  */
57 struct tegra_ulpi_config {
58         u8 shadow_clk_delay;
59         u8 clock_out_delay;
60         u8 data_trimmer;
61         u8 stpdirnxt_trimmer;
62         u8 dir_trimmer;
63         const char *clk;
64 };
65
66 /**
67  * configuration structure for setting up hsic phy
68  */
69 struct tegra_hsic_config {
70         u8 sync_start_delay;
71         u8 idle_wait_delay;
72         u8 term_range_adj;
73         u8 elastic_underrun_limit;
74         u8 elastic_overrun_limit;
75 };
76
77 /**
78  * Platform specific operations that will be controlled
79  * during the phy operations.
80  */
81 struct tegra_usb_phy_platform_ops {
82         void (*open)(void);
83         void (*init)(void);
84         void (*pre_suspend)(void);
85         void (*post_suspend)(void);
86         void (*pre_resume)(void);
87         void (*post_resume)(void);
88         void (*pre_phy_off)(void);
89         void (*post_phy_off)(void);
90         void (*pre_phy_on)(void);
91         void (*post_phy_on)(void);
92         void (*port_power)(void);
93         void (*close)(void);
94 };
95
96 /**
97  * defines structure for platform dependent device parameters
98  */
99 struct tegra_usb_dev_mode_data {
100         int vbus_pmu_irq;
101         int vbus_gpio;
102         bool charging_supported;
103         bool remote_wakeup_supported;
104 };
105
106 /**
107  * defines structure for platform dependent host parameters
108  */
109 struct tegra_usb_host_mode_data {
110         int vbus_gpio;
111         const char *vbus_reg;
112         bool hot_plug;
113         bool remote_wakeup_supported;
114         bool power_off_on_suspend;
115 };
116
117 /**
118  * defines structure for usb platform data
119  */
120 struct tegra_usb_platform_data {
121         bool port_otg;
122         bool has_hostpc;
123         bool builtin_host_disabled;
124         enum tegra_usb_phy_interface phy_intf;
125         enum tegra_usb_operation_mode op_mode;
126
127         union {
128                 struct tegra_usb_dev_mode_data dev;
129                 struct tegra_usb_host_mode_data host;
130         } u_data;
131
132         union {
133                 struct tegra_utmi_config utmi;
134                 struct tegra_ulpi_config ulpi;
135                 struct tegra_hsic_config hsic;
136         } u_cfg;
137
138         struct tegra_usb_phy_platform_ops *ops;
139 };
140
141 /**
142  * defines structure for platform dependent OTG parameters
143  */
144 struct tegra_usb_otg_data {
145         struct platform_device *ehci_device;
146         struct tegra_usb_platform_data *ehci_pdata;
147 };
148
149 #endif /* _TEGRA_USB_H_ */