usb: musb: fix kernel panic during s2ram(v2)
authorMing Lei <tom.leiming@gmail.com>
Tue, 21 Dec 2010 13:16:11 +0000 (21:16 +0800)
committerFelipe Balbi <balbi@ti.com>
Tue, 1 Feb 2011 08:41:29 +0000 (10:41 +0200)
This patch fixes kernel panic during s2ram, which is caused
by the below:

- musb is not put into drv data of musb platform device if
CONFIG_USB_MUSB_HDRC_HCD is defined

- glue layer driver always get musb instance via platform_get_drvdata.

The patch fixes the issue by always puting musb into drv data
of musb platform device, which is doable even the platform device
is a host controller device.

Cc: Alan Stern <stern@rowland.harvard.edu>
Cc: Sergei Shtylyov <sshtylyov@mvista.com>
Signed-off-by: Ming Lei <tom.leiming@gmail.com>
Signed-off-by: Felipe Balbi <balbi@ti.com>
drivers/usb/musb/musb_core.c

index 07cf394e491b01bddc5bd84fdcbc31016c174655..12b515b3b69ef25ef8d18117f4201e5758a6e2cf 100644 (file)
@@ -128,12 +128,7 @@ MODULE_ALIAS("platform:" MUSB_DRIVER_NAME);
 
 static inline struct musb *dev_to_musb(struct device *dev)
 {
-#ifdef CONFIG_USB_MUSB_HDRC_HCD
-       /* usbcore insists dev->driver_data is a "struct hcd *" */
-       return hcd_to_musb(dev_get_drvdata(dev));
-#else
        return dev_get_drvdata(dev);
-#endif
 }
 
 /*-------------------------------------------------------------------------*/
@@ -1876,10 +1871,9 @@ allocate_instance(struct device *dev,
        musb = kzalloc(sizeof *musb, GFP_KERNEL);
        if (!musb)
                return NULL;
-       dev_set_drvdata(dev, musb);
 
 #endif
-
+       dev_set_drvdata(dev, musb);
        musb->mregs = mbase;
        musb->ctrl_base = mbase;
        musb->nIrq = -ENODEV;