All of lore.kernel.org
 help / color / mirror / Atom feed
From: Nikola Pajkovsky <npajkovs@redhat.com>
To: lm-sensors@vger.kernel.org
Subject: [lm-sensors] [PATCH 1/1] add FSCSYL to lm_sensors 2.10.8
Date: Tue, 06 Apr 2010 09:10:03 +0000	[thread overview]
Message-ID: <4BBAFA6B.3080508@redhat.com> (raw)

diff -up lm_sensors-2.10.7/lib/chips.c.fscsyl lm_sensors-2.10.7/lib/chips.c
--- lm_sensors-2.10.7/lib/chips.c.fscsyl    2008-07-01
14:23:06.000000000 -0400
+++ lm_sensors-2.10.7/lib/chips.c    2009-12-09 10:05:57.000000000 -0500
@@ -6361,6 +6361,68 @@ static sensors_chip_feature fschmd_featu
     { { 0 }, 0 }
 };
 
+#define SENSORS_FSCSYL_IN_FEATURES(nr) \
+    { { SENSORS_FSCSYL_IN(nr), "in" #nr, \
+        NOMAP, NOMAP, R }, \
+        NOSYSCTL, VALUE(1), 3 }
+
+#define SENSORS_FSCSYL_TEMP_FEATURES(nr) \
+    { { SENSORS_FSCSYL_TEMP(nr), "temp" #nr, \
+        NOMAP, NOMAP, R }, \
+        NOSYSCTL, VALUE(2), 3 }, \
+    { { SENSORS_FSCSYL_TEMP_MAX(nr), "temp" #nr "_max", \
+        SENSORS_FSCSYL_TEMP(nr), SENSORS_FSCSYL_TEMP(nr), RW }, \
+        NOSYSCTL, VALUE(1), 3 }, \
+    { { SENSORS_FSCSYL_TEMP_ALARM(nr), "temp" #nr "_alarm", \
+        SENSORS_FSCSYL_TEMP(nr), NOMAP, R }, \
+        NOSYSCTL, VALUE(1), 0 }, \
+    { { SENSORS_FSCSYL_TEMP_FAULT(nr), "temp" #nr "_fault", \
+        SENSORS_FSCSYL_TEMP(nr), NOMAP, R }, \
+        NOSYSCTL, VALUE(1), 0 }
+
+#define SENSORS_FSCSYL_FAN_FEATURES(nr) \
+    { { SENSORS_FSCSYL_FAN(nr), "fan" #nr, \
+        NOMAP, NOMAP, R }, \
+        NOSYSCTL, VALUE(1), 0 }, \
+    { { SENSORS_FSCSYL_FAN_DIV(nr), "fan" #nr "_div", \
+        SENSORS_FSCSYL_FAN(nr), NOMAP, RW }, \
+        NOSYSCTL, VALUE(nr), 0 }, \
+    { { SENSORS_FSCSYL_FAN_ALARM(nr), "fan" #nr "_alarm", \
+        SENSORS_FSCSYL_FAN(nr), NOMAP, R }, \
+        NOSYSCTL, VALUE(1), 0 }, \
+    { { SENSORS_FSCSYL_FAN_FAULT(nr), "fan" #nr "_fault", \
+        SENSORS_FSCSYL_FAN(nr), NOMAP, R }, \
+        NOSYSCTL, VALUE(1), 0 }
+
+static sensors_chip_feature fscsyl_features[] +{
+    SENSORS_FSCSYL_IN_FEATURES(0),
+    SENSORS_FSCSYL_IN_FEATURES(1),
+    SENSORS_FSCSYL_IN_FEATURES(2),
+    SENSORS_FSCSYL_IN_FEATURES(3),
+    SENSORS_FSCSYL_IN_FEATURES(4),
+    SENSORS_FSCSYL_IN_FEATURES(5),
+    SENSORS_FSCSYL_TEMP_FEATURES(1),
+    SENSORS_FSCSYL_TEMP_FEATURES(2),
+    SENSORS_FSCSYL_TEMP_FEATURES(3),
+    SENSORS_FSCSYL_TEMP_FEATURES(4),
+    SENSORS_FSCSYL_TEMP_FEATURES(5),
+    SENSORS_FSCSYL_TEMP_FEATURES(6),
+    SENSORS_FSCSYL_TEMP_FEATURES(7),
+    SENSORS_FSCSYL_TEMP_FEATURES(8),
+    SENSORS_FSCSYL_TEMP_FEATURES(9),
+    SENSORS_FSCSYL_TEMP_FEATURES(10),
+    SENSORS_FSCSYL_TEMP_FEATURES(11),
+    SENSORS_FSCSYL_FAN_FEATURES(1),
+    SENSORS_FSCSYL_FAN_FEATURES(2),
+    SENSORS_FSCSYL_FAN_FEATURES(3),
+    SENSORS_FSCSYL_FAN_FEATURES(4),
+    SENSORS_FSCSYL_FAN_FEATURES(5),
+    SENSORS_FSCSYL_FAN_FEATURES(6),
+    SENSORS_FSCSYL_FAN_FEATURES(7),
+    { { 0 }, 0 }
+};
+
 static sensors_chip_feature fschrc_features[]  {
     SENSORS_FSCHMD_IN_FEATURES(0),
@@ -6496,5 +6558,6 @@ sensors_chip_features sensors_chip_featu
  { SENSORS_F71882FG_PREFIX, f71882fg_features },
  { SENSORS_FSCHMD_PREFIX, fschmd_features },
  { SENSORS_FSCHRC_PREFIX, fschrc_features },
+ { SENSORS_FSCSYL_PREFIX, fscsyl_features },
  { 0 }
 };
diff -up lm_sensors-2.10.7/lib/chips.h.fscsyl lm_sensors-2.10.7/lib/chips.h
--- lm_sensors-2.10.7/lib/chips.h.fscsyl    2008-07-01
14:23:06.000000000 -0400
+++ lm_sensors-2.10.7/lib/chips.h    2009-12-09 10:05:57.000000000 -0500
@@ -2344,6 +2344,7 @@
 /* Fujitsu Siemens Computers Heimdal and Heracles */
 #define SENSORS_FSCHMD_PREFIX        "fschmd"
 #define SENSORS_FSCHRC_PREFIX        "fschrc"
+#define SENSORS_FSCSYL_PREFIX        "fscsyl"
 
 /* Note, we start with feature numbers of 60+ to not have any overlapping
    features with the old FSCPOS, FSCSCY and FSCHER feature lists, as the
@@ -2363,4 +2364,17 @@
 #define SENSORS_FSCHMD_TEMP_ALARM(n)        (130 + (n))
 #define SENSORS_FSCHMD_TEMP_FAULT(n)        (140 + (n))
 
+/* in n from 0 to 6 */
+#define SENSORS_FSCSYL_IN(n)            (60 + (n))
+/* fan n from 1 to 7 (7 for the syl) */
+#define SENSORS_FSCSYL_FAN(n)            (70 + (n))
+#define SENSORS_FSCSYL_FAN_DIV(n)        (80 + (n))
+#define SENSORS_FSCSYL_FAN_ALARM(n)        (90 + (n))
+#define SENSORS_FSCSYL_FAN_FAULT(n)        (100 + (n))
+/* temp n from 1 to 11 (11 for the syl) */
+#define SENSORS_FSCSYL_TEMP(n)            (110 + (n))
+#define SENSORS_FSCSYL_TEMP_MAX(n)        (130 + (n))
+#define SENSORS_FSCSYL_TEMP_ALARM(n)    (150 + (n))
+#define SENSORS_FSCSYL_TEMP_FAULT(n)    (170 + (n))
+
 #endif /* def LIB_SENSORS_CHIPS_H */
diff -up lm_sensors-2.10.7/prog/detect/sensors-detect.fscsyl
lm_sensors-2.10.7/prog/detect/sensors-detect
--- lm_sensors-2.10.7/prog/detect/sensors-detect.fscsyl    2009-12-09
10:05:57.000000000 -0500
+++ lm_sensors-2.10.7/prog/detect/sensors-detect    2009-12-09
10:05:57.000000000 -0500
@@ -1148,6 +1148,12 @@ use vars qw(@pci_adapters_sis5595 @pci_a
        i2c_detect => sub { fschmd_detect(@_); },
      },
      {
+       name => "FSC Syleus",
+       driver => "fschmd",
+       i2c_addrs => [0x73],
+       i2c_detect => sub { fscsyl_detect(@_); },
+     },
+     {
        name => "FSC Heracles",
        driver => "fschmd",
        i2c_addrs => [0x73],
@@ -2527,6 +2533,7 @@ use constant SMBUS_WORD_DATA    => 3;
 
 use constant I2C_FUNC_SMBUS_QUICK    => 0x00010000;
 use constant I2C_FUNC_SMBUS_READ_BYTE    => 0x00020000;
+use constant I2C_FUNC_SMBUS_READ_BYTE_DATA      => 0x00080000;
 
 # Get the i2c adapter's functionalities
 # $_[0]: Reference to an opened filehandle
@@ -2650,6 +2657,14 @@ sub i2c_probe($$$)
     # their page protection address.
     return 0 unless ($funcs & I2C_FUNC_SMBUS_READ_BYTE);
     return i2c_smbus_access($file, SMBUS_READ, 0, SMBUS_BYTE, $data);
+  }
+  elsif ($addr = 0x73) {
+    # Special case for FSC chips, as at least the Syleus locks
+    # up with our regular probe code. Note that to our current
+    # knowledge only FSC chips live on this address, and for them
+    # this probe method is safe.
+    return 0 unless ($funcs & I2C_FUNC_SMBUS_READ_BYTE_DATA);
+    return i2c_smbus_access($file, SMBUS_READ, 0, SMBUS_BYTE_DATA, $data);
   } else {
     return 0 unless ($funcs & I2C_FUNC_SMBUS_QUICK);
     return i2c_smbus_access($file, SMBUS_WRITE, 0, SMBUS_QUICK, $data);
@@ -4979,6 +4994,27 @@ sub fschmd_detect
 # $_[1]: Address
 # Returns: undef if not detected, (8) if detected.
 # Registers used:
+#   0x00-0x02: Identification ('S', 'Y', 'L')
+sub fscsyl_detect
+{
+  my ($file, $addr) = @_;
+  # check the first 3 registers
+  if (i2c_smbus_read_byte_data($file, 0x00) != 0x53) {
+      return;
+  }
+  if (i2c_smbus_read_byte_data($file, 0x01) != 0x59) {
+      return;
+  }
+  if (i2c_smbus_read_byte_data($file, 0x02) != 0x4c) {
+      return;
+  }
+  return (8);
+}
+
+# $_[0]: A reference to the file descriptor to access this chip.
+# $_[1]: Address
+# Returns: undef if not detected, (8) if detected.
+# Registers used:
 #   0x00-0x02: Identification ('H', 'R', 'C')
 sub fschrc_detect
 {
diff -up lm_sensors-2.10.7/prog/sensors/chips.c.fscsyl
lm_sensors-2.10.7/prog/sensors/chips.c
--- lm_sensors-2.10.7/prog/sensors/chips.c.fscsyl    2008-07-01
14:23:07.000000000 -0400
+++ lm_sensors-2.10.7/prog/sensors/chips.c    2009-12-09
10:09:09.000000000 -0500
@@ -6416,6 +6416,89 @@ void print_fschmd(const sensors_chip_nam
                       SENSORS_FSCHMD_TEMP_MAX(i));
 }
 
+static void print_fscsyl_in(const sensors_chip_name *name, int i,
+  int in_feature)
+{
+  char *label;
+  double cur;
+  int valid;
+
+  if (!sensors_get_label_and_valid(*name, in_feature, &label, &valid) &&
+      !sensors_get_feature(*name, in_feature, &cur)) {
+    if (valid) {
+      print_label(label, 10);
+      printf("%+6.2f V\n", cur);
+    }
+  }
+  free(label);
+}
+
+static void print_fscsyl_fan(const sensors_chip_name *name, int i,
+  int fan_feature, int fan_div_feature)
+{
+  char *label;
+  double cur, fdiv, alarm, fault;
+  int valid;
+
+  if (!sensors_get_label_and_valid(*name, fan_feature, &label, &valid) &&
+      !sensors_get_feature(*name, fan_feature, &cur) &&
+      !sensors_get_feature(*name, fan_div_feature, &fdiv) &&
+      !sensors_get_feature(*name, SENSORS_FSCSYL_FAN_ALARM(i), &alarm) &&
+      !sensors_get_feature(*name, SENSORS_FSCSYL_FAN_FAULT(i), &fault)) {
+    if (valid) {
+      print_label(label, 10);
+      if (fault)
+        printf("   FAULT\n");
+      else
+        printf("%4.0f RPM  (div = %1.0f)  %s\n", cur, fdiv,
+               alarm ? "ALARM" : "");
+    }
+  }
+  free(label);
+}
+
+static void print_fscsyl_temp(const sensors_chip_name *name, int i,
+  int temp_feature, int temp_max_feature)
+{
+  char *label;
+  double cur, max, alarm, fault;
+  int valid;
+
+  if (!sensors_get_label_and_valid(*name, temp_feature, &label, &valid) &&
+      !sensors_get_feature(*name, temp_feature, &cur) &&
+      (!temp_max_feature ||
+       !sensors_get_feature(*name, temp_max_feature, &max)) &&
+      !sensors_get_feature(*name, SENSORS_FSCSYL_TEMP_ALARM(i), &alarm) &&
+      !sensors_get_feature(*name, SENSORS_FSCSYL_TEMP_FAULT(i), &fault)) {
+    if (valid) {
+      print_label(label, 10);
+      if (fault)
+        printf("   FAULT\n");
+      else {
+        print_temp_info(cur, max, 0, MAXONLY, 1, 1);
+        printf("%s\n", alarm ? "ALARM" : "");
+      }
+    }
+  }
+  free(label);
+}
+
+void print_fscsyl(const sensors_chip_name *name)
+{
+  int i;
+
+  for (i = 0; i <= 5; i++)
+    print_fscsyl_in(name, i, SENSORS_FSCSYL_IN(i));
+
+  for (i = 1; i <= 7; i++)
+    print_fscsyl_fan(name, i, SENSORS_FSCSYL_FAN(i),
+                     SENSORS_FSCSYL_FAN_DIV(i));
+
+  for (i = 1; i <= 11; i++)
+    print_fscsyl_temp(name, i, SENSORS_FSCSYL_TEMP(i),
+                      SENSORS_FSCSYL_TEMP_MAX(i));
+}
+
 void print_fscpos_fschmd(const sensors_chip_name *name)
 {
   int i;
diff -up lm_sensors-2.10.7/prog/sensors/chips.h.fscsyl
lm_sensors-2.10.7/prog/sensors/chips.h
--- lm_sensors-2.10.7/prog/sensors/chips.h.fscsyl    2008-07-01
14:23:07.000000000 -0400
+++ lm_sensors-2.10.7/prog/sensors/chips.h    2009-12-09
10:05:57.000000000 -0500
@@ -85,5 +85,5 @@ extern void print_fschmd(const sensors_c
 extern void print_fscpos_fschmd(const sensors_chip_name *name);
 extern void print_fscscy_fschmd(const sensors_chip_name *name);
 extern void print_fscher_fschmd(const sensors_chip_name *name);
-
+extern void print_fscsyl(const sensors_chip_name *name);
 #endif /* def PROG_SENSORS_CHIPS_H */
diff -up lm_sensors-2.10.7/prog/sensors/main.c.fscsyl
lm_sensors-2.10.7/prog/sensors/main.c
--- lm_sensors-2.10.7/prog/sensors/main.c.fscsyl    2008-07-01
14:23:07.000000000 -0400
+++ lm_sensors-2.10.7/prog/sensors/main.c    2009-12-09
10:05:57.000000000 -0500
@@ -433,6 +433,7 @@ static struct match matches[] = {
     { "adm1022", print_thmc50 },
     { "fschmd", print_fschmd },
     { "fschrc", print_fschmd },
+    { "fscsyl", print_fscsyl },
     { NULL, NULL }
 };

-- 
Nikola


_______________________________________________
lm-sensors mailing list
lm-sensors@lm-sensors.org
http://lists.lm-sensors.org/mailman/listinfo/lm-sensors

             reply	other threads:[~2010-04-06  9:10 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-04-06  9:10 Nikola Pajkovsky [this message]
2010-04-06  9:43 ` [lm-sensors] [PATCH 1/1] add FSCSYL to lm_sensors 2.10.8 Jean Delvare
2010-04-06 10:10 ` Nikola Pajkovsky

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4BBAFA6B.3080508@redhat.com \
    --to=npajkovs@redhat.com \
    --cc=lm-sensors@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.