windfarm: add PowerMac 12,1 support
Subsystems (2)
PATCH 1/1 windfarm: add PowerMac 12,1 support
From: Etienne Bersac <[email protected]>
Implement a new driver named windfarm_pm121 which drive fans on PowerMac 12,1 machine : iMac G5 iSight (rev C) 17" and 20". It's based on windfarm_pm81 driver from Benjamin Herrenschmidt.
Signed-off-by Etienne Bersac <[email protected]>
Signed-off-by David Woodhouse <[email protected]>
Signed-off-by Benjamin Herrenschmidt <[email protected]>
---
Initial patch by Etienne, fixes by David, but they couldn't be bothered making that a single patch for merging so here it is.
(Etienne, the accent on your name didn't survive the process sorry)
arch/powerpc/configs/g5_defconfig | 1 drivers/macintosh/Kconfig | 8 drivers/macintosh/Makefile | 5 drivers/macintosh/windfarm_lm75_sensor.c | 6 drivers/macintosh/windfarm_max6690_sensor.c | 20 drivers/macintosh/windfarm_pm121.c | 1040 ++++++++++++++++++++++++++++ drivers/macintosh/windfarm_smu_controls.c | 4 7 files changed, 1078 insertions(+), 6 deletions(-)
arch/powerpc/configs/g5_defconfig +1 -0
@@ -696,6 +696,7 @@ CONFIG_WINDFARM=y CONFIG_WINDFARM_PM81=y CONFIG_WINDFARM_PM91=y CONFIG_WINDFARM_PM112=y +CONFIG_WINDFARM_PM121=y # CONFIG_PMAC_RACKMETER is not set CONFIG_NETDEVICES=y # CONFIG_NETDEVICES_MULTIQUEUE is not set
drivers/macintosh/Kconfig +8 -0
@@ -234,6 +234,14 @@ config WINDFARM_PM112 which are the recent dual and quad G5 machines using the 970MP dual-core processor. +config WINDFARM_PM121 + tristate "Support for thermal management on PowerMac12,1" + depends on WINDFARM && I2C && PMAC_SMU + select I2C_POWERMAC + help + This driver provides thermal control for the PowerMac12,1 + which is the iMac G5 (iSight) + config ANSLCD tristate "Support for ANS LCD display" depends on ADB_CUDA && PPC_PMAC
drivers/macintosh/Makefile +5 -0
@@ -42,4 +42,9 @@ obj-$(CONFIG_WINDFARM_PM112) += windfarm windfarm_smu_sensors.o \ windfarm_max6690_sensor.o \ windfarm_lm75_sensor.o windfarm_pid.o +obj-$(CONFIG_WINDFARM_PM121) += windfarm_pm121.o windfarm_smu_sat.o \ + windfarm_smu_controls.o \ + windfarm_smu_sensors.o \ + windfarm_max6690_sensor.o \ + windfarm_lm75_sensor.o windfarm_pid.o obj-$(CONFIG_PMAC_RACKMETER) += rack-meter.o
drivers/macintosh/windfarm_lm75_sensor.c +6 -0
@@ -127,6 +127,12 @@ static struct wf_lm75_sensor *wf_lm75_cr*/ if (!strcmp (loc,"Hard drive" ) || !strcmp (loc,"DRIVE BAY" )) lm->sens.name ="hd-temp" ; +else if (!strcmp (loc,"Incoming Air Temp" )) + lm->sens.name ="incoming-air-temp" ; +else if (!strcmp (loc,"ODD Temp" )) + lm->sens.name ="optical-drive-temp" ; +else if (!strcmp (loc,"HD Temp" )) + lm->sens.name ="hard-drive-temp" ;else goto fail;
drivers/macintosh/windfarm_max6690_sensor.c +14 -6
@@ -77,18 +77,28 @@ static struct wf_sensor_ops wf_max6690_o .owner = THIS_MODULE, }; -static void wf_max6690_create (struct i2c_adapter *adapter,u8 addr) +static void wf_max6690_create (struct i2c_adapter *adapter,u8 addr, +const char *loc) {struct wf_6690_sensor *max; -char *name ="backside-temp" ; +char *name; max =kzalloc (sizeof (struct wf_6690_sensor ),GFP_KERNEL );if (max ==NULL ) {printk (KERN_ERR "windfarm: Couldn't create MAX6690 sensor %s: " -"no memory\n" , name); +"no memory\n" , loc);return ; } +if (!strcmp (loc,"BACKSIDE" )) + name ="backside-temp" ; +else if (!strcmp (loc,"NB Ambient" )) + name ="north-bridge-temp" ; +else if (!strcmp (loc,"GPU Ambient" )) + name ="gpu-temp" ; +else + goto fail; + max->sens.ops = &wf_max6690_ops; max->sens.name = name; max->i2c.addr = addr >>1 ;
@@ -138,9 +148,7 @@ static int wf_max6690_attach(struct i2c_if (loc ==NULL || addr ==0 )continue ;printk ("found max6690, loc=%s addr=0x%02x\n" , loc, addr); -if (strcmp (loc,"BACKSIDE" )) -continue ; -wf_max6690_create (adapter, addr); +wf_max6690_create (adapter, addr, loc); }return 0 ;
drivers/macintosh/windfarm_pm121.c new file +1040 -0
1,040 lines not on this page · raw message
drivers/macintosh/windfarm_smu_controls.c +4 -0
@@ -218,6 +218,10 @@ static struct smu_fan_control *smu_fan_c fct->ctrl.name ="cpu-fan" ; else if (!strcmp(l, "Hard Drive") || !strcmp(l, "Hard drive")) fct->ctrl.name ="drive-bay-fan" ; + else if (!strcmp(l, "HDD Fan")) /* seen on iMac G5 iSight */ + fct->ctrl.name ="hard-drive-fan" ; + else if (!strcmp(l, "ODD Fan")) /* same */ + fct->ctrl.name ="optical-drive-fan" ;/* Unrecognized fan, bail out */ if (fct->ctrl.name ==NULL )