This source file includes following definitions.
- wm8350_readable
- wm8350_writeable
- wm8350_volatile
- wm8350_precious
   1 
   2 
   3 
   4 
   5 
   6 
   7 
   8 
   9 
  10 
  11 #include <linux/mfd/wm8350/core.h>
  12 
  13 
  14 
  15 
  16 
  17 static const struct wm8350_reg_access {
  18         u16 readable;           
  19         u16 writable;           
  20         u16 vol;                
  21 } wm8350_reg_io_map[] = {
  22         
  23         { 0xFFFF, 0xFFFF, 0x0000 }, 
  24         { 0x7CFF, 0x0C00, 0x0000 }, 
  25         { 0x007F, 0x0000, 0x0000 }, 
  26         { 0xBE3B, 0xBE3B, 0x8000 }, 
  27         { 0xFEF7, 0xFEF7, 0xF800 }, 
  28         { 0x80FF, 0x80FF, 0x8000 }, 
  29         { 0xFB0E, 0xFB0E, 0x0000 }, 
  30         { 0x0000, 0x0000, 0x0000 }, 
  31         { 0xE537, 0xE537, 0xFFFF }, 
  32         { 0x0FF3, 0x0FF3, 0xFFFF }, 
  33         { 0x008F, 0x008F, 0xFFFF }, 
  34         { 0x6D3C, 0x6D3C, 0xFFFF }, 
  35         { 0x1F8F, 0x1F8F, 0xFFFF }, 
  36         { 0x8F3F, 0x8F3F, 0xFFFF }, 
  37         { 0x0003, 0x0003, 0xFFFF }, 
  38         { 0x0000, 0x0000, 0x0000 }, 
  39         { 0x7F7F, 0x7F7F, 0xFFFF }, 
  40         { 0x073F, 0x073F, 0xFFFF }, 
  41         { 0x1F3F, 0x1F3F, 0xFFFF }, 
  42         { 0x3FFF, 0x00FF, 0xFFFF }, 
  43         { 0x7F7F, 0x7F7F, 0x0000 }, 
  44         { 0x0F3F, 0x0F3F, 0x0000 }, 
  45         { 0x1F3F, 0x1F3F, 0x0000 }, 
  46         { 0xEF7F, 0xEA7F, 0xFFFF }, 
  47         { 0x3BFF, 0x0000, 0xFFFF }, 
  48         { 0xFEE7, 0x0000, 0xFFFF }, 
  49         { 0x35FF, 0x0000, 0xFFFF }, 
  50         { 0x0F3F, 0x0000, 0xFFFF }, 
  51         { 0x0F3F, 0x0000, 0xFFFF }, 
  52         { 0x8000, 0x0000, 0xFFFF }, 
  53         { 0x1FFF, 0x0000, 0xFFFF }, 
  54         { 0xEF7F, 0x0000, 0xFFFF }, 
  55         { 0x3FFF, 0x3FFF, 0x0000 }, 
  56         { 0xFEE7, 0xFEE7, 0x0000 }, 
  57         { 0xF5FF, 0xF5FF, 0x0000 }, 
  58         { 0x0F3F, 0x0F3F, 0x0000 }, 
  59         { 0x0F3F, 0x0F3F, 0x0000 }, 
  60         { 0x8000, 0x8000, 0x0000 }, 
  61         { 0x1FFF, 0x1FFF, 0x0000 }, 
  62         { 0xEF7F, 0xEF7F, 0x0000 }, 
  63         { 0xC9F7, 0xC9F7, 0xFFFF }, 
  64         { 0x8001, 0x8001, 0x0000 }, 
  65         { 0xFFF7, 0xFFF7, 0xFFFF }, 
  66         { 0xFBFF, 0xFBFF, 0x0000 }, 
  67         { 0xFFFF, 0xFFFF, 0x0000 }, 
  68         { 0x0033, 0x0033, 0x0000 }, 
  69         { 0x0000, 0x0000, 0x0000 }, 
  70         { 0x0000, 0x0000, 0x0000 }, 
  71         { 0x3033, 0x3033, 0x0000 }, 
  72         { 0x0000, 0x0000, 0x0000 }, 
  73         { 0x81FF, 0x81FF, 0xFFFF }, 
  74         { 0x81FF, 0x81FF, 0xFFFF }, 
  75         { 0x0000, 0x0000, 0x0000 }, 
  76         { 0x0FFF, 0x0FFF, 0xFFFF }, 
  77         { 0x0017, 0x0017, 0x0000 }, 
  78         { 0x0000, 0x0000, 0x0000 }, 
  79         { 0x0000, 0x0000, 0x0000 }, 
  80         { 0x0000, 0x0000, 0x0000 }, 
  81         { 0x4000, 0x4000, 0x0000 }, 
  82         { 0x7000, 0x7000, 0x0000 }, 
  83         { 0x3C00, 0x3C00, 0x0000 }, 
  84         { 0x0000, 0x0000, 0x0000 }, 
  85         { 0x0000, 0x0000, 0x0000 }, 
  86         { 0x0000, 0x0000, 0x0000 }, 
  87         { 0x8303, 0x8303, 0xFFFF }, 
  88         { 0x0000, 0x0000, 0x0000 }, 
  89         { 0x81FF, 0x81FF, 0xFFFF }, 
  90         { 0x81FF, 0x81FF, 0xFFFF }, 
  91         { 0x0FFF, 0x0FFF, 0x0000 }, 
  92         { 0x0000, 0x0000, 0x0000 }, 
  93         { 0x0FFF, 0x0FFF, 0xFFFF }, 
  94         { 0x0000, 0x0000, 0x0000 }, 
  95         { 0x0707, 0x0707, 0xFFFF }, 
  96         { 0xC0C0, 0xC0C0, 0xFFFF }, 
  97         { 0xC09F, 0xC09F, 0xFFFF }, 
  98         { 0x0000, 0x0000, 0x0000 }, 
  99         { 0x0F15, 0x0F15, 0xFFFF }, 
 100         { 0xC000, 0xC000, 0xFFFF }, 
 101         { 0x03FF, 0x03FF, 0x0000 }, 
 102         { 0x0000, 0x0000, 0x0000 }, 
 103         { 0xE1FC, 0xE1FC, 0x8000 }, 
 104         { 0xE1FC, 0xE1FC, 0x8000 }, 
 105         { 0x0000, 0x0000, 0x0000 }, 
 106         { 0x0000, 0x0000, 0x0000 }, 
 107         { 0x0000, 0x0000, 0x0000 }, 
 108         { 0x0000, 0x0000, 0x0000 }, 
 109         { 0x0000, 0x0000, 0x0000 }, 
 110         { 0x0000, 0x0000, 0x0000 }, 
 111         { 0x9807, 0x9807, 0xFFFF }, 
 112         { 0x980B, 0x980B, 0xFFFF }, 
 113         { 0x0000, 0x0000, 0x0000 }, 
 114         { 0x0000, 0x0000, 0x0000 }, 
 115         { 0x8909, 0x8909, 0xFFFF }, 
 116         { 0x9E07, 0x9E07, 0xFFFF }, 
 117         { 0x0000, 0x0000, 0x0000 }, 
 118         { 0x0000, 0x0000, 0x0000 }, 
 119         { 0x0EEE, 0x0EEE, 0x0000 }, 
 120         { 0xE0EE, 0xE0EE, 0x0000 }, 
 121         { 0x0E0F, 0x0E0F, 0x0000 }, 
 122         { 0xE0E1, 0xE0E1, 0x0000 }, 
 123         { 0x800E, 0x800E, 0x0000 }, 
 124         { 0x0000, 0x0000, 0x0000 }, 
 125         { 0x0000, 0x0000, 0x0000 }, 
 126         { 0x0000, 0x0000, 0x0000 }, 
 127         { 0xE1FC, 0xE1FC, 0xFFFF }, 
 128         { 0xE1FC, 0xE1FC, 0xFFFF }, 
 129         { 0xE1FC, 0xE1FC, 0xFFFF }, 
 130         { 0xE7FC, 0xE7FC, 0xFFFF }, 
 131         { 0x0000, 0x0000, 0x0000 }, 
 132         { 0x0000, 0x0000, 0x0000 }, 
 133         { 0x0000, 0x0000, 0x0000 }, 
 134         { 0x80E0, 0x80E0, 0xFFFF }, 
 135         { 0xBF00, 0xBF00, 0x0000 }, 
 136         { 0x00F1, 0x00F1, 0x0000 }, 
 137         { 0x00F8, 0x00F8, 0x0000 }, 
 138         { 0x40FB, 0x40FB, 0x0000 }, 
 139         { 0x7C30, 0x7C30, 0x0000 }, 
 140         { 0x0000, 0x0000, 0x0000 }, 
 141         { 0x0000, 0x0000, 0x0000 }, 
 142         { 0x0000, 0x0000, 0x0000 }, 
 143         { 0x0000, 0x0000, 0x0000 }, 
 144         { 0x0000, 0x0000, 0x0000 }, 
 145         { 0x0000, 0x0000, 0x0000 }, 
 146         { 0x0000, 0x0000, 0x0000 }, 
 147         { 0x0000, 0x0000, 0x0000 }, 
 148         { 0x0000, 0x0000, 0x0000 }, 
 149         { 0x0000, 0x0000, 0x0000 }, 
 150         { 0x0000, 0x0000, 0x0000 }, 
 151         { 0x1FFF, 0x1FFF, 0x0000 }, 
 152         { 0x1FFF, 0x1FFF, 0x0000 }, 
 153         { 0x1FFF, 0x1FFF, 0x0000 }, 
 154         { 0x1FFF, 0x1FFF, 0x0000 }, 
 155         { 0x0000, 0x0000, 0x0000 }, 
 156         { 0x00C0, 0x00C0, 0x0000 }, 
 157         { 0x1FFF, 0x1FFF, 0x0000 }, 
 158         { 0x1FFF, 0x1FFF, 0x0000 }, 
 159         { 0x0000, 0x0000, 0x0000 }, 
 160         { 0x0000, 0x0000, 0x0000 }, 
 161         { 0x0000, 0x0000, 0x0000 }, 
 162         { 0x0000, 0x0000, 0x0000 }, 
 163         { 0xFFFF, 0xFFFF, 0x0000 }, 
 164         { 0xFFFF, 0xFFFF, 0x0000 }, 
 165         { 0xFFFF, 0xFFFF, 0x0000 }, 
 166         { 0x000F, 0x000F, 0x0000 }, 
 167         { 0xF0FF, 0xF0FF, 0xA000 }, 
 168         { 0x3707, 0x3707, 0x0000 }, 
 169         { 0x0000, 0x0000, 0x0000 }, 
 170         { 0x0000, 0x0000, 0x0000 }, 
 171         { 0x0000, 0x0000, 0x0000 }, 
 172         { 0x0000, 0x0000, 0x0000 }, 
 173         { 0x0000, 0x0000, 0x0000 }, 
 174         { 0x0000, 0x0000, 0x0000 }, 
 175         { 0x7FFF, 0x7000, 0xFFFF }, 
 176         { 0x7FFF, 0x7000, 0xFFFF }, 
 177         { 0x7FFF, 0x7000, 0xFFFF }, 
 178         { 0x7FFF, 0x7000, 0xFFFF }, 
 179         { 0x0FFF, 0x0000, 0xFFFF }, 
 180         { 0x0FFF, 0x0000, 0xFFFF }, 
 181         { 0x0FFF, 0x0000, 0xFFFF }, 
 182         { 0x0FFF, 0x0000, 0xFFFF }, 
 183         { 0x0000, 0x0000, 0x0000 }, 
 184         { 0x0000, 0x0000, 0x0000 }, 
 185         { 0x0000, 0x0000, 0x0000 }, 
 186         { 0x000F, 0x000F, 0x0000 }, 
 187         { 0xFFFF, 0xFFFF, 0x0000 }, 
 188         { 0xFFFF, 0xFFFF, 0x0000 }, 
 189         { 0xFFFF, 0xFFFF, 0x0000 }, 
 190         { 0xFFFF, 0xFFFF, 0x0000 }, 
 191         { 0xBFFF, 0xBFFF, 0x8000 }, 
 192         { 0xFFFF, 0x4FFF, 0xB000 }, 
 193         { 0x007F, 0x007F, 0x0000 }, 
 194         { 0x0000, 0x0000, 0x0000 }, 
 195         { 0x903F, 0x903F, 0xFFFF }, 
 196         { 0xE333, 0xE333, 0xFFFF }, 
 197         { 0x903F, 0x903F, 0xFFFF }, 
 198         { 0xE333, 0xE333, 0xFFFF }, 
 199         { 0x8F3F, 0x8F3F, 0xFFFF }, 
 200         { 0x332D, 0x332D, 0x0000 }, 
 201         { 0x002D, 0x002D, 0x0000 }, 
 202         { 0x5177, 0x5177, 0x8000 }, 
 203         { 0x047F, 0x047F, 0x0000 }, 
 204         { 0xFFC0, 0xFFC0, 0x0000 }, 
 205         { 0x737F, 0x737F, 0x0000 }, 
 206         { 0x535B, 0x535B, 0x0000 }, 
 207         { 0xFFC0, 0xFFC0, 0x0000 }, 
 208         { 0x0000, 0x0000, 0x0000 }, 
 209         { 0x047F, 0x047F, 0x0000 }, 
 210         { 0xFFC0, 0xFFC0, 0x0000 }, 
 211         { 0x737F, 0x737F, 0x0000 }, 
 212         { 0x047F, 0x047F, 0x0000 }, 
 213         { 0xFFC0, 0xFFC0, 0x0000 }, 
 214         { 0x737F, 0x737F, 0x0000 }, 
 215         { 0x535B, 0x535B, 0x0000 }, 
 216         { 0xFFC0, 0xFFC0, 0x0000 }, 
 217         { 0x0000, 0x0000, 0x0000 }, 
 218         { 0x047F, 0x047F, 0x0000 }, 
 219         { 0xFFC0, 0xFFC0, 0x0000 }, 
 220         { 0x737F, 0x737F, 0x0000 }, 
 221         { 0x0000, 0x0000, 0x0000 }, 
 222         { 0xFFD3, 0xFFD3, 0x0000 }, 
 223         { 0x441F, 0x441F, 0x0000 }, 
 224         { 0xFFC0, 0xFFC0, 0x0000 }, 
 225         { 0x331F, 0x331F, 0x0000 }, 
 226         { 0x441F, 0x441F, 0x0000 }, 
 227         { 0xFFC0, 0xFFC0, 0x0000 }, 
 228         { 0x331F, 0x331F, 0x0000 }, 
 229         { 0x441F, 0x441F, 0x0000 }, 
 230         { 0xFFC0, 0xFFC0, 0x0000 }, 
 231         { 0x331F, 0x331F, 0x0000 }, 
 232         { 0x441F, 0x441F, 0x0000 }, 
 233         { 0xFFC0, 0xFFC0, 0x0000 }, 
 234         { 0x331F, 0x331F, 0x0000 }, 
 235         { 0x0000, 0x0000, 0x0000 }, 
 236         { 0x0000, 0x0000, 0x0000 }, 
 237         { 0x0000, 0x0000, 0x0000 }, 
 238         { 0x8F3F, 0x8F3F, 0x0000 }, 
 239         { 0xFF3F, 0xE03F, 0x0000 }, 
 240         { 0xEF2F, 0xE02F, 0x0000 }, 
 241         { 0xF3FF, 0xB3FF, 0xc000 }, 
 242         { 0xFFFF, 0xFFFF, 0x0000 }, 
 243         { 0x09FF, 0x01FF, 0x0000 }, 
 244         { 0x0000, 0x0000, 0x0000 }, 
 245         { 0xFFFF, 0xFFFF, 0xFFFF }, 
 246         { 0xFFFF, 0xFFFF, 0xFFFF }, 
 247         { 0x0000, 0x0000, 0x0000 }, 
 248         { 0x8F3F, 0x0000, 0xFFFF }, 
 249         { 0x0000, 0x0000, 0xFFFF }, 
 250         { 0x34FE, 0x0000, 0xFFFF }, 
 251         { 0x0000, 0x0000, 0x0000 }, 
 252         { 0x0000, 0x0000, 0x0000 }, 
 253         { 0xFFFF, 0x1FFF, 0xFFFF }, 
 254         { 0xFFFF, 0x1FFF, 0xFFFF }, 
 255         { 0xFFFF, 0x1FFF, 0xFFFF }, 
 256         { 0xFFFF, 0x1FFF, 0xFFFF }, 
 257         { 0x0000, 0x0000, 0x0000 }, 
 258         { 0x0000, 0x0000, 0x0000 }, 
 259         { 0x0000, 0x0000, 0x0000 }, 
 260         { 0x0000, 0x0000, 0x0000 }, 
 261         { 0x0000, 0x0000, 0x0000 }, 
 262         { 0x0000, 0x0000, 0x0000 }, 
 263         { 0x0000, 0x0000, 0x0000 }, 
 264         { 0x0000, 0x0000, 0x0000 }, 
 265         { 0x0000, 0x0000, 0x0000 }, 
 266         { 0x0000, 0x0000, 0x0000 }, 
 267         { 0x0000, 0x0000, 0x0000 }, 
 268         { 0x0000, 0x0000, 0x0000 }, 
 269         { 0x0000, 0x0000, 0x0000 }, 
 270         { 0x0000, 0x0000, 0x0000 }, 
 271         { 0xFFFF, 0x0010, 0xFFFF }, 
 272         { 0x0000, 0x0000, 0x0000 }, 
 273         { 0xFFFF, 0x0010, 0xFFFF }, 
 274         { 0xFFFF, 0x0010, 0xFFFF }, 
 275         { 0x0000, 0x0000, 0x0000 }, 
 276         { 0xFFFF, 0x0010, 0xFFFF }, 
 277         { 0x0000, 0x0000, 0x0000 }, 
 278         { 0x0000, 0x0000, 0x0000 }, 
 279 };
 280 
 281 static bool wm8350_readable(struct device *dev, unsigned int reg)
 282 {
 283         return wm8350_reg_io_map[reg].readable;
 284 }
 285 
 286 static bool wm8350_writeable(struct device *dev, unsigned int reg)
 287 {
 288         struct wm8350 *wm8350 = dev_get_drvdata(dev);
 289 
 290         if (!wm8350->unlocked) {
 291                 if ((reg >= WM8350_GPIO_FUNCTION_SELECT_1 &&
 292                      reg <= WM8350_GPIO_FUNCTION_SELECT_4) ||
 293                     (reg >= WM8350_BATTERY_CHARGER_CONTROL_1 &&
 294                      reg <= WM8350_BATTERY_CHARGER_CONTROL_3))
 295                         return false;
 296         }
 297 
 298         return wm8350_reg_io_map[reg].writable;
 299 }
 300 
 301 static bool wm8350_volatile(struct device *dev, unsigned int reg)
 302 {
 303         return wm8350_reg_io_map[reg].vol;
 304 }
 305 
 306 static bool wm8350_precious(struct device *dev, unsigned int reg)
 307 {
 308         switch (reg) {
 309         case WM8350_SYSTEM_INTERRUPTS:
 310         case WM8350_INT_STATUS_1:
 311         case WM8350_INT_STATUS_2:
 312         case WM8350_POWER_UP_INT_STATUS:
 313         case WM8350_UNDER_VOLTAGE_INT_STATUS:
 314         case WM8350_OVER_CURRENT_INT_STATUS:
 315         case WM8350_GPIO_INT_STATUS:
 316         case WM8350_COMPARATOR_INT_STATUS:
 317                 return true;
 318 
 319         default:
 320                 return false;
 321         }
 322 }
 323 
 324 const struct regmap_config wm8350_regmap = {
 325         .reg_bits = 8,
 326         .val_bits = 16,
 327 
 328         .cache_type = REGCACHE_RBTREE,
 329 
 330         .max_register = WM8350_MAX_REGISTER,
 331         .readable_reg = wm8350_readable,
 332         .writeable_reg = wm8350_writeable,
 333         .volatile_reg = wm8350_volatile,
 334         .precious_reg = wm8350_precious,
 335 };