diff options
| author | George Cherian <george.cherian@ti.com> | 2013-06-12 05:23:47 -0400 |
|---|---|---|
| committer | Felipe Balbi <balbi@ti.com> | 2013-06-12 16:57:13 -0400 |
| commit | b1fd6cb5ee2f97a553d1c4b8a88914bd970daf37 (patch) | |
| tree | 1914628bc04ac0b30eaca3a3097330a8b99366dd /drivers | |
| parent | ff7307b534258c8864c356d15c52a84d0a5fbb35 (diff) | |
usb: dwc3: omap: Adds dwc3_omap_readl/writel wrappers
This patch adds wrappers to dwc3_omap_readl/writel calls to accomodate
both OMAP5 and AM437x reg maps (It uses the cached register offsets).
Also renames OMAP5 IRQ1 as IRQMISC and IRQ1 bits as IRQMISC bits.
Signed-off-by: George Cherian <george.cherian@ti.com>
Signed-off-by: Felipe Balbi <balbi@ti.com>
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/usb/dwc3/dwc3-omap.c | 173 |
1 files changed, 116 insertions, 57 deletions
diff --git a/drivers/usb/dwc3/dwc3-omap.c b/drivers/usb/dwc3/dwc3-omap.c index 54dd6fe886e2..077f110bd746 100644 --- a/drivers/usb/dwc3/dwc3-omap.c +++ b/drivers/usb/dwc3/dwc3-omap.c | |||
| @@ -67,10 +67,18 @@ | |||
| 67 | #define USBOTGSS_IRQENABLE_SET_0 0x002c | 67 | #define USBOTGSS_IRQENABLE_SET_0 0x002c |
| 68 | #define USBOTGSS_IRQENABLE_CLR_0 0x0030 | 68 | #define USBOTGSS_IRQENABLE_CLR_0 0x0030 |
| 69 | #define USBOTGSS_IRQ0_OFFSET 0x0004 | 69 | #define USBOTGSS_IRQ0_OFFSET 0x0004 |
| 70 | #define USBOTGSS_IRQSTATUS_RAW_1 0x0034 | 70 | #define USBOTGSS_IRQSTATUS_RAW_1 0x0030 |
| 71 | #define USBOTGSS_IRQSTATUS_1 0x0038 | 71 | #define USBOTGSS_IRQSTATUS_1 0x0034 |
| 72 | #define USBOTGSS_IRQENABLE_SET_1 0x003c | 72 | #define USBOTGSS_IRQENABLE_SET_1 0x0038 |
| 73 | #define USBOTGSS_IRQENABLE_CLR_1 0x0040 | 73 | #define USBOTGSS_IRQENABLE_CLR_1 0x003c |
| 74 | #define USBOTGSS_IRQSTATUS_RAW_2 0x0040 | ||
| 75 | #define USBOTGSS_IRQSTATUS_2 0x0044 | ||
| 76 | #define USBOTGSS_IRQENABLE_SET_2 0x0048 | ||
| 77 | #define USBOTGSS_IRQENABLE_CLR_2 0x004c | ||
| 78 | #define USBOTGSS_IRQSTATUS_RAW_3 0x0050 | ||
| 79 | #define USBOTGSS_IRQSTATUS_3 0x0054 | ||
| 80 | #define USBOTGSS_IRQENABLE_SET_3 0x0058 | ||
| 81 | #define USBOTGSS_IRQENABLE_CLR_3 0x005c | ||
| 74 | #define USBOTGSS_IRQSTATUS_EOI_MISC 0x0030 | 82 | #define USBOTGSS_IRQSTATUS_EOI_MISC 0x0030 |
| 75 | #define USBOTGSS_IRQSTATUS_RAW_MISC 0x0034 | 83 | #define USBOTGSS_IRQSTATUS_RAW_MISC 0x0034 |
| 76 | #define USBOTGSS_IRQSTATUS_MISC 0x0038 | 84 | #define USBOTGSS_IRQSTATUS_MISC 0x0038 |
| @@ -102,17 +110,17 @@ | |||
| 102 | /* IRQS0 BITS */ | 110 | /* IRQS0 BITS */ |
| 103 | #define USBOTGSS_IRQO_COREIRQ_ST (1 << 0) | 111 | #define USBOTGSS_IRQO_COREIRQ_ST (1 << 0) |
| 104 | 112 | ||
| 105 | /* IRQ1 BITS */ | 113 | /* IRQMISC BITS */ |
| 106 | #define USBOTGSS_IRQ1_DMADISABLECLR (1 << 17) | 114 | #define USBOTGSS_IRQMISC_DMADISABLECLR (1 << 17) |
| 107 | #define USBOTGSS_IRQ1_OEVT (1 << 16) | 115 | #define USBOTGSS_IRQMISC_OEVT (1 << 16) |
| 108 | #define USBOTGSS_IRQ1_DRVVBUS_RISE (1 << 13) | 116 | #define USBOTGSS_IRQMISC_DRVVBUS_RISE (1 << 13) |
| 109 | #define USBOTGSS_IRQ1_CHRGVBUS_RISE (1 << 12) | 117 | #define USBOTGSS_IRQMISC_CHRGVBUS_RISE (1 << 12) |
| 110 | #define USBOTGSS_IRQ1_DISCHRGVBUS_RISE (1 << 11) | 118 | #define USBOTGSS_IRQMISC_DISCHRGVBUS_RISE (1 << 11) |
| 111 | #define USBOTGSS_IRQ1_IDPULLUP_RISE (1 << 8) | 119 | #define USBOTGSS_IRQMISC_IDPULLUP_RISE (1 << 8) |
| 112 | #define USBOTGSS_IRQ1_DRVVBUS_FALL (1 << 5) | 120 | #define USBOTGSS_IRQMISC_DRVVBUS_FALL (1 << 5) |
| 113 | #define USBOTGSS_IRQ1_CHRGVBUS_FALL (1 << 4) | 121 | #define USBOTGSS_IRQMISC_CHRGVBUS_FALL (1 << 4) |
| 114 | #define USBOTGSS_IRQ1_DISCHRGVBUS_FALL (1 << 3) | 122 | #define USBOTGSS_IRQMISC_DISCHRGVBUS_FALL (1 << 3) |
| 115 | #define USBOTGSS_IRQ1_IDPULLUP_FALL (1 << 0) | 123 | #define USBOTGSS_IRQMISC_IDPULLUP_FALL (1 << 0) |
| 116 | 124 | ||
| 117 | /* UTMI_OTG_CTRL REGISTER */ | 125 | /* UTMI_OTG_CTRL REGISTER */ |
| 118 | #define USBOTGSS_UTMI_OTG_CTRL_DRVVBUS (1 << 5) | 126 | #define USBOTGSS_UTMI_OTG_CTRL_DRVVBUS (1 << 5) |
| @@ -161,6 +169,58 @@ static inline void dwc3_omap_writel(void __iomem *base, u32 offset, u32 value) | |||
| 161 | writel(value, base + offset); | 169 | writel(value, base + offset); |
| 162 | } | 170 | } |
| 163 | 171 | ||
| 172 | static u32 dwc3_omap_read_utmi_status(struct dwc3_omap *omap) | ||
| 173 | { | ||
| 174 | return dwc3_omap_readl(omap->base, USBOTGSS_UTMI_OTG_STATUS + | ||
| 175 | omap->utmi_otg_offset); | ||
| 176 | } | ||
| 177 | |||
| 178 | static void dwc3_omap_write_utmi_status(struct dwc3_omap *omap, u32 value) | ||
| 179 | { | ||
| 180 | dwc3_omap_writel(omap->base, USBOTGSS_UTMI_OTG_STATUS + | ||
| 181 | omap->utmi_otg_offset, value); | ||
| 182 | |||
| 183 | } | ||
| 184 | |||
| 185 | static u32 dwc3_omap_read_irq0_status(struct dwc3_omap *omap) | ||
| 186 | { | ||
| 187 | return dwc3_omap_readl(omap->base, USBOTGSS_IRQSTATUS_0 - | ||
| 188 | omap->irq0_offset); | ||
| 189 | } | ||
| 190 | |||
| 191 | static void dwc3_omap_write_irq0_status(struct dwc3_omap *omap, u32 value) | ||
| 192 | { | ||
| 193 | dwc3_omap_writel(omap->base, USBOTGSS_IRQSTATUS_0 - | ||
| 194 | omap->irq0_offset, value); | ||
| 195 | |||
| 196 | } | ||
| 197 | |||
| 198 | static u32 dwc3_omap_read_irqmisc_status(struct dwc3_omap *omap) | ||
| 199 | { | ||
| 200 | return dwc3_omap_readl(omap->base, USBOTGSS_IRQSTATUS_MISC + | ||
| 201 | omap->irqmisc_offset); | ||
| 202 | } | ||
| 203 | |||
| 204 | static void dwc3_omap_write_irqmisc_status(struct dwc3_omap *omap, u32 value) | ||
| 205 | { | ||
| 206 | dwc3_omap_writel(omap->base, USBOTGSS_IRQSTATUS_MISC + | ||
| 207 | omap->irqmisc_offset, value); | ||
| 208 | |||
| 209 | } | ||
| 210 | |||
| 211 | static void dwc3_omap_write_irqmisc_set(struct dwc3_omap *omap, u32 value) | ||
| 212 | { | ||
| 213 | dwc3_omap_writel(omap->base, USBOTGSS_IRQENABLE_SET_MISC + | ||
| 214 | omap->irqmisc_offset, value); | ||
| 215 | |||
| 216 | } | ||
| 217 | |||
| 218 | static void dwc3_omap_write_irq0_set(struct dwc3_omap *omap, u32 value) | ||
| 219 | { | ||
| 220 | dwc3_omap_writel(omap->base, USBOTGSS_IRQENABLE_SET_0 - | ||
| 221 | omap->irq0_offset, value); | ||
| 222 | } | ||
| 223 | |||
| 164 | int dwc3_omap_mailbox(enum omap_dwc3_vbus_id_status status) | 224 | int dwc3_omap_mailbox(enum omap_dwc3_vbus_id_status status) |
| 165 | { | 225 | { |
| 166 | u32 val; | 226 | u32 val; |
| @@ -173,38 +233,38 @@ int dwc3_omap_mailbox(enum omap_dwc3_vbus_id_status status) | |||
| 173 | case OMAP_DWC3_ID_GROUND: | 233 | case OMAP_DWC3_ID_GROUND: |
| 174 | dev_dbg(omap->dev, "ID GND\n"); | 234 | dev_dbg(omap->dev, "ID GND\n"); |
| 175 | 235 | ||
| 176 | val = dwc3_omap_readl(omap->base, USBOTGSS_UTMI_OTG_STATUS); | 236 | val = dwc3_omap_read_utmi_status(omap); |
| 177 | val &= ~(USBOTGSS_UTMI_OTG_STATUS_IDDIG | 237 | val &= ~(USBOTGSS_UTMI_OTG_STATUS_IDDIG |
| 178 | | USBOTGSS_UTMI_OTG_STATUS_VBUSVALID | 238 | | USBOTGSS_UTMI_OTG_STATUS_VBUSVALID |
| 179 | | USBOTGSS_UTMI_OTG_STATUS_SESSEND); | 239 | | USBOTGSS_UTMI_OTG_STATUS_SESSEND); |
| 180 | val |= USBOTGSS_UTMI_OTG_STATUS_SESSVALID | 240 | val |= USBOTGSS_UTMI_OTG_STATUS_SESSVALID |
| 181 | | USBOTGSS_UTMI_OTG_STATUS_POWERPRESENT; | 241 | | USBOTGSS_UTMI_OTG_STATUS_POWERPRESENT; |
| 182 | dwc3_omap_writel(omap->base, USBOTGSS_UTMI_OTG_STATUS, val); | 242 | dwc3_omap_write_utmi_status(omap, val); |
| 183 | break; | 243 | break; |
| 184 | 244 | ||
| 185 | case OMAP_DWC3_VBUS_VALID: | 245 | case OMAP_DWC3_VBUS_VALID: |
| 186 | dev_dbg(omap->dev, "VBUS Connect\n"); | 246 | dev_dbg(omap->dev, "VBUS Connect\n"); |
| 187 | 247 | ||
| 188 | val = dwc3_omap_readl(omap->base, USBOTGSS_UTMI_OTG_STATUS); | 248 | val = dwc3_omap_read_utmi_status(omap); |
| 189 | val &= ~USBOTGSS_UTMI_OTG_STATUS_SESSEND; | 249 | val &= ~USBOTGSS_UTMI_OTG_STATUS_SESSEND; |
| 190 | val |= USBOTGSS_UTMI_OTG_STATUS_IDDIG | 250 | val |= USBOTGSS_UTMI_OTG_STATUS_IDDIG |
| 191 | | USBOTGSS_UTMI_OTG_STATUS_VBUSVALID | 251 | | USBOTGSS_UTMI_OTG_STATUS_VBUSVALID |
| 192 | | USBOTGSS_UTMI_OTG_STATUS_SESSVALID | 252 | | USBOTGSS_UTMI_OTG_STATUS_SESSVALID |
| 193 | | USBOTGSS_UTMI_OTG_STATUS_POWERPRESENT; | 253 | | USBOTGSS_UTMI_OTG_STATUS_POWERPRESENT; |
| 194 | dwc3_omap_writel(omap->base, USBOTGSS_UTMI_OTG_STATUS, val); | 254 | dwc3_omap_write_utmi_status(omap, val); |
| 195 | break; | 255 | break; |
| 196 | 256 | ||
| 197 | case OMAP_DWC3_ID_FLOAT: | 257 | case OMAP_DWC3_ID_FLOAT: |
| 198 | case OMAP_DWC3_VBUS_OFF: | 258 | case OMAP_DWC3_VBUS_OFF: |
| 199 | dev_dbg(omap->dev, "VBUS Disconnect\n"); | 259 | dev_dbg(omap->dev, "VBUS Disconnect\n"); |
| 200 | 260 | ||
| 201 | val = dwc3_omap_readl(omap->base, USBOTGSS_UTMI_OTG_STATUS); | 261 | val = dwc3_omap_read_utmi_status(omap); |
| 202 | val &= ~(USBOTGSS_UTMI_OTG_STATUS_SESSVALID | 262 | val &= ~(USBOTGSS_UTMI_OTG_STATUS_SESSVALID |
| 203 | | USBOTGSS_UTMI_OTG_STATUS_VBUSVALID | 263 | | USBOTGSS_UTMI_OTG_STATUS_VBUSVALID |
| 204 | | USBOTGSS_UTMI_OTG_STATUS_POWERPRESENT); | 264 | | USBOTGSS_UTMI_OTG_STATUS_POWERPRESENT); |
| 205 | val |= USBOTGSS_UTMI_OTG_STATUS_SESSEND | 265 | val |= USBOTGSS_UTMI_OTG_STATUS_SESSEND |
| 206 | | USBOTGSS_UTMI_OTG_STATUS_IDDIG; | 266 | | USBOTGSS_UTMI_OTG_STATUS_IDDIG; |
| 207 | dwc3_omap_writel(omap->base, USBOTGSS_UTMI_OTG_STATUS, val); | 267 | dwc3_omap_write_utmi_status(omap, val); |
| 208 | break; | 268 | break; |
| 209 | 269 | ||
| 210 | default: | 270 | default: |
| @@ -222,44 +282,45 @@ static irqreturn_t dwc3_omap_interrupt(int irq, void *_omap) | |||
| 222 | 282 | ||
| 223 | spin_lock(&omap->lock); | 283 | spin_lock(&omap->lock); |
| 224 | 284 | ||
| 225 | reg = dwc3_omap_readl(omap->base, USBOTGSS_IRQSTATUS_1); | 285 | reg = dwc3_omap_read_irqmisc_status(omap); |
