diff options
author | Shimoda, Yoshihiro <yoshihiro.shimoda.uh@renesas.com> | 2012-01-05 01:37:18 -0500 |
---|---|---|
committer | Felipe Balbi <balbi@ti.com> | 2012-01-24 04:32:56 -0500 |
commit | 53069af3fa8ba2849cd4785160690873995d4f39 (patch) | |
tree | d3b834678d59e2b6b6c1a0a4a39cfe4e2c2b0f85 | |
parent | 10800f2ca1a78e24cf92dc5e16a68a9b78f91bbe (diff) |
usb: renesas_usbhs: add IRQ resource decoding for IRQF_SHARED
In case of the SH7757, the irq number of USB module and SUDMAC
are the same. So, we have to set the IRQF_SHARED in such a case.
Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
Signed-off-by: Felipe Balbi <balbi@ti.com>
-rw-r--r-- | drivers/usb/renesas_usbhs/common.c | 11 | ||||
-rw-r--r-- | drivers/usb/renesas_usbhs/common.h | 1 | ||||
-rw-r--r-- | drivers/usb/renesas_usbhs/mod.c | 2 |
3 files changed, 8 insertions, 6 deletions
diff --git a/drivers/usb/renesas_usbhs/common.c b/drivers/usb/renesas_usbhs/common.c index e9a5b1d2615e..a165490bae48 100644 --- a/drivers/usb/renesas_usbhs/common.c +++ b/drivers/usb/renesas_usbhs/common.c | |||
@@ -413,8 +413,7 @@ static int usbhs_probe(struct platform_device *pdev) | |||
413 | struct renesas_usbhs_platform_info *info = pdev->dev.platform_data; | 413 | struct renesas_usbhs_platform_info *info = pdev->dev.platform_data; |
414 | struct renesas_usbhs_driver_callback *dfunc; | 414 | struct renesas_usbhs_driver_callback *dfunc; |
415 | struct usbhs_priv *priv; | 415 | struct usbhs_priv *priv; |
416 | struct resource *res; | 416 | struct resource *res, *irq_res; |
417 | unsigned int irq; | ||
418 | int ret; | 417 | int ret; |
419 | 418 | ||
420 | /* check platform information */ | 419 | /* check platform information */ |
@@ -426,8 +425,8 @@ static int usbhs_probe(struct platform_device *pdev) | |||
426 | 425 | ||
427 | /* platform data */ | 426 | /* platform data */ |
428 | res = platform_get_resource(pdev, IORESOURCE_MEM, 0); | 427 | res = platform_get_resource(pdev, IORESOURCE_MEM, 0); |
429 | irq = platform_get_irq(pdev, 0); | 428 | irq_res = platform_get_resource(pdev, IORESOURCE_IRQ, 0); |
430 | if (!res || (int)irq <= 0) { | 429 | if (!res || !irq_res) { |
431 | dev_err(&pdev->dev, "Not enough Renesas USB platform resources.\n"); | 430 | dev_err(&pdev->dev, "Not enough Renesas USB platform resources.\n"); |
432 | return -ENODEV; | 431 | return -ENODEV; |
433 | } | 432 | } |
@@ -476,7 +475,9 @@ static int usbhs_probe(struct platform_device *pdev) | |||
476 | /* | 475 | /* |
477 | * priv settings | 476 | * priv settings |
478 | */ | 477 | */ |
479 | priv->irq = irq; | 478 | priv->irq = irq_res->start; |
479 | if (irq_res->flags & IORESOURCE_IRQ_SHAREABLE) | ||
480 | priv->irqflags = IRQF_SHARED; | ||
480 | priv->pdev = pdev; | 481 | priv->pdev = pdev; |
481 | INIT_DELAYED_WORK(&priv->notify_hotplug_work, usbhsc_notify_hotplug); | 482 | INIT_DELAYED_WORK(&priv->notify_hotplug_work, usbhsc_notify_hotplug); |
482 | spin_lock_init(usbhs_priv_to_lock(priv)); | 483 | spin_lock_init(usbhs_priv_to_lock(priv)); |
diff --git a/drivers/usb/renesas_usbhs/common.h b/drivers/usb/renesas_usbhs/common.h index d79b3e27db95..3f3ccd358753 100644 --- a/drivers/usb/renesas_usbhs/common.h +++ b/drivers/usb/renesas_usbhs/common.h | |||
@@ -242,6 +242,7 @@ struct usbhs_priv { | |||
242 | 242 | ||
243 | void __iomem *base; | 243 | void __iomem *base; |
244 | unsigned int irq; | 244 | unsigned int irq; |
245 | unsigned long irqflags; | ||
245 | 246 | ||
246 | struct renesas_usbhs_platform_callback pfunc; | 247 | struct renesas_usbhs_platform_callback pfunc; |
247 | struct renesas_usbhs_driver_param dparam; | 248 | struct renesas_usbhs_driver_param dparam; |
diff --git a/drivers/usb/renesas_usbhs/mod.c b/drivers/usb/renesas_usbhs/mod.c index 1b97fb12694b..0871e816df45 100644 --- a/drivers/usb/renesas_usbhs/mod.c +++ b/drivers/usb/renesas_usbhs/mod.c | |||
@@ -152,7 +152,7 @@ int usbhs_mod_probe(struct usbhs_priv *priv) | |||
152 | 152 | ||
153 | /* irq settings */ | 153 | /* irq settings */ |
154 | ret = request_irq(priv->irq, usbhs_interrupt, | 154 | ret = request_irq(priv->irq, usbhs_interrupt, |
155 | 0, dev_name(dev), priv); | 155 | priv->irqflags, dev_name(dev), priv); |
156 | if (ret) { | 156 | if (ret) { |
157 | dev_err(dev, "irq request err\n"); | 157 | dev_err(dev, "irq request err\n"); |
158 | goto mod_init_gadget_err; | 158 | goto mod_init_gadget_err; |