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

Reply via email to