hwmon: tegra: tsensor: lp0 save/restore configuration
[linux-2.6.git] / drivers / hwmon / abituguru.c
1 /*
2     abituguru.c Copyright (c) 2005-2006 Hans de Goede <hdegoede@redhat.com>
3
4     This program is free software; you can redistribute it and/or modify
5     it under the terms of the GNU General Public License as published by
6     the Free Software Foundation; either version 2 of the License, or
7     (at your option) any later version.
8
9     This program is distributed in the hope that it will be useful,
10     but WITHOUT ANY WARRANTY; without even the implied warranty of
11     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12     GNU General Public License for more details.
13
14     You should have received a copy of the GNU General Public License
15     along with this program; if not, write to the Free Software
16     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
17 */
18 /*
19     This driver supports the sensor part of the first and second revision of
20     the custom Abit uGuru chip found on Abit uGuru motherboards. Note: because
21     of lack of specs the CPU/RAM voltage & frequency control is not supported!
22 */
23
24 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
25
26 #include <linux/module.h>
27 #include <linux/sched.h>
28 #include <linux/init.h>
29 #include <linux/slab.h>
30 #include <linux/jiffies.h>
31 #include <linux/mutex.h>
32 #include <linux/err.h>
33 #include <linux/delay.h>
34 #include <linux/platform_device.h>
35 #include <linux/hwmon.h>
36 #include <linux/hwmon-sysfs.h>
37 #include <linux/dmi.h>
38 #include <linux/io.h>
39
40 /* Banks */
41 #define ABIT_UGURU_ALARM_BANK                   0x20 /* 1x 3 bytes */
42 #define ABIT_UGURU_SENSOR_BANK1                 0x21 /* 16x volt and temp */
43 #define ABIT_UGURU_FAN_PWM                      0x24 /* 3x 5 bytes */
44 #define ABIT_UGURU_SENSOR_BANK2                 0x26 /* fans */
45 /* max nr of sensors in bank1, a bank1 sensor can be in, temp or nc */
46 #define ABIT_UGURU_MAX_BANK1_SENSORS            16
47 /* Warning if you increase one of the 2 MAX defines below to 10 or higher you
48    should adjust the belonging _NAMES_LENGTH macro for the 2 digit number! */
49 /* max nr of sensors in bank2, currently mb's with max 6 fans are known */
50 #define ABIT_UGURU_MAX_BANK2_SENSORS            6
51 /* max nr of pwm outputs, currently mb's with max 5 pwm outputs are known */
52 #define ABIT_UGURU_MAX_PWMS                     5
53 /* uGuru sensor bank 1 flags */                      /* Alarm if: */
54 #define ABIT_UGURU_TEMP_HIGH_ALARM_ENABLE       0x01 /*  temp over warn */
55 #define ABIT_UGURU_VOLT_HIGH_ALARM_ENABLE       0x02 /*  volt over max */
56 #define ABIT_UGURU_VOLT_LOW_ALARM_ENABLE        0x04 /*  volt under min */
57 #define ABIT_UGURU_TEMP_HIGH_ALARM_FLAG         0x10 /* temp is over warn */
58 #define ABIT_UGURU_VOLT_HIGH_ALARM_FLAG         0x20 /* volt is over max */
59 #define ABIT_UGURU_VOLT_LOW_ALARM_FLAG          0x40 /* volt is under min */
60 /* uGuru sensor bank 2 flags */                      /* Alarm if: */
61 #define ABIT_UGURU_FAN_LOW_ALARM_ENABLE         0x01 /*   fan under min */
62 /* uGuru sensor bank common flags */
63 #define ABIT_UGURU_BEEP_ENABLE                  0x08 /* beep if alarm */
64 #define ABIT_UGURU_SHUTDOWN_ENABLE              0x80 /* shutdown if alarm */
65 /* uGuru fan PWM (speed control) flags */
66 #define ABIT_UGURU_FAN_PWM_ENABLE               0x80 /* enable speed control */
67 /* Values used for conversion */
68 #define ABIT_UGURU_FAN_MAX                      15300 /* RPM */
69 /* Bank1 sensor types */
70 #define ABIT_UGURU_IN_SENSOR                    0
71 #define ABIT_UGURU_TEMP_SENSOR                  1
72 #define ABIT_UGURU_NC                           2
73 /* In many cases we need to wait for the uGuru to reach a certain status, most
74    of the time it will reach this status within 30 - 90 ISA reads, and thus we
75    can best busy wait. This define gives the total amount of reads to try. */
76 #define ABIT_UGURU_WAIT_TIMEOUT                 125
77 /* However sometimes older versions of the uGuru seem to be distracted and they
78    do not respond for a long time. To handle this we sleep before each of the
79    last ABIT_UGURU_WAIT_TIMEOUT_SLEEP tries. */
80 #define ABIT_UGURU_WAIT_TIMEOUT_SLEEP           5
81 /* Normally all expected status in abituguru_ready, are reported after the
82    first read, but sometimes not and we need to poll. */
83 #define ABIT_UGURU_READY_TIMEOUT                5
84 /* Maximum 3 retries on timedout reads/writes, delay 200 ms before retrying */
85 #define ABIT_UGURU_MAX_RETRIES                  3
86 #define ABIT_UGURU_RETRY_DELAY                  (HZ/5)
87 /* Maximum 2 timeouts in abituguru_update_device, iow 3 in a row is an error */
88 #define ABIT_UGURU_MAX_TIMEOUTS                 2
89 /* utility macros */
90 #define ABIT_UGURU_NAME                         "abituguru"
91 #define ABIT_UGURU_DEBUG(level, format, arg...)                         \
92         if (level <= verbose)                                           \
93                 printk(KERN_DEBUG ABIT_UGURU_NAME ": "  format , ## arg)
94 /* Macros to help calculate the sysfs_names array length */
95 /* sum of strlen of: in??_input\0, in??_{min,max}\0, in??_{min,max}_alarm\0,
96    in??_{min,max}_alarm_enable\0, in??_beep\0, in??_shutdown\0 */
97 #define ABITUGURU_IN_NAMES_LENGTH       (11 + 2 * 9 + 2 * 15 + 2 * 22 + 10 + 14)
98 /* sum of strlen of: temp??_input\0, temp??_max\0, temp??_crit\0,
99    temp??_alarm\0, temp??_alarm_enable\0, temp??_beep\0, temp??_shutdown\0 */
100 #define ABITUGURU_TEMP_NAMES_LENGTH     (13 + 11 + 12 + 13 + 20 + 12 + 16)
101 /* sum of strlen of: fan?_input\0, fan?_min\0, fan?_alarm\0,
102    fan?_alarm_enable\0, fan?_beep\0, fan?_shutdown\0 */
103 #define ABITUGURU_FAN_NAMES_LENGTH      (11 + 9 + 11 + 18 + 10 + 14)
104 /* sum of strlen of: pwm?_enable\0, pwm?_auto_channels_temp\0,
105    pwm?_auto_point{1,2}_pwm\0, pwm?_auto_point{1,2}_temp\0 */
106 #define ABITUGURU_PWM_NAMES_LENGTH      (12 + 24 + 2 * 21 + 2 * 22)
107 /* IN_NAMES_LENGTH > TEMP_NAMES_LENGTH so assume all bank1 sensors are in */
108 #define ABITUGURU_SYSFS_NAMES_LENGTH    ( \
109         ABIT_UGURU_MAX_BANK1_SENSORS * ABITUGURU_IN_NAMES_LENGTH + \
110         ABIT_UGURU_MAX_BANK2_SENSORS * ABITUGURU_FAN_NAMES_LENGTH + \
111         ABIT_UGURU_MAX_PWMS * ABITUGURU_PWM_NAMES_LENGTH)
112
113 /* All the macros below are named identical to the oguru and oguru2 programs
114    reverse engineered by Olle Sandberg, hence the names might not be 100%
115    logical. I could come up with better names, but I prefer keeping the names
116    identical so that this driver can be compared with his work more easily. */
117 /* Two i/o-ports are used by uGuru */
118 #define ABIT_UGURU_BASE                         0x00E0
119 /* Used to tell uGuru what to read and to read the actual data */
120 #define ABIT_UGURU_CMD                          0x00
121 /* Mostly used to check if uGuru is busy */
122 #define ABIT_UGURU_DATA                         0x04
123 #define ABIT_UGURU_REGION_LENGTH                5
124 /* uGuru status' */
125 #define ABIT_UGURU_STATUS_WRITE                 0x00 /* Ready to be written */
126 #define ABIT_UGURU_STATUS_READ                  0x01 /* Ready to be read */
127 #define ABIT_UGURU_STATUS_INPUT                 0x08 /* More input */
128 #define ABIT_UGURU_STATUS_READY                 0x09 /* Ready to be written */
129
130 /* Constants */
131 /* in (Volt) sensors go up to 3494 mV, temp to 255000 millidegrees Celsius */
132 static const int abituguru_bank1_max_value[2] = { 3494, 255000 };
133 /* Min / Max allowed values for sensor2 (fan) alarm threshold, these values
134    correspond to 300-3000 RPM */
135 static const u8 abituguru_bank2_min_threshold = 5;
136 static const u8 abituguru_bank2_max_threshold = 50;
137 /* Register 0 is a bitfield, 1 and 2 are pwm settings (255 = 100%), 3 and 4
138    are temperature trip points. */
139 static const int abituguru_pwm_settings_multiplier[5] = { 0, 1, 1, 1000, 1000 };
140 /* Min / Max allowed values for pwm_settings. Note: pwm1 (CPU fan) is a
141    special case the minium allowed pwm% setting for this is 30% (77) on
142    some MB's this special case is handled in the code! */
143 static const u8 abituguru_pwm_min[5] = { 0, 170, 170, 25, 25 };
144 static const u8 abituguru_pwm_max[5] = { 0, 255, 255, 75, 75 };
145
146
147 /* Insmod parameters */
148 static int force;
149 module_param(force, bool, 0);
150 MODULE_PARM_DESC(force, "Set to one to force detection.");
151 static int bank1_types[ABIT_UGURU_MAX_BANK1_SENSORS] = { -1, -1, -1, -1, -1,
152         -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 };
153 module_param_array(bank1_types, int, NULL, 0);
154 MODULE_PARM_DESC(bank1_types, "Bank1 sensortype autodetection override:\n"
155         "   -1 autodetect\n"
156         "    0 volt sensor\n"
157         "    1 temp sensor\n"
158         "    2 not connected");
159 static int fan_sensors;
160 module_param(fan_sensors, int, 0);
161 MODULE_PARM_DESC(fan_sensors, "Number of fan sensors on the uGuru "
162         "(0 = autodetect)");
163 static int pwms;
164 module_param(pwms, int, 0);
165 MODULE_PARM_DESC(pwms, "Number of PWMs on the uGuru "
166         "(0 = autodetect)");
167
168 /* Default verbose is 2, since this driver is still in the testing phase */
169 static int verbose = 2;
170 module_param(verbose, int, 0644);
171 MODULE_PARM_DESC(verbose, "How verbose should the driver be? (0-3):\n"
172         "   0 normal output\n"
173         "   1 + verbose error reporting\n"
174         "   2 + sensors type probing info\n"
175         "   3 + retryable error reporting");
176
177
178 /* For the Abit uGuru, we need to keep some data in memory.
179    The structure is dynamically allocated, at the same time when a new
180    abituguru device is allocated. */
181 struct abituguru_data {
182         struct device *hwmon_dev;       /* hwmon registered device */
183         struct mutex update_lock;       /* protect access to data and uGuru */
184         unsigned long last_updated;     /* In jiffies */
185         unsigned short addr;            /* uguru base address */
186         char uguru_ready;               /* is the uguru in ready state? */
187         unsigned char update_timeouts;  /* number of update timeouts since last
188                                            successful update */
189
190         /* The sysfs attr and their names are generated automatically, for bank1
191            we cannot use a predefined array because we don't know beforehand
192            of a sensor is a volt or a temp sensor, for bank2 and the pwms its
193            easier todo things the same way.  For in sensors we have 9 (temp 7)
194            sysfs entries per sensor, for bank2 and pwms 6. */
195         struct sensor_device_attribute_2 sysfs_attr[
196                 ABIT_UGURU_MAX_BANK1_SENSORS * 9 +
197                 ABIT_UGURU_MAX_BANK2_SENSORS * 6 + ABIT_UGURU_MAX_PWMS * 6];
198         /* Buffer to store the dynamically generated sysfs names */
199         char sysfs_names[ABITUGURU_SYSFS_NAMES_LENGTH];
200
201         /* Bank 1 data */
202         /* number of and addresses of [0] in, [1] temp sensors */
203         u8 bank1_sensors[2];
204         u8 bank1_address[2][ABIT_UGURU_MAX_BANK1_SENSORS];
205         u8 bank1_value[ABIT_UGURU_MAX_BANK1_SENSORS];
206         /* This array holds 3 entries per sensor for the bank 1 sensor settings
207            (flags, min, max for voltage / flags, warn, shutdown for temp). */
208         u8 bank1_settings[ABIT_UGURU_MAX_BANK1_SENSORS][3];
209         /* Maximum value for each sensor used for scaling in mV/millidegrees
210            Celsius. */
211         int bank1_max_value[ABIT_UGURU_MAX_BANK1_SENSORS];
212
213         /* Bank 2 data, ABIT_UGURU_MAX_BANK2_SENSORS entries for bank2 */
214         u8 bank2_sensors; /* actual number of bank2 sensors found */
215         u8 bank2_value[ABIT_UGURU_MAX_BANK2_SENSORS];
216         u8 bank2_settings[ABIT_UGURU_MAX_BANK2_SENSORS][2]; /* flags, min */
217
218         /* Alarms 2 bytes for bank1, 1 byte for bank2 */
219         u8 alarms[3];
220
221         /* Fan PWM (speed control) 5 bytes per PWM */
222         u8 pwms; /* actual number of pwms found */
223         u8 pwm_settings[ABIT_UGURU_MAX_PWMS][5];
224 };
225
226 static const char *never_happen = "This should never happen.";
227 static const char *report_this =
228         "Please report this to the abituguru maintainer (see MAINTAINERS)";
229
230 /* wait till the uguru is in the specified state */
231 static int abituguru_wait(struct abituguru_data *data, u8 state)
232 {
233         int timeout = ABIT_UGURU_WAIT_TIMEOUT;
234
235         while (inb_p(data->addr + ABIT_UGURU_DATA) != state) {
236                 timeout--;
237                 if (timeout == 0)
238                         return -EBUSY;
239                 /* sleep a bit before our last few tries, see the comment on
240                    this where ABIT_UGURU_WAIT_TIMEOUT_SLEEP is defined. */
241                 if (timeout <= ABIT_UGURU_WAIT_TIMEOUT_SLEEP)
242                         msleep(0);
243         }
244         return 0;
245 }
246
247 /* Put the uguru in ready for input state */
248 static int abituguru_ready(struct abituguru_data *data)
249 {
250         int timeout = ABIT_UGURU_READY_TIMEOUT;
251
252         if (data->uguru_ready)
253                 return 0;
254
255         /* Reset? / Prepare for next read/write cycle */
256         outb(0x00, data->addr + ABIT_UGURU_DATA);
257
258         /* Wait till the uguru is ready */
259         if (abituguru_wait(data, ABIT_UGURU_STATUS_READY)) {
260                 ABIT_UGURU_DEBUG(1,
261                         "timeout exceeded waiting for ready state\n");
262                 return -EIO;
263         }
264
265         /* Cmd port MUST be read now and should contain 0xAC */
266         while (inb_p(data->addr + ABIT_UGURU_CMD) != 0xAC) {
267                 timeout--;
268                 if (timeout == 0) {
269                         ABIT_UGURU_DEBUG(1,
270                            "CMD reg does not hold 0xAC after ready command\n");
271                         return -EIO;
272                 }
273                 msleep(0);
274         }
275
276         /* After this the ABIT_UGURU_DATA port should contain
277            ABIT_UGURU_STATUS_INPUT */
278         timeout = ABIT_UGURU_READY_TIMEOUT;
279         while (inb_p(data->addr + ABIT_UGURU_DATA) != ABIT_UGURU_STATUS_INPUT) {
280                 timeout--;
281                 if (timeout == 0) {
282                         ABIT_UGURU_DEBUG(1,
283                                 "state != more input after ready command\n");
284                         return -EIO;
285                 }
286                 msleep(0);
287         }
288
289         data->uguru_ready = 1;
290         return 0;
291 }
292
293 /* Send the bank and then sensor address to the uGuru for the next read/write
294    cycle. This function gets called as the first part of a read/write by
295    abituguru_read and abituguru_write. This function should never be
296    called by any other function. */
297 static int abituguru_send_address(struct abituguru_data *data,
298         u8 bank_addr, u8 sensor_addr, int retries)
299 {
300         /* assume the caller does error handling itself if it has not requested
301            any retries, and thus be quiet. */
302         int report_errors = retries;
303
304         for (;;) {
305                 /* Make sure the uguru is ready and then send the bank address,
306                    after this the uguru is no longer "ready". */
307                 if (abituguru_ready(data) != 0)
308                         return -EIO;
309                 outb(bank_addr, data->addr + ABIT_UGURU_DATA);
310                 data->uguru_ready = 0;
311
312                 /* Wait till the uguru is ABIT_UGURU_STATUS_INPUT state again
313                    and send the sensor addr */
314                 if (abituguru_wait(data, ABIT_UGURU_STATUS_INPUT)) {
315                         if (retries) {
316                                 ABIT_UGURU_DEBUG(3, "timeout exceeded "
317                                         "waiting for more input state, %d "
318                                         "tries remaining\n", retries);
319                                 set_current_state(TASK_UNINTERRUPTIBLE);
320                                 schedule_timeout(ABIT_UGURU_RETRY_DELAY);
321                                 retries--;
322                                 continue;
323                         }
324                         if (report_errors)
325                                 ABIT_UGURU_DEBUG(1, "timeout exceeded "
326                                         "waiting for more input state "
327                                         "(bank: %d)\n", (int)bank_addr);
328                         return -EBUSY;
329                 }
330                 outb(sensor_addr, data->addr + ABIT_UGURU_CMD);
331                 return 0;
332         }
333 }
334
335 /* Read count bytes from sensor sensor_addr in bank bank_addr and store the
336    result in buf, retry the send address part of the read retries times. */
337 static int abituguru_read(struct abituguru_data *data,
338         u8 bank_addr, u8 sensor_addr, u8 *buf, int count, int retries)
339 {
340         int i;
341
342         /* Send the address */
343         i = abituguru_send_address(data, bank_addr, sensor_addr, retries);
344         if (i)
345                 return i;
346
347         /* And read the data */
348         for (i = 0; i < count; i++) {
349                 if (abituguru_wait(data, ABIT_UGURU_STATUS_READ)) {
350                         ABIT_UGURU_DEBUG(retries ? 1 : 3,
351                                 "timeout exceeded waiting for "
352                                 "read state (bank: %d, sensor: %d)\n",
353                                 (int)bank_addr, (int)sensor_addr);
354                         break;
355                 }
356                 buf[i] = inb(data->addr + ABIT_UGURU_CMD);
357         }
358
359         /* Last put the chip back in ready state */
360         abituguru_ready(data);
361
362         return i;
363 }
364
365 /* Write count bytes from buf to sensor sensor_addr in bank bank_addr, the send
366    address part of the write is always retried ABIT_UGURU_MAX_RETRIES times. */
367 static int abituguru_write(struct abituguru_data *data,
368         u8 bank_addr, u8 sensor_addr, u8 *buf, int count)
369 {
370         /* We use the ready timeout as we have to wait for 0xAC just like the
371            ready function */
372         int i, timeout = ABIT_UGURU_READY_TIMEOUT;
373
374         /* Send the address */
375         i = abituguru_send_address(data, bank_addr, sensor_addr,
376                 ABIT_UGURU_MAX_RETRIES);
377         if (i)
378                 return i;
379
380         /* And write the data */
381         for (i = 0; i < count; i++) {
382                 if (abituguru_wait(data, ABIT_UGURU_STATUS_WRITE)) {
383                         ABIT_UGURU_DEBUG(1, "timeout exceeded waiting for "
384                                 "write state (bank: %d, sensor: %d)\n",
385                                 (int)bank_addr, (int)sensor_addr);
386                         break;
387                 }
388                 outb(buf[i], data->addr + ABIT_UGURU_CMD);
389         }
390
391         /* Now we need to wait till the chip is ready to be read again,
392            so that we can read 0xAC as confirmation that our write has
393            succeeded. */
394         if (abituguru_wait(data, ABIT_UGURU_STATUS_READ)) {
395                 ABIT_UGURU_DEBUG(1, "timeout exceeded waiting for read state "
396                         "after write (bank: %d, sensor: %d)\n", (int)bank_addr,
397                         (int)sensor_addr);
398                 return -EIO;
399         }
400
401         /* Cmd port MUST be read now and should contain 0xAC */
402         while (inb_p(data->addr + ABIT_UGURU_CMD) != 0xAC) {
403                 timeout--;
404                 if (timeout == 0) {
405                         ABIT_UGURU_DEBUG(1, "CMD reg does not hold 0xAC after "
406                                 "write (bank: %d, sensor: %d)\n",
407                                 (int)bank_addr, (int)sensor_addr);
408                         return -EIO;
409                 }
410                 msleep(0);
411         }
412
413         /* Last put the chip back in ready state */
414         abituguru_ready(data);
415
416         return i;
417 }
418
419 /* Detect sensor type. Temp and Volt sensors are enabled with
420    different masks and will ignore enable masks not meant for them.
421    This enables us to test what kind of sensor we're dealing with.
422    By setting the alarm thresholds so that we will always get an
423    alarm for sensor type X and then enabling the sensor as sensor type
424    X, if we then get an alarm it is a sensor of type X. */
425 static int __devinit
426 abituguru_detect_bank1_sensor_type(struct abituguru_data *data,
427                                    u8 sensor_addr)
428 {
429         u8 val, test_flag, buf[3];
430         int i, ret = -ENODEV; /* error is the most common used retval :| */
431
432         /* If overriden by the user return the user selected type */
433         if (bank1_types[sensor_addr] >= ABIT_UGURU_IN_SENSOR &&
434                         bank1_types[sensor_addr] <= ABIT_UGURU_NC) {
435                 ABIT_UGURU_DEBUG(2, "assuming sensor type %d for bank1 sensor "
436                         "%d because of \"bank1_types\" module param\n",
437                         bank1_types[sensor_addr], (int)sensor_addr);
438                 return bank1_types[sensor_addr];
439         }
440
441         /* First read the sensor and the current settings */
442         if (abituguru_read(data, ABIT_UGURU_SENSOR_BANK1, sensor_addr, &val,
443                         1, ABIT_UGURU_MAX_RETRIES) != 1)
444                 return -ENODEV;
445
446         /* Test val is sane / usable for sensor type detection. */
447         if ((val < 10u) || (val > 250u)) {
448                 pr_warn("bank1-sensor: %d reading (%d) too close to limits, "
449                         "unable to determine sensor type, skipping sensor\n",
450                         (int)sensor_addr, (int)val);
451                 /* assume no sensor is there for sensors for which we can't
452                    determine the sensor type because their reading is too close
453                    to their limits, this usually means no sensor is there. */
454                 return ABIT_UGURU_NC;
455         }
456
457         ABIT_UGURU_DEBUG(2, "testing bank1 sensor %d\n", (int)sensor_addr);
458         /* Volt sensor test, enable volt low alarm, set min value ridicously
459            high, or vica versa if the reading is very high. If its a volt
460            sensor this should always give us an alarm. */
461         if (val <= 240u) {
462                 buf[0] = ABIT_UGURU_VOLT_LOW_ALARM_ENABLE;
463                 buf[1] = 245;
464                 buf[2] = 250;
465                 test_flag = ABIT_UGURU_VOLT_LOW_ALARM_FLAG;
466         } else {
467                 buf[0] = ABIT_UGURU_VOLT_HIGH_ALARM_ENABLE;
468                 buf[1] = 5;
469                 buf[2] = 10;
470                 test_flag = ABIT_UGURU_VOLT_HIGH_ALARM_FLAG;
471         }
472
473         if (abituguru_write(data, ABIT_UGURU_SENSOR_BANK1 + 2, sensor_addr,
474                         buf, 3) != 3)
475                 goto abituguru_detect_bank1_sensor_type_exit;
476         /* Now we need 20 ms to give the uguru time to read the sensors
477            and raise a voltage alarm */
478         set_current_state(TASK_UNINTERRUPTIBLE);
479         schedule_timeout(HZ/50);
480         /* Check for alarm and check the alarm is a volt low alarm. */
481         if (abituguru_read(data, ABIT_UGURU_ALARM_BANK, 0, buf, 3,
482                         ABIT_UGURU_MAX_RETRIES) != 3)
483                 goto abituguru_detect_bank1_sensor_type_exit;
484         if (buf[sensor_addr/8] & (0x01 << (sensor_addr % 8))) {
485                 if (abituguru_read(data, ABIT_UGURU_SENSOR_BANK1 + 1,
486                                 sensor_addr, buf, 3,
487                                 ABIT_UGURU_MAX_RETRIES) != 3)
488                         goto abituguru_detect_bank1_sensor_type_exit;
489                 if (buf[0] & test_flag) {
490                         ABIT_UGURU_DEBUG(2, "  found volt sensor\n");
491                         ret = ABIT_UGURU_IN_SENSOR;
492                         goto abituguru_detect_bank1_sensor_type_exit;
493                 } else
494                         ABIT_UGURU_DEBUG(2, "  alarm raised during volt "
495                                 "sensor test, but volt range flag not set\n");
496         } else
497                 ABIT_UGURU_DEBUG(2, "  alarm not raised during volt sensor "
498                         "test\n");
499
500         /* Temp sensor test, enable sensor as a temp sensor, set beep value
501            ridicously low (but not too low, otherwise uguru ignores it).
502            If its a temp sensor this should always give us an alarm. */
503         buf[0] = ABIT_UGURU_TEMP_HIGH_ALARM_ENABLE;
504         buf[1] = 5;
505         buf[2] = 10;
506         if (abituguru_write(data, ABIT_UGURU_SENSOR_BANK1 + 2, sensor_addr,
507                         buf, 3) != 3)
508                 goto abituguru_detect_bank1_sensor_type_exit;
509         /* Now we need 50 ms to give the uguru time to read the sensors
510            and raise a temp alarm */
511         set_current_state(TASK_UNINTERRUPTIBLE);
512         schedule_timeout(HZ/20);
513         /* Check for alarm and check the alarm is a temp high alarm. */
514         if (abituguru_read(data, ABIT_UGURU_ALARM_BANK, 0, buf, 3,
515                         ABIT_UGURU_MAX_RETRIES) != 3)
516                 goto abituguru_detect_bank1_sensor_type_exit;
517         if (buf[sensor_addr/8] & (0x01 << (sensor_addr % 8))) {
518                 if (abituguru_read(data, ABIT_UGURU_SENSOR_BANK1 + 1,
519                                 sensor_addr, buf, 3,
520                                 ABIT_UGURU_MAX_RETRIES) != 3)
521                         goto abituguru_detect_bank1_sensor_type_exit;
522                 if (buf[0] & ABIT_UGURU_TEMP_HIGH_ALARM_FLAG) {
523                         ABIT_UGURU_DEBUG(2, "  found temp sensor\n");
524                         ret = ABIT_UGURU_TEMP_SENSOR;
525                         goto abituguru_detect_bank1_sensor_type_exit;
526                 } else
527                         ABIT_UGURU_DEBUG(2, "  alarm raised during temp "
528                                 "sensor test, but temp high flag not set\n");
529         } else
530                 ABIT_UGURU_DEBUG(2, "  alarm not raised during temp sensor "
531                         "test\n");
532
533         ret = ABIT_UGURU_NC;
534 abituguru_detect_bank1_sensor_type_exit:
535         /* Restore original settings, failing here is really BAD, it has been
536            reported that some BIOS-es hang when entering the uGuru menu with
537            invalid settings present in the uGuru, so we try this 3 times. */
538         for (i = 0; i < 3; i++)
539                 if (abituguru_write(data, ABIT_UGURU_SENSOR_BANK1 + 2,
540                                 sensor_addr, data->bank1_settings[sensor_addr],
541                                 3) == 3)
542                         break;
543         if (i == 3) {
544                 pr_err("Fatal error could not restore original settings. %s %s\n",
545                        never_happen, report_this);
546                 return -ENODEV;
547         }
548         return ret;
549 }
550
551 /* These functions try to find out how many sensors there are in bank2 and how
552    many pwms there are. The purpose of this is to make sure that we don't give
553    the user the possibility to change settings for non-existent sensors / pwm.
554    The uGuru will happily read / write whatever memory happens to be after the
555    memory storing the PWM settings when reading/writing to a PWM which is not
556    there. Notice even if we detect a PWM which doesn't exist we normally won't
557    write to it, unless the user tries to change the settings.
558
559    Although the uGuru allows reading (settings) from non existing bank2
560    sensors, my version of the uGuru does seem to stop writing to them, the
561    write function above aborts in this case with:
562    "CMD reg does not hold 0xAC after write"
563
564    Notice these 2 tests are non destructive iow read-only tests, otherwise
565    they would defeat their purpose. Although for the bank2_sensors detection a
566    read/write test would be feasible because of the reaction above, I've
567    however opted to stay on the safe side. */
568 static void __devinit
569 abituguru_detect_no_bank2_sensors(struct abituguru_data *data)
570 {
571         int i;
572
573         if (fan_sensors > 0 && fan_sensors <= ABIT_UGURU_MAX_BANK2_SENSORS) {
574                 data->bank2_sensors = fan_sensors;
575                 ABIT_UGURU_DEBUG(2, "assuming %d fan sensors because of "
576                         "\"fan_sensors\" module param\n",
577                         (int)data->bank2_sensors);
578                 return;
579         }
580
581         ABIT_UGURU_DEBUG(2, "detecting number of fan sensors\n");
582         for (i = 0; i < ABIT_UGURU_MAX_BANK2_SENSORS; i++) {
583                 /* 0x89 are the known used bits:
584                    -0x80 enable shutdown
585                    -0x08 enable beep
586                    -0x01 enable alarm
587                    All other bits should be 0, but on some motherboards
588                    0x40 (bit 6) is also high for some of the fans?? */
589                 if (data->bank2_settings[i][0] & ~0xC9) {
590                         ABIT_UGURU_DEBUG(2, "  bank2 sensor %d does not seem "
591                                 "to be a fan sensor: settings[0] = %02X\n",
592                                 i, (unsigned int)data->bank2_settings[i][0]);
593                         break;
594                 }
595
596                 /* check if the threshold is within the allowed range */
597                 if (data->bank2_settings[i][1] <
598                                 abituguru_bank2_min_threshold) {
599                         ABIT_UGURU_DEBUG(2, "  bank2 sensor %d does not seem "
600                                 "to be a fan sensor: the threshold (%d) is "
601                                 "below the minimum (%d)\n", i,
602                                 (int)data->bank2_settings[i][1],
603                                 (int)abituguru_bank2_min_threshold);
604                         break;
605                 }
606                 if (data->bank2_settings[i][1] >
607                                 abituguru_bank2_max_threshold) {
608                         ABIT_UGURU_DEBUG(2, "  bank2 sensor %d does not seem "
609                                 "to be a fan sensor: the threshold (%d) is "
610                                 "above the maximum (%d)\n", i,
611                                 (int)data->bank2_settings[i][1],
612                                 (int)abituguru_bank2_max_threshold);
613                         break;
614                 }
615         }
616
617         data->bank2_sensors = i;
618         ABIT_UGURU_DEBUG(2, " found: %d fan sensors\n",
619                 (int)data->bank2_sensors);
620 }
621
622 static void __devinit
623 abituguru_detect_no_pwms(struct abituguru_data *data)
624 {
625         int i, j;
626
627         if (pwms > 0 && pwms <= ABIT_UGURU_MAX_PWMS) {
628                 data->pwms = pwms;
629                 ABIT_UGURU_DEBUG(2, "assuming %d PWM outputs because of "
630                         "\"pwms\" module param\n", (int)data->pwms);
631                 return;
632         }
633
634         ABIT_UGURU_DEBUG(2, "detecting number of PWM outputs\n");
635         for (i = 0; i < ABIT_UGURU_MAX_PWMS; i++) {
636                 /* 0x80 is the enable bit and the low
637                    nibble is which temp sensor to use,
638                    the other bits should be 0 */
639                 if (data->pwm_settings[i][0] & ~0x8F) {
640                         ABIT_UGURU_DEBUG(2, "  pwm channel %d does not seem "
641                                 "to be a pwm channel: settings[0] = %02X\n",
642                                 i, (unsigned int)data->pwm_settings[i][0]);
643                         break;
644                 }
645
646                 /* the low nibble must correspond to one of the temp sensors
647                    we've found */
648                 for (j = 0; j < data->bank1_sensors[ABIT_UGURU_TEMP_SENSOR];
649                                 j++) {
650                         if (data->bank1_address[ABIT_UGURU_TEMP_SENSOR][j] ==
651                                         (data->pwm_settings[i][0] & 0x0F))
652                                 break;
653                 }
654                 if (j == data->bank1_sensors[ABIT_UGURU_TEMP_SENSOR]) {
655                         ABIT_UGURU_DEBUG(2, "  pwm channel %d does not seem "
656                                 "to be a pwm channel: %d is not a valid temp "
657                                 "sensor address\n", i,
658                                 data->pwm_settings[i][0] & 0x0F);
659                         break;
660                 }
661
662                 /* check if all other settings are within the allowed range */
663                 for (j = 1; j < 5; j++) {
664                         u8 min;
665                         /* special case pwm1 min pwm% */
666                         if ((i == 0) && ((j == 1) || (j == 2)))
667                                 min = 77;
668                         else
669                                 min = abituguru_pwm_min[j];
670                         if (data->pwm_settings[i][j] < min) {
671                                 ABIT_UGURU_DEBUG(2, "  pwm channel %d does "
672                                         "not seem to be a pwm channel: "
673                                         "setting %d (%d) is below the minimum "
674                                         "value (%d)\n", i, j,
675                                         (int)data->pwm_settings[i][j],
676                                         (int)min);
677                                 goto abituguru_detect_no_pwms_exit;
678                         }
679                         if (data->pwm_settings[i][j] > abituguru_pwm_max[j]) {
680                                 ABIT_UGURU_DEBUG(2, "  pwm channel %d does "
681                                         "not seem to be a pwm channel: "
682                                         "setting %d (%d) is above the maximum "
683                                         "value (%d)\n", i, j,
684                                         (int)data->pwm_settings[i][j],
685                                         (int)abituguru_pwm_max[j]);
686                                 goto abituguru_detect_no_pwms_exit;
687                         }
688                 }
689
690                 /* check that min temp < max temp and min pwm < max pwm */
691                 if (data->pwm_settings[i][1] >= data->pwm_settings[i][2]) {
692                         ABIT_UGURU_DEBUG(2, "  pwm channel %d does not seem "
693                                 "to be a pwm channel: min pwm (%d) >= "
694                                 "max pwm (%d)\n", i,
695                                 (int)data->pwm_settings[i][1],
696                                 (int)data->pwm_settings[i][2]);
697                         break;
698                 }
699                 if (data->pwm_settings[i][3] >= data->pwm_settings[i][4]) {
700                         ABIT_UGURU_DEBUG(2, "  pwm channel %d does not seem "
701                                 "to be a pwm channel: min temp (%d) >= "
702                                 "max temp (%d)\n", i,
703                                 (int)data->pwm_settings[i][3],
704                                 (int)data->pwm_settings[i][4]);
705                         break;
706                 }
707         }
708
709 abituguru_detect_no_pwms_exit:
710         data->pwms = i;
711         ABIT_UGURU_DEBUG(2, " found: %d PWM outputs\n", (int)data->pwms);
712 }
713
714 /* Following are the sysfs callback functions. These functions expect:
715    sensor_device_attribute_2->index:   sensor address/offset in the bank
716    sensor_device_attribute_2->nr:      register offset, bitmask or NA. */
717 static struct abituguru_data *abituguru_update_device(struct device *dev);
718
719 static ssize_t show_bank1_value(struct device *dev,
720         struct device_attribute *devattr, char *buf)
721 {
722         struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
723         struct abituguru_data *data = abituguru_update_device(dev);
724         if (!data)
725                 return -EIO;
726         return sprintf(buf, "%d\n", (data->bank1_value[attr->index] *
727                 data->bank1_max_value[attr->index] + 128) / 255);
728 }
729
730 static ssize_t show_bank1_setting(struct device *dev,
731         struct device_attribute *devattr, char *buf)
732 {
733         struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
734         struct abituguru_data *data = dev_get_drvdata(dev);
735         return sprintf(buf, "%d\n",
736                 (data->bank1_settings[attr->index][attr->nr] *
737                 data->bank1_max_value[attr->index] + 128) / 255);
738 }
739
740 static ssize_t show_bank2_value(struct device *dev,
741         struct device_attribute *devattr, char *buf)
742 {
743         struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
744         struct abituguru_data *data = abituguru_update_device(dev);
745         if (!data)
746                 return -EIO;
747         return sprintf(buf, "%d\n", (data->bank2_value[attr->index] *
748                 ABIT_UGURU_FAN_MAX + 128) / 255);
749 }
750
751 static ssize_t show_bank2_setting(struct device *dev,
752         struct device_attribute *devattr, char *buf)
753 {
754         struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
755         struct abituguru_data *data = dev_get_drvdata(dev);
756         return sprintf(buf, "%d\n",
757                 (data->bank2_settings[attr->index][attr->nr] *
758                 ABIT_UGURU_FAN_MAX + 128) / 255);
759 }
760
761 static ssize_t store_bank1_setting(struct device *dev, struct device_attribute
762         *devattr, const char *buf, size_t count)
763 {
764         struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
765         struct abituguru_data *data = dev_get_drvdata(dev);
766         u8 val = (simple_strtoul(buf, NULL, 10) * 255 +
767                 data->bank1_max_value[attr->index]/2) /
768                 data->bank1_max_value[attr->index];
769         ssize_t ret = count;
770
771         mutex_lock(&data->update_lock);
772         if (data->bank1_settings[attr->index][attr->nr] != val) {
773                 u8 orig_val = data->bank1_settings[attr->index][attr->nr];
774                 data->bank1_settings[attr->index][attr->nr] = val;
775                 if (abituguru_write(data, ABIT_UGURU_SENSOR_BANK1 + 2,
776                                 attr->index, data->bank1_settings[attr->index],
777                                 3) <= attr->nr) {
778                         data->bank1_settings[attr->index][attr->nr] = orig_val;
779                         ret = -EIO;
780                 }
781         }
782         mutex_unlock(&data->update_lock);
783         return ret;
784 }
785
786 static ssize_t store_bank2_setting(struct device *dev, struct device_attribute
787         *devattr, const char *buf, size_t count)
788 {
789         struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
790         struct abituguru_data *data = dev_get_drvdata(dev);
791         u8 val = (simple_strtoul(buf, NULL, 10)*255 + ABIT_UGURU_FAN_MAX/2) /
792                 ABIT_UGURU_FAN_MAX;
793         ssize_t ret = count;
794
795         /* this check can be done before taking the lock */
796         if ((val < abituguru_bank2_min_threshold) ||
797                         (val > abituguru_bank2_max_threshold))
798                 return -EINVAL;
799
800         mutex_lock(&data->update_lock);
801         if (data->bank2_settings[attr->index][attr->nr] != val) {
802                 u8 orig_val = data->bank2_settings[attr->index][attr->nr];
803                 data->bank2_settings[attr->index][attr->nr] = val;
804                 if (abituguru_write(data, ABIT_UGURU_SENSOR_BANK2 + 2,
805                                 attr->index, data->bank2_settings[attr->index],
806                                 2) <= attr->nr) {
807                         data->bank2_settings[attr->index][attr->nr] = orig_val;
808                         ret = -EIO;
809                 }
810         }
811         mutex_unlock(&data->update_lock);
812         return ret;
813 }
814
815 static ssize_t show_bank1_alarm(struct device *dev,
816         struct device_attribute *devattr, char *buf)
817 {
818         struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
819         struct abituguru_data *data = abituguru_update_device(dev);
820         if (!data)
821                 return -EIO;
822         /* See if the alarm bit for this sensor is set, and if the
823            alarm matches the type of alarm we're looking for (for volt
824            it can be either low or high). The type is stored in a few
825            readonly bits in the settings part of the relevant sensor.
826            The bitmask of the type is passed to us in attr->nr. */
827         if ((data->alarms[attr->index / 8] & (0x01 << (attr->index % 8))) &&
828                         (data->bank1_settings[attr->index][0] & attr->nr))
829                 return sprintf(buf, "1\n");
830         else
831                 return sprintf(buf, "0\n");
832 }
833
834 static ssize_t show_bank2_alarm(struct device *dev,
835         struct device_attribute *devattr, char *buf)
836 {
837         struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
838         struct abituguru_data *data = abituguru_update_device(dev);
839         if (!data)
840                 return -EIO;
841         if (data->alarms[2] & (0x01 << attr->index))
842                 return sprintf(buf, "1\n");
843         else
844                 return sprintf(buf, "0\n");
845 }
846
847 static ssize_t show_bank1_mask(struct device *dev,
848         struct device_attribute *devattr, char *buf)
849 {
850         struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
851         struct abituguru_data *data = dev_get_drvdata(dev);
852         if (data->bank1_settings[attr->index][0] & attr->nr)
853                 return sprintf(buf, "1\n");
854         else
855                 return sprintf(buf, "0\n");
856 }
857
858 static ssize_t show_bank2_mask(struct device *dev,
859         struct device_attribute *devattr, char *buf)
860 {
861         struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
862         struct abituguru_data *data = dev_get_drvdata(dev);
863         if (data->bank2_settings[attr->index][0] & attr->nr)
864                 return sprintf(buf, "1\n");
865         else
866                 return sprintf(buf, "0\n");
867 }
868
869 static ssize_t store_bank1_mask(struct device *dev,
870         struct device_attribute *devattr, const char *buf, size_t count)
871 {
872         struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
873         struct abituguru_data *data = dev_get_drvdata(dev);
874         int mask = simple_strtoul(buf, NULL, 10);
875         ssize_t ret = count;
876         u8 orig_val;
877
878         mutex_lock(&data->update_lock);
879         orig_val = data->bank1_settings[attr->index][0];
880
881         if (mask)
882                 data->bank1_settings[attr->index][0] |= attr->nr;
883         else
884                 data->bank1_settings[attr->index][0] &= ~attr->nr;
885
886         if ((data->bank1_settings[attr->index][0] != orig_val) &&
887                         (abituguru_write(data,
888                         ABIT_UGURU_SENSOR_BANK1 + 2, attr->index,
889                         data->bank1_settings[attr->index], 3) < 1)) {
890                 data->bank1_settings[attr->index][0] = orig_val;
891                 ret = -EIO;
892         }
893         mutex_unlock(&data->update_lock);
894         return ret;
895 }
896
897 static ssize_t store_bank2_mask(struct device *dev,
898         struct device_attribute *devattr, const char *buf, size_t count)
899 {
900         struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
901         struct abituguru_data *data = dev_get_drvdata(dev);
902         int mask = simple_strtoul(buf, NULL, 10);
903         ssize_t ret = count;
904         u8 orig_val;
905
906         mutex_lock(&data->update_lock);
907         orig_val = data->bank2_settings[attr->index][0];
908
909         if (mask)
910                 data->bank2_settings[attr->index][0] |= attr->nr;
911         else
912                 data->bank2_settings[attr->index][0] &= ~attr->nr;
913
914         if ((data->bank2_settings[attr->index][0] != orig_val) &&
915                         (abituguru_write(data,
916                         ABIT_UGURU_SENSOR_BANK2 + 2, attr->index,
917                         data->bank2_settings[attr->index], 2) < 1)) {
918                 data->bank2_settings[attr->index][0] = orig_val;
919                 ret = -EIO;
920         }
921         mutex_unlock(&data->update_lock);
922         return ret;
923 }
924
925 /* Fan PWM (speed control) */
926 static ssize_t show_pwm_setting(struct device *dev,
927         struct device_attribute *devattr, char *buf)
928 {
929         struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
930         struct abituguru_data *data = dev_get_drvdata(dev);
931         return sprintf(buf, "%d\n", data->pwm_settings[attr->index][attr->nr] *
932                 abituguru_pwm_settings_multiplier[attr->nr]);
933 }
934
935 static ssize_t store_pwm_setting(struct device *dev, struct device_attribute
936         *devattr, const char *buf, size_t count)
937 {
938         struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
939         struct abituguru_data *data = dev_get_drvdata(dev);
940         u8 min, val = (simple_strtoul(buf, NULL, 10) +
941                 abituguru_pwm_settings_multiplier[attr->nr]/2) /
942                 abituguru_pwm_settings_multiplier[attr->nr];
943         ssize_t ret = count;
944
945         /* special case pwm1 min pwm% */
946         if ((attr->index == 0) && ((attr->nr == 1) || (attr->nr == 2)))
947                 min = 77;
948         else
949                 min = abituguru_pwm_min[attr->nr];
950
951         /* this check can be done before taking the lock */
952         if ((val < min) || (val > abituguru_pwm_max[attr->nr]))
953                 return -EINVAL;
954
955         mutex_lock(&data->update_lock);
956         /* this check needs to be done after taking the lock */
957         if ((attr->nr & 1) &&
958                         (val >= data->pwm_settings[attr->index][attr->nr + 1]))
959                 ret = -EINVAL;
960         else if (!(attr->nr & 1) &&
961                         (val <= data->pwm_settings[attr->index][attr->nr - 1]))
962                 ret = -EINVAL;
963         else if (data->pwm_settings[attr->index][attr->nr] != val) {
964                 u8 orig_val = data->pwm_settings[attr->index][attr->nr];
965                 data->pwm_settings[attr->index][attr->nr] = val;
966                 if (abituguru_write(data, ABIT_UGURU_FAN_PWM + 1,
967                                 attr->index, data->pwm_settings[attr->index],
968                                 5) <= attr->nr) {
969                         data->pwm_settings[attr->index][attr->nr] =
970                                 orig_val;
971                         ret = -EIO;
972                 }
973         }
974         mutex_unlock(&data->update_lock);
975         return ret;
976 }
977
978 static ssize_t show_pwm_sensor(struct device *dev,
979         struct device_attribute *devattr, char *buf)
980 {
981         struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
982         struct abituguru_data *data = dev_get_drvdata(dev);
983         int i;
984         /* We need to walk to the temp sensor addresses to find what
985            the userspace id of the configured temp sensor is. */
986         for (i = 0; i < data->bank1_sensors[ABIT_UGURU_TEMP_SENSOR]; i++)
987                 if (data->bank1_address[ABIT_UGURU_TEMP_SENSOR][i] ==
988                                 (data->pwm_settings[attr->index][0] & 0x0F))
989                         return sprintf(buf, "%d\n", i+1);
990
991         return -ENXIO;
992 }
993
994 static ssize_t store_pwm_sensor(struct device *dev, struct device_attribute
995         *devattr, const char *buf, size_t count)
996 {
997         struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
998         struct abituguru_data *data = dev_get_drvdata(dev);
999         unsigned long val = simple_strtoul(buf, NULL, 10) - 1;
1000         ssize_t ret = count;
1001
1002         mutex_lock(&data->update_lock);
1003         if (val < data->bank1_sensors[ABIT_UGURU_TEMP_SENSOR]) {
1004                 u8 orig_val = data->pwm_settings[attr->index][0];
1005                 u8 address = data->bank1_address[ABIT_UGURU_TEMP_SENSOR][val];
1006                 data->pwm_settings[attr->index][0] &= 0xF0;
1007                 data->pwm_settings[attr->index][0] |= address;
1008                 if (data->pwm_settings[attr->index][0] != orig_val) {
1009                         if (abituguru_write(data, ABIT_UGURU_FAN_PWM + 1,
1010                                         attr->index,
1011                                         data->pwm_settings[attr->index],
1012                                         5) < 1) {
1013                                 data->pwm_settings[attr->index][0] = orig_val;
1014                                 ret = -EIO;
1015                         }
1016                 }
1017         }
1018         else
1019                 ret = -EINVAL;
1020         mutex_unlock(&data->update_lock);
1021         return ret;
1022 }
1023
1024 static ssize_t show_pwm_enable(struct device *dev,
1025         struct device_attribute *devattr, char *buf)
1026 {
1027         struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
1028         struct abituguru_data *data = dev_get_drvdata(dev);
1029         int res = 0;
1030         if (data->pwm_settings[attr->index][0] & ABIT_UGURU_FAN_PWM_ENABLE)
1031                 res = 2;
1032         return sprintf(buf, "%d\n", res);
1033 }
1034
1035 static ssize_t store_pwm_enable(struct device *dev, struct device_attribute
1036         *devattr, const char *buf, size_t count)
1037 {
1038         struct sensor_device_attribute_2 *attr = to_sensor_dev_attr_2(devattr);
1039         struct abituguru_data *data = dev_get_drvdata(dev);
1040         u8 orig_val, user_val = simple_strtoul(buf, NULL, 10);
1041         ssize_t ret = count;
1042
1043         mutex_lock(&data->update_lock);
1044         orig_val = data->pwm_settings[attr->index][0];
1045         switch (user_val) {
1046                 case 0:
1047                         data->pwm_settings[attr->index][0] &=
1048                                 ~ABIT_UGURU_FAN_PWM_ENABLE;
1049                         break;
1050                 case 2:
1051                         data->pwm_settings[attr->index][0] |=
1052                                 ABIT_UGURU_FAN_PWM_ENABLE;
1053                         break;
1054                 default:
1055                         ret = -EINVAL;
1056         }
1057         if ((data->pwm_settings[attr->index][0] != orig_val) &&
1058                         (abituguru_write(data, ABIT_UGURU_FAN_PWM + 1,
1059                         attr->index, data->pwm_settings[attr->index],
1060                         5) < 1)) {
1061                 data->pwm_settings[attr->index][0] = orig_val;
1062                 ret = -EIO;
1063         }
1064         mutex_unlock(&data->update_lock);
1065         return ret;
1066 }
1067
1068 static ssize_t show_name(struct device *dev,
1069         struct device_attribute *devattr, char *buf)
1070 {
1071         return sprintf(buf, "%s\n", ABIT_UGURU_NAME);
1072 }
1073
1074 /* Sysfs attr templates, the real entries are generated automatically. */
1075 static const
1076 struct sensor_device_attribute_2 abituguru_sysfs_bank1_templ[2][9] = {
1077         {
1078         SENSOR_ATTR_2(in%d_input, 0444, show_bank1_value, NULL, 0, 0),
1079         SENSOR_ATTR_2(in%d_min, 0644, show_bank1_setting,
1080                 store_bank1_setting, 1, 0),
1081         SENSOR_ATTR_2(in%d_min_alarm, 0444, show_bank1_alarm, NULL,
1082                 ABIT_UGURU_VOLT_LOW_ALARM_FLAG, 0),
1083         SENSOR_ATTR_2(in%d_max, 0644, show_bank1_setting,
1084                 store_bank1_setting, 2, 0),
1085         SENSOR_ATTR_2(in%d_max_alarm, 0444, show_bank1_alarm, NULL,
1086                 ABIT_UGURU_VOLT_HIGH_ALARM_FLAG, 0),
1087         SENSOR_ATTR_2(in%d_beep, 0644, show_bank1_mask,
1088                 store_bank1_mask, ABIT_UGURU_BEEP_ENABLE, 0),
1089         SENSOR_ATTR_2(in%d_shutdown, 0644, show_bank1_mask,
1090                 store_bank1_mask, ABIT_UGURU_SHUTDOWN_ENABLE, 0),
1091         SENSOR_ATTR_2(in%d_min_alarm_enable, 0644, show_bank1_mask,
1092                 store_bank1_mask, ABIT_UGURU_VOLT_LOW_ALARM_ENABLE, 0),
1093         SENSOR_ATTR_2(in%d_max_alarm_enable, 0644, show_bank1_mask,
1094                 store_bank1_mask, ABIT_UGURU_VOLT_HIGH_ALARM_ENABLE, 0),
1095         }, {
1096         SENSOR_ATTR_2(temp%d_input, 0444, show_bank1_value, NULL, 0, 0),
1097         SENSOR_ATTR_2(temp%d_alarm, 0444, show_bank1_alarm, NULL,
1098                 ABIT_UGURU_TEMP_HIGH_ALARM_FLAG, 0),
1099         SENSOR_ATTR_2(temp%d_max, 0644, show_bank1_setting,
1100                 store_bank1_setting, 1, 0),
1101         SENSOR_ATTR_2(temp%d_crit, 0644, show_bank1_setting,
1102                 store_bank1_setting, 2, 0),
1103         SENSOR_ATTR_2(temp%d_beep, 0644, show_bank1_mask,
1104                 store_bank1_mask, ABIT_UGURU_BEEP_ENABLE, 0),
1105         SENSOR_ATTR_2(temp%d_shutdown, 0644, show_bank1_mask,
1106                 store_bank1_mask, ABIT_UGURU_SHUTDOWN_ENABLE, 0),
1107         SENSOR_ATTR_2(temp%d_alarm_enable, 0644, show_bank1_mask,
1108                 store_bank1_mask, ABIT_UGURU_TEMP_HIGH_ALARM_ENABLE, 0),
1109         }
1110 };
1111
1112 static const struct sensor_device_attribute_2 abituguru_sysfs_fan_templ[6] = {
1113         SENSOR_ATTR_2(fan%d_input, 0444, show_bank2_value, NULL, 0, 0),
1114         SENSOR_ATTR_2(fan%d_alarm, 0444, show_bank2_alarm, NULL, 0, 0),
1115         SENSOR_ATTR_2(fan%d_min, 0644, show_bank2_setting,
1116                 store_bank2_setting, 1, 0),
1117         SENSOR_ATTR_2(fan%d_beep, 0644, show_bank2_mask,
1118                 store_bank2_mask, ABIT_UGURU_BEEP_ENABLE, 0),
1119         SENSOR_ATTR_2(fan%d_shutdown, 0644, show_bank2_mask,
1120                 store_bank2_mask, ABIT_UGURU_SHUTDOWN_ENABLE, 0),
1121         SENSOR_ATTR_2(fan%d_alarm_enable, 0644, show_bank2_mask,
1122                 store_bank2_mask, ABIT_UGURU_FAN_LOW_ALARM_ENABLE, 0),
1123 };
1124
1125 static const struct sensor_device_attribute_2 abituguru_sysfs_pwm_templ[6] = {
1126         SENSOR_ATTR_2(pwm%d_enable, 0644, show_pwm_enable,
1127                 store_pwm_enable, 0, 0),
1128         SENSOR_ATTR_2(pwm%d_auto_channels_temp, 0644, show_pwm_sensor,
1129                 store_pwm_sensor, 0, 0),
1130         SENSOR_ATTR_2(pwm%d_auto_point1_pwm, 0644, show_pwm_setting,
1131                 store_pwm_setting, 1, 0),
1132         SENSOR_ATTR_2(pwm%d_auto_point2_pwm, 0644, show_pwm_setting,
1133                 store_pwm_setting, 2, 0),
1134         SENSOR_ATTR_2(pwm%d_auto_point1_temp, 0644, show_pwm_setting,
1135                 store_pwm_setting, 3, 0),
1136         SENSOR_ATTR_2(pwm%d_auto_point2_temp, 0644, show_pwm_setting,
1137                 store_pwm_setting, 4, 0),
1138 };
1139
1140 static struct sensor_device_attribute_2 abituguru_sysfs_attr[] = {
1141         SENSOR_ATTR_2(name, 0444, show_name, NULL, 0, 0),
1142 };
1143
1144 static int __devinit abituguru_probe(struct platform_device *pdev)
1145 {
1146         struct abituguru_data *data;
1147         int i, j, used, sysfs_names_free, sysfs_attr_i, res = -ENODEV;
1148         char *sysfs_filename;
1149
1150         /* El weirdo probe order, to keep the sysfs order identical to the
1151            BIOS and window-appliction listing order. */
1152         const u8 probe_order[ABIT_UGURU_MAX_BANK1_SENSORS] = {
1153                 0x00, 0x01, 0x03, 0x04, 0x0A, 0x08, 0x0E, 0x02,
1154                 0x09, 0x06, 0x05, 0x0B, 0x0F, 0x0D, 0x07, 0x0C };
1155
1156         if (!(data = kzalloc(sizeof(struct abituguru_data), GFP_KERNEL)))
1157                 return -ENOMEM;
1158
1159         data->addr = platform_get_resource(pdev, IORESOURCE_IO, 0)->start;
1160         mutex_init(&data->update_lock);
1161         platform_set_drvdata(pdev, data);
1162
1163         /* See if the uGuru is ready */
1164         if (inb_p(data->addr + ABIT_UGURU_DATA) == ABIT_UGURU_STATUS_INPUT)
1165                 data->uguru_ready = 1;
1166
1167         /* Completely read the uGuru this has 2 purposes:
1168            - testread / see if one really is there.
1169            - make an in memory copy of all the uguru settings for future use. */
1170         if (abituguru_read(data, ABIT_UGURU_ALARM_BANK, 0,
1171                         data->alarms, 3, ABIT_UGURU_MAX_RETRIES) != 3)
1172                 goto abituguru_probe_error;
1173
1174         for (i = 0; i < ABIT_UGURU_MAX_BANK1_SENSORS; i++) {
1175                 if (abituguru_read(data, ABIT_UGURU_SENSOR_BANK1, i,
1176                                 &data->bank1_value[i], 1,
1177                                 ABIT_UGURU_MAX_RETRIES) != 1)
1178                         goto abituguru_probe_error;
1179                 if (abituguru_read(data, ABIT_UGURU_SENSOR_BANK1+1, i,
1180                                 data->bank1_settings[i], 3,
1181                                 ABIT_UGURU_MAX_RETRIES) != 3)
1182                         goto abituguru_probe_error;
1183         }
1184         /* Note: We don't know how many bank2 sensors / pwms there really are,
1185            but in order to "detect" this we need to read the maximum amount
1186            anyways. If we read sensors/pwms not there we'll just read crap
1187            this can't hurt. We need the detection because we don't want
1188            unwanted writes, which will hurt! */
1189         for (i = 0; i < ABIT_UGURU_MAX_BANK2_SENSORS; i++) {
1190                 if (abituguru_read(data, ABIT_UGURU_SENSOR_BANK2, i,
1191                                 &data->bank2_value[i], 1,
1192                                 ABIT_UGURU_MAX_RETRIES) != 1)
1193                         goto abituguru_probe_error;
1194                 if (abituguru_read(data, ABIT_UGURU_SENSOR_BANK2+1, i,
1195                                 data->bank2_settings[i], 2,
1196                                 ABIT_UGURU_MAX_RETRIES) != 2)
1197                         goto abituguru_probe_error;
1198         }
1199         for (i = 0; i < ABIT_UGURU_MAX_PWMS; i++) {
1200                 if (abituguru_read(data, ABIT_UGURU_FAN_PWM, i,
1201                                 data->pwm_settings[i], 5,
1202                                 ABIT_UGURU_MAX_RETRIES) != 5)
1203                         goto abituguru_probe_error;
1204         }
1205         data->last_updated = jiffies;
1206
1207         /* Detect sensor types and fill the sysfs attr for bank1 */
1208         sysfs_attr_i = 0;
1209         sysfs_filename = data->sysfs_names;
1210         sysfs_names_free = ABITUGURU_SYSFS_NAMES_LENGTH;
1211         for (i = 0; i < ABIT_UGURU_MAX_BANK1_SENSORS; i++) {
1212                 res = abituguru_detect_bank1_sensor_type(data, probe_order[i]);
1213                 if (res < 0)
1214                         goto abituguru_probe_error;
1215                 if (res == ABIT_UGURU_NC)
1216                         continue;
1217
1218                 /* res 1 (temp) sensors have 7 sysfs entries, 0 (in) 9 */
1219                 for (j = 0; j < (res ? 7 : 9); j++) {
1220                         used = snprintf(sysfs_filename, sysfs_names_free,
1221                                 abituguru_sysfs_bank1_templ[res][j].dev_attr.
1222                                 attr.name, data->bank1_sensors[res] + res)
1223                                 + 1;
1224                         data->sysfs_attr[sysfs_attr_i] =
1225                                 abituguru_sysfs_bank1_templ[res][j];
1226                         data->sysfs_attr[sysfs_attr_i].dev_attr.attr.name =
1227                                 sysfs_filename;
1228                         data->sysfs_attr[sysfs_attr_i].index = probe_order[i];
1229                         sysfs_filename += used;
1230                         sysfs_names_free -= used;
1231                         sysfs_attr_i++;
1232                 }
1233                 data->bank1_max_value[probe_order[i]] =
1234                         abituguru_bank1_max_value[res];
1235                 data->bank1_address[res][data->bank1_sensors[res]] =
1236                         probe_order[i];
1237                 data->bank1_sensors[res]++;
1238         }
1239         /* Detect number of sensors and fill the sysfs attr for bank2 (fans) */
1240         abituguru_detect_no_bank2_sensors(data);
1241         for (i = 0; i < data->bank2_sensors; i++) {
1242                 for (j = 0; j < ARRAY_SIZE(abituguru_sysfs_fan_templ); j++) {
1243                         used = snprintf(sysfs_filename, sysfs_names_free,
1244                                 abituguru_sysfs_fan_templ[j].dev_attr.attr.name,
1245                                 i + 1) + 1;
1246                         data->sysfs_attr[sysfs_attr_i] =
1247                                 abituguru_sysfs_fan_templ[j];
1248                         data->sysfs_attr[sysfs_attr_i].dev_attr.attr.name =
1249                                 sysfs_filename;
1250                         data->sysfs_attr[sysfs_attr_i].index = i;
1251                         sysfs_filename += used;
1252                         sysfs_names_free -= used;
1253                         sysfs_attr_i++;
1254                 }
1255         }
1256         /* Detect number of sensors and fill the sysfs attr for pwms */
1257         abituguru_detect_no_pwms(data);
1258         for (i = 0; i < data->pwms; i++) {
1259                 for (j = 0; j < ARRAY_SIZE(abituguru_sysfs_pwm_templ); j++) {
1260                         used = snprintf(sysfs_filename, sysfs_names_free,
1261                                 abituguru_sysfs_pwm_templ[j].dev_attr.attr.name,
1262                                 i + 1) + 1;
1263                         data->sysfs_attr[sysfs_attr_i] =
1264                                 abituguru_sysfs_pwm_templ[j];
1265                         data->sysfs_attr[sysfs_attr_i].dev_attr.attr.name =
1266                                 sysfs_filename;
1267                         data->sysfs_attr[sysfs_attr_i].index = i;
1268                         sysfs_filename += used;
1269                         sysfs_names_free -= used;
1270                         sysfs_attr_i++;
1271                 }
1272         }
1273         /* Fail safe check, this should never happen! */
1274         if (sysfs_names_free < 0) {
1275                 pr_err("Fatal error ran out of space for sysfs attr names. %s %s",
1276                        never_happen, report_this);
1277                 res = -ENAMETOOLONG;
1278                 goto abituguru_probe_error;
1279         }
1280         pr_info("found Abit uGuru\n");
1281
1282         /* Register sysfs hooks */
1283         for (i = 0; i < sysfs_attr_i; i++)
1284                 if (device_create_file(&pdev->dev,
1285                                 &data->sysfs_attr[i].dev_attr))
1286                         goto abituguru_probe_error;
1287         for (i = 0; i < ARRAY_SIZE(abituguru_sysfs_attr); i++)
1288                 if (device_create_file(&pdev->dev,
1289                                 &abituguru_sysfs_attr[i].dev_attr))
1290                         goto abituguru_probe_error;
1291
1292         data->hwmon_dev = hwmon_device_register(&pdev->dev);
1293         if (!IS_ERR(data->hwmon_dev))
1294                 return 0; /* success */
1295
1296         res = PTR_ERR(data->hwmon_dev);
1297 abituguru_probe_error:
1298         for (i = 0; data->sysfs_attr[i].dev_attr.attr.name; i++)
1299                 device_remove_file(&pdev->dev, &data->sysfs_attr[i].dev_attr);
1300         for (i = 0; i < ARRAY_SIZE(abituguru_sysfs_attr); i++)
1301                 device_remove_file(&pdev->dev,
1302                         &abituguru_sysfs_attr[i].dev_attr);
1303         platform_set_drvdata(pdev, NULL);
1304         kfree(data);
1305         return res;
1306 }
1307
1308 static int __devexit abituguru_remove(struct platform_device *pdev)
1309 {
1310         int i;
1311         struct abituguru_data *data = platform_get_drvdata(pdev);
1312
1313         hwmon_device_unregister(data->hwmon_dev);
1314         for (i = 0; data->sysfs_attr[i].dev_attr.attr.name; i++)
1315                 device_remove_file(&pdev->dev, &data->sysfs_attr[i].dev_attr);
1316         for (i = 0; i < ARRAY_SIZE(abituguru_sysfs_attr); i++)
1317                 device_remove_file(&pdev->dev,
1318                         &abituguru_sysfs_attr[i].dev_attr);
1319         platform_set_drvdata(pdev, NULL);
1320         kfree(data);
1321
1322         return 0;
1323 }
1324
1325 static struct abituguru_data *abituguru_update_device(struct device *dev)
1326 {
1327         int i, err;
1328         struct abituguru_data *data = dev_get_drvdata(dev);
1329         /* fake a complete successful read if no update necessary. */
1330         char success = 1;
1331
1332         mutex_lock(&data->update_lock);
1333         if (time_after(jiffies, data->last_updated + HZ)) {
1334                 success = 0;
1335                 if ((err = abituguru_read(data, ABIT_UGURU_ALARM_BANK, 0,
1336                                 data->alarms, 3, 0)) != 3)
1337                         goto LEAVE_UPDATE;
1338                 for (i = 0; i < ABIT_UGURU_MAX_BANK1_SENSORS; i++) {
1339                         if ((err = abituguru_read(data,
1340                                         ABIT_UGURU_SENSOR_BANK1, i,
1341                                         &data->bank1_value[i], 1, 0)) != 1)
1342                                 goto LEAVE_UPDATE;
1343                         if ((err = abituguru_read(data,
1344                                         ABIT_UGURU_SENSOR_BANK1 + 1, i,
1345                                         data->bank1_settings[i], 3, 0)) != 3)
1346                                 goto LEAVE_UPDATE;
1347                 }
1348                 for (i = 0; i < data->bank2_sensors; i++)
1349                         if ((err = abituguru_read(data,
1350                                         ABIT_UGURU_SENSOR_BANK2, i,
1351                                         &data->bank2_value[i], 1, 0)) != 1)
1352                                 goto LEAVE_UPDATE;
1353                 /* success! */
1354                 success = 1;
1355                 data->update_timeouts = 0;
1356 LEAVE_UPDATE:
1357                 /* handle timeout condition */
1358                 if (!success && (err == -EBUSY || err >= 0)) {
1359                         /* No overflow please */
1360                         if (data->update_timeouts < 255u)
1361                                 data->update_timeouts++;
1362                         if (data->update_timeouts <= ABIT_UGURU_MAX_TIMEOUTS) {
1363                                 ABIT_UGURU_DEBUG(3, "timeout exceeded, will "
1364                                         "try again next update\n");
1365                                 /* Just a timeout, fake a successful read */
1366                                 success = 1;
1367                         } else
1368                                 ABIT_UGURU_DEBUG(1, "timeout exceeded %d "
1369                                         "times waiting for more input state\n",
1370                                         (int)data->update_timeouts);
1371                 }
1372                 /* On success set last_updated */
1373                 if (success)
1374                         data->last_updated = jiffies;
1375         }
1376         mutex_unlock(&data->update_lock);
1377
1378         if (success)
1379                 return data;
1380         else
1381                 return NULL;
1382 }
1383
1384 #ifdef CONFIG_PM
1385 static int abituguru_suspend(struct platform_device *pdev, pm_message_t state)
1386 {
1387         struct abituguru_data *data = platform_get_drvdata(pdev);
1388         /* make sure all communications with the uguru are done and no new
1389            ones are started */
1390         mutex_lock(&data->update_lock);
1391         return 0;
1392 }
1393
1394 static int abituguru_resume(struct platform_device *pdev)
1395 {
1396         struct abituguru_data *data = platform_get_drvdata(pdev);
1397         /* See if the uGuru is still ready */
1398         if (inb_p(data->addr + ABIT_UGURU_DATA) != ABIT_UGURU_STATUS_INPUT)
1399                 data->uguru_ready = 0;
1400         mutex_unlock(&data->update_lock);
1401         return 0;
1402 }
1403 #else
1404 #define abituguru_suspend       NULL
1405 #define abituguru_resume        NULL
1406 #endif /* CONFIG_PM */
1407
1408 static struct platform_driver abituguru_driver = {
1409         .driver = {
1410                 .owner  = THIS_MODULE,
1411                 .name   = ABIT_UGURU_NAME,
1412         },
1413         .probe          = abituguru_probe,
1414         .remove         = __devexit_p(abituguru_remove),
1415         .suspend        = abituguru_suspend,
1416         .resume         = abituguru_resume,
1417 };
1418
1419 static int __init abituguru_detect(void)
1420 {
1421         /* See if there is an uguru there. After a reboot uGuru will hold 0x00
1422            at DATA and 0xAC, when this driver has already been loaded once
1423            DATA will hold 0x08. For most uGuru's CMD will hold 0xAC in either
1424            scenario but some will hold 0x00.
1425            Some uGuru's initially hold 0x09 at DATA and will only hold 0x08
1426            after reading CMD first, so CMD must be read first! */
1427         u8 cmd_val = inb_p(ABIT_UGURU_BASE + ABIT_UGURU_CMD);
1428         u8 data_val = inb_p(ABIT_UGURU_BASE + ABIT_UGURU_DATA);
1429         if (((data_val == 0x00) || (data_val == 0x08)) &&
1430             ((cmd_val == 0x00) || (cmd_val == 0xAC)))
1431                 return ABIT_UGURU_BASE;
1432
1433         ABIT_UGURU_DEBUG(2, "no Abit uGuru found, data = 0x%02X, cmd = "
1434                 "0x%02X\n", (unsigned int)data_val, (unsigned int)cmd_val);
1435
1436         if (force) {
1437                 pr_info("Assuming Abit uGuru is present because of \"force\" parameter\n");
1438                 return ABIT_UGURU_BASE;
1439         }
1440
1441         /* No uGuru found */
1442         return -ENODEV;
1443 }
1444
1445 static struct platform_device *abituguru_pdev;
1446
1447 static int __init abituguru_init(void)
1448 {
1449         int address, err;
1450         struct resource res = { .flags = IORESOURCE_IO };
1451         const char *board_vendor = dmi_get_system_info(DMI_BOARD_VENDOR);
1452
1453         /* safety check, refuse to load on non Abit motherboards */
1454         if (!force && (!board_vendor ||
1455                         strcmp(board_vendor, "http://www.abit.com.tw/")))
1456                 return -ENODEV;
1457
1458         address = abituguru_detect();
1459         if (address < 0)
1460                 return address;
1461
1462         err = platform_driver_register(&abituguru_driver);
1463         if (err)
1464                 goto exit;
1465
1466         abituguru_pdev = platform_device_alloc(ABIT_UGURU_NAME, address);
1467         if (!abituguru_pdev) {
1468                 pr_err("Device allocation failed\n");
1469                 err = -ENOMEM;
1470                 goto exit_driver_unregister;
1471         }
1472
1473         res.start = address;
1474         res.end = address + ABIT_UGURU_REGION_LENGTH - 1;
1475         res.name = ABIT_UGURU_NAME;
1476
1477         err = platform_device_add_resources(abituguru_pdev, &res, 1);
1478         if (err) {
1479                 pr_err("Device resource addition failed (%d)\n", err);
1480                 goto exit_device_put;
1481         }
1482
1483         err = platform_device_add(abituguru_pdev);
1484         if (err) {
1485                 pr_err("Device addition failed (%d)\n", err);
1486                 goto exit_device_put;
1487         }
1488
1489         return 0;
1490
1491 exit_device_put:
1492         platform_device_put(abituguru_pdev);
1493 exit_driver_unregister:
1494         platform_driver_unregister(&abituguru_driver);
1495 exit:
1496         return err;
1497 }
1498
1499 static void __exit abituguru_exit(void)
1500 {
1501         platform_device_unregister(abituguru_pdev);
1502         platform_driver_unregister(&abituguru_driver);
1503 }
1504
1505 MODULE_AUTHOR("Hans de Goede <hdegoede@redhat.com>");
1506 MODULE_DESCRIPTION("Abit uGuru Sensor device");
1507 MODULE_LICENSE("GPL");
1508
1509 module_init(abituguru_init);
1510 module_exit(abituguru_exit);