Commit fcd22e3b authored by Felipe Balbi's avatar Felipe Balbi

usb: musb: blackfin: usb dev_pm_ops structure

instead of using musb_platform_suspend_resume,
we can use dev_pm_ops and let platform_device
core handle when to call musb_core's suspend and
glue layer's suspend.
Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
parent 6f783e28
...@@ -27,6 +27,7 @@ struct bfin_glue { ...@@ -27,6 +27,7 @@ struct bfin_glue {
struct device *dev; struct device *dev;
struct platform_device *musb; struct platform_device *musb;
}; };
#define glue_to_musb(g) platform_get_drvdata(g->musb)
/* /*
* Load an endpoint's FIFO * Load an endpoint's FIFO
...@@ -406,27 +407,6 @@ static int bfin_musb_init(struct musb *musb) ...@@ -406,27 +407,6 @@ static int bfin_musb_init(struct musb *musb)
return 0; return 0;
} }
static int bfin_musb_suspend(struct musb *musb)
{
if (is_host_active(musb))
/*
* During hibernate gpio_vrsel will change from high to low
* low which will generate wakeup event resume the system
* immediately. Set it to 0 before hibernate to avoid this
* wakeup event.
*/
gpio_set_value(musb->config->gpio_vrsel, 0);
return 0;
}
static int bfin_musb_resume(struct musb *musb)
{
bfin_musb_reg_init(musb);
return 0;
}
static int bfin_musb_exit(struct musb *musb) static int bfin_musb_exit(struct musb *musb)
{ {
gpio_free(musb->config->gpio_vrsel); gpio_free(musb->config->gpio_vrsel);
...@@ -446,9 +426,6 @@ static const struct musb_platform_ops bfin_ops = { ...@@ -446,9 +426,6 @@ static const struct musb_platform_ops bfin_ops = {
.set_mode = bfin_musb_set_mode, .set_mode = bfin_musb_set_mode,
.try_idle = bfin_musb_try_idle, .try_idle = bfin_musb_try_idle,
.suspend = bfin_musb_suspend,
.resume = bfin_musb_resume,
.vbus_status = bfin_musb_vbus_status, .vbus_status = bfin_musb_vbus_status,
.set_vbus = bfin_musb_set_vbus, .set_vbus = bfin_musb_set_vbus,
}; };
...@@ -528,10 +505,49 @@ static int __exit bfin_remove(struct platform_device *pdev) ...@@ -528,10 +505,49 @@ static int __exit bfin_remove(struct platform_device *pdev)
return 0; return 0;
} }
#ifdef CONFIG_PM
static int bfin_suspend(struct device *dev)
{
struct bfin_glue *glue = dev_get_drvdata(dev);
struct musb *musb = glue_to_musb(glue);
if (is_host_active(musb))
/*
* During hibernate gpio_vrsel will change from high to low
* low which will generate wakeup event resume the system
* immediately. Set it to 0 before hibernate to avoid this
* wakeup event.
*/
gpio_set_value(musb->config->gpio_vrsel, 0);
return 0;
}
static int bfin_resume(struct device *dev)
{
struct bfin_glue *glue = dev_get_drvdata(dev);
struct musb *musb = glue_to_musb(glue);
bfin_musb_reg_init(musb);
return 0;
}
static struct dev_pm_ops bfin_pm_ops = {
.suspend = bfin_suspend,
.resume = bfin_resume,
};
#define DEV_PM_OPS &bfin_pm_op,
#else
#define DEV_PM_OPS NULL
#endif
static struct platform_driver bfin_driver = { static struct platform_driver bfin_driver = {
.remove = __exit_p(bfin_remove), .remove = __exit_p(bfin_remove),
.driver = { .driver = {
.name = "musb-bfin", .name = "musb-bfin",
.pm = DEV_PM_OPS,
}, },
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment