if (chg->connector_type == POWER_SUPPLY_CONNECTOR_MICRO_USB) { cancel_delayed_work_sync(&chg->uusb_otg_work); vote(chg->awake_votable, OTG_DELAY_VOTER, true, 0); smblib_dbg(chg, PR_INTERRUPT, "Scheduling OTG work\n"); schedule_delayed_work(&chg->uusb_otg_work, msecs_to_jiffies(chg->otg_delay_ms)); return IRQ_HANDLED; }代码解析
时间: 2023-08-06 14:07:54 浏览: 128
smps-chg.rar_POWER SWITCHING_smps_smps in matlab
这段代码是在处理 USB Type-C 接口插拔事件时,如果检测到当前连接的是 Micro USB 接口,则会执行以下操作:
1. 取消之前已经注册的 uusb_otg_work 延迟工作,以便重新调度新的 uusb_otg_work 延迟工作。
2. 向 awake_votable 投票,以避免系统进入睡眠状态。
3. 输出调试信息,表示即将调度新的 OTG 延迟工作。
4. 调度新的 uusb_otg_work 延迟工作,延迟时间为 `chg->otg_delay_ms`,也就是 OTG 延迟工作的执行时间。
5. 返回 IRQ_HANDLED,表示中断已经被处理。
需要注意的是,`chg` 是指向 `struct smb_charger` 结构体的指针,其中包含了电池驱动的一些信息和状态,如 connector_type 表示当前连接的 USB 接口类型,otg_delay_ms 表示 OTG 延迟工作的执行时间等。另外,uusb_otg_work 是一个延迟工作,用于在 Micro USB 接口插入一段时间后,判断是否需要进入 OTG 模式。
阅读全文