Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c3503fd0 authored by Daniel Drake's avatar Daniel Drake Committed by Anton Vorontsov
Browse files

olpc_battery: Bind to device tree



This is cleaner, and allows suspend/resume (wakeup) handlers to be
added in an upcoming patch.

Signed-off-by: default avatarDaniel Drake <dsd@laptop.org>
Acked-by: default avatarAndres Salomon <dilinger@queued.net>
Signed-off-by: default avatarAnton Vorontsov <cbouatmailru@gmail.com>
parent 35c3ae5e
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
OLPC battery
~~~~~~~~~~~~

Required properties:
  - compatible : "olpc,xo1-battery"
+34 −21
Original line number Diff line number Diff line
@@ -519,9 +519,8 @@ static struct device_attribute olpc_bat_error = {
 *		Initialisation
 *********************************************************************/

static struct platform_device *bat_pdev;

static struct power_supply olpc_bat = {
	.name = "olpc-battery",
	.get_property = olpc_bat_get_property,
	.use_for_apm = 1,
};
@@ -534,14 +533,11 @@ void olpc_battery_trigger_uevent(unsigned long cause)
		kobject_uevent(&olpc_bat.dev->kobj, KOBJ_CHANGE);
}

static int __init olpc_bat_init(void)
static int __devinit olpc_battery_probe(struct platform_device *pdev)
{
	int ret = 0;
	int ret;
	uint8_t status;

	if (!olpc_platform_info.ecver)
		return -ENXIO;

	/*
	 * We've seen a number of EC protocol changes; this driver requires
	 * the latest EC protocol, supported by 0x44 and above.
@@ -558,15 +554,10 @@ static int __init olpc_bat_init(void)

	/* Ignore the status. It doesn't actually matter */

	bat_pdev = platform_device_register_simple("olpc-battery", 0, NULL, 0);
	if (IS_ERR(bat_pdev))
		return PTR_ERR(bat_pdev);

	ret = power_supply_register(&bat_pdev->dev, &olpc_ac);
	ret = power_supply_register(&pdev->dev, &olpc_ac);
	if (ret)
		goto ac_failed;
		return ret;

	olpc_bat.name = bat_pdev->name;
	if (olpc_board_at_least(olpc_board_pre(0xd0))) { /* XO-1.5 */
		olpc_bat.properties = olpc_xo15_bat_props;
		olpc_bat.num_properties = ARRAY_SIZE(olpc_xo15_bat_props);
@@ -575,7 +566,7 @@ static int __init olpc_bat_init(void)
		olpc_bat.num_properties = ARRAY_SIZE(olpc_xo1_bat_props);
	}

	ret = power_supply_register(&bat_pdev->dev, &olpc_bat);
	ret = power_supply_register(&pdev->dev, &olpc_bat);
	if (ret)
		goto battery_failed;

@@ -587,7 +578,7 @@ static int __init olpc_bat_init(void)
	if (ret)
		goto error_failed;

	goto success;
	return 0;

error_failed:
	device_remove_bin_file(olpc_bat.dev, &olpc_bat_eeprom);
@@ -595,22 +586,44 @@ static int __init olpc_bat_init(void)
	power_supply_unregister(&olpc_bat);
battery_failed:
	power_supply_unregister(&olpc_ac);
ac_failed:
	platform_device_unregister(bat_pdev);
success:
	return ret;
}

static void __exit olpc_bat_exit(void)
static int __devexit olpc_battery_remove(struct platform_device *pdev)
{
	device_remove_file(olpc_bat.dev, &olpc_bat_error);
	device_remove_bin_file(olpc_bat.dev, &olpc_bat_eeprom);
	power_supply_unregister(&olpc_bat);
	power_supply_unregister(&olpc_ac);
	platform_device_unregister(bat_pdev);
	return 0;
}

static const struct of_device_id olpc_battery_ids[] __devinitconst = {
	{ .compatible = "olpc,xo1-battery" },
	{}
};
MODULE_DEVICE_TABLE(of, olpc_battery_ids);

static struct platform_driver olpc_battery_drv = {
	.driver = {
		.name = "olpc-battery",
		.owner = THIS_MODULE,
		.of_match_table = olpc_battery_ids,
	},
	.probe = olpc_battery_probe,
	.remove = __devexit_p(olpc_battery_remove),
};

static int __init olpc_bat_init(void)
{
	return platform_driver_register(&olpc_battery_drv);
}
module_init(olpc_bat_init);

static void __exit olpc_bat_exit(void)
{
	platform_driver_unregister(&olpc_battery_drv);
}
module_exit(olpc_bat_exit);

MODULE_AUTHOR("David Woodhouse <dwmw2@infradead.org>");