Merge tag 'driver-core-3.19-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git...
[linux-2.6-block.git] / drivers / usb / phy / phy-gpio-vbus-usb.c
index b5c368a9175fc770f10a61709b7cd282fd9894a0..f66120db8a41d5c6991c948a03f271059d86f3a9 100644 (file)
@@ -121,7 +121,7 @@ static void gpio_vbus_work(struct work_struct *work)
 
        if (vbus) {
                status = USB_EVENT_VBUS;
-               gpio_vbus->phy.state = OTG_STATE_B_PERIPHERAL;
+               gpio_vbus->phy.otg->state = OTG_STATE_B_PERIPHERAL;
                gpio_vbus->phy.last_event = status;
                usb_gadget_vbus_connect(gpio_vbus->phy.otg->gadget);
 
@@ -134,6 +134,7 @@ static void gpio_vbus_work(struct work_struct *work)
 
                atomic_notifier_call_chain(&gpio_vbus->phy.notifier,
                                           status, gpio_vbus->phy.otg->gadget);
+               usb_phy_set_event(&gpio_vbus->phy, USB_EVENT_ENUMERATED);
        } else {
                /* optionally disable D+ pullup */
                if (gpio_is_valid(gpio))
@@ -143,11 +144,12 @@ static void gpio_vbus_work(struct work_struct *work)
 
                usb_gadget_vbus_disconnect(gpio_vbus->phy.otg->gadget);
                status = USB_EVENT_NONE;
-               gpio_vbus->phy.state = OTG_STATE_B_IDLE;
+               gpio_vbus->phy.otg->state = OTG_STATE_B_IDLE;
                gpio_vbus->phy.last_event = status;
 
                atomic_notifier_call_chain(&gpio_vbus->phy.notifier,
                                           status, gpio_vbus->phy.otg->gadget);
+               usb_phy_set_event(&gpio_vbus->phy, USB_EVENT_NONE);
        }
 }
 
@@ -180,7 +182,7 @@ static int gpio_vbus_set_peripheral(struct usb_otg *otg,
        struct platform_device *pdev;
        int gpio;
 
-       gpio_vbus = container_of(otg->phy, struct gpio_vbus_data, phy);
+       gpio_vbus = container_of(otg->usb_phy, struct gpio_vbus_data, phy);
        pdev = to_platform_device(gpio_vbus->dev);
        pdata = dev_get_platdata(gpio_vbus->dev);
        gpio = pdata->gpio_pullup;
@@ -196,7 +198,7 @@ static int gpio_vbus_set_peripheral(struct usb_otg *otg,
                set_vbus_draw(gpio_vbus, 0);
 
                usb_gadget_vbus_disconnect(otg->gadget);
-               otg->phy->state = OTG_STATE_UNDEFINED;
+               otg->state = OTG_STATE_UNDEFINED;
 
                otg->gadget = NULL;
                return 0;
@@ -218,7 +220,7 @@ static int gpio_vbus_set_power(struct usb_phy *phy, unsigned mA)
 
        gpio_vbus = container_of(phy, struct gpio_vbus_data, phy);
 
-       if (phy->state == OTG_STATE_B_PERIPHERAL)
+       if (phy->otg->state == OTG_STATE_B_PERIPHERAL)
                set_vbus_draw(gpio_vbus, mA);
        return 0;
 }
@@ -269,9 +271,9 @@ static int gpio_vbus_probe(struct platform_device *pdev)
        gpio_vbus->phy.dev = gpio_vbus->dev;
        gpio_vbus->phy.set_power = gpio_vbus_set_power;
        gpio_vbus->phy.set_suspend = gpio_vbus_set_suspend;
-       gpio_vbus->phy.state = OTG_STATE_UNDEFINED;
 
-       gpio_vbus->phy.otg->phy = &gpio_vbus->phy;
+       gpio_vbus->phy.otg->state = OTG_STATE_UNDEFINED;
+       gpio_vbus->phy.otg->usb_phy = &gpio_vbus->phy;
        gpio_vbus->phy.otg->set_peripheral = gpio_vbus_set_peripheral;
 
        err = devm_gpio_request(&pdev->dev, gpio, "vbus_detect");