Commit 450857c6 authored by Xu Yang's avatar Xu Yang Committed by Greg Kroah-Hartman
Browse files

usb: chipidea: core: handle suspend/resume for each role



There may be a need to handle suspend/resume per role. This patch
will add this support.

Signed-off-by: default avatarXu Yang <xu.yang_2@nxp.com>
Acked-by: default avatarPeter Chen <peter.chen@kernel.org>
Link: https://lore.kernel.org/r/20221013151442.3262951-3-xu.yang_2@nxp.com


Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 74494b33
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -127,12 +127,16 @@ enum ci_revision {
 * struct ci_role_driver - host/gadget role driver
 * @start: start this role
 * @stop: stop this role
 * @suspend: system suspend handler for this role
 * @resume: system resume handler for this role
 * @irq: irq handler for this role
 * @name: role name string (host/gadget)
 */
struct ci_role_driver {
	int		(*start)(struct ci_hdrc *);
	void		(*stop)(struct ci_hdrc *);
	void		(*suspend)(struct ci_hdrc *ci);
	void		(*resume)(struct ci_hdrc *ci, bool power_lost);
	irqreturn_t	(*irq)(struct ci_hdrc *);
	const char	*name;
};
+8 −0
Original line number Diff line number Diff line
@@ -1383,6 +1383,10 @@ static int ci_suspend(struct device *dev)
		return 0;
	}

	/* Extra routine per role before system suspend */
	if (ci->role != CI_ROLE_END && ci_role(ci)->suspend)
		ci_role(ci)->suspend(ci);

	if (device_may_wakeup(dev)) {
		if (ci_otg_is_fsm_mode(ci))
			ci_otg_fsm_suspend_for_srp(ci);
@@ -1422,6 +1426,10 @@ static int ci_resume(struct device *dev)
		ci_usb_phy_init(ci);
	}

	/* Extra routine per role after system resume */
	if (ci->role != CI_ROLE_END && ci_role(ci)->resume)
		ci_role(ci)->resume(ci, power_lost);

	if (power_lost)
		ci_handle_power_lost(ci);