Skip to content

Commit

Permalink
power_supply: Move run-time configuration to separate structure
Browse files Browse the repository at this point in the history
Add new structure 'power_supply_config' for holding run-time
initialization data like of_node, supplies and private driver data.

The power_supply_register() function is changed so all power supply
drivers need updating.

When registering the power supply this new 'power_supply_config' should be
used instead of directly initializing 'struct power_supply'. This allows
changing the ownership of power_supply structure from driver to the
power supply core in next patches.

When a driver does not use of_node or supplies then it should use NULL
as config. If driver uses of_node or supplies then it should allocate
config on stack and initialize it with proper values.

Signed-off-by: Krzysztof Kozlowski <k.kozlowski@samsung.com>
Reviewed-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
Acked-by: Pavel Machek <pavel@ucw.cz>

[for the nvec part]
Reviewed-by: Marc Dietrich <marvin24@gmx.de>

[for drivers/platform/x86/compal-laptop.c]
Reviewed-by: Darren Hart <dvhart@linux.intel.com>

[for drivers/hid/*]
Reviewed-by: Jiri Kosina <jkosina@suse.cz>

Signed-off-by: Sebastian Reichel <sre@kernel.org>
  • Loading branch information
krzk authored and sre committed Mar 13, 2015
1 parent e44ea36 commit 2dc9215
Show file tree
Hide file tree
Showing 69 changed files with 224 additions and 167 deletions.
2 changes: 1 addition & 1 deletion drivers/acpi/ac.c
Original file line number Diff line number Diff line change
Expand Up @@ -351,7 +351,7 @@ static int acpi_ac_add(struct acpi_device *device)
ac->charger.properties = ac_props;
ac->charger.num_properties = ARRAY_SIZE(ac_props);
ac->charger.get_property = get_ac_property;
result = power_supply_register(&ac->device->dev, &ac->charger);
result = power_supply_register(&ac->device->dev, &ac->charger, NULL);
if (result)
goto end;

Expand Down
3 changes: 2 additions & 1 deletion drivers/acpi/battery.c
Original file line number Diff line number Diff line change
Expand Up @@ -624,7 +624,8 @@ static int sysfs_add_battery(struct acpi_battery *battery)
battery->bat.type = POWER_SUPPLY_TYPE_BATTERY;
battery->bat.get_property = acpi_battery_get_property;

result = power_supply_register_no_ws(&battery->device->dev, &battery->bat);
result = power_supply_register_no_ws(&battery->device->dev,
&battery->bat, NULL);

if (result)
return result;
Expand Down
4 changes: 2 additions & 2 deletions drivers/acpi/sbs.c
Original file line number Diff line number Diff line change
Expand Up @@ -540,7 +540,7 @@ static int acpi_battery_add(struct acpi_sbs *sbs, int id)
ARRAY_SIZE(sbs_energy_battery_props);
}
battery->bat.get_property = acpi_sbs_battery_get_property;
result = power_supply_register(&sbs->device->dev, &battery->bat);
result = power_supply_register(&sbs->device->dev, &battery->bat, NULL);
if (result)
goto end;

Expand Down Expand Up @@ -580,7 +580,7 @@ static int acpi_charger_add(struct acpi_sbs *sbs)
sbs->charger.properties = sbs_ac_props;
sbs->charger.num_properties = ARRAY_SIZE(sbs_ac_props);
sbs->charger.get_property = sbs_get_ac_property;
power_supply_register(&sbs->device->dev, &sbs->charger);
power_supply_register(&sbs->device->dev, &sbs->charger, NULL);
printk(KERN_INFO PREFIX "%s [%s]: AC Adapter [%s] (%s)\n",
ACPI_SBS_DEVICE_NAME, acpi_device_bid(sbs->device),
ACPI_AC_DIR_NAME, sbs->charger_present ? "on-line" : "off-line");
Expand Down
2 changes: 1 addition & 1 deletion drivers/hid/hid-input.c
Original file line number Diff line number Diff line change
Expand Up @@ -439,7 +439,7 @@ static bool hidinput_setup_battery(struct hid_device *dev, unsigned report_type,
dev->battery_report_type = report_type;
dev->battery_report_id = field->report->id;

ret = power_supply_register(&dev->dev, battery);
ret = power_supply_register(&dev->dev, battery, NULL);
if (ret != 0) {
hid_warn(dev, "can't register power supply: %d\n", ret);
kfree(battery->name);
Expand Down
2 changes: 1 addition & 1 deletion drivers/hid/hid-sony.c
Original file line number Diff line number Diff line change
Expand Up @@ -1718,7 +1718,7 @@ static int sony_battery_probe(struct sony_sc *sc)
if (!sc->battery.name)
return -ENOMEM;

ret = power_supply_register(&hdev->dev, &sc->battery);
ret = power_supply_register(&hdev->dev, &sc->battery, NULL);
if (ret) {
hid_err(hdev, "Unable to register battery device\n");
goto err_free;
Expand Down
2 changes: 1 addition & 1 deletion drivers/hid/hid-wiimote-modules.c
Original file line number Diff line number Diff line change
Expand Up @@ -250,7 +250,7 @@ static int wiimod_battery_probe(const struct wiimod_ops *ops,
if (!wdata->battery.name)
return -ENOMEM;

ret = power_supply_register(&wdata->hdev->dev, &wdata->battery);
ret = power_supply_register(&wdata->hdev->dev, &wdata->battery, NULL);
if (ret) {
hid_err(wdata->hdev, "cannot register battery device\n");
goto err_free;
Expand Down
5 changes: 3 additions & 2 deletions drivers/hid/wacom_sys.c
Original file line number Diff line number Diff line change
Expand Up @@ -1021,13 +1021,14 @@ static int wacom_initialize_battery(struct wacom *wacom)
wacom->ac.use_for_apm = 0;

error = power_supply_register(&wacom->hdev->dev,
&wacom->battery);
&wacom->battery, NULL);
if (error)
return error;

power_supply_powers(&wacom->battery, &wacom->hdev->dev);

error = power_supply_register(&wacom->hdev->dev, &wacom->ac);
error = power_supply_register(&wacom->hdev->dev, &wacom->ac,
NULL);
if (error) {
power_supply_unregister(&wacom->battery);
return error;
Expand Down
2 changes: 1 addition & 1 deletion drivers/platform/x86/compal-laptop.c
Original file line number Diff line number Diff line change
Expand Up @@ -1036,7 +1036,7 @@ static int compal_probe(struct platform_device *pdev)

/* Power supply */
initialize_power_supply_data(data);
err = power_supply_register(&compal_device->dev, &data->psy);
err = power_supply_register(&compal_device->dev, &data->psy, NULL);
if (err < 0)
goto remove;

Expand Down
2 changes: 1 addition & 1 deletion drivers/power/88pm860x_battery.c
Original file line number Diff line number Diff line change
Expand Up @@ -953,7 +953,7 @@ static int pm860x_battery_probe(struct platform_device *pdev)
else
info->resistor = 300; /* set default internal resistor */

ret = power_supply_register(&pdev->dev, &info->battery);
ret = power_supply_register(&pdev->dev, &info->battery, NULL);
if (ret)
return ret;
info->battery.dev->parent = &pdev->dev;
Expand Down
7 changes: 4 additions & 3 deletions drivers/power/88pm860x_charger.c
Original file line number Diff line number Diff line change
Expand Up @@ -648,6 +648,7 @@ static struct pm860x_irq_desc {
static int pm860x_charger_probe(struct platform_device *pdev)
{
struct pm860x_chip *chip = dev_get_drvdata(pdev->dev.parent);
struct power_supply_config psy_cfg = {};
struct pm860x_charger_info *info;
int ret;
int count;
Expand Down Expand Up @@ -687,12 +688,12 @@ static int pm860x_charger_probe(struct platform_device *pdev)

info->usb.name = "usb";
info->usb.type = POWER_SUPPLY_TYPE_USB;
info->usb.supplied_to = pm860x_supplied_to;
info->usb.num_supplicants = ARRAY_SIZE(pm860x_supplied_to);
info->usb.properties = pm860x_usb_props;
info->usb.num_properties = ARRAY_SIZE(pm860x_usb_props);
info->usb.get_property = pm860x_usb_get_prop;
ret = power_supply_register(&pdev->dev, &info->usb);
psy_cfg.supplied_to = pm860x_supplied_to;
psy_cfg.num_supplicants = ARRAY_SIZE(pm860x_supplied_to);
ret = power_supply_register(&pdev->dev, &info->usb, &psy_cfg);
if (ret)
goto out;

Expand Down
7 changes: 4 additions & 3 deletions drivers/power/ab8500_btemp.c
Original file line number Diff line number Diff line change
Expand Up @@ -1058,6 +1058,7 @@ static int ab8500_btemp_probe(struct platform_device *pdev)
{
struct device_node *np = pdev->dev.of_node;
struct abx500_bm_data *plat = pdev->dev.platform_data;
struct power_supply_config psy_cfg = {};
struct ab8500_btemp *di;
int irq, i, ret = 0;
u8 val;
Expand Down Expand Up @@ -1095,11 +1096,11 @@ static int ab8500_btemp_probe(struct platform_device *pdev)
di->btemp_psy.properties = ab8500_btemp_props;
di->btemp_psy.num_properties = ARRAY_SIZE(ab8500_btemp_props);
di->btemp_psy.get_property = ab8500_btemp_get_property;
di->btemp_psy.supplied_to = supply_interface;
di->btemp_psy.num_supplicants = ARRAY_SIZE(supply_interface);
di->btemp_psy.external_power_changed =
ab8500_btemp_external_power_changed;

psy_cfg.supplied_to = supply_interface;
psy_cfg.num_supplicants = ARRAY_SIZE(supply_interface);

/* Create a work queue for the btemp */
di->btemp_wq =
Expand Down Expand Up @@ -1140,7 +1141,7 @@ static int ab8500_btemp_probe(struct platform_device *pdev)
}

/* Register BTEMP power supply class */
ret = power_supply_register(di->dev, &di->btemp_psy);
ret = power_supply_register(di->dev, &di->btemp_psy, &psy_cfg);
if (ret) {
dev_err(di->dev, "failed to register BTEMP psy\n");
goto free_btemp_wq;
Expand Down
15 changes: 9 additions & 6 deletions drivers/power/ab8500_charger.c
Original file line number Diff line number Diff line change
Expand Up @@ -3446,6 +3446,7 @@ static int ab8500_charger_probe(struct platform_device *pdev)
{
struct device_node *np = pdev->dev.of_node;
struct abx500_bm_data *plat = pdev->dev.platform_data;
struct power_supply_config psy_cfg = {};
struct ab8500_charger *di;
int irq, i, charger_status, ret = 0, ch_stat;

Expand Down Expand Up @@ -3483,15 +3484,17 @@ static int ab8500_charger_probe(struct platform_device *pdev)
di->autopower = false;
di->invalid_charger_detect_state = 0;

/* AC and USB supply config */
psy_cfg.supplied_to = supply_interface;
psy_cfg.num_supplicants = ARRAY_SIZE(supply_interface);

/* AC supply */
/* power_supply base class */
di->ac_chg.psy.name = "ab8500_ac";
di->ac_chg.psy.type = POWER_SUPPLY_TYPE_MAINS;
di->ac_chg.psy.properties = ab8500_charger_ac_props;
di->ac_chg.psy.num_properties = ARRAY_SIZE(ab8500_charger_ac_props);
di->ac_chg.psy.get_property = ab8500_charger_ac_get_property;
di->ac_chg.psy.supplied_to = supply_interface;
di->ac_chg.psy.num_supplicants = ARRAY_SIZE(supply_interface),
/* ux500_charger sub-class */
di->ac_chg.ops.enable = &ab8500_charger_ac_en;
di->ac_chg.ops.check_enable = &ab8500_charger_ac_check_enable;
Expand All @@ -3517,8 +3520,6 @@ static int ab8500_charger_probe(struct platform_device *pdev)
di->usb_chg.psy.properties = ab8500_charger_usb_props;
di->usb_chg.psy.num_properties = ARRAY_SIZE(ab8500_charger_usb_props);
di->usb_chg.psy.get_property = ab8500_charger_usb_get_property;
di->usb_chg.psy.supplied_to = supply_interface;
di->usb_chg.psy.num_supplicants = ARRAY_SIZE(supply_interface),
/* ux500_charger sub-class */
di->usb_chg.ops.enable = &ab8500_charger_usb_en;
di->usb_chg.ops.check_enable = &ab8500_charger_usb_check_enable;
Expand Down Expand Up @@ -3616,7 +3617,8 @@ static int ab8500_charger_probe(struct platform_device *pdev)

/* Register AC charger class */
if (di->ac_chg.enabled) {
ret = power_supply_register(di->dev, &di->ac_chg.psy);
ret = power_supply_register(di->dev, &di->ac_chg.psy,
&psy_cfg);
if (ret) {
dev_err(di->dev, "failed to register AC charger\n");
goto free_charger_wq;
Expand All @@ -3625,7 +3627,8 @@ static int ab8500_charger_probe(struct platform_device *pdev)

/* Register USB charger class */
if (di->usb_chg.enabled) {
ret = power_supply_register(di->dev, &di->usb_chg.psy);
ret = power_supply_register(di->dev, &di->usb_chg.psy,
&psy_cfg);
if (ret) {
dev_err(di->dev, "failed to register USB charger\n");
goto free_ac;
Expand Down
8 changes: 5 additions & 3 deletions drivers/power/ab8500_fg.c
Original file line number Diff line number Diff line change
Expand Up @@ -3075,6 +3075,7 @@ static int ab8500_fg_probe(struct platform_device *pdev)
{
struct device_node *np = pdev->dev.of_node;
struct abx500_bm_data *plat = pdev->dev.platform_data;
struct power_supply_config psy_cfg = {};
struct ab8500_fg *di;
int i, irq;
int ret = 0;
Expand Down Expand Up @@ -3111,10 +3112,11 @@ static int ab8500_fg_probe(struct platform_device *pdev)
di->fg_psy.properties = ab8500_fg_props;
di->fg_psy.num_properties = ARRAY_SIZE(ab8500_fg_props);
di->fg_psy.get_property = ab8500_fg_get_property;
di->fg_psy.supplied_to = supply_interface;
di->fg_psy.num_supplicants = ARRAY_SIZE(supply_interface),
di->fg_psy.external_power_changed = ab8500_fg_external_power_changed;

psy_cfg.supplied_to = supply_interface;
psy_cfg.num_supplicants = ARRAY_SIZE(supply_interface);

di->bat_cap.max_mah_design = MILLI_TO_MICRO *
di->bm->bat_type[di->bm->batt_id].charge_full_design;

Expand Down Expand Up @@ -3174,7 +3176,7 @@ static int ab8500_fg_probe(struct platform_device *pdev)
di->flags.batt_id_received = false;

/* Register FG power supply class */
ret = power_supply_register(di->dev, &di->fg_psy);
ret = power_supply_register(di->dev, &di->fg_psy, &psy_cfg);
if (ret) {
dev_err(di->dev, "failed to register FG psy\n");
goto free_inst_curr_wq;
Expand Down
8 changes: 5 additions & 3 deletions drivers/power/abx500_chargalg.c
Original file line number Diff line number Diff line change
Expand Up @@ -2047,6 +2047,7 @@ static int abx500_chargalg_probe(struct platform_device *pdev)
{
struct device_node *np = pdev->dev.of_node;
struct abx500_bm_data *plat = pdev->dev.platform_data;
struct power_supply_config psy_cfg = {};
struct abx500_chargalg *di;
int ret = 0;

Expand Down Expand Up @@ -2080,11 +2081,12 @@ static int abx500_chargalg_probe(struct platform_device *pdev)
di->chargalg_psy.properties = abx500_chargalg_props;
di->chargalg_psy.num_properties = ARRAY_SIZE(abx500_chargalg_props);
di->chargalg_psy.get_property = abx500_chargalg_get_property;
di->chargalg_psy.supplied_to = supply_interface;
di->chargalg_psy.num_supplicants = ARRAY_SIZE(supply_interface),
di->chargalg_psy.external_power_changed =
abx500_chargalg_external_power_changed;

psy_cfg.supplied_to = supply_interface;
psy_cfg.num_supplicants = ARRAY_SIZE(supply_interface);

/* Initilialize safety timer */
hrtimer_init(&di->safety_timer, CLOCK_REALTIME, HRTIMER_MODE_ABS);
di->safety_timer.function = abx500_chargalg_safety_timer_expired;
Expand Down Expand Up @@ -2115,7 +2117,7 @@ static int abx500_chargalg_probe(struct platform_device *pdev)
di->chg_info.prev_conn_chg = -1;

/* Register chargalg power supply class */
ret = power_supply_register(di->dev, &di->chargalg_psy);
ret = power_supply_register(di->dev, &di->chargalg_psy, &psy_cfg);
if (ret) {
dev_err(di->dev, "failed to register chargalg psy\n");
goto free_chargalg_wq;
Expand Down
2 changes: 1 addition & 1 deletion drivers/power/axp288_fuel_gauge.c
Original file line number Diff line number Diff line change
Expand Up @@ -1099,7 +1099,7 @@ static int axp288_fuel_gauge_probe(struct platform_device *pdev)
info->bat.set_property = fuel_gauge_set_property;
info->bat.property_is_writeable = fuel_gauge_property_is_writeable;
info->bat.external_power_changed = fuel_gauge_external_power_changed;
ret = power_supply_register(&pdev->dev, &info->bat);
ret = power_supply_register(&pdev->dev, &info->bat, NULL);
if (ret) {
dev_err(&pdev->dev, "failed to register battery: %d\n", ret);
return ret;
Expand Down
2 changes: 1 addition & 1 deletion drivers/power/bq2415x_charger.c
Original file line number Diff line number Diff line change
Expand Up @@ -1051,7 +1051,7 @@ static int bq2415x_power_supply_init(struct bq2415x_device *bq)
return -ENOMEM;
}

ret = power_supply_register(bq->dev, &bq->charger);
ret = power_supply_register(bq->dev, &bq->charger, NULL);
if (ret) {
kfree(bq->model);
return ret;
Expand Down
4 changes: 2 additions & 2 deletions drivers/power/bq24190_charger.c
Original file line number Diff line number Diff line change
Expand Up @@ -1418,15 +1418,15 @@ static int bq24190_probe(struct i2c_client *client,

bq24190_charger_init(&bdi->charger);

ret = power_supply_register(dev, &bdi->charger);
ret = power_supply_register(dev, &bdi->charger, NULL);
if (ret) {
dev_err(dev, "Can't register charger\n");
goto out2;
}

bq24190_battery_init(&bdi->battery);

ret = power_supply_register(dev, &bdi->battery);
ret = power_supply_register(dev, &bdi->battery, NULL);
if (ret) {
dev_err(dev, "Can't register battery\n");
goto out3;
Expand Down
10 changes: 6 additions & 4 deletions drivers/power/bq24735-charger.c
Original file line number Diff line number Diff line change
Expand Up @@ -249,6 +249,7 @@ static int bq24735_charger_probe(struct i2c_client *client,
int ret;
struct bq24735 *charger;
struct power_supply *supply;
struct power_supply_config psy_cfg = {};
char *name;

charger = devm_kzalloc(&client->dev, sizeof(*charger), GFP_KERNEL);
Expand Down Expand Up @@ -284,9 +285,10 @@ static int bq24735_charger_probe(struct i2c_client *client,
supply->properties = bq24735_charger_properties;
supply->num_properties = ARRAY_SIZE(bq24735_charger_properties);
supply->get_property = bq24735_charger_get_property;
supply->supplied_to = charger->pdata->supplied_to;
supply->num_supplicants = charger->pdata->num_supplicants;
supply->of_node = client->dev.of_node;

psy_cfg.supplied_to = charger->pdata->supplied_to;
psy_cfg.num_supplicants = charger->pdata->num_supplicants;
psy_cfg.of_node = client->dev.of_node;

i2c_set_clientdata(client, charger);

Expand Down Expand Up @@ -341,7 +343,7 @@ static int bq24735_charger_probe(struct i2c_client *client,
}
}

ret = power_supply_register(&client->dev, supply);
ret = power_supply_register(&client->dev, supply, &psy_cfg);
if (ret < 0) {
dev_err(&client->dev, "Failed to register power supply: %d\n",
ret);
Expand Down
2 changes: 1 addition & 1 deletion drivers/power/bq27x00_battery.c
Original file line number Diff line number Diff line change
Expand Up @@ -791,7 +791,7 @@ static int bq27x00_powersupply_init(struct bq27x00_device_info *di)
INIT_DELAYED_WORK(&di->work, bq27x00_battery_poll);
mutex_init(&di->lock);

ret = power_supply_register_no_ws(di->dev, &di->bat);
ret = power_supply_register_no_ws(di->dev, &di->bat, NULL);
if (ret) {
dev_err(di->dev, "failed to register battery: %d\n", ret);
return ret;
Expand Down
2 changes: 1 addition & 1 deletion drivers/power/charger-manager.c
Original file line number Diff line number Diff line change
Expand Up @@ -1740,7 +1740,7 @@ static int charger_manager_probe(struct platform_device *pdev)

INIT_DELAYED_WORK(&cm->fullbatt_vchk_work, fullbatt_vchk);

ret = power_supply_register(NULL, &cm->charger_psy);
ret = power_supply_register(NULL, &cm->charger_psy, NULL);
if (ret) {
dev_err(&pdev->dev, "Cannot register charger-manager with name \"%s\"\n",
cm->charger_psy.name);
Expand Down
4 changes: 2 additions & 2 deletions drivers/power/collie_battery.c
Original file line number Diff line number Diff line change
Expand Up @@ -334,10 +334,10 @@ static int collie_bat_probe(struct ucb1x00_dev *dev)

INIT_WORK(&bat_work, collie_bat_work);

ret = power_supply_register(&dev->ucb->dev, &collie_bat_main.psy);
ret = power_supply_register(&dev->ucb->dev, &collie_bat_main.psy, NULL);
if (ret)
goto err_psy_reg_main;
ret = power_supply_register(&dev->ucb->dev, &collie_bat_bu.psy);
ret = power_supply_register(&dev->ucb->dev, &collie_bat_bu.psy, NULL);
if (ret)
goto err_psy_reg_bu;

Expand Down
2 changes: 1 addition & 1 deletion drivers/power/da9030_battery.c
Original file line number Diff line number Diff line change
Expand Up @@ -541,7 +541,7 @@ static int da9030_battery_probe(struct platform_device *pdev)
goto err_notifier;

da9030_battery_setup_psy(charger);
ret = power_supply_register(&pdev->dev, &charger->psy);
ret = power_supply_register(&pdev->dev, &charger->psy, NULL);
if (ret)
goto err_ps_register;

Expand Down
2 changes: 1 addition & 1 deletion drivers/power/da9052-battery.c
Original file line number Diff line number Diff line change
Expand Up @@ -625,7 +625,7 @@ static s32 da9052_bat_probe(struct platform_device *pdev)
}
}

ret = power_supply_register(&pdev->dev, &bat->psy);
ret = power_supply_register(&pdev->dev, &bat->psy, NULL);
if (ret)
goto err;

Expand Down
Loading

0 comments on commit 2dc9215

Please sign in to comment.