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

Commit 6f783e28 authored by Felipe Balbi's avatar Felipe Balbi
Browse files

usb: musb: am35x: 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 c20aebb9
Loading
Loading
Loading
Loading
+45 −17
Original line number Diff line number Diff line
@@ -88,6 +88,7 @@ struct am35x_glue {
	struct clk		*phy_clk;
	struct clk		*clk;
};
#define glue_to_musb(g)		platform_get_drvdata(g->musb)

static inline void phy_on(void)
{
@@ -462,20 +463,6 @@ static int am35x_musb_exit(struct musb *musb)
	return 0;
}

static int am35x_musb_suspend(struct musb *musb)
{
	phy_off();

	return 0;
}

static int am35x_musb_resume(struct musb *musb)
{
	phy_on();

	return 0;
}

/* AM35x supports only 32bit read operation */
void musb_read_fifo(struct musb_hw_ep *hw_ep, u16 len, u8 *dst)
{
@@ -516,9 +503,6 @@ static const struct musb_platform_ops am35x_ops = {
	.set_mode	= am35x_musb_set_mode,
	.try_idle	= am35x_musb_try_idle,

	.suspend	= am35x_musb_suspend,
	.resume		= am35x_musb_resume,

	.set_vbus	= am35x_musb_set_vbus,
};

@@ -644,10 +628,54 @@ static int __exit am35x_remove(struct platform_device *pdev)
	return 0;
}

#ifdef CONFIG_PM
static int am35x_suspend(struct device *dev)
{
	struct am35x_glue	*glue = dev_get_drvdata(dev);

	phy_off();
	clk_disable(glue->phy_clk);
	clk_disable(glue->clk);

	return 0;
}

static int am35x_resume(struct device *dev)
{
	struct am35x_glue	*glue = dev_get_drvdata(dev);
	int			ret;

	phy_on();
	ret = clk_enable(glue->phy_clk);
	if (ret) {
		dev_err(dev, "failed to enable PHY clock\n");
		return ret;
	}

	ret = clk_enable(glue->clk);
	if (ret) {
		dev_err(dev, "failed to enable clock\n");
		return ret;
	}

	return 0;
}

static struct dev_pm_ops am35x_pm_ops = {
	.suspend	= am35x_suspend,
	.resume		= am35x_resume,
};

#define DEV_PM_OPS	&am35x_pm_ops
#else
#define DEV_PM_OPS	NULL
#endif

static struct platform_driver am35x_driver = {
	.remove		= __exit_p(am35x_remove),
	.driver		= {
		.name	= "musb-am35x",
		.pm	= DEV_PM_OPS,
	},
};