OpenCores
URL https://opencores.org/ocsvn/test_project/test_project/trunk

Subversion Repositories test_project

[/] [test_project/] [trunk/] [linux_sd_driver/] [drivers/] [hwmon/] [abituguru.c] - Blame information for rev 62

Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

© copyright 1999-2025 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.