Esempio n. 1
0
static void bq27541_hw_config(struct work_struct *work)
{
	int ret = 0, flags = 0, type = 0, fw_ver = 0;
	struct bq27541_device_info *di;

	di  = container_of(work, struct bq27541_device_info, hw_config.work);
	ret = bq27541_chip_config(di);
	if (ret) {
		dev_err(di->dev, "Failed to config Bq27541\n");
		return;
	}
	msm_battery_gauge_register(&bq27541_batt_gauge);

	bq27541_cntl_cmd(di, BQ27541_SUBCMD_CTNL_STATUS);
	udelay(66);
	bq27541_read(BQ27541_REG_CNTL, &flags, 0, di);
	bq27541_cntl_cmd(di, BQ27541_SUBCMD_DEVCIE_TYPE);
	udelay(66);
	bq27541_read(BQ27541_REG_CNTL, &type, 0, di);
	bq27541_cntl_cmd(di, BQ27541_SUBCMD_FW_VER);
	udelay(66);
	bq27541_read(BQ27541_REG_CNTL, &fw_ver, 0, di);

	dev_info(di->dev, "DEVICE_TYPE is 0x%02X, FIRMWARE_VERSION is 0x%02X\n",
			type, fw_ver);
	dev_info(di->dev, "Complete bq27541 configuration 0x%02X\n", flags);
}
Esempio n. 2
0
static void bq27520_hw_config(struct work_struct *work)
{
	int ret = 0, flags = 0, type = 0, fw_ver = 0, status = 0;
	struct bq27520_device_info *di;

	di  = container_of(work, struct bq27520_device_info, hw_config.work);

	pr_debug(KERN_INFO "Enter bq27520_hw_config\n");
	ret = bq27520_chip_config(di);
	if (ret) {
		dev_err(di->dev, "Failed to config Bq27520 ret = %d\n", ret);
		return;
	}
	/* bq27520 is ready for access, update current_battery_status by reading
	 * from hardware
	 */
	if_notify_msm_charger(&status);
	update_current_battery_status(status);
	msm_battery_gauge_register(&bq27520_batt_gauge);
	msm_charger_notify_event(NULL, CHG_BATT_STATUS_CHANGE);

	enable_irq(di->irq);

	/* poll battery status every 3 seconds, if charging status changes,
	 * notify msm_charger
	 */
	schedule_delayed_work(&current_battery_status.poller,
				BQ27520_POLLING_STATUS);

	if (di->pdata->enable_dlog) {
		schedule_work(&di->counter);
		init_timer(&timer);
		timer.function = &bq27520_every_30secs;
		timer.data = (unsigned long)di;
		timer.expires = jiffies + BQ27520_COULOMB_POLL;
		add_timer(&timer);
	}

	bq27520_cntl_cmd(di, BQ27520_SUBCMD_CTNL_STATUS);
	udelay(66);
	bq27520_read(BQ27520_REG_CNTL, &flags, 0, di);
	bq27520_cntl_cmd(di, BQ27520_SUBCMD_DEVCIE_TYPE);
	udelay(66);
	bq27520_read(BQ27520_REG_CNTL, &type, 0, di);
	bq27520_cntl_cmd(di, BQ27520_SUBCMD_FW_VER);
	udelay(66);
	bq27520_read(BQ27520_REG_CNTL, &fw_ver, 0, di);

	dev_info(di->dev, "DEVICE_TYPE is 0x%02X, FIRMWARE_VERSION\
		is 0x%02X\n", type, fw_ver);
	dev_info(di->dev, "Complete bq27520 configuration 0x%02X\n", flags);
}
static void bq27541_hw_config(struct work_struct *work)
{
    int ret = 0, flags = 0, type = 0, fw_ver = 0;
    struct bq27541_device_info *di;

    di  = container_of(work, struct bq27541_device_info, hw_config.work);
    ret = bq27541_chip_config(di);
    if (ret) {
        dev_err(di->dev, "Failed to config Bq27541\n");
#ifdef CONFIG_MACH_OPPO
        di->retry_count--;
        if (di->retry_count > 0) {
            schedule_delayed_work(&di->hw_config, HZ);
        }
#endif
        return;
    }
#ifdef CONFIG_MACH_OPPO
    qpnp_battery_gauge_register(&bq27541_batt_gauge);
#else
    msm_battery_gauge_register(&bq27541_batt_gauge);
#endif

    bq27541_cntl_cmd(di, BQ27541_SUBCMD_CTNL_STATUS);
    udelay(66);
    bq27541_read(BQ27541_REG_CNTL, &flags, 0, di);
    bq27541_cntl_cmd(di, BQ27541_SUBCMD_DEVCIE_TYPE);
    udelay(66);
    bq27541_read(BQ27541_REG_CNTL, &type, 0, di);
    bq27541_cntl_cmd(di, BQ27541_SUBCMD_FW_VER);
    udelay(66);
    bq27541_read(BQ27541_REG_CNTL, &fw_ver, 0, di);

#ifdef CONFIG_MACH_OPPO
    di->is_authenticated = bq27541_authenticate(di->client);
    di->battery_type = bq27541_batt_type_detect(di->client);
#endif

    dev_info(di->dev, "DEVICE_TYPE is 0x%02X, FIRMWARE_VERSION is 0x%02X\n",
             type, fw_ver);
    dev_info(di->dev, "Complete bq27541 configuration 0x%02X\n", flags);
}