提交 53dd186b 编写于 作者: O Olof Johansson

Merge tag 'omap-for-v4.3/fixes-rc7' of...

Merge tag 'omap-for-v4.3/fixes-rc7' of git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap into fixes

Two omap regression fixes:

- Fix omap3 MUSB with DMA caused by driver core changes

- Fix LCD DMA interrupt number for omap1 that did not
  get changed for sparse IRQ changes

* tag 'omap-for-v4.3/fixes-rc7' of git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap:
  usb: musb: omap2430: Fix regression caused by driver core change
  ARM: OMAP1: fix incorrect INT_DMA_LCD
Signed-off-by: NOlof Johansson <olof@lixom.net>
...@@ -391,9 +391,20 @@ static int omap2430_musb_init(struct musb *musb) ...@@ -391,9 +391,20 @@ static int omap2430_musb_init(struct musb *musb)
} }
musb->isr = omap2430_musb_interrupt; musb->isr = omap2430_musb_interrupt;
/*
* Enable runtime PM for musb parent (this driver). We can't
* do it earlier as struct musb is not yet allocated and we
* need to touch the musb registers for runtime PM.
*/
pm_runtime_enable(glue->dev);
status = pm_runtime_get_sync(glue->dev);
if (status < 0)
goto err1;
status = pm_runtime_get_sync(dev); status = pm_runtime_get_sync(dev);
if (status < 0) { if (status < 0) {
dev_err(dev, "pm_runtime_get_sync FAILED %d\n", status); dev_err(dev, "pm_runtime_get_sync FAILED %d\n", status);
pm_runtime_put_sync(glue->dev);
goto err1; goto err1;
} }
...@@ -426,6 +437,7 @@ static int omap2430_musb_init(struct musb *musb) ...@@ -426,6 +437,7 @@ static int omap2430_musb_init(struct musb *musb)
phy_power_on(musb->phy); phy_power_on(musb->phy);
pm_runtime_put_noidle(musb->controller); pm_runtime_put_noidle(musb->controller);
pm_runtime_put_noidle(glue->dev);
return 0; return 0;
err1: err1:
...@@ -626,7 +638,11 @@ static int omap2430_probe(struct platform_device *pdev) ...@@ -626,7 +638,11 @@ static int omap2430_probe(struct platform_device *pdev)
goto err2; goto err2;
} }
pm_runtime_enable(&pdev->dev); /*
* Note that we cannot enable PM runtime yet for this
* driver as we need struct musb initialized first.
* See omap2430_musb_init above.
*/
ret = platform_device_add(musb); ret = platform_device_add(musb);
if (ret) { if (ret) {
...@@ -675,11 +691,12 @@ static int omap2430_runtime_resume(struct device *dev) ...@@ -675,11 +691,12 @@ static int omap2430_runtime_resume(struct device *dev)
struct omap2430_glue *glue = dev_get_drvdata(dev); struct omap2430_glue *glue = dev_get_drvdata(dev);
struct musb *musb = glue_to_musb(glue); struct musb *musb = glue_to_musb(glue);
if (musb) { if (!musb)
omap2430_low_level_init(musb); return -EPROBE_DEFER;
musb_writel(musb->mregs, OTG_INTERFSEL,
musb->context.otg_interfsel); omap2430_low_level_init(musb);
} musb_writel(musb->mregs, OTG_INTERFSEL,
musb->context.otg_interfsel);
return 0; return 0;
} }
......
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
#include <linux/platform_device.h> #include <linux/platform_device.h>
#define INT_DMA_LCD 25 #define INT_DMA_LCD (NR_IRQS_LEGACY + 25)
#define OMAP1_DMA_TOUT_IRQ (1 << 0) #define OMAP1_DMA_TOUT_IRQ (1 << 0)
#define OMAP_DMA_DROP_IRQ (1 << 1) #define OMAP_DMA_DROP_IRQ (1 << 1)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册