Exemplo n.º 1
0
int bq27xxx_battery_setup(struct bq27xxx_device_info *di)
{
	struct power_supply_desc *psy_desc;
	struct power_supply_config psy_cfg = { .drv_data = di, };

	INIT_DELAYED_WORK(&di->work, bq27xxx_battery_poll);
	mutex_init(&di->lock);
	di->regs = bq27xxx_regs[di->chip];

	psy_desc = devm_kzalloc(di->dev, sizeof(*psy_desc), GFP_KERNEL);
	if (!psy_desc)
		return -ENOMEM;

	psy_desc->name = di->name;
	psy_desc->type = POWER_SUPPLY_TYPE_BATTERY;
	psy_desc->properties = bq27xxx_battery_props[di->chip].props;
	psy_desc->num_properties = bq27xxx_battery_props[di->chip].size;
	psy_desc->get_property = bq27xxx_battery_get_property;
	psy_desc->external_power_changed = bq27xxx_external_power_changed;

	di->bat = power_supply_register_no_ws(di->dev, psy_desc, &psy_cfg);
	if (IS_ERR(di->bat)) {
		dev_err(di->dev, "failed to register battery\n");
		return PTR_ERR(di->bat);
	}

	dev_info(di->dev, "support ver. %s enabled\n", DRIVER_VERSION);

	bq27xxx_battery_update(di);

	return 0;
}
Exemplo n.º 2
0
static int bq27x00_powersupply_init(struct bq27x00_device_info *di,
				    const char *name)
{
	int ret;
	struct power_supply_desc *psy_desc;
	struct power_supply_config psy_cfg = { .drv_data = di, };

	psy_desc = devm_kzalloc(di->dev, sizeof(*psy_desc), GFP_KERNEL);
	if (!psy_desc)
		return -ENOMEM;

	psy_desc->name = name;
	psy_desc->type = POWER_SUPPLY_TYPE_BATTERY;
	if (di->chip == BQ27425) {
		psy_desc->properties = bq27425_battery_props;
		psy_desc->num_properties = ARRAY_SIZE(bq27425_battery_props);
	} else if (di->chip == BQ27742) {
		psy_desc->properties = bq27742_battery_props;
		psy_desc->num_properties = ARRAY_SIZE(bq27742_battery_props);
	} else if (di->chip == BQ27510) {
		psy_desc->properties = bq27510_battery_props;
		psy_desc->num_properties = ARRAY_SIZE(bq27510_battery_props);
	} else {
		psy_desc->properties = bq27x00_battery_props;
		psy_desc->num_properties = ARRAY_SIZE(bq27x00_battery_props);
	}
	psy_desc->get_property = bq27x00_battery_get_property;
	psy_desc->external_power_changed = bq27x00_external_power_changed;

	INIT_DELAYED_WORK(&di->work, bq27x00_battery_poll);
	mutex_init(&di->lock);

	di->bat = power_supply_register_no_ws(di->dev, psy_desc, &psy_cfg);
	if (IS_ERR(di->bat)) {
		ret = PTR_ERR(di->bat);
		dev_err(di->dev, "failed to register battery: %d\n", ret);
		return ret;
	}

	dev_info(di->dev, "support ver. %s enabled\n", DRIVER_VERSION);

	bq27x00_update(di);

	return 0;
}