Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 303983
b: refs/heads/master
c: 7cbb062
h: refs/heads/master
i:
  303981: fe54895
  303979: e9213a7
  303975: d9913a2
  303967: db07ea6
v: v3
  • Loading branch information
Shinya Kuribayashi authored and Greg Kroah-Hartman committed May 17, 2012
1 parent aa69373 commit 0257a0d
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 1 deletion.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: ec1ac6e1690adf4087afdc706770cb6fb732157b
refs/heads/master: 7cbb062ade87b987a24aa834bbde32ad8374a4cf
33 changes: 33 additions & 0 deletions trunk/drivers/usb/otg/gpio_vbus.c
Original file line number Diff line number Diff line change
Expand Up @@ -327,6 +327,8 @@ static int __init gpio_vbus_probe(struct platform_device *pdev)
goto err_otg;
}

device_init_wakeup(&pdev->dev, pdata->wakeup);

return 0;
err_otg:
regulator_put(gpio_vbus->vbus_draw);
Expand All @@ -348,6 +350,7 @@ static int __exit gpio_vbus_remove(struct platform_device *pdev)
struct gpio_vbus_mach_info *pdata = pdev->dev.platform_data;
int gpio = pdata->gpio_vbus;

device_init_wakeup(&pdev->dev, 0);
cancel_delayed_work_sync(&gpio_vbus->work);
regulator_put(gpio_vbus->vbus_draw);

Expand All @@ -364,6 +367,33 @@ static int __exit gpio_vbus_remove(struct platform_device *pdev)
return 0;
}

#ifdef CONFIG_PM
static int gpio_vbus_pm_suspend(struct device *dev)
{
struct gpio_vbus_data *gpio_vbus = dev_get_drvdata(dev);

if (device_may_wakeup(dev))
enable_irq_wake(gpio_vbus->irq);

return 0;
}

static int gpio_vbus_pm_resume(struct device *dev)
{
struct gpio_vbus_data *gpio_vbus = dev_get_drvdata(dev);

if (device_may_wakeup(dev))
disable_irq_wake(gpio_vbus->irq);

return 0;
}

static const struct dev_pm_ops gpio_vbus_dev_pm_ops = {
.suspend = gpio_vbus_pm_suspend,
.resume = gpio_vbus_pm_resume,
};
#endif

/* NOTE: the gpio-vbus device may *NOT* be hotplugged */

MODULE_ALIAS("platform:gpio-vbus");
Expand All @@ -372,6 +402,9 @@ static struct platform_driver gpio_vbus_driver = {
.driver = {
.name = "gpio-vbus",
.owner = THIS_MODULE,
#ifdef CONFIG_PM
.pm = &gpio_vbus_dev_pm_ops,
#endif
},
.remove = __exit_p(gpio_vbus_remove),
};
Expand Down
2 changes: 2 additions & 0 deletions trunk/include/linux/usb/gpio_vbus.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
* @gpio_pullup: optional D+ or D- pullup GPIO (else negative/invalid)
* @gpio_vbus_inverted: true if gpio_vbus is active low
* @gpio_pullup_inverted: true if gpio_pullup is active low
* @wakeup: configure gpio_vbus as a wake-up source
*
* The VBUS sensing GPIO should have a pulldown, which will normally be
* part of a resistor ladder turning a 4.0V-5.25V level on VBUS into a
Expand All @@ -27,4 +28,5 @@ struct gpio_vbus_mach_info {
int gpio_pullup;
bool gpio_vbus_inverted;
bool gpio_pullup_inverted;
bool wakeup;
};

0 comments on commit 0257a0d

Please sign in to comment.