Commit 0956895a authored by Jean Delvare's avatar Jean Delvare Committed by Mark M. Hoffman

hwmon: (w83627ehf) don't assume bank 0

Don't assume that the default bank is 0. For one thing, we don't even
set it to 0 when the driver is loaded, so the initial state might be
different. For another, something (say, the BIOS) might access the chip
and leave with the bank set to something different, so assuming that
the bank value is 0 is not safe.
Signed-off-by: default avatarJean Delvare <khali@linux-fr.org>
Signed-off-by: default avatarMark M. Hoffman <mhoffman@lightlink.com>
parent ea7be66c
...@@ -309,18 +309,16 @@ static inline int is_word_sized(u16 reg) ...@@ -309,18 +309,16 @@ static inline int is_word_sized(u16 reg)
|| (reg & 0x00ff) == 0x55)); || (reg & 0x00ff) == 0x55));
} }
/* We assume that the default bank is 0, thus the following two functions do /* Registers 0x50-0x5f are banked */
nothing for registers which live in bank 0. For others, they respectively
set the bank register to the correct value (before the register is
accessed), and back to 0 (afterwards). */
static inline void w83627ehf_set_bank(struct w83627ehf_data *data, u16 reg) static inline void w83627ehf_set_bank(struct w83627ehf_data *data, u16 reg)
{ {
if (reg & 0xff00) { if ((reg & 0x00f0) == 0x50) {
outb_p(W83627EHF_REG_BANK, data->addr + ADDR_REG_OFFSET); outb_p(W83627EHF_REG_BANK, data->addr + ADDR_REG_OFFSET);
outb_p(reg >> 8, data->addr + DATA_REG_OFFSET); outb_p(reg >> 8, data->addr + DATA_REG_OFFSET);
} }
} }
/* Not strictly necessary, but play it safe for now */
static inline void w83627ehf_reset_bank(struct w83627ehf_data *data, u16 reg) static inline void w83627ehf_reset_bank(struct w83627ehf_data *data, u16 reg)
{ {
if (reg & 0xff00) { if (reg & 0xff00) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment