summaryrefslogtreecommitdiff
path: root/arch/powerpc
diff options
context:
space:
mode:
authorMarc Zyngier <maz@misterjones.org>2010-12-05 05:05:37 +0000
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>2010-12-09 15:36:30 +1100
commit98b14d6b290d96b24ae993ceaccc59b2aa4b130c (patch)
treecbf1655199e699411b0ca0e1b92b551cf37abf28 /arch/powerpc
parent982cf00412a890ca738c2d78528b652ca431ad1a (diff)
downloadlinux-3.10-98b14d6b290d96b24ae993ceaccc59b2aa4b130c.tar.gz
linux-3.10-98b14d6b290d96b24ae993ceaccc59b2aa4b130c.tar.bz2
linux-3.10-98b14d6b290d96b24ae993ceaccc59b2aa4b130c.zip
powerpc/powermac: Make auto-loading of therm_pm72 possible
The therm_pm72 driver, used on the PowerMac G5 range, cannot be auto-loaded, since the driver itself creates both the device node and the driver instance. Moving the device node creation to the platform setup code and adding the necessary MODULE_DEVICE_TABLE() information allows the driver to be automatically loaded by udev on any semi-modern distribution. It "fixes" a major source of problem on G5 machines where the driver wasn't explicitely loaded by default, and the system would automatically shutdown under load. Tested on an Xserve G5. Signed-off-by: Marc Zyngier <maz@misterjones.org> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Diffstat (limited to 'arch/powerpc')
-rw-r--r--arch/powerpc/platforms/powermac/setup.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/arch/powerpc/platforms/powermac/setup.c b/arch/powerpc/platforms/powermac/setup.c
index 9deb274841f..d5aceb7fb12 100644
--- a/arch/powerpc/platforms/powermac/setup.c
+++ b/arch/powerpc/platforms/powermac/setup.c
@@ -506,6 +506,15 @@ static int __init pmac_declare_of_platform_devices(void)
of_platform_device_create(np, "smu", NULL);
of_node_put(np);
}
+ np = of_find_node_by_type(NULL, "fcu");
+ if (np == NULL) {
+ /* Some machines have strangely broken device-tree */
+ np = of_find_node_by_path("/u3@0,f8000000/i2c@f8001000/fan@15e");
+ }
+ if (np) {
+ of_platform_device_create(np, "temperature", NULL);
+ of_node_put(np);
+ }
return 0;
}