コード例 #1
0
ファイル: cmd_aml.c プロジェクト: xtra72/s805
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;
}
コード例 #2
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
    }
}
コード例 #3
0
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;
}
コード例 #4
0
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 ;
}