diff options
author | Ruchika Kharwar | 2013-07-11 15:57:00 -0500 |
---|---|---|
committer | Praneeth Bajjuri | 2013-07-19 13:09:41 -0500 |
commit | 19c7081f123b2b86c4bfe612b6989d476863c913 (patch) | |
tree | cfaa9edf9ea5077bedeb12bc830be3d995b3cbbd | |
parent | cf5266661bb698edbb4a63defad8e205472db9d4 (diff) | |
download | kernel-audio-19c7081f123b2b86c4bfe612b6989d476863c913.tar.gz kernel-audio-19c7081f123b2b86c4bfe612b6989d476863c913.tar.xz kernel-audio-19c7081f123b2b86c4bfe612b6989d476863c913.zip |
HACK: usb: dwc3: dwc3 wrapper update for multiple usb subsystems
Allow a separate dma mask per usb_otg_ss instance.
REVISIT: This is based on the name of the node in the device tree and ugly.
Temporary to get DRA7xx going and hardly scalable.
"_omap" global still exists and the only reason his works is because dra7xx
does not use the palmas driver.
Change-Id: Iff9d09e837c1556516c28c42f7a3f41a2315befc
Signed-off-by: Ruchika Kharwar <ruchika@ti.com>
-rw-r--r-- | drivers/usb/dwc3/dwc3-omap.c | 36 | ||||
-rw-r--r-- | drivers/usb/otg/palmas-usb.c | 4 | ||||
-rw-r--r-- | include/linux/usb/dwc3-omap.h | 4 |
3 files changed, 37 insertions, 7 deletions
diff --git a/drivers/usb/dwc3/dwc3-omap.c b/drivers/usb/dwc3/dwc3-omap.c index 062f0159e632..e4a9dbe8cbc6 100644 --- a/drivers/usb/dwc3/dwc3-omap.c +++ b/drivers/usb/dwc3/dwc3-omap.c | |||
@@ -139,10 +139,17 @@ static inline void dwc3_omap_writel(void __iomem *base, u32 offset, u32 value) | |||
139 | writel(value, base + offset); | 139 | writel(value, base + offset); |
140 | } | 140 | } |
141 | 141 | ||
142 | int dwc3_omap_mailbox(enum omap_dwc3_vbus_id_status status) | 142 | int dwc3_omap_mailbox(struct device *dev, enum omap_dwc3_vbus_id_status status) |
143 | { | 143 | { |
144 | u32 val; | 144 | u32 val; |
145 | struct dwc3_omap *omap = _omap; | 145 | struct platform_device *pdev; |
146 | struct dwc3_omap *omap; | ||
147 | |||
148 | if (dev) { /* i.e. this is being called from a non palmas driver */ | ||
149 | pdev = to_platform_device(dev); | ||
150 | omap = platform_get_drvdata(pdev); | ||
151 | } else /* This is being invoked by palmas and the global is needed */ | ||
152 | omap = _omap; | ||
146 | 153 | ||
147 | if (!omap) { | 154 | if (!omap) { |
148 | dev_dbg(omap->dev, "not ready , deferring\n"); | 155 | dev_dbg(omap->dev, "not ready , deferring\n"); |
@@ -262,6 +269,22 @@ static int dwc3_omap_set_dmamask(struct device *dev, void *c) | |||
262 | return 0; | 269 | return 0; |
263 | } | 270 | } |
264 | 271 | ||
272 | static u64 dwc3_omap_dma_mask1 = DMA_BIT_MASK(32); | ||
273 | |||
274 | static int dwc3_omap_set_dmamask1(struct device *dev, void *c) | ||
275 | { | ||
276 | dev->dma_mask = &dwc3_omap_dma_mask1; | ||
277 | return 0; | ||
278 | } | ||
279 | |||
280 | static u64 dwc3_omap_dma_mask2 = DMA_BIT_MASK(32); | ||
281 | |||
282 | static int dwc3_omap_set_dmamask2(struct device *dev, void *c) | ||
283 | { | ||
284 | dev->dma_mask = &dwc3_omap_dma_mask2; | ||
285 | return 0; | ||
286 | } | ||
287 | |||
265 | static int dwc3_omap_probe(struct platform_device *pdev) | 288 | static int dwc3_omap_probe(struct platform_device *pdev) |
266 | { | 289 | { |
267 | struct device_node *node = pdev->dev.of_node; | 290 | struct device_node *node = pdev->dev.of_node; |
@@ -389,7 +412,14 @@ static int dwc3_omap_probe(struct platform_device *pdev) | |||
389 | return ret; | 412 | return ret; |
390 | } | 413 | } |
391 | 414 | ||
392 | device_for_each_child(&pdev->dev, NULL, dwc3_omap_set_dmamask); | 415 | if (strstr(dev_name(dev), "omap_dwc31") != NULL) |
416 | device_for_each_child(&pdev->dev, NULL, dwc3_omap_set_dmamask1); | ||
417 | else | ||
418 | if (strstr(dev_name(dev), "omap_dwc32") != NULL) | ||
419 | device_for_each_child(&pdev->dev, NULL, dwc3_omap_set_dmamask2); | ||
420 | else | ||
421 | if (strstr(dev_name(dev), "omap_dwc3") != NULL) | ||
422 | device_for_each_child(&pdev->dev, NULL, dwc3_omap_set_dmamask); | ||
393 | 423 | ||
394 | return 0; | 424 | return 0; |
395 | } | 425 | } |
diff --git a/drivers/usb/otg/palmas-usb.c b/drivers/usb/otg/palmas-usb.c index d1de01bd1123..3881cd19821c 100644 --- a/drivers/usb/otg/palmas-usb.c +++ b/drivers/usb/otg/palmas-usb.c | |||
@@ -136,7 +136,7 @@ static irqreturn_t palmas_vbus_wakeup_irq(int irq, void *_palmas_usb) | |||
136 | 136 | ||
137 | palmas_usb->linkstat = status; | 137 | palmas_usb->linkstat = status; |
138 | if (status != OMAP_DWC3_UNKNOWN) { | 138 | if (status != OMAP_DWC3_UNKNOWN) { |
139 | ret = dwc3_omap_mailbox(status); | 139 | ret = dwc3_omap_mailbox(NULL, status); |
140 | if (!ret) | 140 | if (!ret) |
141 | ret = IRQ_HANDLED; | 141 | ret = IRQ_HANDLED; |
142 | } | 142 | } |
@@ -179,7 +179,7 @@ static irqreturn_t palmas_id_wakeup_irq(int irq, void *_palmas_usb) | |||
179 | 179 | ||
180 | palmas_usb->linkstat = status; | 180 | palmas_usb->linkstat = status; |
181 | if (status != OMAP_DWC3_UNKNOWN) { | 181 | if (status != OMAP_DWC3_UNKNOWN) { |
182 | ret = dwc3_omap_mailbox(status); | 182 | ret = dwc3_omap_mailbox(NULL, status); |
183 | if (!ret) | 183 | if (!ret) |
184 | ret = IRQ_HANDLED; | 184 | ret = IRQ_HANDLED; |
185 | } | 185 | } |
diff --git a/include/linux/usb/dwc3-omap.h b/include/linux/usb/dwc3-omap.h index 5615f4d82724..64c78a56d4bb 100644 --- a/include/linux/usb/dwc3-omap.h +++ b/include/linux/usb/dwc3-omap.h | |||
@@ -19,9 +19,9 @@ enum omap_dwc3_vbus_id_status { | |||
19 | }; | 19 | }; |
20 | 20 | ||
21 | #if (defined(CONFIG_USB_DWC3) || defined(CONFIG_USB_DWC3_MODULE)) | 21 | #if (defined(CONFIG_USB_DWC3) || defined(CONFIG_USB_DWC3_MODULE)) |
22 | extern int dwc3_omap_mailbox(enum omap_dwc3_vbus_id_status status); | 22 | extern int dwc3_omap_mailbox(struct device *dev, enum omap_dwc3_vbus_id_status status); |
23 | #else | 23 | #else |
24 | static inline int dwc3_omap_mailbox(enum omap_dwc3_vbus_id_status status) | 24 | static inline int dwc3_omap_mailbox(struct device *dev, enum omap_dwc3_vbus_id_status status) |
25 | { | 25 | { |
26 | return -ENODEV; | 26 | return -ENODEV; |
27 | } | 27 | } |