过压门限
过压门限有三个option,其中option A的典型值为6.4v,option B的典型值为7.15,option C的典型值为10.3v
上表显示寄存器13f1的bit0到bit2值不同会对应不同的过压门限。
寄存器
主要是1310和13f1
代码实现
注册过压中断
smbchg_request_irqs
REQUEST_IRQ(chip, spmi_resource, chip->usbin_ov_irq,
"usbin-ov", usbin_ov_handler, flags, rc);
中断处理函数
static irqreturn_t usbin_ov_handler(int irq, void *_chip)
rc = smbchg_read(chip, ®, chip->usb_chgpth_base + RT_STS, 1);//获得寄存器1310的状态
if (reg & USBIN_OV_BIT) {//过压触发
chip->usb_ov_det = true;
if (chip->usb_psy) {
pr_smb(PR_MISC, "setting usb psy health OV\n");
rc = power_supply_set_health_state(chip->usb_psy,
POWER_SUPPLY_HEALTH_OVERVOLTAGE);//设置usb的health属性为过压
if (rc)
pr_smb(PR_STATUS,"usb psy does not allow updating prop %d rc = %d\n",
POWER_SUPPLY_HEALTH_OVERVOLTAGE, rc);
}
} else {
chip->usb_ov_det = false;
/* If USB is present, then handle the USB insertion */
usb_present = is_usb_present(chip);
if (usb_present)
update_usb_status(chip, usb_present, false);
}
log
中断触发:
01-01 00:05:36.502 I/ ( 0): usbin_ov_handler trigered
01-01 00:05:36.502 I/SMBCHG ( 0): usbin_ov_handler: setting usb psy health OV
状态上报
01-01 00:05:36.503 D/power_supply battery( 0): power_supply_changed
01-01 00:05:36.503 D/power_supply usb( 0): power_supply_update_gen_leds 1
01-01 00:05:36.503 D/power_supply usb( 0): uevent
01-01 00:05:36.503 D/power_supply usb( 0): POWER_SUPPLY_NAME=usb
01-01 00:05:36.503 D/power_supply usb( 0): prop HEALTH=Over voltage
01-01 00:05:36.503 D/power_supply usb( 0): prop PRESENT=1
01-01 00:05:36.503 D/power_supply usb( 0): prop ONLINE=1
01-01 00:05:36.503 D/power_supply usb( 0): prop VOLTAGE_MAX=0
01-01 00:05:36.503 D/power_supply usb( 0): prop CURRENT_MAX=1500000
01-01 00:05:36.503 D/power_supply usb( 0): prop INPUT_CURRENT_MAX=0
01-01 00:05:36.503 D/power_supply usb( 0): prop SCOPE=Device
01-01 00:05:36.503 D/power_supply usb( 0): prop TYPE=USB_DCP
过压以后会通过power supply机制上报,/sys/class/power_supplly/usb/health。