PATCH: abituguru3-fix-detect.patch

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Hans,

On Fri, 23 May 2008 16:10:41 +0200, Hans de Goede wrote:
> 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: Hans de Goede <j.w.r.degoede at hhs.nl>

Missing "f".

> diff -up vanilla-2.6.26-rc3-git4/drivers/hwmon/abituguru3.c~ vanilla-2.6.26-rc3-git4/drivers/hwmon/abituguru3.c
> --- vanilla-2.6.26-rc3-git4/drivers/hwmon/abituguru3.c~	2008-05-23 16:03:28.000000000 +0200
> +++ vanilla-2.6.26-rc3-git4/drivers/hwmon/abituguru3.c	2008-05-23 16:03:28.000000000 +0200
> @@ -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 */
> @@ -1111,11 +1112,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 = "
> @@ -1138,6 +1140,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;

Looks good to me.

Acked-by: Jean Delvare <khali at linux-fr.org>

Note though that the #ifdef is not needed as far as I can see. Without
DMI, dmi_get_system_info() will simply return NULL and your code
handles this case properly.

-- 
Jean Delvare




[Index of Archives]     [Linux Kernel]     [Linux Hardware Monitoring]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]

  Powered by Linux