Revision: 55 http://svn.sourceforge.net/mactel-linux/?rev=55&view=rev Author: nboichat Date: 2006-11-02 02:47:25 -0800 (Thu, 02 Nov 2006)
Log Message: ----------- Add temperature sensors to applesmc (coded this a few weeks ago, but forgot to commit). Modified Paths: -------------- trunk/kernel/mactel-patches-2.6.18/applesmc.patch Modified: trunk/kernel/mactel-patches-2.6.18/applesmc.patch =================================================================== --- trunk/kernel/mactel-patches-2.6.18/applesmc.patch 2006-10-17 19:44:19 UTC (rev 54) +++ trunk/kernel/mactel-patches-2.6.18/applesmc.patch 2006-11-02 10:47:25 UTC (rev 55) @@ -1,6 +1,6 @@ -diff -pruN linux/drivers/hwmon.vanilla/Kconfig linux/drivers/hwmon/Kconfig ---- linux/drivers/hwmon.vanilla/Kconfig 2006-10-14 13:07:48.000000000 +0800 -+++ linux/drivers/hwmon/Kconfig 2006-10-14 13:08:22.000000000 +0800 +diff -pruN linux-2.6.18/drivers/hwmon.vanilla/Kconfig linux-2.6.18/drivers/hwmon/Kconfig +--- linux-2.6.18/drivers/hwmon.vanilla/Kconfig 2006-10-14 13:07:48.000000000 +0800 ++++ linux-2.6.18/drivers/hwmon/Kconfig 2006-10-14 13:08:22.000000000 +0800 @@ -507,6 +507,26 @@ config SENSORS_HDAPS Say Y here if you have an applicable laptop and want to experience the awesome power of hdaps. @@ -28,9 +28,9 @@ config HWMON_DEBUG_CHIP bool "Hardware Monitoring Chip debugging messages" depends on HWMON -diff -pruN linux/drivers/hwmon.vanilla/Makefile linux/drivers/hwmon/Makefile ---- linux/drivers/hwmon.vanilla/Makefile 2006-10-14 13:07:48.000000000 +0800 -+++ linux/drivers/hwmon/Makefile 2006-10-14 13:08:22.000000000 +0800 +diff -pruN linux-2.6.18/drivers/hwmon.vanilla/Makefile linux-2.6.18/drivers/hwmon/Makefile +--- linux-2.6.18/drivers/hwmon.vanilla/Makefile 2006-10-14 13:07:48.000000000 +0800 ++++ linux-2.6.18/drivers/hwmon/Makefile 2006-10-14 13:08:22.000000000 +0800 @@ -18,6 +18,7 @@ obj-$(CONFIG_SENSORS_ADM1025) += adm1025 obj-$(CONFIG_SENSORS_ADM1026) += adm1026.o obj-$(CONFIG_SENSORS_ADM1031) += adm1031.o @@ -39,10 +39,10 @@ obj-$(CONFIG_SENSORS_ATXP1) += atxp1.o obj-$(CONFIG_SENSORS_DS1621) += ds1621.o obj-$(CONFIG_SENSORS_F71805F) += f71805f.o -diff -pruN linux/drivers/hwmon.vanilla/applesmc.c linux/drivers/hwmon/applesmc.c ---- linux/drivers/hwmon.vanilla/applesmc.c 1970-01-01 07:30:00.000000000 +0730 -+++ linux/drivers/hwmon/applesmc.c 2006-10-17 12:47:23.000000000 +0800 -@@ -0,0 +1,844 @@ +diff -pruN linux-2.6.18/drivers/hwmon.vanilla/applesmc.c linux-2.6.18/drivers/hwmon/applesmc.c +--- linux-2.6.18/drivers/hwmon.vanilla/applesmc.c 1970-01-01 07:30:00.000000000 +0730 ++++ linux-2.6.18/drivers/hwmon/applesmc.c 2006-10-19 18:19:50.000000000 +0800 +@@ -0,0 +1,898 @@ +/* + * drivers/hwmon/applesmc.c - driver for Apple's SMC (various sensors, + * fan control) @@ -110,6 +110,9 @@ +#define FAN_SAFE_SPEED "F0Sf" //r-o length 2 +#define FAN_TARGET_SPEED "F0Tg" //r-w length 2 + ++static const char* temperature_sensors[] = ++ { "TB0T", "TC0D", "TC0P", "Th0H", "Ts0P", "Th1H", "Ts1P" }; ++ +#define INIT_TIMEOUT_MSECS 5000 /* wait up to 5s for device init ... */ +#define INIT_WAIT_MSECS 50 /* ... in 50ms increments */ + @@ -166,7 +169,7 @@ + * Returns zero on success or a negative error on failure. Callers must + * hold applesmc_sem. + */ -+static int applesmc_read_key(char* key, u8* buffer, u8 len) ++static int applesmc_read_key(const char* key, u8* buffer, u8 len) +{ + int ret = -EIO; + int i; @@ -203,7 +206,7 @@ + * Returns zero on success or a negative error on failure. Callers must + * hold applesmc_sem. + */ -+static int applesmc_write_key(char* key, u8* buffer, u8 len) ++static int applesmc_write_key(const char* key, u8* buffer, u8 len) +{ + int ret = -EIO; + int i; @@ -435,11 +438,32 @@ + return sprintf(buf, "(%d,%d)\n", left, right); +} + ++/* Displays °C * 100 */ ++static ssize_t applesmc_show_temperature(struct device *dev, char *buf, const char *key) ++{ ++ int ret; ++ u8 buffer[2]; ++ unsigned int temp; ++ ++ down(&applesmc_sem); ++ ++ ret = applesmc_read_key(key, buffer, 2); ++ temp = buffer[0]*100; ++ temp += (buffer[1] >> 6) * 25; ++ ++ up(&applesmc_sem); ++ ++ if (ret) ++ return ret; ++ else ++ return sprintf(buf, "%u\n", temp); ++} ++ +static ssize_t applesmc_show_fan_speed(struct device *dev, char *buf, -+ char* key, int offset) ++ const char* key, int offset) +{ + int ret; -+ u16 speed = 0; ++ unsigned int speed = 0; + char newkey[5]; + u8 buffer[2]; + @@ -452,17 +476,17 @@ + down(&applesmc_sem); + + ret = applesmc_read_key(newkey, buffer, 2); -+ speed = (buffer[0] << 8 | buffer[1]) >> 2; ++ speed = ((buffer[0] << 8 | buffer[1]) >> 2); + + up(&applesmc_sem); + if (ret) + return ret; + else -+ return sprintf(buf, "%d\n", speed); ++ return sprintf(buf, "%u\n", speed); +} + +static ssize_t applesmc_store_fan_speed(struct device *dev, const char *buf, -+ size_t count, char* key, int offset) ++ size_t count, const char* key, int offset) +{ + int ret; + u32 speed; @@ -663,6 +687,34 @@ +sysfs_create_file(client, &dev_attr_fan##offset##_manual.attr); \ +} while (0) + ++#define sysfs_temperature_offset(offset) \ ++static ssize_t show_temperature_##offset (struct device *dev, \ ++ struct device_attribute *attr, char *buf) \ ++{ \ ++ return applesmc_show_temperature(dev, buf, temperature_sensors[offset]); \ ++} \ ++static DEVICE_ATTR(temperature_##offset, S_IRUGO, \ ++ show_temperature_##offset, NULL); ++ ++sysfs_temperature_offset(0); ++sysfs_temperature_offset(1); ++sysfs_temperature_offset(2); ++sysfs_temperature_offset(3); ++sysfs_temperature_offset(4); ++sysfs_temperature_offset(5); ++sysfs_temperature_offset(6); ++ ++#define device_create_files_temperature(client) \ ++{ \ ++ sysfs_create_file(client, &dev_attr_temperature_0.attr); \ ++ sysfs_create_file(client, &dev_attr_temperature_1.attr); \ ++ sysfs_create_file(client, &dev_attr_temperature_2.attr); \ ++ sysfs_create_file(client, &dev_attr_temperature_3.attr); \ ++ sysfs_create_file(client, &dev_attr_temperature_4.attr); \ ++ sysfs_create_file(client, &dev_attr_temperature_5.attr); \ ++ sysfs_create_file(client, &dev_attr_temperature_6.attr); \ ++} while (0) ++ +/* Module stuff */ + +/* @@ -833,6 +885,8 @@ + } + } + ++ device_create_files_temperature(&pdev->dev.kobj); ++ + if (applesmc_accelerometer) { + ret = applesmc_create_accelerometer(); + if (ret) @@ -887,3 +941,4 @@ +MODULE_AUTHOR("Nicolas Boichat"); +MODULE_DESCRIPTION("Apple SMC"); +MODULE_LICENSE("GPL v2"); + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. ------------------------------------------------------------------------- Using Tomcat but need to do more? Need to support web services, security? Get stuff done quickly with pre-integrated technology to make your job easier Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 _______________________________________________ Mactel-linux-devel mailing list Mactel-linux-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mactel-linux-devel