aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorGeorge Cherian <george.cherian@ti.com>2013-06-12 05:23:47 -0400
committerFelipe Balbi <balbi@ti.com>2013-06-12 16:57:13 -0400
commitb1fd6cb5ee2f97a553d1c4b8a88914bd970daf37 (patch)
tree1914628bc04ac0b30eaca3a3097330a8b99366dd /drivers
parentff7307b534258c8864c356d15c52a84d0a5fbb35 (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.c173
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
172static 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
178static 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
185static 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
191static 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
198static 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
204static 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
211static 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
218static 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
164int dwc3_omap_mailbox(enum omap_dwc3_vbus_id_status status) 224int 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);