xhci: tegra: support HSIC ports
[linux-3.10.git] / arch / arm / mach-tegra / include / mach / xusb.h
1 /*
2  * arch/arm/mach-tegra/include/mach/xusb.h
3  *
4  * Copyright (c) 2013, NVIDIA CORPORATION.  All rights reserved.
5  *
6  * Author:
7  *      Ajay Gupta <ajayg@nvidia.com>
8  *
9  * This software is licensed under the terms of the GNU General Public
10  * License version 2, as published by the Free Software Foundation, and
11  * may be copied, distributed, and modified under those terms.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  */
19 #ifndef _XUSB_H
20 #define _XUSB_H
21
22 /*
23  * BIT0 - BIT7 : SS ports
24  * BIT8 - BIT15 : USB2 UTMI ports
25  * BIT16 - BIT23 : HSIC ports
26  * BIT24 - BIT31 : ULPI ports
27  */
28 #define TEGRA_XUSB_SS_P0        (1 << 0)
29 #define TEGRA_XUSB_SS_P1        (1 << 1)
30 #define TEGRA_XUSB_USB2_P0      (1 << 8)
31 #define TEGRA_XUSB_USB2_P1      (1 << 9)
32 #define TEGRA_XUSB_USB2_P2      (1 << 10)
33 #define XUSB_HSIC_INDEX (16)
34 #define XUSB_HSIC_COUNT (2)
35 #define TEGRA_XUSB_HSIC_P0      BIT(XUSB_HSIC_INDEX)
36 #define TEGRA_XUSB_HSIC_P1      BIT(XUSB_HSIC_INDEX + 1)
37 #define TEGRA_XUSB_ULPI_P0      (1 << 24)
38 #define TEGRA_XUSB_SS_PORT_MAP_USB2_P0 (0x0)
39 #define TEGRA_XUSB_SS_PORT_MAP_USB2_P1 (0x1)
40 #define TEGRA_XUSB_SS_PORT_MAP_USB2_P2 (0x2)
41 #define TEGRA_XUSB_SS0_PORT_MAP (0xf)
42 #define TEGRA_XUSB_SS1_PORT_MAP (0xf0)
43 #define TEGRA_XUSB_ULPI_PORT_CAP_MASTER (0x0)
44 #define TEGRA_XUSB_ULPI_PORT_CAP_PHY    (0x1)
45 #define TEGRA_XUSB_UTMIP_PMC_PORT0      (0x0)
46 #define TEGRA_XUSB_UTMIP_PMC_PORT1      (0x1)
47 #define TEGRA_XUSB_UTMIP_PMC_PORT2      (0x2)
48
49 struct tegra_xusb_regulator_name {
50         u8 *s5p0v;
51         u8 *s5p0v1;
52         u8 *s5p0v2;
53         u8 *s3p3v;
54         u8 *s1p8v;
55         const char *vddio_hsic;
56         u8 *s1p05v;
57 };
58
59 struct tegra_xusb_hsic_config {
60         u8 rx_strobe_trim;
61         u8 rx_data_trim;
62         u8 tx_rtune_n;
63         u8 tx_rtune_p;
64         u8 tx_slew_n;
65         u8 tx_slew_p;
66         bool auto_term_en;
67         u8 strb_trim_val;
68 };
69
70 struct tegra_xusb_board_data {
71         u32     portmap;
72         /*
73          * SS0 or SS1 port may be mapped either to USB2_P0 or USB2_P1
74          * ss_portmap[0:3] = SS0 map, ss_portmap[4:7] = SS1 map
75          */
76         u8      ss_portmap;
77         u8      ulpicap;
78         u8      lane_owner;
79         bool uses_different_vbus_per_port;
80         bool uses_external_pmic;
81         bool gpio_controls_muxed_ss_lanes;
82         u32 gpio_ss1_sata;
83         struct tegra_xusb_regulator_name supply;
84         struct tegra_xusb_hsic_config hsic;
85 };
86
87 struct tegra_xusb_platform_data {
88         struct tegra_xusb_board_data *bdata;
89         u32 hs_curr_level_pad0;
90         u32 hs_curr_level_pad1;
91         u32 hs_curr_level_pad2;
92         u32 hs_iref_cap;
93         u32 hs_term_range_adj;
94         u32 hs_squelch_level;
95         u32 rx_wander;
96         u32 rx_eq;
97         u32 cdr_cntl;
98         u32 dfe_cntl;
99         u32 hs_slew;
100         u32 ls_rslew_pad0;
101         u32 ls_rslew_pad1;
102         u32 ls_rslew_pad2;
103         u32 hs_disc_lvl;
104         /*
105          * BIT[0:3] = PMC port # for USB2_P0
106          * BIT[4:7] = PMC port # for USB2_P1
107          * BIT[8:11] = PMC port # for USB2_P2
108          */
109         u32 pmc_portmap;
110         /* chip specific */
111         unsigned long quirks;
112 };
113
114 #define TEGRA_XUSB_USE_HS_SRC_CLOCK2 BIT(0)
115
116 extern void tegra_xusb_init(struct tegra_xusb_board_data *bdata);
117 #endif /* _XUSB_H */