diff options
| author | Lin Fuzhen <fuzhen.lin@freescale.com> | 2012-06-19 16:23:13 +0800 |
|---|---|---|
| committer | Lin Fuzhen <fuzhen.lin@freescale.com> | 2012-06-19 16:33:31 +0800 |
| commit | 41a20f153040b157aa79121ee71e5ca6ed9292f3 (patch) | |
| tree | a560b7ce809d4fcb43a2a080ae102b85dd8c2295 /drivers | |
| parent | 4d8fa34c73b6c1d0eb65e0c8e816b1332ebbf150 (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.c | 6 |
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; |
