On Tue, Mar 05, 2013 at 08:48:24PM +0530, kishon wrote: > Hi, > > On Tuesday 05 March 2013 08:36 PM, Felipe Balbi wrote: > >On Tue, Mar 05, 2013 at 08:31:58PM +0530, kishon wrote: > >>Hi, > >> > >>On Tuesday 05 March 2013 08:26 PM, Felipe Balbi wrote: > >>>On Tue, Mar 05, 2013 at 07:51:58PM +0530, Kishon Vijay Abraham I wrote: > >>>>return -EPROBE_DEFER from dwc3_omap_mailbox in dwc3-omap.c, if the probe of > >>>>dwc3-omap has not yet been executed or failed. > >>>> > >>>>Signed-off-by: Kishon Vijay Abraham I <kishon@xxxxxx> > >>>>--- > >>>> drivers/usb/dwc3/dwc3-omap.c | 7 +++++-- > >>>> include/linux/usb/dwc3-omap.h | 6 +++--- > >>>> 2 files changed, 8 insertions(+), 5 deletions(-) > >>>> > >>>>diff --git a/drivers/usb/dwc3/dwc3-omap.c b/drivers/usb/dwc3/dwc3-omap.c > >>>>index 19c6e72..9428f4e 100644 > >>>>--- a/drivers/usb/dwc3/dwc3-omap.c > >>>>+++ b/drivers/usb/dwc3/dwc3-omap.c > >>>>@@ -138,11 +138,14 @@ static inline void dwc3_omap_writel(void __iomem *base, u32 offset, u32 value) > >>>> writel(value, base + offset); > >>>> } > >>>> > >>>>-void dwc3_omap_mailbox(enum omap_dwc3_vbus_id_status status) > >>>>+int dwc3_omap_mailbox(enum omap_dwc3_vbus_id_status status) > >>>> { > >>>> u32 val; > >>>> struct dwc3_omap *omap = _omap; > >>>> > >>>>+ if (!omap) > >>>>+ return -EPROBE_DEFER; > >>>>+ > >>>> switch (status) { > >>>> case OMAP_DWC3_ID_GROUND: > >>>> dev_dbg(omap->dev, "ID GND\n"); > >>>>@@ -185,7 +188,7 @@ void dwc3_omap_mailbox(enum omap_dwc3_vbus_id_status status) > >>>> dev_dbg(omap->dev, "ID float\n"); > >>>> } > >>>> > >>>>- return; > >>>>+ return IRQ_HANDLED; > >>> > >>>IRQ_HANDLED ???? > >> > >>Actually I did it that way since palmas_vbus_wakeup_irq can directly > >>return the return value from dwc3_omap_mailbox. If this seems hacky > >>to you, I'll change it. > > > >it does seem hacky :-) Try something like: > > > >ret = dwc3_omap_mailbox(); > >if (ret) > > print_error(); > > > >return IRQ_HANDLED; > > hmm.. But there is one case where palmas_vbus_wakeup_irq should > return EPROBE_DEFER. In the cold plug case, if palmas gets loaded > before dwc3-omap, omap in dwc3_omap_mailbox will be NULL. So ideally > palmas should be probed after dwc3-omap for this case. Returning > IRQ_HANDLED or IRQ_NONE wont help here. you can return IRQ_HANDLED but don't clear the IRQ status bits, which will make the IRQ retrigger, right ? If you return -EPROBE_DEFER from within the IRQ handler, what will happen ? IRQ subsystem only understands IRQ_NONE, IRQ_WAKE_THREAD, and IRQ_HANDLED. How do you suppose it will treat -EPROBE_DEFER ? -- balbi
Attachment:
signature.asc
Description: Digital signature