Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fcd22e3b authored by Felipe Balbi's avatar Felipe Balbi
Browse files

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
Loading
Loading
Loading
Loading
+40 −24
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@ struct bfin_glue {
	struct device		*dev;
	struct platform_device	*musb;
};
#define glue_to_musb(g)		platform_get_drvdata(g->musb)

/*
 * Load an endpoint's FIFO
@@ -406,27 +407,6 @@ static int bfin_musb_init(struct musb *musb)
	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)
{
	gpio_free(musb->config->gpio_vrsel);
@@ -446,9 +426,6 @@ static const struct musb_platform_ops bfin_ops = {
	.set_mode	= bfin_musb_set_mode,
	.try_idle	= bfin_musb_try_idle,

	.suspend	= bfin_musb_suspend,
	.resume		= bfin_musb_resume,

	.vbus_status	= bfin_musb_vbus_status,
	.set_vbus	= bfin_musb_set_vbus,
};
@@ -528,10 +505,49 @@ static int __exit bfin_remove(struct platform_device *pdev)
	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 = {
	.remove		= __exit_p(bfin_remove),
	.driver		= {
		.name	= "musb-bfin",
		.pm	= DEV_PM_OPS,
	},
};