summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorLin Fuzhen <fuzhen.lin@freescale.com>2012-06-19 16:23:13 +0800
committerLin Fuzhen <fuzhen.lin@freescale.com>2012-06-19 16:33:31 +0800
commit41a20f153040b157aa79121ee71e5ca6ed9292f3 (patch)
treea560b7ce809d4fcb43a2a080ae102b85dd8c2295 /drivers
parent4d8fa34c73b6c1d0eb65e0c8e816b1332ebbf150 (diff)
ENGR00214081-3 PM: Need init the wakelock before add battery device
Fix below issue: [<c00ad820>] (wake_lock_internal+0x288/0x344) from [<c0372174>] (power_supply_changed+0x28/0x40) [<c0372174>] (power_supply_changed+0x28/0x40) from [<c0372d70>] (max8903_battery_update_status+0xc4/0x120) [<c0372d70>] (max8903_battery_update_status+0xc4/0x120) from [<c0372fe8>] (max8903_battery_get_property+0x2c/0x1ec) [<c0372fe8>] (max8903_battery_get_property+0x2c/0x1ec) from [<c03723f8>] (power_supply_show_property+0x3c/0x1ac) [<c03723f8>] (power_supply_show_property+0x3c/0x1ac) from [<c0372600>] (power_supply_uevent+0x98/0x19c) [<c0372600>] (power_supply_uevent+0x98/0x19c) from [<c028969c>] (dev_uevent+0xa4/0x170) [<c028969c>] (dev_uevent+0xa4/0x170) from [<c0240c20>] (kobject_uevent_env+0x1b4/0x454) [<c0240c20>] (kobject_uevent_env+0x1b4/0x454) from [<c028a2d4>] (device_add+0x49c/0x570) [<c028a2d4>] (device_add+0x49c/0x570) from [<c0372230>] (power_supply_register+0xa4/0x110) [<c0372230>] (power_supply_register+0xa4/0x110) from [<c0564300>] (max8903_probe+0x2f8/0x688) [<c0564300>] (max8903_probe+0x2f8/0x688) from [<c028d178>] (platform_drv_probe+0x18/0x1c) [<c028d178>] (platform_drv_probe+0x18/0x1c) from [<c028bebc>] (driver_probe_device+0x98/0x1a8) [<c028bebc>] (driver_probe_device+0x98/0x1a8) from [<c028c058>] (__driver_attach+0x8c/0x90) [<c028c058>] (__driver_attach+0x8c/0x90) from [<c028b708>] (bus_for_each_dev+0x60/0x8c) [<c028b708>] (bus_for_each_dev+0x60/0x8c) from [<c028afd8>] (bus_add_driver+0xa0/0x234) [<c028afd8>] (bus_add_driver+0xa0/0x234) from [<c028c64c>] (driver_register+0x78/0x144) [<c028c64c>] (driver_register+0x78/0x144) from [<c0040520>] (do_one_initcall+0x34/0x17c) [<c0040520>] (do_one_initcall+0x34/0x17c) from [<c00083e8>] (kernel_init+0xb4/0x160) [<c00083e8>] (kernel_init+0xb4/0x160) from [<c0047074>] (kernel_thread_exit+0x0/0x8) for the wake lock in power_supply_register() route is not initialized so in wakelock_internal(), it will cause BUG(), and then system crash Signed-off-by: Lin Fuzhen <fuzhen.lin@freescale.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/power/power_supply_core.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/drivers/power/power_supply_core.c b/drivers/power/power_supply_core.c
index 03810ce5633f..eb9491b20a0d 100644
--- a/drivers/power/power_supply_core.c
+++ b/drivers/power/power_supply_core.c
@@ -194,13 +194,13 @@ int power_supply_register(struct device *parent, struct power_supply *psy)
if (rc)
goto kobject_set_name_failed;
+ spin_lock_init(&psy->changed_lock);
+ wake_lock_init(&psy->work_wake_lock, WAKE_LOCK_SUSPEND, "power-supply");
+
rc = device_add(dev);
if (rc)
goto device_add_failed;
- spin_lock_init(&psy->changed_lock);
- wake_lock_init(&psy->work_wake_lock, WAKE_LOCK_SUSPEND, "power-supply");
-
rc = power_supply_create_triggers(psy);
if (rc)
goto create_triggers_failed;