linux/drivers/hwmon/fschmd.c
<<
>>
Prefs
   1/*
   2 * fschmd.c
   3 *
   4 * Copyright (C) 2007 - 2009 Hans de Goede <hdegoede@redhat.com>
   5 *
   6 * This program is free software; you can redistribute it and/or modify
   7 * it under the terms of the GNU General Public License as published by
   8 * the Free Software Foundation; either version 2 of the License, or
   9 * (at your option) any later version.
  10 *
  11 * This program is distributed in the hope that it will be useful,
  12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14 * GNU General Public License for more details.
  15 *
  16 * You should have received a copy of the GNU General Public License
  17 * along with this program; if not, write to the Free Software
  18 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  19 */
  20
  21/*
  22 *  Merged Fujitsu Siemens hwmon driver, supporting the Poseidon, Hermes,
  23 *  Scylla, Heracles, Heimdall, Hades and Syleus chips
  24 *
  25 *  Based on the original 2.4 fscscy, 2.6 fscpos, 2.6 fscher and 2.6
  26 *  (candidate) fschmd drivers:
  27 *  Copyright (C) 2006 Thilo Cestonaro
  28 *                      <thilo.cestonaro.external@fujitsu-siemens.com>
  29 *  Copyright (C) 2004, 2005 Stefan Ott <stefan@desire.ch>
  30 *  Copyright (C) 2003, 2004 Reinhard Nissl <rnissl@gmx.de>
  31 *  Copyright (c) 2001 Martin Knoblauch <mkn@teraport.de, knobi@knobisoft.de>
  32 *  Copyright (C) 2000 Hermann Jung <hej@odn.de>
  33 */
  34
  35#include <linux/module.h>
  36#include <linux/init.h>
  37#include <linux/slab.h>
  38#include <linux/jiffies.h>
  39#include <linux/i2c.h>
  40#include <linux/hwmon.h>
  41#include <linux/hwmon-sysfs.h>
  42#include <linux/err.h>
  43#include <linux/mutex.h>
  44#include <linux/sysfs.h>
  45#include <linux/dmi.h>
  46#include <linux/fs.h>
  47#include <linux/watchdog.h>
  48#include <linux/miscdevice.h>
  49#include <linux/uaccess.h>
  50#include <linux/kref.h>
  51
  52/* Addresses to scan */
  53static const unsigned short normal_i2c[] = { 0x73, I2C_CLIENT_END };
  54
  55/* Insmod parameters */
  56static bool nowayout = WATCHDOG_NOWAYOUT;
  57module_param(nowayout, bool, 0);
  58MODULE_PARM_DESC(nowayout, "Watchdog cannot be stopped once started (default="
  59        __MODULE_STRING(WATCHDOG_NOWAYOUT) ")");
  60
  61enum chips { fscpos, fscher, fscscy, fschrc, fschmd, fschds, fscsyl };
  62
  63/*
  64 * The FSCHMD registers and other defines
  65 */
  66
  67/* chip identification */
  68#define FSCHMD_REG_IDENT_0              0x00
  69#define FSCHMD_REG_IDENT_1              0x01
  70#define FSCHMD_REG_IDENT_2              0x02
  71#define FSCHMD_REG_REVISION             0x03
  72
  73/* global control and status */
  74#define FSCHMD_REG_EVENT_STATE          0x04
  75#define FSCHMD_REG_CONTROL              0x05
  76
  77#define FSCHMD_CONTROL_ALERT_LED        0x01
  78
  79/* watchdog */
  80static const u8 FSCHMD_REG_WDOG_CONTROL[7] = {
  81        0x21, 0x21, 0x21, 0x21, 0x21, 0x28, 0x28 };
  82static const u8 FSCHMD_REG_WDOG_STATE[7] = {
  83        0x23, 0x23, 0x23, 0x23, 0x23, 0x29, 0x29 };
  84static const u8 FSCHMD_REG_WDOG_PRESET[7] = {
  85        0x28, 0x28, 0x28, 0x28, 0x28, 0x2a, 0x2a };
  86
  87#define FSCHMD_WDOG_CONTROL_TRIGGER     0x10
  88#define FSCHMD_WDOG_CONTROL_STARTED     0x10 /* the same as trigger */
  89#define FSCHMD_WDOG_CONTROL_STOP        0x20
  90#define FSCHMD_WDOG_CONTROL_RESOLUTION  0x40
  91
  92#define FSCHMD_WDOG_STATE_CARDRESET     0x02
  93
  94/* voltages, weird order is to keep the same order as the old drivers */
  95static const u8 FSCHMD_REG_VOLT[7][6] = {
  96        { 0x45, 0x42, 0x48 },                           /* pos */
  97        { 0x45, 0x42, 0x48 },                           /* her */
  98        { 0x45, 0x42, 0x48 },                           /* scy */
  99        { 0x45, 0x42, 0x48 },                           /* hrc */
 100        { 0x45, 0x42, 0x48 },                           /* hmd */
 101        { 0x21, 0x20, 0x22 },                           /* hds */
 102        { 0x21, 0x20, 0x22, 0x23, 0x24, 0x25 },         /* syl */
 103};
 104
 105static const int FSCHMD_NO_VOLT_SENSORS[7] = { 3, 3, 3, 3, 3, 3, 6 };
 106
 107/*
 108 * minimum pwm at which the fan is driven (pwm can by increased depending on
 109 * the temp. Notice that for the scy some fans share there minimum speed.
 110 * Also notice that with the scy the sensor order is different than with the
 111 * other chips, this order was in the 2.4 driver and kept for consistency.
 112 */
 113static const u8 FSCHMD_REG_FAN_MIN[7][7] = {
 114        { 0x55, 0x65 },                                 /* pos */
 115        { 0x55, 0x65, 0xb5 },                           /* her */
 116        { 0x65, 0x65, 0x55, 0xa5, 0x55, 0xa5 },         /* scy */
 117        { 0x55, 0x65, 0xa5, 0xb5 },                     /* hrc */
 118        { 0x55, 0x65, 0xa5, 0xb5, 0xc5 },               /* hmd */
 119        { 0x55, 0x65, 0xa5, 0xb5, 0xc5 },               /* hds */
 120        { 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb4 },   /* syl */
 121};
 122
 123/* actual fan speed */
 124static const u8 FSCHMD_REG_FAN_ACT[7][7] = {
 125        { 0x0e, 0x6b, 0xab },                           /* pos */
 126        { 0x0e, 0x6b, 0xbb },                           /* her */
 127        { 0x6b, 0x6c, 0x0e, 0xab, 0x5c, 0xbb },         /* scy */
 128        { 0x0e, 0x6b, 0xab, 0xbb },                     /* hrc */
 129        { 0x5b, 0x6b, 0xab, 0xbb, 0xcb },               /* hmd */
 130        { 0x5b, 0x6b, 0xab, 0xbb, 0xcb },               /* hds */
 131        { 0x57, 0x67, 0x77, 0x87, 0x97, 0xa7, 0xb7 },   /* syl */
 132};
 133
 134/* fan status registers */
 135static const u8 FSCHMD_REG_FAN_STATE[7][7] = {
 136        { 0x0d, 0x62, 0xa2 },                           /* pos */
 137        { 0x0d, 0x62, 0xb2 },                           /* her */
 138        { 0x62, 0x61, 0x0d, 0xa2, 0x52, 0xb2 },         /* scy */
 139        { 0x0d, 0x62, 0xa2, 0xb2 },                     /* hrc */
 140        { 0x52, 0x62, 0xa2, 0xb2, 0xc2 },               /* hmd */
 141        { 0x52, 0x62, 0xa2, 0xb2, 0xc2 },               /* hds */
 142        { 0x50, 0x60, 0x70, 0x80, 0x90, 0xa0, 0xb0 },   /* syl */
 143};
 144
 145/* fan ripple / divider registers */
 146static const u8 FSCHMD_REG_FAN_RIPPLE[7][7] = {
 147        { 0x0f, 0x6f, 0xaf },                           /* pos */
 148        { 0x0f, 0x6f, 0xbf },                           /* her */
 149        { 0x6f, 0x6f, 0x0f, 0xaf, 0x0f, 0xbf },         /* scy */
 150        { 0x0f, 0x6f, 0xaf, 0xbf },                     /* hrc */
 151        { 0x5f, 0x6f, 0xaf, 0xbf, 0xcf },               /* hmd */
 152        { 0x5f, 0x6f, 0xaf, 0xbf, 0xcf },               /* hds */
 153        { 0x56, 0x66, 0x76, 0x86, 0x96, 0xa6, 0xb6 },   /* syl */
 154};
 155
 156static const int FSCHMD_NO_FAN_SENSORS[7] = { 3, 3, 6, 4, 5, 5, 7 };
 157
 158/* Fan status register bitmasks */
 159#define FSCHMD_FAN_ALARM        0x04 /* called fault by FSC! */
 160#define FSCHMD_FAN_NOT_PRESENT  0x08
 161#define FSCHMD_FAN_DISABLED     0x80
 162
 163
 164/* actual temperature registers */
 165static const u8 FSCHMD_REG_TEMP_ACT[7][11] = {
 166        { 0x64, 0x32, 0x35 },                           /* pos */
 167        { 0x64, 0x32, 0x35 },                           /* her */
 168        { 0x64, 0xD0, 0x32, 0x35 },                     /* scy */
 169        { 0x64, 0x32, 0x35 },                           /* hrc */
 170        { 0x70, 0x80, 0x90, 0xd0, 0xe0 },               /* hmd */
 171        { 0x70, 0x80, 0x90, 0xd0, 0xe0 },               /* hds */
 172        { 0x58, 0x68, 0x78, 0x88, 0x98, 0xa8,           /* syl */
 173          0xb8, 0xc8, 0xd8, 0xe8, 0xf8 },
 174};
 175
 176/* temperature state registers */
 177static const u8 FSCHMD_REG_TEMP_STATE[7][11] = {
 178        { 0x71, 0x81, 0x91 },                           /* pos */
 179        { 0x71, 0x81, 0x91 },                           /* her */
 180        { 0x71, 0xd1, 0x81, 0x91 },                     /* scy */
 181        { 0x71, 0x81, 0x91 },                           /* hrc */
 182        { 0x71, 0x81, 0x91, 0xd1, 0xe1 },               /* hmd */
 183        { 0x71, 0x81, 0x91, 0xd1, 0xe1 },               /* hds */
 184        { 0x59, 0x69, 0x79, 0x89, 0x99, 0xa9,           /* syl */
 185          0xb9, 0xc9, 0xd9, 0xe9, 0xf9 },
 186};
 187
 188/*
 189 * temperature high limit registers, FSC does not document these. Proven to be
 190 * there with field testing on the fscher and fschrc, already supported / used
 191 * in the fscscy 2.4 driver. FSC has confirmed that the fschmd has registers
 192 * at these addresses, but doesn't want to confirm they are the same as with
 193 * the fscher??
 194 */
 195static const u8 FSCHMD_REG_TEMP_LIMIT[7][11] = {
 196        { 0, 0, 0 },                                    /* pos */
 197        { 0x76, 0x86, 0x96 },                           /* her */
 198        { 0x76, 0xd6, 0x86, 0x96 },                     /* scy */
 199        { 0x76, 0x86, 0x96 },                           /* hrc */
 200        { 0x76, 0x86, 0x96, 0xd6, 0xe6 },               /* hmd */
 201        { 0x76, 0x86, 0x96, 0xd6, 0xe6 },               /* hds */
 202        { 0x5a, 0x6a, 0x7a, 0x8a, 0x9a, 0xaa,           /* syl */
 203          0xba, 0xca, 0xda, 0xea, 0xfa },
 204};
 205
 206/*
 207 * These were found through experimenting with an fscher, currently they are
 208 * not used, but we keep them around for future reference.
 209 * On the fscsyl AUTOP1 lives at 0x#c (so 0x5c for fan1, 0x6c for fan2, etc),
 210 * AUTOP2 lives at 0x#e, and 0x#1 is a bitmask defining which temps influence
 211 * the fan speed.
 212 * static const u8 FSCHER_REG_TEMP_AUTOP1[] =   { 0x73, 0x83, 0x93 };
 213 * static const u8 FSCHER_REG_TEMP_AUTOP2[] =   { 0x75, 0x85, 0x95 };
 214 */
 215
 216static const int FSCHMD_NO_TEMP_SENSORS[7] = { 3, 3, 4, 3, 5, 5, 11 };
 217
 218/* temp status register bitmasks */
 219#define FSCHMD_TEMP_WORKING     0x01
 220#define FSCHMD_TEMP_ALERT       0x02
 221#define FSCHMD_TEMP_DISABLED    0x80
 222/* there only really is an alarm if the sensor is working and alert == 1 */
 223#define FSCHMD_TEMP_ALARM_MASK \
 224        (FSCHMD_TEMP_WORKING | FSCHMD_TEMP_ALERT)
 225
 226/*
 227 * Functions declarations
 228 */
 229
 230static int fschmd_probe(struct i2c_client *client,
 231                        const struct i2c_device_id *id);
 232static int fschmd_detect(struct i2c_client *client,
 233                         struct i2c_board_info *info);
 234static int fschmd_remove(struct i2c_client *client);
 235static struct fschmd_data *fschmd_update_device(struct device *dev);
 236
 237/*
 238 * Driver data (common to all clients)
 239 */
 240
 241static const struct i2c_device_id fschmd_id[] = {
 242        { "fscpos", fscpos },
 243        { "fscher", fscher },
 244        { "fscscy", fscscy },
 245        { "fschrc", fschrc },
 246        { "fschmd", fschmd },
 247        { "fschds", fschds },
 248        { "fscsyl", fscsyl },
 249        { }
 250};
 251MODULE_DEVICE_TABLE(i2c, fschmd_id);
 252
 253static struct i2c_driver fschmd_driver = {
 254        .class          = I2C_CLASS_HWMON,
 255        .driver = {
 256                .name   = "fschmd",
 257        },
 258        .probe          = fschmd_probe,
 259        .remove         = fschmd_remove,
 260        .id_table       = fschmd_id,
 261        .detect         = fschmd_detect,
 262        .address_list   = normal_i2c,
 263};
 264
 265/*
 266 * Client data (each client gets its own)
 267 */
 268
 269struct fschmd_data {
 270        struct i2c_client *client;
 271        struct device *hwmon_dev;
 272        struct mutex update_lock;
 273        struct mutex watchdog_lock;
 274        struct list_head list; /* member of the watchdog_data_list */
 275        struct kref kref;
 276        struct miscdevice watchdog_miscdev;
 277        enum chips kind;
 278        unsigned long watchdog_is_open;
 279        char watchdog_expect_close;
 280        char watchdog_name[10]; /* must be unique to avoid sysfs conflict */
 281        char valid; /* zero until following fields are valid */
 282        unsigned long last_updated; /* in jiffies */
 283
 284        /* register values */
 285        u8 revision;            /* chip revision */
 286        u8 global_control;      /* global control register */
 287        u8 watchdog_control;    /* watchdog control register */
 288        u8 watchdog_state;      /* watchdog status register */
 289        u8 watchdog_preset;     /* watchdog counter preset on trigger val */
 290        u8 volt[6];             /* voltage */
 291        u8 temp_act[11];        /* temperature */
 292        u8 temp_status[11];     /* status of sensor */
 293        u8 temp_max[11];        /* high temp limit, notice: undocumented! */
 294        u8 fan_act[7];          /* fans revolutions per second */
 295        u8 fan_status[7];       /* fan status */
 296        u8 fan_min[7];          /* fan min value for rps */
 297        u8 fan_ripple[7];       /* divider for rps */
 298};
 299
 300/*
 301 * Global variables to hold information read from special DMI tables, which are
 302 * available on FSC machines with an fscher or later chip. There is no need to
 303 * protect these with a lock as they are only modified from our attach function
 304 * which always gets called with the i2c-core lock held and never accessed
 305 * before the attach function is done with them.
 306 */
 307static int dmi_mult[6] = { 490, 200, 100, 100, 200, 100 };
 308static int dmi_offset[6] = { 0, 0, 0, 0, 0, 0 };
 309static int dmi_vref = -1;
 310
 311/*
 312 * Somewhat ugly :( global data pointer list with all fschmd devices, so that
 313 * we can find our device data as when using misc_register there is no other
 314 * method to get to ones device data from the open fop.
 315 */
 316static LIST_HEAD(watchdog_data_list);
 317/* Note this lock not only protect list access, but also data.kref access */
 318static DEFINE_MUTEX(watchdog_data_mutex);
 319
 320/*
 321 * Release our data struct when we're detached from the i2c client *and* all
 322 * references to our watchdog device are released
 323 */
 324static void fschmd_release_resources(struct kref *ref)
 325{
 326        struct fschmd_data *data = container_of(ref, struct fschmd_data, kref);
 327        kfree(data);
 328}
 329
 330/*
 331 * Sysfs attr show / store functions
 332 */
 333
 334static ssize_t show_in_value(struct device *dev,
 335        struct device_attribute *devattr, char *buf)
 336{
 337        const int max_reading[3] = { 14200, 6600, 3300 };
 338        int index = to_sensor_dev_attr(devattr)->index;
 339        struct fschmd_data *data = fschmd_update_device(dev);
 340
 341        if (data->kind == fscher || data->kind >= fschrc)
 342                return sprintf(buf, "%d\n", (data->volt[index] * dmi_vref *
 343                        dmi_mult[index]) / 255 Vrivers/hwmon20class="sref">index =  elsea> = fscscy },3 342                return sprintf(buf, "%d\n", (data-> = fschrc },3 337      class="sref">data->fschmd },3fschds },3fscsyl },3 249        { }3->                resre, (u8kind >=  250};3kind >= fschmd_id);3 334static "+codhref="+code=ssize_t" clas"+codhref=>ssize_t show_in_value(struct device * 2523 335        struct device_attribute *devattr, char *fschmd_driver = {3I2C_CLASS_HWMON,3 338        int index = to_sensor_dev_attr(devattr)->driver = {3 326        struct fschmd_data *data = fschmd_update_device(&3uot;fschmd",3 257        },3 342                return sprintf(->                re>, "%d\n"        ]) / 255 Vrivers/hwmon20class="sref">indexfschmd_update_device(fschmd_probe,3fschmd_remove,3fschmd_id,3 334static "+coda>         >ssize_t show_in_value(struct device *fschmd_detect,3 335        struct device_attribute *devattr, char *normal_i2c,3 263};3 338        int index = to_sensor_dev_attr(devattr)-> 2643 326        struct fschmd_data *data = fschmd_update_device(/*3 342                return sprintf(->                re>, "%d\n"        ]) / 255 Vrivers/hwmon20class="sref">indexfschmd_update_device( */3 2683fschmd_data {3 334staine" "+coda>         >ssize_t show_in_value(struct  335        struvers/hwmon/fschmd.c#L329" id="L329"td_id" cl3class="sref">client;3devin/fscice_attribute * 334stss="s"L334" class="lss="s class="sref">devattr, char *hwmon_dev;3update_lock;3 338        int index = to_sensor_dev_attr(devattr)->watchdog_lock;3 326        struct fschmd_dndexget_drvref="+code=fschmd_dadexget_drvref=a href="+code=fschmd_update_device" class="sref">fschmd_update_device(3 kref;3 watchdog_miscdev;3kind;3fschmd_dkon/t fschmd_update_device(watchdog_is_open;3devattr, char *w3tchdog_expect_close;3 3kind >= fschmd_dalacodhre"L334" class="lslacodhrea>                resdate_device" clice /* in jiffies */3 2833    &#37;d\n", "%d\n"fschmd_update_device(/* 3egister values */3                res="L270" class="line" name="s="L270" clasa href="+code=fschmd_update_device" class="srece" class="sref">device */3 chip revision */3FSCHMD_TEMP name="L2LIMIl8" cl/a>]) / 255 Vri == fscher || ]) / 255 Vrivers/hwmon20class="sref">indexlaon/fschmd.c#L22pdate_device" clicefschmd_update_device(3"%d\n"        ]) / 255 Vrivers/hwmon20class="sref">indexss="sref">fschmd_dpdate_device" clice 3 un   &#37;d\n", "%d\n"fschmd_update_device(33fschmd_update_device(/* voltage */33/* s3atus of sensor */3 334static "+codfaine" name="L343"> atic "+codfaine>ssize_t show_in_value(struct device *3 335        struct device_attribute *devattr, char *3/* fan status */3 338        int index = to_sensor_dev_attr(devattr)->3 326        struct fschmd_data *data = fschmd_update_device(3 298};3/* high temp lim4 class="l4ne" name="L299"> 2994 341     292        indexs&#mf="+code=fschmdMD_TEMPe="L2WORKINa>->devattr, char */*4 342                return sprintf(0f="+code=buf" cef">fschmd_update_device(44 342                return sprintf(1f="+code=buf" cef">fschmd_update_device(444 334static "+codalarm" name="L343"> atic "+codalarm>ssize_t show_in_value(struct device * */4 335        struct device_attribute *devattr, char *[64 = { 0, 0, 0, 0, 0, 0 };4 338        int index = to_sensor_dev_attr(devattr)->dmi_vref = -1;4 326        struct fschmd_data *data = fschmd_update_device( 3104kind >= /*4 341     292        indexs&#mf="+code=fschmdMD_TEMPe="L2ALARM_MASK>->kind >= kind >=  342                return sprintf(1f="+code=buf" cef">fschmd_update_device(4 */4 342                return sprintf(0f="+code=buf" cef">fschmd_update_device();444atchdog_data_mutex);4 3194->                resre, (kind >= /*4kind >=  334static codehref="+code=ssize_t" clascodehref=>ssize_t show_in_value(struct device *4 335        struct device_attribute *devattr, char * */4ref)4 338        int index = to_sensor_dev_attr(devattr)-> id="L336"4=> 325{4 326        struct fschmd_data *data = fschmd_update_device(kref);4data);4 342                return sprintf(->                red="L341" class="line" name="L341"> 341     294        ]) / 255 Vrivers/hwmon20class="sref">indexfschmd_update_device( 328}4 3294/*4 334static ="+cdipdate_device" clatic ="+cdip>ssize_t show_in_value(struct device *4 335        struct device_attribute *devattr, char * */4 3334 338        int index = to_sensor_dev_attr(devattr)-> id="L336"4 "+code=r4v" class="sref">dev,4 326        struct fschmd_data *data = fschmd_update_device(buf)4 336{4watrved =enso mask/a>/* high temp lim4ng[3]4= { 14200, 6600, 3300 };4 342                return sprintf(((/fschmd.c#L341" id="L341" class="line" name="L341"> 341     297        ]) / 255 Vrivers/hwmon20class="sref">indexs&#m3fschmd_update_device(index;4dev);4 3404 334staine" ="+cdipdate_device" claine" ="+cdip>ssize_t show_in_value(struct  335        struvers/hwmon/fschmd.c#L329" id="L3294e=fschrc"4class="sref">fschrc)4devin/fscice_attribute * 334stss="s"L334" class="lss="s class="sref">devattr, char *dmi_vref *4 28line" name="L33728llass="sref">devattr)-> id="L336"4c"+code=d4ass="sref">fscscy },4 338        int index = to_sensor_dev_attr(devattr)-> id="L336"4c"+code=b4ass="sref">fschrc },4 326        struct fschmd_dndexget_drvref="+code=fschmd_dadexget_drvref=a href="+code=fschmd_update_device" class="sref">fschmd_update_device(fschmd },4/* high temp lim4fschds" c4ass="sref">fschds },4 fscsyl },4  249        { }4 250};4fschmd_dkon/t ufschmd_update_device(fschmd_id);4devattr, char * 2524 fschmd_driver = {4I2C_CLASS_HWMON,4driver = {4static int  257        },4fschmd_probe,4fschmd_remove,4static int fschmd_id,4fschmd_detect,4normal_i2c,4static int  263};4static int  2644/*4device *4sprintf(="+cdiplass="sdevice * */4fschmd_update_device( 2684 fschmd_data {4client;4kind >= hwmon_dev;4    &#37;d\n", "%d\n"fschmd_update_device(update_lock;4watchdog_lock;4fschmd_dL270smbus_37device *4]) / 255 Vri == fscher || ]) / 255 Vrivers/hwmon20class="sref">indexef">fschmd_update_device(kref;4watchdog_miscdev;4watrved =enso mask/a>/* high temp lim4+code=kin4" class="sref">kind;4fschmd_update_device(watchdog_is_open;4fschmd_dpdate_device" clice w4tchdog_expect_close;4device *4]) / 255 Vri == fscher || ]) / 255 Vrivers/hwmon20class="sref">indexlaon/fschmd.c#L2228line" name="L33728llassef">fschmd_update_device(/* in jiffies */4 2834 341     297        ]) / 255 Vrivers/hwmon20class="sref">indexss="sref">fschmd_d28line" name="L33728llass="sref">devattr)-> id="L336"4ment">/* 4egister values */4/4 chip revision */4 un   &#37;d\n", "%d\n"fschmd_update_device(4fschmd_update_device(4/* voltage */4 334static ="+calarm" name="L343"> atic ="+calarm>ssize_t show_in_value(struct  335        struct device_attribute *devattr, char */* s4atus of sensor */44 338        int index = to_sensor_dev_attr(devattr)-> id="L336"4tent">/* 4ons per second */4 326        struct fschmd_data *data = fschmd_update_de)-> id="L336"4tmment">/4>/* fan status */4 341     ="+ca>            lass=/a>]) / 255 Vrivers/hwmon20class="sref">indexs&#mf="+code=fschmdMD_TEMPFAN_ALARMdate_device" clMD_TEMPFAN_ALARM class="sref">devattr, char *4 342                return sprintf(1f="+code=buf" cef">fschmd_update_device( 298};4 2995 342                return sprintf(0f="+code=buf" cef">fschmd_update_device(/*55 334static ="+cfaine" name="L343"> atic ="+cfaine>ssize_t show_in_value(struct  335        struct device_attribute *devattr, char *55 338        int index = to_sensor_dev_attr(devattr)-> id="L325"5o7k held 5nvalue for rps */5 326        struct fschmd_data *data = fschmd_update_de)-> id="L336"5 { 490, 250, 100, 100, 200, 100 };5 341     ="+ca>            lass=/a>]) / 255 Vrivers/hwmon20class="sref">indexs&#mf="+code=fschmdMD_TEMPFAN_NOT_PRESENlass="sref">FSCHMD_TEMPFAN_NOT_PRESENl class="sref">devattr, char *dmi_vref = -1;5 342                return sprintf(1f="+code=buf" cef">fschmd_update_device( 3105/*5 342                return sprintf(0f="+code=buf" cef">fschmd_update_device(555 */5 334static pwm_aus="po42<1 pwm" name="L343"> atic pwm_aus="po42<1 pwm>ssize_t show_in_value(struct );5 335        struct device_attribute *devattr, char *55atchdog_data_mutex);5 338        int index = to_sensor_dev_attr(devattr)-> id="L325"5 class="l5ne" name="L319"> 3195 326        struct fschmd_data *data = fschmd_update_de)-> id="L325"5 class="l5lass="comment">/*5fschmd_dn="L341" class="line" name="L341"> 341     ="+cmin    ]) / 255 Vrivers/hwmon20class="sref">indexf">fschmd_update_de)-> id="L325"5 a>5/* high temp lim5a> */5fschmd_dn="L341" class="line" name="L341"> 341     /a> || fschmd_datasylode=data" class="ssyl class="sref">devattr, char *ref)5u8fschmd_dsre, (  325{5kref);5 342                return sprintf(data);5 328}5 3295 334staine" pwm_aus="po42<1 pwm" name="L343"> aine" pwm_aus="po42<1 pwm>ssize_t show_in_value(struct /*5 335        struct devin/fscice_attribute * 334stss="s"L334" class="lss="s class="sref">devattr, char *5 */5 338        int index = to_sensor_dev_attr(devattr)-> id="L336"5a> 3335 326        struct fschmd_dndexget_drvref="+code=fschmd_dadexget_drvref=a href="+code=fschmd_update_device" class="sref">fschmd_update_device(dev,5 buf)5  336{5fschmd_dkon/t ufschmd_update_device(index;5devattr, char *dev);5  3405kind >= fschrc)5/* high temp lim5_vref" cl5ss="sref">dmi_vref *5fschmd_dn="L341" class="line" name="L341"> 341     /a> || fschmd_datasylode=data" class="ssyl clas vers/hwmon/fschmd.c#L336" id="L336"5ce" class5"Ii       syl AUTOP1 liv5s at 544"drivers/hwmon/fschmschmd.c#L341" ipdate_device" clicefschmd_dalacodhre"L334" class="lslacodhrea>                resdate_device" clicefschmd_update_device(fscscy },5fschmd_update_device(fschrc },5fschmd },5fschds },5 "%d\n"fschmd_update_device(fscsyl },5 249        { }5device * 250};5FSCHMD_TEMP namFAN_MINlass=/a>]) / 255 Vri == fscher || ]) / 255 Vrivers/hwmon20class="sref">indexlaon/fschmd.c#L22pdate_device" clicefschmd_update_device(fschmd_id);5 341     ="+cmin    ]) / 255 Vrivers/hwmon20class="sref">indexss="sref">fschmd_dpdate_device" clice  2525fschmd_driver = {5 un   &#37;d\n", "%d\n"fschmd_update_device(I2C_CLASS_HWMON,5driver = {5fschmd_update_device( 257        },5fschmd_probe,5fschmd_remove,5/* high temp lim5md_id" cl5ss="sref">fschmd_id,5/* high temp lim5m=fschrc"5sref">fschmd_detect,5 /* high temp lim5mclass="l5s="sref">normal_i2c,5/* high temp lim5te" class5" name="L263"> 263};5 334static alert_led"L334" class="litic alert_led>ssize_t show_in_value(struct  2645 335        struct device_attribute *devattr, char */*55 326        struct fschmd_data *data = fschmd_update_de#L336" id="L336"5 e" name=5ass="comment"> */5 2685 341     global_controe"L334" class="lglobal_controe"driv&#mf="+code=fschmdMD_TEMPCONTROL_ALERT_LEDass="sref">FSCHMD_TEMPCONTROL_ALERT_LED class="sref">devattr, char *fschmd_data {5 342                return sprintf(1f="+code=buf" cef">fschmd_update_device(client;5hwmon_dev;5 342                return sprintf(0f="+code=buf" cef">fschmd_update_device(update_lock;5watchdog_lock;55 334staine" alert_led"L334" class="liine" alert_led>ssize_t show_in_value(struct kref;5 335        struct devin/fscice_attribute * 334stss="s"L334" class="lss="s class="sref">n/fschmd.c#L340" id="L3405o(each cl5f">watchdog_miscdev;5kind;5 28line" name="L33728llass="sref">devattr)-> id="L336"5oclass="l5f">watchdog_is_open;5 326        struct fschmd_dndexget_drvref="+code=fschmd_dadexget_drvref=a href="+code=fschmd_update_device" class="sref">fschmd_update_device(w5tchdog_expect_close;5 5 5/* in jiffies */5fschmd_dkon/t ufschmd_update_device( 2835devattr, char */* 5egister values */5 /5 chip revision */5 "%d\n"fschmd_update_device(55fschmd_dL270smbus_37FSCHMD_TEMP namCONTROL"sreef">fschmd_update_device(5/* voltage */5fschmd_dMD_TEMPCONTROL_ALERT_LEDass="sref">FSCHMD_TEMPCONTROL_ALERT_LED claf">fschmd_update_device(5 = 5fschmd_dMD_TEMPCONTROL_ALERT_LEDass="sref">FSCHMD_TEMPCONTROL_ALERT_LED claf">fschmd_update_device(/* 5ons per second */5/5>/* fan status */5                res="L270" class="line" name="s="L270" clasa href="+code=fschmd_update_device" class="srecmf="+code=fschmdMD_TEMP namCONTROLass="sref">FSCHMD_TEMP namCONTROL"srelaon/fschmd.c#L2228line" name="L33728llassef">fschmd_update_device(5 341     global_controe"L334" class="lglobal_controe"drivs="sref">fschmd_d28line" name="L33728llass="sref">devattr)-> id="L336"5lass="lin5" name="L298"> 298};5 2996 un"%d\n"fschmd_update_device(/*6kind >= fschmd_update_device(666ssief">fschmd_update_device(6inde5" class="line" name="L335">sref">inde5" class="lin"line" name="L285"> 326"> 3vice_attribute" cla326"> 3vice"lin[xss=vers/hwmon/fschmd.c#L336" id="L336"6 { 490, 260, 100, 100, 200, 100 };6ssilaon/fschmd.c#L22NULLass="sref">FSCHNULL>ssi, 0ece" class="sref">device *[66 = { 0, 0, 0, 0, 0, 0 };6ssilaon/fschmd.c#L22NULLass="sref">FSCHNULL>ssi, 1ece" class="sref">device *dmi_vref = -1;6ssilaon/fschmd.c#L22NULLass="sref">FSCHNULL>ssi, 2ece" class="sref">device * 3106ssilaon/fschmd.c#L22NULLass="sref">FSCHNULL>ssi, 3ece" class="sref">device */*6ssilaon/fschmd.c#L22NULLass="sref">FSCHNULL>ssi, 4ece" class="sref">device *6ssilaon/fschmd.c#L22NULLass="sref">FSCHNULL>ssi, 5ece" class="sref">device *6fschmd_update_device(6 */6inde5" class="line" name="L335">sref">inde5" class="lin"line" name="L285"> 326"> 3temp3vice_attribute" cla326"> 3temp3vice"lin[xss=vers/hwmon/fschmd.c#L336" id="L336"6ss="sref"6watchdog_data_list);6ssilaon/fschmd.c#L22NULLass="sref">FSCHNULL>ssi, 0ece" class="sref">device *6ssi,   0644laon/fschmd.c#L224tic temp3ma/hwmon20class="s4tic temp3ma/>ssilaon/fschmd.c#L224ine" temp3ma/hwmon20class="s4ine" temp3ma/>ssi, 0ece" class="sref">device *[66atchdog_data_mutex);6 temp1_faine>ssi, 0444laon/fschmd.c#L224tic temp3faine" name="L343"> atic temp3faine>ssilaon/fschmd.c#L22NULLass="sref">FSCHNULL>ssi, 0ece" class="sref">device * 3196 temp1_alarm>ssi, 0444laon/fschmd.c#L224tic temp3alarm" name="L343"> atic temp3alarm>ssilaon/fschmd.c#L22NULLass="sref">FSCHNULL>ssi, 0ece" class="sref">device */*6ssilaon/fschmd.c#L22NULLass="sref">FSCHNULL>ssi, 1ece" class="sref">device *6ssi,   0644laon/fschmd.c#L224tic temp3ma/hwmon20class="s4tic temp3ma/>ssilaon/fschmd.c#L224ine" temp3ma/hwmon20class="s4ine" temp3ma/>ssi, 1ece" class="sref">device *6 temp2_faine>ssi, 0444laon/fschmd.c#L224tic temp3faine" name="L343"> atic temp3faine>ssilaon/fschmd.c#L22NULLass="sref">FSCHNULL>ssi, 1ece" class="sref">device * */6 temp2_alarm>ssi, 0444laon/fschmd.c#L224tic temp3alarm" name="L343"> atic temp3alarm>ssilaon/fschmd.c#L22NULLass="sref">FSCHNULL>ssi, 1ece" class="sref">device *ref)6ssilaon/fschmd.c#L22NULLass="sref">FSCHNULL>ssi, 2ece" class="sref">device * 325{6ssi,   0644laon/fschmd.c#L224tic temp3ma/hwmon20class="s4tic temp3ma/>ssilaon/fschmd.c#L224ine" temp3ma/hwmon20class="s4ine" temp3ma/>ssi, 2ece" class="sref">device *kref);6 temp3_faine>ssi, 0444laon/fschmd.c#L224tic temp3faine" name="L343"> atic temp3faine>ssilaon/fschmd.c#L22NULLass="sref">FSCHNULL>ssi, 2ece" class="sref">device *data);6 temp3_alarm>ssi, 0444laon/fschmd.c#L224tic temp3alarm" name="L343"> atic temp3alarm>ssilaon/fschmd.c#L22NULLass="sref">FSCHNULL>ssi, 2ece" class="sref">device *[66e" name="L328"> 328}6ssilaon/fschmd.c#L22NULLass="sref">FSCHNULL>ssi, 3ece" class="sref">device * 3296ssi,   0644laon/fschmd.c#L224tic temp3ma/hwmon20class="s4tic temp3ma/>ssilaon/fschmd.c#L224ine" temp3ma/hwmon20class="s4ine" temp3ma/>ssi, 3ece" class="sref">device */*6 temp4_faine>ssi, 0444laon/fschmd.c#L224tic temp3faine" name="L343"> atic temp3faine>ssilaon/fschmd.c#L22NULLass="sref">FSCHNULL>ssi, 3ece" class="sref">device *6 temp4_alarm>ssi, 0444laon/fschmd.c#L224tic temp3alarm" name="L343"> atic temp3alarm>ssilaon/fschmd.c#L22NULLass="sref">FSCHNULL>ssi, 3ece" class="sref">device * */6ssilaon/fschmd.c#L22NULLass="sref">FSCHNULL>ssi, 4ece" class="sref">device * 3336ssi,   0644laon/fschmd.c#L224tic temp3ma/hwmon20class="s4tic temp3ma/>ssilaon/fschmd.c#L224ine" temp3ma/hwmon20class="s4ine" temp3ma/>ssi, 4ece" class="sref">device *dev,6 temp5_faine>ssi, 0444laon/fschmd.c#L224tic temp3faine" name="L343"> atic temp3faine>ssilaon/fschmd.c#L22NULLass="sref">FSCHNULL>ssi, 4ece" class="sref">device *buf)6 temp5_alarm>ssi, 0444laon/fschmd.c#L224tic temp3alarm" name="L343"> atic temp3alarm>ssilaon/fschmd.c#L22NULLass="sref">FSCHNULL>ssi, 4ece" class="sref">device * 336{6ssilaon/fschmd.c#L22NULLass="sref">FSCHNULL>ssi, 5ece" class="sref">device *[3]6= { 14200, 6600, 3300 };6ssi,   0644laon/fschmd.c#L224tic temp3ma/hwmon20class="s4tic temp3ma/>ssilaon/fschmd.c#L224ine" temp3ma/hwmon20class="s4ine" temp3ma/>ssi, 5ece" class="sref">device *[66 class="sref">index;6 temp6_faine>ssi, 0444laon/fschmd.c#L224tic temp3faine" name="L343"> atic temp3faine>ssilaon/fschmd.c#L22NULLass="sref">FSCHNULL>ssi, 5ece" class="sref">device *dev);6 temp6_alarm>ssi, 0444laon/fschmd.c#L224tic temp3alarm" name="L343"> atic temp3alarm>ssilaon/fschmd.c#L22NULLass="sref">FSCHNULL>ssi, 5ece" class="sref">device * 3406ssilaon/fschmd.c#L22NULLass="sref">FSCHNULL>ssi, 6ece" class="sref">device *fschrc)6ssi,   0644laon/fschmd.c#L224tic temp3ma/hwmon20class="s4tic temp3ma/>ssilaon/fschmd.c#L224ine" temp3ma/hwmon20class="s4ine" temp3ma/>ssi, 6ece" class="sref">device *dmi_vref *6 temp7_faine>ssi, 0444laon/fschmd.c#L224tic temp3faine" name="L343"> atic temp3faine>ssilaon/fschmd.c#L22NULLass="sref">FSCHNULL>ssi, 6ece" class="sref">device * temp7_alarm>ssi, 0444laon/fschmd.c#L224tic temp3alarm" name="L343"> atic temp3alarm>ssilaon/fschmd.c#L22NULLass="sref">FSCHNULL>ssi, 6ece" class="sref">device *fscscy },6ssilaon/fschmd.c#L22NULLass="sref">FSCHNULL>ssi, 7ece" class="sref">device *fschrc },6ssi,   0644laon/fschmd.c#L224tic temp3ma/hwmon20class="s4tic temp3ma/>ssilaon/fschmd.c#L224ine" temp3ma/hwmon20class="s4ine" temp3ma/>ssi, 7ece" class="sref">device *fschmd },6 temp8_faine>ssi, 0444laon/fschmd.c#L224tic temp3faine" name="L343"> atic temp3faine>ssilaon/fschmd.c#L22NULLass="sref">FSCHNULL>ssi, 7ece" class="sref">device *[3]6ass="sref">fschds },6 temp8_alarm>ssi, 0444laon/fschmd.c#L224tic temp3alarm" name="L343"> atic temp3alarm>ssilaon/fschmd.c#L22NULLass="sref">FSCHNULL>ssi, 7ece" class="sref">device *[66ass="sref">fscsyl },6ssilaon/fschmd.c#L22NULLass="sref">FSCHNULL>ssi, 8ece" class="sref">device * 249        { }6ssi,   0644laon/fschmd.c#L224tic temp3ma/hwmon20class="s4tic temp3ma/>ssilaon/fschmd.c#L224ine" temp3ma/hwmon20class="s4ine" temp3ma/>ssi, 8ece" class="sref">device * 250};6 temp9_faine>ssi, 0444laon/fschmd.c#L224tic temp3faine" name="L343"> atic temp3faine>ssilaon/fschmd.c#L22NULLass="sref">FSCHNULL>ssi, 8ece" class="sref">device *fschmd_id);6 temp9_alarm>ssi, 0444laon/fschmd.c#L224tic temp3alarm" name="L343"> atic temp3alarm>ssilaon/fschmd.c#L22NULLass="sref">FSCHNULL>ssi, 8ece" class="sref">device * 2526ssilaon/fschmd.c#L22NULLass="sref">FSCHNULL>ssi, 9ece" class="sref">device *fschmd_driver = {6ssi,   0644laon/fschmd.c#L224tic temp3ma/hwmon20class="s4tic temp3ma/>ssilaon/fschmd.c#L224ine" temp3ma/hwmon20class="s4ine" temp3ma/>ssi, 9ece" class="sref">device *I2C_CLASS_HWMON,6 temp10_faine>ssi, 0444laon/fschmd.c#L224tic temp3faine" name="L343"> atic temp3faine>ssilaon/fschmd.c#L22NULLass="sref">FSCHNULL>ssi, 9ece" class="sref">device *driver = {6 temp10_alarm>ssi, 0444laon/fschmd.c#L224tic temp3alarm" name="L343"> atic temp3alarm>ssilaon/fschmd.c#L22NULLass="sref">FSCHNULL>ssi, 9ece" class="sref">device *,6ssilaon/fschmd.c#L22NULLass="sref">FSCHNULL>ssi, 10ece" class="sref">device * 257        },6ssi,   0644laon/fschmd.c#L224tic temp3ma/hwmon20class="s4tic temp3ma/>ssilaon/fschmd.c#L224ine" temp3ma/hwmon20class="s4ine" temp3ma/>ssi, 10ece" class="sref">device *[66"sref">fschmd_probe,6 temp11_faine>ssi, 0444laon/fschmd.c#L224tic temp3faine" name="L343"> atic temp3faine>ssilaon/fschmd.c#L22NULLass="sref">FSCHNULL>ssi, 10ece" class="sref">device *fschmd_remove,6 temp11_alarm>ssi, 0444laon/fschmd.c#L224tic temp3alarm" name="L343"> atic temp3alarm>ssilaon/fschmd.c#L22NULLass="sref">FSCHNULL>ssi, 10ece" class="sref">device *fschmd_id,6fschmd_update_device(fschmd_detect,6normal_i2c,6inde5" class="line" name="L335">sref">inde5" class="lin"line" name="L285"> 326"> 3="+cvice_attribute" cla326"> 3="+cvice"lin[xss=vers/hwmon/fschmd.c#L336" id="L336"6te" class6" name="L263"> 263};6ssi, 0444laon/fschmd.c#L224tic ="+cass=""L334" class="litic ="+cass=">ssilaon/fschmd.c#L22NULLass="sref">FSCHNULL>ssi, 0ece" class="sref">device * 2646device */*6 ="+1_alarm>ssi, 0444laon/fschmd.c#L224tic ="+calarm" name="L343"> atic ="+calarm>ssilaon/fschmd.c#L22NULLass="sref">FSCHNULL>ssi, 0ece" class="sref">device *6 ="+1_faine>ssi, 0444laon/fschmd.c#L224tic ="+cfaine" name="L343"> atic ="+cfaine>ssilaon/fschmd.c#L22NULLass="sref">FSCHNULL>ssi, 0ece" class="sref">device * */6 pwm1_aus="po42<1 pwm>ssi, 0644laon/fschmd.c#L224tic pwm_aus="po42<1 pwm" name="L343"> 4tic pwm_aus="po42<1 pwm>ssi,e" class="sref">device *[66ne" name="L268"> 2686 4ine" pwm_aus="po42<1 pwm>ssi, 0ece" class="sref">device *fschmd_data {6ssi, 0444laon/fschmd.c#L224tic ="+cass=""L334" class="litic ="+cass=">ssilaon/fschmd.c#L22NULLass="sref">FSCHNULL>ssi, 1ece" class="sref">device *client;6device *hwmon_dev;6 ="+2_alarm>ssi, 0444laon/fschmd.c#L224tic ="+calarm" name="L343"> atic ="+calarm>ssilaon/fschmd.c#L22NULLass="sref">FSCHNULL>ssi, 1ece" class="sref">device *update_lock;6 ="+2_faine>ssi, 0444laon/fschmd.c#L224tic ="+cfaine" name="L343"> atic ="+cfaine>ssilaon/fschmd.c#L22NULLass="sref">FSCHNULL>ssi, 1ece" class="sref">device *watchdog_lock;6 pwm2_aus="po42<1 pwm>ssi, 0644laon/fschmd.c#L224tic pwm_aus="po42<1 pwm" name="L343"> 4tic pwm_aus="po42<1 pwm>ssi,e" class="sref">device *6 4ine" pwm_aus="po42<1 pwm>ssi, 1ece" class="sref">device *kref;6ssi, 0444laon/fschmd.c#L224tic ="+cass=""L334" class="litic ="+cass=">ssilaon/fschmd.c#L22NULLass="sref">FSCHNULL>ssi, 2ece" class="sref">device *watchdog_miscdev;6device *kind;6 ="+3_alarm>ssi, 0444laon/fschmd.c#L224tic ="+calarm" name="L343"> atic ="+calarm>ssilaon/fschmd.c#L22NULLass="sref">FSCHNULL>ssi, 2ece" class="sref">device *[66f">watchdog_is_open;6 ="+3_faine>ssi, 0444laon/fschmd.c#L224tic ="+cfaine" name="L343"> atic ="+cfaine>ssilaon/fschmd.c#L22NULLass="sref">FSCHNULL>ssi, 2ece" class="sref">device *w6tchdog_expect_close;6 pwm3_aus="po42<1 pwm>ssi, 0644laon/fschmd.c#L224tic pwm_aus="po42<1 pwm" name="L343"> 4tic pwm_aus="po42<1 pwm>ssi,e" class="sref">device *6 4ine" pwm_aus="po42<1 pwm>ssi, 2ece" class="sref">device *6ssi, 0444laon/fschmd.c#L224tic ="+cass=""L334" class="litic ="+cass=">ssilaon/fschmd.c#L22NULLass="sref">FSCHNULL>ssi, 3ece" class="sref">device */* in jiffies */6device * 2836 ="+4_alarm>ssi, 0444laon/fschmd.c#L224tic ="+calarm" name="L343"> atic ="+calarm>ssilaon/fschmd.c#L22NULLass="sref">FSCHNULL>ssi, 3ece" class="sref">device *6 ="+4_faine>ssi, 0444laon/fschmd.c#L224tic ="+cfaine" name="L343"> atic ="+cfaine>ssilaon/fschmd.c#L22NULLass="sref">FSCHNULL>ssi, 3ece" class="sref">device *6 pwm4_aus="po42<1 pwm>ssi, 0644laon/fschmd.c#L224tic pwm_aus="po42<1 pwm" name="L343"> 4tic pwm_aus="po42<1 pwm>ssi,e" class="sref">device *6 4ine" pwm_aus="po42<1 pwm>ssi, 3ece" class="sref">device *6ssi, 0444laon/fschmd.c#L224tic ="+cass=""L334" class="litic ="+cass=">ssilaon/fschmd.c#L22NULLass="sref">FSCHNULL>ssi, 4ece" class="sref">device *device *6 ="+5_alarm>ssi, 0444laon/fschmd.c#L224tic ="+calarm" name="L343"> atic ="+calarm>ssilaon/fschmd.c#L22NULLass="sref">FSCHNULL>ssi, 4ece" class="sref">device */* voltage */6 ="+5_faine>ssi, 0444laon/fschmd.c#L224tic ="+cfaine" name="L343"> atic ="+cfaine>ssilaon/fschmd.c#L22NULLass="sref">FSCHNULL>ssi, 4ece" class="sref">device *6 pwm5_aus="po42<1 pwm>ssi, 0644laon/fschmd.c#L224tic pwm_aus="po42<1 pwm" name="L343"> 4tic pwm_aus="po42<1 pwm>ssi,e" class="sref">device *6 4ine" pwm_aus="po42<1 pwm>ssi, 4ece" class="sref">device *6ssi, 0444laon/fschmd.c#L224tic ="+cass=""L334" class="litic ="+cass=">ssilaon/fschmd.c#L22NULLass="sref">FSCHNULL>ssi, 5ece" class="sref">device */* 6ons per second */6device */* fan status */6 ="+6_alarm>ssi, 0444laon/fschmd.c#L224tic ="+calarm" name="L343"> atic ="+calarm>ssilaon/fschmd.c#L22NULLass="sref">FSCHNULL>ssi, 5ece" class="sref">device *6 ="+6_faine>ssi, 0444laon/fschmd.c#L224tic ="+cfaine" name="L343"> atic ="+cfaine>ssilaon/fschmd.c#L22NULLass="sref">FSCHNULL>ssi, 5ece" class="sref">device *6 pwm6_aus="po42<1 pwm>ssi, 0644laon/fschmd.c#L224tic pwm_aus="po42<1 pwm" name="L343"> 4tic pwm_aus="po42<1 pwm>ssi,e" class="sref">device * 298};6 4ine" pwm_aus="po42<1 pwm>ssi, 5ece" class="sref">device * 2997ssi, 0444laon/fschmd.c#L224tic ="+cass=""L334" class="litic ="+cass=">ssilaon/fschmd.c#L22NULLass="sref">FSCHNULL>ssi, 6ece" class="sref">device */*7device *7 ="+7_alarm>ssi, 0444laon/fschmd.c#L224tic ="+calarm" name="L343"> atic ="+calarm>ssilaon/fschmd.c#L22NULLass="sref">FSCHNULL>ssi, 6ece" class="sref">device *7 ="+7_faine>ssi, 0444laon/fschmd.c#L224tic ="+cfaine" name="L343"> atic ="+cfaine>ssilaon/fschmd.c#L22NULLass="sref">FSCHNULL>ssi, 6ece" class="sref">device *7 pwm7_aus="po42<1 pwm>ssi, 0644laon/fschmd.c#L224tic pwm_aus="po42<1 pwm" name="L343"> 4tic pwm_aus="po42<1 pwm>ssi,e" class="sref">device *7 4ine" pwm_aus="po42<1 pwm>ssi, 6ece" class="sref">device *7fschmd_update_device(7 298};7/*dmi_vref = -1;7 3107 *//*7 3>,  3>, <"driv*md.c#L274" id=">, &qu,w427fschmd_update_device( */7, "%d\n" 3197fschmd_update_device(/*7fschmd_update_device(7fschmd_update_device(7fschmd_update_device( */7ref)7FSCHEINVAL>ssif">fschmd_update_device( 325{7fschmd_update_device(kref);7FSCHmutex_locka hre&#37;d\n", "%d\n"FSCHwatchdog_locka hr)f">fschmd_update_device(data);7"%d\n"[67e" name="L328"> 328}7FSCHENODEV>ssif">fschmd_update_device( 3297ssif">fschmd_update_device(/*7fschmd_update_device(7 */7 3337, "%d\n"FSCHwatchdog_controla hr &#= ~37;d\n"FSCHFSCHMD_WDOG_CONTROL_RESOLUTION>ssif">fschmd_update_device(dev,7fschmd_update_device(buf)7, "%d\n"FSCHwatchdog_controla hr |=mon/fschmd.c#L29FSCHMD_WDOG_CONTROL_RESOLUTIONass="sref">FSCHFSCHMD_WDOG_CONTROL_RESOLUTION>ssif">fschmd_update_device( 336{7, "%d\n"fschmd_update_device([67 class="sref">index;7fschmd_update_device(dev);7 3407, , "%d\n"device *fschrc)7FSCHFSCHMD_REG_WDOG_PRESET"dri[on/fschmd.c#L29>, "%d\n", "%d\n"fschmd_update_device(dmi_vref *7, , "%d\n"device *fscscy },7FSCHFSCHMD_REG_WDOG_CONTROL"dri[on/fschmd.c#L29>, "%d\n"device *fschrc },7, "%d\n"FSCHwatchdog_controla hr &# ~37;d\n"fschmd_update_device(fschmd },7[3]7ass="sref">fschds },7, "%d\n"fschmd_update_device([67ass="sref">fscsyl },7fschmd_update_device( 249        { }7ssi:">fschmd_update_device( 250};7FSCHmutex_unlocka hre&#37;d\n", "%d\n"FSCHwatchdog_locka hr)f">fschmd_update_device(fschmd_id);7fschmd_update_device( 2527fschmd_update_device(fschmd_driver = {7fschmd_update_device(I2C_CLASS_HWMON,7 3>,  3>, <"driv*md.c#L274" id=">, &qu)vers/hwmon/fschmd.c#L252" id="L2527e>driver = {7,7fschmd_update_device([3]7L257"> 257        },7fschmd_probe,7FSCHmutex_locka hre&#37;d\n", "%d\n"FSCHwatchdog_locka hr)f">fschmd_update_device(fschmd_remove,7"%d\n"FSCHwatchdog_controla hr &# on/fschmd.c#L29FSCHMD_WDOG_CONTROL_RESOLUTIONass="sref">FSCHFSCHMD_WDOG_CONTROL_RESOLUTION>ssi)vers/hwmon/fschmd.c#L252" id="L2527ea>fschmd_id,7, "%d\n"fschmd_update_device(fschmd_detect,7fschmd_update_device(normal_i2c,7, "%d\n"fschmd_update_device( 263};7FSCHmutex_unlocka hre&#37;d\n", "%d\n"FSCHwatchdog_locka hr)f">fschmd_update_device( 2647fschmd_update_device(/*7fschmd_update_device(7fschmd_update_device( */7 2687FSCHwatchdog_triggera hreon/fschmd.c#L274" id="326"> 3>,  3>, <"driv*md.c#L274" id=">, &qu)vers/hwmon/fschmd.c#L252" id="L2527ta" class7"sref">fschmd_data {7client;7fschmd_update_device(hwmon_dev;7update_lock;7FSCHmutex_locka hre&#37;d\n", "%d\n"FSCHwatchdog_locka hr)f">fschmd_update_device(watchdog_lock;7, "%d\n"7FSCHENODEV>ssif">fschmd_update_device(kref;7ssif">fschmd_update_device(watchdog_miscdev;7fschmd_update_device(kind;7watchdog_is_open;7, "%d\n"FSCHwatchdog_controla hr |=mon/fschmd.c#L29FSCHMD_WDOG_CONTROL_TRIGGER"L334" class="lFSCHMD_WDOG_CONTROL_TRIGGER"drif">fschmd_update_device(w7tchdog_expect_close;7, , "%d\n"device *7FSCHFSCHMD_REG_WDOG_CONTROL"dri[on/fschmd.c#L29>, "%d\n"device *7"%d\n"FSCHwatchdog_controla hr)f">fschmd_update_device(/* in jiffies */7ssi:">fschmd_update_device( 2837FSCHmutex_unlocka hre&#37;d\n", "%d\n"FSCHwatchdog_locka hr)f">fschmd_update_device(7fschmd_update_device(7fschmd_update_device(77FSCHwatchdog_stopa hreon/fschmd.c#L274" id="326"> 3>,  3>, <"driv*md.c#L274" id=">, &qu)vers/hwmon/fschmd.c#L252" id="L2527mclass="l7tatus register */77fschmd_update_device(/* voltage */7fschmd_update_device(7FSCHmutex_locka hre&#37;d\n", "%d\n"FSCHwatchdog_locka hr)f">fschmd_update_device(7, "%d\n"7FSCHENODEV>ssif">fschmd_update_device(/* 7ons per second */7ssif">fschmd_update_device(/* fan status */7fschmd_update_device(77, "%d\n"FSCHwatchdog_controla hr &#= ~37;d\n"fschmd_update_device( 298};7/* 2998/*8         * its a write only bit (read alwaysmresurns 0), , "%d\n"device *8FSCHFSCHMD_REG_WDOG_CONTROL"dri[on/fschmd.c#L29>, "%d\n"device *8"%d\n"FSCHwatchdog_controla hr |mon/fschmd.c#L29FSCHMD_WDOG_CONTROL_STOP"L334" class="lFSCHMD_WDOG_CONTROL_STOPa hr)f">fschmd_update_device(8ssi:">fschmd_update_device(8FSCHmutex_unlocka hre&#37;d\n", "%d\n"FSCHwatchdog_locka hr)f">fschmd_update_device(fschmd_update_device( 298};8fschmd_update_device(dmi_vref = -1;8fschmd_update_device( 3108FSCHfilp>&qu)vers/hwmon/fschmd.c#L252" id="L2528f2>/*88 3>,  3>, <"driv*md.c#L274" id="posspan class="strpos"dri,v*md.c#L274" id=">, &qu =mschmd.c#L338" iNULLass="sref">FSCHNULL>ssif">fschmd_update_device(8fschmd_update_device(8fschmd_update_device( */8 3probe() with watchdog_ing"_mutex 3198/*8         */FSCHmutex_trylocka hre&#37;d\n"FSCHERESTARTSYS>ssif">fschmd_update_device( */8ref)8FSCHminir>&qu ==mschmd.c#L338" iiminirass="sref">FSCHiminir>&quef="+code=fschmdinid=span class="strinid="dri))=vers/hwmon/fschmd.c#L336" id="L336"8 > 325{8&qu =mschmd.c#L338" iposspan class="strpos"drif">fschmd_update_device(kref);8fschmd_update_device(data);8fschmd_update_device([68e" name="L328"> 328}8fschmd_update_device( 3298/*8"%d\n"fschmd_update_device(8fschmd_update_device( */8"%d\n"fschmd_update_device( 3338FSCHmutex_unlocka hre&#37;d\n"fschmd_update_device(dev,8fschmd_update_device(buf)8fschmd_update_device( 336{8FSCHEBUSY"drif">fschmd_update_device([3]8= { 14200, 6600, 3300 };8index;8/* Start the watchdog */dev);8FSCHwatchdog_triggera hremd.c#L274" id=">, &qu)f">fschmd_update_device( 3408FSCHfilp>"%d\n", , &quf">fschmd_update_device(fschrc)8dmi_vref *8FSCHfilp>&qu)f">fschmd_update_device(fschmd_update_device(fscscy },8fschmd_update_device(fschrc },8FSCHfilp>&qu)vers/hwmon/fschmd.c#L252" id="L2528"7k held 8ass="sref">fschmd },8[3]8ass="sref">fschds },8 3>,  3>, <"driv*md.c#L274" id=">, &qu =mschmd.c#L338" ifilpass="sref">FSCHfilp>"%d\n", fschmd_update_device([68ass="sref">fscsyl },8fschmd_update_device( 249        { }8"%d\n" 250};8FSCHwatchdog_stopa hremd.c#L274" id=">, &qu)f">fschmd_update_device(fschmd_id);8"%d\n"fschmd_update_device( 2528fschmd_driver = {8FSCHwatchdog_triggera hremd.c#L274" id=">, &qu)f">fschmd_update_device(I2C_CLASS_HWMON,8"%d\n"device *driver = {8"unexpected clos=, not stopping watchdog!\n"fschmd_update_device(,8fschmd_update_device([3]8L257"> 257        },8fschmd_probe,8"%d\n"fschmd_update_device(fschmd_remove,8fschmd_update_device(fschmd_id,8FSCHmutex_locka hre&#37;d\n"fschmd_update_device(fschmd_detect,8"%d\n" 3releas=_resourcesspan class="str326"> 3releas=_resourcesfschmd_update_device(normal_i2c,8FSCHmutex_unlocka hre&#37;d\n"fschmd_update_device( 263};8fschmd_update_device( 2648fschmd_update_device(/*8fschmd_update_device(8 */8 asize_e"driv37;d\n"FSCHfilp>&qu, const charhmd.c#L274" id="__userass="sref">FSCH__user"driv*md.c#L274" id="bud"L334" class="lbud"drile" class="sref">device *[68ne" name="L268"> 2688 aize_e"driv37;d\n" loff_e"driv*md.c#L274" id="offses"L334" class="loffses>&qu)vers/hwmon/fschmd.c#L252" id="L2528ta" class8"sref">fschmd_data {8client;8fschmd_update_device(hwmon_dev;8 3>,  3>, <"driv*md.c#L274" id=">, &qu =mschmd.c#L338" ifilpass="sref">FSCHfilp>"%d\n", fschmd_update_device(update_lock;8fschmd_update_device(watchdog_lock;88kref;8 aize_e"driv37;d\n"fschmd_update_device(watchdog_miscdev;8kind;8/* Clear itm42 cas= itmwas ses with a previous write */watchdog_is_open;8, "%d\n"fschmd_update_device(w8tchdog_expect_close;8fschmd_update_device(8ssi !=mschmd.c#L338" icouasspan class="strcouas"drifv37;d\n"8ssif">fschmd_update_device(/* in jiffies */8FSCHget_usera hremd.c#L274" id="cspan class="strc>ssi,von/fschmd.c#L29bud"L334" class="lbud"dri +v37;d\n" 2838FSCHEFAULT>ssif">fschmd_update_device(8ssi ==msspaname="L29on/ing">'V'fschmd_update_device(8, "%d\n"fschmd_update_device(8fschmd_update_device(8fschmd_update_device(FSCHwatchdog_triggera hremd.c#L274" id=">, &qu)f">fschmd_update_device(8fschmd_update_device(/* voltage */8fschmd_update_device(8fschmd_update_device(8fschmd_update_device(8fschmd_update_device(/* 8ons per second */8fschmd_update_device(/* fan status */8FSCHwatchdog_ioctla hreon/fschmd.c#L274" id="fil=span class="strfil="driv*md.c#L274" id="filpass="sref">FSCHfilp>&qu, unsignedm42device *88 298};8FSCHwatchdog_info"driv37;d\n" 2999FSCHWDIOF_SETTIMEOUT>ssiv|ers/hwmon/fschmd.c#L336" id="L336"9 1lass="l9nt">/* voltage */9FSCHWDIOF_CARDRESET"drile" class="sref">device *9ssiv=msspaname="L29on/ing">"FSC watchdog"device *9fschmd_update_device(9fschmd_update_device(9 3>,  3>, <"driv*md.c#L274" id=">, &qu =mschmd.c#L338" ifilpass="sref">FSCHfilp>"%d\n", fschmd_update_device(9fschmd_update_device(9FSCHWDIOC_GETSUPPORT"dri:">fschmd_update_device( 298};9, "%d\n"fschmd_update_device(dmi_vref = -1;9fschmd_update_device( 3109ssiv|=mon/fschmd.c#L29WDIOF_MAGICCLOSEass="sref">FSCHWDIOF_MAGICCLOSE>ssif">fschmd_update_device(/*9FSCHcopy_to_usera hre(voidhmd.c#L274" id="__userass="sref">FSCH__user"driv*)on/fschmd.c#L29arg"L334" class="larg>&qu,v&#37;d\n"FSCHEFAULT>ssif">fschmd_update_device(9fschmd_update_device(9fschmd_update_device( */9FSCHWDIOC_GETSTATUS"dri:">fschmd_update_device();9FSCHput_usera hre0, (42FSCH__user"driv*)on/fschmd.c#L29arg"L334" class="larg>&qu)f">fschmd_update_device(9fschmd_update_device();9fschmd_update_device( 3199FSCHWDIOC_GETBOOTSTATUS"dri:">fschmd_update_device(/*9, "%d\n"FSCHFSCHMD_WDOG_STATE_CARDRESET"dri)">fschmd_update_device(9FSCHput_usera hreon/fschmd.c#L29WDIOF_CARDRESETass="sref">FSCHWDIOF_CARDRESET"dril (42FSCH__user"driv*)on/fschmd.c#L29arg"L334" class="larg>&qu)f">fschmd_update_device(9fschmd_update_device( */9FSCHput_usera hre0, (42FSCH__user"driv*)on/fschmd.c#L29arg"L334" class="larg>&qu)f">fschmd_update_device(ref)9fschmd_update_device( 325{9fschmd_update_device(kref);9FSCHWDIOC_KEEPALIVE"dri:">fschmd_update_device(data);9FSCHwatchdog_triggera hremd.c#L274" id=">, &qu)f">fschmd_update_device([69e" name="L328"> 328}9fschmd_update_device( 3299fschmd_update_device(/*9FSCHWDIOC_GETTIMEOUT"dri:">fschmd_update_device(9ssi =mschmd.c#L338" iwatchdog_get_timeous"L334" class="lwatchdog_get_timeousa hremd.c#L274" id=">, &qu)f">fschmd_update_device( */9FSCHput_usera hreon/fschmd.c#L29ispan class="stri>ssila(42FSCH__user"driv*)on/fschmd.c#L29arg"L334" class="larg>&qu)f">fschmd_update_device( 3339fschmd_update_device(dev,9fschmd_update_device(buf)9FSCHWDIOC_SETTIMEOUT>ssi:">fschmd_update_device( 336{9FSCHget_usera hremd.c#L274" id="ispan class="stri>ssila(42FSCH__user"driv*)on/fschmd.c#L29arg"L334" class="larg>&qu))=vers/hwmon/fschmd.c#L336" id="L336"9ng[3]9= { 14200, 6600, 3300 };9FSCHEFAULT>ssif">fschmd_update_device([69 class="sref">index;9fschmd_update_device(dev);9fschmd_update_device( 3409&qulaon/fschmd.c#L22ispan class="stri>ssi)f">fschmd_update_device(fschrc)9fschmd_update_device(dmi_vref *9FSCHput_usera hreon/fschmd.c#L29res"L334" class="lres>ssila(42FSCH__user"driv*)on/fschmd.c#L29arg"L334" class="larg>&qu)f">fschmd_update_device(fschmd_update_device(fscscy },9fschmd_update_device(fschrc },9FSCHWDIOC_SETOPTIONS>ssi:">fschmd_update_device(fschmd },9FSCHget_usera hremd.c#L274" id="ispan class="stri>ssila(42FSCH__user"driv*)on/fschmd.c#L29arg"L334" class="larg>&qu))=vers/hwmon/fschmd.c#L336" id="L336"9"g[3]9ass="sref">fschds },9FSCHEFAULT>ssif">fschmd_update_device([69ass="sref">fscsyl },9fschmd_update_device( 249        { }9fschmd_update_device( 250};9fschmd_update_device(fschmd_id);9ssi &# on/fschmd.c#L29WDIOS_DISABLECARDass="sref">FSCHWDIOS_DISABLECARD"dri)">fschmd_update_device( 2529FSCHwatchdog_stopa hremd.c#L274" id=">, &qu)f">fschmd_update_device(fschmd_driver = {9FSCHWDIOS_ENABLECARD"dri)">fschmd_update_device(I2C_CLASS_HWMON,9FSCHwatchdog_triggera hremd.c#L274" id=">, &qu)f">fschmd_update_device(driver = {9fschmd_update_device(,9FSCHEINVAL>ssif">fschmd_update_device([3]9L257"> 257        },9fschmd_probe,9fschmd_update_device(fschmd_remove,9fschmd_update_device(fschmd_id,9FSCHENOTTY>ssif">fschmd_update_device(fschmd_detect,9fschmd_update_device(normal_i2c,9fschmd_update_device( 263};9fschmd_update_device( 2649fschmd_update_device(/*99FSCHowner>ssi =mschmd.c#L338" iTHIS_MODULEass="sref">FSCHTHIS_MODULE>ssilers/hwmon/fschmd.c#L336" id="L336"9eg[3]9ass="comment"> */9FSCHllseek>ssi =mschmd.c#L338" ino_llseekass="sref">FSCHno_llseek>ssilers/hwmon/fschmd.c#L336" id="L336"9eet[69ne" name="L268"> 2689fschmd_data {9client;9hwmon_dev;9FSCHunlocked_ioctla hr =mschmd.c#L338" iwatchdog_ioctlass="sref">FSCHwatchdog_ioctla hrlers/hwmon/fschmd.c#L336" id="L336"9t chip. T9="sref">update_lock;9fschmd_update_device(watchdog_lock;9fschmd_update_device(9fschmd_update_device(kref;9/*watchdog_miscdev;9 * Detect,mregister, unregister and upingemdevice functeons"dspanivers/hwmon/fschmd.c#L217" id="L2179tg[3]9" class="sref">kind;9 */watchdog_is_open;9fschmd_update_device(w9tchdog_expect_close;99 * which are available on FSC machid s with an 326"er or later chip./* in jiffies */9 2839 3>mi_de38" span class="strf26"> 3>mi_de38" a hreconst on/fschmd.c#L274" id=">mi_headerass="sref">FSCH>mi_header"driv*md.c#L274" id="headerass="sref">FSCHheader"dri,wvoidh*md.c#L274" id=">ummyspan class="str>ummy"dri)">fschmd_update_device(99ssilaon/fschmd.c#L22multspan class="strmult>ssi[3]v=mv 0 }laon/fschmd.c#L22offses"L334" class="loffses>&qu[3]v=mv 0 }laon/fschmd.c#L22vss="L334" class="lvss=a hr =m0,von/fschmd.c#L29foundspan class="strfounda hr =m0f">fschmd_update_device(99/*/* voltage */9         * reality this addr ss holds headerot;&#length bytes of which the header"dspanivers/hwmon/fschmd.c#L217" id="L2179e=fschrc"9/* temperature */9         * are the first 4 bytes"dspanivers/hwmon/fschmd.c#L217" id="L2179eck" clas9atus of sensor */99FSCHheader"drif">fschmd_update_device(/* 9ons per second */9fschmd_update_device(/* fan status */99FSCHheader"driot;%d\n"FSCHtype"driv!= 185)">fschmd_update_device(9fschmd_update_device([69" name="L298"> 298};9fschmd_update_device( 298};10 cl>10 c"drivers/hwm/* 29ss="28/68/969e0 c439fdef780cf6289e8274216ff0c0_3/10 cl>>fschmd_update_device(/* voltage */10 t">10 ="dri         * we are looking for what Siemlas calls "subtype" 19, the subtype10 * >10 ="dri         * is storedm42 byte 5 of the >mi blocka spanivers/hwmon/fschmd.c#L217" id="L21710 3lass="l10 tus of sensor */10 tu>10 3"dri         */10 un>10 4"drivers/hwmif e37;d\n"FSCHheader"driot;%d\n"FSCHlength>ssi <m5 ||mon/fschmd.c#L29>mi_d, fschmd_update_device(fschmd_update_device(fschmd_update_device(10 vi>10 ="dri         * After the subtype comes 1 unknow2 byte and then blocks of 5 bytes, 298};10  n>10 ="dri         * consisting of what Siemlas calls ana"Easity" number, followedmbydmi_vref = -1;10sre>10sr"dri         * 2 16-bitmw8rdsm42 LSB first 8rder"dspanivers/hwmon/fschmd.c#L217" id="L21710s1lass="l10ne" name="L310"> 31010ne">10s="dri         *//*10las>10s="drivers/hwmfor ef="+code=fschmdispan class="stri>ssi =m6; ef="+code=fschmdispan class="stri>ssi + 4) <m37;d\n"FSCHheader"driot;%d\n"FSCHlength>ssifv37;d\n"10the>10s4"drivers/hwmvers/hwmif ef="+code=fschmd>mi_d, ssi]v>= 1 &#&# on/fschmd.c#L29>mi_d, ssi]v<= 3)=vers/hwmon/fschmd.c#L336" id="L336"10s5lass="l10rom the open fop.10rom>10s="drivers/hwmvers/hwmmmmmmmmmospaname="L29commlass>/* Ourm42 slasors 8rder and the DMIm8rder differ */ */10ass>10s="drivers/hwmvers/hwmvers/hwmconst 42fschmd_update_device(fschmd_update_device();10atc>10s="drivers/hwmvers/hwmvers/hwmsspaname="L29commlass>/* Checkmfor twice the s 31910ne">10ne"drivers/hwmon/fschmmmmmmmmm4f ef="+code=fschmdfoundspan class="strfounda hr &# (1v<<m37;d\n"/*10las>10n="drivers/hwmon/fschmmmmmmmmmmmmmmmmmresurnf">fschmd_update_device(10vic>10n3"drivers/hwmon/fschmmmmmmmmmon/fschmd.c#L22multspan class="strmult>ssi[37;d\n"mi_d, ssi + 1] | ef="+code=fschmd>mi_d, ssi + 2]v<<m8)f">fschmd_update_device( */10ass>10n4"drivers/hwmvers/hwmmmmmmmmmschmd.c#L338" ioffses"L334" class="loffses>&qu[37;d\n"mi_d, ssi + 3] | ef="+code=fschmd>mi_d, ssi + 4]v<<m8)f">fschmd_update_device(ref)10f" >10n="dri">fschmd_update_device( 325{10e" >10n="drivers/hwmvers/hwmvers/hwmschmd.c#L338" ifoundspan class="strfounda hr |= 1 <<m37;d\n"fschmd_update_device(kref);10 cl>10n7"drivers/hwmon/fschm}">fschmd_update_device(data);10 cl>10n="drivers/hwmon/fschmd.c#L217" id="L2171029lass="l10e" name="L328"> 328}10e" >10n="drivers/hwmvers/hwmsspaname="L29commlass>/* lasity 7:mreference voltage */ 32910ne">10ne"drivers/hwmvers/hwmif ef="+code=fschmd>mi_d, ssi]v== 7)=vers/hwmon/fschmd.c#L336" id="L336"1031lass="l10lass="comment">/*10las>10n="drivers/hwmon/fschmmmmmmmmmsspaname="L29commlass>/* Checkmfor twice the s10/ s>10n="drivers/hwmvers/hwmmmmmmmmm4f ef="+code=fschmdfoundspan class="strfounda hr &# 0x08)vers/hwmon/fschmd.c#L252" id="L2521033lass="l10ass="comment"> */10ass>10n3"drivers/hwmon/fschmmmmmmmmmmmmmmmmmresurnf">fschmd_update_device( 33310ne">10n="dri">fschmd_update_device(dev,10v" >10n="drivers/hwmvers/hwmmmmmmmmmon/fschmd.c#L22vss="L334" class="lvss=a hr =mschmd.c#L338" i>mi_d, ssi + 1] | ef="+code=fschmd>mi_d, ssi + 2]v<<m8)f">fschmd_update_device(buf)10f" >10n="dri">fschmd_update_device( 336{10e" >10n7"drivers/hwmon/fschmmmmmmmmmon/fschmd.c#L22foundspan class="strfounda hr |= 0x08f">fschmd_update_device(fschmd_update_device(index;10 cl>10n="drivers/hwm}">fschmd_update_device(dev);10" c>10" "dri">fschmd_update_device( 34010ne">10"="drivers/hwm4f ef="+code=fschmdfoundspan class="strfounda hr == 0x0F)=vers/hwmon/fschmd.c#L336" id="L336"1042lass="l10class="sref">fschrc)10cla>10"="drivers/hwmvers/hwmfor ef="+code=fschmdispan class="stri>ssi =m0fv37;d\n"ssi++)=vers/hwmon/fschmd.c#L336" id="L336"10"3lass="l10ss="sref">dmi_vref *10ss=>10"3"drivers/hwmon/fschmmmmmmmmmon/fschmd.c#L22imi_multspan class="strimi_multa hr[37;d\n"ssi[37;d\n"fschmd_update_device(10"4"drivers/hwmvers/hwmmmmmmmmmschmd.c#L338" iimi_offses"L334" class="limi_offsesa hr[37;d\n"ssi]v* 10f">fschmd_update_device(fscscy },10ass>10"="drivers/hwmvers/hwm}">fschmd_update_device(fschrc },10ass>10"="drivers/hwmvers/hwm/*fschmd },10ass>10"="dri                 * Ac38rding to the >ocs there should be separngemdmi lasries"dspanivers/hwmon/fschmd.c#L217" id="L21710"8lass="l10ass="sref">fschds },10ass>10"="dri                 * for the mult's and offsess of in3-5 of the syl, butmonfscsyl },10ass>10"="dri                 * my test machid  these are not preslas>sspanivers/hwmon/fschmd.c#L217" id="L217105class="l10249"> 249        { }10249>1024"dri                 */ 250};10" n>102="drivers/hwmon/fschm37;d\n"mi_multspan class="strimi_multa hr[2]f">fschmd_update_device(fschmd_id);10s=">102="drivers/hwmvers/hwmon/fschmd.c#L29>mi_multspan class="strimi_multa hr[4] =mschmd.c#L338" i>mi_multspan class="strimi_multa hr[1]f">fschmd_update_device( 25210ne">1023"drivers/hwmon/fschmf="+code=fschmd>mi_multspan class="strimi_multa hr[5] =mschmd.c#L338" i>mi_multspan class="strimi_multa hr[2]f">fschmd_update_device(fschmd_driver = {10f">>1024"drivers/hwmvers/hwmschmd.c#L338" iimi_offses"L334" class="limi_offsesa hr[3] =mschmd.c#L338" i>mi_offses"L334" class="limi_offsesa hr[2]f">fschmd_update_device(I2C_CLASS_HWMON,10ef">102="drivers/hwmvers/hwmschmd.c#L338" i>mi_offses"L334" class="limi_offsesa hr[4] =mschmd.c#L338" i>mi_offses"L334" class="limi_offsesa hr[1]f">fschmd_update_device(driver = {10ss=>102="drivers/hwmvers/hwmmi_offses"L334" class="limi_offsesa hr[5] =mschmd.c#L338" i>mi_offses"L334" class="limi_offsesa hr[2]f">fschmd_update_device(fschmd_update_device( 257        },10L25>102="drivers/hwm}">fschmd_update_device(fschmd_probe,10"sr>102="dri}">fschmd_update_device(fschmd_remove,10sre>10sr"dri">fschmd_update_device(fschmd_id,10ss=>10s="drivers/hw42 3>etectspan class="strf26"> 3>etect"drieon/fschmd.c#L274" id="i2c_clilasspan class="stri2c_clilas"driv*md.c#L274" id="clilasspan class="strclilas"drilers/hwmon/fschmd.c#L336" id="L336"10s2lass="l10sref">fschmd_detect,10sre>10s="drivers/hwmvers/hwmmmmmmmmmmon/fschmd.c#L274" id="i2c_board_infoass="sref">FSCHi2c_board_info"driv*md.c#L274" id="infoass="sref">FSCHinfo"dri)vers/hwmon/fschmd.c#L252" id="L2521063lass="l10s="sref">normal_i2c,10s=">10s3"drivers/hwmon/fschmd.c#L336" id="L336"1064lass="l10" name="L263"> 263};10" n>10s4"drivers/hwmenummon/fschmd.c#L29chipsspan class="strchips"drivon/fschmd.c#L29kindspan class="strkinda hrf">fschmd_update_device( 26410ne">10s="drivers/hwmon/fschmd.c#L274" id="i2c_adapterass="sref">FSCHi2c_adapter"driv*md.c#L274" id="adapterass="sref">FSCHadapter"driv=mschmd.c#L338" iclilasspan class="strclilas"driot;%d\n"FSCHadapter"drif">fschmd_update_device(/*10las>10s6"drivers/hwmcharhmd.c#L274" id="idspan class="strida hr[4]f">fschmd_update_device( */10ass>10s="drivers/hwmif e!37;d\n"FSCHadapter"dri,von/fschmd.c#L29I2C_FUNC_SMBUS_BYTE_DATAass="sref">FSCHI2C_FUNC_SMBUS_BYTE_DATA>ssi))vers/hwmon/fschmd.c#L252" id="L2521069lass="l10ne" name="L268"> 26810ne">10s="drivers/hwmvers/hwmresurn -f="+code=fschmdENODEVass="sref">FSCHENODEV"drif">fschmd_update_device(fschmd_data {10"sr>10"s"drivers/hwmon/fschmd.c#L217" id="L2171071lass="l10class="sref">client;10cla>10"="drivers/hwmsspaname="L29commlass>/* Detect &# Idlasify the chip */hwmon_dev;10ss=>10"="drivers/hwmmd.c#L274" id="idspan class="strida hr[0] =mschmd.c#L338" ii2c_smbus_read_byte_d, fschmd_update_device(update_lock;10="s>10"3"drivers/hwmmd.c#L274" id="idspan class="strida hr[1] =mschmd.c#L338" ii2c_smbus_read_byte_d, fschmd_update_device(watchdog_lock;10sre>10"="drivers/hwmon/fschmd.c#L29idspan class="strida hr[2] =mschmd.c#L338" ii2c_smbus_read_byte_d, fschmd_update_device('s and.clilas"dAss="s1Nd_update_dedevice(buf)10f" >10n="dri">fschm7_update_ded.c#L217" id="L2179ts="sded.chdoglue for rps */10ass>10s="dr"stcm=mschmd.c#L338" "stcm=="stri2c_smbus_read_"5"drivers/hwmon/fschmd,span class="stridlasity>ssivPEGL29on/ing">&qHI2C_FUNC_SMBUS_BYTE_DATA>ssi))vers/hw7on/fschmd.d.c#L217" id="L2179tgdata);9FSCHENODEV"drif">fschmdon/fschmd.d.c#L217" id="L2179oet 910ass>10s="dr"stcm=mschmd.c#L338" "stcm=="stri2c_smbus_read_"5"drivers/hwmon/fschmd,span class="stridlasity>ssivHERL29on/ing">&qHI2C_FUNC_SMBUS_BYTE_DATA>ssi))vers/hw8_update_dedevice(data);9FSCHENODEV"drif">fschm8on/fschmd.d.c#L217" id="L2179 to ad.d.c>ded1ame="L268"> 910ass>10s="dr"stcm=mschmd.c#L338" "stcm=="stri2c_smbus_read_"5"drivers/hwmon/fschmd,span class="stridlasity>ssivSCYL29on/ing">&qHI2C_FUNC_SMBUS_BYTE_DATA>ssi))vers/hw8on/fschmd.d.c#L217" id="L2179 =fscd.d.c>dedref">fschmd_id);10s=">102="drive"strchips"drivon/fschmd.c#L=">, FSCHENODEV"drif">fschm8_update_ded.c#L217" id="L2179 ck" ded.c>ded3ame="L268"> 910ass>10s="dr"stcm=mschmd.c#L338" "stcm=="stri2c_smbus_read_"5"drivers/hwmon/fschmd,span class="stridlasity>ssivHRCL29on/ing">&qHI2C_FUNC_SMBUS_BYTE_DATA>ssi))vers/hw8_update_ded.c#L217" id="L2179 e" cded.c>dedschmd_driver = {10f">>1024"drive"strchips"drivon/fschmd.c#L=">, FSCHENODEV"drif">fschm8_update_dedevice(ded5ame="L268"> 910ass>10s="dr"stcm=mschmd.c#L338" "stcm=="stri2c_smbus_read_"5"drivers/hwmon/fschmd,span class="stridlasity>ssivHMDL29on/ing">&qHI2C_FUNC_SMBUS_BYTE_DATA>ssi))vers/hw8_update_de.c#L336" id="L336"9 >dedsref">driver = {10ss=>102="drive"strchips"drivon/fschmd.c#L=">, FSCHENODEV"drif">fschm8_update_dedevice( 910ass>10s="dr"stcm=mschmd.c#L338" "stcm=="stri2c_smbus_read_"5"drivers/hwmon/fschmd,span class="stridlasity>ssivHDSL29on/ing">&qHI2C_FUNC_SMBUS_BYTE_DATA>ssi))vers/hw8on/fschmd.d.c#L217" id="L2179 e" nd.d.c>dedass="sref">data);9FSCHENODEV"drif">fschm8on/fschmd.d.c#L217" id="L2179 etdedname="L268"> 910ass>10s="dr"stcm=mschmd.c#L338" "stcm=="stri2c_smbus_read_"5"drivers/hwmon/fschmd,span class="stridlasity>ssivSYLL29on/ing">&qHI2C_FUNC_SMBUS_BYTE_DATA>ssi))vers/hw9_update_ded.c#L217" id="L2179er prded.c>ded.ef">fschmd_id);10s=">102="drive"strchips"drivon/fschmd.c#L=">, FSCHENODEV"drif">fschm9on/fschmd.d.c#L217" id="L2179eto ad.d.c>ded1ame="L268"> 9FSCHENODEV"drif">fschm9on/fschmd.d.c#L217" id="L2179e=fscd.d.c>dedref">fschmd_id);10ne">10s="drivers/hwmvers/hwmresurn -f="+code=fschmdENODEVass="sref">FSCHENODEV"drif">fschm9_update_ded.c#L217" id="L2179eck" ded.c>ded3ass="sref">buf)10f" >10n="dri">fschm9_update_ded.c#L217" id="L2179ee" cded.c>ded">watchdog_lock;10sre>10ridlcpuot;FSCHheader"driot;%d\n" "5"drivers/hwmon/vf26"> "522offses"L334" class"strchips"drivon/fschmd.c#L]dev;9FSCHadaNAME_SIZEc#L29I2C_FUNC_SMBUSNAME_SIZE class="strFSCHMD_REG_IDENT_2>ssi)f">fschm9_update_dedevice(dedlass="sref">ref)10f" >10n="dri">fschm9_update_dedevice(dedsref">driver<0ne">10fschm9_update_ded.c#L217" id="L2179es="sded.c>ded7">fschmd_probe,10"sr>102="dri}">fschm9on/fschmd.device(dedss="sref">data);10 cl>10n="drivers/hw9on/fschmd.device(ded9ref">fschmd_id,10ss=>10s="driversprobechips"drivon/fsdriversprobetspan class="strf26"> 3>etect"drieon/fschmd.c#L274" id="i2c_clilasspan class="stri2c_clilas"driv*md.c#L274" id="clilasspan class="strclilas"drilers/hw1d_update_d1vice( 31910ne">10nss="strf26"> 3>mi_de38" a hrid="ister, "5"drivers/hwmon/id="ister, "5ass="sref">FSCHi2c_boa5"drivers/hwmon/fschmdI2C_FUNC_SMBUS_BYTE_DATA>ssi))vers/h1d_update_d1vice(/* vonormal_i2c,10s=">10s3"drivers/hw1mon/fschmd1c#L217" id="L21710 2lass=1l10 *10ref">fschmd_ian>9 3#L338" ii2c_smbus_wf26"> 3#L3ass="sref">FSCHi2c_bog_triggera hremd.c#L274" id/sispan class="stri>ssi]v* 10f">fsch1mon/fschmd1c#L217" id="L21710 3lass=1l10 t103ame="L268"> ss="stssivPoseidonL29on/ing">&q,span class="stridlasity>ssivHereemL29on/ing">&q,span class="stridlasity>ssivScyllaL29on/ing">&q,sispan class="stri>ssi]v* 10f">fsch1m4n/fschmd1c.c#L217" id="L2179ee" cd1l10 u10schmd_driver = {1fschmd_id);10an class="stridlasity>ssivHeraclemL29on/ing">&q,span class="stridlasity>ssivHeimdallL29on/ing">&q,span class="stridlasity>ssivHademL29on/ing">&q,span class="stridlasity>ssivSyleumL29on/ing">&qstrshuffl=>&qu[3]v=mv 1,m0,v2m}f">fsch1d_update_d1vice(&qu[3]v=mv 1,m0,v2m}f">fsch1d6update_d1vevice(9fsch1m7update_d1v.c#L217" id="L2179es="sd1l10 v1lue for rps */3};10" n>10s4"drivers/hwmenummon/fschmd.c#L29chipsspan class="strchips"drivon/fschmd.c#LL29idspan class="st5"drivers/hwmon/fschmdaderass="sref">FSCHhss="stsi + 1] | ef="+code=fs="stsi + " id/sispan class="stri>ssi]v* 10f">fsch1m8update_d1vevice(data);10 cl>10n="drivers/h1mon/fschmd1c#L217" id="L21710 9lass=1l10  10name="L268"> ref">FSCHi2c_bog_triggera hremd.c#L274" idL29idspan class="skzallocty"drie37;d\n&qkzalloctspan izeofn class="strf26"> 3>etewf26"> 3#L338" ii2c_smbus_wf26"> 3#L3ass=)md.c#L29ispan claGFP_KERNEs>ssi =m-f="+codGFP_KERNEs class="strFSCHMD_REG_IDENT_2>ssi)f">fsch1mon/fschmd1c#L217" id="L217101class=1l10sr11name="L319"> r954an>10ass>10s="drg_triggera hremd.c#L274" id=="strFSCHMD_REG_IDENT_2>ssi)f">fsch1m_update_d1c#L217" id="L21710s1lass=1l10ne11me="L250"> 250};10ne">10s="drivers/hwmvers/MEMresurn -f="+code=fMEM" id/sispan class="stri>ssi]v* 10f">fsch1mon/fschmd1c#L217" id="L2171012lass=1l10la11ent *and* all10 cl>10n="drivers/h1on/fschmd.1#L336" id="L336"10s3lass=1l10 d11ef">update_lock;10="s>10"ead_et"i2c_clc#L338" ii2c_smbus_read_et"i2c_clc#L3="stri2c_smbus_read_byte_d, <"drie37;d\n"&qu)f">fscd114n/fschmd1c#L217" id="L2171014lass=1l10th11">watchdog_lock;10sre>10mutex_initri>ssi]v=mon/fschtex_init="stranameasspan class="sg_triggera hremd.c#L274" idaderass="sref">FSCHhct,mre_mes iggera hremd.c#ct,mre_mes " id=">, &qu)f">fscd11_update_d1#L336" id="L336"10s5lass=1l10ro11_data_list */10hdo>10mutex_initri>ssi]v=mon/fschtex_init="stranameasspan class="sg_triggera hremd.c#L274" idaderass="sref">FSCHhiwatchdogmes iggera hremd.c#iwatchdogmes " id=">, &qu)f">fscd116update_d1c#L217" id="L2171016lass=1l10as1="comment"> */rass="sref">FSCHNIT_LIST_HEAn/fschmd.c#L29WDHNIT_LIST_HEAn="stranameasspan class="sg_triggera hremd.c#L274" idaderass="sref">FSCHhlistri>ssi]v=mon/fslist" id=">, &qu)f">fscd117update_d1vice(FSCHhkan ri>ssi]v=mon/fskan " id=">, &qu)f">fscd118update_d1vice(9/* 298};10  n>10 ="dri9  watchdo usag;subtype" 19, the subtypedmi_vref = -1;10sre>10sr"dri/uot; t'subtype" 19, the subtype10 ="dri(10 * >10 ="driupdate_lock;10="s>10g_triggera hremd.c#L274" idaderass="sref">FSCHhbyte_d, <"drie37;d\n"FSCHadapter"driv=mschmd.c#L338" icl">, &qu)f">fscd1d_update_d1vice(watchdog_lock;10sre>10g_triggera hremd.c#L274" idaderass="sref">FSCHhkstrchips"drivon/fschmd.c#LL29idspan class="s"strchips"drivon/fschmd.c#L29kindspan class="strkinda hrf">fsch1d_update_d1vice(ref)10f" >10n="dri">fsch1d_update_d1vice( 334010ne">10"="dkstrchips"drivon/fschmd.c#LL2">, ssi++)=vers/hw1d_update_d1vice(kref);1/9/*(fschds },10ass>10"="driPoseidon has hardwiL29ctemp limits, fill      s/hwm/*fscsyl },10ass>10"="dri/*/*1ck;10sre>10g_triggera hremd.c#L274" idaderass="sref">FSCHhtemp_maxr"driot;%d\nemp_max22off id="70quot2an class="strfounda hr |= 0x08f">fsch1mon/fschmd1c#L217" id="L2171032lass=1l10/ 1tore functions1ck;10sre>10g_triggera hremd.c#L274" idaderass="sref">FSCHhtemp_maxr"driot;%d\nemp_max22off id="50quot2an class="strfounda hr |= 0x08f">fsch1mon/fschmd1c#L252" id="L2521033lass=1l10as1="comment"> */1ck;10sre>10g_triggera hremd.c#L274" idaderass="sref">FSCHhtemp_maxr"driot;%d\nemp_max22off2id="50quot2an class="strfounda hr |= 0x08f">fsch1m_update_d1vice(watchdog_lochmd_probe,10"sr>102="dri}">fsch1d_update_d1vice(ref)10f" >10n="dri">fsch1d_update_d1vice(9 39;s oltage scaling fp9comsschli     newachid ss"L29commlass>                 */(10ne">10"="dkstrchips"drivon/fschmd.c#LL2">, FSCHlength>kstrchips"drivon/fschmd.c#LLot; 3wvoidhmd.c#L274" id="326"> 3>mi_de38" span clilasspan class="sNULs>ssi =m-f="+codNULs" id=">, &qu)f">fscd1d_update_d1vice( 26810ne">10ne"drivers/hwmvewmon/fschmschmd.c#L338" iimi_vss== -1ot; 31910ne">10n>10ne"drivers/hwev&war= 1 <<m37;wev&war=="stranameasspan class="sadapter"driv=mschmd.c#L338" iclilasspan class="strcwev 1 <<m37;wev="clilasspan class="strclilas"drilers/hw1d_update_d1vice(/*131910ne">10n>an class="stridlasity>ssivCc38rn3]spat     * DMImde38"  routct  to read L29on/ing">&qlasspan class="strclilas"drilers/hw1don/fschmd1#L336" id="L336"1042lass=1l10cl1ss="sref">fschrc)131910ne">10n>an class="stridlasity>ssivBIOS scaling f, us roubuilL29 defaults\nL29on/ing">&q=">, &qu)f">fscd1on/fschmd.1#L336" id="L336"10"3lass=1l10ss1"sref">dmi_vref *10ss=>10"3"drivers/hwmon/fscwmon/fschmschmd.c#L338" iimi_vss="33">, &qu)f">fscd1o_update_d1vice(,10"sr>102="dri}">fsch1d_update_d1vice(fscscychmd_probe,10"sr>102="dri}">fsch1d_update_d1vice(buf)10f" >10n="dri">fsch1mon/fschmd1c#L217" id="L2171047lass=1l10as14ue for rps */10 va>10 7"driversRss> ospaome nevachidang roumlass> *s"L29commlass>                 */;10sre>10g_triggera hremd.c#L274" idaderass="sref">FSCHhrevisio= 1 <<m37;revisio=.c#LL29idspan class="strida hr[2] =mschmd.c#L338" ii2c_smbus_read_byte_d, &qu)f">fscd1mon/fschmd1c#L217" id="L21710"9lass=1l10as14name="L268"> ref">FSCHi2c_bog_triggera hremd.c#L274" idaderass="sref">FSCHhglobal_et promschmd.c#L338" iglobal_et prom.c#LL29idspan class="strida hr[2] =mschmd.c#L338" ii2c_smbus_read_byte_d, , &qu)f">fscd1mon/fschmd1c#L217" id="L217105class=1l102415name="L319"> 31910ne">10nf *10ss=>10"3"drivers/hwmontrclilas"drCONTROs>ssi =m-f="+codtrclilas"drCONTROs" id=">, &qu)f">fscd1mon/fschmd1c#L217" id="L2171051lass=1l10" 1ame="L250"> 25asspan class="sg_triggera hremd.c#L274" idaderass="sref">FSCHhiwatchdoget promschmd.c#L338" iiwatchdoget prom.c#LL29idspan class="strida hr[2] =mschmd.c#L338" ii2c_smbus_read_byte_d, , &qu)f">fscd1mon/fschmd1vice(fschmd_id);10ne">10nf *10ss=>10"3"drivers/hwmontrclilas"drWDOG_CONTROs>ssi =m-f="+codtrclilas"drWDOG_CONTROs22offck;10sre>10g_triggera hremd.c#L274" idaderass="sref">FSCHhkstrchips"drivon/fschmd.c#L]=">, &qu)f">fscd1mn/fschmd.1vice(update_lock;10="s>10g_triggera hremd.c#L274" idaderass="sref">FSCHhiwatchdog>fsc.c#L274" id="326iwatchdog>fsc..c#LL29idspan class="strida hr[2] =mschmd.c#L338" ii2c_smbus_read_byte_d, , &qu)f">fscd1m_update_d1vice( = {10ne">10nf *10ss=>10"3"drivers/hwmontrclilas"drWDOG_STATEc#L29I2C_FUNC_Strclilas"drWDOG_STATE22offck;10sre>10g_triggera hremd.c#L274" idaderass="sref">FSCHhkstrchips"drivon/fschmd.c#L]=">, &qu)f">fscd1m_update_d1vice(10hdo>10g_triggera hremd.c#L274" idaderass="sref">FSCHhiwatchdogy tesd, <"drie37;d\n&iwatchdogy tesd.c#LL29idspan class="strida hr[2] =mschmd.c#L338" ii2c_smbus_read_byte_d, , &qu)f">fscd1m_update_d1vice(driver = {10ne">10nf *10ss=>10"3"drivers/hwmontrclilas"drWDOG_PRESETc#L29I2C_FUNC_Strclilas"drWDOG_PRESET22offck;10sre>10g_triggera hremd.c#L274" idaderass="sref">FSCHhkstrchips"drivon/fschmd.c#L]=">, &qu)f">fscd1mon/fschmd1vice(10ent>10s="drivers/h1d_update_d1vice(;10sre>10erity"drie37;d\n&qeri" id34" class="limi_offster, cd, n cfiin>ssi =mschmd.c#fster, cd, n cfiin="stranameasspan class="sadapter"driv=mschmd.c#L338" iclilasspan class="strcwev 1 <<m37;wev="cli anameasspan class="sgev_attr_alert_lerchips"drivon/fsgev_attr_alert_ler" id=">, &qu)f">fscd1mon/fschmd1vice( 0ne">10ne"drivers/herity"drie37;d\n&qeri" id=="strFSCHMD_REG_IDENT_2>ssi)f">fsch1d_update_d1vice( 3191goto*/k;10sre>10exit_detac"driot;%d\n&exit_detac".c#L29kindspan class="strkinda hrf">fsch1d_update_d1vice(fsch1don/fschmd1#L336" id="L336"10s2lass=1l10sr16="comment">/*10las>10s="drivers/hwmfor ef="+code=fschmdispan class="stri>ssi =m0fv37;d\n"<3"drivers/hwmontrclilaNO_VOLT_SENSORSc#L29I2C_FUNC_StrclilaNO_VOLT_SENSORS22offck;10sre>10g_triggera hremd.c#L274" idaderass="sref">FSCHhkstrchips"drivon/fschmd.c#L]sispan class="stri>ssi <m3fv37;d\n" */1ck;10sre>10erity"drie37;d\n&qeri" id34" class="limi_offster, cd, n cfiin>ssi =mschmd.c#fster, cd, n cfiin="stranameasspan class="sadapter"driv=mschmd.c#L338" iclilasspan class="strcwev 1 <<m37;wev="cli = {10ne">10nf *10ss=>10"anameasspan class="s"> 3>miattrc#L274" id="326"> 3>miattr22offck;10sre>10="loffses>&qu[37;d\n&qdev;9&qu)f">fscd1d_update_d1vice(,10ne">10ne"drivers/herity"drie37;d\n&qeri" id=="strFSCHMD_REG_IDENT_2>ssi)f">fsch1d_update_d1vice(driver = {10ne">10ngoto*/k;10sre>10exit_detac"driot;%d\n&exit_detac".c#L29kindspan class="strkinda hrf">fsch1don/fschmd1vice(,10"sr>102="dri}">fsch1mon/fschmd1c#L217" id="L21710s8lass=1l10as16ss="sref">data);10 cl>10n="drivers/h1mon/fschmd1c#L252" id="L2521069lass=1l10ne1 name="L268"> 10las>10s="drivers/hwmfor ef="+code=fschmdispan class="stri>ssi =m0fv37;d\n"10las>10s="drtrclilaNO_TEMP_SENSORSc#L29I2C_FUNC_StrclilaNO_TEMP_SENSORS22offck;10sre>10g_triggera hremd.c#L274" idaderass="sref">FSCHhkstrchips"drivon/fschmd.c#L] * 4)sispan class="stri>ssi <m3fv37;d\n"fschmd_id);10/span>10 va>10 7"driversPoseidon doesn3]spat have TEMP_LIMITumlass> *s"L29commlass>                 *//*134010ne">10"="dkstrchips"drivon/fschmd.c#LL2">, ssi]v>="> 3>minemp_attrc#L274" id="326"> 3>minemp_attr22offck;10sre>10="loffses>&qu[37;d\n&qdev;9;9                 */fschrc)131910ne">10n>v;9ssi)f">fsch1d_update_d1vice(dmi_vref *10ss=>10"et pinue29kindspan class="strkinda hrf">fsch1d_update_d1vice( 33310ne">10n="dri">fsch1d_update_d1vice(,10ne">10ne"drivers/hkstrchips"drivon/fschmd.c#LL2">, driver = {10ne">10n0ne">10ne"drivers/hstri>ssi =m0fv37;d\n&qu#37; 4found=="strFSCHMD_REG_IDENT_2>ssi)f">fsch1don/fschmd1d.c#L217" id="L2179ts="sd1d.chd17ame="L336"> 336{10e" >10n0ne">10n>v;9FSCHhtemp_>fscumd.c#L274" id="ftemp_>fscum22offck;10sre>10="loffses>&qu[37;d\n& /ot;<"ss>                 */data);36{10e" >10n0ne">10n>v;9, &qu)f">fscd1don/fschmd1d.c#L217" id="L2179oet 2681ta);36{10e" >10n0ne">10n>v;9 33310ne">10n="dri">fsch18_update_d1device(data);;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;fck;10sre>10g_triggera hremd.c#L274" idaderass="sref">FSCHhkstrchips"drivon/fschmd.c#L]fck;10sre>10="loffses>&qu[37;d\n& /ot;=">, &qu)f">fscd18on/fschmd1d.c#L217" id="L2179 to ad1d.c>d18="comment">/*131910ne">10ne"drivers/hw_triggera hremd.c#L274" idaderass="sref">FSCHhtemp_>fscumd.c#L274" id="ftemp_>fscum22offck;10sre>10="loffses>&qu[37;d\n& /ot;ssi]v>=trclilaTEMP_DISABLEn/fschmd.c#L29WDtrclilaTEMP_DISABLEn" id=="strFSCHMD_REG_IDENT_2>ssi)f">fsch18on/fschmd1d.c#L217" id="L2179 =fscd1d.c>d1dref">fschmd_id);11111111111111111et pinue29kindspan class="strkinda hrf">fsch18_update_d1d.c#L217" id="L2179 ck" d1d.c>d18sref">dmi_vref *1chmd_probe,10"sr>102="dri}">fsch18_update_d1d.c#L217" id="L2179 e" cd1d.c>d18name="L333"> 33310ne">10n="dri">fsch18_update_d1device(d18I2C_CLASS_HWMON,10ef">102="driveerity"drie37;d\n&qeri" id34" class="limi_offster, cd, n cfiin>ssi =mschmd.c#fster, cd, n cfiin="stranameasspan class="sadapter"driv=mschmd.c#L338" iclilasspan class="strcwev 1 <<m37;wev="clid1dsref">driver = {1111111111111111111111111anameasspan class="s"> 3>minemp_attrc#L274" id="326"> 3>minemp_attr22offck;10sre>10="loffses>&qu[37;d\n&qdev;9&qu)f">fscd18on/fschmd1device( 336{10ne">10ne"drivers/herity"drie37;d\n&qeri" id=="strFSCHMD_REG_IDENT_2>ssi)f">fsch18on/fschmd1d.c#L217" id="L2179 e" nd1d.c>d1dass="sref">data);;;;;;;;;goto*/k;10sre>10exit_detac"driot;%d\n&exit_detac".c#L29kindspan class="strkinda hrf">fsch18on/fschmd1d.c#L217" id="L2179 etd1dname="L268"> chmd_probe,10"sr>102="dri}">fsch19_update_d1d.c#L217" id="L2179er prd1d.c>d19f">fschmd_data {10"sr>10"s"drivers/h19on/fschmd1d.c#L217" id="L2179eto ad1d.c>d1d1ame="L268"> 10las>10s="drivers/hwmfor ef="+code=fschmdispan class="stri>ssi =m0fv37;d\n"10las>10s="drtrclilaNO_FAN_SENSORSc#L29I2C_FUNC_StrclilaNO_FAN_SENSORS22offck;10sre>10g_triggera hremd.c#L274" idaderass="sref">FSCHhkstrchips"drivon/fschmd.c#L] * 5)sispan class="stri>ssi <m3fv37;d\n"fschmd_id);10/span>10 va>10 7"driversPoseidon doesn3]spat have a FAN_MINumlass> *                  */d19sref">dmi_vref *134010ne">10"="dkstrchips"drivon/fschmd.c#LL2">, d19schmd_driver = {10ne">10nf *1an>10ass>10s="dr"stcm=mschmd.c#L338" "stcm=="stri2c_smbus_read_"> 3>mifpa_attrc#L274" id="326"> 3>mifpa_attr22offck;10sre>10="loffses>&qu[37;d\n&qdev;9;9;9                 */(d19lass="sref">dev,10v" >10nfschmd_id);10/span>10 va>ridlasity>ssivpwm3_auto_m42 t1_pwmL29on/ing">&qHI2C_FUNC_SMBUS_BYTE_DATA>ssi))vers/h19_update_d1device(d19sref">driver = {111111111et pinue29kindspan class="strkinda hrf">fsch19_update_d1d.c#L217" id="L2179es="sd1d.c>d19gets its own)10ent>10s="drivers/h19on/fschmd1device(d19ass="sref">data);0ne">10ne"drivers/hkstrchips"drivon/fschmd.c#LL2">,  2681ta);0ne">10ne"drivers/hstri>ssi =m0fv37;d\n&qu#37; 5found=="strFSCHMD_REG_IDENT_2>ssi)f">fsch2d_update_d2vice( 31910ne">10nd);10k;10sre>10g_triggera hremd.c#L274" idaderass="sref">FSCHhfpa_>fscumd.c#L274" id="ffpa_>fscum22offck;10sre>10="loffses>&qu[37;d\n& /o5;<"ss>                 */(/*131910ne">10nd);10k;10sre>10trida hr[2] =mschmd.c#L338" ii2c_smbus_read_byte_d, , &qu)f">fscd2mon/fschmd2c#L217" id="L21710 2lass=2l10 *20ref">fschmd_id);10ne">10nf *10ss=>10"d);10k;10sre>10trclilas"drFAN_STATEc#L29I2C_FUNC_Strclilas"drFAN_STATEets its own)10ent>10s="drivers/h2mon/fschmd2c#L217" id="L21710 3lass=2l10 t20sref">dmi_vref *10ss=>10"""""""""""""""""""""""""fck;10sre>10g_triggera hremd.c#L274" idaderass="sref">FSCHhkstrchips"drivon/fschmd.c#L]fck;10sre>10="loffses>&qu[37;d\n& /o5;=">, &qu)f">fscd2m4n/fschmd2c.c#L217" id="L2179ee" cd2l10 u20schmd_driver = {1fschmd_i0ne">10ne"drivers/hw_triggera hremd.c#L274" idaderass="sref">FSCHhfpa_>fscumd.c#L274" id="ffpa_>fscum22offck;10sre>10="loffses>&qu[37;d\n& /o5;ssi]v>=trclilaFAN_DISABLEn/fschmd.c#L29WDtrclilaFAN_DISABLEn" id=="strFSCHMD_REG_IDENT_2>ssi)f">fsch2d_update_d2vice(dev,10v" >10nfschmd_iet pinue29kindspan class="strkinda hrf">fsch2d6update_d2vevice(driver = {1chmd_probe,10"sr>102="dri}">fsch2m7update_d2v.c#L217" id="L2179es="sd2l10 v20gets its own)10ent>10s="drivers/h2m8update_d2vevice(ssi]v>=erity"drie37;d\n&qeri" id34" class="limi_offster, cd, n cfiin>ssi =mschmd.c#fster, cd, n cfiin="stranameasspan class="sadapter"driv=mschmd.c#L338" iclilasspan class="strcwev 1 <<m37;wev="cli 2681ta);36{10e" >10nanameasspan class="s"> 3>mifpa_attrc#L274" id="326"> 3>mifpa_attr22offck;10sre>10="loffses>&qu[37;d\n&qdev;9&qu)f">fscd2mon/fschmd2c#L217" id="L217101class=2l10sr21name="L319"> 31910ne">10ne"drivers/herity"drie37;d\n&qeri" id=="strFSCHMD_REG_IDENT_2>ssi)f">fsch2m_update_d2c#L217" id="L21710s1lass=2l10ne21me="L250"> 250};111111111goto*/k;10sre>10exit_detac"driot;%d\n&exit_detac".c#L29kindspan class="strkinda hrf">fsch2mon/fschmd2c#L217" id="L2171012lass=2l10la21ref">fschmd_ichmd_probe,10"sr>102="dri}">fsch2on/fschmd.2#L336" id="L336"10s3lass=2l10 d213ass="sref">buf)10f" >10n="dri">fsch214n/fschmd2c#L217" id="L2171014lass=2l10th21">watchdog_lock;10sre>10w_triggera hremd.c#L274" idaderass="sref">FSCHh" >10_wev 1 <<m37;" >10_wev" id34" class="limi_of" >10_wever, mlass> * 1 <<m37;" >10_wever, mlass> *="stranameasspan class="sadapter"driv=mschmd.c#L338" iclilasspan class="strcwev 1 <<m37;wev="cl=">, &qu)f">fscd2m_update_d2#L336" id="L336"10s5lass=2l10ro21_data_list */0ne">10ne"drivers/hIS_ERRvschmd.c#L338" IS_ERR="stri2c_smbus_read_w_triggera hremd.c#L274" idaderass="sref">FSCHh" >10_wev 1 <<m37;" >10_wev" id)ot;driver = {10ss=>102="driveerity"drie37;d\n&qeri" id34" class="limi_ofPTR_ERRvschmd.c#L338" PTR_ERR="stri2c_smbus_read_w_triggera hremd.c#L274" idaderass="sref">FSCHh" >10_wev 1 <<m37;" >10_wev" id)">, &qu)f">fscd2m7update_d2vice(,10uot>1027"driver_triggera hremd.c#L274" idaderass="sref">FSCHh" >10_wev 1 <<m37;" >10_wev" id34" class="limi_ofNULs>ssi =m-f="+codNULs" id">, &qu)f">fscd2m8update_d2vice(;10sre>10exit_detac"driot;%d\n&exit_detac".c#L29kindspan class="strkinda hrf">fsch2mon/fschmd2c#L217" id="L21710s9lass=2l10at21name="L268"> chmd_probe,10"sr>102="dri}">fsch2mon/fschmd2c#L217" id="L217102class=2l10ne22f">fschmd_data {10"sr>10"s"drivers/h2m_update_d2c#L252" id="L25210n1lass=2l10la22s="sref">client;10cla>10"="driver9commlass>                 */(10 * >10 ="driL274_chtex mes  early so*asat  watchdo_open() cannot9commlass>                 */uature */10 * >10 ="dri *() has n>1pleted, but  e3]spave not yet adder" ommlass>                 */(watltage */10 t">10 ="dri watchdo_L274_list (    set ass>Lefault timeout)subtype" 19, the subtype(10 * >10 ="dri( */rass="sref">FSCchtex_mes iggera hremd.c#chtex_mes ="stranameasspan class="s watchdo_L274_chtexiggera hremd.c# watchdo_L274_chtex" id)">, &qu)f">fscd2d_update_d2vice(kre10las>10s="drivers/hwmfor ef="+code=fschmdispan class="stri>ssi =m0fv37;d\n"<3"drivers/hwmonARRAY_SIZEc#L29I2C_FUNC_SARRAY_SIZE="stri2c_smbus_read_watchdog_minorivschmd.c#L338" iwatchdogminori22of)sispan class="stri>ssi <m3fv37;d\n" * our  watchdo partspect &# Idlasify the chip */ 2681n>10ass>10s="dr"nprintn/fschmschmd.c#L"nprintn="stri2c_smbus_read_w_triggera hremd.c#L274" idaderass="sref">FSCHhiwatchdog79eechips"drivon/fsiwatchdog79ee="cli  izeofni2c_smbus_read_w_triggera hremd.c#L274" idaderass="sref">FSCHhiwatchdog79eechips"drivon/fsiwatchdog79ee="cl)i 31910ne">10n>/span>10 va>ridlasity>ssiviwatchdou#37;cL29on/ing">&q,san>10las>10s="drivers/hwmfor ef="+code=und= ?9idspan class="strida hr[ hr[3]spaname="L :sandspan class="strida hr[ h[3]spaname="L +ispan class="stri>ssi <m3fv37;d\n&))">, &qu)f">fscd2on/fschmd.2#L336" id="L336"1031lass=2l10la2s="comment">/*1ck;10sre>10g_triggera hremd.c#L274" idaderass="sref">FSCHhiwatchdogmiscwev 1 <<m37;iwatchdogmiscwev" iddev;9FSCHhiwatchdog79eechips"drivon/fsiwatchdog79ee="cl">, &qu)f">fscd2oon/fschmd2c#L217" id="L2171032lass=2l10/ 2tore functions1ck;10sre>10g_triggera hremd.c#L274" idaderass="sref">FSCHhiwatchdogmiscwev 1 <<m37;iwatchdogmiscwev" iddev;9, &qu)f">fscd2on/fschmd.2c#L252" id="L2521033lass=2l10as2="comment"> */1ck;10sre>10g_triggera hremd.c#L274" idaderass="sref">FSCHhiwatchdogmiscwev 1 <<m37;iwatchdogmiscwev" iddev;9;10sre>10="loffses>&qu[37;d\n&q">, &qu)f">fscd2o4n/fschmd2vice( = {10ss=>102="driveerity"drie37;d\n&qeri" id34" class="limi_ofmisc mlass> *iggera hremd.c#cisc mlass> *="stranameasspan class="sg_triggera hremd.c#L274" idaderass="sref">FSCHhiwatchdogmiscwev 1 <<m37;iwatchdogmiscwev" id)">, &qu)f">fscd2o_update_d2vice(,10ne">10ne"drivers/herity"drie37;d\n&qeri" ids== ->10ne"drivers/hEBUSYty"drie37;d\n&qEBUSY" id=="strFSCHMD_REG_IDENT_2>ssi)f">fsch2d_update_d2vice(driver = {111111111et pinue29kindspan class="strkinda hrf">fsch2o_update_d2vice( 336{10ne">10ne"drivers/herity"drie37;d\n&qeri" id=t;FSCHhiwatchdogmiscwev 1 <<m37;iwatchdogmiscwev" iddev;9fsch2d_update_d2vice( 26811ck;10sre>10gev_erity"drie37;d\n&qgev_eri="stranameasspan class="sadapter"driv=mschmd.c#L338" iclilasspan class="strcwev 1 <<m37;wev="cli 31910ne">10n1c/span>10 va>ridlasity>ssivRsass> * rou watchdo &q,sp10ne"drivers/herity"drie37;d\n&qeri" id=/sispan class="stri>ssi]v* 10f">fsch2d_update_d2vice(/*13191break/sispan class="stri>ssi]v* 10f">fsch2don/fschmd2#L336" id="L336"1042lass=2l10cl2ss="sref">fschrc)1chmd_probe,10"sr>102="dri}">fsch2on/fschmd.2#L336" id="L336"10"3lass=2l10ss243ass="sref">buf)10f" >10n="dri">fsch2o_update_d2vice(FSCHhlistri>ssi]v=mon/fslist" idi anameasspan class="s watchdo_L274_listiggera hremd.c# watchdo_L274_list" id=">, &qu)f">fscd2d_update_d2vice(,10ef">102="driveiwatchdog>et_timeoutiggera hremd.c# watchdo_>et_timeout="stri2c_smbus_read_w_triggera hremd.c#L274" id, 60=">, &qu)f">fscd2d_update_d2vice(driver = {10ss=>102="drivegev_"rd_info"driv*md.c#gev_"rd_="stranameasspan class="sadapter"driv=mschmd.c#L338" iclilasspan class="strcwev 1 <<m37;wev="cli 336{10e" >10nc/span>10 va>ridlasity>ssivRsass> *edu watchdo &q,1ck;10sre>10watchdog_minorivschmd.c#L338" iwatchdogminori22offck;10sre>10="loffses>&qu[37;d\n&q=">, &qu)f">fscd2d_update_d2c#L217" id="L21710"9lass=2l10as24name="L268"> 2681break/sispan class="stri>ssi]v* 10f">fsch2mon/fschmd2c#L217" id="L217105class=2l102425name="L319"> chmd_probe,10"sr>102="dri}">fsch2mon/fschmd2c#L217" id="L2171051lass=2l10" 2ame="L250"> 250ne">10ne"drivers/hstri>ssi =m0fv37;d\n&q2">, fschmd_id);1ck;10sre>10g_triggera hremd.c#L274" idaderass="sref">FSCHhiwatchdogmiscwev 1 <<m37;iwatchdogmiscwev" iddev;9fsch2mn/fschmd.2vice( */1ck;10sre>10gev&war= 1 <<m37;wev&war=="stranameasspan class="sadapter"driv=mschmd.c#L338" iclilasspan class="strcwev 1 <<m37;wev="clilasspan class="strclilas"drilers/hw2m_update_d2vice( = {10ne">10nf>an class="stridlasity>ssivCc38rn3]spat mlass> *  watchdo &q=">, &qu)f">fscd2m_update_d2vice(fscscychmd_probe,10"sr>102="dri}">fsch2m_update_d2vice( */rass="sref">FSCchtex_unmes iggera hremd.c#chtex_unmes ="stranameasspan class="s watchdo_L274_chtexiggera hremd.c# watchdo_L274_chtex" id)">, &qu)f">fscd2mon/fschmd2vice(10ent>10s="drivers/h2d_update_d2vice(;10sre>10gev_"rd_info"driv*md.c#gev_"rd_="stranameasspan class="sadapter"driv=mschmd.c#L338" iclilasspan class="strcwev 1 <<m37;wev="clif>an class="stridlasity>ssivDetecteduFSCqu#37;shid s, revisio=:qu#37;d\nL29on/ing">&q, 2681n>10ass>10s="dr059livschmd.c#L338" 059li22offck;10sre>10g_triggera hremd.c#L274" idaderass="sref">FSCHhkstrchips"drivon/fschmd.c#L], (int)*/k;10sre>10g_triggera hremd.c#L274" idaderass="sref">FSCHhrevisio= 1 <<m37;revisio=.c#L)">, &qu)f">fscd2d_update_d2vice(fschmd_data {10"sr>10"s"drivers/h2d_update_d2vice( 250ne">10fsch2don/fschmd2#L336" id="L336"10s2lass=2l10sr26ent *and* all10 cl>10n="drivers/h2mon/fschmd2c#L252" id="L2521063lass=2l10s=26"comm/k;10sre>10exit_detac"driot;%d\n&exit_detac".c#L:and* all10 cl>10n="drivers/h2m_update_d2#L336" id="L336"1064lass=2l10" 26">watchdog_lock;10sre>10"> 3>miremovechips"drivon/fs"> 3>miremove="stri2c_smbus_read_adapter"driv=mschmd.c#L338" icl)sis/span>10 va>10 7"driverswill also free L274i                 */(10p10ne"drivers/herity"drie37;d\n&qeri" id/sispan class="stri>ssi]v* 10f">fsch2d_update_d2vice(,10"sr>102="dri}">fsch2don/fschmd2vice(10ent>10s="drivers/h2mon/fschmd2c#L217" id="L21710s8lass=2l10as26ss="s>fscic intock;10sre>10"> 3>miremovechips"drivon/fs"> 3>miremove="stran>910ne"drivers/hs2c_adapter"driv=mschmd.cs2c_adapte2C_CL*i2c_smbus_read_adapter"driv=mschmd.c#L338" icl)its own)10ent>10s="drivers/h2mon/fschmd2c#L252" id="L2521069lass=2l10ne2 name=;fschmd_ian>910ne"drivers/h"> 3>mig_triggera hremd.c#"> 3>mig_tr2C_CL*i2c_smbus_read_g_triggera hremd.c#L274" idL29idspan class="stridget"i2c_clc#L338" ii2c_smbus_readget"i2c_clc#L3="stri2c_smbus_read_byte_d, <"drie37;d\n", &qu)f">fscd2mon/fschmd2c#L217" id="L2171071lass=2l10cl27="comment">/*intock;10sre>10stri>ssi =m0fv37;d\n&">, &qu)f">fscd2mon/fschmd2c#L217" id="L2171072lass=2l10ss27ent *and* all10 cl>10n="drivers/h2d_update_d2vice(dmi_vres/span>10 va>10 7"driversUnmlass> * ass> watchdo (if mlass> *ed)"L29commlass>                 */(watchdog_lo0ne">10ne"drivers/hw_triggera hremd.c#L274" idaderass="sref">FSCHhiwatchdogmiscwev 1 <<m37;iwatchdogmiscwev" iddev;9 *iggera hremd.c#cisc demlass> *="stranameasspan class="sg_triggera hremd.c#L274" idaderass="sref">FSCHhiwatchdogmiscwev 1 <<m37;iwatchdogmiscwev" id)">, &qu)f">fscd2d_update_d2device(driver = {10ne">10ne"drivers/hw_triggera hremd.c#L274" idaderass="sref">FSCHhiwatchdogis_open 1 <<m37;iwatchdogis_openadap=t; 336{10e" >10nck;10sre>10gev&war= 1 <<m37;wev&war=="stranameasspan class="sadapter"driv=mschmd.c#L338" iclilasspan class="strcwev 1 <<m37;wev="clilasspan class="strclilas"drilers/hw2mon/fschmd2d.c#L217" id="L2179tgdata);36{10e" >10n>an class="stridlasity>ssivrea /uot; watchdo open! L29on/ing">&qlasspan class="strclilas"drilers/hw2don/fschmd2d.c#L217" id="L2179oet 2681ta);36{1>an class="stridlasity>ssivStopp rou watchdo.\nL29on/ing">&q=">, &qu)f">fscd28_update_d2device(data);;;;;;;;;0ef">102="driveiwatchdog>topiggera hremd.c# watchdo_>top="stri2c_smbus_read_w_triggera hremd.c#L274" id=">, &qu)f">fscd28on/fschmd2d.c#L217" id="L2179 to ad2d.c>d28="comment">/*1chmd_probe,10"sr>102="dri}">fsch28on/fschmd2d.c#L217" id="L2179 =fscd2d.c>d2dref">fschmd_id);1rass="sref">FSCchtex_mes iggera hremd.c#chtex_mes ="stranameasspan class="s watchdo_L274_chtexiggera hremd.c# watchdo_L274_chtex" id)">, &qu)f">fscd28_update_d2d.c#L217" id="L2179 ck" d2d.c>d28sref">dmi_vref *1p10ne"drivers/hlist_demschmd.c#L338" ilist_dem="stranameasspan class="sg_triggera hremd.c#L274" idaderass="sref">FSCHhlistri>ssi]v=mon/fslist" id)">, &qu)f">fscd28_update_d2d.c#L217" id="L2179 e" cd2d.c>d28      syl AUTOP1 liv1p10ne"drivers/hchtex_unmes iggera hremd.c#chtex_unmes ="stranameasspan class="s watchdo_L274_chtexiggera hremd.c# watchdo_L274_chtex" id)">, &qu)f">fscd28_update_d2device(d28I2C_CLASS_HWMON,10/span>10 va>10 7"driversTell      watchdo                  */d2dsref">driver = {1rass="sref">FSCchtex_mes iggera hremd.c#chtex_mes ="stranameasspan class="sw_triggera hremd.c#L274" idaderass="sref">FSCHhiwatchdogmes iggera hremd.c#iwatchdogmes " id)">, &qu)f">fscd28on/fschmd2device( 336{1asspan class="sw_triggera hremd.c#L274" idaderass="sref">FSCHhadapter"driv=mschmd.c#L338" icl34" class="limi_ofNULs>ssi =m-f="+codNULs" id">, &qu)f">fscd28on/fschmd2d.c#L217" id="L2179 e" nd2d.c>d2dass="sref">data);p10ne"drivers/hchtex_unmes iggera hremd.c#chtex_unmes ="stranameasspan class="sw_triggera hremd.c#L274" idaderass="sref">FSCHhiwatchdogmes iggera hremd.c#iwatchdogmes " id)">, &qu)f">fscd28on/fschmd2d.c#L217" id="L2179 etd2dname="L268"> chmd_probe,10"sr>102="dri}">fsch29_update_d2d.c#L217" id="L2179er prd2d.c>d29f">fschmd_data {10"sr>10"s"drivers/h29on/fschmd2d.c#L217" id="L2179eto ad2d.c>d29s="sref">client;10cla>10"="driver9commlass>                 */ *ed ospcase  e3]spar  /alled read "> 3>migetect9commlass>                 */d29ef">uature */10 * >10 ="dri * re erroradommlass>                 */d29">watltage */10 t">10 ="dri                 */(d29_data_list */0ne">10ne"drivers/hw_triggera hremd.c#L274" idaderass="sref">FSCHh" >10_wev 1 <<m37;" >10_wev" id)ss>                 */(d29sref">driver = {1ss="sref">FSCHh" >10_wever, unmlass> * 1 <<m37;" >10_wever, unmlass> *="stri2c_smbus_read_w_triggera hremd.c#L274" idaderass="sref">FSCHh" >10_wev 1 <<m37;" >10_wev" id)">, &qu)f">fscd29_update_d2d.c#L217" id="L2179es="sd2d.c>d29gets its own)10ent>10s="drivers/h29on/fschmd2device(d29ol register */k;10sre>10gever, mlmovecfiin>ssi =mschmd.c#fster, mlmovecfiin="stranameasspan class="sadapter"driv=mschmd.c#L338" iclilasspan class="strcwev 1 <<m37;wev="clifanameasspan class="sgev_attr_alert_lerchips"drivon/fsgev_attr_alert_ler" id=">, &qu)f">fscd29on/fschmd2device(d29name="L268"> 10las>10s="drivers/hwmfor ef="+code=fschmdispan class="stri>ssi =m0fv37;d\n"10las>10s="drtrclilaNO_VOLT_SENSORSc#L29I2C_FUNC_StrclilaNO_VOLT_SENSORS22offck;10sre>10g_triggera hremd.c#L274" idaderass="sref">FSCHhkstrchips"drivon/fschmd.c#L])sispan class="stri>ssi <m3fv37;d\n&quo>, &qu)f">fscd3d_update_d3vice( 3191/k;10sre>10gever, mlmovecfiin>ssi =mschmd.c#fster, mlmovecfiin="stranameasspan class="sadapter"driv=mschmd.c#L338" iclilasspan class="strcwev 1 <<m37;wev="clifanameasspan class="s"> 3>miattrc#L274" id="326"> 3>miattr22offck;10sre>10="loffses>&qu[37;d\n&qdev;9&qu)f">fscd3d_update_d3vice(/*10las>10s="drivers/hwmfor ef="+code=fschmdispan class="stri>ssi =m0fv37;d\n"10las>10s="drtrclilaNO_TEMP_SENSORSc#L29I2C_FUNC_StrclilaNO_TEMP_SENSORS22offck;10sre>10g_triggera hremd.c#L274" idaderass="sref">FSCHhkstrchips"drivon/fschmd.c#L] * 4)sispan class="stri>ssi <m3fv37;d\n&quo>, &qu)f">fscd3d2update_d3v.c#L217" id="L2179e=fscd3l10 *30ref">fschmd_id);1/k;10sre>10gever, mlmovecfiin>ssi =mschmd.c#fster, mlmovecfiin="stranameasspan class="sadapter"driv=mschmd.c#L338" iclilasspan class="strcwev 1 <<m37;wev="cli>, &qu)f">fscd3d3update_d3v.c#L217" id="L2179eck" d3l10 t30sref">dmi_vref *10ss=>10"""""""""""""""""anameasspan class="s"> 3>minemp_attrc#L274" id="326"> 3>minemp_attr22offck;10sre>10="loffses>&qu[37;d\n&qdev;9&qu)f">fscd3m4n/fschmd3c.c#L217" id="L2179ee" cd3l10 u30schmd_driver<10las>10s="drivers/hwmfor ef="+code=fschmdispan class="stri>ssi =m0fv37;d\n"10las>10s="drtrclilaNO_FAN_SENSORSc#L29I2C_FUNC_StrclilaNO_FAN_SENSORS22offck;10sre>10g_triggera hremd.c#L274" idaderass="sref">FSCHhkstrchips"drivon/fschmd.c#L] * 5)sispan class="stri>ssi <m3fv37;d\n&quo>, &qu)f">fscd3m5n/fschmd3cevice(dev,1/k;10sre>10gever, mlmovecfiin>ssi =mschmd.c#fster, mlmovecfiin="stranameasspan class="sadapter"driv=mschmd.c#L338" iclilasspan class="strcwev 1 <<m37;wev="cli>, &qu)f">fscd3d6n/fschmd3cevice(driver = {10ss=>10"""""""""""""""""anameasspan class="s"> 3>mifpa_attrc#L274" id="326"> 3>mifpa_attr22offck;10sre>10="loffses>&qu[37;d\n&qdev;9&qu)f">fscd3m7update_d3v.c#L217" id="L2179es="sd3l10 v30gets its own)10ent>10s="drivers/h3m8update_d3vevice(;10sre>10chtex_mes iggera hremd.c#chtex_mes ="stranameasspan class="s watchdo_L274_chtexiggera hremd.c# watchdo_L274_chtex" id)">, &qu)f">fscd3mon/fschmd3c#L217" id="L21710 9lass=3l10  30name="L268"> ss="sref">FSCHhksre_putiggera hremd.c#ksre_put="stranameasspan class="sw_triggera hremd.c#L274" idaderass="sref">FSCHhksreiggera hremd.c#ksre="clifck;10sre>10"> 3>mireleas, mlsourclivschmd.c#L338" "> 3>mireleas, mlsourcli" id)">, &qu)f">fscd3mon/fschmd3c#L217" id="L217101class=3l10sr31name="L319"> p10ne"drivers/hchtex_unmes iggera hremd.c#chtex_unmes ="stranameasspan class="s watchdo_L274_chtexiggera hremd.c# watchdo_L274_chtex" id)">, &qu)f">fscd3m_update_d3c#L217" id="L21710s1lass=3l10ne31sref"9kindspan class="strkinda hrf">fsch3mon/fschmd3c#L217" id="L2171012lass=3l10la31ref">fschmd_i0ne">10fsch3on/fschmd.3#L336" id="L336"10s3lass=3l10 d313ass=chmd_probe,10"sr>102="dri}">fsch314n/fschmd3c#L217" id="L2171014lass=3l10th31name="L333"> 33310ne">10n="dri">fsch3m_update_d3#L336" id="L336"10s5lass=3l10ro31_data>fscic an>910ne"drivers/h"> 3>mig_triggera hremd.c#"> 3>mig_tr2C_CL*i2c_smbus_read_"> 3>miupd n cfster,iggera hremd.c#"> 3>miupd n cfster,="stran>910ne"drivers/hfster,iggera hremd.c#fster,="stL*i2c_smbus_read_gev 1 <<m37;wev="cl="L333"> 33310ne">10n="dri">fsch3m6n/fschmd3c#L217" id="L2171016lass=3l10as31sref";, &qu)f">fscd3m8update_d3vice(910ne"drivers/h"> 3>mig_triggera hremd.c#"> 3>mig_tr2C_CL*i2c_smbus_read_g_triggera hremd.c#L274" idL29idspan class="stridget"i2c_clc#L338" ii2c_smbus_readget"i2c_clc#L3="stri2c_smbus_read_byte_d, <"drie37;d\n", &qu)f">fscd3mon/fschmd3c#L217" id="L21710s9lass=3l10at31name="L268"> intock;10sre>10stri>ssi =m0fv37;d\n&">, &qu)f">fscd3mon/fschmd3c#L217" id="L217102class=3l10ne32f">fschmd_data {10"sr>10"s"drivers/h3m_update_d3c#L252" id="L25210n1lass=3l10la32s="sref">clienass="sref">FSCchtex_mes iggera hremd.c#chtex_mes ="stranameasspan class="sw_triggera hremd.c#L274" idaderass="sref">FSCHhupd n cmes iggera hremd.c#upd n cmes /scl)">, &qu)f">fscd3mon/fschmd3vice(10 cl>10n="drivers/h3mn/fschmd.3c#L252" id="L25210n3lass=3l10vi32sref">dmi_vre0ne">10ne"drivers/htime_af> *r"driv=mschmd.ctime_af> *="stri2c_smbus_read_jiffilivschmd.c#L338" jiffili="clifck;10sre>10g_triggera hremd.c#L274" idaderass="sref">FSCHhlastiupd n rchips"drivon/fslastiupd n rref">+ 2 * ss="sref">FSCHhHZchips"drivon/fsHZ/scl) ||1an>10ass>10s="drg_triggera hremd.c#L274" idaderass="sref">FSCHhvalirchips"drivon/fsvalir/scl) ; 33310ne">10n="dri">fsch3d_update_d3vice(dev,110las>10s="drivers/hwmfor ef="+code=fschmdispan class="stri>ssi =m0fv37;d\n"<3"drivers/hwmontrclilaNO_TEMP_SENSORSc#L29I2C_FUNC_StrclilaNO_TEMP_SENSORS22offck;10sre>10g_triggera hremd.c#L274" idaderass="sref">FSCHhkstrchips"drivon/fschmd.c#L]sispan class="stri>ssi <m3fv37;d\n"driver = {10ss=>10"ck;10sre>10g_triggera hremd.c#L274" idaderass="sref">FSCHhnemp_acer"driv=mschmd.ctemp_ace22offck;10sre>10="loffses>&qu[37;d\n&qL29idspan class="strida hr[2] =mschmd.c#L338" ii2c_smbus_read_byte_d, , &qu)f">fscd3d_update_d3vice( 336{10e" >10n0ne">10n0ss=>10"ck;10sre>10trclilas"drTEMP_ACTc#L29I2C_FUNC_Strclilas"drTEMP_ACT22offck;10sre>10g_triggera hremd.c#L274" idaderass="sref">FSCHhkstrchips"drivon/fschmd.c#L]fck;10sre>10="loffses>&qu[37;d\n&q=">, &qu)f">fscd3d_update_d3vice(10"ck;10sre>10g_triggera hremd.c#L274" idaderass="sref">FSCHhnemp_>fscumd.c#L274" id="ftemp_>fscum22offck;10sre>10="loffses>&qu[37;d\n&qL29idspan class="strida hr[2] =mschmd.c#L338" ii2c_smbus_read_byte_d, , &qu)f">fscd3don/fschmd3c#L217" id="L2171029lass=3l10e"32name="L268"> 26810e" >10n0ne">10n0ss=>10"ck;10sre>10trclilas"drTEMP_STATEc#L29I2C_FUNC_Strclilas"drTEMP_STATEame=fck;10sre>10g_triggera hremd.c#L274" idaderass="sref">FSCHhkstrchips"drivon/fschmd.c#L]fck;10sre>10="loffses>&qu[37;d\n&q=">, &qu)f">fscd3mon/fschmd3c#L217" id="L217103class=3l10ne33f">fschmd_data {10"sr>10"s"drivers/h3on/fschmd.3#L336" id="L336"1031lass=3l10la3s="comment">/*10ss=>10"c/span>10 va>10 7"driversThe "> pos doesn3]spat have TEMP_LIMIT mlass> *s"L29commlass>                 */10ne"drivers/htrclilas"drTEMP_LIMITc#L29I2C_FUNC_Strclilas"drTEMP_LIMITame=fck;10sre>10g_triggera hremd.c#L274" idaderass="sref">FSCHhkstrchips"drivon/fschmd.c#L]fck;10sre>10="loffses>&qu[37;d\n&q=ss>                 */ */13300 };10ss=>10"ck;10sre>10g_triggera hremd.c#L274" idaderass="sref">FSCHhnemp_maxiggera hremd.c#nemp_max22offck;10sre>10="loffses>&qu[37;d\n&qL29idspan class="strida hr[2] =mschmd.c#L338" ii2c_smbus_read_byte_d, ;10sre>10byte_d, <"drie37;d\n", &qu)f">fscd3o_update_d3vice(,113300 };10ss=>10"ck;10sre>10trclilas"drTEMP_LIMITc#L29I2C_FUNC_Strclilas"drTEMP_LIMITame=fck;10sre>10g_triggera hremd.c#L274" idaderass="sref">FSCHhkstrchips"drivon/fschmd.c#L]fck;10sre>10="loffses>&qu[37;d\n&q=">, &qu)f">fscd3m_update_d3vice(, &qu)f">fscd3m_update_d3vice( 336{10ss=>10"ct;10cla>10"="driver9commlass>                 */(10 t">10 ="dri                 */(10 t">10 ="dri                 */(10 t">10 ="dri                 */(/*131910ne"ri2c_smbus_read_w_triggera hremd.c#L274" idaderass="sref">FSCHhnemp_>fscumd.c#L274" id="ftemp_>fscum22offck;10sre>10="loffses>&qu[37;d\n&qLlass="stri>ssi]v>=trclilaTEMP_ALARM_MASKc#L29I2C_FUNC_StrclilaTEMP_ALARM_MASK/scl) ="ss>                 */fschrc)1111111111111111111111111stri>ssi]v>=trclilaTEMP_ALARM_MASKc#L29I2C_FUNC_StrclilaTEMP_ALARM_MASK/sclspan class=ss>                 */dmi_vref *10ss=>10"""""""""""""""""ck;10sre>10g_triggera hremd.c#L274" idaderass="sref">FSCHhnemp_acer"driv=mschmd.ctemp_ace22offck;10sre>10="loffses>&qu[37;d\n&qLuot;<3"drivers/hwmong_triggera hremd.c#L274" idaderass="sref">FSCHhnemp_maxiggera hremd.c#nemp_max22offck;10sre>10="loffses>&qu[37;d\n&q=ss>                 */(;10sre>10read_byte_wrin cchmd.c#L338" ii2c_smbus_read_byte_wrin cchmd.c#L3="stri2c_smbus_read_byte_d, <"drie37;d\n", &qu)f">fscd3d_update_d3vice(,1111111111111111111111111stri>ssi]v>=trclilas"drTEMP_STATEc#L29I2C_FUNC_Strclilas"drTEMP_STATEame=fck;10sre>10g_triggera hremd.c#L274" idaderass="sref">FSCHhkstrchips"drivon/fschmd.c#L]fck;10sre>10="loffses>&qu[37;d\n&qi>, &qu)f">fscd3d_update_d3vice(driver = {10ss=>10"""""""""""""""""ck;10sre>10g_triggera hremd.c#L274" idaderass="sref">FSCHhnemp_>fscumd.c#L274" id="ftemp_>fscum22offck;10sre>10="loffses>&qu[37;d\n&q=">, &qu)f">fscd3d_update_d3c#L217" id="L2171047lass=3l10as34ame="L336"> 336{1chmd_probe,10"sr>102="dri}">fsch3d_update_d3c#L217" id="L21710"8lass=3l10as3414200hmd_probe,10"sr>102="dri}">fsch3don/fschmd3c#L217" id="L21710"9lass=3l10as34name="L268"> 268110las>10s="drivers/hwmfor ef="+code=fschmdispan class="stri>ssi =m0fv37;d\n"<3"drivers/hwmontrclilaNO_FAN_SENSORSc#L29I2C_FUNC_StrclilaNO_FAN_SENSORS22offck;10sre>10g_triggera hremd.c#L274" idaderass="sref">FSCHhkstrchips"drivon/fschmd.c#L]sispan class="stri>ssi <m3fv37;d\n"data);;;;;;;;;0ef">102="driveg_triggera hremd.c#L274" idaderass="sref">FSCHhfpa_acer"driv=mschmd.cfpa_ace22offck;10sre>10="loffses>&qu[37;d\n&qL29idspan class="strida hr[2] =mschmd.c#L338" ii2c_smbus_read_byte_d, , &qu)f">fscd3mon/fschmd3c#L217" id="L2171051lass=3l10" 35="comment">/*131911111111111111111stri>ssi]v>=trclilas"drFAN_ACTc#L29I2C_FUNC_Strclilas"drFAN_ACTame=fck;10sre>10g_triggera hremd.c#L274" idaderass="sref">FSCHhkstrchips"drivon/fschmd.c#L]fck;10sre>10="loffses>&qu[37;d\n&q=">, &qu)f">fscd3mon/fschmd3vice(fschmd_id);1;;;;;;;;0ef">102="driveg_triggera hremd.c#L274" idaderass="sref">FSCHhfpa_>fscumd.c#L274" id="ffpa_>fscum22offck;10sre>10="loffses>&qu[37;d\n&qL29idspan class="strida hr[2] =mschmd.c#L338" ii2c_smbus_read_byte_d, , &qu)f">fscd3mn/fschmd.3vice( */131911111111111111111stri>ssi]v>=trclilas"drFAN_STATEc#L29I2C_FUNC_Strclilas"drFAN_STATEame=fck;10sre>10g_triggera hremd.c#L274" idaderass="sref">FSCHhkstrchips"drivon/fschmd.c#L]fck;10sre>10="loffses>&qu[37;d\n&q=">, &qu)f">fscd3m_update_d3vice( = {10ne">10n0ef">102="driveg_triggera hremd.c#L274" idaderass="sref">FSCHhfpa_rippin>ssi =mschmd.c#fpa_rippin22offck;10sre>10="loffses>&qu[37;d\n&qL29idspan class="strida hr[2] =mschmd.c#L338" ii2c_smbus_read_byte_d, , &qu)f">fscd3m_update_d3vice(,1111111111111111111111111stri>ssi]v>=trclilas"drFAN_RIPPLEc#L29I2C_FUNC_Strclilas"drFAN_RIPPLEame=fck;10sre>10g_triggera hremd.c#L274" idaderass="sref">FSCHhkstrchips"drivon/fschmd.c#L]fck;10sre>10="loffses>&qu[37;d\n&q=">, &qu)f">fscd3m_update_d3vice(, &qu)f">fscd3mon/fschmd3vice( 336{10ss=>10"ct;10cla>10"="driversThe "> pos third fpa doesn3]spat have a fpagmins*29commlass>                 */(10"0ne">10ne"drivers/htrclilas"drFAN_MINc#L29I2C_FUNC_Strclilas"drFAN_MIName=fck;10sre>10g_triggera hremd.c#L274" idaderass="sref">FSCHhkstrchips"drivon/fschmd.c#L]fck;10sre>10="loffses>&qu[37;d\n&q=ss>                 */( 2681/a> = {10ne">10n0ef">102="driveg_triggera hremd.c#L274" idaderass="sref">FSCHhfpa_min>ssi =mschmd.c#fpa_min22offck;10sre>10="loffses>&qu[37;d\n&qL29idspan class="strida hr[2] =mschmd.c#L338" ii2c_smbus_read_byte_d,  31910ne">10n10ne">10n0ef">102="drivebyte_d, <"drie37;d\n", &qu)f">fscd3d_update_d3vice(/*131911111111111111111stri>ssi]v>=trclilas"drFAN_MINc#L29I2C_FUNC_Strclilas"drFAN_MIName=fck;10sre>10g_triggera hremd.c#L274" idaderass="sref">FSCHhkstrchips"drivon/fschmd.c#L]fck;10sre>10="loffses>&qu[37;d\n&q=">, &qu)f">fscd3don/fschmd3#L336" id="L336"10s2lass=3l10sr36ent *and* all10 cl>10n="drivers/h3mon/fschmd3c#L252" id="L2521063lass=3l10s=36"comment"> */13191ct;10cla>10"="driversmlset fpa >fscum"0nespeed os back to dera 0s*29commlass>                 */ = {10ne">10n0ne"ri2c_smbus_read_w_triggera hremd.c#L274" idaderass="sref">FSCHhfpa_>fscumd.c#L274" id="ffpa_>fscum22offck;10sre>10="loffses>&qu[37;d\n&qLlass="stri>ssi]v>=trclilaFAN_ALARMc#L29I2C_FUNC_StrclilaFAN_ALARM/scl) pan class=ss>                 */(,1111111111111111111111111stri>ssi]v>=g_triggera hremd.c#L274" idaderass="sref">FSCHhfpa_acer"driv=mschmd.cfpa_ace22offck;10sre>10="loffses>&qu[37;d\n&q=ss>                 */(driver = {10ss=>10"""""""""ck;10sre>10read_byte_wrin cchmd.c#L338" ii2c_smbus_read_byte_wrin cchmd.c#L3="stri2c_smbus_read_byte_d, <"drie37;d\n", &qu)f">fscd3don/fschmd3vice( 336{10e" >10n0ne">10n0ss=>10"ck;10sre>10trclilas"drFAN_STATEc#L29I2C_FUNC_Strclilas"drFAN_STATEame=fck;10sre>10g_triggera hremd.c#L274" idaderass="sref">FSCHhkstrchips"drivon/fschmd.c#L]fck;10sre>10="loffses>&qu[37;d\n&qi>, &qu)f">fscd3d_update_d3c#L217" id="L21710s8lass=3l10as36ass="sref">data);36{10e" >10n11111111stri>ssi]v>=g_triggera hremd.c#L274" idaderass="sref">FSCHhfpa_>fscumd.c#L274" id="ffpa_>fscum22offck;10sre>10="loffses>&qu[37;d\n&q=">, &qu)f">fscd3don/fschmd3c#L252" id="L2521069lass=3l10ne36name="L268"> 2681chmd_probe,10"sr>102="dri}">fsch3d_update_d3vice(fschmd_data {10"sr>10"s"drivers/h3mon/fschmd3c#L217" id="L2171071lass=3l10cl37="comment">/*110las>10s="drivers/hwmfor ef="+code=fschmdispan class="stri>ssi =m0fv37;d\n"<3"drivers/hwmontrclilaNO_VOLT_SENSORSc#L29I2C_FUNC_StrclilaNO_VOLT_SENSORS22offck;10sre>10g_triggera hremd.c#L274" idaderass="sref">FSCHhkstrchips"drivon/fschmd.c#L]sispan class="stri>ssi <m3fv37;d\n&quo>, &qu)f">fscd3mon/fschmd3c#L217" id="L2171072lass=3l10ss37ref">fschmd_id);1;;;;;;;;0ef">102="driveg_triggera hremd.c#L274" idaderass="sref">FSCHhvold, <"drie37;d\n&vold22offck;10sre>10="loffses>&qu[37;d\n&qL29idspan class="strida hr[2] =mschmd.c#L338" ii2c_smbus_read_byte_d, , &qu)f">fscd3d_update_d3vice( */131911111111111111111;;;;;;;0ef">102="drivetrclilas"drVOLTc#L29I2C_FUNC_Strclilas"drVOLTame=fck;10sre>10g_triggera hremd.c#L274" idaderass="sref">FSCHhkstrchips"drivon/fschmd.c#L]fck;10sre>10="loffses>&qu[37;d\n&q=">, &qu)f">fscd3d_update_d3vice( 33310ne">10n="dri">fsch3d_update_d3vice(,1 class="limi_ofg_triggera hremd.c#L274" idaderass="sref">FSCHhlastiupd n rchips"drivon/fslastiupd n rref">29idspan class="sjiffilivschmd.c#L338" jiffili="cl">, &qu)f">fscd3d_update_d3device(driver = {10ef">102="driveg_triggera hremd.c#L274" idaderass="sref">FSCHhvalirchips"drivon/fsvalir/scl>291">, &qu)f">fscd3don/fschmd3d.c#L217" id="L2179ts="sd3d.chd37ame="L336"> 3chmd_probe,10"sr>102="dri}">fsch3d_update_d3d.c#L217" id="L2179tg,10"sr>102="dri}">fsch3don/fschmd3d.c#L217" id="L2179oet ss="sref">FSCHhchtex_unmes iggera hremd.c#chtex_unmes ="stranameasspan class="sw_triggera hremd.c#L274" idaderass="sref">FSCHhupd n cmes iggera hremd.c#upd n cmes /scl)">, &qu)f">fscd38_update_d3device(fschmd_data {10"sr>10"s"drivers/h38on/fschmd3d.c#L217" id="L2179 to ad3d.c>d38="comment">/*0ne">10p10ne"drivers/hw_triggera hremd.c#L274" id">, &qu)f">fscd38on/fschmd3d.c#L217" id="L2179 =fscd3d.c>d3dref">chmd_probe,10"sr>102="dri}">fsch38_update_d3d.c#L217" id="L2179 ck" d3d.c>d383ass="sref">buf)10f" >10n="dri">fsch38_update_d3d.c#L217" id="L2179 e" cd3d.c>d38     ss="sref">FSCHhcodule_s2c_)1iggera hremd.c#codule_s2c_)1="stri2c_smbus_read_"> 3>mig/a>)1iggera hremd.c#"> 3>mig/a>)1/scl)">, &qu)f">fscd38_update_d3device(d38I2C_C>, &qu)f">fscd38_update_d3.c#L336" id="L336"9 >d3dsref"i2c_smbus_read_MODULE_AUTHORiggera hremd.c#MODULE_AUTHOR="strian class="stridlasity>ssivHans de Goede uot;hdegoede@redhat.comderaL29on/ing">&q=">, &qu)f">fscd38on/fschmd3device(ssivFSCqPoseidon, Hermes, Scylla, Heracles, Heimdall, Hades L29on/ing">&qlasspan class="strclilas"drilers/hw38on/fschmd3d.c#L217" id="L2179 e" nd3d.c>d3dass="sref">data);"L268"> san class="stridlasity>ssivand Syleus dss="sL29on/ing">&q=">, &qu)f">fscd38on/fschmd3d.c#L217" id="L2179 etd3dname=i2c_smbus_read_MODULE_LICENSEc#L29I2C_FUNC_SMODULE_LICENSE="strian class="stridlasity>ssivGPLL29on/ing">&q=">, &qu)f">fscd39_update_d3d.c#L217" id="L2179er prd3d.c>d39f">fs


*r> The original LXR software by , LXR 10"=unity/scli*asis experi="dral s="siontby , *r> lx*.d="ux.no chmdly hosteduby ,