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  * Platform specific operations that will be controlled
69  * during the phy operations.
70  */
71 struct tegra_usb_phy_platform_ops {
72         void (*open)(void);
73         void (*init)(void);
74         void (*pre_suspend)(void);
75         void (*post_suspend)(void);
76         void (*pre_resume)(void);
77         void (*post_resume)(void);
78         void (*pre_phy_off)(void);
79         void (*post_phy_off)(void);
80         void (*pre_phy_on)(void);
81         void (*post_phy_on)(void);
82         void (*port_power)(void);
83         void (*close)(void);
84 };
85
86 /**
87  * defines structure for platform dependent device parameters
88  */
89 struct tegra_usb_dev_mode_data {
90         int vbus_pmu_irq;
91         int vbus_gpio;
92         bool charging_supported;
93         bool remote_wakeup_supported;
94 };
95
96 /**
97  * defines structure for platform dependent host parameters
98  */
99 struct tegra_usb_host_mode_data {
100         int vbus_gpio;
101         const char *vbus_reg;
102         bool hot_plug;
103         bool remote_wakeup_supported;
104         bool power_off_on_suspend;
105 };
106
107 /**
108  * defines structure for usb platform data
109  */
110 struct tegra_usb_platform_data {
111         bool port_otg;
112         bool has_hostpc;
113         bool builtin_host_disabled;
114         bool unaligned_dma_buf_supported;
115         enum tegra_usb_phy_interface phy_intf;
116         enum tegra_usb_operation_mode op_mode;
117
118         union {
119                 struct tegra_usb_dev_mode_data dev;
120                 struct tegra_usb_host_mode_data host;
121         } u_data;
122
123         union {
124                 struct tegra_utmi_config utmi;
125                 struct tegra_ulpi_config ulpi;
126         } u_cfg;
127
128         struct tegra_usb_phy_platform_ops *ops;
129 };
130
131 /**
132  * defines structure for platform dependent OTG parameters
133  */
134 struct tegra_usb_otg_data {
135         struct platform_device *ehci_device;
136         struct tegra_usb_platform_data *ehci_pdata;
137 };
138
139 #endif /* _TEGRA_USB_H_ */