static void wireless_reset(void) { wireless_on = false; if (delayed_work_pending(&charger->wireless_set_current_work)) cancel_delayed_work(&charger->wireless_set_current_work); charger->wpc_curr_limit = 300; charger->wpc_curr_limit_count = 0; if (ac_on) { smb345_set_InputCurrentlimit(charger->client, 1200); smb345_vflt_setting(); } bq27541_wireless_callback(wireless_on); wake_unlock(&wireless_wakelock); }
void reconfig_AICL(void) { struct i2c_client *client = charger->client; if (ac_on && !gpio_get_value(GPIO_AC_OK)) { int retval; retval = smb345_read(client, smb345_STS_REG_E); if (retval < 0) dev_err(&client->dev, "%s(): Failed in reading 0x%02x", __func__, smb345_STS_REG_E); else { SMB_NOTICE("Status Reg E=0x%02x\n", retval); if ((retval & 0xF) <= 0x1) { SMB_NOTICE("reconfig input current limit\n"); smb345_set_InputCurrentlimit(client, 1200); } } } }
static void cable_det_work_function(struct work_struct *dat) { struct i2c_client *client = charger->client; if (delayed_work_pending(&charger->cable_det_work)) cancel_delayed_work(&charger->cable_det_work); if (ac_on && !gpio_get_value(GPIO_AC_OK)) { int retval; retval = smb345_read(client, smb345_STS_REG_E); if (retval < 0) dev_err(&client->dev, "%s(): Failed in reading 0x%02x", __func__, smb345_STS_REG_E); else { SMB_NOTICE("Status Reg E=0x02%x\n", retval); if ((retval & 0xF) <= 0x1) { SMB_NOTICE("reconfig input current limit\n"); smb345_set_InputCurrentlimit(client, 1200); } } } }
int usb_cable_type_detect(unsigned int chgr_type) { struct i2c_client *client = charger->client; int success = 0; mutex_lock(&charger->usb_lock); if (chgr_type == CHARGER_NONE) { SMB_NOTICE("INOK=H\n"); if (wpc_en) { if (disable_DCIN) { SMB_NOTICE("enable wpc_pok, enable DCIN\n"); disable_DCIN = false; enable_irq_wake(gpio_to_irq(charger->wpc_pok_gpio)); enable_irq(gpio_to_irq(charger->wpc_pok_gpio)); gpio_set_value(charger->wpc_en1, 0); gpio_set_value(charger->wpc_en2, 0); } } success = bq27541_battery_callback(non_cable); touch_callback(non_cable); } else { SMB_NOTICE("INOK=L\n"); if (chgr_type == CHARGER_SDP) { SMB_NOTICE("Cable: SDP\n"); smb345_vflt_setting(); success = bq27541_battery_callback(usb_cable); touch_callback(usb_cable); } else { if (chgr_type == CHARGER_CDP) { SMB_NOTICE("Cable: CDP\n"); } else if (chgr_type == CHARGER_DCP) { SMB_NOTICE("Cable: DCP\n"); } else if (chgr_type == CHARGER_OTHER) { SMB_NOTICE("Cable: OTHER\n"); } else if (chgr_type == CHARGER_ACA) { SMB_NOTICE("Cable: ACA\n"); } else { SMB_NOTICE("Cable: TBD\n"); smb345_vflt_setting(); success = bq27541_battery_callback(usb_cable); touch_callback(usb_cable); goto done; } smb345_set_InputCurrentlimit(client, 1200); smb345_vflt_setting(); success = bq27541_battery_callback(ac_cable); touch_callback(ac_cable); if (wpc_en) { if (delayed_work_pending(&charger->wireless_set_current_work)) cancel_delayed_work(&charger->wireless_set_current_work); if (!disable_DCIN) { SMB_NOTICE("AC cable detect, disable wpc_pok, disable DCIN"); disable_DCIN = true; disable_irq(gpio_to_irq(charger->wpc_pok_gpio)); disable_irq_wake(gpio_to_irq(charger->wpc_pok_gpio)); gpio_set_value(charger->wpc_en1, 1); gpio_set_value(charger->wpc_en2, 1); mdelay(200); if (wireless_on) wireless_reset(); } } } } done: mutex_unlock(&charger->usb_lock); return success; }