背景贴片试产出现Meta工具连不上排查问题通过查看上一个版本能连上查看git log 查看一个修改导致连接失败meta 工具失败原因是usb port超时报错meta工具连接主要是通过不断获取usb的类型去匹配从这我们就可以得出是否usb的类型读取异常查看log发现异常失败进入meta工具的log只打印了一次中断插入同是打印成功与失败的usb类型发现失败的usb类型获取失败POWER_SUPPLY_PROP_USB_TYPE val-intval 0正常的是POWER_SUPPLY_PROP_USB_TYPE val-intval 1并且失败的是不会跑usb_in_workstatic irqreturn_t sgm41513d_irq_handler_thread(int irq, void *private) { struct sgm41513d_device *sgm private; struct sgm41513d_state state; bool prev_pg; int ret; //lock wakelock pr_err(%s entry\n,__func__); prev_pg sgm-state.online; ret sgm41513d_get_charger_online(sgm, state); mutex_lock(sgm-lock); sgm-state state; mutex_unlock(sgm-lock); if(!prev_pg state.online){ type_C_in 1; CPS2011_encomp_en(1); queue_delayed_work(sgm-usb_in_wq, sgm-usb_in_work, 100); //power_supply_changed(sgm-charger); }else if(prev_pg !state.online) { pr_err(%s\n,__func__); //power_supply_changed(sgm-charger); } return IRQ_HANDLED; }发现进入的这个!prev_pg state.online条件是这个时间线:────────────────────────────────────────────────────────────get_property: IRQ handler:────────────────────────────────────────────────────────────mutex_lock(sgm-lock);ret sgm41513d_get_state(); // I2C读取online1sgm-state state; // sgm-state.online 1mutex_unlock(sgm-lock);prev_pg sgm-state.online; // 读到1sgm41513d_get_charger_online(); // online1mutex_lock(sgm-lock);sgm-state state;mutex_unlock(sgm-lock);if(!prev_pg state.online)// if(!1 1) false// queue_delayed_work() 不执行────────────────────────────────────────────────────────────这里的meta在init前一直读取了这个get_state导致这里的prev_pg的状态检测被打破了最后在init前不要读取做一个标志位就解决了