usb: gadget: langwell: don't use the_controller when it's not needed
[pandora-kernel.git] / drivers / usb / gadget / langwell_udc.c
index 6e44499..444bd11 100644 (file)
@@ -1551,7 +1551,7 @@ static void stop_activity(struct langwell_udc *dev,
 static ssize_t show_function(struct device *_dev,
                struct device_attribute *attr, char *buf)
 {
-       struct langwell_udc     *dev = the_controller;
+       struct langwell_udc     *dev = dev_get_drvdata(_dev);
 
        if (!dev->driver || !dev->driver->function
                        || strlen(dev->driver->function) > PAGE_SIZE)
@@ -1562,11 +1562,25 @@ static ssize_t show_function(struct device *_dev,
 static DEVICE_ATTR(function, S_IRUGO, show_function, NULL);
 
 
+static inline enum usb_device_speed lpm_device_speed(u32 reg)
+{
+       switch (LPM_PSPD(reg)) {
+       case LPM_SPEED_HIGH:
+               return USB_SPEED_HIGH;
+       case LPM_SPEED_FULL:
+               return USB_SPEED_FULL;
+       case LPM_SPEED_LOW:
+               return USB_SPEED_LOW;
+       default:
+               return USB_SPEED_UNKNOWN;
+       }
+}
+
 /* device "langwell_udc" sysfs attribute file */
 static ssize_t show_langwell_udc(struct device *_dev,
                struct device_attribute *attr, char *buf)
 {
-       struct langwell_udc     *dev = the_controller;
+       struct langwell_udc     *dev = dev_get_drvdata(_dev);
        struct langwell_request *req;
        struct langwell_ep      *ep = NULL;
        char                    *next;
@@ -1690,20 +1704,7 @@ static ssize_t show_langwell_udc(struct device *_dev,
                "BmAttributes: %d\n\n",
                LPM_PTS(tmp_reg),
                (tmp_reg & LPM_STS) ? 1 : 0,
-               ({
-                       char    *s;
-                       switch (LPM_PSPD(tmp_reg)) {
-                       case LPM_SPEED_FULL:
-                               s = "Full Speed"; break;
-                       case LPM_SPEED_LOW:
-                               s = "Low Speed"; break;
-                       case LPM_SPEED_HIGH:
-                               s = "High Speed"; break;
-                       default:
-                               s = "Unknown Speed"; break;
-                       }
-                       s;
-               }),
+               usb_speed_string(lpm_device_speed(tmp_reg)),
                (tmp_reg & LPM_PFSC) ? "Force Full Speed" : "Not Force",
                (tmp_reg & LPM_PHCD) ? "Disabled" : "Enabled",
                LPM_BA(tmp_reg));
@@ -1811,7 +1812,7 @@ static DEVICE_ATTR(langwell_udc, S_IRUGO, show_langwell_udc, NULL);
 static ssize_t store_remote_wakeup(struct device *_dev,
                struct device_attribute *attr, const char *buf, size_t count)
 {
-       struct langwell_udc     *dev = the_controller;
+       struct langwell_udc     *dev = dev_get_drvdata(_dev);
        unsigned long           flags;
        ssize_t                 rc = count;
 
@@ -2647,12 +2648,10 @@ done:
        dev_vdbg(&dev->pdev->dev, "<--- %s()\n", __func__);
 }
 
-
 /* port change detect interrupt handler */
 static void handle_port_change(struct langwell_udc *dev)
 {
        u32     portsc1, devlc;
-       u32     speed;
 
        dev_vdbg(&dev->pdev->dev, "---> %s()\n", __func__);
 
@@ -2667,24 +2666,9 @@ static void handle_port_change(struct langwell_udc *dev)
        /* bus reset is finished */
        if (!(portsc1 & PORTS_PR)) {
                /* get the speed */
-               speed = LPM_PSPD(devlc);
-               switch (speed) {
-               case LPM_SPEED_HIGH:
-                       dev->gadget.speed = USB_SPEED_HIGH;
-                       break;
-               case LPM_SPEED_FULL:
-                       dev->gadget.speed = USB_SPEED_FULL;
-                       break;
-               case LPM_SPEED_LOW:
-                       dev->gadget.speed = USB_SPEED_LOW;
-                       break;
-               default:
-                       dev->gadget.speed = USB_SPEED_UNKNOWN;
-                       break;
-               }
-               dev_vdbg(&dev->pdev->dev,
-                               "speed = %d, dev->gadget.speed = %d\n",
-                               speed, dev->gadget.speed);
+               dev->gadget.speed = lpm_device_speed(devlc);
+               dev_vdbg(&dev->pdev->dev, "dev->gadget.speed = %d\n",
+                       dev->gadget.speed);
        }
 
        /* LPM L0 to L1 */
@@ -2989,7 +2973,7 @@ static irqreturn_t langwell_irq(int irq, void *_dev)
 /* release device structure */
 static void gadget_release(struct device *_dev)
 {
-       struct langwell_udc     *dev = the_controller;
+       struct langwell_udc     *dev = dev_get_drvdata(_dev);
 
        dev_dbg(&dev->pdev->dev, "---> %s()\n", __func__);
 
@@ -3047,7 +3031,7 @@ static void sram_deinit(struct langwell_udc *dev)
 /* tear down the binding between this driver and the pci device */
 static void langwell_udc_remove(struct pci_dev *pdev)
 {
-       struct langwell_udc     *dev = the_controller;
+       struct langwell_udc     *dev = pci_get_drvdata(pdev);
 
        DECLARE_COMPLETION(done);
 
@@ -3394,7 +3378,7 @@ error:
 /* device controller suspend */
 static int langwell_udc_suspend(struct pci_dev *pdev, pm_message_t state)
 {
-       struct langwell_udc     *dev = the_controller;
+       struct langwell_udc     *dev = pci_get_drvdata(pdev);
 
        dev_dbg(&dev->pdev->dev, "---> %s()\n", __func__);
 
@@ -3442,7 +3426,7 @@ static int langwell_udc_suspend(struct pci_dev *pdev, pm_message_t state)
 /* device controller resume */
 static int langwell_udc_resume(struct pci_dev *pdev)
 {
-       struct langwell_udc     *dev = the_controller;
+       struct langwell_udc     *dev = pci_get_drvdata(pdev);
        size_t                  size;
 
        dev_dbg(&dev->pdev->dev, "---> %s()\n", __func__);
@@ -3524,7 +3508,7 @@ static int langwell_udc_resume(struct pci_dev *pdev)
 /* pci driver shutdown */
 static void langwell_udc_shutdown(struct pci_dev *pdev)
 {
-       struct langwell_udc     *dev = the_controller;
+       struct langwell_udc     *dev = pci_get_drvdata(pdev);
        u32                     usbmode;
 
        dev_dbg(&dev->pdev->dev, "---> %s()\n", __func__);