void smb345_otg_status(bool on) { struct i2c_client *client = charger->client; int ret; SMB_NOTICE("otg function: %s\n", on ? "on" : "off"); if (on) { otg_on = true; /* ENABLE OTG */ ret = smb345_configure_otg(client); if (ret < 0) { dev_err(&client->dev, "%s() error in configuring" "otg..\n", __func__); return; } if (wireless_is_plugged()) wireless_reset(); return; } else otg_on = false; if (wireless_is_plugged()) wireless_set(); }
static void wireless_interrupt_worker(struct work_struct *work) { struct bq51051b_wlc_chip *chip = container_of(work, struct bq51051b_wlc_chip, wireless_interrupt_work); if (chip->wlc_is_plugged()) wireless_set(chip); else wireless_reset(chip); }
static void wireless_isr_work_function(struct work_struct *dat) { if (delayed_work_pending(&charger->wireless_isr_work)) cancel_delayed_work(&charger->wireless_isr_work); SMB_NOTICE("wireless state = %d\n", wireless_is_plugged()); if (wireless_is_plugged()) wireless_set(); else wireless_reset(); }
static void wireless_isr_work_function(struct work_struct *dat) { if (delayed_work_pending(&charger->wireless_isr_work)) cancel_delayed_work(&charger->wireless_isr_work); SMB_NOTICE("wireless state = %d\n", wireless_is_plugged()); if (otg_on) { SMB_NOTICE("bypass wireless isr due to otg_on\n"); return; } if (wireless_is_plugged()) wireless_set(); else wireless_reset(); }
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; }