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_det_work_function(struct work_struct *dat) { if (otg_on) { SMB_NOTICE("bypass wireless isr due to otg_on\n"); return; } 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(); }
static void wireless_det_work_function(struct work_struct *dat) { if (wireless_is_plugged()) wireless_set(); }
static int __devinit bq51051b_wlc_probe(struct platform_device *pdev) { int rc = 0; struct bq51051b_wlc_chip *chip; const struct bq51051b_wlc_platform_data *pdata = pdev->dev.platform_data; WLC_DBG_INFO("probe\n"); if (!pdata) { pr_err("wlc: missing platform data\n"); return -ENODEV; } chip = kzalloc(sizeof(struct bq51051b_wlc_chip), GFP_KERNEL); if (!chip) { pr_err("wlc: Cannot allocate bq51051b_wlc_chip\n"); return -ENOMEM; } chip->dev = &pdev->dev; chip->active_n_gpio = pdata->active_n_gpio; chip->wlc_is_plugged = pdata->wlc_is_plugged; rc = bq51051b_wlc_hw_init(chip); if (rc) { pr_err("wlc: couldn't init hardware rc = %d\n", rc); goto free_chip; } chip->wireless_psy.name = "wireless"; chip->wireless_psy.type = POWER_SUPPLY_TYPE_WIRELESS; chip->wireless_psy.supplied_to = pm_power_supplied_to; chip->wireless_psy.num_supplicants = ARRAY_SIZE(pm_power_supplied_to); chip->wireless_psy.properties = pm_power_props_wireless; chip->wireless_psy.num_properties = ARRAY_SIZE(pm_power_props_wireless); chip->wireless_psy.get_property = pm_power_get_property_wireless; rc = power_supply_register(chip->dev, &chip->wireless_psy); if (rc < 0) { pr_err("wlc: power_supply_register wireless failed rx = %d\n", rc); goto free_chip; } platform_set_drvdata(pdev, chip); the_chip = chip; INIT_WORK(&chip->wireless_interrupt_work, wireless_interrupt_worker); wake_lock_init(&chip->wireless_chip_wake_lock, WAKE_LOCK_SUSPEND, "bq51051b_wireless_chip"); /* For Booting Wireless_charging and For Power Charging Logo In Wireless Charging */ if (chip->wlc_is_plugged()) wireless_set(chip); return 0; free_chip: kfree(chip); return rc; }