if (chg->cc2_detach_wa_active || chg->typec_en_dis_active || chg->try_sink_active) { smblib_dbg(chg, PR_MISC | PR_INTERRUPT, "Ignoring since %s active\n", chg->cc2_detach_wa_active ? "cc2_detach_wa" : "typec_en_dis"); return IRQ_HANDLED; }代码解释
时间: 2023-10-04 14:13:50 浏览: 42
这段代码主要是用于过滤掉一些不需要处理的 USB Type-C 插拔事件,具体包括以下三种情况:
1. cc2_detach_wa_active:表示正在执行 cc2_detach_wa 操作,即正在处理 USB Type-C CC2 线脱落的情况。
2. typec_en_dis_active:表示正在执行 Type-C 接口的启用或禁用操作,即正在处理 Type-C 接口的开关操作。
3. try_sink_active:表示正在执行 try_sink 操作,即正在尝试将 USB Type-C 接口切换为 Sink 模式。
如果当前正在执行以上任意一种操作,就会忽略当前的 USB Type-C 插拔事件,并输出相应的调试信息。而如果没有执行以上任何一种操作,就会继续处理 USB Type-C 插拔事件。需要注意的是,`chg` 是指向 `struct smb_charger` 结构体的指针,其中包含了电池驱动的一些信息和状态,如 cc2_detach_wa_active、typec_en_dis_active、try_sink_active 等。
相关问题
case PM660_SUBTYPE: chip->chg.chg_param.smb_version = PM660_SUBTYPE; chip->chg.wa_flags |= BOOST_BACK_WA | OTG_WA | OV_IRQ_WA_BIT | TYPEC_PBS_WA_BIT; chg->param.freq_buck = pm660_params.freq_buck; chg->param.freq_boost = pm660_params.freq_boost; chg->chg_freq.freq_5V = 650; chg->chg_freq.freq_6V_8V = 850; chg->chg_freq.freq_9V = 1050; chg->chg_freq.freq_12V = 1200; chg->chg_freq.freq_removal = 1050; chg->chg_freq.freq_below_otg_threshold = 1600; chg->chg_freq.freq_above_otg_threshold = 800; break;代码分析
这段代码是在处理 PM660 芯片类型的充电参数。具体来说,它完成了以下操作:
1. 将 SMB 版本号设置为 PM660_SUBTYPE。
2. 开启一些工作模式和异常保护标志,包括 BOOST_BACK_WA、OTG_WA、OV_IRQ_WA_BIT 和 TYPEC_PBS_WA_BIT。
3. 设置一些频率参数,包括充电时的不同电压下的频率(chg_freq.freq_5V、chg_freq.freq_6V_8V、chg_freq.freq_9V、chg_freq.freq_12V),以及移除充电器时的频率(chg_freq.freq_removal)等。
4. 设置 chg_param.freq_buck 和 chg_param.freq_boost 参数,这些参数在 PM660 芯片类型中都是固定的。
这些参数的设置将影响 PM660 芯片的充电行为,从而保证充电的效率和安全性。
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; }代码解析
这段代码是在处理 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 模式。