提交 b3aeab0c 编写于 作者: H Hans de Goede 提交者: Mark M. Hoffman

hwmon: (abituguru3) update driver detection

It has been reported that the abituguru3 driver fails to load after a BIOS
update. This patch fixes this by loosening the detection routine so that it
will work after the BIOS update too. To compensate for the now very loose
detection an additional check is added on the DMI Base Board vendor string to
make sure we only load on Abit motherboards, this is the same as the check in
the abituguru (1 / 2) driver.
Signed-of-by: NHans de Goede <j.w.r.degoede@hhs.nl>
Signed-off-by: NAlistair John Strachan <alistair@devzero.co.uk>
Signed-off-by: NMark M. Hoffman <mhoffman@lightlink.com>
上级 25845c22
...@@ -30,6 +30,7 @@ ...@@ -30,6 +30,7 @@
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/hwmon.h> #include <linux/hwmon.h>
#include <linux/hwmon-sysfs.h> #include <linux/hwmon-sysfs.h>
#include <linux/dmi.h>
#include <asm/io.h> #include <asm/io.h>
/* uGuru3 bank addresses */ /* uGuru3 bank addresses */
...@@ -1112,11 +1113,12 @@ static int __init abituguru3_detect(void) ...@@ -1112,11 +1113,12 @@ static int __init abituguru3_detect(void)
{ {
/* See if there is an uguru3 there. An idle uGuru3 will hold 0x00 or /* 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 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 data_val = inb_p(ABIT_UGURU3_BASE + ABIT_UGURU3_DATA);
u8 cmd_val = inb_p(ABIT_UGURU3_BASE + ABIT_UGURU3_CMD); u8 cmd_val = inb_p(ABIT_UGURU3_BASE + ABIT_UGURU3_CMD);
if (((data_val == 0x00) || (data_val == 0x08)) && 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; return ABIT_UGURU3_BASE;
ABIT_UGURU3_DEBUG("no Abit uGuru3 found, data = 0x%02X, cmd = " ABIT_UGURU3_DEBUG("no Abit uGuru3 found, data = 0x%02X, cmd = "
...@@ -1139,6 +1141,15 @@ static int __init abituguru3_init(void) ...@@ -1139,6 +1141,15 @@ static int __init abituguru3_init(void)
int address, err; int address, err;
struct resource res = { .flags = IORESOURCE_IO }; 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(); address = abituguru3_detect();
if (address < 0) if (address < 0)
return address; return address;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册