linux/include/linux/mfd/wm8350/pmic.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0-or-later */
   2/*
   3 * pmic.h  --  Power Management Driver for Wolfson WM8350 PMIC
   4 *
   5 * Copyright 2007 Wolfson Microelectronics PLC
   6 */
   7
   8#ifndef __LINUX_MFD_WM8350_PMIC_H
   9#define __LINUX_MFD_WM8350_PMIC_H
  10
  11#include <linux/platform_device.h>
  12#include <linux/leds.h>
  13#include <linux/regulator/machine.h>
  14
  15/*
  16 * Register values.
  17 */
  18
  19#define WM8350_CURRENT_SINK_DRIVER_A            0xAC
  20#define WM8350_CSA_FLASH_CONTROL                0xAD
  21#define WM8350_CURRENT_SINK_DRIVER_B            0xAE
  22#define WM8350_CSB_FLASH_CONTROL                0xAF
  23#define WM8350_DCDC_LDO_REQUESTED               0xB0
  24#define WM8350_DCDC_ACTIVE_OPTIONS              0xB1
  25#define WM8350_DCDC_SLEEP_OPTIONS               0xB2
  26#define WM8350_POWER_CHECK_COMPARATOR           0xB3
  27#define WM8350_DCDC1_CONTROL                    0xB4
  28#define WM8350_DCDC1_TIMEOUTS                   0xB5
  29#define WM8350_DCDC1_LOW_POWER                  0xB6
  30#define WM8350_DCDC2_CONTROL                    0xB7
  31#define WM8350_DCDC2_TIMEOUTS                   0xB8
  32#define WM8350_DCDC3_CONTROL                    0xBA
  33#define WM8350_DCDC3_TIMEOUTS                   0xBB
  34#define WM8350_DCDC3_LOW_POWER                  0xBC
  35#define WM8350_DCDC4_CONTROL                    0xBD
  36#define WM8350_DCDC4_TIMEOUTS                   0xBE
  37#define WM8350_DCDC4_LOW_POWER                  0xBF
  38#define WM8350_DCDC5_CONTROL                    0xC0
  39#define WM8350_DCDC5_TIMEOUTS                   0xC1
  40#define WM8350_DCDC6_CONTROL                    0xC3
  41#define WM8350_DCDC6_TIMEOUTS                   0xC4
  42#define WM8350_DCDC6_LOW_POWER                  0xC5
  43#define WM8350_LIMIT_SWITCH_CONTROL             0xC7
  44#define WM8350_LDO1_CONTROL                     0xC8
  45#define WM8350_LDO1_TIMEOUTS                    0xC9
  46#define WM8350_LDO1_LOW_POWER                   0xCA
  47#define WM8350_LDO2_CONTROL                     0xCB
  48#define WM8350_LDO2_TIMEOUTS                    0xCC
  49#define WM8350_LDO2_LOW_POWER                   0xCD
  50#define WM8350_LDO3_CONTROL                     0xCE
  51#define WM8350_LDO3_TIMEOUTS                    0xCF
  52#define WM8350_LDO3_LOW_POWER                   0xD0
  53#define WM8350_LDO4_CONTROL                     0xD1
  54#define WM8350_LDO4_TIMEOUTS                    0xD2
  55#define WM8350_LDO4_LOW_POWER                   0xD3
  56#define WM8350_VCC_FAULT_MASKS                  0xD7
  57#define WM8350_MAIN_BANDGAP_CONTROL             0xD8
  58#define WM8350_OSC_CONTROL                      0xD9
  59#define WM8350_RTC_TICK_CONTROL                 0xDA
  60#define WM8350_SECURITY                         0xDB
  61#define WM8350_RAM_BIST_1                       0xDC
  62#define WM8350_DCDC_LDO_STATUS                  0xE1
  63#define WM8350_GPIO_PIN_STATUS                  0xE6
  64
  65#define WM8350_DCDC1_FORCE_PWM                  0xF8
  66#define WM8350_DCDC3_FORCE_PWM                  0xFA
  67#define WM8350_DCDC4_FORCE_PWM                  0xFB
  68#define WM8350_DCDC6_FORCE_PWM                  0xFD
  69
  70/*
  71 * R172 (0xAC) - Current Sink Driver A
  72 */
  73#define WM8350_CS1_HIB_MODE                     0x1000
  74#define WM8350_CS1_HIB_MODE_MASK                0x1000
  75#define WM8350_CS1_HIB_MODE_SHIFT                   12
  76#define WM8350_CS1_ISEL_MASK                    0x003F
  77#define WM8350_CS1_ISEL_SHIFT                        0
  78
  79/* Bit values for R172 (0xAC) */
  80#define WM8350_CS1_HIB_MODE_DISABLE                  0
  81#define WM8350_CS1_HIB_MODE_LEAVE                    1
  82
  83#define WM8350_CS1_ISEL_220M                      0x3F
  84
  85/*
  86 * R173 (0xAD) - CSA Flash control
  87 */
  88#define WM8350_CS1_FLASH_MODE                   0x8000
  89#define WM8350_CS1_TRIGSRC                      0x4000
  90#define WM8350_CS1_DRIVE                        0x2000
  91#define WM8350_CS1_FLASH_DUR_MASK               0x0300
  92#define WM8350_CS1_OFF_RAMP_MASK                0x0030
  93#define WM8350_CS1_ON_RAMP_MASK                 0x0003
  94
  95/*
  96 * R174 (0xAE) - Current Sink Driver B
  97 */
  98#define WM8350_CS2_HIB_MODE                     0x1000
  99#define WM8350_CS2_ISEL_MASK                    0x003F
 100
 101/*
 102 * R175 (0xAF) - CSB Flash control
 103 */
 104#define WM8350_CS2_FLASH_MODE                   0x8000
 105#define WM8350_CS2_TRIGSRC                      0x4000
 106#define WM8350_CS2_DRIVE                        0x2000
 107#define WM8350_CS2_FLASH_DUR_MASK               0x0300
 108#define WM8350_CS2_OFF_RAMP_MASK                0x0030
 109#define WM8350_CS2_ON_RAMP_MASK                 0x0003
 110
 111/*
 112 * R176 (0xB0) - DCDC/LDO requested
 113 */
 114#define WM8350_LS_ENA                           0x8000
 115#define WM8350_LDO4_ENA                         0x0800
 116#define WM8350_LDO3_ENA                         0x0400
 117#define WM8350_LDO2_ENA                         0x0200
 118#define WM8350_LDO1_ENA                         0x0100
 119#define WM8350_DC6_ENA                          0x0020
 120#define WM8350_DC5_ENA                          0x0010
 121#define WM8350_DC4_ENA                          0x0008
 122#define WM8350_DC3_ENA                          0x0004
 123#define WM8350_DC2_ENA                          0x0002
 124#define WM8350_DC1_ENA                          0x0001
 125
 126/*
 127 * R177 (0xB1) - DCDC Active options
 128 */
 129#define WM8350_PUTO_MASK                        0x3000
 130#define WM8350_PWRUP_DELAY_MASK                 0x0300
 131#define WM8350_DC6_ACTIVE                       0x0020
 132#define WM8350_DC4_ACTIVE                       0x0008
 133#define WM8350_DC3_ACTIVE                       0x0004
 134#define WM8350_DC1_ACTIVE                       0x0001
 135
 136/*
 137 * R178 (0xB2) - DCDC Sleep options
 138 */
 139#define WM8350_DC6_SLEEP                        0x0020
 140#define WM8350_DC4_SLEEP                        0x0008
 141#define WM8350_DC3_SLEEP                        0x0004
 142#define WM8350_DC1_SLEEP                        0x0001
 143
 144/*
 145 * R179 (0xB3) - Power-check comparator
 146 */
 147#define WM8350_PCCMP_ERRACT                     0x4000
 148#define WM8350_PCCMP_RAIL                       0x0100
 149#define WM8350_PCCMP_OFF_THR_MASK               0x0070
 150#define WM8350_PCCMP_ON_THR_MASK                0x0007
 151
 152/*
 153 * R180 (0xB4) - DCDC1 Control
 154 */
 155#define WM8350_DC1_OPFLT                        0x0400
 156#define WM8350_DC1_VSEL_MASK                    0x007F
 157#define WM8350_DC1_VSEL_SHIFT                        0
 158
 159/*
 160 * R181 (0xB5) - DCDC1 Timeouts
 161 */
 162#define WM8350_DC1_ERRACT_MASK                  0xC000
 163#define WM8350_DC1_ERRACT_SHIFT                     14
 164#define WM8350_DC1_ENSLOT_MASK                  0x3C00
 165#define WM8350_DC1_ENSLOT_SHIFT                     10
 166#define WM8350_DC1_SDSLOT_MASK                  0x03C0
 167#define WM8350_DC1_UVTO_MASK                    0x0030
 168#define WM8350_DC1_SDSLOT_SHIFT                      6
 169
 170/* Bit values for R181 (0xB5) */
 171#define WM8350_DC1_ERRACT_NONE                       0
 172#define WM8350_DC1_ERRACT_SHUTDOWN_CONV              1
 173#define WM8350_DC1_ERRACT_SHUTDOWN_SYS               2
 174
 175/*
 176 * R182 (0xB6) - DCDC1 Low Power
 177 */
 178#define WM8350_DC1_HIB_MODE_MASK                0x7000
 179#define WM8350_DC1_HIB_TRIG_MASK                0x0300
 180#define WM8350_DC1_VIMG_MASK                    0x007F
 181
 182/*
 183 * R183 (0xB7) - DCDC2 Control
 184 */
 185#define WM8350_DC2_MODE                         0x4000
 186#define WM8350_DC2_MODE_MASK                    0x4000
 187#define WM8350_DC2_MODE_SHIFT                       14
 188#define WM8350_DC2_HIB_MODE                     0x1000
 189#define WM8350_DC2_HIB_MODE_MASK                0x1000
 190#define WM8350_DC2_HIB_MODE_SHIFT                   12
 191#define WM8350_DC2_HIB_TRIG_MASK                0x0300
 192#define WM8350_DC2_HIB_TRIG_SHIFT                    8
 193#define WM8350_DC2_ILIM                         0x0040
 194#define WM8350_DC2_ILIM_MASK                    0x0040
 195#define WM8350_DC2_ILIM_SHIFT                        6
 196#define WM8350_DC2_RMP_MASK                     0x0018
 197#define WM8350_DC2_RMP_SHIFT                         3
 198#define WM8350_DC2_FBSRC_MASK                   0x0003
 199#define WM8350_DC2_FBSRC_SHIFT                       0
 200
 201/* Bit values for R183 (0xB7) */
 202#define WM8350_DC2_MODE_BOOST                        0
 203#define WM8350_DC2_MODE_SWITCH                       1
 204
 205#define WM8350_DC2_HIB_MODE_ACTIVE                   1
 206#define WM8350_DC2_HIB_MODE_DISABLE                  0
 207
 208#define WM8350_DC2_HIB_TRIG_NONE                     0
 209#define WM8350_DC2_HIB_TRIG_LPWR1                    1
 210#define WM8350_DC2_HIB_TRIG_LPWR2                    2
 211#define WM8350_DC2_HIB_TRIG_LPWR3                    3
 212
 213#define WM8350_DC2_ILIM_HIGH                         0
 214#define WM8350_DC2_ILIM_LOW                          1
 215
 216#define WM8350_DC2_RMP_30V                           0
 217#define WM8350_DC2_RMP_20V                           1
 218#define WM8350_DC2_RMP_10V                           2
 219#define WM8350_DC2_RMP_5V                            3
 220
 221#define WM8350_DC2_FBSRC_FB2                         0
 222#define WM8350_DC2_FBSRC_ISINKA                      1
 223#define WM8350_DC2_FBSRC_ISINKB                      2
 224#define WM8350_DC2_FBSRC_USB                         3
 225
 226/*
 227 * R184 (0xB8) - DCDC2 Timeouts
 228 */
 229#define WM8350_DC2_ERRACT_MASK                  0xC000
 230#define WM8350_DC2_ERRACT_SHIFT                     14
 231#define WM8350_DC2_ENSLOT_MASK                  0x3C00
 232#define WM8350_DC2_ENSLOT_SHIFT                     10
 233#define WM8350_DC2_SDSLOT_MASK                  0x03C0
 234#define WM8350_DC2_UVTO_MASK                    0x0030
 235
 236/* Bit values for R184 (0xB8) */
 237#define WM8350_DC2_ERRACT_NONE                       0
 238#define WM8350_DC2_ERRACT_SHUTDOWN_CONV              1
 239#define WM8350_DC2_ERRACT_SHUTDOWN_SYS               2
 240
 241/*
 242 * R186 (0xBA) - DCDC3 Control
 243 */
 244#define WM8350_DC3_OPFLT                        0x0400
 245#define WM8350_DC3_VSEL_MASK                    0x007F
 246#define WM8350_DC3_VSEL_SHIFT                        0
 247
 248/*
 249 * R187 (0xBB) - DCDC3 Timeouts
 250 */
 251#define WM8350_DC3_ERRACT_MASK                  0xC000
 252#define WM8350_DC3_ERRACT_SHIFT                     14
 253#define WM8350_DC3_ENSLOT_MASK                  0x3C00
 254#define WM8350_DC3_ENSLOT_SHIFT                     10
 255#define WM8350_DC3_SDSLOT_MASK                  0x03C0
 256#define WM8350_DC3_UVTO_MASK                    0x0030
 257#define WM8350_DC3_SDSLOT_SHIFT                      6
 258
 259/* Bit values for R187 (0xBB) */
 260#define WM8350_DC3_ERRACT_NONE                       0
 261#define WM8350_DC3_ERRACT_SHUTDOWN_CONV              1
 262#define WM8350_DC3_ERRACT_SHUTDOWN_SYS               2
 263/*
 264 * R188 (0xBC) - DCDC3 Low Power
 265 */
 266#define WM8350_DC3_HIB_MODE_MASK                0x7000
 267#define WM8350_DC3_HIB_TRIG_MASK                0x0300
 268#define WM8350_DC3_VIMG_MASK                    0x007F
 269
 270/*
 271 * R189 (0xBD) - DCDC4 Control
 272 */
 273#define WM8350_DC4_OPFLT                        0x0400
 274#define WM8350_DC4_VSEL_MASK                    0x007F
 275#define WM8350_DC4_VSEL_SHIFT                        0
 276
 277/*
 278 * R190 (0xBE) - DCDC4 Timeouts
 279 */
 280#define WM8350_DC4_ERRACT_MASK                  0xC000
 281#define WM8350_DC4_ERRACT_SHIFT                     14
 282#define WM8350_DC4_ENSLOT_MASK                  0x3C00
 283#define WM8350_DC4_ENSLOT_SHIFT                     10
 284#define WM8350_DC4_SDSLOT_MASK                  0x03C0
 285#define WM8350_DC4_UVTO_MASK                    0x0030
 286#define WM8350_DC4_SDSLOT_SHIFT                      6
 287
 288/* Bit values for R190 (0xBE) */
 289#define WM8350_DC4_ERRACT_NONE                       0
 290#define WM8350_DC4_ERRACT_SHUTDOWN_CONV              1
 291#define WM8350_DC4_ERRACT_SHUTDOWN_SYS               2
 292
 293/*
 294 * R191 (0xBF) - DCDC4 Low Power
 295 */
 296#define WM8350_DC4_HIB_MODE_MASK                0x7000
 297#define WM8350_DC4_HIB_TRIG_MASK                0x0300
 298#define WM8350_DC4_VIMG_MASK                    0x007F
 299
 300/*
 301 * R192 (0xC0) - DCDC5 Control
 302 */
 303#define WM8350_DC5_MODE                         0x4000
 304#define WM8350_DC5_MODE_MASK                    0x4000
 305#define WM8350_DC5_MODE_SHIFT                       14
 306#define WM8350_DC5_HIB_MODE                     0x1000
 307#define WM8350_DC5_HIB_MODE_MASK                0x1000
 308#define WM8350_DC5_HIB_MODE_SHIFT                   12
 309#define WM8350_DC5_HIB_TRIG_MASK                0x0300
 310#define WM8350_DC5_HIB_TRIG_SHIFT                    8
 311#define WM8350_DC5_ILIM                         0x0040
 312#define WM8350_DC5_ILIM_MASK                    0x0040
 313#define WM8350_DC5_ILIM_SHIFT                        6
 314#define WM8350_DC5_RMP_MASK                     0x0018
 315#define WM8350_DC5_RMP_SHIFT                         3
 316#define WM8350_DC5_FBSRC_MASK                   0x0003
 317#define WM8350_DC5_FBSRC_SHIFT                       0
 318
 319/* Bit values for R192 (0xC0) */
 320#define WM8350_DC5_MODE_BOOST                        0
 321#define WM8350_DC5_MODE_SWITCH                       1
 322
 323#define WM8350_DC5_HIB_MODE_ACTIVE                   1
 324#define WM8350_DC5_HIB_MODE_DISABLE                  0
 325
 326#define WM8350_DC5_HIB_TRIG_NONE                     0
 327#define WM8350_DC5_HIB_TRIG_LPWR1                    1
 328#define WM8350_DC5_HIB_TRIG_LPWR2                    2
 329#define WM8350_DC5_HIB_TRIG_LPWR3                    3
 330
 331#define WM8350_DC5_ILIM_HIGH                         0
 332#define WM8350_DC5_ILIM_LOW                          1
 333
 334#define WM8350_DC5_RMP_30V                           0
 335#define WM8350_DC5_RMP_20V                           1
 336#define WM8350_DC5_RMP_10V                           2
 337#define WM8350_DC5_RMP_5V                            3
 338
 339#define WM8350_DC5_FBSRC_FB2                         0
 340#define WM8350_DC5_FBSRC_ISINKA                      1
 341#define WM8350_DC5_FBSRC_ISINKB                      2
 342#define WM8350_DC5_FBSRC_USB                         3
 343
 344/*
 345 * R193 (0xC1) - DCDC5 Timeouts
 346 */
 347#define WM8350_DC5_ERRACT_MASK                  0xC000
 348#define WM8350_DC5_ERRACT_SHIFT                     14
 349#define WM8350_DC5_ENSLOT_MASK                  0x3C00
 350#define WM8350_DC5_ENSLOT_SHIFT                     10
 351#define WM8350_DC5_SDSLOT_MASK                  0x03C0
 352#define WM8350_DC5_UVTO_MASK                    0x0030
 353#define WM8350_DC5_SDSLOT_SHIFT                      6
 354
 355/* Bit values for R193 (0xC1) */
 356#define WM8350_DC5_ERRACT_NONE                       0
 357#define WM8350_DC5_ERRACT_SHUTDOWN_CONV              1
 358#define WM8350_DC5_ERRACT_SHUTDOWN_SYS               2
 359
 360/*
 361 * R195 (0xC3) - DCDC6 Control
 362 */
 363#define WM8350_DC6_OPFLT                        0x0400
 364#define WM8350_DC6_VSEL_MASK                    0x007F
 365#define WM8350_DC6_VSEL_SHIFT                        0
 366
 367/*
 368 * R196 (0xC4) - DCDC6 Timeouts
 369 */
 370#define WM8350_DC6_ERRACT_MASK                  0xC000
 371#define WM8350_DC6_ERRACT_SHIFT                     14
 372#define WM8350_DC6_ENSLOT_MASK                  0x3C00
 373#define WM8350_DC6_ENSLOT_SHIFT                     10
 374#define WM8350_DC6_SDSLOT_MASK                  0x03C0
 375#define WM8350_DC6_UVTO_MASK                    0x0030
 376#define WM8350_DC6_SDSLOT_SHIFT                      6
 377
 378/* Bit values for R196 (0xC4) */
 379#define WM8350_DC6_ERRACT_NONE                       0
 380#define WM8350_DC6_ERRACT_SHUTDOWN_CONV              1
 381#define WM8350_DC6_ERRACT_SHUTDOWN_SYS               2
 382
 383/*
 384 * R197 (0xC5) - DCDC6 Low Power
 385 */
 386#define WM8350_DC6_HIB_MODE_MASK                0x7000
 387#define WM8350_DC6_HIB_TRIG_MASK                0x0300
 388#define WM8350_DC6_VIMG_MASK                    0x007F
 389
 390/*
 391 * R199 (0xC7) - Limit Switch Control
 392 */
 393#define WM8350_LS_ERRACT_MASK                   0xC000
 394#define WM8350_LS_ERRACT_SHIFT                      14
 395#define WM8350_LS_ENSLOT_MASK                   0x3C00
 396#define WM8350_LS_ENSLOT_SHIFT                      10
 397#define WM8350_LS_SDSLOT_MASK                   0x03C0
 398#define WM8350_LS_SDSLOT_SHIFT                       6
 399#define WM8350_LS_HIB_MODE                      0x0010
 400#define WM8350_LS_HIB_MODE_MASK                 0x0010
 401#define WM8350_LS_HIB_MODE_SHIFT                     4
 402#define WM8350_LS_HIB_PROT                      0x0002
 403#define WM8350_LS_HIB_PROT_MASK                 0x0002
 404#define WM8350_LS_HIB_PROT_SHIFT                     1
 405#define WM8350_LS_PROT                          0x0001
 406#define WM8350_LS_PROT_MASK                     0x0001
 407#define WM8350_LS_PROT_SHIFT                         0
 408
 409/* Bit values for R199 (0xC7) */
 410#define WM8350_LS_ERRACT_NONE                       0
 411#define WM8350_LS_ERRACT_SHUTDOWN_CONV              1
 412#define WM8350_LS_ERRACT_SHUTDOWN_SYS               2
 413
 414/*
 415 * R200 (0xC8) - LDO1 Control
 416 */
 417#define WM8350_LDO1_SWI                         0x4000
 418#define WM8350_LDO1_OPFLT                       0x0400
 419#define WM8350_LDO1_VSEL_MASK                   0x001F
 420#define WM8350_LDO1_VSEL_SHIFT                       0
 421
 422/*
 423 * R201 (0xC9) - LDO1 Timeouts
 424 */
 425#define WM8350_LDO1_ERRACT_MASK                 0xC000
 426#define WM8350_LDO1_ERRACT_SHIFT                    14
 427#define WM8350_LDO1_ENSLOT_MASK                 0x3C00
 428#define WM8350_LDO1_ENSLOT_SHIFT                    10
 429#define WM8350_LDO1_SDSLOT_MASK                 0x03C0
 430#define WM8350_LDO1_UVTO_MASK                   0x0030
 431#define WM8350_LDO1_SDSLOT_SHIFT                     6
 432
 433/* Bit values for R201 (0xC9) */
 434#define WM8350_LDO1_ERRACT_NONE                       0
 435#define WM8350_LDO1_ERRACT_SHUTDOWN_CONV              1
 436#define WM8350_LDO1_ERRACT_SHUTDOWN_SYS               2
 437
 438/*
 439 * R202 (0xCA) - LDO1 Low Power
 440 */
 441#define WM8350_LDO1_HIB_MODE_MASK               0x3000
 442#define WM8350_LDO1_HIB_TRIG_MASK               0x0300
 443#define WM8350_LDO1_VIMG_MASK                   0x001F
 444#define WM8350_LDO1_HIB_MODE_DIS                (0x1 << 12)
 445
 446
 447/*
 448 * R203 (0xCB) - LDO2 Control
 449 */
 450#define WM8350_LDO2_SWI                         0x4000
 451#define WM8350_LDO2_OPFLT                       0x0400
 452#define WM8350_LDO2_VSEL_MASK                   0x001F
 453#define WM8350_LDO2_VSEL_SHIFT                       0
 454
 455/*
 456 * R204 (0xCC) - LDO2 Timeouts
 457 */
 458#define WM8350_LDO2_ERRACT_MASK                 0xC000
 459#define WM8350_LDO2_ERRACT_SHIFT                    14
 460#define WM8350_LDO2_ENSLOT_MASK                 0x3C00
 461#define WM8350_LDO2_ENSLOT_SHIFT                    10
 462#define WM8350_LDO2_SDSLOT_MASK                 0x03C0
 463#define WM8350_LDO2_SDSLOT_SHIFT                     6
 464
 465/* Bit values for R204 (0xCC) */
 466#define WM8350_LDO2_ERRACT_NONE                       0
 467#define WM8350_LDO2_ERRACT_SHUTDOWN_CONV              1
 468#define WM8350_LDO2_ERRACT_SHUTDOWN_SYS               2
 469
 470/*
 471 * R205 (0xCD) - LDO2 Low Power
 472 */
 473#define WM8350_LDO2_HIB_MODE_MASK               0x3000
 474#define WM8350_LDO2_HIB_TRIG_MASK               0x0300
 475#define WM8350_LDO2_VIMG_MASK                   0x001F
 476
 477/*
 478 * R206 (0xCE) - LDO3 Control
 479 */
 480#define WM8350_LDO3_SWI                         0x4000
 481#define WM8350_LDO3_OPFLT                       0x0400
 482#define WM8350_LDO3_VSEL_MASK                   0x001F
 483#define WM8350_LDO3_VSEL_SHIFT                       0
 484
 485/*
 486 * R207 (0xCF) - LDO3 Timeouts
 487 */
 488#define WM8350_LDO3_ERRACT_MASK                 0xC000
 489#define WM8350_LDO3_ERRACT_SHIFT                    14
 490#define WM8350_LDO3_ENSLOT_MASK                 0x3C00
 491#define WM8350_LDO3_ENSLOT_SHIFT                    10
 492#define WM8350_LDO3_SDSLOT_MASK                 0x03C0
 493#define WM8350_LDO3_UVTO_MASK                   0x0030
 494#define WM8350_LDO3_SDSLOT_SHIFT                     6
 495
 496/* Bit values for R207 (0xCF) */
 497#define WM8350_LDO3_ERRACT_NONE                       0
 498#define WM8350_LDO3_ERRACT_SHUTDOWN_CONV              1
 499#define WM8350_LDO3_ERRACT_SHUTDOWN_SYS               2
 500
 501/*
 502 * R208 (0xD0) - LDO3 Low Power
 503 */
 504#define WM8350_LDO3_HIB_MODE_MASK               0x3000
 505#define WM8350_LDO3_HIB_TRIG_MASK               0x0300
 506#define WM8350_LDO3_VIMG_MASK                   0x001F
 507
 508/*
 509 * R209 (0xD1) - LDO4 Control
 510 */
 511#define WM8350_LDO4_SWI                         0x4000
 512#define WM8350_LDO4_OPFLT                       0x0400
 513#define WM8350_LDO4_VSEL_MASK                   0x001F
 514#define WM8350_LDO4_VSEL_SHIFT                       0
 515
 516/*
 517 * R210 (0xD2) - LDO4 Timeouts
 518 */
 519#define WM8350_LDO4_ERRACT_MASK                 0xC000
 520#define WM8350_LDO4_ERRACT_SHIFT                    14
 521#define WM8350_LDO4_ENSLOT_MASK                 0x3C00
 522#define WM8350_LDO4_ENSLOT_SHIFT                    10
 523#define WM8350_LDO4_SDSLOT_MASK                 0x03C0
 524#define WM8350_LDO4_UVTO_MASK                   0x0030
 525#define WM8350_LDO4_SDSLOT_SHIFT                     6
 526
 527/* Bit values for R210 (0xD2) */
 528#define WM8350_LDO4_ERRACT_NONE                       0
 529#define WM8350_LDO4_ERRACT_SHUTDOWN_CONV              1
 530#define WM8350_LDO4_ERRACT_SHUTDOWN_SYS               2
 531
 532/*
 533 * R211 (0xD3) - LDO4 Low Power
 534 */
 535#define WM8350_LDO4_HIB_MODE_MASK               0x3000
 536#define WM8350_LDO4_HIB_TRIG_MASK               0x0300
 537#define WM8350_LDO4_VIMG_MASK                   0x001F
 538
 539/*
 540 * R215 (0xD7) - VCC_FAULT Masks
 541 */
 542#define WM8350_LS_FAULT                         0x8000
 543#define WM8350_LDO4_FAULT                       0x0800
 544#define WM8350_LDO3_FAULT                       0x0400
 545#define WM8350_LDO2_FAULT                       0x0200
 546#define WM8350_LDO1_FAULT                       0x0100
 547#define WM8350_DC6_FAULT                        0x0020
 548#define WM8350_DC5_FAULT                        0x0010
 549#define WM8350_DC4_FAULT                        0x0008
 550#define WM8350_DC3_FAULT                        0x0004
 551#define WM8350_DC2_FAULT                        0x0002
 552#define WM8350_DC1_FAULT                        0x0001
 553
 554/*
 555 * R216 (0xD8) - Main Bandgap Control
 556 */
 557#define WM8350_MBG_LOAD_FUSES                   0x8000
 558#define WM8350_MBG_FUSE_WPREP                   0x4000
 559#define WM8350_MBG_FUSE_WRITE                   0x2000
 560#define WM8350_MBG_FUSE_TRIM_MASK               0x1F00
 561#define WM8350_MBG_TRIM_SRC                     0x0020
 562#define WM8350_MBG_USER_TRIM_MASK               0x001F
 563
 564/*
 565 * R217 (0xD9) - OSC Control
 566 */
 567#define WM8350_OSC_LOAD_FUSES                   0x8000
 568#define WM8350_OSC_FUSE_WPREP                   0x4000
 569#define WM8350_OSC_FUSE_WRITE                   0x2000
 570#define WM8350_OSC_FUSE_TRIM_MASK               0x0F00
 571#define WM8350_OSC_TRIM_SRC                     0x0020
 572#define WM8350_OSC_USER_TRIM_MASK               0x000F
 573
 574/*
 575 * R248 (0xF8) - DCDC1 Force PWM
 576 */
 577#define WM8350_DCDC1_FORCE_PWM_ENA              0x0010
 578
 579/*
 580 * R250 (0xFA) - DCDC3 Force PWM
 581 */
 582#define WM8350_DCDC3_FORCE_PWM_ENA              0x0010
 583
 584/*
 585 * R251 (0xFB) - DCDC4 Force PWM
 586 */
 587#define WM8350_DCDC4_FORCE_PWM_ENA              0x0010
 588
 589/*
 590 * R253 (0xFD) - DCDC1 Force PWM
 591 */
 592#define WM8350_DCDC6_FORCE_PWM_ENA              0x0010
 593
 594/*
 595 * DCDC's
 596 */
 597#define WM8350_DCDC_1                           0
 598#define WM8350_DCDC_2                           1
 599#define WM8350_DCDC_3                           2
 600#define WM8350_DCDC_4                           3
 601#define WM8350_DCDC_5                           4
 602#define WM8350_DCDC_6                           5
 603
 604/* DCDC modes */
 605#define WM8350_DCDC_ACTIVE_STANDBY              0
 606#define WM8350_DCDC_ACTIVE_PULSE                1
 607#define WM8350_DCDC_SLEEP_NORMAL                0
 608#define WM8350_DCDC_SLEEP_LOW                   1
 609
 610/* DCDC Low power (Hibernate) mode */
 611#define WM8350_DCDC_HIB_MODE_CUR                (0 << 12)
 612#define WM8350_DCDC_HIB_MODE_IMAGE              (1 << 12)
 613#define WM8350_DCDC_HIB_MODE_STANDBY            (2 << 12)
 614#define WM8350_DCDC_HIB_MODE_LDO                (4 << 12)
 615#define WM8350_DCDC_HIB_MODE_LDO_IM             (5 << 12)
 616#define WM8350_DCDC_HIB_MODE_DIS                (7 << 12)
 617#define WM8350_DCDC_HIB_MODE_MASK               (7 << 12)
 618
 619/* DCDC Low Power (Hibernate) signal */
 620#define WM8350_DCDC_HIB_SIG_REG                 (0 << 8)
 621#define WM8350_DCDC_HIB_SIG_LPWR1               (1 << 8)
 622#define WM8350_DCDC_HIB_SIG_LPWR2               (2 << 8)
 623#define WM8350_DCDC_HIB_SIG_LPWR3               (3 << 8)
 624
 625/* LDO Low power (Hibernate) mode */
 626#define WM8350_LDO_HIB_MODE_IMAGE               (0 << 0)
 627#define WM8350_LDO_HIB_MODE_DIS                 (1 << 0)
 628
 629/* LDO Low Power (Hibernate) signal */
 630#define WM8350_LDO_HIB_SIG_REG                  (0 << 8)
 631#define WM8350_LDO_HIB_SIG_LPWR1                (1 << 8)
 632#define WM8350_LDO_HIB_SIG_LPWR2                (2 << 8)
 633#define WM8350_LDO_HIB_SIG_LPWR3                (3 << 8)
 634
 635/*
 636 * LDOs
 637 */
 638#define WM8350_LDO_1                            6
 639#define WM8350_LDO_2                            7
 640#define WM8350_LDO_3                            8
 641#define WM8350_LDO_4                            9
 642
 643/*
 644 * ISINKs
 645 */
 646#define WM8350_ISINK_A                          10
 647#define WM8350_ISINK_B                          11
 648
 649#define WM8350_ISINK_MODE_BOOST                 0
 650#define WM8350_ISINK_MODE_SWITCH                1
 651#define WM8350_ISINK_ILIM_NORMAL                0
 652#define WM8350_ISINK_ILIM_LOW                   1
 653
 654#define WM8350_ISINK_FLASH_DISABLE              0
 655#define WM8350_ISINK_FLASH_ENABLE               1
 656#define WM8350_ISINK_FLASH_TRIG_BIT             0
 657#define WM8350_ISINK_FLASH_TRIG_GPIO            1
 658#define WM8350_ISINK_FLASH_MODE_EN              (1 << 13)
 659#define WM8350_ISINK_FLASH_MODE_DIS             (0 << 13)
 660#define WM8350_ISINK_FLASH_DUR_32MS             (0 << 8)
 661#define WM8350_ISINK_FLASH_DUR_64MS             (1 << 8)
 662#define WM8350_ISINK_FLASH_DUR_96MS             (2 << 8)
 663#define WM8350_ISINK_FLASH_DUR_1024MS           (3 << 8)
 664#define WM8350_ISINK_FLASH_ON_INSTANT           (0 << 0)
 665#define WM8350_ISINK_FLASH_ON_0_25S             (1 << 0)
 666#define WM8350_ISINK_FLASH_ON_0_50S             (2 << 0)
 667#define WM8350_ISINK_FLASH_ON_1_00S             (3 << 0)
 668#define WM8350_ISINK_FLASH_ON_1_95S             (1 << 0)
 669#define WM8350_ISINK_FLASH_ON_3_91S             (2 << 0)
 670#define WM8350_ISINK_FLASH_ON_7_80S             (3 << 0)
 671#define WM8350_ISINK_FLASH_OFF_INSTANT          (0 << 4)
 672#define WM8350_ISINK_FLASH_OFF_0_25S            (1 << 4)
 673#define WM8350_ISINK_FLASH_OFF_0_50S            (2 << 4)
 674#define WM8350_ISINK_FLASH_OFF_1_00S            (3 << 4)
 675#define WM8350_ISINK_FLASH_OFF_1_95S            (1 << 4)
 676#define WM8350_ISINK_FLASH_OFF_3_91S            (2 << 4)
 677#define WM8350_ISINK_FLASH_OFF_7_80S            (3 << 4)
 678
 679/*
 680 * Regulator Interrupts.
 681 */
 682#define WM8350_IRQ_CS1                          13
 683#define WM8350_IRQ_CS2                          14
 684#define WM8350_IRQ_UV_LDO4                      25
 685#define WM8350_IRQ_UV_LDO3                      26
 686#define WM8350_IRQ_UV_LDO2                      27
 687#define WM8350_IRQ_UV_LDO1                      28
 688#define WM8350_IRQ_UV_DC6                       29
 689#define WM8350_IRQ_UV_DC5                       30
 690#define WM8350_IRQ_UV_DC4                       31
 691#define WM8350_IRQ_UV_DC3                       32
 692#define WM8350_IRQ_UV_DC2                       33
 693#define WM8350_IRQ_UV_DC1                       34
 694#define WM8350_IRQ_OC_LS                        35
 695
 696#define NUM_WM8350_REGULATORS                   12
 697
 698struct wm8350;
 699struct platform_device;
 700struct regulator_init_data;
 701
 702/*
 703 * WM8350 LED platform data
 704 */
 705struct wm8350_led_platform_data {
 706        const char *name;
 707        const char *default_trigger;
 708        int max_uA;
 709};
 710
 711struct wm8350_led {
 712        struct platform_device *pdev;
 713        struct work_struct work;
 714        spinlock_t value_lock;
 715        enum led_brightness value;
 716        struct led_classdev cdev;
 717        int max_uA_index;
 718        int enabled;
 719
 720        struct regulator *isink;
 721        struct regulator_consumer_supply isink_consumer;
 722        struct regulator_init_data isink_init;
 723        struct regulator *dcdc;
 724        struct regulator_consumer_supply dcdc_consumer;
 725        struct regulator_init_data dcdc_init;
 726};
 727
 728struct wm8350_pmic {
 729        /* Number of regulators of each type on this device */
 730        int max_dcdc;
 731        int max_isink;
 732
 733        /* ISINK to DCDC mapping */
 734        int isink_A_dcdc;
 735        int isink_B_dcdc;
 736
 737        /* hibernate configs */
 738        u16 dcdc1_hib_mode;
 739        u16 dcdc3_hib_mode;
 740        u16 dcdc4_hib_mode;
 741        u16 dcdc6_hib_mode;
 742
 743        /* regulator devices */
 744        struct platform_device *pdev[NUM_WM8350_REGULATORS];
 745
 746        /* LED devices */
 747        struct wm8350_led led[2];
 748};
 749
 750int wm8350_register_regulator(struct wm8350 *wm8350, int reg,
 751                              struct regulator_init_data *initdata);
 752int wm8350_register_led(struct wm8350 *wm8350, int lednum, int dcdc, int isink,
 753                        struct wm8350_led_platform_data *pdata);
 754
 755/*
 756 * Additional DCDC control not supported via regulator API
 757 */
 758int wm8350_dcdc_set_slot(struct wm8350 *wm8350, int dcdc, u16 start,
 759                         u16 stop, u16 fault);
 760int wm8350_dcdc25_set_mode(struct wm8350 *wm8350, int dcdc, u16 mode,
 761                           u16 ilim, u16 ramp, u16 feedback);
 762
 763/*
 764 * Additional LDO control not supported via regulator API
 765 */
 766int wm8350_ldo_set_slot(struct wm8350 *wm8350, int ldo, u16 start, u16 stop);
 767
 768/*
 769 * Additional ISINK control not supported via regulator API
 770 */
 771int wm8350_isink_set_flash(struct wm8350 *wm8350, int isink, u16 mode,
 772                           u16 trigger, u16 duration, u16 on_ramp,
 773                           u16 off_ramp, u16 drive);
 774
 775#endif
 776