mfd: Don't store volatile bits in WM8350 register cache
authorMark Brown <broonie@opensource.wolfsonmicro.com>
Mon, 20 Oct 2008 21:58:50 +0000 (23:58 +0200)
committerSamuel Ortiz <samuel@sortiz.org>
Tue, 21 Oct 2008 23:19:40 +0000 (01:19 +0200)
This makes the contents of the cache clearer and fixes incorrect
initialisation of the cache for partially volatile registers.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Samuel Ortiz <sameo@openedhand.com>
drivers/mfd/wm8350-core.c

index fbe22fb7847b6604f14df03d0806bced0bd70077..0d47fb9e4b3bcec5248e510504d8c6b5f2b059ec 100644 (file)
@@ -183,6 +183,9 @@ static int wm8350_write(struct wm8350 *wm8350, u8 reg, int num_regs, u16 *src)
                        (wm8350->reg_cache[i] & ~wm8350_reg_io_map[i].writable)
                        | src[i - reg];
 
+               /* Don't store volatile bits */
+               wm8350->reg_cache[i] &= ~wm8350_reg_io_map[i].vol;
+
                src[i - reg] = cpu_to_be16(src[i - reg]);
        }
 
@@ -1120,6 +1123,7 @@ static int wm8350_create_cache(struct wm8350 *wm8350, int mode)
                        }
                        value = be16_to_cpu(value);
                        value &= wm8350_reg_io_map[i].readable;
+                       value &= ~wm8350_reg_io_map[i].vol;
                        wm8350->reg_cache[i] = value;
                } else
                        wm8350->reg_cache[i] = reg_map[i];