mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-05 16:37:50 +00:00
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: Xu Yang <xu.yang_2@nxp.com> Acked-by: Peter Chen <peter.chen@kernel.org> Link: https://lore.kernel.org/r/20221013151442.3262951-3-xu.yang_2@nxp.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
74494b3321
commit
450857c605
2 changed files with 12 additions and 0 deletions
|
@ -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;
|
||||
};
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
Loading…
Reference in a new issue