Re: [PATCH] hwmon: (abituguru3) Support multiple DMI strings per chip ID (#2)

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

 



Hi,

Looks perfect now.

Acked-by: Hans de Goede<hdegoede@xxxxxxxxxx>

Regards,

Hans


On 09/06/2009 11:15 AM, Alistair John Strachan wrote:
> Most known Abit motherboards have unique uguru chip IDs. However,
> some "refresh" boards keep the same chip ID but have a different
> DMI string. As our DMI board string matching is (necessarily)
> strict, some boards were failing DMI detection, and as the old
> probe method was also failing, the driver would not load.
>
> The only known boards affected by this problem are the IP35 Pro XE
> (vs IP35 Pro) and the AB9 Pro (vs AB9). Is it not sufficient to
> relax the match criteria, as some boards (e.g. the AB9 Quad GT)
> have different uguru chip IDs.
>
> This patch replaces the dmi_name string with a NULL terminated
> array of strings to be matched per uguru chip ID. It has been
> compile and runtime tested (thanks Rune).
>
> References: https://bugs.launchpad.net/bugs/298798
>
> Signed-off-by: Alistair John Strachan<alistair@xxxxxxxxxxxxx>
> Tested-by: Rune Svendsen<runesvend@xxxxxxxxx>
> Cc: Rune Svendsen<runesvend@xxxxxxxxx>
> Cc: Hans de Goede<hdegoede@xxxxxxxxxx>
> Cc: lm-sensors@xxxxxxxxxxxxxx
>
> ---
>   drivers/hwmon/abituguru3.c |   63 +++++++++++++++++++++++--------------------
>   1 files changed, 34 insertions(+), 29 deletions(-)
>
> diff --git a/drivers/hwmon/abituguru3.c b/drivers/hwmon/abituguru3.c
> index 7d3f15d..5203ec2 100644
> --- a/drivers/hwmon/abituguru3.c
> +++ b/drivers/hwmon/abituguru3.c
> @@ -117,9 +117,12 @@ struct abituguru3_sensor_info {
>   	int offset;
>   };
>
> +/* Avoid use of flexible array members */
> +#define ABIT_UGURU3_MAX_DMI_NAMES 2
> +
>   struct abituguru3_motherboard_info {
>   	u16 id;
> -	const char *dmi_name;
> +	const char *dmi_name[ABIT_UGURU3_MAX_DMI_NAMES + 1];
>   	/* + 1 ->  end of sensors indicated by a sensor with name == NULL */
>   	struct abituguru3_sensor_info sensors[ABIT_UGURU3_MAX_NO_SENSORS + 1];
>   };
> @@ -164,7 +167,7 @@ struct abituguru3_data {
>
>   /* Constants */
>   static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
> -	{ 0x000C, NULL /* Unknown, need DMI string */, {
> +	{ 0x000C, { NULL } /* Unknown, need DMI string */, {
>   		{ "CPU Core",		 0, 0, 10, 1, 0 },
>   		{ "DDR",		 1, 0, 10, 1, 0 },
>   		{ "DDR VTT",		 2, 0, 10, 1, 0 },
> @@ -186,7 +189,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
>   		{ "AUX1 Fan",		35, 2, 60, 1, 0 },
>   		{ NULL, 0, 0, 0, 0, 0 } }
>   	},
> -	{ 0x000D, NULL /* Abit AW8, need DMI string */, {
> +	{ 0x000D, { NULL } /* Abit AW8, need DMI string */, {
>   		{ "CPU Core",		 0, 0, 10, 1, 0 },
>   		{ "DDR",		 1, 0, 10, 1, 0 },
>   		{ "DDR VTT",		 2, 0, 10, 1, 0 },
> @@ -215,7 +218,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
>   		{ "AUX5 Fan",		39, 2, 60, 1, 0 },
>   		{ NULL, 0, 0, 0, 0, 0 } }
>   	},
> -	{ 0x000E, NULL /* AL-8, need DMI string */, {
> +	{ 0x000E, { NULL } /* AL-8, need DMI string */, {
>   		{ "CPU Core",		 0, 0, 10, 1, 0 },
>   		{ "DDR",		 1, 0, 10, 1, 0 },
>   		{ "DDR VTT",		 2, 0, 10, 1, 0 },
> @@ -236,7 +239,8 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
>   		{ "SYS Fan",		34, 2, 60, 1, 0 },
>   		{ NULL, 0, 0, 0, 0, 0 } }
>   	},
> -	{ 0x000F, NULL /* Unknown, need DMI string */, {
> +	{ 0x000F, { NULL } /* Unknown, need DMI string */, {
> +
>   		{ "CPU Core",		 0, 0, 10, 1, 0 },
>   		{ "DDR",		 1, 0, 10, 1, 0 },
>   		{ "DDR VTT",		 2, 0, 10, 1, 0 },
> @@ -257,7 +261,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
>   		{ "SYS Fan",		34, 2, 60, 1, 0 },
>   		{ NULL, 0, 0, 0, 0, 0 } }
>   	},
> -	{ 0x0010, NULL /* Abit NI8 SLI GR, need DMI string */, {
> +	{ 0x0010, { NULL } /* Abit NI8 SLI GR, need DMI string */, {
>   		{ "CPU Core",		 0, 0, 10, 1, 0 },
>   		{ "DDR",		 1, 0, 10, 1, 0 },
>   		{ "DDR VTT",		 2, 0, 10, 1, 0 },
> @@ -279,7 +283,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
>   		{ "OTES1 Fan",		36, 2, 60, 1, 0 },
>   		{ NULL, 0, 0, 0, 0, 0 } }
>   	},
> -	{ 0x0011, "AT8 32X", {
> +	{ 0x0011, { "AT8 32X", NULL }, {
>   		{ "CPU Core",		 0, 0, 10, 1, 0 },
>   		{ "DDR",		 1, 0, 20, 1, 0 },
>   		{ "DDR VTT",		 2, 0, 10, 1, 0 },
> @@ -306,7 +310,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
>   		{ "AUX3 Fan",		37, 2, 60, 1, 0 },
>   		{ NULL, 0, 0, 0, 0, 0 } }
>   	},
> -	{ 0x0012, NULL /* Abit AN8 32X, need DMI string */, {
> +	{ 0x0012, { NULL } /* Abit AN8 32X, need DMI string */, {
>   		{ "CPU Core",		 0, 0, 10, 1, 0 },
>   		{ "DDR",		 1, 0, 20, 1, 0 },
>   		{ "DDR VTT",		 2, 0, 10, 1, 0 },
> @@ -328,7 +332,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
>   		{ "AUX1 Fan",		36, 2, 60, 1, 0 },
>   		{ NULL, 0, 0, 0, 0, 0 } }
>   	},
> -	{ 0x0013, NULL /* Abit AW8D, need DMI string */, {
> +	{ 0x0013, { NULL } /* Abit AW8D, need DMI string */, {
>   		{ "CPU Core",		 0, 0, 10, 1, 0 },
>   		{ "DDR",		 1, 0, 10, 1, 0 },
>   		{ "DDR VTT",		 2, 0, 10, 1, 0 },
> @@ -357,7 +361,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
>   		{ "AUX5 Fan",		39, 2, 60, 1, 0 },
>   		{ NULL, 0, 0, 0, 0, 0 } }
>   	},
> -	{ 0x0014, "AB9", /* + AB9 Pro */ {
> +	{ 0x0014, { "AB9", "AB9 Pro", NULL }, {
>   		{ "CPU Core",		 0, 0, 10, 1, 0 },
>   		{ "DDR",		 1, 0, 10, 1, 0 },
>   		{ "DDR VTT",		 2, 0, 10, 1, 0 },
> @@ -378,7 +382,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
>   		{ "SYS Fan",		34, 2, 60, 1, 0 },
>   		{ NULL, 0, 0, 0, 0, 0 } }
>   	},
> -	{ 0x0015, NULL /* Unknown, need DMI string */, {
> +	{ 0x0015, { NULL } /* Unknown, need DMI string */, {
>   		{ "CPU Core",		 0, 0, 10, 1, 0 },
>   		{ "DDR",		 1, 0, 20, 1, 0 },
>   		{ "DDR VTT",		 2, 0, 10, 1, 0 },
> @@ -402,7 +406,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
>   		{ "AUX3 Fan",		36, 2, 60, 1, 0 },
>   		{ NULL, 0, 0, 0, 0, 0 } }
>   	},
> -	{ 0x0016, "AW9D-MAX", {
> +	{ 0x0016, { "AW9D-MAX", NULL }, {
>   		{ "CPU Core",		 0, 0, 10, 1, 0 },
>   		{ "DDR2",		 1, 0, 20, 1, 0 },
>   		{ "DDR2 VTT",		 2, 0, 10, 1, 0 },
> @@ -430,7 +434,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
>   		{ "OTES1 Fan",		38, 2, 60, 1, 0 },
>   		{ NULL, 0, 0, 0, 0, 0 } }
>   	},
> -	{ 0x0017, NULL /* Unknown, need DMI string */, {
> +	{ 0x0017, { NULL } /* Unknown, need DMI string */, {
>   		{ "CPU Core",		 0, 0, 10, 1, 0 },
>   		{ "DDR2",		 1, 0, 20, 1, 0 },
>   		{ "DDR2 VTT",		 2, 0, 10, 1, 0 },
> @@ -455,7 +459,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
>   		{ "AUX3 FAN",		37, 2, 60, 1, 0 },
>   		{ NULL, 0, 0, 0, 0, 0 } }
>   	},
> -	{ 0x0018, "AB9 QuadGT", {
> +	{ 0x0018, { "AB9 QuadGT", NULL }, {
>   		{ "CPU Core",		 0, 0, 10, 1, 0 },
>   		{ "DDR2",		 1, 0, 20, 1, 0 },
>   		{ "DDR2 VTT",		 2, 0, 10, 1, 0 },
> @@ -482,7 +486,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
>   		{ "AUX3 Fan",		36, 2, 60, 1, 0 },
>   		{ NULL, 0, 0, 0, 0, 0 } }
>   	},
> -	{ 0x0019, "IN9 32X MAX", {
> +	{ 0x0019, { "IN9 32X MAX", NULL }, {
>   		{ "CPU Core",		 7, 0, 10, 1, 0 },
>   		{ "DDR2",		13, 0, 20, 1, 0 },
>   		{ "DDR2 VTT",		14, 0, 10, 1, 0 },
> @@ -509,7 +513,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
>   		{ "AUX3 FAN",		36, 2, 60, 1, 0 },
>   		{ NULL, 0, 0, 0, 0, 0 } }
>   	},
> -	{ 0x001A, "IP35 Pro", {
> +	{ 0x001A, { "IP35 Pro", "IP35 Pro XE", NULL }, {
>   		{ "CPU Core",		 0, 0, 10, 1, 0 },
>   		{ "DDR2",		 1, 0, 20, 1, 0 },
>   		{ "DDR2 VTT",		 2, 0, 10, 1, 0 },
> @@ -537,7 +541,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
>   		{ "AUX4 Fan",		37, 2, 60, 1, 0 },
>   		{ NULL, 0, 0, 0, 0, 0 } }
>   	},
> -	{ 0x001B, NULL /* Unknown, need DMI string */, {
> +	{ 0x001B, { NULL } /* Unknown, need DMI string */, {
>   		{ "CPU Core",		 0, 0, 10, 1, 0 },
>   		{ "DDR3",		 1, 0, 20, 1, 0 },
>   		{ "DDR3 VTT",		 2, 0, 10, 1, 0 },
> @@ -564,7 +568,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
>   		{ "AUX3 Fan",		36, 2, 60, 1, 0 },
>   		{ NULL, 0, 0, 0, 0, 0 } }
>   	},
> -	{ 0x001C, "IX38 QuadGT", {
> +	{ 0x001C, { "IX38 QuadGT", NULL }, {
>   		{ "CPU Core",		 0, 0, 10, 1, 0 },
>   		{ "DDR2",		 1, 0, 20, 1, 0 },
>   		{ "DDR2 VTT",		 2, 0, 10, 1, 0 },
> @@ -591,7 +595,7 @@ static const struct abituguru3_motherboard_info abituguru3_motherboards[] = {
>   		{ "AUX3 Fan",		36, 2, 60, 1, 0 },
>   		{ NULL, 0, 0, 0, 0, 0 } }
>   	},
> -	{ 0x0000, NULL, { { NULL, 0, 0, 0, 0, 0 } } }
> +	{ 0x0000, { NULL }, { { NULL, 0, 0, 0, 0, 0 } } }
>   };
>
>
> @@ -947,7 +951,7 @@ static int __devinit abituguru3_probe(struct platform_device *pdev)
>   		"ID: %04X\n", (unsigned int)id);
>
>   #ifdef CONFIG_DMI
> -	if (!abituguru3_motherboards[i].dmi_name) {
> +	if (!abituguru3_motherboards[i].dmi_name[0]) {
>   		printk(KERN_WARNING ABIT_UGURU3_NAME ": this motherboard was "
>   			"not detected using DMI. Please send the output of "
>   			"\"dmidecode\" to the abituguru3 maintainer "
> @@ -1131,6 +1135,7 @@ static int __init abituguru3_dmi_detect(void)
>   {
>   	const char *board_vendor, *board_name;
>   	int i, err = (force) ? 1 : -ENODEV;
> +	const char *const *dmi_name;
>   	size_t sublen;
>
>   	board_vendor = dmi_get_system_info(DMI_BOARD_VENDOR);
> @@ -1151,17 +1156,17 @@ static int __init abituguru3_dmi_detect(void)
>   		sublen--;
>
>   	for (i = 0; abituguru3_motherboards[i].id; i++) {
> -		const char *dmi_name = abituguru3_motherboards[i].dmi_name;
> -		if (!dmi_name || strlen(dmi_name) != sublen)
> -			continue;
> -		if (!strncasecmp(board_name, dmi_name, sublen))
> -			break;
> +		dmi_name = abituguru3_motherboards[i].dmi_name;
> +		for ( ; *dmi_name; dmi_name++) {
> +			if (strlen(*dmi_name) != sublen)
> +				continue;
> +			if (!strncasecmp(board_name, *dmi_name, sublen))
> +				return 0;
> +		}
>   	}
>
> -	if (!abituguru3_motherboards[i].id)
> -		return 1;
> -
> -	return 0;
> +	/* No match found */
> +	return 1;
>   }
>
>   #else /* !CONFIG_DMI */

_______________________________________________
lm-sensors mailing list
lm-sensors@xxxxxxxxxxxxxx
http://lists.lm-sensors.org/mailman/listinfo/lm-sensors

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

  Powered by Linux