static int do_set_chgcur (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { #if 0 /* rsy blocked */ int current = simple_strtol(argv[1], NULL, 10); #endif #ifdef CONFIG_PLATFORM_HAS_PMU struct aml_pmu_driver *pmu_driver; pmu_driver = aml_pmu_get_driver(); if (pmu_driver && pmu_driver->pmu_set_charge_current) { pmu_driver->pmu_set_charge_current(current); setenv("charging_current", argv[1]); } else { printf("ERROR!! No pmu_set_charge_current hooks!\n"); } #else #if 0 /* rsy blocked */ set_charging_current(current); printf("Charging current: %smA\n", argv[1]); setenv("charging_current", argv[1]); #endif #endif return 0; }
static void set_charge_current(void) { if(bFastCharge) { return; } else if (fsl_usb_battery_charger == CHARGER_DCP) { set_charging_current(1100); set_extcharger(0);//enable exchager bFastCharge = 1; } else if(fsl_usb_battery_charger == CHARGER_ACTIVE_HOST){ set_charging_current(3); set_extcharger(0);//enable exchager bFastCharge = 1; } else { set_charging_current(480); set_extcharger(0);//enable exchager } }
static int bq27541_battery_probe(struct i2c_client *client, const struct i2c_device_id *id) { int retval = 0; //struct bq27541_dev_info *di; int ret,ch_status; bBq27541Supend = false; plat_data = (struct mxc_bq27541_platform_data *)client->dev.platform_data; if (plat_data == NULL) { dev_err(&client->dev, "lack of platform data!\n"); return -ENODEV; } di = kzalloc(sizeof(*di), GFP_KERNEL); if (!di) { retval = -ENOMEM; goto di_alloc_failed; } di->client = client; di->dev = &client->dev; di->bat.name = "bq27541"; di->bat.type = POWER_SUPPLY_TYPE_BATTERY; di->bat.properties = bq27541_battery_props; di->bat.num_properties = ARRAY_SIZE(bq27541_battery_props); di->bat.get_property = bq27541_battery_get_property; di->bat.use_for_apm = 1; di->old_soc = 0; di->battery_status = POWER_SUPPLY_STATUS_UNKNOWN; /*ret = bq27x00_battery_cc(di); if (ret < 0) { printk("bq27541 not found\n"); return -ENODEV; }*/ retval = power_supply_register(&client->dev, &di->bat); if (retval) { dev_err(di->dev, "failed to register battery\n"); goto batt_failed; } INIT_DELAYED_WORK(&di->monitor_work, bq27541_battery_work); di->monitor_wqueue = create_singlethread_workqueue(dev_name(&client->dev)); if (!di->monitor_wqueue) { retval = -ESRCH; goto workqueue_failed; } queue_delayed_work(di->monitor_wqueue, &di->monitor_work, HZ * 2); /* configure gpio as input for interrupt monitor */ ret = request_irq(plat_data->irq, bq27541_interrupt, IRQF_TRIGGER_FALLING|IRQF_TRIGGER_RISING, DEVICE_NAME, di); if (ret) { printk("bq27541 request_irq(%d) returned error %d\n",plat_data->irq, ret); goto workqueue_failed; } ch_status = plat_data->ch_status(); if(ch_status) { printk("\n\nusb charger online\n"); set_charging_current(480); set_extcharger(0);//enable exchager } //enable_irq(client->irq); usbdc_task = kthread_run(usbdc_thread, NULL, "usb_dc"); if (IS_ERR(usbdc_task)) { pr_err("%s: request task failed\n", __func__); goto workqueue_failed; } /* ret = request_irq(plat_data->irq_chg, bq27541_excharger_full_interrupt,IRQF_TRIGGER_FALLING, "excharger", NULL); if (ret) { printk("bq27541 request_irq(%d) returned error %d\n",plat_data->irq_chg, ret); goto di_alloc_failed; } enable_irq_wake(plat_data->irq_chg); */ goto success; workqueue_failed: power_supply_unregister(&di->bat); batt_failed: kfree(di); di_alloc_failed: success: printk("%s battery probed!\n", __func__); return retval; }
static void twl_usb_ext_pwr_work(struct work_struct *data) { printk(KERN_INFO "[charging_msg] %s: ext_pwr \n", __FUNCTION__); set_charging_current(); return ; }