}
 
 
+/* 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;
                  && (((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) {
                    (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;
 }
                   || ((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,
        }
        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;
 }