|
@@ -30,6 +30,7 @@
|
|
|
#include <linux/platform_device.h>
|
|
|
#include <linux/hwmon.h>
|
|
|
#include <linux/hwmon-sysfs.h>
|
|
|
+#include <linux/dmi.h>
|
|
|
#include <asm/io.h>
|
|
|
|
|
|
/* uGuru3 bank addresses */
|
|
@@ -1112,11 +1113,12 @@ static int __init abituguru3_detect(void)
|
|
|
{
|
|
|
/* See if there is an uguru3 there. An idle uGuru3 will hold 0x00 or
|
|
|
0x08 at DATA and 0xAC at CMD. Sometimes the uGuru3 will hold 0x05
|
|
|
- at CMD instead, why is unknown. So we test for 0x05 too. */
|
|
|
+ or 0x55 at CMD instead, why is unknown. */
|
|
|
u8 data_val = inb_p(ABIT_UGURU3_BASE + ABIT_UGURU3_DATA);
|
|
|
u8 cmd_val = inb_p(ABIT_UGURU3_BASE + ABIT_UGURU3_CMD);
|
|
|
if (((data_val == 0x00) || (data_val == 0x08)) &&
|
|
|
- ((cmd_val == 0xAC) || (cmd_val == 0x05)))
|
|
|
+ ((cmd_val == 0xAC) || (cmd_val == 0x05) ||
|
|
|
+ (cmd_val == 0x55)))
|
|
|
return ABIT_UGURU3_BASE;
|
|
|
|
|
|
ABIT_UGURU3_DEBUG("no Abit uGuru3 found, data = 0x%02X, cmd = "
|
|
@@ -1139,6 +1141,15 @@ static int __init abituguru3_init(void)
|
|
|
int address, err;
|
|
|
struct resource res = { .flags = IORESOURCE_IO };
|
|
|
|
|
|
+#ifdef CONFIG_DMI
|
|
|
+ const char *board_vendor = dmi_get_system_info(DMI_BOARD_VENDOR);
|
|
|
+
|
|
|
+ /* safety check, refuse to load on non Abit motherboards */
|
|
|
+ if (!force && (!board_vendor ||
|
|
|
+ strcmp(board_vendor, "http://www.abit.com.tw/")))
|
|
|
+ return -ENODEV;
|
|
|
+#endif
|
|
|
+
|
|
|
address = abituguru3_detect();
|
|
|
if (address < 0)
|
|
|
return address;
|