Brian Swetland | 3e7e21a | 2009-01-19 19:41:24 -0800 | [diff] [blame] | 1 | /* |
| 2 | * Copyright (c) 2008, Google Inc. |
| 3 | * All rights reserved. |
| 4 | * |
Eugene Yasman | 7b7b628 | 2013-02-26 13:13:20 +0200 | [diff] [blame] | 5 | * Copyright (c) 2009-2013, The Linux Foundation. All rights reserved. |
Shashank Mittal | 23b8f42 | 2010-04-16 19:27:21 -0700 | [diff] [blame] | 6 | * |
Brian Swetland | 3e7e21a | 2009-01-19 19:41:24 -0800 | [diff] [blame] | 7 | * Redistribution and use in source and binary forms, with or without |
| 8 | * modification, are permitted provided that the following conditions |
| 9 | * are met: |
| 10 | * * Redistributions of source code must retain the above copyright |
| 11 | * notice, this list of conditions and the following disclaimer. |
| 12 | * * Redistributions in binary form must reproduce the above copyright |
| 13 | * notice, this list of conditions and the following disclaimer in |
Eugene Yasman | 7b7b628 | 2013-02-26 13:13:20 +0200 | [diff] [blame] | 14 | * the documentation and/or other materials provided with the |
Brian Swetland | 3e7e21a | 2009-01-19 19:41:24 -0800 | [diff] [blame] | 15 | * distribution. |
| 16 | * |
| 17 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
| 18 | * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
| 19 | * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS |
| 20 | * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE |
| 21 | * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, |
| 22 | * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, |
| 23 | * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS |
Eugene Yasman | 7b7b628 | 2013-02-26 13:13:20 +0200 | [diff] [blame] | 24 | * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED |
Brian Swetland | 3e7e21a | 2009-01-19 19:41:24 -0800 | [diff] [blame] | 25 | * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, |
| 26 | * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT |
| 27 | * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
| 28 | * SUCH DAMAGE. |
| 29 | */ |
| 30 | |
| 31 | #ifndef _MSM7200_USB_H_ |
| 32 | #define _MSM7200_USB_H_ |
| 33 | |
Ajay Dudani | 7d60552 | 2010-10-01 19:52:37 -0700 | [diff] [blame] | 34 | #ifndef MSM_USB_BASE |
Brian Swetland | 3e7e21a | 2009-01-19 19:41:24 -0800 | [diff] [blame] | 35 | #define MSM_USB_BASE 0xA0800000 |
Ajay Dudani | 232ce81 | 2009-12-02 00:14:11 -0800 | [diff] [blame] | 36 | #endif |
Brian Swetland | 3e7e21a | 2009-01-19 19:41:24 -0800 | [diff] [blame] | 37 | |
| 38 | #define USB_ID (MSM_USB_BASE + 0x0000) |
| 39 | #define USB_HWGENERAL (MSM_USB_BASE + 0x0004) |
| 40 | #define USB_HWHOST (MSM_USB_BASE + 0x0008) |
| 41 | #define USB_HWDEVICE (MSM_USB_BASE + 0x000C) |
| 42 | #define USB_HWTXBUF (MSM_USB_BASE + 0x0010) |
| 43 | #define USB_HWRXBUF (MSM_USB_BASE + 0x0014) |
| 44 | #define USB_SBUSCFG (MSM_USB_BASE + 0x0090) |
Deepa Dinamani | 0687ecd | 2012-08-10 16:00:26 -0700 | [diff] [blame] | 45 | #define USB_AHB_MODE (MSM_USB_BASE + 0x0098) |
Brian Swetland | 3e7e21a | 2009-01-19 19:41:24 -0800 | [diff] [blame] | 46 | |
Amol Jadi | 71303ad | 2013-02-28 20:56:08 -0800 | [diff] [blame] | 47 | #define USB_GENCONFIG_2 (MSM_USB_BASE + 0x00A0) |
| 48 | |
Ajay Dudani | b01e506 | 2011-12-03 23:23:42 -0800 | [diff] [blame] | 49 | #define USB_CAPLENGTH (MSM_USB_BASE + 0x0100) /* 8 bit */ |
| 50 | #define USB_HCIVERSION (MSM_USB_BASE + 0x0102) /* 16 bit */ |
Brian Swetland | 3e7e21a | 2009-01-19 19:41:24 -0800 | [diff] [blame] | 51 | #define USB_HCSPARAMS (MSM_USB_BASE + 0x0104) |
| 52 | #define USB_HCCPARAMS (MSM_USB_BASE + 0x0108) |
Ajay Dudani | b01e506 | 2011-12-03 23:23:42 -0800 | [diff] [blame] | 53 | #define USB_DCIVERSION (MSM_USB_BASE + 0x0120) /* 16 bit */ |
Brian Swetland | 3e7e21a | 2009-01-19 19:41:24 -0800 | [diff] [blame] | 54 | #define USB_USBCMD (MSM_USB_BASE + 0x0140) |
| 55 | #define USB_USBSTS (MSM_USB_BASE + 0x0144) |
| 56 | #define USB_USBINTR (MSM_USB_BASE + 0x0148) |
| 57 | #define USB_FRINDEX (MSM_USB_BASE + 0x014C) |
| 58 | #define USB_DEVICEADDR (MSM_USB_BASE + 0x0154) |
| 59 | #define USB_ENDPOINTLISTADDR (MSM_USB_BASE + 0x0158) |
| 60 | #define USB_BURSTSIZE (MSM_USB_BASE + 0x0160) |
| 61 | #define USB_TXFILLTUNING (MSM_USB_BASE + 0x0164) |
| 62 | #define USB_ULPI_VIEWPORT (MSM_USB_BASE + 0x0170) |
| 63 | #define USB_ENDPTNAK (MSM_USB_BASE + 0x0178) |
| 64 | #define USB_ENDPTNAKEN (MSM_USB_BASE + 0x017C) |
| 65 | #define USB_PORTSC (MSM_USB_BASE + 0x0184) |
| 66 | #define USB_OTGSC (MSM_USB_BASE + 0x01A4) |
| 67 | #define USB_USBMODE (MSM_USB_BASE + 0x01A8) |
| 68 | #define USB_ENDPTSETUPSTAT (MSM_USB_BASE + 0x01AC) |
| 69 | #define USB_ENDPTPRIME (MSM_USB_BASE + 0x01B0) |
| 70 | #define USB_ENDPTFLUSH (MSM_USB_BASE + 0x01B4) |
| 71 | #define USB_ENDPTSTAT (MSM_USB_BASE + 0x01B8) |
| 72 | #define USB_ENDPTCOMPLETE (MSM_USB_BASE + 0x01BC) |
| 73 | #define USB_ENDPTCTRL(n) (MSM_USB_BASE + 0x01C0 + (4 * (n))) |
Eugene Yasman | 7b7b628 | 2013-02-26 13:13:20 +0200 | [diff] [blame] | 74 | #define USB_OTG_HS_PHY_CTRL (MSM_USB_BASE + 0x0240) |
| 75 | #define USB_OTG_HS_PHY_SEC_CTRL (MSM_USB_BASE + 0x0278) |
Brian Swetland | 3e7e21a | 2009-01-19 19:41:24 -0800 | [diff] [blame] | 76 | |
Amol Jadi | 71303ad | 2013-02-28 20:56:08 -0800 | [diff] [blame] | 77 | /* ULPI registers */ |
| 78 | #define ULPI_MISC_A_READ 0x96 |
| 79 | #define ULPI_MISC_A_SET 0x97 |
| 80 | #define ULPI_MISC_A_CLEAR 0x98 |
| 81 | |
Brian Swetland | 3e7e21a | 2009-01-19 19:41:24 -0800 | [diff] [blame] | 82 | #define USBCMD_RESET 2 |
| 83 | #define USBCMD_ATTACH 1 |
| 84 | |
| 85 | #define USBMODE_DEVICE 2 |
| 86 | #define USBMODE_HOST 3 |
| 87 | |
Ajay Dudani | b01e506 | 2011-12-03 23:23:42 -0800 | [diff] [blame] | 88 | struct ept_queue_head { |
| 89 | unsigned config; |
| 90 | unsigned current; /* read-only */ |
Brian Swetland | 3e7e21a | 2009-01-19 19:41:24 -0800 | [diff] [blame] | 91 | |
Ajay Dudani | b01e506 | 2011-12-03 23:23:42 -0800 | [diff] [blame] | 92 | unsigned next; |
| 93 | unsigned info; |
| 94 | unsigned page0; |
| 95 | unsigned page1; |
| 96 | unsigned page2; |
| 97 | unsigned page3; |
| 98 | unsigned page4; |
| 99 | unsigned reserved_0; |
| 100 | |
| 101 | unsigned char setup_data[8]; |
| 102 | |
| 103 | unsigned reserved_1; |
| 104 | unsigned reserved_2; |
| 105 | unsigned reserved_3; |
| 106 | unsigned reserved_4; |
Brian Swetland | 3e7e21a | 2009-01-19 19:41:24 -0800 | [diff] [blame] | 107 | }; |
| 108 | |
| 109 | #define CONFIG_MAX_PKT(n) ((n) << 16) |
Ajay Dudani | b01e506 | 2011-12-03 23:23:42 -0800 | [diff] [blame] | 110 | #define CONFIG_ZLT (1 << 29) /* stop on zero-len xfer */ |
| 111 | #define CONFIG_IOS (1 << 15) /* IRQ on setup */ |
Brian Swetland | 3e7e21a | 2009-01-19 19:41:24 -0800 | [diff] [blame] | 112 | |
Ajay Dudani | b01e506 | 2011-12-03 23:23:42 -0800 | [diff] [blame] | 113 | struct ept_queue_item { |
| 114 | unsigned next; |
| 115 | unsigned info; |
| 116 | unsigned page0; |
| 117 | unsigned page1; |
| 118 | unsigned page2; |
| 119 | unsigned page3; |
| 120 | unsigned page4; |
| 121 | unsigned reserved; |
Brian Swetland | 3e7e21a | 2009-01-19 19:41:24 -0800 | [diff] [blame] | 122 | }; |
| 123 | |
| 124 | #define TERMINATE 1 |
| 125 | |
| 126 | #define INFO_BYTES(n) ((n) << 16) |
| 127 | #define INFO_IOC (1 << 15) |
| 128 | #define INFO_ACTIVE (1 << 7) |
| 129 | #define INFO_HALTED (1 << 6) |
| 130 | #define INFO_BUFFER_ERROR (1 << 5) |
| 131 | #define INFO_TX_ERROR (1 << 3) |
| 132 | |
Ajay Dudani | b01e506 | 2011-12-03 23:23:42 -0800 | [diff] [blame] | 133 | #define STS_NAKI (1 << 16) /* */ |
| 134 | #define STS_SLI (1 << 8) /* R/WC - suspend state entered */ |
| 135 | #define STS_SRI (1 << 7) /* R/WC - SOF recv'd */ |
| 136 | #define STS_URI (1 << 6) /* R/WC - RESET recv'd - write to clear */ |
| 137 | #define STS_FRI (1 << 3) /* R/WC - Frame List Rollover */ |
| 138 | #define STS_PCI (1 << 2) /* R/WC - Port Change Detect */ |
| 139 | #define STS_UEI (1 << 1) /* R/WC - USB Error */ |
| 140 | #define STS_UI (1 << 0) /* R/WC - USB Transaction Complete */ |
Brian Swetland | 3e7e21a | 2009-01-19 19:41:24 -0800 | [diff] [blame] | 141 | |
| 142 | /* bits used in all the endpoint status registers */ |
| 143 | #define EPT_TX(n) (1 << ((n) + 16)) |
| 144 | #define EPT_RX(n) (1 << (n)) |
| 145 | |
Brian Swetland | 3e7e21a | 2009-01-19 19:41:24 -0800 | [diff] [blame] | 146 | #define CTRL_TXE (1 << 23) |
| 147 | #define CTRL_TXR (1 << 22) |
| 148 | #define CTRL_TXI (1 << 21) |
| 149 | #define CTRL_TXD (1 << 17) |
| 150 | #define CTRL_TXS (1 << 16) |
| 151 | #define CTRL_RXE (1 << 7) |
| 152 | #define CTRL_RXR (1 << 6) |
| 153 | #define CTRL_RXI (1 << 5) |
| 154 | #define CTRL_RXD (1 << 1) |
| 155 | #define CTRL_RXS (1 << 0) |
| 156 | |
| 157 | #define CTRL_TXT_CTRL (0 << 18) |
| 158 | #define CTRL_TXT_ISOCH (1 << 18) |
| 159 | #define CTRL_TXT_BULK (2 << 18) |
| 160 | #define CTRL_TXT_INT (3 << 18) |
| 161 | |
| 162 | #define CTRL_RXT_CTRL (0 << 2) |
| 163 | #define CTRL_RXT_ISOCH (1 << 2) |
| 164 | #define CTRL_RXT_BULK (2 << 2) |
| 165 | #define CTRL_RXT_INT (3 << 2) |
| 166 | |
Amol Jadi | 71303ad | 2013-02-28 20:56:08 -0800 | [diff] [blame] | 167 | #define GEN2_SESS_VLD_CTRL_EN (1 << 7) |
| 168 | #define SESS_VLD_CTRL (1 << 25) |
| 169 | |
| 170 | |
| 171 | /* ULPI bit map */ |
Brian Swetland | 3e7e21a | 2009-01-19 19:41:24 -0800 | [diff] [blame] | 172 | #define ULPI_WAKEUP (1 << 31) |
| 173 | #define ULPI_RUN (1 << 30) |
| 174 | #define ULPI_WRITE (1 << 29) |
| 175 | #define ULPI_READ (0 << 29) |
| 176 | #define ULPI_STATE_NORMAL (1 << 27) |
| 177 | #define ULPI_ADDR(n) (((n) & 255) << 16) |
| 178 | #define ULPI_DATA(n) ((n) & 255) |
| 179 | #define ULPI_DATA_READ(n) (((n) >> 8) & 255) |
Chandan Uddaraju | 7f5b901 | 2010-02-06 16:37:48 -0800 | [diff] [blame] | 180 | |
Amol Jadi | 71303ad | 2013-02-28 20:56:08 -0800 | [diff] [blame] | 181 | #define ULPI_MISC_A_VBUSVLDEXTSEL (1 << 1) |
| 182 | #define ULPI_MISC_A_VBUSVLDEXT (1 << 0) |
| 183 | |
Brian Swetland | 3e7e21a | 2009-01-19 19:41:24 -0800 | [diff] [blame] | 184 | #endif |