linux/drivers/power
Rajanikanth H.V 7eb0fad53e ab8500_btemp: Demote initcall sequence
commit eeb0751c99 upstream.

Power supply subsystem creates thermal zone device for the property
'POWER_SUPPLY_PROP_TEMP' which requires thermal subsystem to be ready
before 'ab8500 battery temperature monitor' driver is initialized. ab8500
btemp driver is initialized with subsys_initcall whereas thermal subsystem
is initialized with fs_initcall which causes
thermal_zone_device_register(...) to crash since the required structure
'thermal_class' is not initialized yet:

Unable to handle kernel NULL pointer dereference at virtual address 000000a4
pgd = c0004000
[000000a4] *pgd=00000000
Internal error: Oops: 5 [#1] PREEMPT SMP ARM
Modules linked in:
CPU: 0    Tainted: G        W     (3.8.0-rc4-00001-g632fda8-dirty #1)
PC is at _raw_spin_lock+0x18/0x54
LR is at get_device_parent+0x50/0x1b8
pc : [<c02f1dd0>]    lr : [<c01cb248>]    psr: 60000013
sp : ef04bdc8  ip : 00000000  fp : c0446180
r10: ef216e38  r9 : c03af5d0  r8 : ef275c18
r7 : 00000000  r6 : c0476c14  r5 : ef275c18  r4 : ef095840
r3 : ef04a000  r2 : 00000001  r1 : 00000000  r0 : 000000a4
Flags: nZCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment kernel
Control: 10c5787d  Table: 0000404a  DAC: 00000015
Process swapper/0 (pid: 1, stack limit = 0xef04a238)
Stack: (0xef04bdc8 to 0xef04c000)
[...]
[<c02f1dd0>] (_raw_spin_lock+0x18/0x54) from [<c01cb248>] (get_device_parent+0x50/0x1b8)
[<c01cb248>] (get_device_parent+0x50/0x1b8) from [<c01cb8d8>] (device_add+0xa4/0x574)
[<c01cb8d8>] (device_add+0xa4/0x574) from [<c020b91c>] (thermal_zone_device_register+0x118/0x938)
[<c020b91c>] (thermal_zone_device_register+0x118/0x938) from [<c0202030>] (power_supply_register+0x170/0x1f8)
[<c0202030>] (power_supply_register+0x170/0x1f8) from [<c02055ec>] (ab8500_btemp_probe+0x208/0x47c)
[<c02055ec>] (ab8500_btemp_probe+0x208/0x47c) from [<c01cf0dc>] (platform_drv_probe+0x14/0x18)
[<c01cf0dc>] (platform_drv_probe+0x14/0x18) from [<c01cde70>] (driver_probe_device+0x74/0x20c)
[<c01cde70>] (driver_probe_device+0x74/0x20c) from [<c01ce094>] (__driver_attach+0x8c/0x90)
[<c01ce094>] (__driver_attach+0x8c/0x90) from [<c01cc640>] (bus_for_each_dev+0x4c/0x80)
[<c01cc640>] (bus_for_each_dev+0x4c/0x80) from [<c01cd6b4>] (bus_add_driver+0x16c/0x23c)
[<c01cd6b4>] (bus_add_driver+0x16c/0x23c) from [<c01ce54c>] (driver_register+0x78/0x14c)
[<c01ce54c>] (driver_register+0x78/0x14c) from [<c00086ac>] (do_one_initcall+0xfc/0x164)
[<c00086ac>] (do_one_initcall+0xfc/0x164) from [<c02e89c8>] (kernel_init+0x120/0x2b8)
[<c02e89c8>] (kernel_init+0x120/0x2b8) from [<c000e358>] (ret_from_fork+0x14/0x3c)
Code: e3c3303f e5932004 e2822001 e5832004 (e1903f9f)
---[ end trace ed9df72941b5bada ]---

Signed-off-by: Rajanikanth H.V <rajanikanth.hv@stericsson.com>
Signed-off-by: Anton Vorontsov <anton@enomsg.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2013-03-04 06:06:44 +08:00
..
ab8500_btemp.c ab8500_btemp: Demote initcall sequence 2013-03-04 06:06:44 +08:00
ab8500_charger.c ab8500: Turn unneeded global symbols into local ones 2012-03-26 20:41:14 +04:00
ab8500_fg.c ab8500_fg: Fix some build warnings on x86_64 2012-03-26 20:41:26 +04:00
abx500_chargalg.c ab8500-chargalg: Only root should have write permission on sysfs file 2013-03-04 06:06:44 +08:00
apm_power.c device.h: cleanup users outside of linux/include (C files) 2012-03-11 14:27:37 -04:00
bq27x00_battery.c Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2012-03-20 21:12:50 -07:00
charger-manager.c charger-manager: Simplify charger_get_property(), get rid of a warning 2012-03-26 20:41:20 +04:00
collie_battery.c Merge git://git.infradead.org/users/cbou/battery-urgent 2012-01-10 20:55:11 +04:00
da9030_battery.c power_supply: Convert drivers/power/* to use module_platform_driver() 2012-01-04 09:12:07 +04:00
da9052-battery.c da9052-battery: Convert to use module_platform_driver 2012-03-26 20:41:17 +04:00
ds2760_battery.c module_param: make bool parameters really bool (drivers & misc) 2012-01-13 09:32:20 +10:30
ds2780_battery.c power_supply: Convert drivers/power/* to use module_platform_driver() 2012-01-04 09:12:07 +04:00
ds2781_battery.c DS2781 Maxim Stand-Alone Fuel Gauge battery and w1 slave drivers 2012-03-08 11:15:33 -08:00
ds2782_battery.c power_supply: Convert i2c drivers to module_i2c_driver 2012-03-26 20:41:22 +04:00
gpio-charger.c power_supply: Convert drivers/power/* to use module_platform_driver() 2012-01-04 09:12:07 +04:00
intel_mid_battery.c power_supply: Convert drivers/power/* to use module_platform_driver() 2012-01-04 09:12:07 +04:00
isp1704_charger.c Various small bugfixes and enhancements, plus two new drivers: 2012-03-30 16:09:02 -07:00
jz4740-battery.c jz4740-battery: Fix signedness bug 2012-01-06 05:57:17 +04:00
Kconfig Various small bugfixes and enhancements, plus two new drivers: 2012-03-30 16:09:02 -07:00
lp8727_charger.c power_supply: Convert i2c drivers to module_i2c_driver 2012-03-26 20:41:22 +04:00
Makefile Various small bugfixes and enhancements, plus two new drivers: 2012-03-30 16:09:02 -07:00
max8903_charger.c power_supply: Convert drivers/power/* to use module_platform_driver() 2012-01-04 09:12:07 +04:00
max8925_power.c power_supply: Convert drivers/power/* to use module_platform_driver() 2012-01-04 09:12:07 +04:00
max8997_charger.c max8997_charger: Remove duplicate module.h 2012-01-06 04:59:25 +04:00
max8998_charger.c Revert "max8998_charger: Include linux/module.h just once" 2012-03-26 20:41:27 +04:00
max17040_battery.c power_supply: Convert i2c drivers to module_i2c_driver 2012-03-26 20:41:22 +04:00
max17042_battery.c max17042_battery: Clean up interrupt handling 2012-03-26 20:41:29 +04:00
olpc_battery.c power_supply: Convert drivers/power/* to use module_platform_driver() 2012-01-04 09:12:07 +04:00
pcf50633-charger.c power_supply: Convert drivers/power/* to use module_platform_driver() 2012-01-04 09:12:07 +04:00
pda_power.c power_supply: Convert all users to new usb_phy 2012-02-13 13:53:21 +02:00
pmu_battery.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
power_supply_core.c power_supply: Drop usage of nowarn variant of sysfs_create_link() 2012-01-07 15:24:51 +04:00
power_supply_leds.c device.h: cleanup users outside of linux/include (C files) 2012-03-11 14:27:37 -04:00
power_supply_sysfs.c device.h: cleanup users outside of linux/include (C files) 2012-03-11 14:27:37 -04:00
power_supply.h device.h: cleanup users outside of linux/include (C files) 2012-03-11 14:27:37 -04:00
s3c_adc_battery.c s3c_adc_battery: Average over more than one adc sample 2012-01-06 06:13:35 +04:00
sbs-battery.c power_supply: Convert i2c drivers to module_i2c_driver 2012-03-26 20:41:22 +04:00
smb347-charger.c Add I2C driver for Summit Microelectronics SMB347 Battery Charger. 2012-03-26 20:41:01 +04:00
test_power.c power: Make test_power driver more dynamic. 2011-05-20 19:25:08 +04:00
tosa_battery.c power_supply: Convert drivers/power/* to use module_platform_driver() 2012-01-04 09:12:07 +04:00
twl4030_charger.c power_supply: Convert all users to new usb_phy 2012-02-13 13:53:21 +02:00
wm97xx_battery.c wm97xx_battery: Use DEFINE_MUTEX() for work_lock 2012-01-06 05:00:30 +04:00
wm831x_backup.c power_supply: Convert drivers/power/* to use module_platform_driver() 2012-01-04 09:12:07 +04:00
wm831x_power.c power_supply: Convert drivers/power/* to use module_platform_driver() 2012-01-04 09:12:07 +04:00
wm8350_power.c power_supply: Convert drivers/power/* to use module_platform_driver() 2012-01-04 09:12:07 +04:00
z2_battery.c power_supply: Convert i2c drivers to module_i2c_driver 2012-03-26 20:41:22 +04:00