Re: patch hwmon-w83627hf-don-t-assume-bank-0.patch queued to -stable tree

From: Olivér Pintér
Date: Wed Oct 31 2007 - 11:49:57 EST


it's fix the sensor type detection (w83627thf)

v2.6.22.10:
Oct 31 16:21:40 pancs sensord: mb_temp: 21 C (limit = 40 C,
hysteresis = 37 C, sensors = thermistor)
Oct 31 16:21:40 pancs sensord: cpu_temp: 30.5 C (limit = 54 C,
hysteresis = 47 C, sensor = thermistor)

v2.6.22.10+hwmon_fixes:
Oct 31 16:59:20 pancs sensord: mb_temp: 26 C (limit = 40 C,
hysteresis = 37 C, sensors = thermistor)
Oct 31 16:59:20 pancs sensord: cpu_temp: 29.0 C (limit = 54 C,
hysteresis = 47 C, sensor = PII/Celeron diode)
--
Signed-off-by: Oliver Pinter <oliver.pntr@xxxxxxxxx>


On 10/31/07, gregkh@xxxxxxx <gregkh@xxxxxxx> wrote:
>
> This is a note to let you know that we have just queued up the patch titled
>
> Subject: hwmon/w83627hf: Don't assume bank 0
>
> to the 2.6.23-stable tree. Its filename is
>
> hwmon-w83627hf-don-t-assume-bank-0.patch
>
> A git repo of this tree can be found at
>
> http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
>
>
> From khali@xxxxxxxxxxxx Wed Oct 31 07:59:11 2007
> From: Jean Delvare <khali@xxxxxxxxxxxx>
> Date: Mon, 15 Oct 2007 15:02:42 +0200
> Subject: hwmon/w83627hf: Don't assume bank 0
> To: stable@xxxxxxxxxx
> Cc: "Mark M. Hoffman" <mhoffman@xxxxxxxxxxxxx>
> Message-ID: <20071015150242.643837b8@xxxxxxxxxxxxxxxx>
>
> From: Jean Delvare <khali@xxxxxxxxxxxx>
>
> Already in Linus' tree:
> http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commitdiff;h=d58df9cd788e6fb4962e1c8d5ba7b8b95d639a44
>
> The bank switching code assumes that the bank selector is set to 0
> when the driver is loaded. This might not be the case. This is exactly
> the same bug as was fixed in the w83627ehf driver two months ago:
> http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=0956895aa6f8dc6a33210967252fd7787652537d
>
> In practice, this bug was causing the sensor thermal types to be
> improperly reported for my W83627THF the first time I was loading the
> w83627hf driver. From the driver history, I'd say that it has been
> broken since September 2005 (when we stopped resetting the chip by
> default at driver load.)
>
> Signed-off-by: Jean Delvare <khali@xxxxxxxxxxxx>
> Signed-off-by: Mark M. Hoffman <mhoffman@xxxxxxxxxxxxx>
> Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxx>
>
> ---
> drivers/hwmon/w83627hf.c | 44
> ++++++++++++++++++++++----------------------
> 1 file changed, 22 insertions(+), 22 deletions(-)
>
> --- a/drivers/hwmon/w83627hf.c
> +++ b/drivers/hwmon/w83627hf.c
> @@ -1335,6 +1335,24 @@ static int __devexit w83627hf_remove(str
> }
>
>
> +/* Registers 0x50-0x5f are banked */
> +static inline void w83627hf_set_bank(struct w83627hf_data *data, u16 reg)
> +{
> + if ((reg & 0x00f0) == 0x50) {
> + outb_p(W83781D_REG_BANK, data->addr + W83781D_ADDR_REG_OFFSET);
> + outb_p(reg >> 8, data->addr + W83781D_DATA_REG_OFFSET);
> + }
> +}
> +
> +/* Not strictly necessary, but play it safe for now */
> +static inline void w83627hf_reset_bank(struct w83627hf_data *data, u16 reg)
> +{
> + if (reg & 0xff00) {
> + outb_p(W83781D_REG_BANK, data->addr + W83781D_ADDR_REG_OFFSET);
> + outb_p(0, data->addr + W83781D_DATA_REG_OFFSET);
> + }
> +}
> +
> static int w83627hf_read_value(struct w83627hf_data *data, u16 reg)
> {
> int res, word_sized;
> @@ -1345,12 +1363,7 @@ static int w83627hf_read_value(struct w8
> && (((reg & 0x00ff) == 0x50)
> || ((reg & 0x00ff) == 0x53)
> || ((reg & 0x00ff) == 0x55));
> - if (reg & 0xff00) {
> - outb_p(W83781D_REG_BANK,
> - data->addr + W83781D_ADDR_REG_OFFSET);
> - outb_p(reg >> 8,
> - data->addr + W83781D_DATA_REG_OFFSET);
> - }
> + w83627hf_set_bank(data, reg);
> outb_p(reg & 0xff, data->addr + W83781D_ADDR_REG_OFFSET);
> res = inb_p(data->addr + W83781D_DATA_REG_OFFSET);
> if (word_sized) {
> @@ -1360,11 +1373,7 @@ static int w83627hf_read_value(struct w8
> (res << 8) + inb_p(data->addr +
> W83781D_DATA_REG_OFFSET);
> }
> - if (reg & 0xff00) {
> - outb_p(W83781D_REG_BANK,
> - data->addr + W83781D_ADDR_REG_OFFSET);
> - outb_p(0, data->addr + W83781D_DATA_REG_OFFSET);
> - }
> + w83627hf_reset_bank(data, reg);
> mutex_unlock(&data->lock);
> return res;
> }
> @@ -1435,12 +1444,7 @@ static int w83627hf_write_value(struct w
> || ((reg & 0xff00) == 0x200))
> && (((reg & 0x00ff) == 0x53)
> || ((reg & 0x00ff) == 0x55));
> - if (reg & 0xff00) {
> - outb_p(W83781D_REG_BANK,
> - data->addr + W83781D_ADDR_REG_OFFSET);
> - outb_p(reg >> 8,
> - data->addr + W83781D_DATA_REG_OFFSET);
> - }
> + w83627hf_set_bank(data, reg);
> outb_p(reg & 0xff, data->addr + W83781D_ADDR_REG_OFFSET);
> if (word_sized) {
> outb_p(value >> 8,
> @@ -1450,11 +1454,7 @@ static int w83627hf_write_value(struct w
> }
> outb_p(value & 0xff,
> data->addr + W83781D_DATA_REG_OFFSET);
> - if (reg & 0xff00) {
> - outb_p(W83781D_REG_BANK,
> - data->addr + W83781D_ADDR_REG_OFFSET);
> - outb_p(0, data->addr + W83781D_DATA_REG_OFFSET);
> - }
> + w83627hf_reset_bank(data, reg);
> mutex_unlock(&data->lock);
> return 0;
> }
>
>
> Patches currently in stable-queue which might be from khali@xxxxxxxxxxxx are
>
> queue-2.6.23/hwmon-lm87-disable-vid-when-it-should-be.patch
> queue-2.6.23/hwmon-lm87-fix-a-division-by-zero.patch
> queue-2.6.23/hwmon-w83627hf-don-t-assume-bank-0.patch
> queue-2.6.23/hwmon-w83627hf-fix-setting-fan-min-right-after-driver-load.patch
> -
> To unsubscribe from this list: send the line "unsubscribe stable-commits" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>


--
Thanks,
Oliver
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/