Revert "Merge commit 'main-jb-2012.08.03-B4' into t114-0806"
[linux-2.6.git] / include / linux / platform_data / tegra_usb.h
1 /*
2  * Copyright (C) 2010 Google, Inc.
3  * Copyright (c) 2010-2012, NVIDIA CORPORATION.  All rights reserved.
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         int phy_restore_gpio;
65 };
66
67 /**
68  * configuration structure for setting up hsic phy
69  */
70 struct tegra_hsic_config {
71         u8 sync_start_delay;
72         u8 idle_wait_delay;
73         u8 term_range_adj;
74         u8 elastic_underrun_limit;
75         u8 elastic_overrun_limit;
76 };
77
78 /**
79  * Platform specific operations that will be controlled
80  * during the phy operations.
81  */
82 struct tegra_usb_phy_platform_ops {
83         void (*open)(void);
84         void (*init)(void);
85         void (*pre_suspend)(void);
86         void (*post_suspend)(void);
87         void (*pre_resume)(void);
88         void (*post_resume)(void);
89         void (*pre_phy_off)(void);
90         void (*post_phy_off)(void);
91         void (*pre_phy_on)(void);
92         void (*post_phy_on)(void);
93         void (*port_power)(void);
94         void (*close)(void);
95 };
96
97 /**
98  * defines structure for platform dependent device parameters
99  */
100 struct tegra_usb_dev_mode_data {
101         int vbus_pmu_irq;
102         int vbus_gpio;
103         bool charging_supported;
104         bool remote_wakeup_supported;
105 };
106
107 /**
108  * defines structure for platform dependent host parameters
109  */
110 struct tegra_usb_host_mode_data {
111         int vbus_gpio;
112         const char *vbus_reg;
113         bool hot_plug;
114         bool remote_wakeup_supported;
115         bool power_off_on_suspend;
116 };
117
118 /**
119  * defines structure for usb platform data
120  */
121 struct tegra_usb_platform_data {
122         bool port_otg;
123         bool has_hostpc;
124         bool builtin_host_disabled;
125         bool unaligned_dma_buf_supported;
126         enum tegra_usb_phy_interface phy_intf;
127         enum tegra_usb_operation_mode op_mode;
128
129         union {
130                 struct tegra_usb_dev_mode_data dev;
131                 struct tegra_usb_host_mode_data host;
132         } u_data;
133
134         union {
135                 struct tegra_utmi_config utmi;
136                 struct tegra_ulpi_config ulpi;
137                 struct tegra_hsic_config hsic;
138         } u_cfg;
139
140         struct tegra_usb_phy_platform_ops *ops;
141 };
142
143 /**
144  * defines structure for platform dependent OTG parameters
145  */
146 struct tegra_usb_otg_data {
147         struct platform_device *ehci_device;
148         struct tegra_usb_platform_data *ehci_pdata;
149 };
150
151 #endif /* _TEGRA_USB_H_ */