aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2012-07-30 15:41:17 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2012-07-30 15:41:17 -0400
commit3e701cdfe601306817604ca7f79f1d1c1088007c (patch)
tree1b0a4088a091f035d8be06758a604ca449223fc0
parent7d3d09b01a028e9dd1282149fdcd2a6e0edd73e4 (diff)
parent3c1534c7ecffeb4330bba4c55d17f301528195b6 (diff)
Merge tag 'mfd-3.6-1' of git://git.kernel.org/pub/scm/linux/kernel/git/sameo/mfd-2.6
Pull MFD bits from Samuel Ortiz: "We have support for a few new drivers: - Samsung s2mps11 - Wolfson Microelectronics wm5102 and wm5110 - Marvell 88PM800 and 88PM805 - TI twl6041 We also have our regular driver improvements: - Device tree and IRQ domain support for STE AB8500 - Regmap and devm_* API conversion for TI tps6586x - Device tree support for Samsung max77686 - devm_* API conversion for STE AB3100 Besides that, quite a lot of fixing and cleanup for mc13xxx, tps65910, tps65090, da9052 and twl-core." Fix up mostly trivial conflicts, with the exception of drivers/usb/host/ehci-omap.c in particular, which had some re-organization of the reset sequence (commit 1a49e2ac9651: "EHCI: centralize controller initialization") that clashed with commit 2761a6394516 ("mfd: USB: Fix the omap-usb EHCI ULPI PHY reset fix issues"). In particular, commit 2761a6394516 moved the usb_add_hcd() to the *middle* of the reset sequence, which clashes fairly badly with the reset sequence re-organization (although it could have been done inside the new omap_ehci_init() function). I left that part of commit 2761a6394516 just undone. * tag 'mfd-3.6-1' of git://git.kernel.org/pub/scm/linux/kernel/git/sameo/mfd-2.6: (110 commits) mfd: Ensure AB8500 platform data is passed through db8500-prcmu to MFD Core mfd: Arizone core should select MFD_CORE mfd: Fix arizona-irq.c build by selecting REGMAP_IRQ mfd: Add debug trace on entering and leaving arizone runtime suspend mfd: Correct tps65090 cell names mfd: Remove gpio support from tps6586x core driver ARM: tegra: defconfig: Enable tps6586x gpio gpio: tps6586x: Add gpio support through platform driver mfd: Cache tps6586x register through regmap mfd: Use regmap for tps6586x register access. mfd: Use devm managed resources for tps6586x input: Add onkey support for 88PM80X PMIC mfd: Add support for twl6041 mfd: Fix twl6040 revision information mfd: Matches should be NULL when populate anatop child devices input: ab8500-ponkey: Create AB8500 domain IRQ mapping mfd: Add missing out of memory check for pcf50633 Documentation: Describe the AB8500 Device Tree bindings mfd: Add tps65910 32-kHz-crystal-input init mfd: Drop modifying mc13xxx driver's id_table in probe ...
-rw-r--r--Documentation/devicetree/bindings/mfd/ab8500.txt123
-rw-r--r--Documentation/devicetree/bindings/mfd/max77686.txt59
-rw-r--r--Documentation/devicetree/bindings/mfd/tps65910.txt2
-rw-r--r--Documentation/devicetree/bindings/mfd/twl6040.txt2
-rw-r--r--MAINTAINERS10
-rw-r--r--arch/arm/configs/tegra_defconfig1
-rw-r--r--arch/arm/mach-exynos/mach-nuri.c4
-rw-r--r--arch/arm/mach-exynos/mach-origen.c1
-rw-r--r--arch/arm/mach-ux500/board-mop500.c30
-rw-r--r--arch/arm/mach-ux500/cpu-db8500.c7
-rw-r--r--arch/arm/mach-ux500/include/mach/setup.h3
-rw-r--r--drivers/extcon/Kconfig2
-rw-r--r--drivers/extcon/extcon-max8997.c29
-rw-r--r--drivers/gpio/Kconfig7
-rw-r--r--drivers/gpio/Makefile1
-rw-r--r--drivers/gpio/gpio-tps6586x.c158
-rw-r--r--drivers/input/misc/88pm80x_onkey.c168
-rw-r--r--drivers/input/misc/Kconfig10
-rw-r--r--drivers/input/misc/Makefile1
-rw-r--r--drivers/input/misc/ab8500-ponkey.c4
-rw-r--r--drivers/mfd/88pm800.c596
-rw-r--r--drivers/mfd/88pm805.c301
-rw-r--r--drivers/mfd/88pm80x.c145
-rw-r--r--drivers/mfd/88pm860x-core.c23
-rw-r--r--drivers/mfd/Kconfig98
-rw-r--r--drivers/mfd/Makefile15
-rw-r--r--drivers/mfd/ab3100-core.c23
-rw-r--r--drivers/mfd/ab8500-core.c242
-rw-r--r--drivers/mfd/ab8500-debugfs.c12
-rw-r--r--drivers/mfd/ab8500-gpadc.c9
-rw-r--r--drivers/mfd/ab8500-sysctrl.c6
-rw-r--r--drivers/mfd/adp5520.c2
-rw-r--r--drivers/mfd/anatop-mfd.c2
-rw-r--r--drivers/mfd/arizona-core.c566
-rw-r--r--drivers/mfd/arizona-i2c.c97
-rw-r--r--drivers/mfd/arizona-irq.c275
-rw-r--r--drivers/mfd/arizona-spi.c97
-rw-r--r--drivers/mfd/arizona.h40
-rw-r--r--drivers/mfd/da9052-core.c1
-rw-r--r--drivers/mfd/db8500-prcmu.c92
-rw-r--r--drivers/mfd/dbx500-prcmu-regs.h1
-rw-r--r--drivers/mfd/max77686-irq.c319
-rw-r--r--drivers/mfd/max77686.c187
-rw-r--r--drivers/mfd/max77693.c11
-rw-r--r--drivers/mfd/max8925-core.c8
-rw-r--r--drivers/mfd/max8997-irq.c62
-rw-r--r--drivers/mfd/max8997.c9
-rw-r--r--drivers/mfd/mc13xxx-core.c4
-rw-r--r--drivers/mfd/mc13xxx-i2c.c12
-rw-r--r--drivers/mfd/mc13xxx-spi.c15
-rw-r--r--drivers/mfd/mfd-core.c30
-rw-r--r--drivers/mfd/pcf50633-core.c9
-rw-r--r--drivers/mfd/s5m-core.c206
-rw-r--r--drivers/mfd/s5m-irq.c495
-rw-r--r--drivers/mfd/sec-core.c216
-rw-r--r--drivers/mfd/sec-irq.c317
-rw-r--r--drivers/mfd/tc3589x.c9
-rw-r--r--drivers/mfd/tps65090.c4
-rw-r--r--drivers/mfd/tps6586x.c296
-rw-r--r--drivers/mfd/tps65910.c23
-rw-r--r--drivers/mfd/twl-core.c3
-rw-r--r--drivers/mfd/twl6040-core.c24
-rw-r--r--drivers/mfd/wm5102-tables.c2399
-rw-r--r--drivers/mfd/wm5110-tables.c2281
-rw-r--r--drivers/mfd/wm8350-core.c354
-rw-r--r--drivers/mfd/wm8350-i2c.c5
-rw-r--r--drivers/mfd/wm8350-irq.c8
-rw-r--r--drivers/mfd/wm8350-regmap.c3222
-rw-r--r--drivers/mfd/wm8994-core.c17
-rw-r--r--drivers/mfd/wm8994-irq.c10
-rw-r--r--drivers/misc/ab8500-pwm.c6
-rw-r--r--drivers/regulator/Kconfig2
-rw-r--r--drivers/regulator/ab8500.c6
-rw-r--r--drivers/regulator/db8500-prcmu.c6
-rw-r--r--drivers/regulator/s5m8767.c72
-rw-r--r--drivers/rtc/Kconfig10
-rw-r--r--drivers/rtc/Makefile1
-rw-r--r--drivers/rtc/rtc-88pm80x.c371
-rw-r--r--drivers/rtc/rtc-max8925.c13
-rw-r--r--drivers/usb/host/ehci-omap.c8
-rw-r--r--include/linux/mfd/88pm80x.h369
-rw-r--r--include/linux/mfd/88pm860x.h1
-rw-r--r--include/linux/mfd/abx500/ab8500.h5
-rw-r--r--include/linux/mfd/arizona/core.h114
-rw-r--r--include/linux/mfd/arizona/pdata.h119
-rw-r--r--include/linux/mfd/arizona/registers.h6594
-rw-r--r--include/linux/mfd/core.h5
-rw-r--r--include/linux/mfd/db8500-prcmu.h7
-rw-r--r--include/linux/mfd/dbx500-prcmu.h7
-rw-r--r--include/linux/mfd/max77686-private.h246
-rw-r--r--include/linux/mfd/max77686.h114
-rw-r--r--include/linux/mfd/max77693-private.h1
-rw-r--r--include/linux/mfd/max8997-private.h4
-rw-r--r--include/linux/mfd/max8997.h1
-rw-r--r--include/linux/mfd/s5m87xx/s5m-core.h379
-rw-r--r--include/linux/mfd/s5m87xx/s5m-pmic.h129
-rw-r--r--include/linux/mfd/samsung/core.h159
-rw-r--r--include/linux/mfd/samsung/irq.h152
-rw-r--r--include/linux/mfd/samsung/rtc.h (renamed from include/linux/mfd/s5m87xx/s5m-rtc.h)69
-rw-r--r--include/linux/mfd/samsung/s2mps11.h196
-rw-r--r--include/linux/mfd/samsung/s5m8763.h96
-rw-r--r--include/linux/mfd/samsung/s5m8767.h188
-rw-r--r--include/linux/mfd/tps65910.h1
-rw-r--r--include/linux/mfd/twl6040.h6
-rw-r--r--include/linux/mfd/wm8350/core.h26
-rw-r--r--include/linux/mfd/wm8994/pdata.h1
-rw-r--r--sound/soc/codecs/twl6040.c2
107 files changed, 17915 insertions, 5391 deletions
diff --git a/Documentation/devicetree/bindings/mfd/ab8500.txt b/Documentation/devicetree/bindings/mfd/ab8500.txt
new file mode 100644
index 000000000000..69e757a657a0
--- /dev/null
+++ b/Documentation/devicetree/bindings/mfd/ab8500.txt
@@ -0,0 +1,123 @@
1* AB8500 Multi-Functional Device (MFD)
2
3Required parent device properties:
4- compatible : contains "stericsson,ab8500";
5- interrupts : contains the IRQ line for the AB8500
6- interrupt-controller : describes the AB8500 as an Interrupt Controller (has its own domain)
7- #interrupt-cells : should be 2, for 2-cell format
8 - The first cell is the AB8500 local IRQ number
9 - The second cell is used to specify optional parameters
10 - bits[3:0] trigger type and level flags:
11 1 = low-to-high edge triggered
12 2 = high-to-low edge triggered
13 4 = active high level-sensitive
14 8 = active low level-sensitive
15
16Optional parent device properties:
17- reg : contains the PRCMU mailbox address for the AB8500 i2c port
18
19The AB8500 consists of a large and varied group of sub-devices:
20
21Device IRQ Names Supply Names Description
22------ --------- ------------ -----------
23ab8500-bm : : : Battery Manager
24ab8500-btemp : : : Battery Temperature
25ab8500-charger : : : Battery Charger
26ab8500-fg : : : Fuel Gauge
27ab8500-gpadc : HW_CONV_END : vddadc : Analogue to Digital Converter
28 SW_CONV_END : :
29ab8500-gpio : : : GPIO Controller
30ab8500-ponkey : ONKEY_DBF : : Power-on Key
31 ONKEY_DBR : :
32ab8500-pwm : : : Pulse Width Modulator
33ab8500-regulator : : : Regulators
34ab8500-rtc : 60S : : Real Time Clock
35 : ALARM : :
36ab8500-sysctrl : : : System Control
37ab8500-usb : ID_WAKEUP_R : vddulpivio18 : Universal Serial Bus
38 : ID_WAKEUP_F : v-ape :
39 : VBUS_DET_F : musb_1v8 :
40 : VBUS_DET_R : :
41 : USB_LINK_STATUS : :
42 : USB_ADP_PROBE_PLUG : :
43 : USB_ADP_PROBE_UNPLUG : :
44
45Required child device properties:
46- compatible : "stericsson,ab8500-[bm|btemp|charger|fg|gpadc|gpio|ponkey|
47 pwm|regulator|rtc|sysctrl|usb]";
48
49Optional child device properties:
50- interrupts : contains the device IRQ(s) using the 2-cell format (see above)
51- interrupt-names : contains names of IRQ resource in the order in which they were
52 supplied in the interrupts property
53- <supply_name>-supply : contains a phandle to the regulator supply node in Device Tree
54
55ab8500@5 {
56 compatible = "stericsson,ab8500";
57 reg = <5>; /* mailbox 5 is i2c */
58 interrupts = <0 40 0x4>;
59 interrupt-controller;
60 #interrupt-cells = <2>;
61
62 ab8500-rtc {
63 compatible = "stericsson,ab8500-rtc";
64 interrupts = <17 0x4
65 18 0x4>;
66 interrupt-names = "60S", "ALARM";
67 };
68
69 ab8500-gpadc {
70 compatible = "stericsson,ab8500-gpadc";
71 interrupts = <32 0x4
72 39 0x4>;
73 interrupt-names = "HW_CONV_END", "SW_CONV_END";
74 vddadc-supply = <&ab8500_ldo_tvout_reg>;
75 };
76
77 ab8500-usb {
78 compatible = "stericsson,ab8500-usb";
79 interrupts = < 90 0x4
80 96 0x4
81 14 0x4
82 15 0x4
83 79 0x4
84 74 0x4
85 75 0x4>;
86 interrupt-names = "ID_WAKEUP_R",
87 "ID_WAKEUP_F",
88 "VBUS_DET_F",
89 "VBUS_DET_R",
90 "USB_LINK_STATUS",
91 "USB_ADP_PROBE_PLUG",
92 "USB_ADP_PROBE_UNPLUG";
93 vddulpivio18-supply = <&ab8500_ldo_initcore_reg>;
94 v-ape-supply = <&db8500_vape_reg>;
95 musb_1v8-supply = <&db8500_vsmps2_reg>;
96 };
97
98 ab8500-ponkey {
99 compatible = "stericsson,ab8500-ponkey";
100 interrupts = <6 0x4
101 7 0x4>;
102 interrupt-names = "ONKEY_DBF", "ONKEY_DBR";
103 };
104
105 ab8500-sysctrl {
106 compatible = "stericsson,ab8500-sysctrl";
107 };
108
109 ab8500-pwm {
110 compatible = "stericsson,ab8500-pwm";
111 };
112
113 ab8500-regulators {
114 compatible = "stericsson,ab8500-regulator";
115
116 ab8500_ldo_aux1_reg: ab8500_ldo_aux1 {
117 /*
118 * See: Documentation/devicetree/bindings/regulator/regulator.txt
119 * for more information on regulators
120 */
121 };
122 };
123};
diff --git a/Documentation/devicetree/bindings/mfd/max77686.txt b/Documentation/devicetree/bindings/mfd/max77686.txt
new file mode 100644
index 000000000000..c6a3469d3436
--- /dev/null
+++ b/Documentation/devicetree/bindings/mfd/max77686.txt
@@ -0,0 +1,59 @@
1Maxim MAX77686 multi-function device
2
3MAX77686 is a Mulitifunction device with PMIC, RTC and Charger on chip. It is
4interfaced to host controller using i2c interface. PMIC and Charger submodules
5are addressed using same i2c slave address whereas RTC submodule uses
6different i2c slave address,presently for which we are statically creating i2c
7client while probing.This document describes the binding for mfd device and
8PMIC submodule.
9
10Required properties:
11- compatible : Must be "maxim,max77686";
12- reg : Specifies the i2c slave address of PMIC block.
13- interrupts : This i2c device has an IRQ line connected to the main SoC.
14- interrupt-parent : The parent interrupt controller.
15
16Optional node:
17- voltage-regulators : The regulators of max77686 have to be instantiated
18 under subnode named "voltage-regulators" using the following format.
19
20 regulator_name {
21 regulator-compatible = LDOn/BUCKn
22 standard regulator constraints....
23 };
24 refer Documentation/devicetree/bindings/regulator/regulator.txt
25
26 The regulator-compatible property of regulator should initialized with string
27to get matched with their hardware counterparts as follow:
28
29 -LDOn : for LDOs, where n can lie in range 1 to 26.
30 example: LDO1, LDO2, LDO26.
31 -BUCKn : for BUCKs, where n can lie in range 1 to 9.
32 example: BUCK1, BUCK5, BUCK9.
33
34Example:
35
36 max77686@09 {
37 compatible = "maxim,max77686";
38 interrupt-parent = <&wakeup_eint>;
39 interrupts = <26 0>;
40 reg = <0x09>;
41
42 voltage-regulators {
43 ldo11_reg {
44 regulator-compatible = "LDO11";
45 regulator-name = "vdd_ldo11";
46 regulator-min-microvolt = <1900000>;
47 regulator-max-microvolt = <1900000>;
48 regulator-always-on;
49 };
50
51 buck1_reg {
52 regulator-compatible = "BUCK1";
53 regulator-name = "vdd_mif";
54 regulator-min-microvolt = <950000>;
55 regulator-max-microvolt = <1300000>;
56 regulator-always-on;
57 regulator-boot-on;
58 };
59 }
diff --git a/Documentation/devicetree/bindings/mfd/tps65910.txt b/Documentation/devicetree/bindings/mfd/tps65910.txt
index d2802d4717bc..db03599ae4dc 100644
--- a/Documentation/devicetree/bindings/mfd/tps65910.txt
+++ b/Documentation/devicetree/bindings/mfd/tps65910.txt
@@ -81,7 +81,7 @@ Example:
81 81
82 ti,vmbch-threshold = 0; 82 ti,vmbch-threshold = 0;
83 ti,vmbch2-threshold = 0; 83 ti,vmbch2-threshold = 0;
84 84 ti,en-ck32k-xtal;
85 ti,en-gpio-sleep = <0 0 1 0 0 0 0 0 0>; 85 ti,en-gpio-sleep = <0 0 1 0 0 0 0 0 0>;
86 86
87 vcc1-supply = <&reg_parent>; 87 vcc1-supply = <&reg_parent>;
diff --git a/Documentation/devicetree/bindings/mfd/twl6040.txt b/Documentation/devicetree/bindings/mfd/twl6040.txt
index bc67c6f424aa..c855240f3a0e 100644
--- a/Documentation/devicetree/bindings/mfd/twl6040.txt
+++ b/Documentation/devicetree/bindings/mfd/twl6040.txt
@@ -6,7 +6,7 @@ They are connected ot the host processor via i2c for commands, McPDM for audio
6data and commands. 6data and commands.
7 7
8Required properties: 8Required properties:
9- compatible : Must be "ti,twl6040"; 9- compatible : "ti,twl6040" for twl6040, "ti,twl6041" for twl6041
10- reg: must be 0x4b for i2c address 10- reg: must be 0x4b for i2c address
11- interrupts: twl6040 has one interrupt line connecteded to the main SoC 11- interrupts: twl6040 has one interrupt line connecteded to the main SoC
12- interrupt-parent: The parent interrupt controller 12- interrupt-parent: The parent interrupt controller
diff --git a/MAINTAINERS b/MAINTAINERS
index b141083b2621..19f705073942 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -5912,6 +5912,16 @@ L: linux-fbdev@vger.kernel.org
5912S: Maintained 5912S: Maintained
5913F: drivers/video/s3c-fb.c 5913F: drivers/video/s3c-fb.c
5914 5914
5915SAMSUNG MULTIFUNCTION DEVICE DRIVERS
5916M: Sangbeom Kim <sbkim73@samsung.com>
5917L: linux-kernel@vger.kernel.org
5918S: Supported
5919F: drivers/mfd/sec*.c
5920F: drivers/regulator/s2m*.c
5921F: drivers/regulator/s5m*.c
5922F: drivers/rtc/rtc-sec.c
5923F: include/linux/mfd/samsung/
5924
5915SERIAL DRIVERS 5925SERIAL DRIVERS
5916M: Alan Cox <alan@linux.intel.com> 5926M: Alan Cox <alan@linux.intel.com>
5917L: linux-serial@vger.kernel.org 5927L: linux-serial@vger.kernel.org
diff --git a/arch/arm/configs/tegra_defconfig b/arch/arm/configs/tegra_defconfig
index 4be9c1e80ee6..db2245353f0f 100644
--- a/arch/arm/configs/tegra_defconfig
+++ b/arch/arm/configs/tegra_defconfig
@@ -106,6 +106,7 @@ CONFIG_I2C_TEGRA=y
106CONFIG_SPI=y 106CONFIG_SPI=y
107CONFIG_SPI_TEGRA=y 107CONFIG_SPI_TEGRA=y
108CONFIG_GPIO_TPS65910=y 108CONFIG_GPIO_TPS65910=y
109CONFIG_GPIO_TPS6586X=y
109CONFIG_POWER_SUPPLY=y 110CONFIG_POWER_SUPPLY=y
110CONFIG_BATTERY_SBS=y 111CONFIG_BATTERY_SBS=y
111CONFIG_SENSORS_LM90=y 112CONFIG_SENSORS_LM90=y
diff --git a/arch/arm/mach-exynos/mach-nuri.c b/arch/arm/mach-exynos/mach-nuri.c
index f98a83a81ce7..ea785fcaf6c3 100644
--- a/arch/arm/mach-exynos/mach-nuri.c
+++ b/arch/arm/mach-exynos/mach-nuri.c
@@ -1066,12 +1066,8 @@ static struct platform_device nuri_max8903_device = {
1066static void __init nuri_power_init(void) 1066static void __init nuri_power_init(void)
1067{ 1067{
1068 int gpio; 1068 int gpio;
1069 int irq_base = IRQ_GPIO_END + 1;
1070 int ta_en = 0; 1069 int ta_en = 0;
1071 1070
1072 nuri_max8997_pdata.irq_base = irq_base;
1073 irq_base += MAX8997_IRQ_NR;
1074
1075 gpio = EXYNOS4_GPX0(7); 1071 gpio = EXYNOS4_GPX0(7);
1076 gpio_request(gpio, "AP_PMIC_IRQ"); 1072 gpio_request(gpio, "AP_PMIC_IRQ");
1077 s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(0xf)); 1073 s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(0xf));
diff --git a/arch/arm/mach-exynos/mach-origen.c b/arch/arm/mach-exynos/mach-origen.c
index 5a12dc26f496..5ca80307d6d7 100644
--- a/arch/arm/mach-exynos/mach-origen.c
+++ b/arch/arm/mach-exynos/mach-origen.c
@@ -426,7 +426,6 @@ static struct max8997_platform_data __initdata origen_max8997_pdata = {
426 .buck1_gpiodvs = false, 426 .buck1_gpiodvs = false,
427 .buck2_gpiodvs = false, 427 .buck2_gpiodvs = false,
428 .buck5_gpiodvs = false, 428 .buck5_gpiodvs = false,
429 .irq_base = IRQ_GPIO_END + 1,
430 429
431 .ignore_gpiodvs_side_effect = true, 430 .ignore_gpiodvs_side_effect = true,
432 .buck125_default_idx = 0x0, 431 .buck125_default_idx = 0x0,
diff --git a/arch/arm/mach-ux500/board-mop500.c b/arch/arm/mach-ux500/board-mop500.c
index 8f421c0ca45c..8674a890fd1c 100644
--- a/arch/arm/mach-ux500/board-mop500.c
+++ b/arch/arm/mach-ux500/board-mop500.c
@@ -211,24 +211,6 @@ static struct ab8500_platform_data ab8500_platdata = {
211 .codec = &ab8500_codec_pdata, 211 .codec = &ab8500_codec_pdata,
212}; 212};
213 213
214static struct resource ab8500_resources[] = {
215 [0] = {
216 .start = IRQ_DB8500_AB8500,
217 .end = IRQ_DB8500_AB8500,
218 .flags = IORESOURCE_IRQ
219 }
220};
221
222struct platform_device ab8500_device = {
223 .name = "ab8500-core",
224 .id = 0,
225 .dev = {
226 .platform_data = &ab8500_platdata,
227 },
228 .num_resources = 1,
229 .resource = ab8500_resources,
230};
231
232/* 214/*
233 * TPS61052 215 * TPS61052
234 */ 216 */
@@ -443,7 +425,6 @@ static struct hash_platform_data u8500_hash1_platform_data = {
443/* add any platform devices here - TODO */ 425/* add any platform devices here - TODO */
444static struct platform_device *mop500_platform_devs[] __initdata = { 426static struct platform_device *mop500_platform_devs[] __initdata = {
445 &mop500_gpio_keys_device, 427 &mop500_gpio_keys_device,
446 &ab8500_device,
447}; 428};
448 429
449#ifdef CONFIG_STE_DMA40 430#ifdef CONFIG_STE_DMA40
@@ -605,7 +586,6 @@ static struct platform_device *snowball_platform_devs[] __initdata = {
605 &snowball_led_dev, 586 &snowball_led_dev,
606 &snowball_key_dev, 587 &snowball_key_dev,
607 &snowball_sbnet_dev, 588 &snowball_sbnet_dev,
608 &ab8500_device,
609}; 589};
610 590
611static void __init mop500_init_machine(void) 591static void __init mop500_init_machine(void)
@@ -617,9 +597,8 @@ static void __init mop500_init_machine(void)
617 mop500_gpio_keys[0].gpio = GPIO_PROX_SENSOR; 597 mop500_gpio_keys[0].gpio = GPIO_PROX_SENSOR;
618 598
619 mop500_pinmaps_init(); 599 mop500_pinmaps_init();
620 parent = u8500_init_devices(); 600 parent = u8500_init_devices(&ab8500_platdata);
621 601
622 /* FIXME: parent of ab8500 should be prcmu */
623 for (i = 0; i < ARRAY_SIZE(mop500_platform_devs); i++) 602 for (i = 0; i < ARRAY_SIZE(mop500_platform_devs); i++)
624 mop500_platform_devs[i]->dev.parent = parent; 603 mop500_platform_devs[i]->dev.parent = parent;
625 604
@@ -652,7 +631,7 @@ static void __init snowball_init_machine(void)
652 int i; 631 int i;
653 632
654 snowball_pinmaps_init(); 633 snowball_pinmaps_init();
655 parent = u8500_init_devices(); 634 parent = u8500_init_devices(&ab8500_platdata);
656 635
657 for (i = 0; i < ARRAY_SIZE(snowball_platform_devs); i++) 636 for (i = 0; i < ARRAY_SIZE(snowball_platform_devs); i++)
658 snowball_platform_devs[i]->dev.parent = parent; 637 snowball_platform_devs[i]->dev.parent = parent;
@@ -684,7 +663,7 @@ static void __init hrefv60_init_machine(void)
684 mop500_gpio_keys[0].gpio = HREFV60_PROX_SENSE_GPIO; 663 mop500_gpio_keys[0].gpio = HREFV60_PROX_SENSE_GPIO;
685 664
686 hrefv60_pinmaps_init(); 665 hrefv60_pinmaps_init();
687 parent = u8500_init_devices(); 666 parent = u8500_init_devices(&ab8500_platdata);
688 667
689 for (i = 0; i < ARRAY_SIZE(mop500_platform_devs); i++) 668 for (i = 0; i < ARRAY_SIZE(mop500_platform_devs); i++)
690 mop500_platform_devs[i]->dev.parent = parent; 669 mop500_platform_devs[i]->dev.parent = parent;
@@ -785,9 +764,6 @@ static const struct of_device_id u8500_local_bus_nodes[] = {
785 /* only create devices below soc node */ 764 /* only create devices below soc node */
786 { .compatible = "stericsson,db8500", }, 765 { .compatible = "stericsson,db8500", },
787 { .compatible = "stericsson,db8500-prcmu", }, 766 { .compatible = "stericsson,db8500-prcmu", },
788 { .compatible = "stericsson,db8500-prcmu-regulator", },
789 { .compatible = "stericsson,ab8500", },
790 { .compatible = "stericsson,ab8500-regulator", },
791 { .compatible = "simple-bus"}, 767 { .compatible = "simple-bus"},
792 { }, 768 { },
793}; 769};
diff --git a/arch/arm/mach-ux500/cpu-db8500.c b/arch/arm/mach-ux500/cpu-db8500.c
index c8dd94f606dc..db3c52d56ca4 100644
--- a/arch/arm/mach-ux500/cpu-db8500.c
+++ b/arch/arm/mach-ux500/cpu-db8500.c
@@ -16,6 +16,7 @@
16#include <linux/irq.h> 16#include <linux/irq.h>
17#include <linux/platform_device.h> 17#include <linux/platform_device.h>
18#include <linux/io.h> 18#include <linux/io.h>
19#include <linux/mfd/abx500/ab8500.h>
19 20
20#include <asm/mach/map.h> 21#include <asm/mach/map.h>
21#include <asm/pmu.h> 22#include <asm/pmu.h>
@@ -115,7 +116,7 @@ static irqreturn_t db8500_pmu_handler(int irq, void *dev, irq_handler_t handler)
115 return ret; 116 return ret;
116} 117}
117 118
118static struct arm_pmu_platdata db8500_pmu_platdata = { 119struct arm_pmu_platdata db8500_pmu_platdata = {
119 .handle_irq = db8500_pmu_handler, 120 .handle_irq = db8500_pmu_handler,
120}; 121};
121 122
@@ -206,7 +207,7 @@ static struct device * __init db8500_soc_device_init(void)
206/* 207/*
207 * This function is called from the board init 208 * This function is called from the board init
208 */ 209 */
209struct device * __init u8500_init_devices(void) 210struct device * __init u8500_init_devices(struct ab8500_platform_data *ab8500)
210{ 211{
211 struct device *parent; 212 struct device *parent;
212 int i; 213 int i;
@@ -223,6 +224,8 @@ struct device * __init u8500_init_devices(void)
223 for (i = 0; i < ARRAY_SIZE(platform_devs); i++) 224 for (i = 0; i < ARRAY_SIZE(platform_devs); i++)
224 platform_devs[i]->dev.parent = parent; 225 platform_devs[i]->dev.parent = parent;
225 226
227 db8500_prcmu_device.dev.platform_data = ab8500;
228
226 platform_add_devices(platform_devs, ARRAY_SIZE(platform_devs)); 229 platform_add_devices(platform_devs, ARRAY_SIZE(platform_devs));
227 230
228 return parent; 231 return parent;
diff --git a/arch/arm/mach-ux500/include/mach/setup.h b/arch/arm/mach-ux500/include/mach/setup.h
index 8b7ed82a2866..7914e5eaa9c7 100644
--- a/arch/arm/mach-ux500/include/mach/setup.h
+++ b/arch/arm/mach-ux500/include/mach/setup.h
@@ -13,11 +13,12 @@
13 13
14#include <asm/mach/time.h> 14#include <asm/mach/time.h>
15#include <linux/init.h> 15#include <linux/init.h>
16#include <linux/mfd/abx500/ab8500.h>
16 17
17void __init ux500_map_io(void); 18void __init ux500_map_io(void);
18extern void __init u8500_map_io(void); 19extern void __init u8500_map_io(void);
19 20
20extern struct device * __init u8500_init_devices(void); 21extern struct device * __init u8500_init_devices(struct ab8500_platform_data *ab8500);
21 22
22extern void __init ux500_init_irq(void); 23extern void __init ux500_init_irq(void);
23extern void __init ux500_init_late(void); 24extern void __init ux500_init_late(void);
diff --git a/drivers/extcon/Kconfig b/drivers/extcon/Kconfig
index 16716356d1fe..e175c8ed4ec4 100644
--- a/drivers/extcon/Kconfig
+++ b/drivers/extcon/Kconfig
@@ -33,7 +33,7 @@ config EXTCON_MAX77693
33 33
34config EXTCON_MAX8997 34config EXTCON_MAX8997
35 tristate "MAX8997 EXTCON Support" 35 tristate "MAX8997 EXTCON Support"
36 depends on MFD_MAX8997 36 depends on MFD_MAX8997 && IRQ_DOMAIN
37 help 37 help
38 If you say yes here you get support for the MUIC device of 38 If you say yes here you get support for the MUIC device of
39 Maxim MAX8997 PMIC. The MAX8997 MUIC is a USB port accessory 39 Maxim MAX8997 PMIC. The MAX8997 MUIC is a USB port accessory
diff --git a/drivers/extcon/extcon-max8997.c b/drivers/extcon/extcon-max8997.c
index a4ed30bd9a41..ef9090a4271d 100644
--- a/drivers/extcon/extcon-max8997.c
+++ b/drivers/extcon/extcon-max8997.c
@@ -26,6 +26,7 @@
26#include <linux/mfd/max8997.h> 26#include <linux/mfd/max8997.h>
27#include <linux/mfd/max8997-private.h> 27#include <linux/mfd/max8997-private.h>
28#include <linux/extcon.h> 28#include <linux/extcon.h>
29#include <linux/irqdomain.h>
29 30
30#define DEV_NAME "max8997-muic" 31#define DEV_NAME "max8997-muic"
31 32
@@ -77,6 +78,7 @@
77struct max8997_muic_irq { 78struct max8997_muic_irq {
78 unsigned int irq; 79 unsigned int irq;
79 const char *name; 80 const char *name;
81 unsigned int virq;
80}; 82};
81 83
82static struct max8997_muic_irq muic_irqs[] = { 84static struct max8997_muic_irq muic_irqs[] = {
@@ -343,12 +345,10 @@ static void max8997_muic_irq_work(struct work_struct *work)
343{ 345{
344 struct max8997_muic_info *info = container_of(work, 346 struct max8997_muic_info *info = container_of(work,
345 struct max8997_muic_info, irq_work); 347 struct max8997_muic_info, irq_work);
346 struct max8997_dev *max8997 = i2c_get_clientdata(info->muic);
347 u8 status[2]; 348 u8 status[2];
348 u8 adc, chg_type; 349 u8 adc, chg_type;
349 350 int irq_type = 0;
350 int irq_type = info->irq - max8997->irq_base; 351 int i, ret;
351 int ret;
352 352
353 mutex_lock(&info->mutex); 353 mutex_lock(&info->mutex);
354 354
@@ -363,6 +363,10 @@ static void max8997_muic_irq_work(struct work_struct *work)
363 dev_dbg(info->dev, "%s: STATUS1:0x%x, 2:0x%x\n", __func__, 363 dev_dbg(info->dev, "%s: STATUS1:0x%x, 2:0x%x\n", __func__,
364 status[0], status[1]); 364 status[0], status[1]);
365 365
366 for (i = 0 ; i < ARRAY_SIZE(muic_irqs) ; i++)
367 if (info->irq == muic_irqs[i].virq)
368 irq_type = muic_irqs[i].irq;
369
366 switch (irq_type) { 370 switch (irq_type) {
367 case MAX8997_MUICIRQ_ADC: 371 case MAX8997_MUICIRQ_ADC:
368 adc = status[0] & STATUS1_ADC_MASK; 372 adc = status[0] & STATUS1_ADC_MASK;
@@ -448,11 +452,15 @@ static int __devinit max8997_muic_probe(struct platform_device *pdev)
448 452
449 for (i = 0; i < ARRAY_SIZE(muic_irqs); i++) { 453 for (i = 0; i < ARRAY_SIZE(muic_irqs); i++) {
450 struct max8997_muic_irq *muic_irq = &muic_irqs[i]; 454 struct max8997_muic_irq *muic_irq = &muic_irqs[i];
455 int virq = 0;
456
457 virq = irq_create_mapping(max8997->irq_domain, muic_irq->irq);
458 if (!virq)
459 goto err_irq;
460 muic_irq->virq = virq;
451 461
452 ret = request_threaded_irq(pdata->irq_base + muic_irq->irq, 462 ret = request_threaded_irq(virq, NULL,max8997_muic_irq_handler,
453 NULL, max8997_muic_irq_handler, 463 0, muic_irq->name, info);
454 0, muic_irq->name,
455 info);
456 if (ret) { 464 if (ret) {
457 dev_err(&pdev->dev, 465 dev_err(&pdev->dev,
458 "failed: irq request (IRQ: %d," 466 "failed: irq request (IRQ: %d,"
@@ -496,7 +504,7 @@ err_extcon:
496 kfree(info->edev); 504 kfree(info->edev);
497err_irq: 505err_irq:
498 while (--i >= 0) 506 while (--i >= 0)
499 free_irq(pdata->irq_base + muic_irqs[i].irq, info); 507 free_irq(muic_irqs[i].virq, info);
500 kfree(info); 508 kfree(info);
501err_kfree: 509err_kfree:
502 return ret; 510 return ret;
@@ -505,11 +513,10 @@ err_kfree:
505static int __devexit max8997_muic_remove(struct platform_device *pdev) 513static int __devexit max8997_muic_remove(struct platform_device *pdev)
506{ 514{
507 struct max8997_muic_info *info = platform_get_drvdata(pdev); 515 struct max8997_muic_info *info = platform_get_drvdata(pdev);
508 struct max8997_dev *max8997 = i2c_get_clientdata(info->muic);
509 int i; 516 int i;
510 517
511 for (i = 0; i < ARRAY_SIZE(muic_irqs); i++) 518 for (i = 0; i < ARRAY_SIZE(muic_irqs); i++)
512 free_irq(max8997->irq_base + muic_irqs[i].irq, info); 519 free_irq(muic_irqs[i].virq, info);
513 cancel_work_sync(&info->irq_work); 520 cancel_work_sync(&info->irq_work);
514 521
515 extcon_dev_unregister(info->edev); 522 extcon_dev_unregister(info->edev);
diff --git a/drivers/gpio/Kconfig b/drivers/gpio/Kconfig
index 502b5ea43f4f..b16c8a72a2e2 100644
--- a/drivers/gpio/Kconfig
+++ b/drivers/gpio/Kconfig
@@ -597,6 +597,13 @@ config GPIO_AB8500
597 help 597 help
598 Select this to enable the AB8500 IC GPIO driver 598 Select this to enable the AB8500 IC GPIO driver
599 599
600config GPIO_TPS6586X
601 bool "TPS6586X GPIO"
602 depends on MFD_TPS6586X
603 help
604 Select this option to enable GPIO driver for the TPS6586X
605 chip family.
606
600config GPIO_TPS65910 607config GPIO_TPS65910
601 bool "TPS65910 GPIO" 608 bool "TPS65910 GPIO"
602 depends on MFD_TPS65910 609 depends on MFD_TPS65910
diff --git a/drivers/gpio/Makefile b/drivers/gpio/Makefile
index d37048105a87..153caceeb053 100644
--- a/drivers/gpio/Makefile
+++ b/drivers/gpio/Makefile
@@ -63,6 +63,7 @@ obj-$(CONFIG_GPIO_TC3589X) += gpio-tc3589x.o
63obj-$(CONFIG_ARCH_TEGRA) += gpio-tegra.o 63obj-$(CONFIG_ARCH_TEGRA) += gpio-tegra.o
64obj-$(CONFIG_GPIO_TIMBERDALE) += gpio-timberdale.o 64obj-$(CONFIG_GPIO_TIMBERDALE) += gpio-timberdale.o
65obj-$(CONFIG_ARCH_DAVINCI_TNETV107X) += gpio-tnetv107x.o 65obj-$(CONFIG_ARCH_DAVINCI_TNETV107X) += gpio-tnetv107x.o
66obj-$(CONFIG_GPIO_TPS6586X) += gpio-tps6586x.o
66obj-$(CONFIG_GPIO_TPS65910) += gpio-tps65910.o 67obj-$(CONFIG_GPIO_TPS65910) += gpio-tps65910.o
67obj-$(CONFIG_GPIO_TPS65912) += gpio-tps65912.o 68obj-$(CONFIG_GPIO_TPS65912) += gpio-tps65912.o
68obj-$(CONFIG_GPIO_TWL4030) += gpio-twl4030.o 69obj-$(CONFIG_GPIO_TWL4030) += gpio-twl4030.o
diff --git a/drivers/gpio/gpio-tps6586x.c b/drivers/gpio/gpio-tps6586x.c
new file mode 100644
index 000000000000..2526b3bb0fae
--- /dev/null
+++ b/drivers/gpio/gpio-tps6586x.c
@@ -0,0 +1,158 @@
1/*
2 * TI TPS6586x GPIO driver
3 *
4 * Copyright (c) 2012, NVIDIA CORPORATION. All rights reserved.
5 * Author: Laxman dewangan <ldewangan@nvidia.com>
6 *
7 * Based on tps6586x.c
8 * Copyright (c) 2010 CompuLab Ltd.
9 * Mike Rapoport <mike@compulab.co.il>
10 *
11 * This program is free software; you can redistribute it and/or modify it
12 * under the terms and conditions of the GNU General Public License,
13 * version 2, as published by the Free Software Foundation.
14 *
15 * This program is distributed in the hope it will be useful, but WITHOUT
16 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
17 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
18 * more details.
19 *
20 * You should have received a copy of the GNU General Public License
21 * along with this program. If not, see <http://www.gnu.org/licenses/>.
22 */
23
24#include <linux/errno.h>
25#include <linux/gpio.h>
26#include <linux/kernel.h>
27#include <linux/module.h>
28#include <linux/mfd/tps6586x.h>
29#include <linux/of_device.h>
30#include <linux/platform_device.h>
31
32/* GPIO control registers */
33#define TPS6586X_GPIOSET1 0x5d
34#define TPS6586X_GPIOSET2 0x5e
35
36struct tps6586x_gpio {
37 struct gpio_chip gpio_chip;
38 struct device *parent;
39};
40
41static inline struct tps6586x_gpio *to_tps6586x_gpio(struct gpio_chip *chip)
42{
43 return container_of(chip, struct tps6586x_gpio, gpio_chip);
44}
45
46static int tps6586x_gpio_get(struct gpio_chip *gc, unsigned offset)
47{
48 struct tps6586x_gpio *tps6586x_gpio = to_tps6586x_gpio(gc);
49 uint8_t val;
50 int ret;
51
52 ret = tps6586x_read(tps6586x_gpio->parent, TPS6586X_GPIOSET2, &val);
53 if (ret)
54 return ret;
55
56 return !!(val & (1 << offset));
57}
58
59static void tps6586x_gpio_set(struct gpio_chip *gc, unsigned offset,
60 int value)
61{
62 struct tps6586x_gpio *tps6586x_gpio = to_tps6586x_gpio(gc);
63
64 tps6586x_update(tps6586x_gpio->parent, TPS6586X_GPIOSET2,
65 value << offset, 1 << offset);
66}
67
68static int tps6586x_gpio_output(struct gpio_chip *gc, unsigned offset,
69 int value)
70{
71 struct tps6586x_gpio *tps6586x_gpio = to_tps6586x_gpio(gc);
72 uint8_t val, mask;
73
74 tps6586x_gpio_set(gc, offset, value);
75
76 val = 0x1 << (offset * 2);
77 mask = 0x3 << (offset * 2);
78
79 return tps6586x_update(tps6586x_gpio->parent, TPS6586X_GPIOSET1,
80 val, mask);
81}
82
83static int __devinit tps6586x_gpio_probe(struct platform_device *pdev)
84{
85 struct tps6586x_platform_data *pdata;
86 struct tps6586x_gpio *tps6586x_gpio;
87 int ret;
88
89 pdata = dev_get_platdata(pdev->dev.parent);
90 tps6586x_gpio = devm_kzalloc(&pdev->dev,
91 sizeof(*tps6586x_gpio), GFP_KERNEL);
92 if (!tps6586x_gpio) {
93 dev_err(&pdev->dev, "Could not allocate tps6586x_gpio\n");
94 return -ENOMEM;
95 }
96
97 tps6586x_gpio->parent = pdev->dev.parent;
98
99 tps6586x_gpio->gpio_chip.owner = THIS_MODULE;
100 tps6586x_gpio->gpio_chip.label = pdev->name;
101 tps6586x_gpio->gpio_chip.dev = &pdev->dev;
102 tps6586x_gpio->gpio_chip.ngpio = 4;
103 tps6586x_gpio->gpio_chip.can_sleep = 1;
104
105 /* FIXME: add handling of GPIOs as dedicated inputs */
106 tps6586x_gpio->gpio_chip.direction_output = tps6586x_gpio_output;
107 tps6586x_gpio->gpio_chip.set = tps6586x_gpio_set;
108 tps6586x_gpio->gpio_chip.get = tps6586x_gpio_get;
109
110#ifdef CONFIG_OF_GPIO
111 tps6586x_gpio->gpio_chip.of_node = pdev->dev.parent->of_node;
112#endif
113 if (pdata && pdata->gpio_base)
114 tps6586x_gpio->gpio_chip.base = pdata->gpio_base;
115 else
116 tps6586x_gpio->gpio_chip.base = -1;
117
118 ret = gpiochip_add(&tps6586x_gpio->gpio_chip);
119 if (ret < 0) {
120 dev_err(&pdev->dev, "Could not register gpiochip, %d\n", ret);
121 return ret;
122 }
123
124 platform_set_drvdata(pdev, tps6586x_gpio);
125
126 return ret;
127}
128
129static int __devexit tps6586x_gpio_remove(struct platform_device *pdev)
130{
131 struct tps6586x_gpio *tps6586x_gpio = platform_get_drvdata(pdev);
132
133 return gpiochip_remove(&tps6586x_gpio->gpio_chip);
134}
135
136static struct platform_driver tps6586x_gpio_driver = {
137 .driver.name = "tps6586x-gpio",
138 .driver.owner = THIS_MODULE,
139 .probe = tps6586x_gpio_probe,
140 .remove = __devexit_p(tps6586x_gpio_remove),
141};
142
143static int __init tps6586x_gpio_init(void)
144{
145 return platform_driver_register(&tps6586x_gpio_driver);
146}
147subsys_initcall(tps6586x_gpio_init);
148
149static void __exit tps6586x_gpio_exit(void)
150{
151 platform_driver_unregister(&tps6586x_gpio_driver);
152}
153module_exit(tps6586x_gpio_exit);
154
155MODULE_ALIAS("platform:tps6586x-gpio");
156MODULE_DESCRIPTION("GPIO interface for TPS6586X PMIC");
157MODULE_AUTHOR("Laxman Dewangan <ldewangan@nvidia.com>");
158MODULE_LICENSE("GPL");
diff --git a/drivers/input/misc/88pm80x_onkey.c b/drivers/input/misc/88pm80x_onkey.c
new file mode 100644
index 000000000000..7f26e7b6c228
--- /dev/null
+++ b/drivers/input/misc/88pm80x_onkey.c
@@ -0,0 +1,168 @@
1/*
2 * Marvell 88PM80x ONKEY driver
3 *
4 * Copyright (C) 2012 Marvell International Ltd.
5 * Haojian Zhuang <haojian.zhuang@marvell.com>
6 * Qiao Zhou <zhouqiao@marvell.com>
7 *
8 * This file is subject to the terms and conditions of the GNU General
9 * Public License. See the file "COPYING" in the main directory of this
10 * archive for more details.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 */
21
22#include <linux/kernel.h>
23#include <linux/module.h>
24#include <linux/input.h>
25#include <linux/mfd/88pm80x.h>
26#include <linux/regmap.h>
27#include <linux/slab.h>
28
29#define PM800_LONG_ONKEY_EN (1 << 0)
30#define PM800_LONG_KEY_DELAY (8) /* 1 .. 16 seconds */
31#define PM800_LONKEY_PRESS_TIME ((PM800_LONG_KEY_DELAY-1) << 4)
32#define PM800_LONKEY_PRESS_TIME_MASK (0xF0)
33#define PM800_SW_PDOWN (1 << 5)
34
35struct pm80x_onkey_info {
36 struct input_dev *idev;
37 struct pm80x_chip *pm80x;
38 struct regmap *map;
39 int irq;
40};
41
42/* 88PM80x gives us an interrupt when ONKEY is held */
43static irqreturn_t pm80x_onkey_handler(int irq, void *data)
44{
45 struct pm80x_onkey_info *info = data;
46 int ret = 0;
47 unsigned int val;
48
49 ret = regmap_read(info->map, PM800_STATUS_1, &val);
50 if (ret < 0) {
51 dev_err(info->idev->dev.parent, "failed to read status: %d\n", ret);
52 return IRQ_NONE;
53 }
54 val &= PM800_ONKEY_STS1;
55
56 input_report_key(info->idev, KEY_POWER, val);
57 input_sync(info->idev);
58
59 return IRQ_HANDLED;
60}
61
62static SIMPLE_DEV_PM_OPS(pm80x_onkey_pm_ops, pm80x_dev_suspend,
63 pm80x_dev_resume);
64
65static int __devinit pm80x_onkey_probe(struct platform_device *pdev)
66{
67
68 struct pm80x_chip *chip = dev_get_drvdata(pdev->dev.parent);
69 struct pm80x_onkey_info *info;
70 int err;
71
72 info = kzalloc(sizeof(struct pm80x_onkey_info), GFP_KERNEL);
73 if (!info)
74 return -ENOMEM;
75
76 info->pm80x = chip;
77
78 info->irq = platform_get_irq(pdev, 0);
79 if (info->irq < 0) {
80 dev_err(&pdev->dev, "No IRQ resource!\n");
81 err = -EINVAL;
82 goto out;
83 }
84
85 info->map = info->pm80x->regmap;
86 if (!info->map) {
87 dev_err(&pdev->dev, "no regmap!\n");
88 err = -EINVAL;
89 goto out;
90 }
91
92 info->idev = input_allocate_device();
93 if (!info->idev) {
94 dev_err(&pdev->dev, "Failed to allocate input dev\n");
95 err = -ENOMEM;
96 goto out;
97 }
98
99 info->idev->name = "88pm80x_on";
100 info->idev->phys = "88pm80x_on/input0";
101 info->idev->id.bustype = BUS_I2C;
102 info->idev->dev.parent = &pdev->dev;
103 info->idev->evbit[0] = BIT_MASK(EV_KEY);
104 __set_bit(KEY_POWER, info->idev->keybit);
105
106 err = pm80x_request_irq(info->pm80x, info->irq, pm80x_onkey_handler,
107 IRQF_ONESHOT, "onkey", info);
108 if (err < 0) {
109 dev_err(&pdev->dev, "Failed to request IRQ: #%d: %d\n",
110 info->irq, err);
111 goto out_reg;
112 }
113
114 err = input_register_device(info->idev);
115 if (err) {
116 dev_err(&pdev->dev, "Can't register input device: %d\n", err);
117 goto out_irq;
118 }
119
120 platform_set_drvdata(pdev, info);
121
122 /* Enable long onkey detection */
123 regmap_update_bits(info->map, PM800_RTC_MISC4, PM800_LONG_ONKEY_EN,
124 PM800_LONG_ONKEY_EN);
125 /* Set 8-second interval */
126 regmap_update_bits(info->map, PM800_RTC_MISC3,
127 PM800_LONKEY_PRESS_TIME_MASK,
128 PM800_LONKEY_PRESS_TIME);
129
130 device_init_wakeup(&pdev->dev, 1);
131 return 0;
132
133out_irq:
134 pm80x_free_irq(info->pm80x, info->irq, info);
135out_reg:
136 input_free_device(info->idev);
137out:
138 kfree(info);
139 return err;
140}
141
142static int __devexit pm80x_onkey_remove(struct platform_device *pdev)
143{
144 struct pm80x_onkey_info *info = platform_get_drvdata(pdev);
145
146 device_init_wakeup(&pdev->dev, 0);
147 pm80x_free_irq(info->pm80x, info->irq, info);
148 input_unregister_device(info->idev);
149 kfree(info);
150 return 0;
151}
152
153static struct platform_driver pm80x_onkey_driver = {
154 .driver = {
155 .name = "88pm80x-onkey",
156 .owner = THIS_MODULE,
157 .pm = &pm80x_onkey_pm_ops,
158 },
159 .probe = pm80x_onkey_probe,
160 .remove = __devexit_p(pm80x_onkey_remove),
161};
162
163module_platform_driver(pm80x_onkey_driver);
164
165MODULE_LICENSE("GPL");
166MODULE_DESCRIPTION("Marvell 88PM80x ONKEY driver");
167MODULE_AUTHOR("Qiao Zhou <zhouqiao@marvell.com>");
168MODULE_ALIAS("platform:88pm80x-onkey");
diff --git a/drivers/input/misc/Kconfig b/drivers/input/misc/Kconfig
index 7faf4a7fcaa9..7c0f1ecfdd7a 100644
--- a/drivers/input/misc/Kconfig
+++ b/drivers/input/misc/Kconfig
@@ -22,6 +22,16 @@ config INPUT_88PM860X_ONKEY
22 To compile this driver as a module, choose M here: the module 22 To compile this driver as a module, choose M here: the module
23 will be called 88pm860x_onkey. 23 will be called 88pm860x_onkey.
24 24
25config INPUT_88PM80X_ONKEY
26 tristate "88PM80x ONKEY support"
27 depends on MFD_88PM800
28 help
29 Support the ONKEY of Marvell 88PM80x PMICs as an input device
30 reporting power button status.
31
32 To compile this driver as a module, choose M here: the module
33 will be called 88pm80x_onkey.
34
25config INPUT_AB8500_PONKEY 35config INPUT_AB8500_PONKEY
26 tristate "AB8500 Pon (PowerOn) Key" 36 tristate "AB8500 Pon (PowerOn) Key"
27 depends on AB8500_CORE 37 depends on AB8500_CORE
diff --git a/drivers/input/misc/Makefile b/drivers/input/misc/Makefile
index f55cdf4916fa..83fe6f5b77d1 100644
--- a/drivers/input/misc/Makefile
+++ b/drivers/input/misc/Makefile
@@ -5,6 +5,7 @@
5# Each configuration option enables a list of files. 5# Each configuration option enables a list of files.
6 6
7obj-$(CONFIG_INPUT_88PM860X_ONKEY) += 88pm860x_onkey.o 7obj-$(CONFIG_INPUT_88PM860X_ONKEY) += 88pm860x_onkey.o
8obj-$(CONFIG_INPUT_88PM80X_ONKEY) += 88pm80x_onkey.o
8obj-$(CONFIG_INPUT_AB8500_PONKEY) += ab8500-ponkey.o 9obj-$(CONFIG_INPUT_AB8500_PONKEY) += ab8500-ponkey.o
9obj-$(CONFIG_INPUT_AD714X) += ad714x.o 10obj-$(CONFIG_INPUT_AD714X) += ad714x.o
10obj-$(CONFIG_INPUT_AD714X_I2C) += ad714x-i2c.o 11obj-$(CONFIG_INPUT_AD714X_I2C) += ad714x-i2c.o
diff --git a/drivers/input/misc/ab8500-ponkey.c b/drivers/input/misc/ab8500-ponkey.c
index 84ec691c05aa..f06231b7cab1 100644
--- a/drivers/input/misc/ab8500-ponkey.c
+++ b/drivers/input/misc/ab8500-ponkey.c
@@ -74,8 +74,8 @@ static int __devinit ab8500_ponkey_probe(struct platform_device *pdev)
74 74
75 ponkey->idev = input; 75 ponkey->idev = input;
76 ponkey->ab8500 = ab8500; 76 ponkey->ab8500 = ab8500;
77 ponkey->irq_dbf = irq_dbf; 77 ponkey->irq_dbf = ab8500_irq_get_virq(ab8500, irq_dbf);
78 ponkey->irq_dbr = irq_dbr; 78 ponkey->irq_dbr = ab8500_irq_get_virq(ab8500, irq_dbr);
79 79
80 input->name = "AB8500 POn(PowerOn) Key"; 80 input->name = "AB8500 POn(PowerOn) Key";
81 input->dev.parent = &pdev->dev; 81 input->dev.parent = &pdev->dev;
diff --git a/drivers/mfd/88pm800.c b/drivers/mfd/88pm800.c
new file mode 100644
index 000000000000..b67a3018b136
--- /dev/null
+++ b/drivers/mfd/88pm800.c
@@ -0,0 +1,596 @@
1/*
2 * Base driver for Marvell 88PM800
3 *
4 * Copyright (C) 2012 Marvell International Ltd.
5 * Haojian Zhuang <haojian.zhuang@marvell.com>
6 * Joseph(Yossi) Hanin <yhanin@marvell.com>
7 * Qiao Zhou <zhouqiao@marvell.com>
8 *
9 * This file is subject to the terms and conditions of the GNU General
10 * Public License. See the file "COPYING" in the main directory of this
11 * archive for more details.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21 */
22
23#include <linux/kernel.h>
24#include <linux/module.h>
25#include <linux/i2c.h>
26#include <linux/mfd/core.h>
27#include <linux/mfd/88pm80x.h>
28#include <linux/slab.h>
29
30#define PM800_CHIP_ID (0x00)
31
32/* Interrupt Registers */
33#define PM800_INT_STATUS1 (0x05)
34#define PM800_ONKEY_INT_STS1 (1 << 0)
35#define PM800_EXTON_INT_STS1 (1 << 1)
36#define PM800_CHG_INT_STS1 (1 << 2)
37#define PM800_BAT_INT_STS1 (1 << 3)
38#define PM800_RTC_INT_STS1 (1 << 4)
39#define PM800_CLASSD_OC_INT_STS1 (1 << 5)
40
41#define PM800_INT_STATUS2 (0x06)
42#define PM800_VBAT_INT_STS2 (1 << 0)
43#define PM800_VSYS_INT_STS2 (1 << 1)
44#define PM800_VCHG_INT_STS2 (1 << 2)
45#define PM800_TINT_INT_STS2 (1 << 3)
46#define PM800_GPADC0_INT_STS2 (1 << 4)
47#define PM800_TBAT_INT_STS2 (1 << 5)
48#define PM800_GPADC2_INT_STS2 (1 << 6)
49#define PM800_GPADC3_INT_STS2 (1 << 7)
50
51#define PM800_INT_STATUS3 (0x07)
52
53#define PM800_INT_STATUS4 (0x08)
54#define PM800_GPIO0_INT_STS4 (1 << 0)
55#define PM800_GPIO1_INT_STS4 (1 << 1)
56#define PM800_GPIO2_INT_STS4 (1 << 2)
57#define PM800_GPIO3_INT_STS4 (1 << 3)
58#define PM800_GPIO4_INT_STS4 (1 << 4)
59
60#define PM800_INT_ENA_1 (0x09)
61#define PM800_ONKEY_INT_ENA1 (1 << 0)
62#define PM800_EXTON_INT_ENA1 (1 << 1)
63#define PM800_CHG_INT_ENA1 (1 << 2)
64#define PM800_BAT_INT_ENA1 (1 << 3)
65#define PM800_RTC_INT_ENA1 (1 << 4)
66#define PM800_CLASSD_OC_INT_ENA1 (1 << 5)
67
68#define PM800_INT_ENA_2 (0x0A)
69#define PM800_VBAT_INT_ENA2 (1 << 0)
70#define PM800_VSYS_INT_ENA2 (1 << 1)
71#define PM800_VCHG_INT_ENA2 (1 << 2)
72#define PM800_TINT_INT_ENA2 (1 << 3)
73
74#define PM800_INT_ENA_3 (0x0B)
75#define PM800_GPADC0_INT_ENA3 (1 << 0)
76#define PM800_GPADC1_INT_ENA3 (1 << 1)
77#define PM800_GPADC2_INT_ENA3 (1 << 2)
78#define PM800_GPADC3_INT_ENA3 (1 << 3)
79#define PM800_GPADC4_INT_ENA3 (1 << 4)
80
81#define PM800_INT_ENA_4 (0x0C)
82#define PM800_GPIO0_INT_ENA4 (1 << 0)
83#define PM800_GPIO1_INT_ENA4 (1 << 1)
84#define PM800_GPIO2_INT_ENA4 (1 << 2)
85#define PM800_GPIO3_INT_ENA4 (1 << 3)
86#define PM800_GPIO4_INT_ENA4 (1 << 4)
87
88/* number of INT_ENA & INT_STATUS regs */
89#define PM800_INT_REG_NUM (4)
90
91/* Interrupt Number in 88PM800 */
92enum {
93 PM800_IRQ_ONKEY, /*EN1b0 *//*0 */
94 PM800_IRQ_EXTON, /*EN1b1 */
95 PM800_IRQ_CHG, /*EN1b2 */
96 PM800_IRQ_BAT, /*EN1b3 */
97 PM800_IRQ_RTC, /*EN1b4 */
98 PM800_IRQ_CLASSD, /*EN1b5 *//*5 */
99 PM800_IRQ_VBAT, /*EN2b0 */
100 PM800_IRQ_VSYS, /*EN2b1 */
101 PM800_IRQ_VCHG, /*EN2b2 */
102 PM800_IRQ_TINT, /*EN2b3 */
103 PM800_IRQ_GPADC0, /*EN3b0 *//*10 */
104 PM800_IRQ_GPADC1, /*EN3b1 */
105 PM800_IRQ_GPADC2, /*EN3b2 */
106 PM800_IRQ_GPADC3, /*EN3b3 */
107 PM800_IRQ_GPADC4, /*EN3b4 */
108 PM800_IRQ_GPIO0, /*EN4b0 *//*15 */
109 PM800_IRQ_GPIO1, /*EN4b1 */
110 PM800_IRQ_GPIO2, /*EN4b2 */
111 PM800_IRQ_GPIO3, /*EN4b3 */
112 PM800_IRQ_GPIO4, /*EN4b4 *//*19 */
113 PM800_MAX_IRQ,
114};
115
116enum {
117 /* Procida */
118 PM800_CHIP_A0 = 0x60,
119 PM800_CHIP_A1 = 0x61,
120 PM800_CHIP_B0 = 0x62,
121 PM800_CHIP_C0 = 0x63,
122 PM800_CHIP_END = PM800_CHIP_C0,
123
124 /* Make sure to update this to the last stepping */
125 PM8XXX_CHIP_END = PM800_CHIP_END
126};
127
128static const struct i2c_device_id pm80x_id_table[] = {
129 {"88PM800", CHIP_PM800},
130 {} /* NULL terminated */
131};
132MODULE_DEVICE_TABLE(i2c, pm80x_id_table);
133
134static struct resource rtc_resources[] = {
135 {
136 .name = "88pm80x-rtc",
137 .start = PM800_IRQ_RTC,
138 .end = PM800_IRQ_RTC,
139 .flags = IORESOURCE_IRQ,
140 },
141};
142
143static struct mfd_cell rtc_devs[] = {
144 {
145 .name = "88pm80x-rtc",
146 .num_resources = ARRAY_SIZE(rtc_resources),
147 .resources = &rtc_resources[0],
148 .id = -1,
149 },
150};
151
152static struct resource onkey_resources[] = {
153 {
154 .name = "88pm80x-onkey",
155 .start = PM800_IRQ_ONKEY,
156 .end = PM800_IRQ_ONKEY,
157 .flags = IORESOURCE_IRQ,
158 },
159};
160
161static struct mfd_cell onkey_devs[] = {
162 {
163 .name = "88pm80x-onkey",
164 .num_resources = 1,
165 .resources = &onkey_resources[0],
166 .id = -1,
167 },
168};
169
170static const struct regmap_irq pm800_irqs[] = {
171 /* INT0 */
172 [PM800_IRQ_ONKEY] = {
173 .mask = PM800_ONKEY_INT_ENA1,
174 },
175 [PM800_IRQ_EXTON] = {
176 .mask = PM800_EXTON_INT_ENA1,
177 },
178 [PM800_IRQ_CHG] = {
179 .mask = PM800_CHG_INT_ENA1,
180 },
181 [PM800_IRQ_BAT] = {
182 .mask = PM800_BAT_INT_ENA1,
183 },
184 [PM800_IRQ_RTC] = {
185 .mask = PM800_RTC_INT_ENA1,
186 },
187 [PM800_IRQ_CLASSD] = {
188 .mask = PM800_CLASSD_OC_INT_ENA1,
189 },
190 /* INT1 */
191 [PM800_IRQ_VBAT] = {
192 .reg_offset = 1,
193 .mask = PM800_VBAT_INT_ENA2,
194 },
195 [PM800_IRQ_VSYS] = {
196 .reg_offset = 1,
197 .mask = PM800_VSYS_INT_ENA2,
198 },
199 [PM800_IRQ_VCHG] = {
200 .reg_offset = 1,
201 .mask = PM800_VCHG_INT_ENA2,
202 },
203 [PM800_IRQ_TINT] = {
204 .reg_offset = 1,
205 .mask = PM800_TINT_INT_ENA2,
206 },
207 /* INT2 */
208 [PM800_IRQ_GPADC0] = {
209 .reg_offset = 2,
210 .mask = PM800_GPADC0_INT_ENA3,
211 },
212 [PM800_IRQ_GPADC1] = {
213 .reg_offset = 2,
214 .mask = PM800_GPADC1_INT_ENA3,
215 },
216 [PM800_IRQ_GPADC2] = {
217 .reg_offset = 2,
218 .mask = PM800_GPADC2_INT_ENA3,
219 },
220 [PM800_IRQ_GPADC3] = {
221 .reg_offset = 2,
222 .mask = PM800_GPADC3_INT_ENA3,
223 },
224 [PM800_IRQ_GPADC4] = {
225 .reg_offset = 2,
226 .mask = PM800_GPADC4_INT_ENA3,
227 },
228 /* INT3 */
229 [PM800_IRQ_GPIO0] = {
230 .reg_offset = 3,
231 .mask = PM800_GPIO0_INT_ENA4,
232 },
233 [PM800_IRQ_GPIO1] = {
234 .reg_offset = 3,
235 .mask = PM800_GPIO1_INT_ENA4,
236 },
237 [PM800_IRQ_GPIO2] = {
238 .reg_offset = 3,
239 .mask = PM800_GPIO2_INT_ENA4,
240 },
241 [PM800_IRQ_GPIO3] = {
242 .reg_offset = 3,
243 .mask = PM800_GPIO3_INT_ENA4,
244 },
245 [PM800_IRQ_GPIO4] = {
246 .reg_offset = 3,
247 .mask = PM800_GPIO4_INT_ENA4,
248 },
249};
250
251static int __devinit device_gpadc_init(struct pm80x_chip *chip,
252 struct pm80x_platform_data *pdata)
253{
254 struct pm80x_subchip *subchip = chip->subchip;
255 struct regmap *map = subchip->regmap_gpadc;
256 int data = 0, mask = 0, ret = 0;
257
258 if (!map) {
259 dev_warn(chip->dev,
260 "Warning: gpadc regmap is not available!\n");
261 return -EINVAL;
262 }
263 /*
264 * initialize GPADC without activating it turn on GPADC
265 * measurments
266 */
267 ret = regmap_update_bits(map,
268 PM800_GPADC_MISC_CONFIG2,
269 PM800_GPADC_MISC_GPFSM_EN,
270 PM800_GPADC_MISC_GPFSM_EN);
271 if (ret < 0)
272 goto out;
273 /*
274 * This function configures the ADC as requires for
275 * CP implementation.CP does not "own" the ADC configuration
276 * registers and relies on AP.
277 * Reason: enable automatic ADC measurements needed
278 * for CP to get VBAT and RF temperature readings.
279 */
280 ret = regmap_update_bits(map, PM800_GPADC_MEAS_EN1,
281 PM800_MEAS_EN1_VBAT, PM800_MEAS_EN1_VBAT);
282 if (ret < 0)
283 goto out;
284 ret = regmap_update_bits(map, PM800_GPADC_MEAS_EN2,
285 (PM800_MEAS_EN2_RFTMP | PM800_MEAS_GP0_EN),
286 (PM800_MEAS_EN2_RFTMP | PM800_MEAS_GP0_EN));
287 if (ret < 0)
288 goto out;
289
290 /*
291 * the defult of PM800 is GPADC operates at 100Ks/s rate
292 * and Number of GPADC slots with active current bias prior
293 * to GPADC sampling = 1 slot for all GPADCs set for
294 * Temprature mesurmants
295 */
296 mask = (PM800_GPADC_GP_BIAS_EN0 | PM800_GPADC_GP_BIAS_EN1 |
297 PM800_GPADC_GP_BIAS_EN2 | PM800_GPADC_GP_BIAS_EN3);
298
299 if (pdata && (pdata->batt_det == 0))
300 data = (PM800_GPADC_GP_BIAS_EN0 | PM800_GPADC_GP_BIAS_EN1 |
301 PM800_GPADC_GP_BIAS_EN2 | PM800_GPADC_GP_BIAS_EN3);
302 else
303 data = (PM800_GPADC_GP_BIAS_EN0 | PM800_GPADC_GP_BIAS_EN2 |
304 PM800_GPADC_GP_BIAS_EN3);
305
306 ret = regmap_update_bits(map, PM800_GP_BIAS_ENA1, mask, data);
307 if (ret < 0)
308 goto out;
309
310 dev_info(chip->dev, "pm800 device_gpadc_init: Done\n");
311 return 0;
312
313out:
314 dev_info(chip->dev, "pm800 device_gpadc_init: Failed!\n");
315 return ret;
316}
317
318static int __devinit device_irq_init_800(struct pm80x_chip *chip)
319{
320 struct regmap *map = chip->regmap;
321 unsigned long flags = IRQF_TRIGGER_FALLING | IRQF_ONESHOT;
322 int data, mask, ret = -EINVAL;
323
324 if (!map || !chip->irq) {
325 dev_err(chip->dev, "incorrect parameters\n");
326 return -EINVAL;
327 }
328
329 /*
330 * irq_mode defines the way of clearing interrupt. it's read-clear by
331 * default.
332 */
333 mask =
334 PM800_WAKEUP2_INV_INT | PM800_WAKEUP2_INT_CLEAR |
335 PM800_WAKEUP2_INT_MASK;
336
337 data = PM800_WAKEUP2_INT_CLEAR;
338 ret = regmap_update_bits(map, PM800_WAKEUP2, mask, data);
339
340 if (ret < 0)
341 goto out;
342
343 ret =
344 regmap_add_irq_chip(chip->regmap, chip->irq, flags, -1,
345 chip->regmap_irq_chip, &chip->irq_data);
346
347out:
348 return ret;
349}
350
351static void device_irq_exit_800(struct pm80x_chip *chip)
352{
353 regmap_del_irq_chip(chip->irq, chip->irq_data);
354}
355
356static struct regmap_irq_chip pm800_irq_chip = {
357 .name = "88pm800",
358 .irqs = pm800_irqs,
359 .num_irqs = ARRAY_SIZE(pm800_irqs),
360
361 .num_regs = 4,
362 .status_base = PM800_INT_STATUS1,
363 .mask_base = PM800_INT_ENA_1,
364 .ack_base = PM800_INT_STATUS1,
365};
366
367static int pm800_pages_init(struct pm80x_chip *chip)
368{
369 struct pm80x_subchip *subchip;
370 struct i2c_client *client = chip->client;
371
372 subchip = chip->subchip;
373 /* PM800 block power: i2c addr 0x31 */
374 if (subchip->power_page_addr) {
375 subchip->power_page =
376 i2c_new_dummy(client->adapter, subchip->power_page_addr);
377 subchip->regmap_power =
378 devm_regmap_init_i2c(subchip->power_page,
379 &pm80x_regmap_config);
380 i2c_set_clientdata(subchip->power_page, chip);
381 } else
382 dev_info(chip->dev,
383 "PM800 block power 0x31: No power_page_addr\n");
384
385 /* PM800 block GPADC: i2c addr 0x32 */
386 if (subchip->gpadc_page_addr) {
387 subchip->gpadc_page = i2c_new_dummy(client->adapter,
388 subchip->gpadc_page_addr);
389 subchip->regmap_gpadc =
390 devm_regmap_init_i2c(subchip->gpadc_page,
391 &pm80x_regmap_config);
392 i2c_set_clientdata(subchip->gpadc_page, chip);
393 } else
394 dev_info(chip->dev,
395 "PM800 block GPADC 0x32: No gpadc_page_addr\n");
396
397 return 0;
398}
399
400static void pm800_pages_exit(struct pm80x_chip *chip)
401{
402 struct pm80x_subchip *subchip;
403
404 regmap_exit(chip->regmap);
405 i2c_unregister_device(chip->client);
406
407 subchip = chip->subchip;
408 if (subchip->power_page) {
409 regmap_exit(subchip->regmap_power);
410 i2c_unregister_device(subchip->power_page);
411 }
412 if (subchip->gpadc_page) {
413 regmap_exit(subchip->regmap_gpadc);
414 i2c_unregister_device(subchip->gpadc_page);
415 }
416}
417
418static int __devinit device_800_init(struct pm80x_chip *chip,
419 struct pm80x_platform_data *pdata)
420{
421 int ret, pmic_id;
422 unsigned int val;
423
424 ret = regmap_read(chip->regmap, PM800_CHIP_ID, &val);
425 if (ret < 0) {
426 dev_err(chip->dev, "Failed to read CHIP ID: %d\n", ret);
427 goto out;
428 }
429
430 pmic_id = val & PM80X_VERSION_MASK;
431
432 if ((pmic_id >= PM800_CHIP_A0) && (pmic_id <= PM800_CHIP_END)) {
433 chip->version = val;
434 dev_info(chip->dev,
435 "88PM80x:Marvell 88PM800 (ID:0x%x) detected\n", val);
436 } else {
437 dev_err(chip->dev,
438 "Failed to detect Marvell 88PM800:ChipID[0x%x]\n", val);
439 ret = -EINVAL;
440 goto out;
441 }
442
443 /*
444 * alarm wake up bit will be clear in device_irq_init(),
445 * read before that
446 */
447 ret = regmap_read(chip->regmap, PM800_RTC_CONTROL, &val);
448 if (ret < 0) {
449 dev_err(chip->dev, "Failed to read RTC register: %d\n", ret);
450 goto out;
451 }
452 if (val & PM800_ALARM_WAKEUP) {
453 if (pdata && pdata->rtc)
454 pdata->rtc->rtc_wakeup = 1;
455 }
456
457 ret = device_gpadc_init(chip, pdata);
458 if (ret < 0) {
459 dev_err(chip->dev, "[%s]Failed to init gpadc\n", __func__);
460 goto out;
461 }
462
463 chip->regmap_irq_chip = &pm800_irq_chip;
464
465 ret = device_irq_init_800(chip);
466 if (ret < 0) {
467 dev_err(chip->dev, "[%s]Failed to init pm800 irq\n", __func__);
468 goto out;
469 }
470
471 ret =
472 mfd_add_devices(chip->dev, 0, &onkey_devs[0],
473 ARRAY_SIZE(onkey_devs), &onkey_resources[0], 0);
474 if (ret < 0) {
475 dev_err(chip->dev, "Failed to add onkey subdev\n");
476 goto out_dev;
477 } else
478 dev_info(chip->dev, "[%s]:Added mfd onkey_devs\n", __func__);
479
480 if (pdata && pdata->rtc) {
481 rtc_devs[0].platform_data = pdata->rtc;
482 rtc_devs[0].pdata_size = sizeof(struct pm80x_rtc_pdata);
483 ret = mfd_add_devices(chip->dev, 0, &rtc_devs[0],
484 ARRAY_SIZE(rtc_devs), NULL, 0);
485 if (ret < 0) {
486 dev_err(chip->dev, "Failed to add rtc subdev\n");
487 goto out_dev;
488 } else
489 dev_info(chip->dev,
490 "[%s]:Added mfd rtc_devs\n", __func__);
491 }
492
493 return 0;
494out_dev:
495 mfd_remove_devices(chip->dev);
496 device_irq_exit_800(chip);
497out:
498 return ret;
499}
500
501static int __devinit pm800_probe(struct i2c_client *client,
502 const struct i2c_device_id *id)
503{
504 int ret = 0;
505 struct pm80x_chip *chip;
506 struct pm80x_platform_data *pdata = client->dev.platform_data;
507 struct pm80x_subchip *subchip;
508
509 ret = pm80x_init(client, id);
510 if (ret) {
511 dev_err(&client->dev, "pm800_init fail\n");
512 goto out_init;
513 }
514
515 chip = i2c_get_clientdata(client);
516
517 /* init subchip for PM800 */
518 subchip =
519 devm_kzalloc(&client->dev, sizeof(struct pm80x_subchip),
520 GFP_KERNEL);
521 if (!subchip) {
522 ret = -ENOMEM;
523 goto err_subchip_alloc;
524 }
525
526 subchip->power_page_addr = pdata->power_page_addr;
527 subchip->gpadc_page_addr = pdata->gpadc_page_addr;
528 chip->subchip = subchip;
529
530 ret = device_800_init(chip, pdata);
531 if (ret) {
532 dev_err(chip->dev, "%s id 0x%x failed!\n", __func__, chip->id);
533 goto err_800_init;
534 }
535
536 ret = pm800_pages_init(chip);
537 if (ret) {
538 dev_err(&client->dev, "pm800_pages_init failed!\n");
539 goto err_page_init;
540 }
541
542 if (pdata->plat_config)
543 pdata->plat_config(chip, pdata);
544
545err_page_init:
546 mfd_remove_devices(chip->dev);
547 device_irq_exit_800(chip);
548err_800_init:
549 devm_kfree(&client->dev, subchip);
550err_subchip_alloc:
551 pm80x_deinit(client);
552out_init:
553 return ret;
554}
555
556static int __devexit pm800_remove(struct i2c_client *client)
557{
558 struct pm80x_chip *chip = i2c_get_clientdata(client);
559
560 mfd_remove_devices(chip->dev);
561 device_irq_exit_800(chip);
562
563 pm800_pages_exit(chip);
564 devm_kfree(&client->dev, chip->subchip);
565
566 pm80x_deinit(client);
567
568 return 0;
569}
570
571static struct i2c_driver pm800_driver = {
572 .driver = {
573 .name = "88PM80X",
574 .owner = THIS_MODULE,
575 .pm = &pm80x_pm_ops,
576 },
577 .probe = pm800_probe,
578 .remove = __devexit_p(pm800_remove),
579 .id_table = pm80x_id_table,
580};
581
582static int __init pm800_i2c_init(void)
583{
584 return i2c_add_driver(&pm800_driver);
585}
586subsys_initcall(pm800_i2c_init);
587
588static void __exit pm800_i2c_exit(void)
589{
590 i2c_del_driver(&pm800_driver);
591}
592module_exit(pm800_i2c_exit);
593
594MODULE_DESCRIPTION("PMIC Driver for Marvell 88PM800");
595MODULE_AUTHOR("Qiao Zhou <zhouqiao@marvell.com>");
596MODULE_LICENSE("GPL");
diff --git a/drivers/mfd/88pm805.c b/drivers/mfd/88pm805.c
new file mode 100644
index 000000000000..6146583589f6
--- /dev/null
+++ b/drivers/mfd/88pm805.c
@@ -0,0 +1,301 @@
1/*
2 * Base driver for Marvell 88PM805
3 *
4 * Copyright (C) 2012 Marvell International Ltd.
5 * Haojian Zhuang <haojian.zhuang@marvell.com>
6 * Joseph(Yossi) Hanin <yhanin@marvell.com>
7 * Qiao Zhou <zhouqiao@marvell.com>
8 *
9 * This file is subject to the terms and conditions of the GNU General
10 * Public License. See the file "COPYING" in the main directory of this
11 * archive for more details.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21 */
22
23#include <linux/kernel.h>
24#include <linux/module.h>
25#include <linux/i2c.h>
26#include <linux/irq.h>
27#include <linux/mfd/core.h>
28#include <linux/mfd/88pm80x.h>
29#include <linux/slab.h>
30#include <linux/delay.h>
31
32#define PM805_CHIP_ID (0x00)
33
34static const struct i2c_device_id pm80x_id_table[] = {
35 {"88PM805", CHIP_PM805},
36 {} /* NULL terminated */
37};
38MODULE_DEVICE_TABLE(i2c, pm80x_id_table);
39
40/* Interrupt Number in 88PM805 */
41enum {
42 PM805_IRQ_LDO_OFF, /*0 */
43 PM805_IRQ_SRC_DPLL_LOCK, /*1 */
44 PM805_IRQ_CLIP_FAULT,
45 PM805_IRQ_MIC_CONFLICT,
46 PM805_IRQ_HP2_SHRT,
47 PM805_IRQ_HP1_SHRT, /*5 */
48 PM805_IRQ_FINE_PLL_FAULT,
49 PM805_IRQ_RAW_PLL_FAULT,
50 PM805_IRQ_VOLP_BTN_DET,
51 PM805_IRQ_VOLM_BTN_DET,
52 PM805_IRQ_SHRT_BTN_DET, /*10 */
53 PM805_IRQ_MIC_DET, /*11 */
54
55 PM805_MAX_IRQ,
56};
57
58static struct resource codec_resources[] = {
59 {
60 /* Headset microphone insertion or removal */
61 .name = "micin",
62 .start = PM805_IRQ_MIC_DET,
63 .end = PM805_IRQ_MIC_DET,
64 .flags = IORESOURCE_IRQ,
65 },
66 {
67 /* Audio short HP1 */
68 .name = "audio-short1",
69 .start = PM805_IRQ_HP1_SHRT,
70 .end = PM805_IRQ_HP1_SHRT,
71 .flags = IORESOURCE_IRQ,
72 },
73 {
74 /* Audio short HP2 */
75 .name = "audio-short2",
76 .start = PM805_IRQ_HP2_SHRT,
77 .end = PM805_IRQ_HP2_SHRT,
78 .flags = IORESOURCE_IRQ,
79 },
80};
81
82static struct mfd_cell codec_devs[] = {
83 {
84 .name = "88pm80x-codec",
85 .num_resources = ARRAY_SIZE(codec_resources),
86 .resources = &codec_resources[0],
87 .id = -1,
88 },
89};
90
91static struct regmap_irq pm805_irqs[] = {
92 /* INT0 */
93 [PM805_IRQ_LDO_OFF] = {
94 .mask = PM805_INT1_HP1_SHRT,
95 },
96 [PM805_IRQ_SRC_DPLL_LOCK] = {
97 .mask = PM805_INT1_HP2_SHRT,
98 },
99 [PM805_IRQ_CLIP_FAULT] = {
100 .mask = PM805_INT1_MIC_CONFLICT,
101 },
102 [PM805_IRQ_MIC_CONFLICT] = {
103 .mask = PM805_INT1_CLIP_FAULT,
104 },
105 [PM805_IRQ_HP2_SHRT] = {
106 .mask = PM805_INT1_LDO_OFF,
107 },
108 [PM805_IRQ_HP1_SHRT] = {
109 .mask = PM805_INT1_SRC_DPLL_LOCK,
110 },
111 /* INT1 */
112 [PM805_IRQ_FINE_PLL_FAULT] = {
113 .reg_offset = 1,
114 .mask = PM805_INT2_MIC_DET,
115 },
116 [PM805_IRQ_RAW_PLL_FAULT] = {
117 .reg_offset = 1,
118 .mask = PM805_INT2_SHRT_BTN_DET,
119 },
120 [PM805_IRQ_VOLP_BTN_DET] = {
121 .reg_offset = 1,
122 .mask = PM805_INT2_VOLM_BTN_DET,
123 },
124 [PM805_IRQ_VOLM_BTN_DET] = {
125 .reg_offset = 1,
126 .mask = PM805_INT2_VOLP_BTN_DET,
127 },
128 [PM805_IRQ_SHRT_BTN_DET] = {
129 .reg_offset = 1,
130 .mask = PM805_INT2_RAW_PLL_FAULT,
131 },
132 [PM805_IRQ_MIC_DET] = {
133 .reg_offset = 1,
134 .mask = PM805_INT2_FINE_PLL_FAULT,
135 },
136};
137
138static int __devinit device_irq_init_805(struct pm80x_chip *chip)
139{
140 struct regmap *map = chip->regmap;
141 unsigned long flags = IRQF_TRIGGER_FALLING | IRQF_ONESHOT;
142 int data, mask, ret = -EINVAL;
143
144 if (!map || !chip->irq) {
145 dev_err(chip->dev, "incorrect parameters\n");
146 return -EINVAL;
147 }
148
149 /*
150 * irq_mode defines the way of clearing interrupt. it's read-clear by
151 * default.
152 */
153 mask =
154 PM805_STATUS0_INT_CLEAR | PM805_STATUS0_INV_INT |
155 PM800_STATUS0_INT_MASK;
156
157 data = PM805_STATUS0_INT_CLEAR;
158 ret = regmap_update_bits(map, PM805_INT_STATUS0, mask, data);
159 /*
160 * PM805_INT_STATUS is under 32K clock domain, so need to
161 * add proper delay before the next I2C register access.
162 */
163 msleep(1);
164
165 if (ret < 0)
166 goto out;
167
168 ret =
169 regmap_add_irq_chip(chip->regmap, chip->irq, flags, -1,
170 chip->regmap_irq_chip, &chip->irq_data);
171
172out:
173 return ret;
174}
175
176static void device_irq_exit_805(struct pm80x_chip *chip)
177{
178 regmap_del_irq_chip(chip->irq, chip->irq_data);
179}
180
181static struct regmap_irq_chip pm805_irq_chip = {
182 .name = "88pm805",
183 .irqs = pm805_irqs,
184 .num_irqs = ARRAY_SIZE(pm805_irqs),
185
186 .num_regs = 2,
187 .status_base = PM805_INT_STATUS1,
188 .mask_base = PM805_INT_MASK1,
189 .ack_base = PM805_INT_STATUS1,
190};
191
192static int __devinit device_805_init(struct pm80x_chip *chip)
193{
194 int ret = 0;
195 unsigned int val;
196 struct regmap *map = chip->regmap;
197
198 if (!map) {
199 dev_err(chip->dev, "regmap is invalid\n");
200 return -EINVAL;
201 }
202
203 ret = regmap_read(map, PM805_CHIP_ID, &val);
204 if (ret < 0) {
205 dev_err(chip->dev, "Failed to read CHIP ID: %d\n", ret);
206 goto out_irq_init;
207 }
208 chip->version = val;
209
210 chip->regmap_irq_chip = &pm805_irq_chip;
211
212 ret = device_irq_init_805(chip);
213 if (ret < 0) {
214 dev_err(chip->dev, "Failed to init pm805 irq!\n");
215 goto out_irq_init;
216 }
217
218 ret = mfd_add_devices(chip->dev, 0, &codec_devs[0],
219 ARRAY_SIZE(codec_devs), &codec_resources[0], 0);
220 if (ret < 0) {
221 dev_err(chip->dev, "Failed to add codec subdev\n");
222 goto out_codec;
223 } else
224 dev_info(chip->dev, "[%s]:Added mfd codec_devs\n", __func__);
225
226 return 0;
227
228out_codec:
229 device_irq_exit_805(chip);
230out_irq_init:
231 return ret;
232}
233
234static int __devinit pm805_probe(struct i2c_client *client,
235 const struct i2c_device_id *id)
236{
237 int ret = 0;
238 struct pm80x_chip *chip;
239 struct pm80x_platform_data *pdata = client->dev.platform_data;
240
241 ret = pm80x_init(client, id);
242 if (ret) {
243 dev_err(&client->dev, "pm805_init fail!\n");
244 goto out_init;
245 }
246
247 chip = i2c_get_clientdata(client);
248
249 ret = device_805_init(chip);
250 if (ret) {
251 dev_err(chip->dev, "%s id 0x%x failed!\n", __func__, chip->id);
252 goto err_805_init;
253 }
254
255 if (pdata->plat_config)
256 pdata->plat_config(chip, pdata);
257
258err_805_init:
259 pm80x_deinit(client);
260out_init:
261 return ret;
262}
263
264static int __devexit pm805_remove(struct i2c_client *client)
265{
266 struct pm80x_chip *chip = i2c_get_clientdata(client);
267
268 mfd_remove_devices(chip->dev);
269 device_irq_exit_805(chip);
270
271 pm80x_deinit(client);
272
273 return 0;
274}
275
276static struct i2c_driver pm805_driver = {
277 .driver = {
278 .name = "88PM80X",
279 .owner = THIS_MODULE,
280 .pm = &pm80x_pm_ops,
281 },
282 .probe = pm805_probe,
283 .remove = __devexit_p(pm805_remove),
284 .id_table = pm80x_id_table,
285};
286
287static int __init pm805_i2c_init(void)
288{
289 return i2c_add_driver(&pm805_driver);
290}
291subsys_initcall(pm805_i2c_init);
292
293static void __exit pm805_i2c_exit(void)
294{
295 i2c_del_driver(&pm805_driver);
296}
297module_exit(pm805_i2c_exit);
298
299MODULE_DESCRIPTION("PMIC Driver for Marvell 88PM805");
300MODULE_AUTHOR("Qiao Zhou <zhouqiao@marvell.com>");
301MODULE_LICENSE("GPL");
diff --git a/drivers/mfd/88pm80x.c b/drivers/mfd/88pm80x.c
new file mode 100644
index 000000000000..cd0bf527d764
--- /dev/null
+++ b/drivers/mfd/88pm80x.c
@@ -0,0 +1,145 @@
1/*
2 * I2C driver for Marvell 88PM80x
3 *
4 * Copyright (C) 2012 Marvell International Ltd.
5 * Haojian Zhuang <haojian.zhuang@marvell.com>
6 * Joseph(Yossi) Hanin <yhanin@marvell.com>
7 * Qiao Zhou <zhouqiao@marvell.com>
8 *
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License version 2 as
11 * published by the Free Software Foundation.
12 */
13#include <linux/kernel.h>
14#include <linux/module.h>
15#include <linux/i2c.h>
16#include <linux/mfd/88pm80x.h>
17#include <linux/slab.h>
18#include <linux/uaccess.h>
19#include <linux/err.h>
20
21/*
22 * workaround: some registers needed by pm805 are defined in pm800, so
23 * need to use this global variable to maintain the relation between
24 * pm800 and pm805. would remove it after HW chip fixes the issue.
25 */
26static struct pm80x_chip *g_pm80x_chip;
27
28const struct regmap_config pm80x_regmap_config = {
29 .reg_bits = 8,
30 .val_bits = 8,
31};
32EXPORT_SYMBOL_GPL(pm80x_regmap_config);
33
34int __devinit pm80x_init(struct i2c_client *client,
35 const struct i2c_device_id *id)
36{
37 struct pm80x_chip *chip;
38 struct regmap *map;
39 int ret = 0;
40
41 chip =
42 devm_kzalloc(&client->dev, sizeof(struct pm80x_chip), GFP_KERNEL);
43 if (!chip)
44 return -ENOMEM;
45
46 map = devm_regmap_init_i2c(client, &pm80x_regmap_config);
47 if (IS_ERR(map)) {
48 ret = PTR_ERR(map);
49 dev_err(&client->dev, "Failed to allocate register map: %d\n",
50 ret);
51 goto err_regmap_init;
52 }
53
54 chip->id = id->driver_data;
55 if (chip->id < CHIP_PM800 || chip->id > CHIP_PM805) {
56 ret = -EINVAL;
57 goto err_chip_id;
58 }
59
60 chip->client = client;
61 chip->regmap = map;
62
63 chip->irq = client->irq;
64
65 chip->dev = &client->dev;
66 dev_set_drvdata(chip->dev, chip);
67 i2c_set_clientdata(chip->client, chip);
68
69 device_init_wakeup(&client->dev, 1);
70
71 /*
72 * workaround: set g_pm80x_chip to the first probed chip. if the
73 * second chip is probed, just point to the companion to each
74 * other so that pm805 can access those specific register. would
75 * remove it after HW chip fixes the issue.
76 */
77 if (!g_pm80x_chip)
78 g_pm80x_chip = chip;
79 else {
80 chip->companion = g_pm80x_chip->client;
81 g_pm80x_chip->companion = chip->client;
82 }
83
84 return 0;
85
86err_chip_id:
87 regmap_exit(map);
88err_regmap_init:
89 devm_kfree(&client->dev, chip);
90 return ret;
91}
92EXPORT_SYMBOL_GPL(pm80x_init);
93
94int pm80x_deinit(struct i2c_client *client)
95{
96 struct pm80x_chip *chip = i2c_get_clientdata(client);
97
98 /*
99 * workaround: clear the dependency between pm800 and pm805.
100 * would remove it after HW chip fixes the issue.
101 */
102 if (g_pm80x_chip->companion)
103 g_pm80x_chip->companion = NULL;
104 else
105 g_pm80x_chip = NULL;
106
107 regmap_exit(chip->regmap);
108 devm_kfree(&client->dev, chip);
109
110 return 0;
111}
112EXPORT_SYMBOL_GPL(pm80x_deinit);
113
114#ifdef CONFIG_PM_SLEEP
115static int pm80x_suspend(struct device *dev)
116{
117 struct i2c_client *client = container_of(dev, struct i2c_client, dev);
118 struct pm80x_chip *chip = i2c_get_clientdata(client);
119
120 if (chip && chip->wu_flag)
121 if (device_may_wakeup(chip->dev))
122 enable_irq_wake(chip->irq);
123
124 return 0;
125}
126
127static int pm80x_resume(struct device *dev)
128{
129 struct i2c_client *client = container_of(dev, struct i2c_client, dev);
130 struct pm80x_chip *chip = i2c_get_clientdata(client);
131
132 if (chip && chip->wu_flag)
133 if (device_may_wakeup(chip->dev))
134 disable_irq_wake(chip->irq);
135
136 return 0;
137}
138#endif
139
140SIMPLE_DEV_PM_OPS(pm80x_pm_ops, pm80x_suspend, pm80x_resume);
141EXPORT_SYMBOL_GPL(pm80x_pm_ops);
142
143MODULE_DESCRIPTION("I2C Driver for Marvell 88PM80x");
144MODULE_AUTHOR("Qiao Zhou <zhouqiao@marvell.com>");
145MODULE_LICENSE("GPL");
diff --git a/drivers/mfd/88pm860x-core.c b/drivers/mfd/88pm860x-core.c
index 87bd5ba38d5b..d09918cf1b15 100644
--- a/drivers/mfd/88pm860x-core.c
+++ b/drivers/mfd/88pm860x-core.c
@@ -90,6 +90,10 @@ static struct resource charger_resources[] __devinitdata = {
90 {PM8607_IRQ_VCHG, PM8607_IRQ_VCHG, "vchg voltage", IORESOURCE_IRQ,}, 90 {PM8607_IRQ_VCHG, PM8607_IRQ_VCHG, "vchg voltage", IORESOURCE_IRQ,},
91}; 91};
92 92
93static struct resource preg_resources[] __devinitdata = {
94 {PM8606_ID_PREG, PM8606_ID_PREG, "preg", IORESOURCE_IO,},
95};
96
93static struct resource rtc_resources[] __devinitdata = { 97static struct resource rtc_resources[] __devinitdata = {
94 {PM8607_IRQ_RTC, PM8607_IRQ_RTC, "rtc", IORESOURCE_IRQ,}, 98 {PM8607_IRQ_RTC, PM8607_IRQ_RTC, "rtc", IORESOURCE_IRQ,},
95}; 99};
@@ -142,9 +146,19 @@ static struct mfd_cell codec_devs[] = {
142 {"88pm860x-codec", -1,}, 146 {"88pm860x-codec", -1,},
143}; 147};
144 148
149static struct regulator_consumer_supply preg_supply[] = {
150 REGULATOR_SUPPLY("preg", "charger-manager"),
151};
152
153static struct regulator_init_data preg_init_data = {
154 .num_consumer_supplies = ARRAY_SIZE(preg_supply),
155 .consumer_supplies = &preg_supply[0],
156};
157
145static struct mfd_cell power_devs[] = { 158static struct mfd_cell power_devs[] = {
146 {"88pm860x-battery", -1,}, 159 {"88pm860x-battery", -1,},
147 {"88pm860x-charger", -1,}, 160 {"88pm860x-charger", -1,},
161 {"88pm860x-preg", -1,},
148}; 162};
149 163
150static struct mfd_cell rtc_devs[] = { 164static struct mfd_cell rtc_devs[] = {
@@ -768,6 +782,15 @@ static void __devinit device_power_init(struct pm860x_chip *chip,
768 &charger_resources[0], chip->irq_base); 782 &charger_resources[0], chip->irq_base);
769 if (ret < 0) 783 if (ret < 0)
770 dev_err(chip->dev, "Failed to add charger subdev\n"); 784 dev_err(chip->dev, "Failed to add charger subdev\n");
785
786 power_devs[2].platform_data = &preg_init_data;
787 power_devs[2].pdata_size = sizeof(struct regulator_init_data);
788 power_devs[2].num_resources = ARRAY_SIZE(preg_resources);
789 power_devs[2].resources = &preg_resources[0],
790 ret = mfd_add_devices(chip->dev, 0, &power_devs[2], 1,
791 &preg_resources[0], chip->irq_base);
792 if (ret < 0)
793 dev_err(chip->dev, "Failed to add preg subdev\n");
771} 794}
772 795
773static void __devinit device_onkey_init(struct pm860x_chip *chip, 796static void __devinit device_onkey_init(struct pm860x_chip *chip,
diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig
index 4fdc04ef37c2..d1facef28a60 100644
--- a/drivers/mfd/Kconfig
+++ b/drivers/mfd/Kconfig
@@ -7,6 +7,7 @@ menu "Multifunction device drivers"
7 7
8config MFD_CORE 8config MFD_CORE
9 tristate 9 tristate
10 select IRQ_DOMAIN
10 default n 11 default n
11 12
12config MFD_88PM860X 13config MFD_88PM860X
@@ -20,6 +21,30 @@ config MFD_88PM860X
20 select individual components like voltage regulators, RTC and 21 select individual components like voltage regulators, RTC and
21 battery-charger under the corresponding menus. 22 battery-charger under the corresponding menus.
22 23
24config MFD_88PM800
25 tristate "Support Marvell 88PM800"
26 depends on I2C=y && GENERIC_HARDIRQS
27 select REGMAP_I2C
28 select REGMAP_IRQ
29 select MFD_CORE
30 help
31 This supports for Marvell 88PM800 Power Management IC.
32 This includes the I2C driver and the core APIs _only_, you have to
33 select individual components like voltage regulators, RTC and
34 battery-charger under the corresponding menus.
35
36config MFD_88PM805
37 tristate "Support Marvell 88PM805"
38 depends on I2C=y && GENERIC_HARDIRQS
39 select REGMAP_I2C
40 select REGMAP_IRQ
41 select MFD_CORE
42 help
43 This supports for Marvell 88PM805 Power Management IC. This includes
44 the I2C driver and the core APIs _only_, you have to select individual
45 components like codec device, headset/Mic device under the
46 corresponding menus.
47
23config MFD_SM501 48config MFD_SM501
24 tristate "Support for Silicon Motion SM501" 49 tristate "Support for Silicon Motion SM501"
25 ---help--- 50 ---help---
@@ -173,8 +198,9 @@ config MFD_TPS65217
173 198
174config MFD_TPS6586X 199config MFD_TPS6586X
175 bool "TPS6586x Power Management chips" 200 bool "TPS6586x Power Management chips"
176 depends on I2C=y && GPIOLIB && GENERIC_HARDIRQS 201 depends on I2C=y && GENERIC_HARDIRQS
177 select MFD_CORE 202 select MFD_CORE
203 select REGMAP_I2C
178 depends on REGULATOR 204 depends on REGULATOR
179 help 205 help
180 If you say yes here you get support for the TPS6586X series of 206 If you say yes here you get support for the TPS6586X series of
@@ -424,6 +450,19 @@ config PMIC_ADP5520
424 individual components like LCD backlight, LEDs, GPIOs and Kepad 450 individual components like LCD backlight, LEDs, GPIOs and Kepad
425 under the corresponding menus. 451 under the corresponding menus.
426 452
453config MFD_MAX77686
454 bool "Maxim Semiconductor MAX77686 PMIC Support"
455 depends on I2C=y && GENERIC_HARDIRQS
456 select MFD_CORE
457 select REGMAP_I2C
458 select IRQ_DOMAIN
459 help
460 Say yes here to support for Maxim Semiconductor MAX77686.
461 This is a Power Management IC with RTC on chip.
462 This driver provides common support for accessing the device;
463 additional drivers must be enabled in order to use the functionality
464 of the device.
465
427config MFD_MAX77693 466config MFD_MAX77693
428 bool "Maxim Semiconductor MAX77693 PMIC Support" 467 bool "Maxim Semiconductor MAX77693 PMIC Support"
429 depends on I2C=y && GENERIC_HARDIRQS 468 depends on I2C=y && GENERIC_HARDIRQS
@@ -451,6 +490,7 @@ config MFD_MAX8997
451 bool "Maxim Semiconductor MAX8997/8966 PMIC Support" 490 bool "Maxim Semiconductor MAX8997/8966 PMIC Support"
452 depends on I2C=y && GENERIC_HARDIRQS 491 depends on I2C=y && GENERIC_HARDIRQS
453 select MFD_CORE 492 select MFD_CORE
493 select IRQ_DOMAIN
454 help 494 help
455 Say yes here to support for Maxim Semiconductor MAX8997/8966. 495 Say yes here to support for Maxim Semiconductor MAX8997/8966.
456 This is a Power Management IC with RTC, Flash, Fuel Gauge, Haptic, 496 This is a Power Management IC with RTC, Flash, Fuel Gauge, Haptic,
@@ -470,17 +510,56 @@ config MFD_MAX8998
470 additional drivers must be enabled in order to use the functionality 510 additional drivers must be enabled in order to use the functionality
471 of the device. 511 of the device.
472 512
473config MFD_S5M_CORE 513config MFD_SEC_CORE
474 bool "SAMSUNG S5M Series Support" 514 bool "SAMSUNG Electronics PMIC Series Support"
475 depends on I2C=y && GENERIC_HARDIRQS 515 depends on I2C=y && GENERIC_HARDIRQS
476 select MFD_CORE 516 select MFD_CORE
477 select REGMAP_I2C 517 select REGMAP_I2C
518 select REGMAP_IRQ
478 help 519 help
479 Support for the Samsung Electronics S5M MFD series. 520 Support for the Samsung Electronics MFD series.
480 This driver provides common support for accessing the device, 521 This driver provides common support for accessing the device,
481 additional drivers must be enabled in order to use the functionality 522 additional drivers must be enabled in order to use the functionality
482 of the device 523 of the device
483 524
525config MFD_ARIZONA
526 select REGMAP
527 select REGMAP_IRQ
528 select MFD_CORE
529 bool
530
531config MFD_ARIZONA_I2C
532 tristate "Support Wolfson Microelectronics Arizona platform with I2C"
533 select MFD_ARIZONA
534 select MFD_CORE
535 select REGMAP_I2C
536 depends on I2C
537 help
538 Support for the Wolfson Microelectronics Arizona platform audio SoC
539 core functionality controlled via I2C.
540
541config MFD_ARIZONA_SPI
542 tristate "Support Wolfson Microelectronics Arizona platform with SPI"
543 select MFD_ARIZONA
544 select MFD_CORE
545 select REGMAP_SPI
546 depends on SPI_MASTER
547 help
548 Support for the Wolfson Microelectronics Arizona platform audio SoC
549 core functionality controlled via I2C.
550
551config MFD_WM5102
552 bool "Support Wolfson Microelectronics WM5102"
553 depends on MFD_ARIZONA
554 help
555 Support for Wolfson Microelectronics WM5102 low power audio SoC
556
557config MFD_WM5110
558 bool "Support Wolfson Microelectronics WM5110"
559 depends on MFD_ARIZONA
560 help
561 Support for Wolfson Microelectronics WM5110 low power audio SoC
562
484config MFD_WM8400 563config MFD_WM8400
485 bool "Support Wolfson Microelectronics WM8400" 564 bool "Support Wolfson Microelectronics WM8400"
486 select MFD_CORE 565 select MFD_CORE
@@ -698,6 +777,7 @@ config AB8500_CORE
698 bool "ST-Ericsson AB8500 Mixed Signal Power Management chip" 777 bool "ST-Ericsson AB8500 Mixed Signal Power Management chip"
699 depends on GENERIC_HARDIRQS && ABX500_CORE && MFD_DB8500_PRCMU 778 depends on GENERIC_HARDIRQS && ABX500_CORE && MFD_DB8500_PRCMU
700 select MFD_CORE 779 select MFD_CORE
780 select IRQ_DOMAIN
701 help 781 help
702 Select this option to enable access to AB8500 power management 782 Select this option to enable access to AB8500 power management
703 chip. This connects to U8500 either on the SSP/SPI bus (deprecated 783 chip. This connects to U8500 either on the SSP/SPI bus (deprecated
@@ -705,16 +785,6 @@ config AB8500_CORE
705 the irq_chip parts for handling the Mixed Signal chip events. 785 the irq_chip parts for handling the Mixed Signal chip events.
706 This chip embeds various other multimedia funtionalities as well. 786 This chip embeds various other multimedia funtionalities as well.
707 787
708config AB8500_I2C_CORE
709 bool "AB8500 register access via PRCMU I2C"
710 depends on AB8500_CORE && MFD_DB8500_PRCMU
711 default y
712 help
713 This enables register access to the AB8500 chip via PRCMU I2C.
714 The AB8500 chip can be accessed via SPI or I2C. On DB8500 hardware
715 the I2C bus is connected to the Power Reset
716 and Mangagement Unit, PRCMU.
717
718config AB8500_DEBUG 788config AB8500_DEBUG
719 bool "Enable debug info via debugfs" 789 bool "Enable debug info via debugfs"
720 depends on AB8500_CORE && DEBUG_FS 790 depends on AB8500_CORE && DEBUG_FS
diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile
index 75f6ed68a4b9..79dd22d1dc3d 100644
--- a/drivers/mfd/Makefile
+++ b/drivers/mfd/Makefile
@@ -4,6 +4,8 @@
4 4
588pm860x-objs := 88pm860x-core.o 88pm860x-i2c.o 588pm860x-objs := 88pm860x-core.o 88pm860x-i2c.o
6obj-$(CONFIG_MFD_88PM860X) += 88pm860x.o 6obj-$(CONFIG_MFD_88PM860X) += 88pm860x.o
7obj-$(CONFIG_MFD_88PM800) += 88pm800.o 88pm80x.o
8obj-$(CONFIG_MFD_88PM805) += 88pm805.o 88pm80x.o
7obj-$(CONFIG_MFD_SM501) += sm501.o 9obj-$(CONFIG_MFD_SM501) += sm501.o
8obj-$(CONFIG_MFD_ASIC3) += asic3.o tmio_core.o 10obj-$(CONFIG_MFD_ASIC3) += asic3.o tmio_core.o
9 11
@@ -24,6 +26,16 @@ obj-$(CONFIG_MFD_T7L66XB) += t7l66xb.o tmio_core.o
24obj-$(CONFIG_MFD_TC6387XB) += tc6387xb.o tmio_core.o 26obj-$(CONFIG_MFD_TC6387XB) += tc6387xb.o tmio_core.o
25obj-$(CONFIG_MFD_TC6393XB) += tc6393xb.o tmio_core.o 27obj-$(CONFIG_MFD_TC6393XB) += tc6393xb.o tmio_core.o
26 28
29obj-$(CONFIG_MFD_ARIZONA) += arizona-core.o
30obj-$(CONFIG_MFD_ARIZONA) += arizona-irq.o
31obj-$(CONFIG_MFD_ARIZONA_I2C) += arizona-i2c.o
32obj-$(CONFIG_MFD_ARIZONA_SPI) += arizona-spi.o
33ifneq ($(CONFIG_MFD_WM5102),n)
34obj-$(CONFIG_MFD_ARIZONA) += wm5102-tables.o
35endif
36ifneq ($(CONFIG_MFD_WM5110),n)
37obj-$(CONFIG_MFD_ARIZONA) += wm5110-tables.o
38endif
27obj-$(CONFIG_MFD_WM8400) += wm8400-core.o 39obj-$(CONFIG_MFD_WM8400) += wm8400-core.o
28wm831x-objs := wm831x-core.o wm831x-irq.o wm831x-otp.o 40wm831x-objs := wm831x-core.o wm831x-irq.o wm831x-otp.o
29wm831x-objs += wm831x-auxadc.o 41wm831x-objs += wm831x-auxadc.o
@@ -78,6 +90,7 @@ obj-$(CONFIG_PMIC_DA9052) += da9052-core.o
78obj-$(CONFIG_MFD_DA9052_SPI) += da9052-spi.o 90obj-$(CONFIG_MFD_DA9052_SPI) += da9052-spi.o
79obj-$(CONFIG_MFD_DA9052_I2C) += da9052-i2c.o 91obj-$(CONFIG_MFD_DA9052_I2C) += da9052-i2c.o
80 92
93obj-$(CONFIG_MFD_MAX77686) += max77686.o max77686-irq.o
81obj-$(CONFIG_MFD_MAX77693) += max77693.o max77693-irq.o 94obj-$(CONFIG_MFD_MAX77693) += max77693.o max77693-irq.o
82max8925-objs := max8925-core.o max8925-i2c.o 95max8925-objs := max8925-core.o max8925-i2c.o
83obj-$(CONFIG_MFD_MAX8925) += max8925.o 96obj-$(CONFIG_MFD_MAX8925) += max8925.o
@@ -116,6 +129,6 @@ obj-$(CONFIG_MFD_AAT2870_CORE) += aat2870-core.o
116obj-$(CONFIG_MFD_INTEL_MSIC) += intel_msic.o 129obj-$(CONFIG_MFD_INTEL_MSIC) += intel_msic.o
117obj-$(CONFIG_MFD_PALMAS) += palmas.o 130obj-$(CONFIG_MFD_PALMAS) += palmas.o
118obj-$(CONFIG_MFD_RC5T583) += rc5t583.o rc5t583-irq.o 131obj-$(CONFIG_MFD_RC5T583) += rc5t583.o rc5t583-irq.o
119obj-$(CONFIG_MFD_S5M_CORE) += s5m-core.o s5m-irq.o 132obj-$(CONFIG_MFD_SEC_CORE) += sec-core.o sec-irq.o
120obj-$(CONFIG_MFD_ANATOP) += anatop-mfd.o 133obj-$(CONFIG_MFD_ANATOP) += anatop-mfd.o
121obj-$(CONFIG_MFD_LM3533) += lm3533-core.o lm3533-ctrlbank.o 134obj-$(CONFIG_MFD_LM3533) += lm3533-core.o lm3533-ctrlbank.o
diff --git a/drivers/mfd/ab3100-core.c b/drivers/mfd/ab3100-core.c
index 1efad20fb175..4276aab4f196 100644
--- a/drivers/mfd/ab3100-core.c
+++ b/drivers/mfd/ab3100-core.c
@@ -867,7 +867,7 @@ static int __devinit ab3100_probe(struct i2c_client *client,
867 int err; 867 int err;
868 int i; 868 int i;
869 869
870 ab3100 = kzalloc(sizeof(struct ab3100), GFP_KERNEL); 870 ab3100 = devm_kzalloc(&client->dev, sizeof(struct ab3100), GFP_KERNEL);
871 if (!ab3100) { 871 if (!ab3100) {
872 dev_err(&client->dev, "could not allocate AB3100 device\n"); 872 dev_err(&client->dev, "could not allocate AB3100 device\n");
873 return -ENOMEM; 873 return -ENOMEM;
@@ -921,7 +921,7 @@ static int __devinit ab3100_probe(struct i2c_client *client,
921 921
922 /* Attach a second dummy i2c_client to the test register address */ 922 /* Attach a second dummy i2c_client to the test register address */
923 ab3100->testreg_client = i2c_new_dummy(client->adapter, 923 ab3100->testreg_client = i2c_new_dummy(client->adapter,
924 client->addr + 1); 924 client->addr + 1);
925 if (!ab3100->testreg_client) { 925 if (!ab3100->testreg_client) {
926 err = -ENOMEM; 926 err = -ENOMEM;
927 goto exit_no_testreg_client; 927 goto exit_no_testreg_client;
@@ -931,13 +931,13 @@ static int __devinit ab3100_probe(struct i2c_client *client,
931 if (err) 931 if (err)
932 goto exit_no_setup; 932 goto exit_no_setup;
933 933
934 err = request_threaded_irq(client->irq, NULL, ab3100_irq_handler, 934 err = devm_request_threaded_irq(&client->dev,
935 IRQF_ONESHOT, "ab3100-core", ab3100); 935 client->irq, NULL, ab3100_irq_handler,
936 /* This real unpredictable IRQ is of course sampled for entropy */ 936 IRQF_ONESHOT, "ab3100-core", ab3100);
937 rand_initialize_irq(client->irq);
938
939 if (err) 937 if (err)
940 goto exit_no_irq; 938 goto exit_no_irq;
939 /* This real unpredictable IRQ is of course sampled for entropy */
940 rand_initialize_irq(client->irq);
941 941
942 err = abx500_register_ops(&client->dev, &ab3100_ops); 942 err = abx500_register_ops(&client->dev, &ab3100_ops);
943 if (err) 943 if (err)
@@ -962,7 +962,6 @@ static int __devinit ab3100_probe(struct i2c_client *client,
962 i2c_unregister_device(ab3100->testreg_client); 962 i2c_unregister_device(ab3100->testreg_client);
963 exit_no_testreg_client: 963 exit_no_testreg_client:
964 exit_no_detect: 964 exit_no_detect:
965 kfree(ab3100);
966 return err; 965 return err;
967} 966}
968 967
@@ -972,16 +971,8 @@ static int __devexit ab3100_remove(struct i2c_client *client)
972 971
973 /* Unregister subdevices */ 972 /* Unregister subdevices */
974 mfd_remove_devices(&client->dev); 973 mfd_remove_devices(&client->dev);
975
976 ab3100_remove_debugfs(); 974 ab3100_remove_debugfs();
977 i2c_unregister_device(ab3100->testreg_client); 975 i2c_unregister_device(ab3100->testreg_client);
978
979 /*
980 * At this point, all subscribers should have unregistered
981 * their notifiers so deactivate IRQ
982 */
983 free_irq(client->irq, ab3100);
984 kfree(ab3100);
985 return 0; 976 return 0;
986} 977}
987 978
diff --git a/drivers/mfd/ab8500-core.c b/drivers/mfd/ab8500-core.c
index dac0e2998603..626b4ecaf647 100644
--- a/drivers/mfd/ab8500-core.c
+++ b/drivers/mfd/ab8500-core.c
@@ -11,6 +11,7 @@
11#include <linux/slab.h> 11#include <linux/slab.h>
12#include <linux/init.h> 12#include <linux/init.h>
13#include <linux/irq.h> 13#include <linux/irq.h>
14#include <linux/irqdomain.h>
14#include <linux/delay.h> 15#include <linux/delay.h>
15#include <linux/interrupt.h> 16#include <linux/interrupt.h>
16#include <linux/module.h> 17#include <linux/module.h>
@@ -140,7 +141,7 @@ static const char ab8500_version_str[][7] = {
140 [AB8500_VERSION_AB8540] = "AB8540", 141 [AB8500_VERSION_AB8540] = "AB8540",
141}; 142};
142 143
143static int ab8500_i2c_write(struct ab8500 *ab8500, u16 addr, u8 data) 144static int ab8500_prcmu_write(struct ab8500 *ab8500, u16 addr, u8 data)
144{ 145{
145 int ret; 146 int ret;
146 147
@@ -150,7 +151,7 @@ static int ab8500_i2c_write(struct ab8500 *ab8500, u16 addr, u8 data)
150 return ret; 151 return ret;
151} 152}
152 153
153static int ab8500_i2c_write_masked(struct ab8500 *ab8500, u16 addr, u8 mask, 154static int ab8500_prcmu_write_masked(struct ab8500 *ab8500, u16 addr, u8 mask,
154 u8 data) 155 u8 data)
155{ 156{
156 int ret; 157 int ret;
@@ -162,7 +163,7 @@ static int ab8500_i2c_write_masked(struct ab8500 *ab8500, u16 addr, u8 mask,
162 return ret; 163 return ret;
163} 164}
164 165
165static int ab8500_i2c_read(struct ab8500 *ab8500, u16 addr) 166static int ab8500_prcmu_read(struct ab8500 *ab8500, u16 addr)
166{ 167{
167 int ret; 168 int ret;
168 u8 data; 169 u8 data;
@@ -361,7 +362,7 @@ static void ab8500_irq_sync_unlock(struct irq_data *data)
361static void ab8500_irq_mask(struct irq_data *data) 362static void ab8500_irq_mask(struct irq_data *data)
362{ 363{
363 struct ab8500 *ab8500 = irq_data_get_irq_chip_data(data); 364 struct ab8500 *ab8500 = irq_data_get_irq_chip_data(data);
364 int offset = data->irq - ab8500->irq_base; 365 int offset = data->hwirq;
365 int index = offset / 8; 366 int index = offset / 8;
366 int mask = 1 << (offset % 8); 367 int mask = 1 << (offset % 8);
367 368
@@ -371,7 +372,7 @@ static void ab8500_irq_mask(struct irq_data *data)
371static void ab8500_irq_unmask(struct irq_data *data) 372static void ab8500_irq_unmask(struct irq_data *data)
372{ 373{
373 struct ab8500 *ab8500 = irq_data_get_irq_chip_data(data); 374 struct ab8500 *ab8500 = irq_data_get_irq_chip_data(data);
374 int offset = data->irq - ab8500->irq_base; 375 int offset = data->hwirq;
375 int index = offset / 8; 376 int index = offset / 8;
376 int mask = 1 << (offset % 8); 377 int mask = 1 << (offset % 8);
377 378
@@ -510,38 +511,51 @@ static irqreturn_t ab8500_irq(int irq, void *dev)
510 return IRQ_HANDLED; 511 return IRQ_HANDLED;
511} 512}
512 513
513static int ab8500_irq_init(struct ab8500 *ab8500) 514/**
515 * ab8500_irq_get_virq(): Map an interrupt on a chip to a virtual IRQ
516 *
517 * @ab8500: ab8500_irq controller to operate on.
518 * @irq: index of the interrupt requested in the chip IRQs
519 *
520 * Useful for drivers to request their own IRQs.
521 */
522int ab8500_irq_get_virq(struct ab8500 *ab8500, int irq)
514{ 523{
515 int base = ab8500->irq_base; 524 if (!ab8500)
516 int irq; 525 return -EINVAL;
517 int num_irqs;
518 526
519 if (is_ab9540(ab8500)) 527 return irq_create_mapping(ab8500->domain, irq);
520 num_irqs = AB9540_NR_IRQS; 528}
521 else if (is_ab8505(ab8500)) 529EXPORT_SYMBOL_GPL(ab8500_irq_get_virq);
522 num_irqs = AB8505_NR_IRQS; 530
523 else 531static int ab8500_irq_map(struct irq_domain *d, unsigned int virq,
524 num_irqs = AB8500_NR_IRQS; 532 irq_hw_number_t hwirq)
533{
534 struct ab8500 *ab8500 = d->host_data;
525 535
526 for (irq = base; irq < base + num_irqs; irq++) { 536 if (!ab8500)
527 irq_set_chip_data(irq, ab8500); 537 return -EINVAL;
528 irq_set_chip_and_handler(irq, &ab8500_irq_chip, 538
529 handle_simple_irq); 539 irq_set_chip_data(virq, ab8500);
530 irq_set_nested_thread(irq, 1); 540 irq_set_chip_and_handler(virq, &ab8500_irq_chip,
541 handle_simple_irq);
542 irq_set_nested_thread(virq, 1);
531#ifdef CONFIG_ARM 543#ifdef CONFIG_ARM
532 set_irq_flags(irq, IRQF_VALID); 544 set_irq_flags(virq, IRQF_VALID);
533#else 545#else
534 irq_set_noprobe(irq); 546 irq_set_noprobe(virq);
535#endif 547#endif
536 }
537 548
538 return 0; 549 return 0;
539} 550}
540 551
541static void ab8500_irq_remove(struct ab8500 *ab8500) 552static struct irq_domain_ops ab8500_irq_ops = {
553 .map = ab8500_irq_map,
554 .xlate = irq_domain_xlate_twocell,
555};
556
557static int ab8500_irq_init(struct ab8500 *ab8500, struct device_node *np)
542{ 558{
543 int base = ab8500->irq_base;
544 int irq;
545 int num_irqs; 559 int num_irqs;
546 560
547 if (is_ab9540(ab8500)) 561 if (is_ab9540(ab8500))
@@ -551,13 +565,22 @@ static void ab8500_irq_remove(struct ab8500 *ab8500)
551 else 565 else
552 num_irqs = AB8500_NR_IRQS; 566 num_irqs = AB8500_NR_IRQS;
553 567
554 for (irq = base; irq < base + num_irqs; irq++) { 568 if (ab8500->irq_base) {
555#ifdef CONFIG_ARM 569 ab8500->domain = irq_domain_add_legacy(
556 set_irq_flags(irq, 0); 570 NULL, num_irqs, ab8500->irq_base,
557#endif 571 0, &ab8500_irq_ops, ab8500);
558 irq_set_chip_and_handler(irq, NULL, NULL); 572 }
559 irq_set_chip_data(irq, NULL); 573 else {
574 ab8500->domain = irq_domain_add_linear(
575 np, num_irqs, &ab8500_irq_ops, ab8500);
576 }
577
578 if (!ab8500->domain) {
579 dev_err(ab8500->dev, "Failed to create irqdomain\n");
580 return -ENOSYS;
560 } 581 }
582
583 return 0;
561} 584}
562 585
563int ab8500_suspend(struct ab8500 *ab8500) 586int ab8500_suspend(struct ab8500 *ab8500)
@@ -947,54 +970,69 @@ static struct mfd_cell __devinitdata abx500_common_devs[] = {
947#ifdef CONFIG_DEBUG_FS 970#ifdef CONFIG_DEBUG_FS
948 { 971 {
949 .name = "ab8500-debug", 972 .name = "ab8500-debug",
973 .of_compatible = "stericsson,ab8500-debug",
950 .num_resources = ARRAY_SIZE(ab8500_debug_resources), 974 .num_resources = ARRAY_SIZE(ab8500_debug_resources),
951 .resources = ab8500_debug_resources, 975 .resources = ab8500_debug_resources,
952 }, 976 },
953#endif 977#endif
954 { 978 {
955 .name = "ab8500-sysctrl", 979 .name = "ab8500-sysctrl",
980 .of_compatible = "stericsson,ab8500-sysctrl",
956 }, 981 },
957 { 982 {
958 .name = "ab8500-regulator", 983 .name = "ab8500-regulator",
984 .of_compatible = "stericsson,ab8500-regulator",
959 }, 985 },
960 { 986 {
961 .name = "ab8500-gpadc", 987 .name = "ab8500-gpadc",
988 .of_compatible = "stericsson,ab8500-gpadc",
962 .num_resources = ARRAY_SIZE(ab8500_gpadc_resources), 989 .num_resources = ARRAY_SIZE(ab8500_gpadc_resources),
963 .resources = ab8500_gpadc_resources, 990 .resources = ab8500_gpadc_resources,
964 }, 991 },
965 { 992 {
966 .name = "ab8500-rtc", 993 .name = "ab8500-rtc",
994 .of_compatible = "stericsson,ab8500-rtc",
967 .num_resources = ARRAY_SIZE(ab8500_rtc_resources), 995 .num_resources = ARRAY_SIZE(ab8500_rtc_resources),
968 .resources = ab8500_rtc_resources, 996 .resources = ab8500_rtc_resources,
969 }, 997 },
970 { 998 {
971 .name = "ab8500-acc-det", 999 .name = "ab8500-acc-det",
1000 .of_compatible = "stericsson,ab8500-acc-det",
972 .num_resources = ARRAY_SIZE(ab8500_av_acc_detect_resources), 1001 .num_resources = ARRAY_SIZE(ab8500_av_acc_detect_resources),
973 .resources = ab8500_av_acc_detect_resources, 1002 .resources = ab8500_av_acc_detect_resources,
974 }, 1003 },
975 { 1004 {
976 .name = "ab8500-poweron-key", 1005 .name = "ab8500-poweron-key",
1006 .of_compatible = "stericsson,ab8500-poweron-key",
977 .num_resources = ARRAY_SIZE(ab8500_poweronkey_db_resources), 1007 .num_resources = ARRAY_SIZE(ab8500_poweronkey_db_resources),
978 .resources = ab8500_poweronkey_db_resources, 1008 .resources = ab8500_poweronkey_db_resources,
979 }, 1009 },
980 { 1010 {
981 .name = "ab8500-pwm", 1011 .name = "ab8500-pwm",
1012 .of_compatible = "stericsson,ab8500-pwm",
982 .id = 1, 1013 .id = 1,
983 }, 1014 },
984 { 1015 {
985 .name = "ab8500-pwm", 1016 .name = "ab8500-pwm",
1017 .of_compatible = "stericsson,ab8500-pwm",
986 .id = 2, 1018 .id = 2,
987 }, 1019 },
988 { 1020 {
989 .name = "ab8500-pwm", 1021 .name = "ab8500-pwm",
1022 .of_compatible = "stericsson,ab8500-pwm",
990 .id = 3, 1023 .id = 3,
991 }, 1024 },
992 { .name = "ab8500-leds", }, 1025 {
1026 .name = "ab8500-leds",
1027 .of_compatible = "stericsson,ab8500-leds",
1028 },
993 { 1029 {
994 .name = "ab8500-denc", 1030 .name = "ab8500-denc",
1031 .of_compatible = "stericsson,ab8500-denc",
995 }, 1032 },
996 { 1033 {
997 .name = "ab8500-temp", 1034 .name = "ab8500-temp",
1035 .of_compatible = "stericsson,ab8500-temp",
998 .num_resources = ARRAY_SIZE(ab8500_temp_resources), 1036 .num_resources = ARRAY_SIZE(ab8500_temp_resources),
999 .resources = ab8500_temp_resources, 1037 .resources = ab8500_temp_resources,
1000 }, 1038 },
@@ -1026,11 +1064,13 @@ static struct mfd_cell __devinitdata ab8500_bm_devs[] = {
1026static struct mfd_cell __devinitdata ab8500_devs[] = { 1064static struct mfd_cell __devinitdata ab8500_devs[] = {
1027 { 1065 {
1028 .name = "ab8500-gpio", 1066 .name = "ab8500-gpio",
1067 .of_compatible = "stericsson,ab8500-gpio",
1029 .num_resources = ARRAY_SIZE(ab8500_gpio_resources), 1068 .num_resources = ARRAY_SIZE(ab8500_gpio_resources),
1030 .resources = ab8500_gpio_resources, 1069 .resources = ab8500_gpio_resources,
1031 }, 1070 },
1032 { 1071 {
1033 .name = "ab8500-usb", 1072 .name = "ab8500-usb",
1073 .of_compatible = "stericsson,ab8500-usb",
1034 .num_resources = ARRAY_SIZE(ab8500_usb_resources), 1074 .num_resources = ARRAY_SIZE(ab8500_usb_resources),
1035 .resources = ab8500_usb_resources, 1075 .resources = ab8500_usb_resources,
1036 }, 1076 },
@@ -1207,16 +1247,17 @@ static struct attribute_group ab9540_attr_group = {
1207 .attrs = ab9540_sysfs_entries, 1247 .attrs = ab9540_sysfs_entries,
1208}; 1248};
1209 1249
1210static const struct of_device_id ab8500_match[] = {
1211 {
1212 .compatible = "stericsson,ab8500",
1213 .data = (void *)AB8500_VERSION_AB8500,
1214 },
1215 {},
1216};
1217
1218static int __devinit ab8500_probe(struct platform_device *pdev) 1250static int __devinit ab8500_probe(struct platform_device *pdev)
1219{ 1251{
1252 static char *switch_off_status[] = {
1253 "Swoff bit programming",
1254 "Thermal protection activation",
1255 "Vbat lower then BattOk falling threshold",
1256 "Watchdog expired",
1257 "Non presence of 32kHz clock",
1258 "Battery level lower than power on reset threshold",
1259 "Power on key 1 pressed longer than 10 seconds",
1260 "DB8500 thermal shutdown"};
1220 struct ab8500_platform_data *plat = dev_get_platdata(&pdev->dev); 1261 struct ab8500_platform_data *plat = dev_get_platdata(&pdev->dev);
1221 const struct platform_device_id *platid = platform_get_device_id(pdev); 1262 const struct platform_device_id *platid = platform_get_device_id(pdev);
1222 enum ab8500_version version = AB8500_VERSION_UNDEFINED; 1263 enum ab8500_version version = AB8500_VERSION_UNDEFINED;
@@ -1233,14 +1274,6 @@ static int __devinit ab8500_probe(struct platform_device *pdev)
1233 1274
1234 if (plat) 1275 if (plat)
1235 ab8500->irq_base = plat->irq_base; 1276 ab8500->irq_base = plat->irq_base;
1236 else if (np)
1237 ret = of_property_read_u32(np, "stericsson,irq-base", &ab8500->irq_base);
1238
1239 if (!ab8500->irq_base) {
1240 dev_info(&pdev->dev, "couldn't find irq-base\n");
1241 ret = -EINVAL;
1242 goto out_free_ab8500;
1243 }
1244 1277
1245 ab8500->dev = &pdev->dev; 1278 ab8500->dev = &pdev->dev;
1246 1279
@@ -1252,9 +1285,9 @@ static int __devinit ab8500_probe(struct platform_device *pdev)
1252 1285
1253 ab8500->irq = resource->start; 1286 ab8500->irq = resource->start;
1254 1287
1255 ab8500->read = ab8500_i2c_read; 1288 ab8500->read = ab8500_prcmu_read;
1256 ab8500->write = ab8500_i2c_write; 1289 ab8500->write = ab8500_prcmu_write;
1257 ab8500->write_masked = ab8500_i2c_write_masked; 1290 ab8500->write_masked = ab8500_prcmu_write_masked;
1258 1291
1259 mutex_init(&ab8500->lock); 1292 mutex_init(&ab8500->lock);
1260 mutex_init(&ab8500->irq_lock); 1293 mutex_init(&ab8500->irq_lock);
@@ -1264,9 +1297,6 @@ static int __devinit ab8500_probe(struct platform_device *pdev)
1264 1297
1265 if (platid) 1298 if (platid)
1266 version = platid->driver_data; 1299 version = platid->driver_data;
1267 else if (np)
1268 version = (unsigned int)
1269 of_match_device(ab8500_match, &pdev->dev)->data;
1270 1300
1271 if (version != AB8500_VERSION_UNDEFINED) 1301 if (version != AB8500_VERSION_UNDEFINED)
1272 ab8500->version = version; 1302 ab8500->version = version;
@@ -1323,7 +1353,20 @@ static int __devinit ab8500_probe(struct platform_device *pdev)
1323 AB8500_SWITCH_OFF_STATUS, &value); 1353 AB8500_SWITCH_OFF_STATUS, &value);
1324 if (ret < 0) 1354 if (ret < 0)
1325 return ret; 1355 return ret;
1326 dev_info(ab8500->dev, "switch off status: %#x", value); 1356 dev_info(ab8500->dev, "switch off cause(s) (%#x): ", value);
1357
1358 if (value) {
1359 for (i = 0; i < ARRAY_SIZE(switch_off_status); i++) {
1360 if (value & 1)
1361 printk(KERN_CONT " \"%s\"",
1362 switch_off_status[i]);
1363 value = value >> 1;
1364
1365 }
1366 printk(KERN_CONT "\n");
1367 } else {
1368 printk(KERN_CONT " None\n");
1369 }
1327 1370
1328 if (plat && plat->init) 1371 if (plat && plat->init)
1329 plat->init(ab8500); 1372 plat->init(ab8500);
@@ -1352,53 +1395,50 @@ static int __devinit ab8500_probe(struct platform_device *pdev)
1352 for (i = 0; i < ab8500->mask_size; i++) 1395 for (i = 0; i < ab8500->mask_size; i++)
1353 ab8500->mask[i] = ab8500->oldmask[i] = 0xff; 1396 ab8500->mask[i] = ab8500->oldmask[i] = 0xff;
1354 1397
1355 if (ab8500->irq_base) { 1398 ret = ab8500_irq_init(ab8500, np);
1356 ret = ab8500_irq_init(ab8500); 1399 if (ret)
1357 if (ret) 1400 goto out_freeoldmask;
1358 goto out_freeoldmask;
1359 1401
1360 /* Activate this feature only in ab9540 */ 1402 /* Activate this feature only in ab9540 */
1361 /* till tests are done on ab8500 1p2 or later*/ 1403 /* till tests are done on ab8500 1p2 or later*/
1362 if (is_ab9540(ab8500)) 1404 if (is_ab9540(ab8500)) {
1363 ret = request_threaded_irq(ab8500->irq, NULL, 1405 ret = request_threaded_irq(ab8500->irq, NULL,
1364 ab8500_hierarchical_irq, 1406 ab8500_hierarchical_irq,
1365 IRQF_ONESHOT | IRQF_NO_SUSPEND, 1407 IRQF_ONESHOT | IRQF_NO_SUSPEND,
1366 "ab8500", ab8500); 1408 "ab8500", ab8500);
1367 else 1409 }
1368 ret = request_threaded_irq(ab8500->irq, NULL, 1410 else {
1411 ret = request_threaded_irq(ab8500->irq, NULL,
1369 ab8500_irq, 1412 ab8500_irq,
1370 IRQF_ONESHOT | IRQF_NO_SUSPEND, 1413 IRQF_ONESHOT | IRQF_NO_SUSPEND,
1371 "ab8500", ab8500); 1414 "ab8500", ab8500);
1372 if (ret) 1415 if (ret)
1373 goto out_removeirq; 1416 goto out_freeoldmask;
1374 } 1417 }
1375 1418
1376 if (!np) { 1419 ret = mfd_add_devices(ab8500->dev, 0, abx500_common_devs,
1377 ret = mfd_add_devices(ab8500->dev, 0, abx500_common_devs, 1420 ARRAY_SIZE(abx500_common_devs), NULL,
1378 ARRAY_SIZE(abx500_common_devs), NULL, 1421 ab8500->irq_base);
1379 ab8500->irq_base); 1422 if (ret)
1423 goto out_freeirq;
1380 1424
1381 if (ret) 1425 if (is_ab9540(ab8500))
1382 goto out_freeirq; 1426 ret = mfd_add_devices(ab8500->dev, 0, ab9540_devs,
1383 1427 ARRAY_SIZE(ab9540_devs), NULL,
1384 if (is_ab9540(ab8500)) 1428 ab8500->irq_base);
1385 ret = mfd_add_devices(ab8500->dev, 0, ab9540_devs, 1429 else
1386 ARRAY_SIZE(ab9540_devs), NULL, 1430 ret = mfd_add_devices(ab8500->dev, 0, ab8500_devs,
1387 ab8500->irq_base); 1431 ARRAY_SIZE(ab8500_devs), NULL,
1388 else 1432 ab8500->irq_base);
1389 ret = mfd_add_devices(ab8500->dev, 0, ab8500_devs, 1433 if (ret)
1390 ARRAY_SIZE(ab8500_devs), NULL, 1434 goto out_freeirq;
1391 ab8500->irq_base);
1392 if (ret)
1393 goto out_freeirq;
1394 1435
1395 if (is_ab9540(ab8500) || is_ab8505(ab8500)) 1436 if (is_ab9540(ab8500) || is_ab8505(ab8500))
1396 ret = mfd_add_devices(ab8500->dev, 0, ab9540_ab8505_devs, 1437 ret = mfd_add_devices(ab8500->dev, 0, ab9540_ab8505_devs,
1397 ARRAY_SIZE(ab9540_ab8505_devs), NULL, 1438 ARRAY_SIZE(ab9540_ab8505_devs), NULL,
1398 ab8500->irq_base); 1439 ab8500->irq_base);
1399 if (ret) 1440 if (ret)
1400 goto out_freeirq; 1441 goto out_freeirq;
1401 }
1402 1442
1403 if (!no_bm) { 1443 if (!no_bm) {
1404 /* Add battery management devices */ 1444 /* Add battery management devices */
@@ -1417,15 +1457,11 @@ static int __devinit ab8500_probe(struct platform_device *pdev)
1417 &ab8500_attr_group); 1457 &ab8500_attr_group);
1418 if (ret) 1458 if (ret)
1419 dev_err(ab8500->dev, "error creating sysfs entries\n"); 1459 dev_err(ab8500->dev, "error creating sysfs entries\n");
1420 else 1460
1421 return ret; 1461 return ret;
1422 1462
1423out_freeirq: 1463out_freeirq:
1424 if (ab8500->irq_base) 1464 free_irq(ab8500->irq, ab8500);
1425 free_irq(ab8500->irq, ab8500);
1426out_removeirq:
1427 if (ab8500->irq_base)
1428 ab8500_irq_remove(ab8500);
1429out_freeoldmask: 1465out_freeoldmask:
1430 kfree(ab8500->oldmask); 1466 kfree(ab8500->oldmask);
1431out_freemask: 1467out_freemask:
@@ -1444,11 +1480,10 @@ static int __devexit ab8500_remove(struct platform_device *pdev)
1444 sysfs_remove_group(&ab8500->dev->kobj, &ab9540_attr_group); 1480 sysfs_remove_group(&ab8500->dev->kobj, &ab9540_attr_group);
1445 else 1481 else
1446 sysfs_remove_group(&ab8500->dev->kobj, &ab8500_attr_group); 1482 sysfs_remove_group(&ab8500->dev->kobj, &ab8500_attr_group);
1483
1447 mfd_remove_devices(ab8500->dev); 1484 mfd_remove_devices(ab8500->dev);
1448 if (ab8500->irq_base) { 1485 free_irq(ab8500->irq, ab8500);
1449 free_irq(ab8500->irq, ab8500); 1486
1450 ab8500_irq_remove(ab8500);
1451 }
1452 kfree(ab8500->oldmask); 1487 kfree(ab8500->oldmask);
1453 kfree(ab8500->mask); 1488 kfree(ab8500->mask);
1454 kfree(ab8500); 1489 kfree(ab8500);
@@ -1468,7 +1503,6 @@ static struct platform_driver ab8500_core_driver = {
1468 .driver = { 1503 .driver = {
1469 .name = "ab8500-core", 1504 .name = "ab8500-core",
1470 .owner = THIS_MODULE, 1505 .owner = THIS_MODULE,
1471 .of_match_table = ab8500_match,
1472 }, 1506 },
1473 .probe = ab8500_probe, 1507 .probe = ab8500_probe,
1474 .remove = __devexit_p(ab8500_remove), 1508 .remove = __devexit_p(ab8500_remove),
@@ -1484,7 +1518,7 @@ static void __exit ab8500_core_exit(void)
1484{ 1518{
1485 platform_driver_unregister(&ab8500_core_driver); 1519 platform_driver_unregister(&ab8500_core_driver);
1486} 1520}
1487arch_initcall(ab8500_core_init); 1521core_initcall(ab8500_core_init);
1488module_exit(ab8500_core_exit); 1522module_exit(ab8500_core_exit);
1489 1523
1490MODULE_AUTHOR("Mattias Wallin, Srinidhi Kasagar, Rabin Vincent"); 1524MODULE_AUTHOR("Mattias Wallin, Srinidhi Kasagar, Rabin Vincent");
diff --git a/drivers/mfd/ab8500-debugfs.c b/drivers/mfd/ab8500-debugfs.c
index 50c4c89ab220..c4cb806978ac 100644
--- a/drivers/mfd/ab8500-debugfs.c
+++ b/drivers/mfd/ab8500-debugfs.c
@@ -31,12 +31,12 @@ struct ab8500_reg_range {
31}; 31};
32 32
33/** 33/**
34 * struct ab8500_i2c_ranges 34 * struct ab8500_prcmu_ranges
35 * @num_ranges: the number of ranges in the list 35 * @num_ranges: the number of ranges in the list
36 * @bankid: bank identifier 36 * @bankid: bank identifier
37 * @range: the list of register ranges 37 * @range: the list of register ranges
38 */ 38 */
39struct ab8500_i2c_ranges { 39struct ab8500_prcmu_ranges {
40 u8 num_ranges; 40 u8 num_ranges;
41 u8 bankid; 41 u8 bankid;
42 const struct ab8500_reg_range *range; 42 const struct ab8500_reg_range *range;
@@ -47,7 +47,7 @@ struct ab8500_i2c_ranges {
47 47
48#define AB8500_REV_REG 0x80 48#define AB8500_REV_REG 0x80
49 49
50static struct ab8500_i2c_ranges debug_ranges[AB8500_NUM_BANKS] = { 50static struct ab8500_prcmu_ranges debug_ranges[AB8500_NUM_BANKS] = {
51 [0x0] = { 51 [0x0] = {
52 .num_ranges = 0, 52 .num_ranges = 0,
53 .range = 0, 53 .range = 0,
@@ -608,16 +608,10 @@ static int __devexit ab8500_debug_remove(struct platform_device *plf)
608 return 0; 608 return 0;
609} 609}
610 610
611static const struct of_device_id ab8500_debug_match[] = {
612 { .compatible = "stericsson,ab8500-debug", },
613 {}
614};
615
616static struct platform_driver ab8500_debug_driver = { 611static struct platform_driver ab8500_debug_driver = {
617 .driver = { 612 .driver = {
618 .name = "ab8500-debug", 613 .name = "ab8500-debug",
619 .owner = THIS_MODULE, 614 .owner = THIS_MODULE,
620 .of_match_table = ab8500_debug_match,
621 }, 615 },
622 .probe = ab8500_debug_probe, 616 .probe = ab8500_debug_probe,
623 .remove = __devexit_p(ab8500_debug_remove) 617 .remove = __devexit_p(ab8500_debug_remove)
diff --git a/drivers/mfd/ab8500-gpadc.c b/drivers/mfd/ab8500-gpadc.c
index b86fd8e1ec3f..866f95960b4b 100644
--- a/drivers/mfd/ab8500-gpadc.c
+++ b/drivers/mfd/ab8500-gpadc.c
@@ -599,7 +599,8 @@ static int __devinit ab8500_gpadc_probe(struct platform_device *pdev)
599 /* Register interrupt - SwAdcComplete */ 599 /* Register interrupt - SwAdcComplete */
600 ret = request_threaded_irq(gpadc->irq, NULL, 600 ret = request_threaded_irq(gpadc->irq, NULL,
601 ab8500_bm_gpswadcconvend_handler, 601 ab8500_bm_gpswadcconvend_handler,
602 IRQF_NO_SUSPEND | IRQF_SHARED, "ab8500-gpadc", gpadc); 602 IRQF_ONESHOT | IRQF_NO_SUSPEND | IRQF_SHARED,
603 "ab8500-gpadc", gpadc);
603 if (ret < 0) { 604 if (ret < 0) {
604 dev_err(gpadc->dev, "Failed to register interrupt, irq: %d\n", 605 dev_err(gpadc->dev, "Failed to register interrupt, irq: %d\n",
605 gpadc->irq); 606 gpadc->irq);
@@ -648,18 +649,12 @@ static int __devexit ab8500_gpadc_remove(struct platform_device *pdev)
648 return 0; 649 return 0;
649} 650}
650 651
651static const struct of_device_id ab8500_gpadc_match[] = {
652 { .compatible = "stericsson,ab8500-gpadc", },
653 {}
654};
655
656static struct platform_driver ab8500_gpadc_driver = { 652static struct platform_driver ab8500_gpadc_driver = {
657 .probe = ab8500_gpadc_probe, 653 .probe = ab8500_gpadc_probe,
658 .remove = __devexit_p(ab8500_gpadc_remove), 654 .remove = __devexit_p(ab8500_gpadc_remove),
659 .driver = { 655 .driver = {
660 .name = "ab8500-gpadc", 656 .name = "ab8500-gpadc",
661 .owner = THIS_MODULE, 657 .owner = THIS_MODULE,
662 .of_match_table = ab8500_gpadc_match,
663 }, 658 },
664}; 659};
665 660
diff --git a/drivers/mfd/ab8500-sysctrl.c b/drivers/mfd/ab8500-sysctrl.c
index 5a3e51ccf258..c28d4eb1eff0 100644
--- a/drivers/mfd/ab8500-sysctrl.c
+++ b/drivers/mfd/ab8500-sysctrl.c
@@ -61,16 +61,10 @@ static int __devexit ab8500_sysctrl_remove(struct platform_device *pdev)
61 return 0; 61 return 0;
62} 62}
63 63
64static const struct of_device_id ab8500_sysctrl_match[] = {
65 { .compatible = "stericsson,ab8500-sysctrl", },
66 {}
67};
68
69static struct platform_driver ab8500_sysctrl_driver = { 64static struct platform_driver ab8500_sysctrl_driver = {
70 .driver = { 65 .driver = {
71 .name = "ab8500-sysctrl", 66 .name = "ab8500-sysctrl",
72 .owner = THIS_MODULE, 67 .owner = THIS_MODULE,
73 .of_match_table = ab8500_sysctrl_match,
74 }, 68 },
75 .probe = ab8500_sysctrl_probe, 69 .probe = ab8500_sysctrl_probe,
76 .remove = __devexit_p(ab8500_sysctrl_remove), 70 .remove = __devexit_p(ab8500_sysctrl_remove),
diff --git a/drivers/mfd/adp5520.c b/drivers/mfd/adp5520.c
index 8d816cce8322..ea8b9475731d 100644
--- a/drivers/mfd/adp5520.c
+++ b/drivers/mfd/adp5520.c
@@ -320,7 +320,7 @@ static int __devexit adp5520_remove(struct i2c_client *client)
320 return 0; 320 return 0;
321} 321}
322 322
323#ifdef CONFIG_PM 323#ifdef CONFIG_PM_SLEEP
324static int adp5520_suspend(struct device *dev) 324static int adp5520_suspend(struct device *dev)
325{ 325{
326 struct i2c_client *client = to_i2c_client(dev); 326 struct i2c_client *client = to_i2c_client(dev);
diff --git a/drivers/mfd/anatop-mfd.c b/drivers/mfd/anatop-mfd.c
index 6da06341f6c9..5576e07576de 100644
--- a/drivers/mfd/anatop-mfd.c
+++ b/drivers/mfd/anatop-mfd.c
@@ -83,7 +83,7 @@ static int __devinit of_anatop_probe(struct platform_device *pdev)
83 drvdata->ioreg = ioreg; 83 drvdata->ioreg = ioreg;
84 spin_lock_init(&drvdata->reglock); 84 spin_lock_init(&drvdata->reglock);
85 platform_set_drvdata(pdev, drvdata); 85 platform_set_drvdata(pdev, drvdata);
86 of_platform_populate(np, of_anatop_match, NULL, dev); 86 of_platform_populate(np, NULL, NULL, dev);
87 87
88 return 0; 88 return 0;
89} 89}
diff --git a/drivers/mfd/arizona-core.c b/drivers/mfd/arizona-core.c
new file mode 100644
index 000000000000..c7983e862549
--- /dev/null
+++ b/drivers/mfd/arizona-core.c
@@ -0,0 +1,566 @@
1/*
2 * Arizona core driver
3 *
4 * Copyright 2012 Wolfson Microelectronics plc
5 *
6 * Author: Mark Brown <broonie@opensource.wolfsonmicro.com>
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License version 2 as
10 * published by the Free Software Foundation.
11 */
12
13#include <linux/delay.h>
14#include <linux/err.h>
15#include <linux/gpio.h>
16#include <linux/interrupt.h>
17#include <linux/mfd/core.h>
18#include <linux/module.h>
19#include <linux/pm_runtime.h>
20#include <linux/regmap.h>
21#include <linux/regulator/consumer.h>
22#include <linux/slab.h>
23
24#include <linux/mfd/arizona/core.h>
25#include <linux/mfd/arizona/registers.h>
26
27#include "arizona.h"
28
29static const char *wm5102_core_supplies[] = {
30 "AVDD",
31 "DBVDD1",
32};
33
34int arizona_clk32k_enable(struct arizona *arizona)
35{
36 int ret = 0;
37
38 mutex_lock(&arizona->clk_lock);
39
40 arizona->clk32k_ref++;
41
42 if (arizona->clk32k_ref == 1)
43 ret = regmap_update_bits(arizona->regmap, ARIZONA_CLOCK_32K_1,
44 ARIZONA_CLK_32K_ENA,
45 ARIZONA_CLK_32K_ENA);
46
47 if (ret != 0)
48 arizona->clk32k_ref--;
49
50 mutex_unlock(&arizona->clk_lock);
51
52 return ret;
53}
54EXPORT_SYMBOL_GPL(arizona_clk32k_enable);
55
56int arizona_clk32k_disable(struct arizona *arizona)
57{
58 int ret = 0;
59
60 mutex_lock(&arizona->clk_lock);
61
62 BUG_ON(arizona->clk32k_ref <= 0);
63
64 arizona->clk32k_ref--;
65
66 if (arizona->clk32k_ref == 0)
67 regmap_update_bits(arizona->regmap, ARIZONA_CLOCK_32K_1,
68 ARIZONA_CLK_32K_ENA, 0);
69
70 mutex_unlock(&arizona->clk_lock);
71
72 return ret;
73}
74EXPORT_SYMBOL_GPL(arizona_clk32k_disable);
75
76static irqreturn_t arizona_clkgen_err(int irq, void *data)
77{
78 struct arizona *arizona = data;
79
80 dev_err(arizona->dev, "CLKGEN error\n");
81
82 return IRQ_HANDLED;
83}
84
85static irqreturn_t arizona_underclocked(int irq, void *data)
86{
87 struct arizona *arizona = data;
88 unsigned int val;
89 int ret;
90
91 ret = regmap_read(arizona->regmap, ARIZONA_INTERRUPT_RAW_STATUS_8,
92 &val);
93 if (ret != 0) {
94 dev_err(arizona->dev, "Failed to read underclock status: %d\n",
95 ret);
96 return IRQ_NONE;
97 }
98
99 if (val & ARIZONA_AIF3_UNDERCLOCKED_STS)
100 dev_err(arizona->dev, "AIF3 underclocked\n");
101 if (val & ARIZONA_AIF3_UNDERCLOCKED_STS)
102 dev_err(arizona->dev, "AIF3 underclocked\n");
103 if (val & ARIZONA_AIF2_UNDERCLOCKED_STS)
104 dev_err(arizona->dev, "AIF1 underclocked\n");
105 if (val & ARIZONA_ISRC2_UNDERCLOCKED_STS)
106 dev_err(arizona->dev, "ISRC2 underclocked\n");
107 if (val & ARIZONA_ISRC1_UNDERCLOCKED_STS)
108 dev_err(arizona->dev, "ISRC1 underclocked\n");
109 if (val & ARIZONA_FX_UNDERCLOCKED_STS)
110 dev_err(arizona->dev, "FX underclocked\n");
111 if (val & ARIZONA_ASRC_UNDERCLOCKED_STS)
112 dev_err(arizona->dev, "ASRC underclocked\n");
113 if (val & ARIZONA_DAC_UNDERCLOCKED_STS)
114 dev_err(arizona->dev, "DAC underclocked\n");
115 if (val & ARIZONA_ADC_UNDERCLOCKED_STS)
116 dev_err(arizona->dev, "ADC underclocked\n");
117 if (val & ARIZONA_MIXER_UNDERCLOCKED_STS)
118 dev_err(arizona->dev, "Mixer underclocked\n");
119
120 return IRQ_HANDLED;
121}
122
123static irqreturn_t arizona_overclocked(int irq, void *data)
124{
125 struct arizona *arizona = data;
126 unsigned int val[2];
127 int ret;
128
129 ret = regmap_bulk_read(arizona->regmap, ARIZONA_INTERRUPT_RAW_STATUS_6,
130 &val[0], 2);
131 if (ret != 0) {
132 dev_err(arizona->dev, "Failed to read overclock status: %d\n",
133 ret);
134 return IRQ_NONE;
135 }
136
137 if (val[0] & ARIZONA_PWM_OVERCLOCKED_STS)
138 dev_err(arizona->dev, "PWM overclocked\n");
139 if (val[0] & ARIZONA_FX_CORE_OVERCLOCKED_STS)
140 dev_err(arizona->dev, "FX core overclocked\n");
141 if (val[0] & ARIZONA_DAC_SYS_OVERCLOCKED_STS)
142 dev_err(arizona->dev, "DAC SYS overclocked\n");
143 if (val[0] & ARIZONA_DAC_WARP_OVERCLOCKED_STS)
144 dev_err(arizona->dev, "DAC WARP overclocked\n");
145 if (val[0] & ARIZONA_ADC_OVERCLOCKED_STS)
146 dev_err(arizona->dev, "ADC overclocked\n");
147 if (val[0] & ARIZONA_MIXER_OVERCLOCKED_STS)
148 dev_err(arizona->dev, "Mixer overclocked\n");
149 if (val[0] & ARIZONA_AIF3_SYNC_OVERCLOCKED_STS)
150 dev_err(arizona->dev, "AIF3 overclocked\n");
151 if (val[0] & ARIZONA_AIF2_SYNC_OVERCLOCKED_STS)
152 dev_err(arizona->dev, "AIF2 overclocked\n");
153 if (val[0] & ARIZONA_AIF1_SYNC_OVERCLOCKED_STS)
154 dev_err(arizona->dev, "AIF1 overclocked\n");
155 if (val[0] & ARIZONA_PAD_CTRL_OVERCLOCKED_STS)
156 dev_err(arizona->dev, "Pad control overclocked\n");
157
158 if (val[1] & ARIZONA_SLIMBUS_SUBSYS_OVERCLOCKED_STS)
159 dev_err(arizona->dev, "Slimbus subsystem overclocked\n");
160 if (val[1] & ARIZONA_SLIMBUS_ASYNC_OVERCLOCKED_STS)
161 dev_err(arizona->dev, "Slimbus async overclocked\n");
162 if (val[1] & ARIZONA_SLIMBUS_SYNC_OVERCLOCKED_STS)
163 dev_err(arizona->dev, "Slimbus sync overclocked\n");
164 if (val[1] & ARIZONA_ASRC_ASYNC_SYS_OVERCLOCKED_STS)
165 dev_err(arizona->dev, "ASRC async system overclocked\n");
166 if (val[1] & ARIZONA_ASRC_ASYNC_WARP_OVERCLOCKED_STS)
167 dev_err(arizona->dev, "ASRC async WARP overclocked\n");
168 if (val[1] & ARIZONA_ASRC_SYNC_SYS_OVERCLOCKED_STS)
169 dev_err(arizona->dev, "ASRC sync system overclocked\n");
170 if (val[1] & ARIZONA_ASRC_SYNC_WARP_OVERCLOCKED_STS)
171 dev_err(arizona->dev, "ASRC sync WARP overclocked\n");
172 if (val[1] & ARIZONA_ADSP2_1_OVERCLOCKED_STS)
173 dev_err(arizona->dev, "DSP1 overclocked\n");
174 if (val[1] & ARIZONA_ISRC2_OVERCLOCKED_STS)
175 dev_err(arizona->dev, "ISRC2 overclocked\n");
176 if (val[1] & ARIZONA_ISRC1_OVERCLOCKED_STS)
177 dev_err(arizona->dev, "ISRC1 overclocked\n");
178
179 return IRQ_HANDLED;
180}
181
182static int arizona_wait_for_boot(struct arizona *arizona)
183{
184 unsigned int reg;
185 int ret, i;
186
187 /*
188 * We can't use an interrupt as we need to runtime resume to do so,
189 * we won't race with the interrupt handler as it'll be blocked on
190 * runtime resume.
191 */
192 for (i = 0; i < 5; i++) {
193 msleep(1);
194
195 ret = regmap_read(arizona->regmap,
196 ARIZONA_INTERRUPT_RAW_STATUS_5, &reg);
197 if (ret != 0) {
198 dev_err(arizona->dev, "Failed to read boot state: %d\n",
199 ret);
200 continue;
201 }
202
203 if (reg & ARIZONA_BOOT_DONE_STS)
204 break;
205 }
206
207 if (reg & ARIZONA_BOOT_DONE_STS) {
208 regmap_write(arizona->regmap, ARIZONA_INTERRUPT_STATUS_5,
209 ARIZONA_BOOT_DONE_STS);
210 } else {
211 dev_err(arizona->dev, "Device boot timed out: %x\n", reg);
212 return -ETIMEDOUT;
213 }
214
215 pm_runtime_mark_last_busy(arizona->dev);
216
217 return 0;
218}
219
220#ifdef CONFIG_PM_RUNTIME
221static int arizona_runtime_resume(struct device *dev)
222{
223 struct arizona *arizona = dev_get_drvdata(dev);
224 int ret;
225
226 dev_dbg(arizona->dev, "Leaving AoD mode\n");
227
228 ret = regulator_enable(arizona->dcvdd);
229 if (ret != 0) {
230 dev_err(arizona->dev, "Failed to enable DCVDD: %d\n", ret);
231 return ret;
232 }
233
234 regcache_cache_only(arizona->regmap, false);
235
236 ret = arizona_wait_for_boot(arizona);
237 if (ret != 0) {
238 regulator_disable(arizona->dcvdd);
239 return ret;
240 }
241
242 regcache_sync(arizona->regmap);
243
244 return 0;
245}
246
247static int arizona_runtime_suspend(struct device *dev)
248{
249 struct arizona *arizona = dev_get_drvdata(dev);
250
251 dev_dbg(arizona->dev, "Entering AoD mode\n");
252
253 regulator_disable(arizona->dcvdd);
254 regcache_cache_only(arizona->regmap, true);
255 regcache_mark_dirty(arizona->regmap);
256
257 return 0;
258}
259#endif
260
261const struct dev_pm_ops arizona_pm_ops = {
262 SET_RUNTIME_PM_OPS(arizona_runtime_suspend,
263 arizona_runtime_resume,
264 NULL)
265};
266EXPORT_SYMBOL_GPL(arizona_pm_ops);
267
268static struct mfd_cell early_devs[] = {
269 { .name = "arizona-ldo1" },
270};
271
272static struct mfd_cell wm5102_devs[] = {
273 { .name = "arizona-extcon" },
274 { .name = "arizona-gpio" },
275 { .name = "arizona-micsupp" },
276 { .name = "arizona-pwm" },
277 { .name = "wm5102-codec" },
278};
279
280static struct mfd_cell wm5110_devs[] = {
281 { .name = "arizona-extcon" },
282 { .name = "arizona-gpio" },
283 { .name = "arizona-micsupp" },
284 { .name = "arizona-pwm" },
285 { .name = "wm5110-codec" },
286};
287
288int __devinit arizona_dev_init(struct arizona *arizona)
289{
290 struct device *dev = arizona->dev;
291 const char *type_name;
292 unsigned int reg, val;
293 int ret, i;
294
295 dev_set_drvdata(arizona->dev, arizona);
296 mutex_init(&arizona->clk_lock);
297
298 if (dev_get_platdata(arizona->dev))
299 memcpy(&arizona->pdata, dev_get_platdata(arizona->dev),
300 sizeof(arizona->pdata));
301
302 regcache_cache_only(arizona->regmap, true);
303
304 switch (arizona->type) {
305 case WM5102:
306 case WM5110:
307 for (i = 0; i < ARRAY_SIZE(wm5102_core_supplies); i++)
308 arizona->core_supplies[i].supply
309 = wm5102_core_supplies[i];
310 arizona->num_core_supplies = ARRAY_SIZE(wm5102_core_supplies);
311 break;
312 default:
313 dev_err(arizona->dev, "Unknown device type %d\n",
314 arizona->type);
315 return -EINVAL;
316 }
317
318 ret = mfd_add_devices(arizona->dev, -1, early_devs,
319 ARRAY_SIZE(early_devs), NULL, 0);
320 if (ret != 0) {
321 dev_err(dev, "Failed to add early children: %d\n", ret);
322 return ret;
323 }
324
325 ret = devm_regulator_bulk_get(dev, arizona->num_core_supplies,
326 arizona->core_supplies);
327 if (ret != 0) {
328 dev_err(dev, "Failed to request core supplies: %d\n",
329 ret);
330 goto err_early;
331 }
332
333 arizona->dcvdd = devm_regulator_get(arizona->dev, "DCVDD");
334 if (IS_ERR(arizona->dcvdd)) {
335 ret = PTR_ERR(arizona->dcvdd);
336 dev_err(dev, "Failed to request DCVDD: %d\n", ret);
337 goto err_early;
338 }
339
340 ret = regulator_bulk_enable(arizona->num_core_supplies,
341 arizona->core_supplies);
342 if (ret != 0) {
343 dev_err(dev, "Failed to enable core supplies: %d\n",
344 ret);
345 goto err_early;
346 }
347
348 ret = regulator_enable(arizona->dcvdd);
349 if (ret != 0) {
350 dev_err(dev, "Failed to enable DCVDD: %d\n", ret);
351 goto err_enable;
352 }
353
354 if (arizona->pdata.reset) {
355 /* Start out with /RESET low to put the chip into reset */
356 ret = gpio_request_one(arizona->pdata.reset,
357 GPIOF_DIR_OUT | GPIOF_INIT_LOW,
358 "arizona /RESET");
359 if (ret != 0) {
360 dev_err(dev, "Failed to request /RESET: %d\n", ret);
361 goto err_dcvdd;
362 }
363
364 gpio_set_value_cansleep(arizona->pdata.reset, 1);
365 }
366
367 regcache_cache_only(arizona->regmap, false);
368
369 ret = regmap_read(arizona->regmap, ARIZONA_SOFTWARE_RESET, &reg);
370 if (ret != 0) {
371 dev_err(dev, "Failed to read ID register: %d\n", ret);
372 goto err_reset;
373 }
374
375 ret = regmap_read(arizona->regmap, ARIZONA_DEVICE_REVISION,
376 &arizona->rev);
377 if (ret != 0) {
378 dev_err(dev, "Failed to read revision register: %d\n", ret);
379 goto err_reset;
380 }
381 arizona->rev &= ARIZONA_DEVICE_REVISION_MASK;
382
383 switch (reg) {
384#ifdef CONFIG_MFD_WM5102
385 case 0x5102:
386 type_name = "WM5102";
387 if (arizona->type != WM5102) {
388 dev_err(arizona->dev, "WM5102 registered as %d\n",
389 arizona->type);
390 arizona->type = WM5102;
391 }
392 ret = wm5102_patch(arizona);
393 break;
394#endif
395#ifdef CONFIG_MFD_WM5110
396 case 0x5110:
397 type_name = "WM5110";
398 if (arizona->type != WM5110) {
399 dev_err(arizona->dev, "WM5110 registered as %d\n",
400 arizona->type);
401 arizona->type = WM5110;
402 }
403 ret = wm5110_patch(arizona);
404 break;
405#endif
406 default:
407 dev_err(arizona->dev, "Unknown device ID %x\n", reg);
408 goto err_reset;
409 }
410
411 dev_info(dev, "%s revision %c\n", type_name, arizona->rev + 'A');
412
413 if (ret != 0)
414 dev_err(arizona->dev, "Failed to apply patch: %d\n", ret);
415
416 /* If we have a /RESET GPIO we'll already be reset */
417 if (!arizona->pdata.reset) {
418 ret = regmap_write(arizona->regmap, ARIZONA_SOFTWARE_RESET, 0);
419 if (ret != 0) {
420 dev_err(dev, "Failed to reset device: %d\n", ret);
421 goto err_reset;
422 }
423 }
424
425 ret = arizona_wait_for_boot(arizona);
426 if (ret != 0) {
427 dev_err(arizona->dev, "Device failed initial boot: %d\n", ret);
428 goto err_reset;
429 }
430
431 for (i = 0; i < ARRAY_SIZE(arizona->pdata.gpio_defaults); i++) {
432 if (!arizona->pdata.gpio_defaults[i])
433 continue;
434
435 regmap_write(arizona->regmap, ARIZONA_GPIO1_CTRL + i,
436 arizona->pdata.gpio_defaults[i]);
437 }
438
439 pm_runtime_set_autosuspend_delay(arizona->dev, 100);
440 pm_runtime_use_autosuspend(arizona->dev);
441 pm_runtime_enable(arizona->dev);
442
443 /* Chip default */
444 if (!arizona->pdata.clk32k_src)
445 arizona->pdata.clk32k_src = ARIZONA_32KZ_MCLK2;
446
447 switch (arizona->pdata.clk32k_src) {
448 case ARIZONA_32KZ_MCLK1:
449 case ARIZONA_32KZ_MCLK2:
450 regmap_update_bits(arizona->regmap, ARIZONA_CLOCK_32K_1,
451 ARIZONA_CLK_32K_SRC_MASK,
452 arizona->pdata.clk32k_src - 1);
453 break;
454 case ARIZONA_32KZ_NONE:
455 regmap_update_bits(arizona->regmap, ARIZONA_CLOCK_32K_1,
456 ARIZONA_CLK_32K_SRC_MASK, 2);
457 break;
458 default:
459 dev_err(arizona->dev, "Invalid 32kHz clock source: %d\n",
460 arizona->pdata.clk32k_src);
461 ret = -EINVAL;
462 goto err_reset;
463 }
464
465 for (i = 0; i < ARIZONA_MAX_INPUT; i++) {
466 /* Default for both is 0 so noop with defaults */
467 val = arizona->pdata.dmic_ref[i]
468 << ARIZONA_IN1_DMIC_SUP_SHIFT;
469 val |= arizona->pdata.inmode[i] << ARIZONA_IN1_MODE_SHIFT;
470
471 regmap_update_bits(arizona->regmap,
472 ARIZONA_IN1L_CONTROL + (i * 8),
473 ARIZONA_IN1_DMIC_SUP_MASK |
474 ARIZONA_IN1_MODE_MASK, val);
475 }
476
477 for (i = 0; i < ARIZONA_MAX_OUTPUT; i++) {
478 /* Default is 0 so noop with defaults */
479 if (arizona->pdata.out_mono[i])
480 val = ARIZONA_OUT1_MONO;
481 else
482 val = 0;
483
484 regmap_update_bits(arizona->regmap,
485 ARIZONA_OUTPUT_PATH_CONFIG_1L + (i * 8),
486 ARIZONA_OUT1_MONO, val);
487 }
488
489 for (i = 0; i < ARIZONA_MAX_PDM_SPK; i++) {
490 if (arizona->pdata.spk_mute[i])
491 regmap_update_bits(arizona->regmap,
492 ARIZONA_PDM_SPK1_CTRL_1 + (i * 2),
493 ARIZONA_SPK1_MUTE_ENDIAN_MASK |
494 ARIZONA_SPK1_MUTE_SEQ1_MASK,
495 arizona->pdata.spk_mute[i]);
496
497 if (arizona->pdata.spk_fmt[i])
498 regmap_update_bits(arizona->regmap,
499 ARIZONA_PDM_SPK1_CTRL_2 + (i * 2),
500 ARIZONA_SPK1_FMT_MASK,
501 arizona->pdata.spk_fmt[i]);
502 }
503
504 /* Set up for interrupts */
505 ret = arizona_irq_init(arizona);
506 if (ret != 0)
507 goto err_reset;
508
509 arizona_request_irq(arizona, ARIZONA_IRQ_CLKGEN_ERR, "CLKGEN error",
510 arizona_clkgen_err, arizona);
511 arizona_request_irq(arizona, ARIZONA_IRQ_OVERCLOCKED, "Overclocked",
512 arizona_overclocked, arizona);
513 arizona_request_irq(arizona, ARIZONA_IRQ_UNDERCLOCKED, "Underclocked",
514 arizona_underclocked, arizona);
515
516 switch (arizona->type) {
517 case WM5102:
518 ret = mfd_add_devices(arizona->dev, -1, wm5102_devs,
519 ARRAY_SIZE(wm5102_devs), NULL, 0);
520 break;
521 case WM5110:
522 ret = mfd_add_devices(arizona->dev, -1, wm5110_devs,
523 ARRAY_SIZE(wm5102_devs), NULL, 0);
524 break;
525 }
526
527 if (ret != 0) {
528 dev_err(arizona->dev, "Failed to add subdevices: %d\n", ret);
529 goto err_irq;
530 }
531
532#ifdef CONFIG_PM_RUNTIME
533 regulator_disable(arizona->dcvdd);
534#endif
535
536 return 0;
537
538err_irq:
539 arizona_irq_exit(arizona);
540err_reset:
541 if (arizona->pdata.reset) {
542 gpio_set_value_cansleep(arizona->pdata.reset, 1);
543 gpio_free(arizona->pdata.reset);
544 }
545err_dcvdd:
546 regulator_disable(arizona->dcvdd);
547err_enable:
548 regulator_bulk_disable(arizona->num_core_supplies,
549 arizona->core_supplies);
550err_early:
551 mfd_remove_devices(dev);
552 return ret;
553}
554EXPORT_SYMBOL_GPL(arizona_dev_init);
555
556int __devexit arizona_dev_exit(struct arizona *arizona)
557{
558 mfd_remove_devices(arizona->dev);
559 arizona_free_irq(arizona, ARIZONA_IRQ_UNDERCLOCKED, arizona);
560 arizona_free_irq(arizona, ARIZONA_IRQ_OVERCLOCKED, arizona);
561 arizona_free_irq(arizona, ARIZONA_IRQ_CLKGEN_ERR, arizona);
562 pm_runtime_disable(arizona->dev);
563 arizona_irq_exit(arizona);
564 return 0;
565}
566EXPORT_SYMBOL_GPL(arizona_dev_exit);
diff --git a/drivers/mfd/arizona-i2c.c b/drivers/mfd/arizona-i2c.c
new file mode 100644
index 000000000000..570c4b438086
--- /dev/null
+++ b/drivers/mfd/arizona-i2c.c
@@ -0,0 +1,97 @@
1/*
2 * Arizona-i2c.c -- Arizona I2C bus interface
3 *
4 * Copyright 2012 Wolfson Microelectronics plc
5 *
6 * Author: Mark Brown <broonie@opensource.wolfsonmicro.com>
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License version 2 as
10 * published by the Free Software Foundation.
11 */
12
13#include <linux/err.h>
14#include <linux/i2c.h>
15#include <linux/module.h>
16#include <linux/pm_runtime.h>
17#include <linux/regmap.h>
18#include <linux/regulator/consumer.h>
19#include <linux/slab.h>
20
21#include <linux/mfd/arizona/core.h>
22
23#include "arizona.h"
24
25static __devinit int arizona_i2c_probe(struct i2c_client *i2c,
26 const struct i2c_device_id *id)
27{
28 struct arizona *arizona;
29 const struct regmap_config *regmap_config;
30 int ret;
31
32 switch (id->driver_data) {
33#ifdef CONFIG_MFD_WM5102
34 case WM5102:
35 regmap_config = &wm5102_i2c_regmap;
36 break;
37#endif
38#ifdef CONFIG_MFD_WM5110
39 case WM5110:
40 regmap_config = &wm5110_i2c_regmap;
41 break;
42#endif
43 default:
44 dev_err(&i2c->dev, "Unknown device type %ld\n",
45 id->driver_data);
46 return -EINVAL;
47 }
48
49 arizona = devm_kzalloc(&i2c->dev, sizeof(*arizona), GFP_KERNEL);
50 if (arizona == NULL)
51 return -ENOMEM;
52
53 arizona->regmap = devm_regmap_init_i2c(i2c, regmap_config);
54 if (IS_ERR(arizona->regmap)) {
55 ret = PTR_ERR(arizona->regmap);
56 dev_err(&i2c->dev, "Failed to allocate register map: %d\n",
57 ret);
58 return ret;
59 }
60
61 arizona->type = id->driver_data;
62 arizona->dev = &i2c->dev;
63 arizona->irq = i2c->irq;
64
65 return arizona_dev_init(arizona);
66}
67
68static int __devexit arizona_i2c_remove(struct i2c_client *i2c)
69{
70 struct arizona *arizona = dev_get_drvdata(&i2c->dev);
71 arizona_dev_exit(arizona);
72 return 0;
73}
74
75static const struct i2c_device_id arizona_i2c_id[] = {
76 { "wm5102", WM5102 },
77 { "wm5110", WM5110 },
78 { }
79};
80MODULE_DEVICE_TABLE(i2c, arizona_i2c_id);
81
82static struct i2c_driver arizona_i2c_driver = {
83 .driver = {
84 .name = "arizona",
85 .owner = THIS_MODULE,
86 .pm = &arizona_pm_ops,
87 },
88 .probe = arizona_i2c_probe,
89 .remove = __devexit_p(arizona_i2c_remove),
90 .id_table = arizona_i2c_id,
91};
92
93module_i2c_driver(arizona_i2c_driver);
94
95MODULE_DESCRIPTION("Arizona I2C bus interface");
96MODULE_AUTHOR("Mark Brown <broonie@opensource.wolfsonmicro.com>");
97MODULE_LICENSE("GPL");
diff --git a/drivers/mfd/arizona-irq.c b/drivers/mfd/arizona-irq.c
new file mode 100644
index 000000000000..98ac345f468e
--- /dev/null
+++ b/drivers/mfd/arizona-irq.c
@@ -0,0 +1,275 @@
1/*
2 * Arizona interrupt support
3 *
4 * Copyright 2012 Wolfson Microelectronics plc
5 *
6 * Author: Mark Brown <broonie@opensource.wolfsonmicro.com>
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License version 2 as
10 * published by the Free Software Foundation.
11 */
12
13#include <linux/delay.h>
14#include <linux/gpio.h>
15#include <linux/interrupt.h>
16#include <linux/irq.h>
17#include <linux/irqdomain.h>
18#include <linux/module.h>
19#include <linux/pm_runtime.h>
20#include <linux/regmap.h>
21#include <linux/regulator/consumer.h>
22#include <linux/slab.h>
23
24#include <linux/mfd/arizona/core.h>
25#include <linux/mfd/arizona/registers.h>
26
27#include "arizona.h"
28
29static int arizona_map_irq(struct arizona *arizona, int irq)
30{
31 int ret;
32
33 ret = regmap_irq_get_virq(arizona->aod_irq_chip, irq);
34 if (ret < 0)
35 ret = regmap_irq_get_virq(arizona->irq_chip, irq);
36
37 return ret;
38}
39
40int arizona_request_irq(struct arizona *arizona, int irq, char *name,
41 irq_handler_t handler, void *data)
42{
43 irq = arizona_map_irq(arizona, irq);
44 if (irq < 0)
45 return irq;
46
47 return request_threaded_irq(irq, NULL, handler, IRQF_ONESHOT,
48 name, data);
49}
50EXPORT_SYMBOL_GPL(arizona_request_irq);
51
52void arizona_free_irq(struct arizona *arizona, int irq, void *data)
53{
54 irq = arizona_map_irq(arizona, irq);
55 if (irq < 0)
56 return;
57
58 free_irq(irq, data);
59}
60EXPORT_SYMBOL_GPL(arizona_free_irq);
61
62int arizona_set_irq_wake(struct arizona *arizona, int irq, int on)
63{
64 irq = arizona_map_irq(arizona, irq);
65 if (irq < 0)
66 return irq;
67
68 return irq_set_irq_wake(irq, on);
69}
70EXPORT_SYMBOL_GPL(arizona_set_irq_wake);
71
72static irqreturn_t arizona_boot_done(int irq, void *data)
73{
74 struct arizona *arizona = data;
75
76 dev_dbg(arizona->dev, "Boot done\n");
77
78 return IRQ_HANDLED;
79}
80
81static irqreturn_t arizona_ctrlif_err(int irq, void *data)
82{
83 struct arizona *arizona = data;
84
85 /*
86 * For pretty much all potential sources a register cache sync
87 * won't help, we've just got a software bug somewhere.
88 */
89 dev_err(arizona->dev, "Control interface error\n");
90
91 return IRQ_HANDLED;
92}
93
94static irqreturn_t arizona_irq_thread(int irq, void *data)
95{
96 struct arizona *arizona = data;
97 int i, ret;
98
99 ret = pm_runtime_get_sync(arizona->dev);
100 if (ret < 0) {
101 dev_err(arizona->dev, "Failed to resume device: %d\n", ret);
102 return IRQ_NONE;
103 }
104
105 /* Check both domains */
106 for (i = 0; i < 2; i++)
107 handle_nested_irq(irq_find_mapping(arizona->virq, i));
108
109 pm_runtime_mark_last_busy(arizona->dev);
110 pm_runtime_put_autosuspend(arizona->dev);
111
112 return IRQ_HANDLED;
113}
114
115static void arizona_irq_enable(struct irq_data *data)
116{
117}
118
119static void arizona_irq_disable(struct irq_data *data)
120{
121}
122
123static struct irq_chip arizona_irq_chip = {
124 .name = "arizona",
125 .irq_disable = arizona_irq_disable,
126 .irq_enable = arizona_irq_enable,
127};
128
129static int arizona_irq_map(struct irq_domain *h, unsigned int virq,
130 irq_hw_number_t hw)
131{
132 struct regmap_irq_chip_data *data = h->host_data;
133
134 irq_set_chip_data(virq, data);
135 irq_set_chip_and_handler(virq, &arizona_irq_chip, handle_edge_irq);
136 irq_set_nested_thread(virq, 1);
137
138 /* ARM needs us to explicitly flag the IRQ as valid
139 * and will set them noprobe when we do so. */
140#ifdef CONFIG_ARM
141 set_irq_flags(virq, IRQF_VALID);
142#else
143 irq_set_noprobe(virq);
144#endif
145
146 return 0;
147}
148
149static struct irq_domain_ops arizona_domain_ops = {
150 .map = arizona_irq_map,
151 .xlate = irq_domain_xlate_twocell,
152};
153
154int arizona_irq_init(struct arizona *arizona)
155{
156 int flags = IRQF_ONESHOT;
157 int ret, i;
158 const struct regmap_irq_chip *aod, *irq;
159
160 switch (arizona->type) {
161#ifdef CONFIG_MFD_WM5102
162 case WM5102:
163 aod = &wm5102_aod;
164 irq = &wm5102_irq;
165 break;
166#endif
167#ifdef CONFIG_MFD_WM5110
168 case WM5110:
169 aod = &wm5110_aod;
170 irq = &wm5110_irq;
171 break;
172#endif
173 default:
174 BUG_ON("Unknown Arizona class device" == NULL);
175 return -EINVAL;
176 }
177
178 if (arizona->pdata.irq_active_high) {
179 ret = regmap_update_bits(arizona->regmap, ARIZONA_IRQ_CTRL_1,
180 ARIZONA_IRQ_POL, 0);
181 if (ret != 0) {
182 dev_err(arizona->dev, "Couldn't set IRQ polarity: %d\n",
183 ret);
184 goto err;
185 }
186
187 flags |= IRQF_TRIGGER_HIGH;
188 } else {
189 flags |= IRQF_TRIGGER_LOW;
190 }
191
192 /* Allocate a virtual IRQ domain to distribute to the regmap domains */
193 arizona->virq = irq_domain_add_linear(NULL, 2, &arizona_domain_ops,
194 arizona);
195 if (!arizona->virq) {
196 ret = -EINVAL;
197 goto err;
198 }
199
200 ret = regmap_add_irq_chip(arizona->regmap,
201 irq_create_mapping(arizona->virq, 0),
202 IRQF_ONESHOT, -1, aod,
203 &arizona->aod_irq_chip);
204 if (ret != 0) {
205 dev_err(arizona->dev, "Failed to add AOD IRQs: %d\n", ret);
206 goto err_domain;
207 }
208
209 ret = regmap_add_irq_chip(arizona->regmap,
210 irq_create_mapping(arizona->virq, 1),
211 IRQF_ONESHOT, -1, irq,
212 &arizona->irq_chip);
213 if (ret != 0) {
214 dev_err(arizona->dev, "Failed to add AOD IRQs: %d\n", ret);
215 goto err_aod;
216 }
217
218 /* Make sure the boot done IRQ is unmasked for resumes */
219 i = arizona_map_irq(arizona, ARIZONA_IRQ_BOOT_DONE);
220 ret = request_threaded_irq(i, NULL, arizona_boot_done, IRQF_ONESHOT,
221 "Boot done", arizona);
222 if (ret != 0) {
223 dev_err(arizona->dev, "Failed to request boot done %d: %d\n",
224 arizona->irq, ret);
225 goto err_boot_done;
226 }
227
228 /* Handle control interface errors in the core */
229 i = arizona_map_irq(arizona, ARIZONA_IRQ_CTRLIF_ERR);
230 ret = request_threaded_irq(i, NULL, arizona_ctrlif_err, IRQF_ONESHOT,
231 "Control interface error", arizona);
232 if (ret != 0) {
233 dev_err(arizona->dev, "Failed to request boot done %d: %d\n",
234 arizona->irq, ret);
235 goto err_ctrlif;
236 }
237
238 ret = request_threaded_irq(arizona->irq, NULL, arizona_irq_thread,
239 flags, "arizona", arizona);
240
241 if (ret != 0) {
242 dev_err(arizona->dev, "Failed to request IRQ %d: %d\n",
243 arizona->irq, ret);
244 goto err_main_irq;
245 }
246
247 return 0;
248
249err_main_irq:
250 free_irq(arizona_map_irq(arizona, ARIZONA_IRQ_CTRLIF_ERR), arizona);
251err_ctrlif:
252 free_irq(arizona_map_irq(arizona, ARIZONA_IRQ_BOOT_DONE), arizona);
253err_boot_done:
254 regmap_del_irq_chip(irq_create_mapping(arizona->virq, 1),
255 arizona->irq_chip);
256err_aod:
257 regmap_del_irq_chip(irq_create_mapping(arizona->virq, 0),
258 arizona->aod_irq_chip);
259err_domain:
260err:
261 return ret;
262}
263
264int arizona_irq_exit(struct arizona *arizona)
265{
266 free_irq(arizona_map_irq(arizona, ARIZONA_IRQ_CTRLIF_ERR), arizona);
267 free_irq(arizona_map_irq(arizona, ARIZONA_IRQ_BOOT_DONE), arizona);
268 regmap_del_irq_chip(irq_create_mapping(arizona->virq, 1),
269 arizona->irq_chip);
270 regmap_del_irq_chip(irq_create_mapping(arizona->virq, 0),
271 arizona->aod_irq_chip);
272 free_irq(arizona->irq, arizona);
273
274 return 0;
275}
diff --git a/drivers/mfd/arizona-spi.c b/drivers/mfd/arizona-spi.c
new file mode 100644
index 000000000000..df2e5a8bee28
--- /dev/null
+++ b/drivers/mfd/arizona-spi.c
@@ -0,0 +1,97 @@
1/*
2 * arizona-spi.c -- Arizona SPI bus interface
3 *
4 * Copyright 2012 Wolfson Microelectronics plc
5 *
6 * Author: Mark Brown <broonie@opensource.wolfsonmicro.com>
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License version 2 as
10 * published by the Free Software Foundation.
11 */
12
13#include <linux/err.h>
14#include <linux/module.h>
15#include <linux/pm_runtime.h>
16#include <linux/regmap.h>
17#include <linux/regulator/consumer.h>
18#include <linux/slab.h>
19#include <linux/spi/spi.h>
20
21#include <linux/mfd/arizona/core.h>
22
23#include "arizona.h"
24
25static int __devinit arizona_spi_probe(struct spi_device *spi)
26{
27 const struct spi_device_id *id = spi_get_device_id(spi);
28 struct arizona *arizona;
29 const struct regmap_config *regmap_config;
30 int ret;
31
32 switch (id->driver_data) {
33#ifdef CONFIG_MFD_WM5102
34 case WM5102:
35 regmap_config = &wm5102_spi_regmap;
36 break;
37#endif
38#ifdef CONFIG_MFD_WM5110
39 case WM5110:
40 regmap_config = &wm5110_spi_regmap;
41 break;
42#endif
43 default:
44 dev_err(&spi->dev, "Unknown device type %ld\n",
45 id->driver_data);
46 return -EINVAL;
47 }
48
49 arizona = devm_kzalloc(&spi->dev, sizeof(*arizona), GFP_KERNEL);
50 if (arizona == NULL)
51 return -ENOMEM;
52
53 arizona->regmap = devm_regmap_init_spi(spi, regmap_config);
54 if (IS_ERR(arizona->regmap)) {
55 ret = PTR_ERR(arizona->regmap);
56 dev_err(&spi->dev, "Failed to allocate register map: %d\n",
57 ret);
58 return ret;
59 }
60
61 arizona->type = id->driver_data;
62 arizona->dev = &spi->dev;
63 arizona->irq = spi->irq;
64
65 return arizona_dev_init(arizona);
66}
67
68static int __devexit arizona_spi_remove(struct spi_device *spi)
69{
70 struct arizona *arizona = dev_get_drvdata(&spi->dev);
71 arizona_dev_exit(arizona);
72 return 0;
73}
74
75static const struct spi_device_id arizona_spi_ids[] = {
76 { "wm5102", WM5102 },
77 { "wm5110", WM5110 },
78 { },
79};
80MODULE_DEVICE_TABLE(spi, arizona_spi_ids);
81
82static struct spi_driver arizona_spi_driver = {
83 .driver = {
84 .name = "arizona",
85 .owner = THIS_MODULE,
86 .pm = &arizona_pm_ops,
87 },
88 .probe = arizona_spi_probe,
89 .remove = __devexit_p(arizona_spi_remove),
90 .id_table = arizona_spi_ids,
91};
92
93module_spi_driver(arizona_spi_driver);
94
95MODULE_DESCRIPTION("Arizona SPI bus interface");
96MODULE_AUTHOR("Mark Brown <broonie@opensource.wolfsonmicro.com>");
97MODULE_LICENSE("GPL");
diff --git a/drivers/mfd/arizona.h b/drivers/mfd/arizona.h
new file mode 100644
index 000000000000..9798ae5da67b
--- /dev/null
+++ b/drivers/mfd/arizona.h
@@ -0,0 +1,40 @@
1/*
2 * wm5102.h -- WM5102 MFD internals
3 *
4 * Copyright 2012 Wolfson Microelectronics plc
5 *
6 * Author: Mark Brown <broonie@opensource.wolfsonmicro.com>
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License version 2 as
10 * published by the Free Software Foundation.
11 */
12
13#ifndef _WM5102_H
14#define _WM5102_H
15
16#include <linux/regmap.h>
17#include <linux/pm.h>
18
19struct wm_arizona;
20
21extern const struct regmap_config wm5102_i2c_regmap;
22extern const struct regmap_config wm5102_spi_regmap;
23
24extern const struct regmap_config wm5110_i2c_regmap;
25extern const struct regmap_config wm5110_spi_regmap;
26
27extern const struct dev_pm_ops arizona_pm_ops;
28
29extern const struct regmap_irq_chip wm5102_aod;
30extern const struct regmap_irq_chip wm5102_irq;
31
32extern const struct regmap_irq_chip wm5110_aod;
33extern const struct regmap_irq_chip wm5110_irq;
34
35int arizona_dev_init(struct arizona *arizona);
36int arizona_dev_exit(struct arizona *arizona);
37int arizona_irq_init(struct arizona *arizona);
38int arizona_irq_exit(struct arizona *arizona);
39
40#endif
diff --git a/drivers/mfd/da9052-core.c b/drivers/mfd/da9052-core.c
index 1f1313c90573..2544910e1fd6 100644
--- a/drivers/mfd/da9052-core.c
+++ b/drivers/mfd/da9052-core.c
@@ -772,7 +772,6 @@ EXPORT_SYMBOL_GPL(da9052_regmap_config);
772int __devinit da9052_device_init(struct da9052 *da9052, u8 chip_id) 772int __devinit da9052_device_init(struct da9052 *da9052, u8 chip_id)
773{ 773{
774 struct da9052_pdata *pdata = da9052->dev->platform_data; 774 struct da9052_pdata *pdata = da9052->dev->platform_data;
775 struct irq_desc *desc;
776 int ret; 775 int ret;
777 776
778 mutex_init(&da9052->auxadc_lock); 777 mutex_init(&da9052->auxadc_lock);
diff --git a/drivers/mfd/db8500-prcmu.c b/drivers/mfd/db8500-prcmu.c
index 50e83dc5dc49..7040a0081130 100644
--- a/drivers/mfd/db8500-prcmu.c
+++ b/drivers/mfd/db8500-prcmu.c
@@ -28,6 +28,7 @@
28#include <linux/uaccess.h> 28#include <linux/uaccess.h>
29#include <linux/mfd/core.h> 29#include <linux/mfd/core.h>
30#include <linux/mfd/dbx500-prcmu.h> 30#include <linux/mfd/dbx500-prcmu.h>
31#include <linux/mfd/abx500/ab8500.h>
31#include <linux/regulator/db8500-prcmu.h> 32#include <linux/regulator/db8500-prcmu.h>
32#include <linux/regulator/machine.h> 33#include <linux/regulator/machine.h>
33#include <asm/hardware/gic.h> 34#include <asm/hardware/gic.h>
@@ -2269,10 +2270,10 @@ int prcmu_abb_write(u8 slave, u8 reg, u8 *value, u8 size)
2269/** 2270/**
2270 * prcmu_ac_wake_req - should be called whenever ARM wants to wakeup Modem 2271 * prcmu_ac_wake_req - should be called whenever ARM wants to wakeup Modem
2271 */ 2272 */
2272void prcmu_ac_wake_req(void) 2273int prcmu_ac_wake_req(void)
2273{ 2274{
2274 u32 val; 2275 u32 val;
2275 u32 status; 2276 int ret = 0;
2276 2277
2277 mutex_lock(&mb0_transfer.ac_wake_lock); 2278 mutex_lock(&mb0_transfer.ac_wake_lock);
2278 2279
@@ -2282,39 +2283,32 @@ void prcmu_ac_wake_req(void)
2282 2283
2283 atomic_set(&ac_wake_req_state, 1); 2284 atomic_set(&ac_wake_req_state, 1);
2284 2285
2285retry: 2286 /*
2286 writel((val | PRCM_HOSTACCESS_REQ_HOSTACCESS_REQ), PRCM_HOSTACCESS_REQ); 2287 * Force Modem Wake-up before hostaccess_req ping-pong.
2288 * It prevents Modem to enter in Sleep while acking the hostaccess
2289 * request. The 31us delay has been calculated by HWI.
2290 */
2291 val |= PRCM_HOSTACCESS_REQ_WAKE_REQ;
2292 writel(val, PRCM_HOSTACCESS_REQ);
2293
2294 udelay(31);
2295
2296 val |= PRCM_HOSTACCESS_REQ_HOSTACCESS_REQ;
2297 writel(val, PRCM_HOSTACCESS_REQ);
2287 2298
2288 if (!wait_for_completion_timeout(&mb0_transfer.ac_wake_work, 2299 if (!wait_for_completion_timeout(&mb0_transfer.ac_wake_work,
2289 msecs_to_jiffies(5000))) { 2300 msecs_to_jiffies(5000))) {
2301#if defined(CONFIG_DBX500_PRCMU_DEBUG)
2302 db8500_prcmu_debug_dump(__func__, true, true);
2303#endif
2290 pr_crit("prcmu: %s timed out (5 s) waiting for a reply.\n", 2304 pr_crit("prcmu: %s timed out (5 s) waiting for a reply.\n",
2291 __func__); 2305 __func__);
2292 goto unlock_and_return; 2306 ret = -EFAULT;
2293 }
2294
2295 /*
2296 * The modem can generate an AC_WAKE_ACK, and then still go to sleep.
2297 * As a workaround, we wait, and then check that the modem is indeed
2298 * awake (in terms of the value of the PRCM_MOD_AWAKE_STATUS
2299 * register, which may not be the whole truth).
2300 */
2301 udelay(400);
2302 status = (readl(PRCM_MOD_AWAKE_STATUS) & BITS(0, 2));
2303 if (status != (PRCM_MOD_AWAKE_STATUS_PRCM_MOD_AAPD_AWAKE |
2304 PRCM_MOD_AWAKE_STATUS_PRCM_MOD_COREPD_AWAKE)) {
2305 pr_err("prcmu: %s received ack, but modem not awake (0x%X).\n",
2306 __func__, status);
2307 udelay(1200);
2308 writel(val, PRCM_HOSTACCESS_REQ);
2309 if (wait_for_completion_timeout(&mb0_transfer.ac_wake_work,
2310 msecs_to_jiffies(5000)))
2311 goto retry;
2312 pr_crit("prcmu: %s timed out (5 s) waiting for AC_SLEEP_ACK.\n",
2313 __func__);
2314 } 2307 }
2315 2308
2316unlock_and_return: 2309unlock_and_return:
2317 mutex_unlock(&mb0_transfer.ac_wake_lock); 2310 mutex_unlock(&mb0_transfer.ac_wake_lock);
2311 return ret;
2318} 2312}
2319 2313
2320/** 2314/**
@@ -2945,14 +2939,31 @@ static struct regulator_init_data db8500_regulators[DB8500_NUM_REGULATORS] = {
2945 }, 2939 },
2946}; 2940};
2947 2941
2942static struct resource ab8500_resources[] = {
2943 [0] = {
2944 .start = IRQ_DB8500_AB8500,
2945 .end = IRQ_DB8500_AB8500,
2946 .flags = IORESOURCE_IRQ
2947 }
2948};
2949
2948static struct mfd_cell db8500_prcmu_devs[] = { 2950static struct mfd_cell db8500_prcmu_devs[] = {
2949 { 2951 {
2950 .name = "db8500-prcmu-regulators", 2952 .name = "db8500-prcmu-regulators",
2953 .of_compatible = "stericsson,db8500-prcmu-regulator",
2951 .platform_data = &db8500_regulators, 2954 .platform_data = &db8500_regulators,
2952 .pdata_size = sizeof(db8500_regulators), 2955 .pdata_size = sizeof(db8500_regulators),
2953 }, 2956 },
2954 { 2957 {
2955 .name = "cpufreq-u8500", 2958 .name = "cpufreq-u8500",
2959 .of_compatible = "stericsson,cpufreq-u8500",
2960 },
2961 {
2962 .name = "ab8500-core",
2963 .of_compatible = "stericsson,ab8500",
2964 .num_resources = ARRAY_SIZE(ab8500_resources),
2965 .resources = ab8500_resources,
2966 .id = AB8500_VERSION_AB8500,
2956 }, 2967 },
2957}; 2968};
2958 2969
@@ -2962,8 +2973,9 @@ static struct mfd_cell db8500_prcmu_devs[] = {
2962 */ 2973 */
2963static int __devinit db8500_prcmu_probe(struct platform_device *pdev) 2974static int __devinit db8500_prcmu_probe(struct platform_device *pdev)
2964{ 2975{
2976 struct ab8500_platform_data *ab8500_platdata = pdev->dev.platform_data;
2965 struct device_node *np = pdev->dev.of_node; 2977 struct device_node *np = pdev->dev.of_node;
2966 int irq = 0, err = 0; 2978 int irq = 0, err = 0, i;
2967 2979
2968 if (ux500_is_svp()) 2980 if (ux500_is_svp())
2969 return -ENODEV; 2981 return -ENODEV;
@@ -2987,16 +2999,21 @@ static int __devinit db8500_prcmu_probe(struct platform_device *pdev)
2987 goto no_irq_return; 2999 goto no_irq_return;
2988 } 3000 }
2989 3001
3002 for (i = 0; i < ARRAY_SIZE(db8500_prcmu_devs); i++) {
3003 if (!strcmp(db8500_prcmu_devs[i].name, "ab8500-core")) {
3004 db8500_prcmu_devs[i].platform_data = ab8500_platdata;
3005 db8500_prcmu_devs[i].pdata_size = sizeof(struct ab8500_platform_data);
3006 }
3007 }
3008
2990 if (cpu_is_u8500v20_or_later()) 3009 if (cpu_is_u8500v20_or_later())
2991 prcmu_config_esram0_deep_sleep(ESRAM0_DEEP_SLEEP_STATE_RET); 3010 prcmu_config_esram0_deep_sleep(ESRAM0_DEEP_SLEEP_STATE_RET);
2992 3011
2993 if (!np) { 3012 err = mfd_add_devices(&pdev->dev, 0, db8500_prcmu_devs,
2994 err = mfd_add_devices(&pdev->dev, 0, db8500_prcmu_devs, 3013 ARRAY_SIZE(db8500_prcmu_devs), NULL, 0);
2995 ARRAY_SIZE(db8500_prcmu_devs), NULL, 0); 3014 if (err) {
2996 if (err) { 3015 pr_err("prcmu: Failed to add subdevices\n");
2997 pr_err("prcmu: Failed to add subdevices\n"); 3016 return err;
2998 return err;
2999 }
3000 } 3017 }
3001 3018
3002 pr_info("DB8500 PRCMU initialized\n"); 3019 pr_info("DB8500 PRCMU initialized\n");
@@ -3004,11 +3021,16 @@ static int __devinit db8500_prcmu_probe(struct platform_device *pdev)
3004no_irq_return: 3021no_irq_return:
3005 return err; 3022 return err;
3006} 3023}
3024static const struct of_device_id db8500_prcmu_match[] = {
3025 { .compatible = "stericsson,db8500-prcmu"},
3026 { },
3027};
3007 3028
3008static struct platform_driver db8500_prcmu_driver = { 3029static struct platform_driver db8500_prcmu_driver = {
3009 .driver = { 3030 .driver = {
3010 .name = "db8500-prcmu", 3031 .name = "db8500-prcmu",
3011 .owner = THIS_MODULE, 3032 .owner = THIS_MODULE,
3033 .of_match_table = db8500_prcmu_match,
3012 }, 3034 },
3013 .probe = db8500_prcmu_probe, 3035 .probe = db8500_prcmu_probe,
3014}; 3036};
@@ -3018,7 +3040,7 @@ static int __init db8500_prcmu_init(void)
3018 return platform_driver_register(&db8500_prcmu_driver); 3040 return platform_driver_register(&db8500_prcmu_driver);
3019} 3041}
3020 3042
3021arch_initcall(db8500_prcmu_init); 3043core_initcall(db8500_prcmu_init);
3022 3044
3023MODULE_AUTHOR("Mattias Nilsson <mattias.i.nilsson@stericsson.com>"); 3045MODULE_AUTHOR("Mattias Nilsson <mattias.i.nilsson@stericsson.com>");
3024MODULE_DESCRIPTION("DB8500 PRCM Unit driver"); 3046MODULE_DESCRIPTION("DB8500 PRCM Unit driver");
diff --git a/drivers/mfd/dbx500-prcmu-regs.h b/drivers/mfd/dbx500-prcmu-regs.h
index 3a0bf91d7780..23108a6e3167 100644
--- a/drivers/mfd/dbx500-prcmu-regs.h
+++ b/drivers/mfd/dbx500-prcmu-regs.h
@@ -106,6 +106,7 @@
106 106
107#define PRCM_HOSTACCESS_REQ (_PRCMU_BASE + 0x334) 107#define PRCM_HOSTACCESS_REQ (_PRCMU_BASE + 0x334)
108#define PRCM_HOSTACCESS_REQ_HOSTACCESS_REQ 0x1 108#define PRCM_HOSTACCESS_REQ_HOSTACCESS_REQ 0x1
109#define PRCM_HOSTACCESS_REQ_WAKE_REQ BIT(16)
109#define ARM_WAKEUP_MODEM 0x1 110#define ARM_WAKEUP_MODEM 0x1
110 111
111#define PRCM_ARM_IT1_CLR (_PRCMU_BASE + 0x48C) 112#define PRCM_ARM_IT1_CLR (_PRCMU_BASE + 0x48C)
diff --git a/drivers/mfd/max77686-irq.c b/drivers/mfd/max77686-irq.c
new file mode 100644
index 000000000000..cdc3280e2ec7
--- /dev/null
+++ b/drivers/mfd/max77686-irq.c
@@ -0,0 +1,319 @@
1/*
2 * max77686-irq.c - Interrupt controller support for MAX77686
3 *
4 * Copyright (C) 2012 Samsung Electronics Co.Ltd
5 * Chiwoong Byun <woong.byun@samsung.com>
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 *
21 * This driver is based on max8997-irq.c
22 */
23
24#include <linux/err.h>
25#include <linux/irq.h>
26#include <linux/interrupt.h>
27#include <linux/gpio.h>
28#include <linux/mfd/max77686.h>
29#include <linux/mfd/max77686-private.h>
30#include <linux/irqdomain.h>
31#include <linux/regmap.h>
32
33enum {
34 MAX77686_DEBUG_IRQ_INFO = 1 << 0,
35 MAX77686_DEBUG_IRQ_MASK = 1 << 1,
36 MAX77686_DEBUG_IRQ_INT = 1 << 2,
37};
38
39static int debug_mask = 0;
40module_param(debug_mask, int, 0);
41MODULE_PARM_DESC(debug_mask, "Set debug_mask : 0x0=off 0x1=IRQ_INFO 0x2=IRQ_MASK 0x4=IRQ_INI)");
42
43static const u8 max77686_mask_reg[] = {
44 [PMIC_INT1] = MAX77686_REG_INT1MSK,
45 [PMIC_INT2] = MAX77686_REG_INT2MSK,
46 [RTC_INT] = MAX77686_RTC_INTM,
47};
48
49static struct regmap *max77686_get_regmap(struct max77686_dev *max77686,
50 enum max77686_irq_source src)
51{
52 switch (src) {
53 case PMIC_INT1 ... PMIC_INT2:
54 return max77686->regmap;
55 case RTC_INT:
56 return max77686->rtc_regmap;
57 default:
58 return ERR_PTR(-EINVAL);
59 }
60}
61
62struct max77686_irq_data {
63 int mask;
64 enum max77686_irq_source group;
65};
66
67#define DECLARE_IRQ(idx, _group, _mask) \
68 [(idx)] = { .group = (_group), .mask = (_mask) }
69static const struct max77686_irq_data max77686_irqs[] = {
70 DECLARE_IRQ(MAX77686_PMICIRQ_PWRONF, PMIC_INT1, 1 << 0),
71 DECLARE_IRQ(MAX77686_PMICIRQ_PWRONR, PMIC_INT1, 1 << 1),
72 DECLARE_IRQ(MAX77686_PMICIRQ_JIGONBF, PMIC_INT1, 1 << 2),
73 DECLARE_IRQ(MAX77686_PMICIRQ_JIGONBR, PMIC_INT1, 1 << 3),
74 DECLARE_IRQ(MAX77686_PMICIRQ_ACOKBF, PMIC_INT1, 1 << 4),
75 DECLARE_IRQ(MAX77686_PMICIRQ_ACOKBR, PMIC_INT1, 1 << 5),
76 DECLARE_IRQ(MAX77686_PMICIRQ_ONKEY1S, PMIC_INT1, 1 << 6),
77 DECLARE_IRQ(MAX77686_PMICIRQ_MRSTB, PMIC_INT1, 1 << 7),
78 DECLARE_IRQ(MAX77686_PMICIRQ_140C, PMIC_INT2, 1 << 0),
79 DECLARE_IRQ(MAX77686_PMICIRQ_120C, PMIC_INT2, 1 << 1),
80 DECLARE_IRQ(MAX77686_RTCIRQ_RTC60S, RTC_INT, 1 << 0),
81 DECLARE_IRQ(MAX77686_RTCIRQ_RTCA1, RTC_INT, 1 << 1),
82 DECLARE_IRQ(MAX77686_RTCIRQ_RTCA2, RTC_INT, 1 << 2),
83 DECLARE_IRQ(MAX77686_RTCIRQ_SMPL, RTC_INT, 1 << 3),
84 DECLARE_IRQ(MAX77686_RTCIRQ_RTC1S, RTC_INT, 1 << 4),
85 DECLARE_IRQ(MAX77686_RTCIRQ_WTSR, RTC_INT, 1 << 5),
86};
87
88static void max77686_irq_lock(struct irq_data *data)
89{
90 struct max77686_dev *max77686 = irq_get_chip_data(data->irq);
91
92 if (debug_mask & MAX77686_DEBUG_IRQ_MASK)
93 pr_info("%s\n", __func__);
94
95 mutex_lock(&max77686->irqlock);
96}
97
98static void max77686_irq_sync_unlock(struct irq_data *data)
99{
100 struct max77686_dev *max77686 = irq_get_chip_data(data->irq);
101 int i;
102
103 for (i = 0; i < MAX77686_IRQ_GROUP_NR; i++) {
104 u8 mask_reg = max77686_mask_reg[i];
105 struct regmap *map = max77686_get_regmap(max77686, i);
106
107 if (debug_mask & MAX77686_DEBUG_IRQ_MASK)
108 pr_debug("%s: mask_reg[%d]=0x%x, cur=0x%x\n",
109 __func__, i, mask_reg, max77686->irq_masks_cur[i]);
110
111 if (mask_reg == MAX77686_REG_INVALID ||
112 IS_ERR_OR_NULL(map))
113 continue;
114
115 max77686->irq_masks_cache[i] = max77686->irq_masks_cur[i];
116
117 regmap_write(map, max77686_mask_reg[i],
118 max77686->irq_masks_cur[i]);
119 }
120
121 mutex_unlock(&max77686->irqlock);
122}
123
124static const inline struct max77686_irq_data *to_max77686_irq(int irq)
125{
126 struct irq_data *data = irq_get_irq_data(irq);
127 return &max77686_irqs[data->hwirq];
128}
129
130static void max77686_irq_mask(struct irq_data *data)
131{
132 struct max77686_dev *max77686 = irq_get_chip_data(data->irq);
133 const struct max77686_irq_data *irq_data = to_max77686_irq(data->irq);
134
135 max77686->irq_masks_cur[irq_data->group] |= irq_data->mask;
136
137 if (debug_mask & MAX77686_DEBUG_IRQ_MASK)
138 pr_info("%s: group=%d, cur=0x%x\n",
139 __func__, irq_data->group,
140 max77686->irq_masks_cur[irq_data->group]);
141}
142
143static void max77686_irq_unmask(struct irq_data *data)
144{
145 struct max77686_dev *max77686 = irq_get_chip_data(data->irq);
146 const struct max77686_irq_data *irq_data = to_max77686_irq(data->irq);
147
148 max77686->irq_masks_cur[irq_data->group] &= ~irq_data->mask;
149
150 if (debug_mask & MAX77686_DEBUG_IRQ_MASK)
151 pr_info("%s: group=%d, cur=0x%x\n",
152 __func__, irq_data->group,
153 max77686->irq_masks_cur[irq_data->group]);
154}
155
156static struct irq_chip max77686_irq_chip = {
157 .name = "max77686",
158 .irq_bus_lock = max77686_irq_lock,
159 .irq_bus_sync_unlock = max77686_irq_sync_unlock,
160 .irq_mask = max77686_irq_mask,
161 .irq_unmask = max77686_irq_unmask,
162};
163
164static irqreturn_t max77686_irq_thread(int irq, void *data)
165{
166 struct max77686_dev *max77686 = data;
167 unsigned int irq_reg[MAX77686_IRQ_GROUP_NR] = {};
168 unsigned int irq_src;
169 int ret;
170 int i, cur_irq;
171
172 ret = regmap_read(max77686->regmap, MAX77686_REG_INTSRC, &irq_src);
173 if (ret < 0) {
174 dev_err(max77686->dev, "Failed to read interrupt source: %d\n",
175 ret);
176 return IRQ_NONE;
177 }
178
179 if (debug_mask & MAX77686_DEBUG_IRQ_INT)
180 pr_info("%s: irq_src=0x%x\n", __func__, irq_src);
181
182 if (irq_src == MAX77686_IRQSRC_PMIC) {
183 ret = regmap_bulk_read(max77686->regmap,
184 MAX77686_REG_INT1, irq_reg, 2);
185 if (ret < 0) {
186 dev_err(max77686->dev, "Failed to read interrupt source: %d\n",
187 ret);
188 return IRQ_NONE;
189 }
190
191 if (debug_mask & MAX77686_DEBUG_IRQ_INT)
192 pr_info("%s: int1=0x%x, int2=0x%x\n", __func__,
193 irq_reg[PMIC_INT1], irq_reg[PMIC_INT2]);
194 }
195
196 if (irq_src & MAX77686_IRQSRC_RTC) {
197 ret = regmap_read(max77686->rtc_regmap,
198 MAX77686_RTC_INT, &irq_reg[RTC_INT]);
199 if (ret < 0) {
200 dev_err(max77686->dev, "Failed to read interrupt source: %d\n",
201 ret);
202 return IRQ_NONE;
203 }
204
205 if (debug_mask & MAX77686_DEBUG_IRQ_INT)
206 pr_info("%s: rtc int=0x%x\n", __func__,
207 irq_reg[RTC_INT]);
208
209 }
210
211 for (i = 0; i < MAX77686_IRQ_GROUP_NR; i++)
212 irq_reg[i] &= ~max77686->irq_masks_cur[i];
213
214 for (i = 0; i < MAX77686_IRQ_NR; i++) {
215 if (irq_reg[max77686_irqs[i].group] & max77686_irqs[i].mask) {
216 cur_irq = irq_find_mapping(max77686->irq_domain, i);
217 if (cur_irq)
218 handle_nested_irq(cur_irq);
219 }
220 }
221
222 return IRQ_HANDLED;
223}
224
225static int max77686_irq_domain_map(struct irq_domain *d, unsigned int irq,
226 irq_hw_number_t hw)
227{
228 struct max77686_dev *max77686 = d->host_data;
229
230 irq_set_chip_data(irq, max77686);
231 irq_set_chip_and_handler(irq, &max77686_irq_chip, handle_edge_irq);
232 irq_set_nested_thread(irq, 1);
233#ifdef CONFIG_ARM
234 set_irq_flags(irq, IRQF_VALID);
235#else
236 irq_set_noprobe(irq);
237#endif
238 return 0;
239}
240
241static struct irq_domain_ops max77686_irq_domain_ops = {
242 .map = max77686_irq_domain_map,
243};
244
245int max77686_irq_init(struct max77686_dev *max77686)
246{
247 struct irq_domain *domain;
248 int i;
249 int ret;
250 int val;
251 struct regmap *map;
252
253 mutex_init(&max77686->irqlock);
254
255 if (max77686->irq_gpio && !max77686->irq) {
256 max77686->irq = gpio_to_irq(max77686->irq_gpio);
257
258 if (debug_mask & MAX77686_DEBUG_IRQ_INT) {
259 ret = gpio_request(max77686->irq_gpio, "pmic_irq");
260 if (ret < 0) {
261 dev_err(max77686->dev,
262 "Failed to request gpio %d with ret:"
263 "%d\n", max77686->irq_gpio, ret);
264 return IRQ_NONE;
265 }
266
267 gpio_direction_input(max77686->irq_gpio);
268 val = gpio_get_value(max77686->irq_gpio);
269 gpio_free(max77686->irq_gpio);
270 pr_info("%s: gpio_irq=%x\n", __func__, val);
271 }
272 }
273
274 if (!max77686->irq) {
275 dev_err(max77686->dev, "irq is not specified\n");
276 return -ENODEV;
277 }
278
279 /* Mask individual interrupt sources */
280 for (i = 0; i < MAX77686_IRQ_GROUP_NR; i++) {
281 max77686->irq_masks_cur[i] = 0xff;
282 max77686->irq_masks_cache[i] = 0xff;
283 map = max77686_get_regmap(max77686, i);
284
285 if (IS_ERR_OR_NULL(map))
286 continue;
287 if (max77686_mask_reg[i] == MAX77686_REG_INVALID)
288 continue;
289
290 regmap_write(map, max77686_mask_reg[i], 0xff);
291 }
292 domain = irq_domain_add_linear(NULL, MAX77686_IRQ_NR,
293 &max77686_irq_domain_ops, max77686);
294 if (!domain) {
295 dev_err(max77686->dev, "could not create irq domain\n");
296 return -ENODEV;
297 }
298 max77686->irq_domain = domain;
299
300 ret = request_threaded_irq(max77686->irq, NULL, max77686_irq_thread,
301 IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
302 "max77686-irq", max77686);
303
304 if (ret)
305 dev_err(max77686->dev, "Failed to request IRQ %d: %d\n",
306 max77686->irq, ret);
307
308
309 if (debug_mask & MAX77686_DEBUG_IRQ_INFO)
310 pr_info("%s-\n", __func__);
311
312 return 0;
313}
314
315void max77686_irq_exit(struct max77686_dev *max77686)
316{
317 if (max77686->irq)
318 free_irq(max77686->irq, max77686);
319}
diff --git a/drivers/mfd/max77686.c b/drivers/mfd/max77686.c
new file mode 100644
index 000000000000..c03e12b51924
--- /dev/null
+++ b/drivers/mfd/max77686.c
@@ -0,0 +1,187 @@
1/*
2 * max77686.c - mfd core driver for the Maxim 77686
3 *
4 * Copyright (C) 2012 Samsung Electronics
5 * Chiwoong Byun <woong.byun@smasung.com>
6 * Jonghwa Lee <jonghwa3.lee@samsung.com>
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21 *
22 * This driver is based on max8997.c
23 */
24
25#include <linux/export.h>
26#include <linux/slab.h>
27#include <linux/i2c.h>
28#include <linux/pm_runtime.h>
29#include <linux/module.h>
30#include <linux/mfd/core.h>
31#include <linux/mfd/max77686.h>
32#include <linux/mfd/max77686-private.h>
33#include <linux/err.h>
34
35#define I2C_ADDR_RTC (0x0C >> 1)
36
37static struct mfd_cell max77686_devs[] = {
38 { .name = "max77686-pmic", },
39 { .name = "max77686-rtc", },
40};
41
42static struct regmap_config max77686_regmap_config = {
43 .reg_bits = 8,
44 .val_bits = 8,
45};
46
47#ifdef CONFIG_OF
48static struct of_device_id __devinitdata max77686_pmic_dt_match[] = {
49 {.compatible = "maxim,max77686", .data = 0},
50 {},
51};
52
53static struct max77686_platform_data *max77686_i2c_parse_dt_pdata(struct device
54 *dev)
55{
56 struct max77686_platform_data *pd;
57
58 pd = devm_kzalloc(dev, sizeof(*pd), GFP_KERNEL);
59 if (!pd) {
60 dev_err(dev, "could not allocate memory for pdata\n");
61 return NULL;
62 }
63
64 dev->platform_data = pd;
65 return pd;
66}
67#else
68static struct max77686_platform_data *max77686_i2c_parse_dt_pdata(struct device
69 *dev)
70{
71 return 0;
72}
73#endif
74
75static int max77686_i2c_probe(struct i2c_client *i2c,
76 const struct i2c_device_id *id)
77{
78 struct max77686_dev *max77686 = NULL;
79 struct max77686_platform_data *pdata = i2c->dev.platform_data;
80 unsigned int data;
81 int ret = 0;
82
83 if (i2c->dev.of_node)
84 pdata = max77686_i2c_parse_dt_pdata(&i2c->dev);
85
86 if (!pdata) {
87 ret = -EIO;
88 dev_err(&i2c->dev, "No platform data found.\n");
89 goto err;
90 }
91
92 max77686 = kzalloc(sizeof(struct max77686_dev), GFP_KERNEL);
93 if (max77686 == NULL)
94 return -ENOMEM;
95
96 max77686->regmap = regmap_init_i2c(i2c, &max77686_regmap_config);
97 if (IS_ERR(max77686->regmap)) {
98 ret = PTR_ERR(max77686->regmap);
99 dev_err(max77686->dev, "Failed to allocate register map: %d\n",
100 ret);
101 kfree(max77686);
102 return ret;
103 }
104
105 i2c_set_clientdata(i2c, max77686);
106 max77686->dev = &i2c->dev;
107 max77686->i2c = i2c;
108 max77686->type = id->driver_data;
109
110 max77686->wakeup = pdata->wakeup;
111 max77686->irq_gpio = pdata->irq_gpio;
112 max77686->irq = i2c->irq;
113
114 if (regmap_read(max77686->regmap,
115 MAX77686_REG_DEVICE_ID, &data) < 0) {
116 dev_err(max77686->dev,
117 "device not found on this channel (this is not an error)\n");
118 ret = -ENODEV;
119 goto err;
120 } else
121 dev_info(max77686->dev, "device found\n");
122
123 max77686->rtc = i2c_new_dummy(i2c->adapter, I2C_ADDR_RTC);
124 i2c_set_clientdata(max77686->rtc, max77686);
125
126 max77686_irq_init(max77686);
127
128 ret = mfd_add_devices(max77686->dev, -1, max77686_devs,
129 ARRAY_SIZE(max77686_devs), NULL, 0);
130
131 if (ret < 0)
132 goto err_mfd;
133
134 return ret;
135
136err_mfd:
137 mfd_remove_devices(max77686->dev);
138 i2c_unregister_device(max77686->rtc);
139err:
140 kfree(max77686);
141 return ret;
142}
143
144static int max77686_i2c_remove(struct i2c_client *i2c)
145{
146 struct max77686_dev *max77686 = i2c_get_clientdata(i2c);
147
148 mfd_remove_devices(max77686->dev);
149 i2c_unregister_device(max77686->rtc);
150 kfree(max77686);
151
152 return 0;
153}
154
155static const struct i2c_device_id max77686_i2c_id[] = {
156 { "max77686", TYPE_MAX77686 },
157 { }
158};
159MODULE_DEVICE_TABLE(i2c, max77686_i2c_id);
160
161static struct i2c_driver max77686_i2c_driver = {
162 .driver = {
163 .name = "max77686",
164 .owner = THIS_MODULE,
165 .of_match_table = of_match_ptr(max77686_pmic_dt_match),
166 },
167 .probe = max77686_i2c_probe,
168 .remove = max77686_i2c_remove,
169 .id_table = max77686_i2c_id,
170};
171
172static int __init max77686_i2c_init(void)
173{
174 return i2c_add_driver(&max77686_i2c_driver);
175}
176/* init early so consumer devices can complete system boot */
177subsys_initcall(max77686_i2c_init);
178
179static void __exit max77686_i2c_exit(void)
180{
181 i2c_del_driver(&max77686_i2c_driver);
182}
183module_exit(max77686_i2c_exit);
184
185MODULE_DESCRIPTION("MAXIM 77686 multi-function core driver");
186MODULE_AUTHOR("Chiwoong Byun <woong.byun@samsung.com>");
187MODULE_LICENSE("GPL");
diff --git a/drivers/mfd/max77693.c b/drivers/mfd/max77693.c
index e9e4278722f3..a1811cb50ec7 100644
--- a/drivers/mfd/max77693.c
+++ b/drivers/mfd/max77693.c
@@ -138,8 +138,6 @@ static int max77693_i2c_probe(struct i2c_client *i2c,
138 138
139 max77693->wakeup = pdata->wakeup; 139 max77693->wakeup = pdata->wakeup;
140 140
141 mutex_init(&max77693->iolock);
142
143 if (max77693_read_reg(max77693->regmap, 141 if (max77693_read_reg(max77693->regmap,
144 MAX77693_PMIC_REG_PMIC_ID2, &reg_data) < 0) { 142 MAX77693_PMIC_REG_PMIC_ID2, &reg_data) < 0) {
145 dev_err(max77693->dev, "device not found on this channel\n"); 143 dev_err(max77693->dev, "device not found on this channel\n");
@@ -156,7 +154,7 @@ static int max77693_i2c_probe(struct i2c_client *i2c,
156 154
157 ret = max77693_irq_init(max77693); 155 ret = max77693_irq_init(max77693);
158 if (ret < 0) 156 if (ret < 0)
159 goto err_mfd; 157 goto err_irq;
160 158
161 pm_runtime_set_active(max77693->dev); 159 pm_runtime_set_active(max77693->dev);
162 160
@@ -170,11 +168,11 @@ static int max77693_i2c_probe(struct i2c_client *i2c,
170 return ret; 168 return ret;
171 169
172err_mfd: 170err_mfd:
171 max77693_irq_exit(max77693);
172err_irq:
173 i2c_unregister_device(max77693->muic); 173 i2c_unregister_device(max77693->muic);
174 i2c_unregister_device(max77693->haptic); 174 i2c_unregister_device(max77693->haptic);
175err_regmap: 175err_regmap:
176 kfree(max77693);
177
178 return ret; 176 return ret;
179} 177}
180 178
@@ -183,6 +181,7 @@ static int max77693_i2c_remove(struct i2c_client *i2c)
183 struct max77693_dev *max77693 = i2c_get_clientdata(i2c); 181 struct max77693_dev *max77693 = i2c_get_clientdata(i2c);
184 182
185 mfd_remove_devices(max77693->dev); 183 mfd_remove_devices(max77693->dev);
184 max77693_irq_exit(max77693);
186 i2c_unregister_device(max77693->muic); 185 i2c_unregister_device(max77693->muic);
187 i2c_unregister_device(max77693->haptic); 186 i2c_unregister_device(max77693->haptic);
188 187
@@ -215,7 +214,7 @@ static int max77693_resume(struct device *dev)
215 return max77693_irq_resume(max77693); 214 return max77693_irq_resume(max77693);
216} 215}
217 216
218const struct dev_pm_ops max77693_pm = { 217static const struct dev_pm_ops max77693_pm = {
219 .suspend = max77693_suspend, 218 .suspend = max77693_suspend,
220 .resume = max77693_resume, 219 .resume = max77693_resume,
221}; 220};
diff --git a/drivers/mfd/max8925-core.c b/drivers/mfd/max8925-core.c
index ca881efedf75..825a7f06d9ba 100644
--- a/drivers/mfd/max8925-core.c
+++ b/drivers/mfd/max8925-core.c
@@ -75,9 +75,9 @@ static struct mfd_cell power_devs[] = {
75static struct resource rtc_resources[] = { 75static struct resource rtc_resources[] = {
76 { 76 {
77 .name = "max8925-rtc", 77 .name = "max8925-rtc",
78 .start = MAX8925_RTC_IRQ, 78 .start = MAX8925_IRQ_RTC_ALARM0,
79 .end = MAX8925_RTC_IRQ_MASK, 79 .end = MAX8925_IRQ_RTC_ALARM0,
80 .flags = IORESOURCE_IO, 80 .flags = IORESOURCE_IRQ,
81 }, 81 },
82}; 82};
83 83
@@ -598,7 +598,7 @@ int __devinit max8925_device_init(struct max8925_chip *chip,
598 598
599 ret = mfd_add_devices(chip->dev, 0, &rtc_devs[0], 599 ret = mfd_add_devices(chip->dev, 0, &rtc_devs[0],
600 ARRAY_SIZE(rtc_devs), 600 ARRAY_SIZE(rtc_devs),
601 &rtc_resources[0], 0); 601 &rtc_resources[0], chip->irq_base);
602 if (ret < 0) { 602 if (ret < 0) {
603 dev_err(chip->dev, "Failed to add rtc subdev\n"); 603 dev_err(chip->dev, "Failed to add rtc subdev\n");
604 goto out; 604 goto out;
diff --git a/drivers/mfd/max8997-irq.c b/drivers/mfd/max8997-irq.c
index 09274cf7c33b..43fa61413e93 100644
--- a/drivers/mfd/max8997-irq.c
+++ b/drivers/mfd/max8997-irq.c
@@ -142,7 +142,8 @@ static void max8997_irq_sync_unlock(struct irq_data *data)
142static const inline struct max8997_irq_data * 142static const inline struct max8997_irq_data *
143irq_to_max8997_irq(struct max8997_dev *max8997, int irq) 143irq_to_max8997_irq(struct max8997_dev *max8997, int irq)
144{ 144{
145 return &max8997_irqs[irq - max8997->irq_base]; 145 struct irq_data *data = irq_get_irq_data(irq);
146 return &max8997_irqs[data->hwirq];
146} 147}
147 148
148static void max8997_irq_mask(struct irq_data *data) 149static void max8997_irq_mask(struct irq_data *data)
@@ -182,7 +183,7 @@ static irqreturn_t max8997_irq_thread(int irq, void *data)
182 u8 irq_reg[MAX8997_IRQ_GROUP_NR] = {}; 183 u8 irq_reg[MAX8997_IRQ_GROUP_NR] = {};
183 u8 irq_src; 184 u8 irq_src;
184 int ret; 185 int ret;
185 int i; 186 int i, cur_irq;
186 187
187 ret = max8997_read_reg(max8997->i2c, MAX8997_REG_INTSRC, &irq_src); 188 ret = max8997_read_reg(max8997->i2c, MAX8997_REG_INTSRC, &irq_src);
188 if (ret < 0) { 189 if (ret < 0) {
@@ -269,8 +270,11 @@ static irqreturn_t max8997_irq_thread(int irq, void *data)
269 270
270 /* Report */ 271 /* Report */
271 for (i = 0; i < MAX8997_IRQ_NR; i++) { 272 for (i = 0; i < MAX8997_IRQ_NR; i++) {
272 if (irq_reg[max8997_irqs[i].group] & max8997_irqs[i].mask) 273 if (irq_reg[max8997_irqs[i].group] & max8997_irqs[i].mask) {
273 handle_nested_irq(max8997->irq_base + i); 274 cur_irq = irq_find_mapping(max8997->irq_domain, i);
275 if (cur_irq)
276 handle_nested_irq(cur_irq);
277 }
274 } 278 }
275 279
276 return IRQ_HANDLED; 280 return IRQ_HANDLED;
@@ -278,26 +282,40 @@ static irqreturn_t max8997_irq_thread(int irq, void *data)
278 282
279int max8997_irq_resume(struct max8997_dev *max8997) 283int max8997_irq_resume(struct max8997_dev *max8997)
280{ 284{
281 if (max8997->irq && max8997->irq_base) 285 if (max8997->irq && max8997->irq_domain)
282 max8997_irq_thread(max8997->irq_base, max8997); 286 max8997_irq_thread(0, max8997);
287 return 0;
288}
289
290static int max8997_irq_domain_map(struct irq_domain *d, unsigned int irq,
291 irq_hw_number_t hw)
292{
293 struct max8997_dev *max8997 = d->host_data;
294
295 irq_set_chip_data(irq, max8997);
296 irq_set_chip_and_handler(irq, &max8997_irq_chip, handle_edge_irq);
297 irq_set_nested_thread(irq, 1);
298#ifdef CONFIG_ARM
299 set_irq_flags(irq, IRQF_VALID);
300#else
301 irq_set_noprobe(irq);
302#endif
283 return 0; 303 return 0;
284} 304}
285 305
306static struct irq_domain_ops max8997_irq_domain_ops = {
307 .map = max8997_irq_domain_map,
308};
309
286int max8997_irq_init(struct max8997_dev *max8997) 310int max8997_irq_init(struct max8997_dev *max8997)
287{ 311{
312 struct irq_domain *domain;
288 int i; 313 int i;
289 int cur_irq;
290 int ret; 314 int ret;
291 u8 val; 315 u8 val;
292 316
293 if (!max8997->irq) { 317 if (!max8997->irq) {
294 dev_warn(max8997->dev, "No interrupt specified.\n"); 318 dev_warn(max8997->dev, "No interrupt specified.\n");
295 max8997->irq_base = 0;
296 return 0;
297 }
298
299 if (!max8997->irq_base) {
300 dev_err(max8997->dev, "No interrupt base specified.\n");
301 return 0; 319 return 0;
302 } 320 }
303 321
@@ -327,19 +345,13 @@ int max8997_irq_init(struct max8997_dev *max8997)
327 true : false; 345 true : false;
328 } 346 }
329 347
330 /* Register with genirq */ 348 domain = irq_domain_add_linear(NULL, MAX8997_IRQ_NR,
331 for (i = 0; i < MAX8997_IRQ_NR; i++) { 349 &max8997_irq_domain_ops, max8997);
332 cur_irq = i + max8997->irq_base; 350 if (!domain) {
333 irq_set_chip_data(cur_irq, max8997); 351 dev_err(max8997->dev, "could not create irq domain\n");
334 irq_set_chip_and_handler(cur_irq, &max8997_irq_chip, 352 return -ENODEV;
335 handle_edge_irq);
336 irq_set_nested_thread(cur_irq, 1);
337#ifdef CONFIG_ARM
338 set_irq_flags(cur_irq, IRQF_VALID);
339#else
340 irq_set_noprobe(cur_irq);
341#endif
342 } 353 }
354 max8997->irq_domain = domain;
343 355
344 ret = request_threaded_irq(max8997->irq, NULL, max8997_irq_thread, 356 ret = request_threaded_irq(max8997->irq, NULL, max8997_irq_thread,
345 IRQF_TRIGGER_FALLING | IRQF_ONESHOT, 357 IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
diff --git a/drivers/mfd/max8997.c b/drivers/mfd/max8997.c
index cb83a7ab53e7..10b629c245b6 100644
--- a/drivers/mfd/max8997.c
+++ b/drivers/mfd/max8997.c
@@ -143,7 +143,6 @@ static int max8997_i2c_probe(struct i2c_client *i2c,
143 if (!pdata) 143 if (!pdata)
144 goto err; 144 goto err;
145 145
146 max8997->irq_base = pdata->irq_base;
147 max8997->ono = pdata->ono; 146 max8997->ono = pdata->ono;
148 147
149 mutex_init(&max8997->iolock); 148 mutex_init(&max8997->iolock);
@@ -206,7 +205,7 @@ static const struct i2c_device_id max8997_i2c_id[] = {
206}; 205};
207MODULE_DEVICE_TABLE(i2c, max8998_i2c_id); 206MODULE_DEVICE_TABLE(i2c, max8998_i2c_id);
208 207
209u8 max8997_dumpaddr_pmic[] = { 208static u8 max8997_dumpaddr_pmic[] = {
210 MAX8997_REG_INT1MSK, 209 MAX8997_REG_INT1MSK,
211 MAX8997_REG_INT2MSK, 210 MAX8997_REG_INT2MSK,
212 MAX8997_REG_INT3MSK, 211 MAX8997_REG_INT3MSK,
@@ -331,7 +330,7 @@ u8 max8997_dumpaddr_pmic[] = {
331 MAX8997_REG_DVSOKTIMER5, 330 MAX8997_REG_DVSOKTIMER5,
332}; 331};
333 332
334u8 max8997_dumpaddr_muic[] = { 333static u8 max8997_dumpaddr_muic[] = {
335 MAX8997_MUIC_REG_INTMASK1, 334 MAX8997_MUIC_REG_INTMASK1,
336 MAX8997_MUIC_REG_INTMASK2, 335 MAX8997_MUIC_REG_INTMASK2,
337 MAX8997_MUIC_REG_INTMASK3, 336 MAX8997_MUIC_REG_INTMASK3,
@@ -341,7 +340,7 @@ u8 max8997_dumpaddr_muic[] = {
341 MAX8997_MUIC_REG_CONTROL3, 340 MAX8997_MUIC_REG_CONTROL3,
342}; 341};
343 342
344u8 max8997_dumpaddr_haptic[] = { 343static u8 max8997_dumpaddr_haptic[] = {
345 MAX8997_HAPTIC_REG_CONF1, 344 MAX8997_HAPTIC_REG_CONF1,
346 MAX8997_HAPTIC_REG_CONF2, 345 MAX8997_HAPTIC_REG_CONF2,
347 MAX8997_HAPTIC_REG_DRVCONF, 346 MAX8997_HAPTIC_REG_DRVCONF,
@@ -423,7 +422,7 @@ static int max8997_resume(struct device *dev)
423 return max8997_irq_resume(max8997); 422 return max8997_irq_resume(max8997);
424} 423}
425 424
426const struct dev_pm_ops max8997_pm = { 425static const struct dev_pm_ops max8997_pm = {
427 .suspend = max8997_suspend, 426 .suspend = max8997_suspend,
428 .resume = max8997_resume, 427 .resume = max8997_resume,
429 .freeze = max8997_freeze, 428 .freeze = max8997_freeze,
diff --git a/drivers/mfd/mc13xxx-core.c b/drivers/mfd/mc13xxx-core.c
index f0ea3b8b3e4a..b801dc72f041 100644
--- a/drivers/mfd/mc13xxx-core.c
+++ b/drivers/mfd/mc13xxx-core.c
@@ -723,10 +723,6 @@ void mc13xxx_common_cleanup(struct mc13xxx *mc13xxx)
723 free_irq(mc13xxx->irq, mc13xxx); 723 free_irq(mc13xxx->irq, mc13xxx);
724 724
725 mfd_remove_devices(mc13xxx->dev); 725 mfd_remove_devices(mc13xxx->dev);
726
727 regmap_exit(mc13xxx->regmap);
728
729 kfree(mc13xxx);
730} 726}
731EXPORT_SYMBOL_GPL(mc13xxx_common_cleanup); 727EXPORT_SYMBOL_GPL(mc13xxx_common_cleanup);
732 728
diff --git a/drivers/mfd/mc13xxx-i2c.c b/drivers/mfd/mc13xxx-i2c.c
index d22501dad6a6..9d18dde3cd2a 100644
--- a/drivers/mfd/mc13xxx-i2c.c
+++ b/drivers/mfd/mc13xxx-i2c.c
@@ -53,17 +53,11 @@ static struct regmap_config mc13xxx_regmap_i2c_config = {
53static int mc13xxx_i2c_probe(struct i2c_client *client, 53static int mc13xxx_i2c_probe(struct i2c_client *client,
54 const struct i2c_device_id *id) 54 const struct i2c_device_id *id)
55{ 55{
56 const struct of_device_id *of_id;
57 struct i2c_driver *idrv = to_i2c_driver(client->dev.driver);
58 struct mc13xxx *mc13xxx; 56 struct mc13xxx *mc13xxx;
59 struct mc13xxx_platform_data *pdata = dev_get_platdata(&client->dev); 57 struct mc13xxx_platform_data *pdata = dev_get_platdata(&client->dev);
60 int ret; 58 int ret;
61 59
62 of_id = of_match_device(mc13xxx_dt_ids, &client->dev); 60 mc13xxx = devm_kzalloc(&client->dev, sizeof(*mc13xxx), GFP_KERNEL);
63 if (of_id)
64 idrv->id_table = (const struct i2c_device_id*) of_id->data;
65
66 mc13xxx = kzalloc(sizeof(*mc13xxx), GFP_KERNEL);
67 if (!mc13xxx) 61 if (!mc13xxx)
68 return -ENOMEM; 62 return -ENOMEM;
69 63
@@ -72,13 +66,13 @@ static int mc13xxx_i2c_probe(struct i2c_client *client,
72 mc13xxx->dev = &client->dev; 66 mc13xxx->dev = &client->dev;
73 mutex_init(&mc13xxx->lock); 67 mutex_init(&mc13xxx->lock);
74 68
75 mc13xxx->regmap = regmap_init_i2c(client, &mc13xxx_regmap_i2c_config); 69 mc13xxx->regmap = devm_regmap_init_i2c(client,
70 &mc13xxx_regmap_i2c_config);
76 if (IS_ERR(mc13xxx->regmap)) { 71 if (IS_ERR(mc13xxx->regmap)) {
77 ret = PTR_ERR(mc13xxx->regmap); 72 ret = PTR_ERR(mc13xxx->regmap);
78 dev_err(mc13xxx->dev, "Failed to initialize register map: %d\n", 73 dev_err(mc13xxx->dev, "Failed to initialize register map: %d\n",
79 ret); 74 ret);
80 dev_set_drvdata(&client->dev, NULL); 75 dev_set_drvdata(&client->dev, NULL);
81 kfree(mc13xxx);
82 return ret; 76 return ret;
83 } 77 }
84 78
diff --git a/drivers/mfd/mc13xxx-spi.c b/drivers/mfd/mc13xxx-spi.c
index 03df422feb76..0bdb43a0aff0 100644
--- a/drivers/mfd/mc13xxx-spi.c
+++ b/drivers/mfd/mc13xxx-spi.c
@@ -119,17 +119,11 @@ static struct regmap_bus regmap_mc13xxx_bus = {
119 119
120static int mc13xxx_spi_probe(struct spi_device *spi) 120static int mc13xxx_spi_probe(struct spi_device *spi)
121{ 121{
122 const struct of_device_id *of_id;
123 struct spi_driver *sdrv = to_spi_driver(spi->dev.driver);
124 struct mc13xxx *mc13xxx; 122 struct mc13xxx *mc13xxx;
125 struct mc13xxx_platform_data *pdata = dev_get_platdata(&spi->dev); 123 struct mc13xxx_platform_data *pdata = dev_get_platdata(&spi->dev);
126 int ret; 124 int ret;
127 125
128 of_id = of_match_device(mc13xxx_dt_ids, &spi->dev); 126 mc13xxx = devm_kzalloc(&spi->dev, sizeof(*mc13xxx), GFP_KERNEL);
129 if (of_id)
130 sdrv->id_table = &mc13xxx_device_id[(enum mc13xxx_id) of_id->data];
131
132 mc13xxx = kzalloc(sizeof(*mc13xxx), GFP_KERNEL);
133 if (!mc13xxx) 127 if (!mc13xxx)
134 return -ENOMEM; 128 return -ENOMEM;
135 129
@@ -139,15 +133,14 @@ static int mc13xxx_spi_probe(struct spi_device *spi)
139 mc13xxx->dev = &spi->dev; 133 mc13xxx->dev = &spi->dev;
140 mutex_init(&mc13xxx->lock); 134 mutex_init(&mc13xxx->lock);
141 135
142 mc13xxx->regmap = regmap_init(&spi->dev, &regmap_mc13xxx_bus, &spi->dev, 136 mc13xxx->regmap = devm_regmap_init(&spi->dev, &regmap_mc13xxx_bus,
143 &mc13xxx_regmap_spi_config); 137 &spi->dev,
144 138 &mc13xxx_regmap_spi_config);
145 if (IS_ERR(mc13xxx->regmap)) { 139 if (IS_ERR(mc13xxx->regmap)) {
146 ret = PTR_ERR(mc13xxx->regmap); 140 ret = PTR_ERR(mc13xxx->regmap);
147 dev_err(mc13xxx->dev, "Failed to initialize register map: %d\n", 141 dev_err(mc13xxx->dev, "Failed to initialize register map: %d\n",
148 ret); 142 ret);
149 dev_set_drvdata(&spi->dev, NULL); 143 dev_set_drvdata(&spi->dev, NULL);
150 kfree(mc13xxx);
151 return ret; 144 return ret;
152 } 145 }
153 146
diff --git a/drivers/mfd/mfd-core.c b/drivers/mfd/mfd-core.c
index ffc3d48676ae..0c3a01cde2f7 100644
--- a/drivers/mfd/mfd-core.c
+++ b/drivers/mfd/mfd-core.c
@@ -18,6 +18,8 @@
18#include <linux/pm_runtime.h> 18#include <linux/pm_runtime.h>
19#include <linux/slab.h> 19#include <linux/slab.h>
20#include <linux/module.h> 20#include <linux/module.h>
21#include <linux/irqdomain.h>
22#include <linux/of.h>
21 23
22int mfd_cell_enable(struct platform_device *pdev) 24int mfd_cell_enable(struct platform_device *pdev)
23{ 25{
@@ -76,6 +78,8 @@ static int mfd_add_device(struct device *parent, int id,
76{ 78{
77 struct resource *res; 79 struct resource *res;
78 struct platform_device *pdev; 80 struct platform_device *pdev;
81 struct device_node *np = NULL;
82 struct irq_domain *domain = NULL;
79 int ret = -ENOMEM; 83 int ret = -ENOMEM;
80 int r; 84 int r;
81 85
@@ -89,6 +93,16 @@ static int mfd_add_device(struct device *parent, int id,
89 93
90 pdev->dev.parent = parent; 94 pdev->dev.parent = parent;
91 95
96 if (parent->of_node && cell->of_compatible) {
97 for_each_child_of_node(parent->of_node, np) {
98 if (of_device_is_compatible(np, cell->of_compatible)) {
99 pdev->dev.of_node = np;
100 domain = irq_find_host(parent->of_node);
101 break;
102 }
103 }
104 }
105
92 if (cell->pdata_size) { 106 if (cell->pdata_size) {
93 ret = platform_device_add_data(pdev, 107 ret = platform_device_add_data(pdev,
94 cell->platform_data, cell->pdata_size); 108 cell->platform_data, cell->pdata_size);
@@ -112,10 +126,18 @@ static int mfd_add_device(struct device *parent, int id,
112 res[r].end = mem_base->start + 126 res[r].end = mem_base->start +
113 cell->resources[r].end; 127 cell->resources[r].end;
114 } else if (cell->resources[r].flags & IORESOURCE_IRQ) { 128 } else if (cell->resources[r].flags & IORESOURCE_IRQ) {
115 res[r].start = irq_base + 129 if (domain) {
116 cell->resources[r].start; 130 /* Unable to create mappings for IRQ ranges. */
117 res[r].end = irq_base + 131 WARN_ON(cell->resources[r].start !=
118 cell->resources[r].end; 132 cell->resources[r].end);
133 res[r].start = res[r].end = irq_create_mapping(
134 domain, cell->resources[r].start);
135 } else {
136 res[r].start = irq_base +
137 cell->resources[r].start;
138 res[r].end = irq_base +
139 cell->resources[r].end;
140 }
119 } else { 141 } else {
120 res[r].parent = cell->resources[r].parent; 142 res[r].parent = cell->resources[r].parent;
121 res[r].start = cell->resources[r].start; 143 res[r].start = cell->resources[r].start;
diff --git a/drivers/mfd/pcf50633-core.c b/drivers/mfd/pcf50633-core.c
index 29c122bf28ea..45ce1fb5a549 100644
--- a/drivers/mfd/pcf50633-core.c
+++ b/drivers/mfd/pcf50633-core.c
@@ -253,8 +253,13 @@ static int __devinit pcf50633_probe(struct i2c_client *client,
253 } 253 }
254 254
255 pdev->dev.parent = pcf->dev; 255 pdev->dev.parent = pcf->dev;
256 platform_device_add_data(pdev, &pdata->reg_init_data[i], 256 if (platform_device_add_data(pdev, &pdata->reg_init_data[i],
257 sizeof(pdata->reg_init_data[i])); 257 sizeof(pdata->reg_init_data[i])) < 0) {
258 platform_device_put(pdev);
259 dev_err(pcf->dev, "Out of memory for regulator parameters %d\n",
260 i);
261 continue;
262 }
258 pcf->regulator_pdev[i] = pdev; 263 pcf->regulator_pdev[i] = pdev;
259 264
260 platform_device_add(pdev); 265 platform_device_add(pdev);
diff --git a/drivers/mfd/s5m-core.c b/drivers/mfd/s5m-core.c
deleted file mode 100644
index dd170307e60e..000000000000
--- a/drivers/mfd/s5m-core.c
+++ /dev/null
@@ -1,206 +0,0 @@
1/*
2 * s5m87xx.c
3 *
4 * Copyright (c) 2011 Samsung Electronics Co., Ltd
5 * http://www.samsung.com
6 *
7 * This program is free software; you can redistribute it and/or modify it
8 * under the terms of the GNU General Public License as published by the
9 * Free Software Foundation; either version 2 of the License, or (at your
10 * option) any later version.
11 *
12 */
13
14#include <linux/module.h>
15#include <linux/moduleparam.h>
16#include <linux/init.h>
17#include <linux/err.h>
18#include <linux/slab.h>
19#include <linux/i2c.h>
20#include <linux/interrupt.h>
21#include <linux/pm_runtime.h>
22#include <linux/mutex.h>
23#include <linux/mfd/core.h>
24#include <linux/mfd/s5m87xx/s5m-core.h>
25#include <linux/mfd/s5m87xx/s5m-pmic.h>
26#include <linux/mfd/s5m87xx/s5m-rtc.h>
27#include <linux/regmap.h>
28
29static struct mfd_cell s5m8751_devs[] = {
30 {
31 .name = "s5m8751-pmic",
32 }, {
33 .name = "s5m-charger",
34 }, {
35 .name = "s5m8751-codec",
36 },
37};
38
39static struct mfd_cell s5m8763_devs[] = {
40 {
41 .name = "s5m8763-pmic",
42 }, {
43 .name = "s5m-rtc",
44 }, {
45 .name = "s5m-charger",
46 },
47};
48
49static struct mfd_cell s5m8767_devs[] = {
50 {
51 .name = "s5m8767-pmic",
52 }, {
53 .name = "s5m-rtc",
54 },
55};
56
57int s5m_reg_read(struct s5m87xx_dev *s5m87xx, u8 reg, void *dest)
58{
59 return regmap_read(s5m87xx->regmap, reg, dest);
60}
61EXPORT_SYMBOL_GPL(s5m_reg_read);
62
63int s5m_bulk_read(struct s5m87xx_dev *s5m87xx, u8 reg, int count, u8 *buf)
64{
65 return regmap_bulk_read(s5m87xx->regmap, reg, buf, count);
66}
67EXPORT_SYMBOL_GPL(s5m_bulk_read);
68
69int s5m_reg_write(struct s5m87xx_dev *s5m87xx, u8 reg, u8 value)
70{
71 return regmap_write(s5m87xx->regmap, reg, value);
72}
73EXPORT_SYMBOL_GPL(s5m_reg_write);
74
75int s5m_bulk_write(struct s5m87xx_dev *s5m87xx, u8 reg, int count, u8 *buf)
76{
77 return regmap_raw_write(s5m87xx->regmap, reg, buf, count);
78}
79EXPORT_SYMBOL_GPL(s5m_bulk_write);
80
81int s5m_reg_update(struct s5m87xx_dev *s5m87xx, u8 reg, u8 val, u8 mask)
82{
83 return regmap_update_bits(s5m87xx->regmap, reg, mask, val);
84}
85EXPORT_SYMBOL_GPL(s5m_reg_update);
86
87static struct regmap_config s5m_regmap_config = {
88 .reg_bits = 8,
89 .val_bits = 8,
90};
91
92static int s5m87xx_i2c_probe(struct i2c_client *i2c,
93 const struct i2c_device_id *id)
94{
95 struct s5m_platform_data *pdata = i2c->dev.platform_data;
96 struct s5m87xx_dev *s5m87xx;
97 int ret;
98
99 s5m87xx = devm_kzalloc(&i2c->dev, sizeof(struct s5m87xx_dev),
100 GFP_KERNEL);
101 if (s5m87xx == NULL)
102 return -ENOMEM;
103
104 i2c_set_clientdata(i2c, s5m87xx);
105 s5m87xx->dev = &i2c->dev;
106 s5m87xx->i2c = i2c;
107 s5m87xx->irq = i2c->irq;
108 s5m87xx->type = id->driver_data;
109
110 if (pdata) {
111 s5m87xx->device_type = pdata->device_type;
112 s5m87xx->ono = pdata->ono;
113 s5m87xx->irq_base = pdata->irq_base;
114 s5m87xx->wakeup = pdata->wakeup;
115 }
116
117 s5m87xx->regmap = devm_regmap_init_i2c(i2c, &s5m_regmap_config);
118 if (IS_ERR(s5m87xx->regmap)) {
119 ret = PTR_ERR(s5m87xx->regmap);
120 dev_err(&i2c->dev, "Failed to allocate register map: %d\n",
121 ret);
122 return ret;
123 }
124
125 s5m87xx->rtc = i2c_new_dummy(i2c->adapter, RTC_I2C_ADDR);
126 i2c_set_clientdata(s5m87xx->rtc, s5m87xx);
127
128 if (pdata && pdata->cfg_pmic_irq)
129 pdata->cfg_pmic_irq();
130
131 s5m_irq_init(s5m87xx);
132
133 pm_runtime_set_active(s5m87xx->dev);
134
135 switch (s5m87xx->device_type) {
136 case S5M8751X:
137 ret = mfd_add_devices(s5m87xx->dev, -1, s5m8751_devs,
138 ARRAY_SIZE(s5m8751_devs), NULL, 0);
139 break;
140 case S5M8763X:
141 ret = mfd_add_devices(s5m87xx->dev, -1, s5m8763_devs,
142 ARRAY_SIZE(s5m8763_devs), NULL, 0);
143 break;
144 case S5M8767X:
145 ret = mfd_add_devices(s5m87xx->dev, -1, s5m8767_devs,
146 ARRAY_SIZE(s5m8767_devs), NULL, 0);
147 break;
148 default:
149 /* If this happens the probe function is problem */
150 BUG();
151 }
152
153 if (ret < 0)
154 goto err;
155
156 return ret;
157
158err:
159 mfd_remove_devices(s5m87xx->dev);
160 s5m_irq_exit(s5m87xx);
161 i2c_unregister_device(s5m87xx->rtc);
162 return ret;
163}
164
165static int s5m87xx_i2c_remove(struct i2c_client *i2c)
166{
167 struct s5m87xx_dev *s5m87xx = i2c_get_clientdata(i2c);
168
169 mfd_remove_devices(s5m87xx->dev);
170 s5m_irq_exit(s5m87xx);
171 i2c_unregister_device(s5m87xx->rtc);
172 return 0;
173}
174
175static const struct i2c_device_id s5m87xx_i2c_id[] = {
176 { "s5m87xx", 0 },
177 { }
178};
179MODULE_DEVICE_TABLE(i2c, s5m87xx_i2c_id);
180
181static struct i2c_driver s5m87xx_i2c_driver = {
182 .driver = {
183 .name = "s5m87xx",
184 .owner = THIS_MODULE,
185 },
186 .probe = s5m87xx_i2c_probe,
187 .remove = s5m87xx_i2c_remove,
188 .id_table = s5m87xx_i2c_id,
189};
190
191static int __init s5m87xx_i2c_init(void)
192{
193 return i2c_add_driver(&s5m87xx_i2c_driver);
194}
195
196subsys_initcall(s5m87xx_i2c_init);
197
198static void __exit s5m87xx_i2c_exit(void)
199{
200 i2c_del_driver(&s5m87xx_i2c_driver);
201}
202module_exit(s5m87xx_i2c_exit);
203
204MODULE_AUTHOR("Sangbeom Kim <sbkim73@samsung.com>");
205MODULE_DESCRIPTION("Core support for the S5M MFD");
206MODULE_LICENSE("GPL");
diff --git a/drivers/mfd/s5m-irq.c b/drivers/mfd/s5m-irq.c
deleted file mode 100644
index 0236676085cf..000000000000
--- a/drivers/mfd/s5m-irq.c
+++ /dev/null
@@ -1,495 +0,0 @@
1/*
2 * s5m-irq.c
3 *
4 * Copyright (c) 2011 Samsung Electronics Co., Ltd
5 * http://www.samsung.com
6 *
7 * This program is free software; you can redistribute it and/or modify it
8 * under the terms of the GNU General Public License as published by the
9 * Free Software Foundation; either version 2 of the License, or (at your
10 * option) any later version.
11 *
12 */
13
14#include <linux/device.h>
15#include <linux/interrupt.h>
16#include <linux/irq.h>
17#include <linux/mfd/s5m87xx/s5m-core.h>
18
19struct s5m_irq_data {
20 int reg;
21 int mask;
22};
23
24static struct s5m_irq_data s5m8767_irqs[] = {
25 [S5M8767_IRQ_PWRR] = {
26 .reg = 1,
27 .mask = S5M8767_IRQ_PWRR_MASK,
28 },
29 [S5M8767_IRQ_PWRF] = {
30 .reg = 1,
31 .mask = S5M8767_IRQ_PWRF_MASK,
32 },
33 [S5M8767_IRQ_PWR1S] = {
34 .reg = 1,
35 .mask = S5M8767_IRQ_PWR1S_MASK,
36 },
37 [S5M8767_IRQ_JIGR] = {
38 .reg = 1,
39 .mask = S5M8767_IRQ_JIGR_MASK,
40 },
41 [S5M8767_IRQ_JIGF] = {
42 .reg = 1,
43 .mask = S5M8767_IRQ_JIGF_MASK,
44 },
45 [S5M8767_IRQ_LOWBAT2] = {
46 .reg = 1,
47 .mask = S5M8767_IRQ_LOWBAT2_MASK,
48 },
49 [S5M8767_IRQ_LOWBAT1] = {
50 .reg = 1,
51 .mask = S5M8767_IRQ_LOWBAT1_MASK,
52 },
53 [S5M8767_IRQ_MRB] = {
54 .reg = 2,
55 .mask = S5M8767_IRQ_MRB_MASK,
56 },
57 [S5M8767_IRQ_DVSOK2] = {
58 .reg = 2,
59 .mask = S5M8767_IRQ_DVSOK2_MASK,
60 },
61 [S5M8767_IRQ_DVSOK3] = {
62 .reg = 2,
63 .mask = S5M8767_IRQ_DVSOK3_MASK,
64 },
65 [S5M8767_IRQ_DVSOK4] = {
66 .reg = 2,
67 .mask = S5M8767_IRQ_DVSOK4_MASK,
68 },
69 [S5M8767_IRQ_RTC60S] = {
70 .reg = 3,
71 .mask = S5M8767_IRQ_RTC60S_MASK,
72 },
73 [S5M8767_IRQ_RTCA1] = {
74 .reg = 3,
75 .mask = S5M8767_IRQ_RTCA1_MASK,
76 },
77 [S5M8767_IRQ_RTCA2] = {
78 .reg = 3,
79 .mask = S5M8767_IRQ_RTCA2_MASK,
80 },
81 [S5M8767_IRQ_SMPL] = {
82 .reg = 3,
83 .mask = S5M8767_IRQ_SMPL_MASK,
84 },
85 [S5M8767_IRQ_RTC1S] = {
86 .reg = 3,
87 .mask = S5M8767_IRQ_RTC1S_MASK,
88 },
89 [S5M8767_IRQ_WTSR] = {
90 .reg = 3,
91 .mask = S5M8767_IRQ_WTSR_MASK,
92 },
93};
94
95static struct s5m_irq_data s5m8763_irqs[] = {
96 [S5M8763_IRQ_DCINF] = {
97 .reg = 1,
98 .mask = S5M8763_IRQ_DCINF_MASK,
99 },
100 [S5M8763_IRQ_DCINR] = {
101 .reg = 1,
102 .mask = S5M8763_IRQ_DCINR_MASK,
103 },
104 [S5M8763_IRQ_JIGF] = {
105 .reg = 1,
106 .mask = S5M8763_IRQ_JIGF_MASK,
107 },
108 [S5M8763_IRQ_JIGR] = {
109 .reg = 1,
110 .mask = S5M8763_IRQ_JIGR_MASK,
111 },
112 [S5M8763_IRQ_PWRONF] = {
113 .reg = 1,
114 .mask = S5M8763_IRQ_PWRONF_MASK,
115 },
116 [S5M8763_IRQ_PWRONR] = {
117 .reg = 1,
118 .mask = S5M8763_IRQ_PWRONR_MASK,
119 },
120 [S5M8763_IRQ_WTSREVNT] = {
121 .reg = 2,
122 .mask = S5M8763_IRQ_WTSREVNT_MASK,
123 },
124 [S5M8763_IRQ_SMPLEVNT] = {
125 .reg = 2,
126 .mask = S5M8763_IRQ_SMPLEVNT_MASK,
127 },
128 [S5M8763_IRQ_ALARM1] = {
129 .reg = 2,
130 .mask = S5M8763_IRQ_ALARM1_MASK,
131 },
132 [S5M8763_IRQ_ALARM0] = {
133 .reg = 2,
134 .mask = S5M8763_IRQ_ALARM0_MASK,
135 },
136 [S5M8763_IRQ_ONKEY1S] = {
137 .reg = 3,
138 .mask = S5M8763_IRQ_ONKEY1S_MASK,
139 },
140 [S5M8763_IRQ_TOPOFFR] = {
141 .reg = 3,
142 .mask = S5M8763_IRQ_TOPOFFR_MASK,
143 },
144 [S5M8763_IRQ_DCINOVPR] = {
145 .reg = 3,
146 .mask = S5M8763_IRQ_DCINOVPR_MASK,
147 },
148 [S5M8763_IRQ_CHGRSTF] = {
149 .reg = 3,
150 .mask = S5M8763_IRQ_CHGRSTF_MASK,
151 },
152 [S5M8763_IRQ_DONER] = {
153 .reg = 3,
154 .mask = S5M8763_IRQ_DONER_MASK,
155 },
156 [S5M8763_IRQ_CHGFAULT] = {
157 .reg = 3,
158 .mask = S5M8763_IRQ_CHGFAULT_MASK,
159 },
160 [S5M8763_IRQ_LOBAT1] = {
161 .reg = 4,
162 .mask = S5M8763_IRQ_LOBAT1_MASK,
163 },
164 [S5M8763_IRQ_LOBAT2] = {
165 .reg = 4,
166 .mask = S5M8763_IRQ_LOBAT2_MASK,
167 },
168};
169
170static inline struct s5m_irq_data *
171irq_to_s5m8767_irq(struct s5m87xx_dev *s5m87xx, int irq)
172{
173 return &s5m8767_irqs[irq - s5m87xx->irq_base];
174}
175
176static void s5m8767_irq_lock(struct irq_data *data)
177{
178 struct s5m87xx_dev *s5m87xx = irq_data_get_irq_chip_data(data);
179
180 mutex_lock(&s5m87xx->irqlock);
181}
182
183static void s5m8767_irq_sync_unlock(struct irq_data *data)
184{
185 struct s5m87xx_dev *s5m87xx = irq_data_get_irq_chip_data(data);
186 int i;
187
188 for (i = 0; i < ARRAY_SIZE(s5m87xx->irq_masks_cur); i++) {
189 if (s5m87xx->irq_masks_cur[i] != s5m87xx->irq_masks_cache[i]) {
190 s5m87xx->irq_masks_cache[i] = s5m87xx->irq_masks_cur[i];
191 s5m_reg_write(s5m87xx, S5M8767_REG_INT1M + i,
192 s5m87xx->irq_masks_cur[i]);
193 }
194 }
195
196 mutex_unlock(&s5m87xx->irqlock);
197}
198
199static void s5m8767_irq_unmask(struct irq_data *data)
200{
201 struct s5m87xx_dev *s5m87xx = irq_data_get_irq_chip_data(data);
202 struct s5m_irq_data *irq_data = irq_to_s5m8767_irq(s5m87xx,
203 data->irq);
204
205 s5m87xx->irq_masks_cur[irq_data->reg - 1] &= ~irq_data->mask;
206}
207
208static void s5m8767_irq_mask(struct irq_data *data)
209{
210 struct s5m87xx_dev *s5m87xx = irq_data_get_irq_chip_data(data);
211 struct s5m_irq_data *irq_data = irq_to_s5m8767_irq(s5m87xx,
212 data->irq);
213
214 s5m87xx->irq_masks_cur[irq_data->reg - 1] |= irq_data->mask;
215}
216
217static struct irq_chip s5m8767_irq_chip = {
218 .name = "s5m8767",
219 .irq_bus_lock = s5m8767_irq_lock,
220 .irq_bus_sync_unlock = s5m8767_irq_sync_unlock,
221 .irq_mask = s5m8767_irq_mask,
222 .irq_unmask = s5m8767_irq_unmask,
223};
224
225static inline struct s5m_irq_data *
226irq_to_s5m8763_irq(struct s5m87xx_dev *s5m87xx, int irq)
227{
228 return &s5m8763_irqs[irq - s5m87xx->irq_base];
229}
230
231static void s5m8763_irq_lock(struct irq_data *data)
232{
233 struct s5m87xx_dev *s5m87xx = irq_data_get_irq_chip_data(data);
234
235 mutex_lock(&s5m87xx->irqlock);
236}
237
238static void s5m8763_irq_sync_unlock(struct irq_data *data)
239{
240 struct s5m87xx_dev *s5m87xx = irq_data_get_irq_chip_data(data);
241 int i;
242
243 for (i = 0; i < ARRAY_SIZE(s5m87xx->irq_masks_cur); i++) {
244 if (s5m87xx->irq_masks_cur[i] != s5m87xx->irq_masks_cache[i]) {
245 s5m87xx->irq_masks_cache[i] = s5m87xx->irq_masks_cur[i];
246 s5m_reg_write(s5m87xx, S5M8763_REG_IRQM1 + i,
247 s5m87xx->irq_masks_cur[i]);
248 }
249 }
250
251 mutex_unlock(&s5m87xx->irqlock);
252}
253
254static void s5m8763_irq_unmask(struct irq_data *data)
255{
256 struct s5m87xx_dev *s5m87xx = irq_data_get_irq_chip_data(data);
257 struct s5m_irq_data *irq_data = irq_to_s5m8763_irq(s5m87xx,
258 data->irq);
259
260 s5m87xx->irq_masks_cur[irq_data->reg - 1] &= ~irq_data->mask;
261}
262
263static void s5m8763_irq_mask(struct irq_data *data)
264{
265 struct s5m87xx_dev *s5m87xx = irq_data_get_irq_chip_data(data);
266 struct s5m_irq_data *irq_data = irq_to_s5m8763_irq(s5m87xx,
267 data->irq);
268
269 s5m87xx->irq_masks_cur[irq_data->reg - 1] |= irq_data->mask;
270}
271
272static struct irq_chip s5m8763_irq_chip = {
273 .name = "s5m8763",
274 .irq_bus_lock = s5m8763_irq_lock,
275 .irq_bus_sync_unlock = s5m8763_irq_sync_unlock,
276 .irq_mask = s5m8763_irq_mask,
277 .irq_unmask = s5m8763_irq_unmask,
278};
279
280
281static irqreturn_t s5m8767_irq_thread(int irq, void *data)
282{
283 struct s5m87xx_dev *s5m87xx = data;
284 u8 irq_reg[NUM_IRQ_REGS-1];
285 int ret;
286 int i;
287
288
289 ret = s5m_bulk_read(s5m87xx, S5M8767_REG_INT1,
290 NUM_IRQ_REGS - 1, irq_reg);
291 if (ret < 0) {
292 dev_err(s5m87xx->dev, "Failed to read interrupt register: %d\n",
293 ret);
294 return IRQ_NONE;
295 }
296
297 for (i = 0; i < NUM_IRQ_REGS - 1; i++)
298 irq_reg[i] &= ~s5m87xx->irq_masks_cur[i];
299
300 for (i = 0; i < S5M8767_IRQ_NR; i++) {
301 if (irq_reg[s5m8767_irqs[i].reg - 1] & s5m8767_irqs[i].mask)
302 handle_nested_irq(s5m87xx->irq_base + i);
303 }
304
305 return IRQ_HANDLED;
306}
307
308static irqreturn_t s5m8763_irq_thread(int irq, void *data)
309{
310 struct s5m87xx_dev *s5m87xx = data;
311 u8 irq_reg[NUM_IRQ_REGS];
312 int ret;
313 int i;
314
315 ret = s5m_bulk_read(s5m87xx, S5M8763_REG_IRQ1,
316 NUM_IRQ_REGS, irq_reg);
317 if (ret < 0) {
318 dev_err(s5m87xx->dev, "Failed to read interrupt register: %d\n",
319 ret);
320 return IRQ_NONE;
321 }
322
323 for (i = 0; i < NUM_IRQ_REGS; i++)
324 irq_reg[i] &= ~s5m87xx->irq_masks_cur[i];
325
326 for (i = 0; i < S5M8763_IRQ_NR; i++) {
327 if (irq_reg[s5m8763_irqs[i].reg - 1] & s5m8763_irqs[i].mask)
328 handle_nested_irq(s5m87xx->irq_base + i);
329 }
330
331 return IRQ_HANDLED;
332}
333
334int s5m_irq_resume(struct s5m87xx_dev *s5m87xx)
335{
336 if (s5m87xx->irq && s5m87xx->irq_base){
337 switch (s5m87xx->device_type) {
338 case S5M8763X:
339 s5m8763_irq_thread(s5m87xx->irq_base, s5m87xx);
340 break;
341 case S5M8767X:
342 s5m8767_irq_thread(s5m87xx->irq_base, s5m87xx);
343 break;
344 default:
345 dev_err(s5m87xx->dev,
346 "Unknown device type %d\n",
347 s5m87xx->device_type);
348 return -EINVAL;
349
350 }
351 }
352 return 0;
353}
354
355int s5m_irq_init(struct s5m87xx_dev *s5m87xx)
356{
357 int i;
358 int cur_irq;
359 int ret = 0;
360 int type = s5m87xx->device_type;
361
362 if (!s5m87xx->irq) {
363 dev_warn(s5m87xx->dev,
364 "No interrupt specified, no interrupts\n");
365 s5m87xx->irq_base = 0;
366 return 0;
367 }
368
369 if (!s5m87xx->irq_base) {
370 dev_err(s5m87xx->dev,
371 "No interrupt base specified, no interrupts\n");
372 return 0;
373 }
374
375 mutex_init(&s5m87xx->irqlock);
376
377 switch (type) {
378 case S5M8763X:
379 for (i = 0; i < NUM_IRQ_REGS; i++) {
380 s5m87xx->irq_masks_cur[i] = 0xff;
381 s5m87xx->irq_masks_cache[i] = 0xff;
382 s5m_reg_write(s5m87xx, S5M8763_REG_IRQM1 + i,
383 0xff);
384 }
385
386 s5m_reg_write(s5m87xx, S5M8763_REG_STATUSM1, 0xff);
387 s5m_reg_write(s5m87xx, S5M8763_REG_STATUSM2, 0xff);
388
389 for (i = 0; i < S5M8763_IRQ_NR; i++) {
390 cur_irq = i + s5m87xx->irq_base;
391 irq_set_chip_data(cur_irq, s5m87xx);
392 irq_set_chip_and_handler(cur_irq, &s5m8763_irq_chip,
393 handle_edge_irq);
394 irq_set_nested_thread(cur_irq, 1);
395#ifdef CONFIG_ARM
396 set_irq_flags(cur_irq, IRQF_VALID);
397#else
398 irq_set_noprobe(cur_irq);
399#endif
400 }
401
402 ret = request_threaded_irq(s5m87xx->irq, NULL,
403 s5m8763_irq_thread,
404 IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
405 "s5m87xx-irq", s5m87xx);
406 if (ret) {
407 dev_err(s5m87xx->dev, "Failed to request IRQ %d: %d\n",
408 s5m87xx->irq, ret);
409 return ret;
410 }
411 break;
412 case S5M8767X:
413 for (i = 0; i < NUM_IRQ_REGS - 1; i++) {
414 s5m87xx->irq_masks_cur[i] = 0xff;
415 s5m87xx->irq_masks_cache[i] = 0xff;
416 s5m_reg_write(s5m87xx, S5M8767_REG_INT1M + i,
417 0xff);
418 }
419 for (i = 0; i < S5M8767_IRQ_NR; i++) {
420 cur_irq = i + s5m87xx->irq_base;
421 irq_set_chip_data(cur_irq, s5m87xx);
422 if (ret) {
423 dev_err(s5m87xx->dev,
424 "Failed to irq_set_chip_data %d: %d\n",
425 s5m87xx->irq, ret);
426 return ret;
427 }
428
429 irq_set_chip_and_handler(cur_irq, &s5m8767_irq_chip,
430 handle_edge_irq);
431 irq_set_nested_thread(cur_irq, 1);
432#ifdef CONFIG_ARM
433 set_irq_flags(cur_irq, IRQF_VALID);
434#else
435 irq_set_noprobe(cur_irq);
436#endif
437 }
438
439 ret = request_threaded_irq(s5m87xx->irq, NULL,
440 s5m8767_irq_thread,
441 IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
442 "s5m87xx-irq", s5m87xx);
443 if (ret) {
444 dev_err(s5m87xx->dev, "Failed to request IRQ %d: %d\n",
445 s5m87xx->irq, ret);
446 return ret;
447 }
448 break;
449 default:
450 dev_err(s5m87xx->dev,
451 "Unknown device type %d\n", s5m87xx->device_type);
452 return -EINVAL;
453 }
454
455 if (!s5m87xx->ono)
456 return 0;
457
458 switch (type) {
459 case S5M8763X:
460 ret = request_threaded_irq(s5m87xx->ono, NULL,
461 s5m8763_irq_thread,
462 IRQF_TRIGGER_FALLING |
463 IRQF_TRIGGER_RISING |
464 IRQF_ONESHOT, "s5m87xx-ono",
465 s5m87xx);
466 break;
467 case S5M8767X:
468 ret = request_threaded_irq(s5m87xx->ono, NULL,
469 s5m8767_irq_thread,
470 IRQF_TRIGGER_FALLING |
471 IRQF_TRIGGER_RISING |
472 IRQF_ONESHOT, "s5m87xx-ono", s5m87xx);
473 break;
474 default:
475 ret = -EINVAL;
476 break;
477 }
478
479 if (ret) {
480 dev_err(s5m87xx->dev, "Failed to request IRQ %d: %d\n",
481 s5m87xx->ono, ret);
482 return ret;
483 }
484
485 return 0;
486}
487
488void s5m_irq_exit(struct s5m87xx_dev *s5m87xx)
489{
490 if (s5m87xx->ono)
491 free_irq(s5m87xx->ono, s5m87xx);
492
493 if (s5m87xx->irq)
494 free_irq(s5m87xx->irq, s5m87xx);
495}
diff --git a/drivers/mfd/sec-core.c b/drivers/mfd/sec-core.c
new file mode 100644
index 000000000000..2988efde11eb
--- /dev/null
+++ b/drivers/mfd/sec-core.c
@@ -0,0 +1,216 @@
1/*
2 * sec-core.c
3 *
4 * Copyright (c) 2012 Samsung Electronics Co., Ltd
5 * http://www.samsung.com
6 *
7 * This program is free software; you can redistribute it and/or modify it
8 * under the terms of the GNU General Public License as published by the
9 * Free Software Foundation; either version 2 of the License, or (at your
10 * option) any later version.
11 *
12 */
13
14#include <linux/module.h>
15#include <linux/moduleparam.h>
16#include <linux/init.h>
17#include <linux/err.h>
18#include <linux/slab.h>
19#include <linux/i2c.h>
20#include <linux/interrupt.h>
21#include <linux/pm_runtime.h>
22#include <linux/mutex.h>
23#include <linux/mfd/core.h>
24#include <linux/mfd/samsung/core.h>
25#include <linux/mfd/samsung/irq.h>
26#include <linux/mfd/samsung/rtc.h>
27#include <linux/regmap.h>
28
29static struct mfd_cell s5m8751_devs[] = {
30 {
31 .name = "s5m8751-pmic",
32 }, {
33 .name = "s5m-charger",
34 }, {
35 .name = "s5m8751-codec",
36 },
37};
38
39static struct mfd_cell s5m8763_devs[] = {
40 {
41 .name = "s5m8763-pmic",
42 }, {
43 .name = "s5m-rtc",
44 }, {
45 .name = "s5m-charger",
46 },
47};
48
49static struct mfd_cell s5m8767_devs[] = {
50 {
51 .name = "s5m8767-pmic",
52 }, {
53 .name = "s5m-rtc",
54 },
55};
56
57static struct mfd_cell s2mps11_devs[] = {
58 {
59 .name = "s2mps11-pmic",
60 },
61};
62
63int sec_reg_read(struct sec_pmic_dev *sec_pmic, u8 reg, void *dest)
64{
65 return regmap_read(sec_pmic->regmap, reg, dest);
66}
67EXPORT_SYMBOL_GPL(sec_reg_read);
68
69int sec_bulk_read(struct sec_pmic_dev *sec_pmic, u8 reg, int count, u8 *buf)
70{
71 return regmap_bulk_read(sec_pmic->regmap, reg, buf, count);
72}
73EXPORT_SYMBOL_GPL(sec_bulk_read);
74
75int sec_reg_write(struct sec_pmic_dev *sec_pmic, u8 reg, u8 value)
76{
77 return regmap_write(sec_pmic->regmap, reg, value);
78}
79EXPORT_SYMBOL_GPL(sec_reg_write);
80
81int sec_bulk_write(struct sec_pmic_dev *sec_pmic, u8 reg, int count, u8 *buf)
82{
83 return regmap_raw_write(sec_pmic->regmap, reg, buf, count);
84}
85EXPORT_SYMBOL_GPL(sec_bulk_write);
86
87int sec_reg_update(struct sec_pmic_dev *sec_pmic, u8 reg, u8 val, u8 mask)
88{
89 return regmap_update_bits(sec_pmic->regmap, reg, mask, val);
90}
91EXPORT_SYMBOL_GPL(sec_reg_update);
92
93static struct regmap_config sec_regmap_config = {
94 .reg_bits = 8,
95 .val_bits = 8,
96};
97
98static int sec_pmic_probe(struct i2c_client *i2c,
99 const struct i2c_device_id *id)
100{
101 struct sec_platform_data *pdata = i2c->dev.platform_data;
102 struct sec_pmic_dev *sec_pmic;
103 int ret;
104
105 sec_pmic = devm_kzalloc(&i2c->dev, sizeof(struct sec_pmic_dev),
106 GFP_KERNEL);
107 if (sec_pmic == NULL)
108 return -ENOMEM;
109
110 i2c_set_clientdata(i2c, sec_pmic);
111 sec_pmic->dev = &i2c->dev;
112 sec_pmic->i2c = i2c;
113 sec_pmic->irq = i2c->irq;
114 sec_pmic->type = id->driver_data;
115
116 if (pdata) {
117 sec_pmic->device_type = pdata->device_type;
118 sec_pmic->ono = pdata->ono;
119 sec_pmic->irq_base = pdata->irq_base;
120 sec_pmic->wakeup = pdata->wakeup;
121 }
122
123 sec_pmic->regmap = devm_regmap_init_i2c(i2c, &sec_regmap_config);
124 if (IS_ERR(sec_pmic->regmap)) {
125 ret = PTR_ERR(sec_pmic->regmap);
126 dev_err(&i2c->dev, "Failed to allocate register map: %d\n",
127 ret);
128 return ret;
129 }
130
131 sec_pmic->rtc = i2c_new_dummy(i2c->adapter, RTC_I2C_ADDR);
132 i2c_set_clientdata(sec_pmic->rtc, sec_pmic);
133
134 if (pdata && pdata->cfg_pmic_irq)
135 pdata->cfg_pmic_irq();
136
137 sec_irq_init(sec_pmic);
138
139 pm_runtime_set_active(sec_pmic->dev);
140
141 switch (sec_pmic->device_type) {
142 case S5M8751X:
143 ret = mfd_add_devices(sec_pmic->dev, -1, s5m8751_devs,
144 ARRAY_SIZE(s5m8751_devs), NULL, 0);
145 break;
146 case S5M8763X:
147 ret = mfd_add_devices(sec_pmic->dev, -1, s5m8763_devs,
148 ARRAY_SIZE(s5m8763_devs), NULL, 0);
149 break;
150 case S5M8767X:
151 ret = mfd_add_devices(sec_pmic->dev, -1, s5m8767_devs,
152 ARRAY_SIZE(s5m8767_devs), NULL, 0);
153 break;
154 case S2MPS11X:
155 ret = mfd_add_devices(sec_pmic->dev, -1, s2mps11_devs,
156 ARRAY_SIZE(s2mps11_devs), NULL, 0);
157 break;
158 default:
159 /* If this happens the probe function is problem */
160 BUG();
161 }
162
163 if (ret < 0)
164 goto err;
165
166 return ret;
167
168err:
169 mfd_remove_devices(sec_pmic->dev);
170 sec_irq_exit(sec_pmic);
171 i2c_unregister_device(sec_pmic->rtc);
172 return ret;
173}
174
175static int sec_pmic_remove(struct i2c_client *i2c)
176{
177 struct sec_pmic_dev *sec_pmic = i2c_get_clientdata(i2c);
178
179 mfd_remove_devices(sec_pmic->dev);
180 sec_irq_exit(sec_pmic);
181 i2c_unregister_device(sec_pmic->rtc);
182 return 0;
183}
184
185static const struct i2c_device_id sec_pmic_id[] = {
186 { "sec_pmic", 0 },
187 { }
188};
189MODULE_DEVICE_TABLE(i2c, sec_pmic_id);
190
191static struct i2c_driver sec_pmic_driver = {
192 .driver = {
193 .name = "sec_pmic",
194 .owner = THIS_MODULE,
195 },
196 .probe = sec_pmic_probe,
197 .remove = sec_pmic_remove,
198 .id_table = sec_pmic_id,
199};
200
201static int __init sec_pmic_init(void)
202{
203 return i2c_add_driver(&sec_pmic_driver);
204}
205
206subsys_initcall(sec_pmic_init);
207
208static void __exit sec_pmic_exit(void)
209{
210 i2c_del_driver(&sec_pmic_driver);
211}
212module_exit(sec_pmic_exit);
213
214MODULE_AUTHOR("Sangbeom Kim <sbkim73@samsung.com>");
215MODULE_DESCRIPTION("Core support for the S5M MFD");
216MODULE_LICENSE("GPL");
diff --git a/drivers/mfd/sec-irq.c b/drivers/mfd/sec-irq.c
new file mode 100644
index 000000000000..c901fa50fea1
--- /dev/null
+++ b/drivers/mfd/sec-irq.c
@@ -0,0 +1,317 @@
1/*
2 * sec-irq.c
3 *
4 * Copyright (c) 2011 Samsung Electronics Co., Ltd
5 * http://www.samsung.com
6 *
7 * This program is free software; you can redistribute it and/or modify it
8 * under the terms of the GNU General Public License as published by the
9 * Free Software Foundation; either version 2 of the License, or (at your
10 * option) any later version.
11 *
12 */
13
14#include <linux/device.h>
15#include <linux/interrupt.h>
16#include <linux/irq.h>
17#include <linux/regmap.h>
18
19#include <linux/mfd/samsung/core.h>
20#include <linux/mfd/samsung/irq.h>
21#include <linux/mfd/samsung/s2mps11.h>
22#include <linux/mfd/samsung/s5m8763.h>
23#include <linux/mfd/samsung/s5m8767.h>
24
25static struct regmap_irq s2mps11_irqs[] = {
26 [S2MPS11_IRQ_PWRONF] = {
27 .reg_offset = 1,
28 .mask = S2MPS11_IRQ_PWRONF_MASK,
29 },
30 [S2MPS11_IRQ_PWRONR] = {
31 .reg_offset = 1,
32 .mask = S2MPS11_IRQ_PWRONR_MASK,
33 },
34 [S2MPS11_IRQ_JIGONBF] = {
35 .reg_offset = 1,
36 .mask = S2MPS11_IRQ_JIGONBF_MASK,
37 },
38 [S2MPS11_IRQ_JIGONBR] = {
39 .reg_offset = 1,
40 .mask = S2MPS11_IRQ_JIGONBR_MASK,
41 },
42 [S2MPS11_IRQ_ACOKBF] = {
43 .reg_offset = 1,
44 .mask = S2MPS11_IRQ_ACOKBF_MASK,
45 },
46 [S2MPS11_IRQ_ACOKBR] = {
47 .reg_offset = 1,
48 .mask = S2MPS11_IRQ_ACOKBR_MASK,
49 },
50 [S2MPS11_IRQ_PWRON1S] = {
51 .reg_offset = 1,
52 .mask = S2MPS11_IRQ_PWRON1S_MASK,
53 },
54 [S2MPS11_IRQ_MRB] = {
55 .reg_offset = 1,
56 .mask = S2MPS11_IRQ_MRB_MASK,
57 },
58 [S2MPS11_IRQ_RTC60S] = {
59 .reg_offset = 2,
60 .mask = S2MPS11_IRQ_RTC60S_MASK,
61 },
62 [S2MPS11_IRQ_RTCA1] = {
63 .reg_offset = 2,
64 .mask = S2MPS11_IRQ_RTCA1_MASK,
65 },
66 [S2MPS11_IRQ_RTCA2] = {
67 .reg_offset = 2,
68 .mask = S2MPS11_IRQ_RTCA2_MASK,
69 },
70 [S2MPS11_IRQ_SMPL] = {
71 .reg_offset = 2,
72 .mask = S2MPS11_IRQ_SMPL_MASK,
73 },
74 [S2MPS11_IRQ_RTC1S] = {
75 .reg_offset = 2,
76 .mask = S2MPS11_IRQ_RTC1S_MASK,
77 },
78 [S2MPS11_IRQ_WTSR] = {
79 .reg_offset = 2,
80 .mask = S2MPS11_IRQ_WTSR_MASK,
81 },
82 [S2MPS11_IRQ_INT120C] = {
83 .reg_offset = 3,
84 .mask = S2MPS11_IRQ_INT120C_MASK,
85 },
86 [S2MPS11_IRQ_INT140C] = {
87 .reg_offset = 3,
88 .mask = S2MPS11_IRQ_INT140C_MASK,
89 },
90};
91
92
93static struct regmap_irq s5m8767_irqs[] = {
94 [S5M8767_IRQ_PWRR] = {
95 .reg_offset = 1,
96 .mask = S5M8767_IRQ_PWRR_MASK,
97 },
98 [S5M8767_IRQ_PWRF] = {
99 .reg_offset = 1,
100 .mask = S5M8767_IRQ_PWRF_MASK,
101 },
102 [S5M8767_IRQ_PWR1S] = {
103 .reg_offset = 1,
104 .mask = S5M8767_IRQ_PWR1S_MASK,
105 },
106 [S5M8767_IRQ_JIGR] = {
107 .reg_offset = 1,
108 .mask = S5M8767_IRQ_JIGR_MASK,
109 },
110 [S5M8767_IRQ_JIGF] = {
111 .reg_offset = 1,
112 .mask = S5M8767_IRQ_JIGF_MASK,
113 },
114 [S5M8767_IRQ_LOWBAT2] = {
115 .reg_offset = 1,
116 .mask = S5M8767_IRQ_LOWBAT2_MASK,
117 },
118 [S5M8767_IRQ_LOWBAT1] = {
119 .reg_offset = 1,
120 .mask = S5M8767_IRQ_LOWBAT1_MASK,
121 },
122 [S5M8767_IRQ_MRB] = {
123 .reg_offset = 2,
124 .mask = S5M8767_IRQ_MRB_MASK,
125 },
126 [S5M8767_IRQ_DVSOK2] = {
127 .reg_offset = 2,
128 .mask = S5M8767_IRQ_DVSOK2_MASK,
129 },
130 [S5M8767_IRQ_DVSOK3] = {
131 .reg_offset = 2,
132 .mask = S5M8767_IRQ_DVSOK3_MASK,
133 },
134 [S5M8767_IRQ_DVSOK4] = {
135 .reg_offset = 2,
136 .mask = S5M8767_IRQ_DVSOK4_MASK,
137 },
138 [S5M8767_IRQ_RTC60S] = {
139 .reg_offset = 3,
140 .mask = S5M8767_IRQ_RTC60S_MASK,
141 },
142 [S5M8767_IRQ_RTCA1] = {
143 .reg_offset = 3,
144 .mask = S5M8767_IRQ_RTCA1_MASK,
145 },
146 [S5M8767_IRQ_RTCA2] = {
147 .reg_offset = 3,
148 .mask = S5M8767_IRQ_RTCA2_MASK,
149 },
150 [S5M8767_IRQ_SMPL] = {
151 .reg_offset = 3,
152 .mask = S5M8767_IRQ_SMPL_MASK,
153 },
154 [S5M8767_IRQ_RTC1S] = {
155 .reg_offset = 3,
156 .mask = S5M8767_IRQ_RTC1S_MASK,
157 },
158 [S5M8767_IRQ_WTSR] = {
159 .reg_offset = 3,
160 .mask = S5M8767_IRQ_WTSR_MASK,
161 },
162};
163
164static struct regmap_irq s5m8763_irqs[] = {
165 [S5M8763_IRQ_DCINF] = {
166 .reg_offset = 1,
167 .mask = S5M8763_IRQ_DCINF_MASK,
168 },
169 [S5M8763_IRQ_DCINR] = {
170 .reg_offset = 1,
171 .mask = S5M8763_IRQ_DCINR_MASK,
172 },
173 [S5M8763_IRQ_JIGF] = {
174 .reg_offset = 1,
175 .mask = S5M8763_IRQ_JIGF_MASK,
176 },
177 [S5M8763_IRQ_JIGR] = {
178 .reg_offset = 1,
179 .mask = S5M8763_IRQ_JIGR_MASK,
180 },
181 [S5M8763_IRQ_PWRONF] = {
182 .reg_offset = 1,
183 .mask = S5M8763_IRQ_PWRONF_MASK,
184 },
185 [S5M8763_IRQ_PWRONR] = {
186 .reg_offset = 1,
187 .mask = S5M8763_IRQ_PWRONR_MASK,
188 },
189 [S5M8763_IRQ_WTSREVNT] = {
190 .reg_offset = 2,
191 .mask = S5M8763_IRQ_WTSREVNT_MASK,
192 },
193 [S5M8763_IRQ_SMPLEVNT] = {
194 .reg_offset = 2,
195 .mask = S5M8763_IRQ_SMPLEVNT_MASK,
196 },
197 [S5M8763_IRQ_ALARM1] = {
198 .reg_offset = 2,
199 .mask = S5M8763_IRQ_ALARM1_MASK,
200 },
201 [S5M8763_IRQ_ALARM0] = {
202 .reg_offset = 2,
203 .mask = S5M8763_IRQ_ALARM0_MASK,
204 },
205 [S5M8763_IRQ_ONKEY1S] = {
206 .reg_offset = 3,
207 .mask = S5M8763_IRQ_ONKEY1S_MASK,
208 },
209 [S5M8763_IRQ_TOPOFFR] = {
210 .reg_offset = 3,
211 .mask = S5M8763_IRQ_TOPOFFR_MASK,
212 },
213 [S5M8763_IRQ_DCINOVPR] = {
214 .reg_offset = 3,
215 .mask = S5M8763_IRQ_DCINOVPR_MASK,
216 },
217 [S5M8763_IRQ_CHGRSTF] = {
218 .reg_offset = 3,
219 .mask = S5M8763_IRQ_CHGRSTF_MASK,
220 },
221 [S5M8763_IRQ_DONER] = {
222 .reg_offset = 3,
223 .mask = S5M8763_IRQ_DONER_MASK,
224 },
225 [S5M8763_IRQ_CHGFAULT] = {
226 .reg_offset = 3,
227 .mask = S5M8763_IRQ_CHGFAULT_MASK,
228 },
229 [S5M8763_IRQ_LOBAT1] = {
230 .reg_offset = 4,
231 .mask = S5M8763_IRQ_LOBAT1_MASK,
232 },
233 [S5M8763_IRQ_LOBAT2] = {
234 .reg_offset = 4,
235 .mask = S5M8763_IRQ_LOBAT2_MASK,
236 },
237};
238
239static struct regmap_irq_chip s2mps11_irq_chip = {
240 .name = "s2mps11",
241 .irqs = s2mps11_irqs,
242 .num_irqs = ARRAY_SIZE(s2mps11_irqs),
243 .num_regs = 3,
244 .status_base = S2MPS11_REG_INT1,
245 .mask_base = S2MPS11_REG_INT1M,
246 .ack_base = S2MPS11_REG_INT1,
247};
248
249static struct regmap_irq_chip s5m8767_irq_chip = {
250 .name = "s5m8767",
251 .irqs = s5m8767_irqs,
252 .num_irqs = ARRAY_SIZE(s5m8767_irqs),
253 .num_regs = 3,
254 .status_base = S5M8767_REG_INT1,
255 .mask_base = S5M8767_REG_INT1M,
256 .ack_base = S5M8767_REG_INT1,
257};
258
259static struct regmap_irq_chip s5m8763_irq_chip = {
260 .name = "s5m8763",
261 .irqs = s5m8763_irqs,
262 .num_irqs = ARRAY_SIZE(s5m8763_irqs),
263 .num_regs = 4,
264 .status_base = S5M8763_REG_IRQ1,
265 .mask_base = S5M8763_REG_IRQM1,
266 .ack_base = S5M8763_REG_IRQ1,
267};
268
269int sec_irq_init(struct sec_pmic_dev *sec_pmic)
270{
271 int ret = 0;
272 int type = sec_pmic->device_type;
273
274 if (!sec_pmic->irq) {
275 dev_warn(sec_pmic->dev,
276 "No interrupt specified, no interrupts\n");
277 sec_pmic->irq_base = 0;
278 return 0;
279 }
280
281 switch (type) {
282 case S5M8763X:
283 ret = regmap_add_irq_chip(sec_pmic->regmap, sec_pmic->irq,
284 IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
285 sec_pmic->irq_base, &s5m8763_irq_chip,
286 &sec_pmic->irq_data);
287 break;
288 case S5M8767X:
289 ret = regmap_add_irq_chip(sec_pmic->regmap, sec_pmic->irq,
290 IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
291 sec_pmic->irq_base, &s5m8767_irq_chip,
292 &sec_pmic->irq_data);
293 break;
294 case S2MPS11X:
295 ret = regmap_add_irq_chip(sec_pmic->regmap, sec_pmic->irq,
296 IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
297 sec_pmic->irq_base, &s2mps11_irq_chip,
298 &sec_pmic->irq_data);
299 break;
300 default:
301 dev_err(sec_pmic->dev, "Unknown device type %d\n",
302 sec_pmic->device_type);
303 return -EINVAL;
304 }
305
306 if (ret != 0) {
307 dev_err(sec_pmic->dev, "Failed to register IRQ chip: %d\n", ret);
308 return ret;
309 }
310
311 return 0;
312}
313
314void sec_irq_exit(struct sec_pmic_dev *sec_pmic)
315{
316 regmap_del_irq_chip(sec_pmic->irq, sec_pmic->irq_data);
317}
diff --git a/drivers/mfd/tc3589x.c b/drivers/mfd/tc3589x.c
index de979742c6fc..048bf0532a09 100644
--- a/drivers/mfd/tc3589x.c
+++ b/drivers/mfd/tc3589x.c
@@ -357,7 +357,7 @@ static int __devexit tc3589x_remove(struct i2c_client *client)
357 return 0; 357 return 0;
358} 358}
359 359
360#ifdef CONFIG_PM 360#ifdef CONFIG_PM_SLEEP
361static int tc3589x_suspend(struct device *dev) 361static int tc3589x_suspend(struct device *dev)
362{ 362{
363 struct tc3589x *tc3589x = dev_get_drvdata(dev); 363 struct tc3589x *tc3589x = dev_get_drvdata(dev);
@@ -385,11 +385,10 @@ static int tc3589x_resume(struct device *dev)
385 385
386 return ret; 386 return ret;
387} 387}
388
389static const SIMPLE_DEV_PM_OPS(tc3589x_dev_pm_ops, tc3589x_suspend,
390 tc3589x_resume);
391#endif 388#endif
392 389
390static SIMPLE_DEV_PM_OPS(tc3589x_dev_pm_ops, tc3589x_suspend, tc3589x_resume);
391
393static const struct i2c_device_id tc3589x_id[] = { 392static const struct i2c_device_id tc3589x_id[] = {
394 { "tc3589x", 24 }, 393 { "tc3589x", 24 },
395 { } 394 { }
@@ -399,9 +398,7 @@ MODULE_DEVICE_TABLE(i2c, tc3589x_id);
399static struct i2c_driver tc3589x_driver = { 398static struct i2c_driver tc3589x_driver = {
400 .driver.name = "tc3589x", 399 .driver.name = "tc3589x",
401 .driver.owner = THIS_MODULE, 400 .driver.owner = THIS_MODULE,
402#ifdef CONFIG_PM
403 .driver.pm = &tc3589x_dev_pm_ops, 401 .driver.pm = &tc3589x_dev_pm_ops,
404#endif
405 .probe = tc3589x_probe, 402 .probe = tc3589x_probe,
406 .remove = __devexit_p(tc3589x_remove), 403 .remove = __devexit_p(tc3589x_remove),
407 .id_table = tc3589x_id, 404 .id_table = tc3589x_id,
diff --git a/drivers/mfd/tps65090.c b/drivers/mfd/tps65090.c
index 396b9d1b6bd6..80e24f4b47bf 100644
--- a/drivers/mfd/tps65090.c
+++ b/drivers/mfd/tps65090.c
@@ -71,10 +71,10 @@ static const struct tps65090_irq_data tps65090_irqs[] = {
71 71
72static struct mfd_cell tps65090s[] = { 72static struct mfd_cell tps65090s[] = {
73 { 73 {
74 .name = "tps65910-pmic", 74 .name = "tps65090-pmic",
75 }, 75 },
76 { 76 {
77 .name = "tps65910-regulator", 77 .name = "tps65090-regulator",
78 }, 78 },
79}; 79};
80 80
diff --git a/drivers/mfd/tps6586x.c b/drivers/mfd/tps6586x.c
index c84b5506d5fb..353c34812120 100644
--- a/drivers/mfd/tps6586x.c
+++ b/drivers/mfd/tps6586x.c
@@ -21,17 +21,14 @@
21#include <linux/module.h> 21#include <linux/module.h>
22#include <linux/mutex.h> 22#include <linux/mutex.h>
23#include <linux/slab.h> 23#include <linux/slab.h>
24#include <linux/gpio.h> 24#include <linux/err.h>
25#include <linux/i2c.h> 25#include <linux/i2c.h>
26#include <linux/regmap.h>
26#include <linux/regulator/of_regulator.h> 27#include <linux/regulator/of_regulator.h>
27 28
28#include <linux/mfd/core.h> 29#include <linux/mfd/core.h>
29#include <linux/mfd/tps6586x.h> 30#include <linux/mfd/tps6586x.h>
30 31
31/* GPIO control registers */
32#define TPS6586X_GPIOSET1 0x5d
33#define TPS6586X_GPIOSET2 0x5e
34
35/* interrupt control registers */ 32/* interrupt control registers */
36#define TPS6586X_INT_ACK1 0xb5 33#define TPS6586X_INT_ACK1 0xb5
37#define TPS6586X_INT_ACK2 0xb6 34#define TPS6586X_INT_ACK2 0xb6
@@ -48,6 +45,9 @@
48/* device id */ 45/* device id */
49#define TPS6586X_VERSIONCRC 0xcd 46#define TPS6586X_VERSIONCRC 0xcd
50 47
48/* Maximum register */
49#define TPS6586X_MAX_REGISTER (TPS6586X_VERSIONCRC + 1)
50
51struct tps6586x_irq_data { 51struct tps6586x_irq_data {
52 u8 mask_reg; 52 u8 mask_reg;
53 u8 mask_mask; 53 u8 mask_mask;
@@ -89,226 +89,96 @@ static const struct tps6586x_irq_data tps6586x_irqs[] = {
89 [TPS6586X_INT_RTC_ALM2] = TPS6586X_IRQ(TPS6586X_INT_MASK4, 1 << 1), 89 [TPS6586X_INT_RTC_ALM2] = TPS6586X_IRQ(TPS6586X_INT_MASK4, 1 << 1),
90}; 90};
91 91
92static struct mfd_cell tps6586x_cell[] = {
93 {
94 .name = "tps6586x-gpio",
95 },
96 {
97 .name = "tps6586x-rtc",
98 },
99 {
100 .name = "tps6586x-onkey",
101 },
102};
103
92struct tps6586x { 104struct tps6586x {
93 struct mutex lock;
94 struct device *dev; 105 struct device *dev;
95 struct i2c_client *client; 106 struct i2c_client *client;
107 struct regmap *regmap;
96 108
97 struct gpio_chip gpio;
98 struct irq_chip irq_chip; 109 struct irq_chip irq_chip;
99 struct mutex irq_lock; 110 struct mutex irq_lock;
100 int irq_base; 111 int irq_base;
101 u32 irq_en; 112 u32 irq_en;
102 u8 mask_cache[5];
103 u8 mask_reg[5]; 113 u8 mask_reg[5];
104}; 114};
105 115
106static inline int __tps6586x_read(struct i2c_client *client, 116static inline struct tps6586x *dev_to_tps6586x(struct device *dev)
107 int reg, uint8_t *val)
108{
109 int ret;
110
111 ret = i2c_smbus_read_byte_data(client, reg);
112 if (ret < 0) {
113 dev_err(&client->dev, "failed reading at 0x%02x\n", reg);
114 return ret;
115 }
116
117 *val = (uint8_t)ret;
118
119 return 0;
120}
121
122static inline int __tps6586x_reads(struct i2c_client *client, int reg,
123 int len, uint8_t *val)
124{
125 int ret;
126
127 ret = i2c_smbus_read_i2c_block_data(client, reg, len, val);
128 if (ret < 0) {
129 dev_err(&client->dev, "failed reading from 0x%02x\n", reg);
130 return ret;
131 }
132
133 return 0;
134}
135
136static inline int __tps6586x_write(struct i2c_client *client,
137 int reg, uint8_t val)
138{ 117{
139 int ret; 118 return i2c_get_clientdata(to_i2c_client(dev));
140
141 ret = i2c_smbus_write_byte_data(client, reg, val);
142 if (ret < 0) {
143 dev_err(&client->dev, "failed writing 0x%02x to 0x%02x\n",
144 val, reg);
145 return ret;
146 }
147
148 return 0;
149}
150
151static inline int __tps6586x_writes(struct i2c_client *client, int reg,
152 int len, uint8_t *val)
153{
154 int ret, i;
155
156 for (i = 0; i < len; i++) {
157 ret = __tps6586x_write(client, reg + i, *(val + i));
158 if (ret < 0)
159 return ret;
160 }
161
162 return 0;
163} 119}
164 120
165int tps6586x_write(struct device *dev, int reg, uint8_t val) 121int tps6586x_write(struct device *dev, int reg, uint8_t val)
166{ 122{
167 return __tps6586x_write(to_i2c_client(dev), reg, val); 123 struct tps6586x *tps6586x = dev_to_tps6586x(dev);
124
125 return regmap_write(tps6586x->regmap, reg, val);
168} 126}
169EXPORT_SYMBOL_GPL(tps6586x_write); 127EXPORT_SYMBOL_GPL(tps6586x_write);
170 128
171int tps6586x_writes(struct device *dev, int reg, int len, uint8_t *val) 129int tps6586x_writes(struct device *dev, int reg, int len, uint8_t *val)
172{ 130{
173 return __tps6586x_writes(to_i2c_client(dev), reg, len, val); 131 struct tps6586x *tps6586x = dev_to_tps6586x(dev);
132
133 return regmap_bulk_write(tps6586x->regmap, reg, val, len);
174} 134}
175EXPORT_SYMBOL_GPL(tps6586x_writes); 135EXPORT_SYMBOL_GPL(tps6586x_writes);
176 136
177int tps6586x_read(struct device *dev, int reg, uint8_t *val) 137int tps6586x_read(struct device *dev, int reg, uint8_t *val)
178{ 138{
179 return __tps6586x_read(to_i2c_client(dev), reg, val); 139 struct tps6586x *tps6586x = dev_to_tps6586x(dev);
140 unsigned int rval;
141 int ret;
142
143 ret = regmap_read(tps6586x->regmap, reg, &rval);
144 if (!ret)
145 *val = rval;
146 return ret;
180} 147}
181EXPORT_SYMBOL_GPL(tps6586x_read); 148EXPORT_SYMBOL_GPL(tps6586x_read);
182 149
183int tps6586x_reads(struct device *dev, int reg, int len, uint8_t *val) 150int tps6586x_reads(struct device *dev, int reg, int len, uint8_t *val)
184{ 151{
185 return __tps6586x_reads(to_i2c_client(dev), reg, len, val); 152 struct tps6586x *tps6586x = dev_to_tps6586x(dev);
153
154 return regmap_bulk_read(tps6586x->regmap, reg, val, len);
186} 155}
187EXPORT_SYMBOL_GPL(tps6586x_reads); 156EXPORT_SYMBOL_GPL(tps6586x_reads);
188 157
189int tps6586x_set_bits(struct device *dev, int reg, uint8_t bit_mask) 158int tps6586x_set_bits(struct device *dev, int reg, uint8_t bit_mask)
190{ 159{
191 struct tps6586x *tps6586x = dev_get_drvdata(dev); 160 struct tps6586x *tps6586x = dev_to_tps6586x(dev);
192 uint8_t reg_val;
193 int ret = 0;
194
195 mutex_lock(&tps6586x->lock);
196 161
197 ret = __tps6586x_read(to_i2c_client(dev), reg, &reg_val); 162 return regmap_update_bits(tps6586x->regmap, reg, bit_mask, bit_mask);
198 if (ret)
199 goto out;
200
201 if ((reg_val & bit_mask) != bit_mask) {
202 reg_val |= bit_mask;
203 ret = __tps6586x_write(to_i2c_client(dev), reg, reg_val);
204 }
205out:
206 mutex_unlock(&tps6586x->lock);
207 return ret;
208} 163}
209EXPORT_SYMBOL_GPL(tps6586x_set_bits); 164EXPORT_SYMBOL_GPL(tps6586x_set_bits);
210 165
211int tps6586x_clr_bits(struct device *dev, int reg, uint8_t bit_mask) 166int tps6586x_clr_bits(struct device *dev, int reg, uint8_t bit_mask)
212{ 167{
213 struct tps6586x *tps6586x = dev_get_drvdata(dev); 168 struct tps6586x *tps6586x = dev_to_tps6586x(dev);
214 uint8_t reg_val;
215 int ret = 0;
216
217 mutex_lock(&tps6586x->lock);
218 169
219 ret = __tps6586x_read(to_i2c_client(dev), reg, &reg_val); 170 return regmap_update_bits(tps6586x->regmap, reg, bit_mask, 0);
220 if (ret)
221 goto out;
222
223 if (reg_val & bit_mask) {
224 reg_val &= ~bit_mask;
225 ret = __tps6586x_write(to_i2c_client(dev), reg, reg_val);
226 }
227out:
228 mutex_unlock(&tps6586x->lock);
229 return ret;
230} 171}
231EXPORT_SYMBOL_GPL(tps6586x_clr_bits); 172EXPORT_SYMBOL_GPL(tps6586x_clr_bits);
232 173
233int tps6586x_update(struct device *dev, int reg, uint8_t val, uint8_t mask) 174int tps6586x_update(struct device *dev, int reg, uint8_t val, uint8_t mask)
234{ 175{
235 struct tps6586x *tps6586x = dev_get_drvdata(dev); 176 struct tps6586x *tps6586x = dev_to_tps6586x(dev);
236 uint8_t reg_val;
237 int ret = 0;
238
239 mutex_lock(&tps6586x->lock);
240 177
241 ret = __tps6586x_read(tps6586x->client, reg, &reg_val); 178 return regmap_update_bits(tps6586x->regmap, reg, mask, val);
242 if (ret)
243 goto out;
244
245 if ((reg_val & mask) != val) {
246 reg_val = (reg_val & ~mask) | val;
247 ret = __tps6586x_write(tps6586x->client, reg, reg_val);
248 }
249out:
250 mutex_unlock(&tps6586x->lock);
251 return ret;
252} 179}
253EXPORT_SYMBOL_GPL(tps6586x_update); 180EXPORT_SYMBOL_GPL(tps6586x_update);
254 181
255static int tps6586x_gpio_get(struct gpio_chip *gc, unsigned offset)
256{
257 struct tps6586x *tps6586x = container_of(gc, struct tps6586x, gpio);
258 uint8_t val;
259 int ret;
260
261 ret = __tps6586x_read(tps6586x->client, TPS6586X_GPIOSET2, &val);
262 if (ret)
263 return ret;
264
265 return !!(val & (1 << offset));
266}
267
268
269static void tps6586x_gpio_set(struct gpio_chip *chip, unsigned offset,
270 int value)
271{
272 struct tps6586x *tps6586x = container_of(chip, struct tps6586x, gpio);
273
274 tps6586x_update(tps6586x->dev, TPS6586X_GPIOSET2,
275 value << offset, 1 << offset);
276}
277
278static int tps6586x_gpio_output(struct gpio_chip *gc, unsigned offset,
279 int value)
280{
281 struct tps6586x *tps6586x = container_of(gc, struct tps6586x, gpio);
282 uint8_t val, mask;
283
284 tps6586x_gpio_set(gc, offset, value);
285
286 val = 0x1 << (offset * 2);
287 mask = 0x3 << (offset * 2);
288
289 return tps6586x_update(tps6586x->dev, TPS6586X_GPIOSET1, val, mask);
290}
291
292static int tps6586x_gpio_init(struct tps6586x *tps6586x, int gpio_base)
293{
294 if (!gpio_base)
295 return 0;
296
297 tps6586x->gpio.owner = THIS_MODULE;
298 tps6586x->gpio.label = tps6586x->client->name;
299 tps6586x->gpio.dev = tps6586x->dev;
300 tps6586x->gpio.base = gpio_base;
301 tps6586x->gpio.ngpio = 4;
302 tps6586x->gpio.can_sleep = 1;
303
304 /* FIXME: add handling of GPIOs as dedicated inputs */
305 tps6586x->gpio.direction_output = tps6586x_gpio_output;
306 tps6586x->gpio.set = tps6586x_gpio_set;
307 tps6586x->gpio.get = tps6586x_gpio_get;
308
309 return gpiochip_add(&tps6586x->gpio);
310}
311
312static int __remove_subdev(struct device *dev, void *unused) 182static int __remove_subdev(struct device *dev, void *unused)
313{ 183{
314 platform_device_unregister(to_platform_device(dev)); 184 platform_device_unregister(to_platform_device(dev));
@@ -354,12 +224,11 @@ static void tps6586x_irq_sync_unlock(struct irq_data *data)
354 int i; 224 int i;
355 225
356 for (i = 0; i < ARRAY_SIZE(tps6586x->mask_reg); i++) { 226 for (i = 0; i < ARRAY_SIZE(tps6586x->mask_reg); i++) {
357 if (tps6586x->mask_reg[i] != tps6586x->mask_cache[i]) { 227 int ret;
358 if (!WARN_ON(tps6586x_write(tps6586x->dev, 228 ret = tps6586x_write(tps6586x->dev,
359 TPS6586X_INT_MASK1 + i, 229 TPS6586X_INT_MASK1 + i,
360 tps6586x->mask_reg[i]))) 230 tps6586x->mask_reg[i]);
361 tps6586x->mask_cache[i] = tps6586x->mask_reg[i]; 231 WARN_ON(ret);
362 }
363 } 232 }
364 233
365 mutex_unlock(&tps6586x->irq_lock); 234 mutex_unlock(&tps6586x->irq_lock);
@@ -406,7 +275,6 @@ static int __devinit tps6586x_irq_init(struct tps6586x *tps6586x, int irq,
406 275
407 mutex_init(&tps6586x->irq_lock); 276 mutex_init(&tps6586x->irq_lock);
408 for (i = 0; i < 5; i++) { 277 for (i = 0; i < 5; i++) {
409 tps6586x->mask_cache[i] = 0xff;
410 tps6586x->mask_reg[i] = 0xff; 278 tps6586x->mask_reg[i] = 0xff;
411 tps6586x_write(tps6586x->dev, TPS6586X_INT_MASK1 + i, 0xff); 279 tps6586x_write(tps6586x->dev, TPS6586X_INT_MASK1 + i, 0xff);
412 } 280 }
@@ -556,6 +424,23 @@ static struct tps6586x_platform_data *tps6586x_parse_dt(struct i2c_client *clien
556} 424}
557#endif 425#endif
558 426
427static bool is_volatile_reg(struct device *dev, unsigned int reg)
428{
429 /* Cache all interrupt mask register */
430 if ((reg >= TPS6586X_INT_MASK1) && (reg <= TPS6586X_INT_MASK5))
431 return false;
432
433 return true;
434}
435
436static const struct regmap_config tps6586x_regmap_config = {
437 .reg_bits = 8,
438 .val_bits = 8,
439 .max_register = TPS6586X_MAX_REGISTER - 1,
440 .volatile_reg = is_volatile_reg,
441 .cache_type = REGCACHE_RBTREE,
442};
443
559static int __devinit tps6586x_i2c_probe(struct i2c_client *client, 444static int __devinit tps6586x_i2c_probe(struct i2c_client *client,
560 const struct i2c_device_id *id) 445 const struct i2c_device_id *id)
561{ 446{
@@ -579,29 +464,39 @@ static int __devinit tps6586x_i2c_probe(struct i2c_client *client,
579 464
580 dev_info(&client->dev, "VERSIONCRC is %02x\n", ret); 465 dev_info(&client->dev, "VERSIONCRC is %02x\n", ret);
581 466
582 tps6586x = kzalloc(sizeof(struct tps6586x), GFP_KERNEL); 467 tps6586x = devm_kzalloc(&client->dev, sizeof(*tps6586x), GFP_KERNEL);
583 if (tps6586x == NULL) 468 if (tps6586x == NULL) {
469 dev_err(&client->dev, "memory for tps6586x alloc failed\n");
584 return -ENOMEM; 470 return -ENOMEM;
471 }
585 472
586 tps6586x->client = client; 473 tps6586x->client = client;
587 tps6586x->dev = &client->dev; 474 tps6586x->dev = &client->dev;
588 i2c_set_clientdata(client, tps6586x); 475 i2c_set_clientdata(client, tps6586x);
589 476
590 mutex_init(&tps6586x->lock); 477 tps6586x->regmap = devm_regmap_init_i2c(client,
478 &tps6586x_regmap_config);
479 if (IS_ERR(tps6586x->regmap)) {
480 ret = PTR_ERR(tps6586x->regmap);
481 dev_err(&client->dev, "regmap init failed: %d\n", ret);
482 return ret;
483 }
484
591 485
592 if (client->irq) { 486 if (client->irq) {
593 ret = tps6586x_irq_init(tps6586x, client->irq, 487 ret = tps6586x_irq_init(tps6586x, client->irq,
594 pdata->irq_base); 488 pdata->irq_base);
595 if (ret) { 489 if (ret) {
596 dev_err(&client->dev, "IRQ init failed: %d\n", ret); 490 dev_err(&client->dev, "IRQ init failed: %d\n", ret);
597 goto err_irq_init; 491 return ret;
598 } 492 }
599 } 493 }
600 494
601 ret = tps6586x_gpio_init(tps6586x, pdata->gpio_base); 495 ret = mfd_add_devices(tps6586x->dev, -1,
602 if (ret) { 496 tps6586x_cell, ARRAY_SIZE(tps6586x_cell), NULL, 0);
603 dev_err(&client->dev, "GPIO registration failed: %d\n", ret); 497 if (ret < 0) {
604 goto err_gpio_init; 498 dev_err(&client->dev, "mfd_add_devices failed: %d\n", ret);
499 goto err_mfd_add;
605 } 500 }
606 501
607 ret = tps6586x_add_subdevs(tps6586x, pdata); 502 ret = tps6586x_add_subdevs(tps6586x, pdata);
@@ -613,38 +508,21 @@ static int __devinit tps6586x_i2c_probe(struct i2c_client *client,
613 return 0; 508 return 0;
614 509
615err_add_devs: 510err_add_devs:
616 if (pdata->gpio_base) { 511 mfd_remove_devices(tps6586x->dev);
617 ret = gpiochip_remove(&tps6586x->gpio); 512err_mfd_add:
618 if (ret)
619 dev_err(&client->dev, "Can't remove gpio chip: %d\n",
620 ret);
621 }
622err_gpio_init:
623 if (client->irq) 513 if (client->irq)
624 free_irq(client->irq, tps6586x); 514 free_irq(client->irq, tps6586x);
625err_irq_init:
626 kfree(tps6586x);
627 return ret; 515 return ret;
628} 516}
629 517
630static int __devexit tps6586x_i2c_remove(struct i2c_client *client) 518static int __devexit tps6586x_i2c_remove(struct i2c_client *client)
631{ 519{
632 struct tps6586x *tps6586x = i2c_get_clientdata(client); 520 struct tps6586x *tps6586x = i2c_get_clientdata(client);
633 struct tps6586x_platform_data *pdata = client->dev.platform_data;
634 int ret;
635 521
522 tps6586x_remove_subdevs(tps6586x);
523 mfd_remove_devices(tps6586x->dev);
636 if (client->irq) 524 if (client->irq)
637 free_irq(client->irq, tps6586x); 525 free_irq(client->irq, tps6586x);
638
639 if (pdata->gpio_base) {
640 ret = gpiochip_remove(&tps6586x->gpio);
641 if (ret)
642 dev_err(&client->dev, "Can't remove gpio chip: %d\n",
643 ret);
644 }
645
646 tps6586x_remove_subdevs(tps6586x);
647 kfree(tps6586x);
648 return 0; 526 return 0;
649} 527}
650 528
diff --git a/drivers/mfd/tps65910.c b/drivers/mfd/tps65910.c
index be9e07b77325..1c563792c777 100644
--- a/drivers/mfd/tps65910.c
+++ b/drivers/mfd/tps65910.c
@@ -68,6 +68,24 @@ static const struct regmap_config tps65910_regmap_config = {
68 .cache_type = REGCACHE_RBTREE, 68 .cache_type = REGCACHE_RBTREE,
69}; 69};
70 70
71static int __devinit tps65910_ck32k_init(struct tps65910 *tps65910,
72 struct tps65910_board *pmic_pdata)
73{
74 int ret;
75
76 if (!pmic_pdata->en_ck32k_xtal)
77 return 0;
78
79 ret = tps65910_reg_clear_bits(tps65910, TPS65910_DEVCTRL,
80 DEVCTRL_CK32K_CTRL_MASK);
81 if (ret < 0) {
82 dev_err(tps65910->dev, "clear ck32k_ctrl failed: %d\n", ret);
83 return ret;
84 }
85
86 return 0;
87}
88
71static int __devinit tps65910_sleepinit(struct tps65910 *tps65910, 89static int __devinit tps65910_sleepinit(struct tps65910 *tps65910,
72 struct tps65910_board *pmic_pdata) 90 struct tps65910_board *pmic_pdata)
73{ 91{
@@ -175,6 +193,9 @@ static struct tps65910_board *tps65910_parse_dt(struct i2c_client *client,
175 else if (*chip_id == TPS65911) 193 else if (*chip_id == TPS65911)
176 dev_warn(&client->dev, "VMBCH2-Threshold not specified"); 194 dev_warn(&client->dev, "VMBCH2-Threshold not specified");
177 195
196 prop = of_property_read_bool(np, "ti,en-ck32k-xtal");
197 board_info->en_ck32k_xtal = prop;
198
178 board_info->irq = client->irq; 199 board_info->irq = client->irq;
179 board_info->irq_base = -1; 200 board_info->irq_base = -1;
180 201
@@ -243,7 +264,7 @@ static __devinit int tps65910_i2c_probe(struct i2c_client *i2c,
243 init_data->irq_base = pmic_plat_data->irq_base; 264 init_data->irq_base = pmic_plat_data->irq_base;
244 265
245 tps65910_irq_init(tps65910, init_data->irq, init_data); 266 tps65910_irq_init(tps65910, init_data->irq, init_data);
246 267 tps65910_ck32k_init(tps65910, pmic_plat_data);
247 tps65910_sleepinit(tps65910, pmic_plat_data); 268 tps65910_sleepinit(tps65910, pmic_plat_data);
248 269
249 return ret; 270 return ret;
diff --git a/drivers/mfd/twl-core.c b/drivers/mfd/twl-core.c
index 6fc90befa79e..b012efd29e01 100644
--- a/drivers/mfd/twl-core.c
+++ b/drivers/mfd/twl-core.c
@@ -568,7 +568,6 @@ add_numbered_child(unsigned chip, const char *name, int num,
568 goto err; 568 goto err;
569 } 569 }
570 570
571 device_init_wakeup(&pdev->dev, can_wakeup);
572 pdev->dev.parent = &twl->client->dev; 571 pdev->dev.parent = &twl->client->dev;
573 572
574 if (pdata) { 573 if (pdata) {
@@ -593,6 +592,8 @@ add_numbered_child(unsigned chip, const char *name, int num,
593 } 592 }
594 593
595 status = platform_device_add(pdev); 594 status = platform_device_add(pdev);
595 if (status == 0)
596 device_init_wakeup(&pdev->dev, can_wakeup);
596 597
597err: 598err:
598 if (status < 0) { 599 if (status < 0) {
diff --git a/drivers/mfd/twl6040-core.c b/drivers/mfd/twl6040-core.c
index 4ded9e7aa246..b0fad0ffca56 100644
--- a/drivers/mfd/twl6040-core.c
+++ b/drivers/mfd/twl6040-core.c
@@ -64,19 +64,15 @@ int twl6040_reg_read(struct twl6040 *twl6040, unsigned int reg)
64 int ret; 64 int ret;
65 unsigned int val; 65 unsigned int val;
66 66
67 mutex_lock(&twl6040->io_mutex);
68 /* Vibra control registers from cache */ 67 /* Vibra control registers from cache */
69 if (unlikely(reg == TWL6040_REG_VIBCTLL || 68 if (unlikely(reg == TWL6040_REG_VIBCTLL ||
70 reg == TWL6040_REG_VIBCTLR)) { 69 reg == TWL6040_REG_VIBCTLR)) {
71 val = twl6040->vibra_ctrl_cache[VIBRACTRL_MEMBER(reg)]; 70 val = twl6040->vibra_ctrl_cache[VIBRACTRL_MEMBER(reg)];
72 } else { 71 } else {
73 ret = regmap_read(twl6040->regmap, reg, &val); 72 ret = regmap_read(twl6040->regmap, reg, &val);
74 if (ret < 0) { 73 if (ret < 0)
75 mutex_unlock(&twl6040->io_mutex);
76 return ret; 74 return ret;
77 }
78 } 75 }
79 mutex_unlock(&twl6040->io_mutex);
80 76
81 return val; 77 return val;
82} 78}
@@ -86,12 +82,10 @@ int twl6040_reg_write(struct twl6040 *twl6040, unsigned int reg, u8 val)
86{ 82{
87 int ret; 83 int ret;
88 84
89 mutex_lock(&twl6040->io_mutex);
90 ret = regmap_write(twl6040->regmap, reg, val); 85 ret = regmap_write(twl6040->regmap, reg, val);
91 /* Cache the vibra control registers */ 86 /* Cache the vibra control registers */
92 if (reg == TWL6040_REG_VIBCTLL || reg == TWL6040_REG_VIBCTLR) 87 if (reg == TWL6040_REG_VIBCTLL || reg == TWL6040_REG_VIBCTLR)
93 twl6040->vibra_ctrl_cache[VIBRACTRL_MEMBER(reg)] = val; 88 twl6040->vibra_ctrl_cache[VIBRACTRL_MEMBER(reg)] = val;
94 mutex_unlock(&twl6040->io_mutex);
95 89
96 return ret; 90 return ret;
97} 91}
@@ -99,23 +93,13 @@ EXPORT_SYMBOL(twl6040_reg_write);
99 93
100int twl6040_set_bits(struct twl6040 *twl6040, unsigned int reg, u8 mask) 94int twl6040_set_bits(struct twl6040 *twl6040, unsigned int reg, u8 mask)
101{ 95{
102 int ret; 96 return regmap_update_bits(twl6040->regmap, reg, mask, mask);
103
104 mutex_lock(&twl6040->io_mutex);
105 ret = regmap_update_bits(twl6040->regmap, reg, mask, mask);
106 mutex_unlock(&twl6040->io_mutex);
107 return ret;
108} 97}
109EXPORT_SYMBOL(twl6040_set_bits); 98EXPORT_SYMBOL(twl6040_set_bits);
110 99
111int twl6040_clear_bits(struct twl6040 *twl6040, unsigned int reg, u8 mask) 100int twl6040_clear_bits(struct twl6040 *twl6040, unsigned int reg, u8 mask)
112{ 101{
113 int ret; 102 return regmap_update_bits(twl6040->regmap, reg, mask, 0);
114
115 mutex_lock(&twl6040->io_mutex);
116 ret = regmap_update_bits(twl6040->regmap, reg, mask, 0);
117 mutex_unlock(&twl6040->io_mutex);
118 return ret;
119} 103}
120EXPORT_SYMBOL(twl6040_clear_bits); 104EXPORT_SYMBOL(twl6040_clear_bits);
121 105
@@ -573,7 +557,6 @@ static int __devinit twl6040_probe(struct i2c_client *client,
573 twl6040->irq = client->irq; 557 twl6040->irq = client->irq;
574 558
575 mutex_init(&twl6040->mutex); 559 mutex_init(&twl6040->mutex);
576 mutex_init(&twl6040->io_mutex);
577 init_completion(&twl6040->ready); 560 init_completion(&twl6040->ready);
578 561
579 twl6040->rev = twl6040_reg_read(twl6040, TWL6040_REG_ASICREV); 562 twl6040->rev = twl6040_reg_read(twl6040, TWL6040_REG_ASICREV);
@@ -696,6 +679,7 @@ static int __devexit twl6040_remove(struct i2c_client *client)
696 679
697static const struct i2c_device_id twl6040_i2c_id[] = { 680static const struct i2c_device_id twl6040_i2c_id[] = {
698 { "twl6040", 0, }, 681 { "twl6040", 0, },
682 { "twl6041", 0, },
699 { }, 683 { },
700}; 684};
701MODULE_DEVICE_TABLE(i2c, twl6040_i2c_id); 685MODULE_DEVICE_TABLE(i2c, twl6040_i2c_id);
diff --git a/drivers/mfd/wm5102-tables.c b/drivers/mfd/wm5102-tables.c
new file mode 100644
index 000000000000..01b9255ed631
--- /dev/null
+++ b/drivers/mfd/wm5102-tables.c
@@ -0,0 +1,2399 @@
1/*
2 * wm5102-tables.c -- WM5102 data tables
3 *
4 * Copyright 2012 Wolfson Microelectronics plc
5 *
6 * Author: Mark Brown <broonie@opensource.wolfsonmicro.com>
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License version 2 as
10 * published by the Free Software Foundation.
11 */
12
13#include <linux/module.h>
14
15#include <linux/mfd/arizona/core.h>
16#include <linux/mfd/arizona/registers.h>
17
18#include "arizona.h"
19
20#define WM5102_NUM_AOD_ISR 2
21#define WM5102_NUM_ISR 5
22
23static const struct reg_default wm5102_reva_patch[] = {
24 { 0x80, 0x0003 },
25 { 0x221, 0x0090 },
26 { 0x211, 0x0014 },
27 { 0x212, 0x0000 },
28 { 0x214, 0x000C },
29 { 0x171, 0x0002 },
30 { 0x171, 0x0000 },
31 { 0x461, 0x8000 },
32 { 0x463, 0x50F0 },
33 { 0x465, 0x4820 },
34 { 0x467, 0x4040 },
35 { 0x469, 0x3940 },
36 { 0x46B, 0x3310 },
37 { 0x46D, 0x2D80 },
38 { 0x46F, 0x2890 },
39 { 0x471, 0x1990 },
40 { 0x473, 0x1450 },
41 { 0x475, 0x1020 },
42 { 0x477, 0x0CD0 },
43 { 0x479, 0x0A30 },
44 { 0x47B, 0x0810 },
45 { 0x47D, 0x0510 },
46 { 0x500, 0x000D },
47 { 0x507, 0x1820 },
48 { 0x508, 0x1820 },
49 { 0x540, 0x000D },
50 { 0x547, 0x1820 },
51 { 0x548, 0x1820 },
52 { 0x580, 0x000D },
53 { 0x587, 0x1820 },
54 { 0x588, 0x1820 },
55 { 0x101, 0x8140 },
56 { 0x3000, 0x2225 },
57 { 0x3001, 0x3a03 },
58 { 0x3002, 0x0225 },
59 { 0x3003, 0x0801 },
60 { 0x3004, 0x6249 },
61 { 0x3005, 0x0c04 },
62 { 0x3006, 0x0225 },
63 { 0x3007, 0x5901 },
64 { 0x3008, 0xe249 },
65 { 0x3009, 0x030d },
66 { 0x300a, 0x0249 },
67 { 0x300b, 0x2c01 },
68 { 0x300c, 0xe249 },
69 { 0x300d, 0x4342 },
70 { 0x300e, 0xe249 },
71 { 0x300f, 0x73c0 },
72 { 0x3010, 0x4249 },
73 { 0x3011, 0x0c00 },
74 { 0x3012, 0x0225 },
75 { 0x3013, 0x1f01 },
76 { 0x3014, 0x0225 },
77 { 0x3015, 0x1e01 },
78 { 0x3016, 0x0225 },
79 { 0x3017, 0xfa00 },
80 { 0x3018, 0x0000 },
81 { 0x3019, 0xf000 },
82 { 0x301a, 0x0000 },
83 { 0x301b, 0xf000 },
84 { 0x301c, 0x0000 },
85 { 0x301d, 0xf000 },
86 { 0x301e, 0x0000 },
87 { 0x301f, 0xf000 },
88 { 0x3020, 0x0000 },
89 { 0x3021, 0xf000 },
90 { 0x3022, 0x0000 },
91 { 0x3023, 0xf000 },
92 { 0x3024, 0x0000 },
93 { 0x3025, 0xf000 },
94 { 0x3026, 0x0000 },
95 { 0x3027, 0xf000 },
96 { 0x3028, 0x0000 },
97 { 0x3029, 0xf000 },
98 { 0x302a, 0x0000 },
99 { 0x302b, 0xf000 },
100 { 0x302c, 0x0000 },
101 { 0x302d, 0xf000 },
102 { 0x302e, 0x0000 },
103 { 0x302f, 0xf000 },
104 { 0x3030, 0x0225 },
105 { 0x3031, 0x1a01 },
106 { 0x3032, 0x0225 },
107 { 0x3033, 0x1e00 },
108 { 0x3034, 0x0225 },
109 { 0x3035, 0x1f00 },
110 { 0x3036, 0x6225 },
111 { 0x3037, 0xf800 },
112 { 0x3038, 0x0000 },
113 { 0x3039, 0xf000 },
114 { 0x303a, 0x0000 },
115 { 0x303b, 0xf000 },
116 { 0x303c, 0x0000 },
117 { 0x303d, 0xf000 },
118 { 0x303e, 0x0000 },
119 { 0x303f, 0xf000 },
120 { 0x3040, 0x2226 },
121 { 0x3041, 0x3a03 },
122 { 0x3042, 0x0226 },
123 { 0x3043, 0x0801 },
124 { 0x3044, 0x6249 },
125 { 0x3045, 0x0c06 },
126 { 0x3046, 0x0226 },
127 { 0x3047, 0x5901 },
128 { 0x3048, 0xe249 },
129 { 0x3049, 0x030d },
130 { 0x304a, 0x0249 },
131 { 0x304b, 0x2c01 },
132 { 0x304c, 0xe249 },
133 { 0x304d, 0x4342 },
134 { 0x304e, 0xe249 },
135 { 0x304f, 0x73c0 },
136 { 0x3050, 0x4249 },
137 { 0x3051, 0x0c00 },
138 { 0x3052, 0x0226 },
139 { 0x3053, 0x1f01 },
140 { 0x3054, 0x0226 },
141 { 0x3055, 0x1e01 },
142 { 0x3056, 0x0226 },
143 { 0x3057, 0xfa00 },
144 { 0x3058, 0x0000 },
145 { 0x3059, 0xf000 },
146 { 0x305a, 0x0000 },
147 { 0x305b, 0xf000 },
148 { 0x305c, 0x0000 },
149 { 0x305d, 0xf000 },
150 { 0x305e, 0x0000 },
151 { 0x305f, 0xf000 },
152 { 0x3060, 0x0000 },
153 { 0x3061, 0xf000 },
154 { 0x3062, 0x0000 },
155 { 0x3063, 0xf000 },
156 { 0x3064, 0x0000 },
157 { 0x3065, 0xf000 },
158 { 0x3066, 0x0000 },
159 { 0x3067, 0xf000 },
160 { 0x3068, 0x0000 },
161 { 0x3069, 0xf000 },
162 { 0x306a, 0x0000 },
163 { 0x306b, 0xf000 },
164 { 0x306c, 0x0000 },
165 { 0x306d, 0xf000 },
166 { 0x306e, 0x0000 },
167 { 0x306f, 0xf000 },
168 { 0x3070, 0x0226 },
169 { 0x3071, 0x1a01 },
170 { 0x3072, 0x0226 },
171 { 0x3073, 0x1e00 },
172 { 0x3074, 0x0226 },
173 { 0x3075, 0x1f00 },
174 { 0x3076, 0x6226 },
175 { 0x3077, 0xf800 },
176 { 0x3078, 0x0000 },
177 { 0x3079, 0xf000 },
178 { 0x307a, 0x0000 },
179 { 0x307b, 0xf000 },
180 { 0x307c, 0x0000 },
181 { 0x307d, 0xf000 },
182 { 0x307e, 0x0000 },
183 { 0x307f, 0xf000 },
184 { 0x3080, 0x2227 },
185 { 0x3081, 0x3a03 },
186 { 0x3082, 0x0227 },
187 { 0x3083, 0x0801 },
188 { 0x3084, 0x6255 },
189 { 0x3085, 0x0c04 },
190 { 0x3086, 0x0227 },
191 { 0x3087, 0x5901 },
192 { 0x3088, 0xe255 },
193 { 0x3089, 0x030d },
194 { 0x308a, 0x0255 },
195 { 0x308b, 0x2c01 },
196 { 0x308c, 0xe255 },
197 { 0x308d, 0x4342 },
198 { 0x308e, 0xe255 },
199 { 0x308f, 0x73c0 },
200 { 0x3090, 0x4255 },
201 { 0x3091, 0x0c00 },
202 { 0x3092, 0x0227 },
203 { 0x3093, 0x1f01 },
204 { 0x3094, 0x0227 },
205 { 0x3095, 0x1e01 },
206 { 0x3096, 0x0227 },
207 { 0x3097, 0xfa00 },
208 { 0x3098, 0x0000 },
209 { 0x3099, 0xf000 },
210 { 0x309a, 0x0000 },
211 { 0x309b, 0xf000 },
212 { 0x309c, 0x0000 },
213 { 0x309d, 0xf000 },
214 { 0x309e, 0x0000 },
215 { 0x309f, 0xf000 },
216 { 0x30a0, 0x0000 },
217 { 0x30a1, 0xf000 },
218 { 0x30a2, 0x0000 },
219 { 0x30a3, 0xf000 },
220 { 0x30a4, 0x0000 },
221 { 0x30a5, 0xf000 },
222 { 0x30a6, 0x0000 },
223 { 0x30a7, 0xf000 },
224 { 0x30a8, 0x0000 },
225 { 0x30a9, 0xf000 },
226 { 0x30aa, 0x0000 },
227 { 0x30ab, 0xf000 },
228 { 0x30ac, 0x0000 },
229 { 0x30ad, 0xf000 },
230 { 0x30ae, 0x0000 },
231 { 0x30af, 0xf000 },
232 { 0x30b0, 0x0227 },
233 { 0x30b1, 0x1a01 },
234 { 0x30b2, 0x0227 },
235 { 0x30b3, 0x1e00 },
236 { 0x30b4, 0x0227 },
237 { 0x30b5, 0x1f00 },
238 { 0x30b6, 0x6227 },
239 { 0x30b7, 0xf800 },
240 { 0x30b8, 0x0000 },
241 { 0x30b9, 0xf000 },
242 { 0x30ba, 0x0000 },
243 { 0x30bb, 0xf000 },
244 { 0x30bc, 0x0000 },
245 { 0x30bd, 0xf000 },
246 { 0x30be, 0x0000 },
247 { 0x30bf, 0xf000 },
248 { 0x30c0, 0x2228 },
249 { 0x30c1, 0x3a03 },
250 { 0x30c2, 0x0228 },
251 { 0x30c3, 0x0801 },
252 { 0x30c4, 0x6255 },
253 { 0x30c5, 0x0c06 },
254 { 0x30c6, 0x0228 },
255 { 0x30c7, 0x5901 },
256 { 0x30c8, 0xe255 },
257 { 0x30c9, 0x030d },
258 { 0x30ca, 0x0255 },
259 { 0x30cb, 0x2c01 },
260 { 0x30cc, 0xe255 },
261 { 0x30cd, 0x4342 },
262 { 0x30ce, 0xe255 },
263 { 0x30cf, 0x73c0 },
264 { 0x30d0, 0x4255 },
265 { 0x30d1, 0x0c00 },
266 { 0x30d2, 0x0228 },
267 { 0x30d3, 0x1f01 },
268 { 0x30d4, 0x0228 },
269 { 0x30d5, 0x1e01 },
270 { 0x30d6, 0x0228 },
271 { 0x30d7, 0xfa00 },
272 { 0x30d8, 0x0000 },
273 { 0x30d9, 0xf000 },
274 { 0x30da, 0x0000 },
275 { 0x30db, 0xf000 },
276 { 0x30dc, 0x0000 },
277 { 0x30dd, 0xf000 },
278 { 0x30de, 0x0000 },
279 { 0x30df, 0xf000 },
280 { 0x30e0, 0x0000 },
281 { 0x30e1, 0xf000 },
282 { 0x30e2, 0x0000 },
283 { 0x30e3, 0xf000 },
284 { 0x30e4, 0x0000 },
285 { 0x30e5, 0xf000 },
286 { 0x30e6, 0x0000 },
287 { 0x30e7, 0xf000 },
288 { 0x30e8, 0x0000 },
289 { 0x30e9, 0xf000 },
290 { 0x30ea, 0x0000 },
291 { 0x30eb, 0xf000 },
292 { 0x30ec, 0x0000 },
293 { 0x30ed, 0xf000 },
294 { 0x30ee, 0x0000 },
295 { 0x30ef, 0xf000 },
296 { 0x30f0, 0x0228 },
297 { 0x30f1, 0x1a01 },
298 { 0x30f2, 0x0228 },
299 { 0x30f3, 0x1e00 },
300 { 0x30f4, 0x0228 },
301 { 0x30f5, 0x1f00 },
302 { 0x30f6, 0x6228 },
303 { 0x30f7, 0xf800 },
304 { 0x30f8, 0x0000 },
305 { 0x30f9, 0xf000 },
306 { 0x30fa, 0x0000 },
307 { 0x30fb, 0xf000 },
308 { 0x30fc, 0x0000 },
309 { 0x30fd, 0xf000 },
310 { 0x30fe, 0x0000 },
311 { 0x30ff, 0xf000 },
312 { 0x3100, 0x222b },
313 { 0x3101, 0x3a03 },
314 { 0x3102, 0x222b },
315 { 0x3103, 0x5803 },
316 { 0x3104, 0xe26f },
317 { 0x3105, 0x030d },
318 { 0x3106, 0x626f },
319 { 0x3107, 0x2c01 },
320 { 0x3108, 0xe26f },
321 { 0x3109, 0x4342 },
322 { 0x310a, 0xe26f },
323 { 0x310b, 0x73c0 },
324 { 0x310c, 0x026f },
325 { 0x310d, 0x0c00 },
326 { 0x310e, 0x022b },
327 { 0x310f, 0x1f01 },
328 { 0x3110, 0x022b },
329 { 0x3111, 0x1e01 },
330 { 0x3112, 0x022b },
331 { 0x3113, 0xfa00 },
332 { 0x3114, 0x0000 },
333 { 0x3115, 0xf000 },
334 { 0x3116, 0x0000 },
335 { 0x3117, 0xf000 },
336 { 0x3118, 0x0000 },
337 { 0x3119, 0xf000 },
338 { 0x311a, 0x0000 },
339 { 0x311b, 0xf000 },
340 { 0x311c, 0x0000 },
341 { 0x311d, 0xf000 },
342 { 0x311e, 0x0000 },
343 { 0x311f, 0xf000 },
344 { 0x3120, 0x022b },
345 { 0x3121, 0x0a01 },
346 { 0x3122, 0x022b },
347 { 0x3123, 0x1e00 },
348 { 0x3124, 0x022b },
349 { 0x3125, 0x1f00 },
350 { 0x3126, 0x622b },
351 { 0x3127, 0xf800 },
352 { 0x3128, 0x0000 },
353 { 0x3129, 0xf000 },
354 { 0x312a, 0x0000 },
355 { 0x312b, 0xf000 },
356 { 0x312c, 0x0000 },
357 { 0x312d, 0xf000 },
358 { 0x312e, 0x0000 },
359 { 0x312f, 0xf000 },
360 { 0x3130, 0x0000 },
361 { 0x3131, 0xf000 },
362 { 0x3132, 0x0000 },
363 { 0x3133, 0xf000 },
364 { 0x3134, 0x0000 },
365 { 0x3135, 0xf000 },
366 { 0x3136, 0x0000 },
367 { 0x3137, 0xf000 },
368 { 0x3138, 0x0000 },
369 { 0x3139, 0xf000 },
370 { 0x313a, 0x0000 },
371 { 0x313b, 0xf000 },
372 { 0x313c, 0x0000 },
373 { 0x313d, 0xf000 },
374 { 0x313e, 0x0000 },
375 { 0x313f, 0xf000 },
376 { 0x3140, 0x0000 },
377 { 0x3141, 0xf000 },
378 { 0x3142, 0x0000 },
379 { 0x3143, 0xf000 },
380 { 0x3144, 0x0000 },
381 { 0x3145, 0xf000 },
382 { 0x3146, 0x0000 },
383 { 0x3147, 0xf000 },
384 { 0x3148, 0x0000 },
385 { 0x3149, 0xf000 },
386 { 0x314a, 0x0000 },
387 { 0x314b, 0xf000 },
388 { 0x314c, 0x0000 },
389 { 0x314d, 0xf000 },
390 { 0x314e, 0x0000 },
391 { 0x314f, 0xf000 },
392 { 0x3150, 0x0000 },
393 { 0x3151, 0xf000 },
394 { 0x3152, 0x0000 },
395 { 0x3153, 0xf000 },
396 { 0x3154, 0x0000 },
397 { 0x3155, 0xf000 },
398 { 0x3156, 0x0000 },
399 { 0x3157, 0xf000 },
400 { 0x3158, 0x0000 },
401 { 0x3159, 0xf000 },
402 { 0x315a, 0x0000 },
403 { 0x315b, 0xf000 },
404 { 0x315c, 0x0000 },
405 { 0x315d, 0xf000 },
406 { 0x315e, 0x0000 },
407 { 0x315f, 0xf000 },
408 { 0x3160, 0x0000 },
409 { 0x3161, 0xf000 },
410 { 0x3162, 0x0000 },
411 { 0x3163, 0xf000 },
412 { 0x3164, 0x0000 },
413 { 0x3165, 0xf000 },
414 { 0x3166, 0x0000 },
415 { 0x3167, 0xf000 },
416 { 0x3168, 0x0000 },
417 { 0x3169, 0xf000 },
418 { 0x316a, 0x0000 },
419 { 0x316b, 0xf000 },
420 { 0x316c, 0x0000 },
421 { 0x316d, 0xf000 },
422 { 0x316e, 0x0000 },
423 { 0x316f, 0xf000 },
424 { 0x3170, 0x0000 },
425 { 0x3171, 0xf000 },
426 { 0x3172, 0x0000 },
427 { 0x3173, 0xf000 },
428 { 0x3174, 0x0000 },
429 { 0x3175, 0xf000 },
430 { 0x3176, 0x0000 },
431 { 0x3177, 0xf000 },
432 { 0x3178, 0x0000 },
433 { 0x3179, 0xf000 },
434 { 0x317a, 0x0000 },
435 { 0x317b, 0xf000 },
436 { 0x317c, 0x0000 },
437 { 0x317d, 0xf000 },
438 { 0x317e, 0x0000 },
439 { 0x317f, 0xf000 },
440 { 0x3180, 0x2001 },
441 { 0x3181, 0xf101 },
442 { 0x3182, 0x0000 },
443 { 0x3183, 0xf000 },
444 { 0x3184, 0x0000 },
445 { 0x3185, 0xf000 },
446 { 0x3186, 0x0000 },
447 { 0x3187, 0xf000 },
448 { 0x3188, 0x0000 },
449 { 0x3189, 0xf000 },
450 { 0x318a, 0x0000 },
451 { 0x318b, 0xf000 },
452 { 0x318c, 0x0000 },
453 { 0x318d, 0xf000 },
454 { 0x318e, 0x0000 },
455 { 0x318f, 0xf000 },
456 { 0x3190, 0x0000 },
457 { 0x3191, 0xf000 },
458 { 0x3192, 0x0000 },
459 { 0x3193, 0xf000 },
460 { 0x3194, 0x0000 },
461 { 0x3195, 0xf000 },
462 { 0x3196, 0x0000 },
463 { 0x3197, 0xf000 },
464 { 0x3198, 0x0000 },
465 { 0x3199, 0xf000 },
466 { 0x319a, 0x0000 },
467 { 0x319b, 0xf000 },
468 { 0x319c, 0x0000 },
469 { 0x319d, 0xf000 },
470 { 0x319e, 0x0000 },
471 { 0x319f, 0xf000 },
472 { 0x31a0, 0x0000 },
473 { 0x31a1, 0xf000 },
474 { 0x31a2, 0x0000 },
475 { 0x31a3, 0xf000 },
476 { 0x31a4, 0x0000 },
477 { 0x31a5, 0xf000 },
478 { 0x31a6, 0x0000 },
479 { 0x31a7, 0xf000 },
480 { 0x31a8, 0x0000 },
481 { 0x31a9, 0xf000 },
482 { 0x31aa, 0x0000 },
483 { 0x31ab, 0xf000 },
484 { 0x31ac, 0x0000 },
485 { 0x31ad, 0xf000 },
486 { 0x31ae, 0x0000 },
487 { 0x31af, 0xf000 },
488 { 0x31b0, 0x0000 },
489 { 0x31b1, 0xf000 },
490 { 0x31b2, 0x0000 },
491 { 0x31b3, 0xf000 },
492 { 0x31b4, 0x0000 },
493 { 0x31b5, 0xf000 },
494 { 0x31b6, 0x0000 },
495 { 0x31b7, 0xf000 },
496 { 0x31b8, 0x0000 },
497 { 0x31b9, 0xf000 },
498 { 0x31ba, 0x0000 },
499 { 0x31bb, 0xf000 },
500 { 0x31bc, 0x0000 },
501 { 0x31bd, 0xf000 },
502 { 0x31be, 0x0000 },
503 { 0x31bf, 0xf000 },
504 { 0x31c0, 0x0000 },
505 { 0x31c1, 0xf000 },
506 { 0x31c2, 0x0000 },
507 { 0x31c3, 0xf000 },
508 { 0x31c4, 0x0000 },
509 { 0x31c5, 0xf000 },
510 { 0x31c6, 0x0000 },
511 { 0x31c7, 0xf000 },
512 { 0x31c8, 0x0000 },
513 { 0x31c9, 0xf000 },
514 { 0x31ca, 0x0000 },
515 { 0x31cb, 0xf000 },
516 { 0x31cc, 0x0000 },
517 { 0x31cd, 0xf000 },
518 { 0x31ce, 0x0000 },
519 { 0x31cf, 0xf000 },
520 { 0x31d0, 0x0000 },
521 { 0x31d1, 0xf000 },
522 { 0x31d2, 0x0000 },
523 { 0x31d3, 0xf000 },
524 { 0x31d4, 0x0000 },
525 { 0x31d5, 0xf000 },
526 { 0x31d6, 0x0000 },
527 { 0x31d7, 0xf000 },
528 { 0x31d8, 0x0000 },
529 { 0x31d9, 0xf000 },
530 { 0x31da, 0x0000 },
531 { 0x31db, 0xf000 },
532 { 0x31dc, 0x0000 },
533 { 0x31dd, 0xf000 },
534 { 0x31de, 0x0000 },
535 { 0x31df, 0xf000 },
536 { 0x31e0, 0x0000 },
537 { 0x31e1, 0xf000 },
538 { 0x31e2, 0x0000 },
539 { 0x31e3, 0xf000 },
540 { 0x31e4, 0x0000 },
541 { 0x31e5, 0xf000 },
542 { 0x31e6, 0x0000 },
543 { 0x31e7, 0xf000 },
544 { 0x31e8, 0x0000 },
545 { 0x31e9, 0xf000 },
546 { 0x31ea, 0x0000 },
547 { 0x31eb, 0xf000 },
548 { 0x31ec, 0x0000 },
549 { 0x31ed, 0xf000 },
550 { 0x31ee, 0x0000 },
551 { 0x31ef, 0xf000 },
552 { 0x31f0, 0x0000 },
553 { 0x31f1, 0xf000 },
554 { 0x31f2, 0x0000 },
555 { 0x31f3, 0xf000 },
556 { 0x31f4, 0x0000 },
557 { 0x31f5, 0xf000 },
558 { 0x31f6, 0x0000 },
559 { 0x31f7, 0xf000 },
560 { 0x31f8, 0x0000 },
561 { 0x31f9, 0xf000 },
562 { 0x31fa, 0x0000 },
563 { 0x31fb, 0xf000 },
564 { 0x31fc, 0x0000 },
565 { 0x31fd, 0xf000 },
566 { 0x31fe, 0x0000 },
567 { 0x31ff, 0xf000 },
568 { 0x024d, 0xff50 },
569 { 0x0252, 0xff50 },
570 { 0x0259, 0x0112 },
571 { 0x025e, 0x0112 },
572 { 0x101, 0x0304 },
573 { 0x80, 0x0000 },
574};
575
576/* We use a function so we can use ARRAY_SIZE() */
577int wm5102_patch(struct arizona *arizona)
578{
579 switch (arizona->rev) {
580 case 0:
581 return regmap_register_patch(arizona->regmap,
582 wm5102_reva_patch,
583 ARRAY_SIZE(wm5102_reva_patch));
584 default:
585 return 0;
586 }
587}
588
589static const struct regmap_irq wm5102_aod_irqs[ARIZONA_NUM_IRQ] = {
590 [ARIZONA_IRQ_GP5_FALL] = { .mask = ARIZONA_GP5_FALL_EINT1 },
591 [ARIZONA_IRQ_GP5_RISE] = { .mask = ARIZONA_GP5_RISE_EINT1 },
592 [ARIZONA_IRQ_JD_FALL] = { .mask = ARIZONA_JD1_FALL_EINT1 },
593 [ARIZONA_IRQ_JD_RISE] = { .mask = ARIZONA_JD1_RISE_EINT1 },
594};
595
596const struct regmap_irq_chip wm5102_aod = {
597 .name = "wm5102 AOD",
598 .status_base = ARIZONA_AOD_IRQ1,
599 .mask_base = ARIZONA_AOD_IRQ_MASK_IRQ1,
600 .ack_base = ARIZONA_AOD_IRQ1,
601 .wake_base = ARIZONA_WAKE_CONTROL,
602 .num_regs = 1,
603 .irqs = wm5102_aod_irqs,
604 .num_irqs = ARRAY_SIZE(wm5102_aod_irqs),
605};
606
607static const struct regmap_irq wm5102_irqs[ARIZONA_NUM_IRQ] = {
608 [ARIZONA_IRQ_GP4] = { .reg_offset = 0, .mask = ARIZONA_GP4_EINT1 },
609 [ARIZONA_IRQ_GP3] = { .reg_offset = 0, .mask = ARIZONA_GP3_EINT1 },
610 [ARIZONA_IRQ_GP2] = { .reg_offset = 0, .mask = ARIZONA_GP2_EINT1 },
611 [ARIZONA_IRQ_GP1] = { .reg_offset = 0, .mask = ARIZONA_GP1_EINT1 },
612
613 [ARIZONA_IRQ_DSP1_RAM_RDY] = {
614 .reg_offset = 1, .mask = ARIZONA_DSP1_RAM_RDY_EINT1
615 },
616 [ARIZONA_IRQ_DSP_IRQ2] = {
617 .reg_offset = 1, .mask = ARIZONA_DSP_IRQ2_EINT1
618 },
619 [ARIZONA_IRQ_DSP_IRQ1] = {
620 .reg_offset = 1, .mask = ARIZONA_DSP_IRQ1_EINT1
621 },
622
623 [ARIZONA_IRQ_SPK_SHUTDOWN_WARN] = {
624 .reg_offset = 2, .mask = ARIZONA_SPK_SHUTDOWN_WARN_EINT1
625 },
626 [ARIZONA_IRQ_SPK_SHUTDOWN] = {
627 .reg_offset = 2, .mask = ARIZONA_SPK_SHUTDOWN_EINT1
628 },
629 [ARIZONA_IRQ_HPDET] = {
630 .reg_offset = 2, .mask = ARIZONA_HPDET_EINT1
631 },
632 [ARIZONA_IRQ_MICDET] = {
633 .reg_offset = 2, .mask = ARIZONA_MICDET_EINT1
634 },
635 [ARIZONA_IRQ_WSEQ_DONE] = {
636 .reg_offset = 2, .mask = ARIZONA_WSEQ_DONE_EINT1
637 },
638 [ARIZONA_IRQ_DRC2_SIG_DET] = {
639 .reg_offset = 2, .mask = ARIZONA_DRC2_SIG_DET_EINT1
640 },
641 [ARIZONA_IRQ_DRC1_SIG_DET] = {
642 .reg_offset = 2, .mask = ARIZONA_DRC1_SIG_DET_EINT1
643 },
644 [ARIZONA_IRQ_ASRC2_LOCK] = {
645 .reg_offset = 2, .mask = ARIZONA_ASRC2_LOCK_EINT1
646 },
647 [ARIZONA_IRQ_ASRC1_LOCK] = {
648 .reg_offset = 2, .mask = ARIZONA_ASRC1_LOCK_EINT1
649 },
650 [ARIZONA_IRQ_UNDERCLOCKED] = {
651 .reg_offset = 2, .mask = ARIZONA_UNDERCLOCKED_EINT1
652 },
653 [ARIZONA_IRQ_OVERCLOCKED] = {
654 .reg_offset = 2, .mask = ARIZONA_OVERCLOCKED_EINT1
655 },
656 [ARIZONA_IRQ_FLL2_LOCK] = {
657 .reg_offset = 2, .mask = ARIZONA_FLL2_LOCK_EINT1
658 },
659 [ARIZONA_IRQ_FLL1_LOCK] = {
660 .reg_offset = 2, .mask = ARIZONA_FLL1_LOCK_EINT1
661 },
662 [ARIZONA_IRQ_CLKGEN_ERR] = {
663 .reg_offset = 2, .mask = ARIZONA_CLKGEN_ERR_EINT1
664 },
665 [ARIZONA_IRQ_CLKGEN_ERR_ASYNC] = {
666 .reg_offset = 2, .mask = ARIZONA_CLKGEN_ERR_ASYNC_EINT1
667 },
668
669 [ARIZONA_IRQ_ASRC_CFG_ERR] = {
670 .reg_offset = 3, .mask = ARIZONA_ASRC_CFG_ERR_EINT1
671 },
672 [ARIZONA_IRQ_AIF3_ERR] = {
673 .reg_offset = 3, .mask = ARIZONA_AIF3_ERR_EINT1
674 },
675 [ARIZONA_IRQ_AIF2_ERR] = {
676 .reg_offset = 3, .mask = ARIZONA_AIF2_ERR_EINT1
677 },
678 [ARIZONA_IRQ_AIF1_ERR] = {
679 .reg_offset = 3, .mask = ARIZONA_AIF1_ERR_EINT1
680 },
681 [ARIZONA_IRQ_CTRLIF_ERR] = {
682 .reg_offset = 3, .mask = ARIZONA_CTRLIF_ERR_EINT1
683 },
684 [ARIZONA_IRQ_MIXER_DROPPED_SAMPLES] = {
685 .reg_offset = 3, .mask = ARIZONA_MIXER_DROPPED_SAMPLE_EINT1
686 },
687 [ARIZONA_IRQ_ASYNC_CLK_ENA_LOW] = {
688 .reg_offset = 3, .mask = ARIZONA_ASYNC_CLK_ENA_LOW_EINT1
689 },
690 [ARIZONA_IRQ_SYSCLK_ENA_LOW] = {
691 .reg_offset = 3, .mask = ARIZONA_SYSCLK_ENA_LOW_EINT1
692 },
693 [ARIZONA_IRQ_ISRC1_CFG_ERR] = {
694 .reg_offset = 3, .mask = ARIZONA_ISRC1_CFG_ERR_EINT1
695 },
696 [ARIZONA_IRQ_ISRC2_CFG_ERR] = {
697 .reg_offset = 3, .mask = ARIZONA_ISRC2_CFG_ERR_EINT1
698 },
699
700 [ARIZONA_IRQ_BOOT_DONE] = {
701 .reg_offset = 4, .mask = ARIZONA_BOOT_DONE_EINT1
702 },
703 [ARIZONA_IRQ_DCS_DAC_DONE] = {
704 .reg_offset = 4, .mask = ARIZONA_DCS_DAC_DONE_EINT1
705 },
706 [ARIZONA_IRQ_DCS_HP_DONE] = {
707 .reg_offset = 4, .mask = ARIZONA_DCS_HP_DONE_EINT1
708 },
709 [ARIZONA_IRQ_FLL2_CLOCK_OK] = {
710 .reg_offset = 4, .mask = ARIZONA_FLL2_CLOCK_OK_EINT1
711 },
712 [ARIZONA_IRQ_FLL1_CLOCK_OK] = {
713 .reg_offset = 4, .mask = ARIZONA_FLL1_CLOCK_OK_EINT1
714 },
715};
716
717const struct regmap_irq_chip wm5102_irq = {
718 .name = "wm5102 IRQ",
719 .status_base = ARIZONA_INTERRUPT_STATUS_1,
720 .mask_base = ARIZONA_INTERRUPT_STATUS_1_MASK,
721 .ack_base = ARIZONA_INTERRUPT_STATUS_1,
722 .num_regs = 5,
723 .irqs = wm5102_irqs,
724 .num_irqs = ARRAY_SIZE(wm5102_irqs),
725};
726
727static const struct reg_default wm5102_reg_default[] = {
728 { 0x00000008, 0x0019 }, /* R8 - Ctrl IF SPI CFG 1 */
729 { 0x00000009, 0x0001 }, /* R9 - Ctrl IF I2C1 CFG 1 */
730 { 0x0000000D, 0x0000 }, /* R13 - Ctrl IF Status 1 */
731 { 0x00000016, 0x0000 }, /* R22 - Write Sequencer Ctrl 0 */
732 { 0x00000017, 0x0000 }, /* R23 - Write Sequencer Ctrl 1 */
733 { 0x00000018, 0x0000 }, /* R24 - Write Sequencer Ctrl 2 */
734 { 0x0000001A, 0x0000 }, /* R26 - Write Sequencer PROM */
735 { 0x00000020, 0x0000 }, /* R32 - Tone Generator 1 */
736 { 0x00000021, 0x1000 }, /* R33 - Tone Generator 2 */
737 { 0x00000022, 0x0000 }, /* R34 - Tone Generator 3 */
738 { 0x00000023, 0x1000 }, /* R35 - Tone Generator 4 */
739 { 0x00000024, 0x0000 }, /* R36 - Tone Generator 5 */
740 { 0x00000030, 0x0000 }, /* R48 - PWM Drive 1 */
741 { 0x00000031, 0x0100 }, /* R49 - PWM Drive 2 */
742 { 0x00000032, 0x0100 }, /* R50 - PWM Drive 3 */
743 { 0x00000040, 0x0000 }, /* R64 - Wake control */
744 { 0x00000041, 0x0000 }, /* R65 - Sequence control */
745 { 0x00000061, 0x01FF }, /* R97 - Sample Rate Sequence Select 1 */
746 { 0x00000062, 0x01FF }, /* R98 - Sample Rate Sequence Select 2 */
747 { 0x00000063, 0x01FF }, /* R99 - Sample Rate Sequence Select 3 */
748 { 0x00000064, 0x01FF }, /* R100 - Sample Rate Sequence Select 4 */
749 { 0x00000068, 0x01FF }, /* R104 - Always On Triggers Sequence Select 1 */
750 { 0x00000069, 0x01FF }, /* R105 - Always On Triggers Sequence Select 2 */
751 { 0x0000006A, 0x01FF }, /* R106 - Always On Triggers Sequence Select 3 */
752 { 0x0000006B, 0x01FF }, /* R107 - Always On Triggers Sequence Select 4 */
753 { 0x0000006C, 0x01FF }, /* R108 - Always On Triggers Sequence Select 5 */
754 { 0x0000006D, 0x01FF }, /* R109 - Always On Triggers Sequence Select 6 */
755 { 0x00000070, 0x0000 }, /* R112 - Comfort Noise Generator */
756 { 0x00000090, 0x0000 }, /* R144 - Haptics Control 1 */
757 { 0x00000091, 0x7FFF }, /* R145 - Haptics Control 2 */
758 { 0x00000092, 0x0000 }, /* R146 - Haptics phase 1 intensity */
759 { 0x00000093, 0x0000 }, /* R147 - Haptics phase 1 duration */
760 { 0x00000094, 0x0000 }, /* R148 - Haptics phase 2 intensity */
761 { 0x00000095, 0x0000 }, /* R149 - Haptics phase 2 duration */
762 { 0x00000096, 0x0000 }, /* R150 - Haptics phase 3 intensity */
763 { 0x00000097, 0x0000 }, /* R151 - Haptics phase 3 duration */
764 { 0x00000100, 0x0001 }, /* R256 - Clock 32k 1 */
765 { 0x00000101, 0x0304 }, /* R257 - System Clock 1 */
766 { 0x00000102, 0x0011 }, /* R258 - Sample rate 1 */
767 { 0x00000103, 0x0011 }, /* R259 - Sample rate 2 */
768 { 0x00000104, 0x0011 }, /* R260 - Sample rate 3 */
769 { 0x00000112, 0x0305 }, /* R274 - Async clock 1 */
770 { 0x00000113, 0x0011 }, /* R275 - Async sample rate 1 */
771 { 0x00000149, 0x0000 }, /* R329 - Output system clock */
772 { 0x0000014A, 0x0000 }, /* R330 - Output async clock */
773 { 0x00000152, 0x0000 }, /* R338 - Rate Estimator 1 */
774 { 0x00000153, 0x0000 }, /* R339 - Rate Estimator 2 */
775 { 0x00000154, 0x0000 }, /* R340 - Rate Estimator 3 */
776 { 0x00000155, 0x0000 }, /* R341 - Rate Estimator 4 */
777 { 0x00000156, 0x0000 }, /* R342 - Rate Estimator 5 */
778 { 0x00000171, 0x0000 }, /* R369 - FLL1 Control 1 */
779 { 0x00000172, 0x0008 }, /* R370 - FLL1 Control 2 */
780 { 0x00000173, 0x0018 }, /* R371 - FLL1 Control 3 */
781 { 0x00000174, 0x007D }, /* R372 - FLL1 Control 4 */
782 { 0x00000175, 0x0004 }, /* R373 - FLL1 Control 5 */
783 { 0x00000176, 0x0000 }, /* R374 - FLL1 Control 6 */
784 { 0x00000177, 0x0181 }, /* R375 - FLL1 Loop Filter Test 1 */
785 { 0x00000181, 0x0000 }, /* R385 - FLL1 Synchroniser 1 */
786 { 0x00000182, 0x0000 }, /* R386 - FLL1 Synchroniser 2 */
787 { 0x00000183, 0x0000 }, /* R387 - FLL1 Synchroniser 3 */
788 { 0x00000184, 0x0000 }, /* R388 - FLL1 Synchroniser 4 */
789 { 0x00000185, 0x0000 }, /* R389 - FLL1 Synchroniser 5 */
790 { 0x00000186, 0x0000 }, /* R390 - FLL1 Synchroniser 6 */
791 { 0x00000189, 0x0000 }, /* R393 - FLL1 Spread Spectrum */
792 { 0x0000018A, 0x0004 }, /* R394 - FLL1 GPIO Clock */
793 { 0x00000191, 0x0000 }, /* R401 - FLL2 Control 1 */
794 { 0x00000192, 0x0008 }, /* R402 - FLL2 Control 2 */
795 { 0x00000193, 0x0018 }, /* R403 - FLL2 Control 3 */
796 { 0x00000194, 0x007D }, /* R404 - FLL2 Control 4 */
797 { 0x00000195, 0x0004 }, /* R405 - FLL2 Control 5 */
798 { 0x00000196, 0x0000 }, /* R406 - FLL2 Control 6 */
799 { 0x00000197, 0x0000 }, /* R407 - FLL2 Loop Filter Test 1 */
800 { 0x000001A1, 0x0000 }, /* R417 - FLL2 Synchroniser 1 */
801 { 0x000001A2, 0x0000 }, /* R418 - FLL2 Synchroniser 2 */
802 { 0x000001A3, 0x0000 }, /* R419 - FLL2 Synchroniser 3 */
803 { 0x000001A4, 0x0000 }, /* R420 - FLL2 Synchroniser 4 */
804 { 0x000001A5, 0x0000 }, /* R421 - FLL2 Synchroniser 5 */
805 { 0x000001A6, 0x0000 }, /* R422 - FLL2 Synchroniser 6 */
806 { 0x000001A9, 0x0000 }, /* R425 - FLL2 Spread Spectrum */
807 { 0x000001AA, 0x0004 }, /* R426 - FLL2 GPIO Clock */
808 { 0x00000200, 0x0006 }, /* R512 - Mic Charge Pump 1 */
809 { 0x00000210, 0x00D4 }, /* R528 - LDO1 Control 1 */
810 { 0x00000213, 0x0344 }, /* R531 - LDO2 Control 1 */
811 { 0x00000218, 0x01A6 }, /* R536 - Mic Bias Ctrl 1 */
812 { 0x00000219, 0x01A6 }, /* R537 - Mic Bias Ctrl 2 */
813 { 0x0000021A, 0x01A6 }, /* R538 - Mic Bias Ctrl 3 */
814 { 0x00000293, 0x0000 }, /* R659 - Accessory Detect Mode 1 */
815 { 0x0000029B, 0x0020 }, /* R667 - Headphone Detect 1 */
816 { 0x000002A3, 0x1102 }, /* R675 - Mic Detect 1 */
817 { 0x000002A4, 0x009F }, /* R676 - Mic Detect 2 */
818 { 0x000002A5, 0x0000 }, /* R677 - Mic Detect 3 */
819 { 0x000002C3, 0x0000 }, /* R707 - Mic noise mix control 1 */
820 { 0x000002CB, 0x0000 }, /* R715 - Isolation control */
821 { 0x000002D3, 0x0000 }, /* R723 - Jack detect analogue */
822 { 0x00000300, 0x0000 }, /* R768 - Input Enables */
823 { 0x00000308, 0x0000 }, /* R776 - Input Rate */
824 { 0x00000309, 0x0022 }, /* R777 - Input Volume Ramp */
825 { 0x00000310, 0x2080 }, /* R784 - IN1L Control */
826 { 0x00000311, 0x0180 }, /* R785 - ADC Digital Volume 1L */
827 { 0x00000312, 0x0000 }, /* R786 - DMIC1L Control */
828 { 0x00000314, 0x0080 }, /* R788 - IN1R Control */
829 { 0x00000315, 0x0180 }, /* R789 - ADC Digital Volume 1R */
830 { 0x00000316, 0x0000 }, /* R790 - DMIC1R Control */
831 { 0x00000318, 0x2080 }, /* R792 - IN2L Control */
832 { 0x00000319, 0x0180 }, /* R793 - ADC Digital Volume 2L */
833 { 0x0000031A, 0x0000 }, /* R794 - DMIC2L Control */
834 { 0x0000031C, 0x0080 }, /* R796 - IN2R Control */
835 { 0x0000031D, 0x0180 }, /* R797 - ADC Digital Volume 2R */
836 { 0x0000031E, 0x0000 }, /* R798 - DMIC2R Control */
837 { 0x00000320, 0x2080 }, /* R800 - IN3L Control */
838 { 0x00000321, 0x0180 }, /* R801 - ADC Digital Volume 3L */
839 { 0x00000322, 0x0000 }, /* R802 - DMIC3L Control */
840 { 0x00000324, 0x0080 }, /* R804 - IN3R Control */
841 { 0x00000325, 0x0180 }, /* R805 - ADC Digital Volume 3R */
842 { 0x00000326, 0x0000 }, /* R806 - DMIC3R Control */
843 { 0x00000400, 0x0000 }, /* R1024 - Output Enables 1 */
844 { 0x00000408, 0x0000 }, /* R1032 - Output Rate 1 */
845 { 0x00000409, 0x0022 }, /* R1033 - Output Volume Ramp */
846 { 0x00000410, 0x0080 }, /* R1040 - Output Path Config 1L */
847 { 0x00000411, 0x0180 }, /* R1041 - DAC Digital Volume 1L */
848 { 0x00000412, 0x0080 }, /* R1042 - DAC Volume Limit 1L */
849 { 0x00000413, 0x0001 }, /* R1043 - Noise Gate Select 1L */
850 { 0x00000414, 0x0080 }, /* R1044 - Output Path Config 1R */
851 { 0x00000415, 0x0180 }, /* R1045 - DAC Digital Volume 1R */
852 { 0x00000416, 0x0080 }, /* R1046 - DAC Volume Limit 1R */
853 { 0x00000417, 0x0002 }, /* R1047 - Noise Gate Select 1R */
854 { 0x00000418, 0x0080 }, /* R1048 - Output Path Config 2L */
855 { 0x00000419, 0x0180 }, /* R1049 - DAC Digital Volume 2L */
856 { 0x0000041A, 0x0080 }, /* R1050 - DAC Volume Limit 2L */
857 { 0x0000041B, 0x0004 }, /* R1051 - Noise Gate Select 2L */
858 { 0x0000041C, 0x0080 }, /* R1052 - Output Path Config 2R */
859 { 0x0000041D, 0x0180 }, /* R1053 - DAC Digital Volume 2R */
860 { 0x0000041E, 0x0080 }, /* R1054 - DAC Volume Limit 2R */
861 { 0x0000041F, 0x0008 }, /* R1055 - Noise Gate Select 2R */
862 { 0x00000420, 0x0080 }, /* R1056 - Output Path Config 3L */
863 { 0x00000421, 0x0180 }, /* R1057 - DAC Digital Volume 3L */
864 { 0x00000422, 0x0080 }, /* R1058 - DAC Volume Limit 3L */
865 { 0x00000423, 0x0010 }, /* R1059 - Noise Gate Select 3L */
866 { 0x00000424, 0x0080 }, /* R1060 - Output Path Config 3R */
867 { 0x00000425, 0x0180 }, /* R1061 - DAC Digital Volume 3R */
868 { 0x00000426, 0x0080 }, /* R1062 - DAC Volume Limit 3R */
869 { 0x00000428, 0x0000 }, /* R1064 - Output Path Config 4L */
870 { 0x00000429, 0x0180 }, /* R1065 - DAC Digital Volume 4L */
871 { 0x0000042A, 0x0080 }, /* R1066 - Out Volume 4L */
872 { 0x0000042B, 0x0040 }, /* R1067 - Noise Gate Select 4L */
873 { 0x0000042C, 0x0000 }, /* R1068 - Output Path Config 4R */
874 { 0x0000042D, 0x0180 }, /* R1069 - DAC Digital Volume 4R */
875 { 0x0000042E, 0x0080 }, /* R1070 - Out Volume 4R */
876 { 0x0000042F, 0x0080 }, /* R1071 - Noise Gate Select 4R */
877 { 0x00000430, 0x0000 }, /* R1072 - Output Path Config 5L */
878 { 0x00000431, 0x0180 }, /* R1073 - DAC Digital Volume 5L */
879 { 0x00000432, 0x0080 }, /* R1074 - DAC Volume Limit 5L */
880 { 0x00000433, 0x0100 }, /* R1075 - Noise Gate Select 5L */
881 { 0x00000434, 0x0000 }, /* R1076 - Output Path Config 5R */
882 { 0x00000435, 0x0180 }, /* R1077 - DAC Digital Volume 5R */
883 { 0x00000436, 0x0080 }, /* R1078 - DAC Volume Limit 5R */
884 { 0x00000437, 0x0200 }, /* R1079 - Noise Gate Select 5R */
885 { 0x00000450, 0x0000 }, /* R1104 - DAC AEC Control 1 */
886 { 0x00000458, 0x0001 }, /* R1112 - Noise Gate Control */
887 { 0x00000490, 0x0069 }, /* R1168 - PDM SPK1 CTRL 1 */
888 { 0x00000491, 0x0000 }, /* R1169 - PDM SPK1 CTRL 2 */
889 { 0x000004DC, 0x0000 }, /* R1244 - DAC comp 1 */
890 { 0x000004DD, 0x0000 }, /* R1245 - DAC comp 2 */
891 { 0x000004DE, 0x0000 }, /* R1246 - DAC comp 3 */
892 { 0x000004DF, 0x0000 }, /* R1247 - DAC comp 4 */
893 { 0x00000500, 0x000C }, /* R1280 - AIF1 BCLK Ctrl */
894 { 0x00000501, 0x0008 }, /* R1281 - AIF1 Tx Pin Ctrl */
895 { 0x00000502, 0x0000 }, /* R1282 - AIF1 Rx Pin Ctrl */
896 { 0x00000503, 0x0000 }, /* R1283 - AIF1 Rate Ctrl */
897 { 0x00000504, 0x0000 }, /* R1284 - AIF1 Format */
898 { 0x00000505, 0x0040 }, /* R1285 - AIF1 Tx BCLK Rate */
899 { 0x00000506, 0x0040 }, /* R1286 - AIF1 Rx BCLK Rate */
900 { 0x00000507, 0x1818 }, /* R1287 - AIF1 Frame Ctrl 1 */
901 { 0x00000508, 0x1818 }, /* R1288 - AIF1 Frame Ctrl 2 */
902 { 0x00000509, 0x0000 }, /* R1289 - AIF1 Frame Ctrl 3 */
903 { 0x0000050A, 0x0001 }, /* R1290 - AIF1 Frame Ctrl 4 */
904 { 0x0000050B, 0x0002 }, /* R1291 - AIF1 Frame Ctrl 5 */
905 { 0x0000050C, 0x0003 }, /* R1292 - AIF1 Frame Ctrl 6 */
906 { 0x0000050D, 0x0004 }, /* R1293 - AIF1 Frame Ctrl 7 */
907 { 0x0000050E, 0x0005 }, /* R1294 - AIF1 Frame Ctrl 8 */
908 { 0x0000050F, 0x0006 }, /* R1295 - AIF1 Frame Ctrl 9 */
909 { 0x00000510, 0x0007 }, /* R1296 - AIF1 Frame Ctrl 10 */
910 { 0x00000511, 0x0000 }, /* R1297 - AIF1 Frame Ctrl 11 */
911 { 0x00000512, 0x0001 }, /* R1298 - AIF1 Frame Ctrl 12 */
912 { 0x00000513, 0x0002 }, /* R1299 - AIF1 Frame Ctrl 13 */
913 { 0x00000514, 0x0003 }, /* R1300 - AIF1 Frame Ctrl 14 */
914 { 0x00000515, 0x0004 }, /* R1301 - AIF1 Frame Ctrl 15 */
915 { 0x00000516, 0x0005 }, /* R1302 - AIF1 Frame Ctrl 16 */
916 { 0x00000517, 0x0006 }, /* R1303 - AIF1 Frame Ctrl 17 */
917 { 0x00000518, 0x0007 }, /* R1304 - AIF1 Frame Ctrl 18 */
918 { 0x00000519, 0x0000 }, /* R1305 - AIF1 Tx Enables */
919 { 0x0000051A, 0x0000 }, /* R1306 - AIF1 Rx Enables */
920 { 0x0000051B, 0x0000 }, /* R1307 - AIF1 Force Write */
921 { 0x00000540, 0x000C }, /* R1344 - AIF2 BCLK Ctrl */
922 { 0x00000541, 0x0008 }, /* R1345 - AIF2 Tx Pin Ctrl */
923 { 0x00000542, 0x0000 }, /* R1346 - AIF2 Rx Pin Ctrl */
924 { 0x00000543, 0x0000 }, /* R1347 - AIF2 Rate Ctrl */
925 { 0x00000544, 0x0000 }, /* R1348 - AIF2 Format */
926 { 0x00000545, 0x0040 }, /* R1349 - AIF2 Tx BCLK Rate */
927 { 0x00000546, 0x0040 }, /* R1350 - AIF2 Rx BCLK Rate */
928 { 0x00000547, 0x1818 }, /* R1351 - AIF2 Frame Ctrl 1 */
929 { 0x00000548, 0x1818 }, /* R1352 - AIF2 Frame Ctrl 2 */
930 { 0x00000549, 0x0000 }, /* R1353 - AIF2 Frame Ctrl 3 */
931 { 0x0000054A, 0x0001 }, /* R1354 - AIF2 Frame Ctrl 4 */
932 { 0x00000551, 0x0000 }, /* R1361 - AIF2 Frame Ctrl 11 */
933 { 0x00000552, 0x0001 }, /* R1362 - AIF2 Frame Ctrl 12 */
934 { 0x00000559, 0x0000 }, /* R1369 - AIF2 Tx Enables */
935 { 0x0000055A, 0x0000 }, /* R1370 - AIF2 Rx Enables */
936 { 0x0000055B, 0x0000 }, /* R1371 - AIF2 Force Write */
937 { 0x00000580, 0x000C }, /* R1408 - AIF3 BCLK Ctrl */
938 { 0x00000581, 0x0008 }, /* R1409 - AIF3 Tx Pin Ctrl */
939 { 0x00000582, 0x0000 }, /* R1410 - AIF3 Rx Pin Ctrl */
940 { 0x00000583, 0x0000 }, /* R1411 - AIF3 Rate Ctrl */
941 { 0x00000584, 0x0000 }, /* R1412 - AIF3 Format */
942 { 0x00000585, 0x0040 }, /* R1413 - AIF3 Tx BCLK Rate */
943 { 0x00000586, 0x0040 }, /* R1414 - AIF3 Rx BCLK Rate */
944 { 0x00000587, 0x1818 }, /* R1415 - AIF3 Frame Ctrl 1 */
945 { 0x00000588, 0x1818 }, /* R1416 - AIF3 Frame Ctrl 2 */
946 { 0x00000589, 0x0000 }, /* R1417 - AIF3 Frame Ctrl 3 */
947 { 0x0000058A, 0x0001 }, /* R1418 - AIF3 Frame Ctrl 4 */
948 { 0x00000591, 0x0000 }, /* R1425 - AIF3 Frame Ctrl 11 */
949 { 0x00000592, 0x0001 }, /* R1426 - AIF3 Frame Ctrl 12 */
950 { 0x00000599, 0x0000 }, /* R1433 - AIF3 Tx Enables */
951 { 0x0000059A, 0x0000 }, /* R1434 - AIF3 Rx Enables */
952 { 0x0000059B, 0x0000 }, /* R1435 - AIF3 Force Write */
953 { 0x000005E3, 0x0004 }, /* R1507 - SLIMbus Framer Ref Gear */
954 { 0x000005E5, 0x0000 }, /* R1509 - SLIMbus Rates 1 */
955 { 0x000005E6, 0x0000 }, /* R1510 - SLIMbus Rates 2 */
956 { 0x000005E7, 0x0000 }, /* R1511 - SLIMbus Rates 3 */
957 { 0x000005E8, 0x0000 }, /* R1512 - SLIMbus Rates 4 */
958 { 0x000005E9, 0x0000 }, /* R1513 - SLIMbus Rates 5 */
959 { 0x000005EA, 0x0000 }, /* R1514 - SLIMbus Rates 6 */
960 { 0x000005EB, 0x0000 }, /* R1515 - SLIMbus Rates 7 */
961 { 0x000005EC, 0x0000 }, /* R1516 - SLIMbus Rates 8 */
962 { 0x000005F5, 0x0000 }, /* R1525 - SLIMbus RX Channel Enable */
963 { 0x000005F6, 0x0000 }, /* R1526 - SLIMbus TX Channel Enable */
964 { 0x00000640, 0x0000 }, /* R1600 - PWM1MIX Input 1 Source */
965 { 0x00000641, 0x0080 }, /* R1601 - PWM1MIX Input 1 Volume */
966 { 0x00000642, 0x0000 }, /* R1602 - PWM1MIX Input 2 Source */
967 { 0x00000643, 0x0080 }, /* R1603 - PWM1MIX Input 2 Volume */
968 { 0x00000644, 0x0000 }, /* R1604 - PWM1MIX Input 3 Source */
969 { 0x00000645, 0x0080 }, /* R1605 - PWM1MIX Input 3 Volume */
970 { 0x00000646, 0x0000 }, /* R1606 - PWM1MIX Input 4 Source */
971 { 0x00000647, 0x0080 }, /* R1607 - PWM1MIX Input 4 Volume */
972 { 0x00000648, 0x0000 }, /* R1608 - PWM2MIX Input 1 Source */
973 { 0x00000649, 0x0080 }, /* R1609 - PWM2MIX Input 1 Volume */
974 { 0x0000064A, 0x0000 }, /* R1610 - PWM2MIX Input 2 Source */
975 { 0x0000064B, 0x0080 }, /* R1611 - PWM2MIX Input 2 Volume */
976 { 0x0000064C, 0x0000 }, /* R1612 - PWM2MIX Input 3 Source */
977 { 0x0000064D, 0x0080 }, /* R1613 - PWM2MIX Input 3 Volume */
978 { 0x0000064E, 0x0000 }, /* R1614 - PWM2MIX Input 4 Source */
979 { 0x0000064F, 0x0080 }, /* R1615 - PWM2MIX Input 4 Volume */
980 { 0x00000660, 0x0000 }, /* R1632 - MICMIX Input 1 Source */
981 { 0x00000661, 0x0080 }, /* R1633 - MICMIX Input 1 Volume */
982 { 0x00000662, 0x0000 }, /* R1634 - MICMIX Input 2 Source */
983 { 0x00000663, 0x0080 }, /* R1635 - MICMIX Input 2 Volume */
984 { 0x00000664, 0x0000 }, /* R1636 - MICMIX Input 3 Source */
985 { 0x00000665, 0x0080 }, /* R1637 - MICMIX Input 3 Volume */
986 { 0x00000666, 0x0000 }, /* R1638 - MICMIX Input 4 Source */
987 { 0x00000667, 0x0080 }, /* R1639 - MICMIX Input 4 Volume */
988 { 0x00000668, 0x0000 }, /* R1640 - NOISEMIX Input 1 Source */
989 { 0x00000669, 0x0080 }, /* R1641 - NOISEMIX Input 1 Volume */
990 { 0x0000066A, 0x0000 }, /* R1642 - NOISEMIX Input 2 Source */
991 { 0x0000066B, 0x0080 }, /* R1643 - NOISEMIX Input 2 Volume */
992 { 0x0000066C, 0x0000 }, /* R1644 - NOISEMIX Input 3 Source */
993 { 0x0000066D, 0x0080 }, /* R1645 - NOISEMIX Input 3 Volume */
994 { 0x0000066E, 0x0000 }, /* R1646 - NOISEMIX Input 4 Source */
995 { 0x0000066F, 0x0080 }, /* R1647 - NOISEMIX Input 4 Volume */
996 { 0x00000680, 0x0000 }, /* R1664 - OUT1LMIX Input 1 Source */
997 { 0x00000681, 0x0080 }, /* R1665 - OUT1LMIX Input 1 Volume */
998 { 0x00000682, 0x0000 }, /* R1666 - OUT1LMIX Input 2 Source */
999 { 0x00000683, 0x0080 }, /* R1667 - OUT1LMIX Input 2 Volume */
1000 { 0x00000684, 0x0000 }, /* R1668 - OUT1LMIX Input 3 Source */
1001 { 0x00000685, 0x0080 }, /* R1669 - OUT1LMIX Input 3 Volume */
1002 { 0x00000686, 0x0000 }, /* R1670 - OUT1LMIX Input 4 Source */
1003 { 0x00000687, 0x0080 }, /* R1671 - OUT1LMIX Input 4 Volume */
1004 { 0x00000688, 0x0000 }, /* R1672 - OUT1RMIX Input 1 Source */
1005 { 0x00000689, 0x0080 }, /* R1673 - OUT1RMIX Input 1 Volume */
1006 { 0x0000068A, 0x0000 }, /* R1674 - OUT1RMIX Input 2 Source */
1007 { 0x0000068B, 0x0080 }, /* R1675 - OUT1RMIX Input 2 Volume */
1008 { 0x0000068C, 0x0000 }, /* R1676 - OUT1RMIX Input 3 Source */
1009 { 0x0000068D, 0x0080 }, /* R1677 - OUT1RMIX Input 3 Volume */
1010 { 0x0000068E, 0x0000 }, /* R1678 - OUT1RMIX Input 4 Source */
1011 { 0x0000068F, 0x0080 }, /* R1679 - OUT1RMIX Input 4 Volume */
1012 { 0x00000690, 0x0000 }, /* R1680 - OUT2LMIX Input 1 Source */
1013 { 0x00000691, 0x0080 }, /* R1681 - OUT2LMIX Input 1 Volume */
1014 { 0x00000692, 0x0000 }, /* R1682 - OUT2LMIX Input 2 Source */
1015 { 0x00000693, 0x0080 }, /* R1683 - OUT2LMIX Input 2 Volume */
1016 { 0x00000694, 0x0000 }, /* R1684 - OUT2LMIX Input 3 Source */
1017 { 0x00000695, 0x0080 }, /* R1685 - OUT2LMIX Input 3 Volume */
1018 { 0x00000696, 0x0000 }, /* R1686 - OUT2LMIX Input 4 Source */
1019 { 0x00000697, 0x0080 }, /* R1687 - OUT2LMIX Input 4 Volume */
1020 { 0x00000698, 0x0000 }, /* R1688 - OUT2RMIX Input 1 Source */
1021 { 0x00000699, 0x0080 }, /* R1689 - OUT2RMIX Input 1 Volume */
1022 { 0x0000069A, 0x0000 }, /* R1690 - OUT2RMIX Input 2 Source */
1023 { 0x0000069B, 0x0080 }, /* R1691 - OUT2RMIX Input 2 Volume */
1024 { 0x0000069C, 0x0000 }, /* R1692 - OUT2RMIX Input 3 Source */
1025 { 0x0000069D, 0x0080 }, /* R1693 - OUT2RMIX Input 3 Volume */
1026 { 0x0000069E, 0x0000 }, /* R1694 - OUT2RMIX Input 4 Source */
1027 { 0x0000069F, 0x0080 }, /* R1695 - OUT2RMIX Input 4 Volume */
1028 { 0x000006A0, 0x0000 }, /* R1696 - OUT3LMIX Input 1 Source */
1029 { 0x000006A1, 0x0080 }, /* R1697 - OUT3LMIX Input 1 Volume */
1030 { 0x000006A2, 0x0000 }, /* R1698 - OUT3LMIX Input 2 Source */
1031 { 0x000006A3, 0x0080 }, /* R1699 - OUT3LMIX Input 2 Volume */
1032 { 0x000006A4, 0x0000 }, /* R1700 - OUT3LMIX Input 3 Source */
1033 { 0x000006A5, 0x0080 }, /* R1701 - OUT3LMIX Input 3 Volume */
1034 { 0x000006A6, 0x0000 }, /* R1702 - OUT3LMIX Input 4 Source */
1035 { 0x000006A7, 0x0080 }, /* R1703 - OUT3LMIX Input 4 Volume */
1036 { 0x000006B0, 0x0000 }, /* R1712 - OUT4LMIX Input 1 Source */
1037 { 0x000006B1, 0x0080 }, /* R1713 - OUT4LMIX Input 1 Volume */
1038 { 0x000006B2, 0x0000 }, /* R1714 - OUT4LMIX Input 2 Source */
1039 { 0x000006B3, 0x0080 }, /* R1715 - OUT4LMIX Input 2 Volume */
1040 { 0x000006B4, 0x0000 }, /* R1716 - OUT4LMIX Input 3 Source */
1041 { 0x000006B5, 0x0080 }, /* R1717 - OUT4LMIX Input 3 Volume */
1042 { 0x000006B6, 0x0000 }, /* R1718 - OUT4LMIX Input 4 Source */
1043 { 0x000006B7, 0x0080 }, /* R1719 - OUT4LMIX Input 4 Volume */
1044 { 0x000006B8, 0x0000 }, /* R1720 - OUT4RMIX Input 1 Source */
1045 { 0x000006B9, 0x0080 }, /* R1721 - OUT4RMIX Input 1 Volume */
1046 { 0x000006BA, 0x0000 }, /* R1722 - OUT4RMIX Input 2 Source */
1047 { 0x000006BB, 0x0080 }, /* R1723 - OUT4RMIX Input 2 Volume */
1048 { 0x000006BC, 0x0000 }, /* R1724 - OUT4RMIX Input 3 Source */
1049 { 0x000006BD, 0x0080 }, /* R1725 - OUT4RMIX Input 3 Volume */
1050 { 0x000006BE, 0x0000 }, /* R1726 - OUT4RMIX Input 4 Source */
1051 { 0x000006BF, 0x0080 }, /* R1727 - OUT4RMIX Input 4 Volume */
1052 { 0x000006C0, 0x0000 }, /* R1728 - OUT5LMIX Input 1 Source */
1053 { 0x000006C1, 0x0080 }, /* R1729 - OUT5LMIX Input 1 Volume */
1054 { 0x000006C2, 0x0000 }, /* R1730 - OUT5LMIX Input 2 Source */
1055 { 0x000006C3, 0x0080 }, /* R1731 - OUT5LMIX Input 2 Volume */
1056 { 0x000006C4, 0x0000 }, /* R1732 - OUT5LMIX Input 3 Source */
1057 { 0x000006C5, 0x0080 }, /* R1733 - OUT5LMIX Input 3 Volume */
1058 { 0x000006C6, 0x0000 }, /* R1734 - OUT5LMIX Input 4 Source */
1059 { 0x000006C7, 0x0080 }, /* R1735 - OUT5LMIX Input 4 Volume */
1060 { 0x000006C8, 0x0000 }, /* R1736 - OUT5RMIX Input 1 Source */
1061 { 0x000006C9, 0x0080 }, /* R1737 - OUT5RMIX Input 1 Volume */
1062 { 0x000006CA, 0x0000 }, /* R1738 - OUT5RMIX Input 2 Source */
1063 { 0x000006CB, 0x0080 }, /* R1739 - OUT5RMIX Input 2 Volume */
1064 { 0x000006CC, 0x0000 }, /* R1740 - OUT5RMIX Input 3 Source */
1065 { 0x000006CD, 0x0080 }, /* R1741 - OUT5RMIX Input 3 Volume */
1066 { 0x000006CE, 0x0000 }, /* R1742 - OUT5RMIX Input 4 Source */
1067 { 0x000006CF, 0x0080 }, /* R1743 - OUT5RMIX Input 4 Volume */
1068 { 0x00000700, 0x0000 }, /* R1792 - AIF1TX1MIX Input 1 Source */
1069 { 0x00000701, 0x0080 }, /* R1793 - AIF1TX1MIX Input 1 Volume */
1070 { 0x00000702, 0x0000 }, /* R1794 - AIF1TX1MIX Input 2 Source */
1071 { 0x00000703, 0x0080 }, /* R1795 - AIF1TX1MIX Input 2 Volume */
1072 { 0x00000704, 0x0000 }, /* R1796 - AIF1TX1MIX Input 3 Source */
1073 { 0x00000705, 0x0080 }, /* R1797 - AIF1TX1MIX Input 3 Volume */
1074 { 0x00000706, 0x0000 }, /* R1798 - AIF1TX1MIX Input 4 Source */
1075 { 0x00000707, 0x0080 }, /* R1799 - AIF1TX1MIX Input 4 Volume */
1076 { 0x00000708, 0x0000 }, /* R1800 - AIF1TX2MIX Input 1 Source */
1077 { 0x00000709, 0x0080 }, /* R1801 - AIF1TX2MIX Input 1 Volume */
1078 { 0x0000070A, 0x0000 }, /* R1802 - AIF1TX2MIX Input 2 Source */
1079 { 0x0000070B, 0x0080 }, /* R1803 - AIF1TX2MIX Input 2 Volume */
1080 { 0x0000070C, 0x0000 }, /* R1804 - AIF1TX2MIX Input 3 Source */
1081 { 0x0000070D, 0x0080 }, /* R1805 - AIF1TX2MIX Input 3 Volume */
1082 { 0x0000070E, 0x0000 }, /* R1806 - AIF1TX2MIX Input 4 Source */
1083 { 0x0000070F, 0x0080 }, /* R1807 - AIF1TX2MIX Input 4 Volume */
1084 { 0x00000710, 0x0000 }, /* R1808 - AIF1TX3MIX Input 1 Source */
1085 { 0x00000711, 0x0080 }, /* R1809 - AIF1TX3MIX Input 1 Volume */
1086 { 0x00000712, 0x0000 }, /* R1810 - AIF1TX3MIX Input 2 Source */
1087 { 0x00000713, 0x0080 }, /* R1811 - AIF1TX3MIX Input 2 Volume */
1088 { 0x00000714, 0x0000 }, /* R1812 - AIF1TX3MIX Input 3 Source */
1089 { 0x00000715, 0x0080 }, /* R1813 - AIF1TX3MIX Input 3 Volume */
1090 { 0x00000716, 0x0000 }, /* R1814 - AIF1TX3MIX Input 4 Source */
1091 { 0x00000717, 0x0080 }, /* R1815 - AIF1TX3MIX Input 4 Volume */
1092 { 0x00000718, 0x0000 }, /* R1816 - AIF1TX4MIX Input 1 Source */
1093 { 0x00000719, 0x0080 }, /* R1817 - AIF1TX4MIX Input 1 Volume */
1094 { 0x0000071A, 0x0000 }, /* R1818 - AIF1TX4MIX Input 2 Source */
1095 { 0x0000071B, 0x0080 }, /* R1819 - AIF1TX4MIX Input 2 Volume */
1096 { 0x0000071C, 0x0000 }, /* R1820 - AIF1TX4MIX Input 3 Source */
1097 { 0x0000071D, 0x0080 }, /* R1821 - AIF1TX4MIX Input 3 Volume */
1098 { 0x0000071E, 0x0000 }, /* R1822 - AIF1TX4MIX Input 4 Source */
1099 { 0x0000071F, 0x0080 }, /* R1823 - AIF1TX4MIX Input 4 Volume */
1100 { 0x00000720, 0x0000 }, /* R1824 - AIF1TX5MIX Input 1 Source */
1101 { 0x00000721, 0x0080 }, /* R1825 - AIF1TX5MIX Input 1 Volume */
1102 { 0x00000722, 0x0000 }, /* R1826 - AIF1TX5MIX Input 2 Source */
1103 { 0x00000723, 0x0080 }, /* R1827 - AIF1TX5MIX Input 2 Volume */
1104 { 0x00000724, 0x0000 }, /* R1828 - AIF1TX5MIX Input 3 Source */
1105 { 0x00000725, 0x0080 }, /* R1829 - AIF1TX5MIX Input 3 Volume */
1106 { 0x00000726, 0x0000 }, /* R1830 - AIF1TX5MIX Input 4 Source */
1107 { 0x00000727, 0x0080 }, /* R1831 - AIF1TX5MIX Input 4 Volume */
1108 { 0x00000728, 0x0000 }, /* R1832 - AIF1TX6MIX Input 1 Source */
1109 { 0x00000729, 0x0080 }, /* R1833 - AIF1TX6MIX Input 1 Volume */
1110 { 0x0000072A, 0x0000 }, /* R1834 - AIF1TX6MIX Input 2 Source */
1111 { 0x0000072B, 0x0080 }, /* R1835 - AIF1TX6MIX Input 2 Volume */
1112 { 0x0000072C, 0x0000 }, /* R1836 - AIF1TX6MIX Input 3 Source */
1113 { 0x0000072D, 0x0080 }, /* R1837 - AIF1TX6MIX Input 3 Volume */
1114 { 0x0000072E, 0x0000 }, /* R1838 - AIF1TX6MIX Input 4 Source */
1115 { 0x0000072F, 0x0080 }, /* R1839 - AIF1TX6MIX Input 4 Volume */
1116 { 0x00000730, 0x0000 }, /* R1840 - AIF1TX7MIX Input 1 Source */
1117 { 0x00000731, 0x0080 }, /* R1841 - AIF1TX7MIX Input 1 Volume */
1118 { 0x00000732, 0x0000 }, /* R1842 - AIF1TX7MIX Input 2 Source */
1119 { 0x00000733, 0x0080 }, /* R1843 - AIF1TX7MIX Input 2 Volume */
1120 { 0x00000734, 0x0000 }, /* R1844 - AIF1TX7MIX Input 3 Source */
1121 { 0x00000735, 0x0080 }, /* R1845 - AIF1TX7MIX Input 3 Volume */
1122 { 0x00000736, 0x0000 }, /* R1846 - AIF1TX7MIX Input 4 Source */
1123 { 0x00000737, 0x0080 }, /* R1847 - AIF1TX7MIX Input 4 Volume */
1124 { 0x00000738, 0x0000 }, /* R1848 - AIF1TX8MIX Input 1 Source */
1125 { 0x00000739, 0x0080 }, /* R1849 - AIF1TX8MIX Input 1 Volume */
1126 { 0x0000073A, 0x0000 }, /* R1850 - AIF1TX8MIX Input 2 Source */
1127 { 0x0000073B, 0x0080 }, /* R1851 - AIF1TX8MIX Input 2 Volume */
1128 { 0x0000073C, 0x0000 }, /* R1852 - AIF1TX8MIX Input 3 Source */
1129 { 0x0000073D, 0x0080 }, /* R1853 - AIF1TX8MIX Input 3 Volume */
1130 { 0x0000073E, 0x0000 }, /* R1854 - AIF1TX8MIX Input 4 Source */
1131 { 0x0000073F, 0x0080 }, /* R1855 - AIF1TX8MIX Input 4 Volume */
1132 { 0x00000740, 0x0000 }, /* R1856 - AIF2TX1MIX Input 1 Source */
1133 { 0x00000741, 0x0080 }, /* R1857 - AIF2TX1MIX Input 1 Volume */
1134 { 0x00000742, 0x0000 }, /* R1858 - AIF2TX1MIX Input 2 Source */
1135 { 0x00000743, 0x0080 }, /* R1859 - AIF2TX1MIX Input 2 Volume */
1136 { 0x00000744, 0x0000 }, /* R1860 - AIF2TX1MIX Input 3 Source */
1137 { 0x00000745, 0x0080 }, /* R1861 - AIF2TX1MIX Input 3 Volume */
1138 { 0x00000746, 0x0000 }, /* R1862 - AIF2TX1MIX Input 4 Source */
1139 { 0x00000747, 0x0080 }, /* R1863 - AIF2TX1MIX Input 4 Volume */
1140 { 0x00000748, 0x0000 }, /* R1864 - AIF2TX2MIX Input 1 Source */
1141 { 0x00000749, 0x0080 }, /* R1865 - AIF2TX2MIX Input 1 Volume */
1142 { 0x0000074A, 0x0000 }, /* R1866 - AIF2TX2MIX Input 2 Source */
1143 { 0x0000074B, 0x0080 }, /* R1867 - AIF2TX2MIX Input 2 Volume */
1144 { 0x0000074C, 0x0000 }, /* R1868 - AIF2TX2MIX Input 3 Source */
1145 { 0x0000074D, 0x0080 }, /* R1869 - AIF2TX2MIX Input 3 Volume */
1146 { 0x0000074E, 0x0000 }, /* R1870 - AIF2TX2MIX Input 4 Source */
1147 { 0x0000074F, 0x0080 }, /* R1871 - AIF2TX2MIX Input 4 Volume */
1148 { 0x00000780, 0x0000 }, /* R1920 - AIF3TX1MIX Input 1 Source */
1149 { 0x00000781, 0x0080 }, /* R1921 - AIF3TX1MIX Input 1 Volume */
1150 { 0x00000782, 0x0000 }, /* R1922 - AIF3TX1MIX Input 2 Source */
1151 { 0x00000783, 0x0080 }, /* R1923 - AIF3TX1MIX Input 2 Volume */
1152 { 0x00000784, 0x0000 }, /* R1924 - AIF3TX1MIX Input 3 Source */
1153 { 0x00000785, 0x0080 }, /* R1925 - AIF3TX1MIX Input 3 Volume */
1154 { 0x00000786, 0x0000 }, /* R1926 - AIF3TX1MIX Input 4 Source */
1155 { 0x00000787, 0x0080 }, /* R1927 - AIF3TX1MIX Input 4 Volume */
1156 { 0x00000788, 0x0000 }, /* R1928 - AIF3TX2MIX Input 1 Source */
1157 { 0x00000789, 0x0080 }, /* R1929 - AIF3TX2MIX Input 1 Volume */
1158 { 0x0000078A, 0x0000 }, /* R1930 - AIF3TX2MIX Input 2 Source */
1159 { 0x0000078B, 0x0080 }, /* R1931 - AIF3TX2MIX Input 2 Volume */
1160 { 0x0000078C, 0x0000 }, /* R1932 - AIF3TX2MIX Input 3 Source */
1161 { 0x0000078D, 0x0080 }, /* R1933 - AIF3TX2MIX Input 3 Volume */
1162 { 0x0000078E, 0x0000 }, /* R1934 - AIF3TX2MIX Input 4 Source */
1163 { 0x0000078F, 0x0080 }, /* R1935 - AIF3TX2MIX Input 4 Volume */
1164 { 0x000007C0, 0x0000 }, /* R1984 - SLIMTX1MIX Input 1 Source */
1165 { 0x000007C1, 0x0080 }, /* R1985 - SLIMTX1MIX Input 1 Volume */
1166 { 0x000007C2, 0x0000 }, /* R1986 - SLIMTX1MIX Input 2 Source */
1167 { 0x000007C3, 0x0080 }, /* R1987 - SLIMTX1MIX Input 2 Volume */
1168 { 0x000007C4, 0x0000 }, /* R1988 - SLIMTX1MIX Input 3 Source */
1169 { 0x000007C5, 0x0080 }, /* R1989 - SLIMTX1MIX Input 3 Volume */
1170 { 0x000007C6, 0x0000 }, /* R1990 - SLIMTX1MIX Input 4 Source */
1171 { 0x000007C7, 0x0080 }, /* R1991 - SLIMTX1MIX Input 4 Volume */
1172 { 0x000007C8, 0x0000 }, /* R1992 - SLIMTX2MIX Input 1 Source */
1173 { 0x000007C9, 0x0080 }, /* R1993 - SLIMTX2MIX Input 1 Volume */
1174 { 0x000007CA, 0x0000 }, /* R1994 - SLIMTX2MIX Input 2 Source */
1175 { 0x000007CB, 0x0080 }, /* R1995 - SLIMTX2MIX Input 2 Volume */
1176 { 0x000007CC, 0x0000 }, /* R1996 - SLIMTX2MIX Input 3 Source */
1177 { 0x000007CD, 0x0080 }, /* R1997 - SLIMTX2MIX Input 3 Volume */
1178 { 0x000007CE, 0x0000 }, /* R1998 - SLIMTX2MIX Input 4 Source */
1179 { 0x000007CF, 0x0080 }, /* R1999 - SLIMTX2MIX Input 4 Volume */
1180 { 0x000007D0, 0x0000 }, /* R2000 - SLIMTX3MIX Input 1 Source */
1181 { 0x000007D1, 0x0080 }, /* R2001 - SLIMTX3MIX Input 1 Volume */
1182 { 0x000007D2, 0x0000 }, /* R2002 - SLIMTX3MIX Input 2 Source */
1183 { 0x000007D3, 0x0080 }, /* R2003 - SLIMTX3MIX Input 2 Volume */
1184 { 0x000007D4, 0x0000 }, /* R2004 - SLIMTX3MIX Input 3 Source */
1185 { 0x000007D5, 0x0080 }, /* R2005 - SLIMTX3MIX Input 3 Volume */
1186 { 0x000007D6, 0x0000 }, /* R2006 - SLIMTX3MIX Input 4 Source */
1187 { 0x000007D7, 0x0080 }, /* R2007 - SLIMTX3MIX Input 4 Volume */
1188 { 0x000007D8, 0x0000 }, /* R2008 - SLIMTX4MIX Input 1 Source */
1189 { 0x000007D9, 0x0080 }, /* R2009 - SLIMTX4MIX Input 1 Volume */
1190 { 0x000007DA, 0x0000 }, /* R2010 - SLIMTX4MIX Input 2 Source */
1191 { 0x000007DB, 0x0080 }, /* R2011 - SLIMTX4MIX Input 2 Volume */
1192 { 0x000007DC, 0x0000 }, /* R2012 - SLIMTX4MIX Input 3 Source */
1193 { 0x000007DD, 0x0080 }, /* R2013 - SLIMTX4MIX Input 3 Volume */
1194 { 0x000007DE, 0x0000 }, /* R2014 - SLIMTX4MIX Input 4 Source */
1195 { 0x000007DF, 0x0080 }, /* R2015 - SLIMTX4MIX Input 4 Volume */
1196 { 0x000007E0, 0x0000 }, /* R2016 - SLIMTX5MIX Input 1 Source */
1197 { 0x000007E1, 0x0080 }, /* R2017 - SLIMTX5MIX Input 1 Volume */
1198 { 0x000007E2, 0x0000 }, /* R2018 - SLIMTX5MIX Input 2 Source */
1199 { 0x000007E3, 0x0080 }, /* R2019 - SLIMTX5MIX Input 2 Volume */
1200 { 0x000007E4, 0x0000 }, /* R2020 - SLIMTX5MIX Input 3 Source */
1201 { 0x000007E5, 0x0080 }, /* R2021 - SLIMTX5MIX Input 3 Volume */
1202 { 0x000007E6, 0x0000 }, /* R2022 - SLIMTX5MIX Input 4 Source */
1203 { 0x000007E7, 0x0080 }, /* R2023 - SLIMTX5MIX Input 4 Volume */
1204 { 0x000007E8, 0x0000 }, /* R2024 - SLIMTX6MIX Input 1 Source */
1205 { 0x000007E9, 0x0080 }, /* R2025 - SLIMTX6MIX Input 1 Volume */
1206 { 0x000007EA, 0x0000 }, /* R2026 - SLIMTX6MIX Input 2 Source */
1207 { 0x000007EB, 0x0080 }, /* R2027 - SLIMTX6MIX Input 2 Volume */
1208 { 0x000007EC, 0x0000 }, /* R2028 - SLIMTX6MIX Input 3 Source */
1209 { 0x000007ED, 0x0080 }, /* R2029 - SLIMTX6MIX Input 3 Volume */
1210 { 0x000007EE, 0x0000 }, /* R2030 - SLIMTX6MIX Input 4 Source */
1211 { 0x000007EF, 0x0080 }, /* R2031 - SLIMTX6MIX Input 4 Volume */
1212 { 0x000007F0, 0x0000 }, /* R2032 - SLIMTX7MIX Input 1 Source */
1213 { 0x000007F1, 0x0080 }, /* R2033 - SLIMTX7MIX Input 1 Volume */
1214 { 0x000007F2, 0x0000 }, /* R2034 - SLIMTX7MIX Input 2 Source */
1215 { 0x000007F3, 0x0080 }, /* R2035 - SLIMTX7MIX Input 2 Volume */
1216 { 0x000007F4, 0x0000 }, /* R2036 - SLIMTX7MIX Input 3 Source */
1217 { 0x000007F5, 0x0080 }, /* R2037 - SLIMTX7MIX Input 3 Volume */
1218 { 0x000007F6, 0x0000 }, /* R2038 - SLIMTX7MIX Input 4 Source */
1219 { 0x000007F7, 0x0080 }, /* R2039 - SLIMTX7MIX Input 4 Volume */
1220 { 0x000007F8, 0x0000 }, /* R2040 - SLIMTX8MIX Input 1 Source */
1221 { 0x000007F9, 0x0080 }, /* R2041 - SLIMTX8MIX Input 1 Volume */
1222 { 0x000007FA, 0x0000 }, /* R2042 - SLIMTX8MIX Input 2 Source */
1223 { 0x000007FB, 0x0080 }, /* R2043 - SLIMTX8MIX Input 2 Volume */
1224 { 0x000007FC, 0x0000 }, /* R2044 - SLIMTX8MIX Input 3 Source */
1225 { 0x000007FD, 0x0080 }, /* R2045 - SLIMTX8MIX Input 3 Volume */
1226 { 0x000007FE, 0x0000 }, /* R2046 - SLIMTX8MIX Input 4 Source */
1227 { 0x000007FF, 0x0080 }, /* R2047 - SLIMTX8MIX Input 4 Volume */
1228 { 0x00000880, 0x0000 }, /* R2176 - EQ1MIX Input 1 Source */
1229 { 0x00000881, 0x0080 }, /* R2177 - EQ1MIX Input 1 Volume */
1230 { 0x00000882, 0x0000 }, /* R2178 - EQ1MIX Input 2 Source */
1231 { 0x00000883, 0x0080 }, /* R2179 - EQ1MIX Input 2 Volume */
1232 { 0x00000884, 0x0000 }, /* R2180 - EQ1MIX Input 3 Source */
1233 { 0x00000885, 0x0080 }, /* R2181 - EQ1MIX Input 3 Volume */
1234 { 0x00000886, 0x0000 }, /* R2182 - EQ1MIX Input 4 Source */
1235 { 0x00000887, 0x0080 }, /* R2183 - EQ1MIX Input 4 Volume */
1236 { 0x00000888, 0x0000 }, /* R2184 - EQ2MIX Input 1 Source */
1237 { 0x00000889, 0x0080 }, /* R2185 - EQ2MIX Input 1 Volume */
1238 { 0x0000088A, 0x0000 }, /* R2186 - EQ2MIX Input 2 Source */
1239 { 0x0000088B, 0x0080 }, /* R2187 - EQ2MIX Input 2 Volume */
1240 { 0x0000088C, 0x0000 }, /* R2188 - EQ2MIX Input 3 Source */
1241 { 0x0000088D, 0x0080 }, /* R2189 - EQ2MIX Input 3 Volume */
1242 { 0x0000088E, 0x0000 }, /* R2190 - EQ2MIX Input 4 Source */
1243 { 0x0000088F, 0x0080 }, /* R2191 - EQ2MIX Input 4 Volume */
1244 { 0x00000890, 0x0000 }, /* R2192 - EQ3MIX Input 1 Source */
1245 { 0x00000891, 0x0080 }, /* R2193 - EQ3MIX Input 1 Volume */
1246 { 0x00000892, 0x0000 }, /* R2194 - EQ3MIX Input 2 Source */
1247 { 0x00000893, 0x0080 }, /* R2195 - EQ3MIX Input 2 Volume */
1248 { 0x00000894, 0x0000 }, /* R2196 - EQ3MIX Input 3 Source */
1249 { 0x00000895, 0x0080 }, /* R2197 - EQ3MIX Input 3 Volume */
1250 { 0x00000896, 0x0000 }, /* R2198 - EQ3MIX Input 4 Source */
1251 { 0x00000897, 0x0080 }, /* R2199 - EQ3MIX Input 4 Volume */
1252 { 0x00000898, 0x0000 }, /* R2200 - EQ4MIX Input 1 Source */
1253 { 0x00000899, 0x0080 }, /* R2201 - EQ4MIX Input 1 Volume */
1254 { 0x0000089A, 0x0000 }, /* R2202 - EQ4MIX Input 2 Source */
1255 { 0x0000089B, 0x0080 }, /* R2203 - EQ4MIX Input 2 Volume */
1256 { 0x0000089C, 0x0000 }, /* R2204 - EQ4MIX Input 3 Source */
1257 { 0x0000089D, 0x0080 }, /* R2205 - EQ4MIX Input 3 Volume */
1258 { 0x0000089E, 0x0000 }, /* R2206 - EQ4MIX Input 4 Source */
1259 { 0x0000089F, 0x0080 }, /* R2207 - EQ4MIX Input 4 Volume */
1260 { 0x000008C0, 0x0000 }, /* R2240 - DRC1LMIX Input 1 Source */
1261 { 0x000008C1, 0x0080 }, /* R2241 - DRC1LMIX Input 1 Volume */
1262 { 0x000008C2, 0x0000 }, /* R2242 - DRC1LMIX Input 2 Source */
1263 { 0x000008C3, 0x0080 }, /* R2243 - DRC1LMIX Input 2 Volume */
1264 { 0x000008C4, 0x0000 }, /* R2244 - DRC1LMIX Input 3 Source */
1265 { 0x000008C5, 0x0080 }, /* R2245 - DRC1LMIX Input 3 Volume */
1266 { 0x000008C6, 0x0000 }, /* R2246 - DRC1LMIX Input 4 Source */
1267 { 0x000008C7, 0x0080 }, /* R2247 - DRC1LMIX Input 4 Volume */
1268 { 0x000008C8, 0x0000 }, /* R2248 - DRC1RMIX Input 1 Source */
1269 { 0x000008C9, 0x0080 }, /* R2249 - DRC1RMIX Input 1 Volume */
1270 { 0x000008CA, 0x0000 }, /* R2250 - DRC1RMIX Input 2 Source */
1271 { 0x000008CB, 0x0080 }, /* R2251 - DRC1RMIX Input 2 Volume */
1272 { 0x000008CC, 0x0000 }, /* R2252 - DRC1RMIX Input 3 Source */
1273 { 0x000008CD, 0x0080 }, /* R2253 - DRC1RMIX Input 3 Volume */
1274 { 0x000008CE, 0x0000 }, /* R2254 - DRC1RMIX Input 4 Source */
1275 { 0x000008CF, 0x0080 }, /* R2255 - DRC1RMIX Input 4 Volume */
1276 { 0x000008D0, 0x0000 }, /* R2256 - DRC2LMIX Input 1 Source */
1277 { 0x000008D1, 0x0080 }, /* R2257 - DRC2LMIX Input 1 Volume */
1278 { 0x000008D2, 0x0000 }, /* R2258 - DRC2LMIX Input 2 Source */
1279 { 0x000008D3, 0x0080 }, /* R2259 - DRC2LMIX Input 2 Volume */
1280 { 0x000008D4, 0x0000 }, /* R2260 - DRC2LMIX Input 3 Source */
1281 { 0x000008D5, 0x0080 }, /* R2261 - DRC2LMIX Input 3 Volume */
1282 { 0x000008D6, 0x0000 }, /* R2262 - DRC2LMIX Input 4 Source */
1283 { 0x000008D7, 0x0080 }, /* R2263 - DRC2LMIX Input 4 Volume */
1284 { 0x000008D8, 0x0000 }, /* R2264 - DRC2RMIX Input 1 Source */
1285 { 0x000008D9, 0x0080 }, /* R2265 - DRC2RMIX Input 1 Volume */
1286 { 0x000008DA, 0x0000 }, /* R2266 - DRC2RMIX Input 2 Source */
1287 { 0x000008DB, 0x0080 }, /* R2267 - DRC2RMIX Input 2 Volume */
1288 { 0x000008DC, 0x0000 }, /* R2268 - DRC2RMIX Input 3 Source */
1289 { 0x000008DD, 0x0080 }, /* R2269 - DRC2RMIX Input 3 Volume */
1290 { 0x000008DE, 0x0000 }, /* R2270 - DRC2RMIX Input 4 Source */
1291 { 0x000008DF, 0x0080 }, /* R2271 - DRC2RMIX Input 4 Volume */
1292 { 0x00000900, 0x0000 }, /* R2304 - HPLP1MIX Input 1 Source */
1293 { 0x00000901, 0x0080 }, /* R2305 - HPLP1MIX Input 1 Volume */
1294 { 0x00000902, 0x0000 }, /* R2306 - HPLP1MIX Input 2 Source */
1295 { 0x00000903, 0x0080 }, /* R2307 - HPLP1MIX Input 2 Volume */
1296 { 0x00000904, 0x0000 }, /* R2308 - HPLP1MIX Input 3 Source */
1297 { 0x00000905, 0x0080 }, /* R2309 - HPLP1MIX Input 3 Volume */
1298 { 0x00000906, 0x0000 }, /* R2310 - HPLP1MIX Input 4 Source */
1299 { 0x00000907, 0x0080 }, /* R2311 - HPLP1MIX Input 4 Volume */
1300 { 0x00000908, 0x0000 }, /* R2312 - HPLP2MIX Input 1 Source */
1301 { 0x00000909, 0x0080 }, /* R2313 - HPLP2MIX Input 1 Volume */
1302 { 0x0000090A, 0x0000 }, /* R2314 - HPLP2MIX Input 2 Source */
1303 { 0x0000090B, 0x0080 }, /* R2315 - HPLP2MIX Input 2 Volume */
1304 { 0x0000090C, 0x0000 }, /* R2316 - HPLP2MIX Input 3 Source */
1305 { 0x0000090D, 0x0080 }, /* R2317 - HPLP2MIX Input 3 Volume */
1306 { 0x0000090E, 0x0000 }, /* R2318 - HPLP2MIX Input 4 Source */
1307 { 0x0000090F, 0x0080 }, /* R2319 - HPLP2MIX Input 4 Volume */
1308 { 0x00000910, 0x0000 }, /* R2320 - HPLP3MIX Input 1 Source */
1309 { 0x00000911, 0x0080 }, /* R2321 - HPLP3MIX Input 1 Volume */
1310 { 0x00000912, 0x0000 }, /* R2322 - HPLP3MIX Input 2 Source */
1311 { 0x00000913, 0x0080 }, /* R2323 - HPLP3MIX Input 2 Volume */
1312 { 0x00000914, 0x0000 }, /* R2324 - HPLP3MIX Input 3 Source */
1313 { 0x00000915, 0x0080 }, /* R2325 - HPLP3MIX Input 3 Volume */
1314 { 0x00000916, 0x0000 }, /* R2326 - HPLP3MIX Input 4 Source */
1315 { 0x00000917, 0x0080 }, /* R2327 - HPLP3MIX Input 4 Volume */
1316 { 0x00000918, 0x0000 }, /* R2328 - HPLP4MIX Input 1 Source */
1317 { 0x00000919, 0x0080 }, /* R2329 - HPLP4MIX Input 1 Volume */
1318 { 0x0000091A, 0x0000 }, /* R2330 - HPLP4MIX Input 2 Source */
1319 { 0x0000091B, 0x0080 }, /* R2331 - HPLP4MIX Input 2 Volume */
1320 { 0x0000091C, 0x0000 }, /* R2332 - HPLP4MIX Input 3 Source */
1321 { 0x0000091D, 0x0080 }, /* R2333 - HPLP4MIX Input 3 Volume */
1322 { 0x0000091E, 0x0000 }, /* R2334 - HPLP4MIX Input 4 Source */
1323 { 0x0000091F, 0x0080 }, /* R2335 - HPLP4MIX Input 4 Volume */
1324 { 0x00000940, 0x0000 }, /* R2368 - DSP1LMIX Input 1 Source */
1325 { 0x00000941, 0x0080 }, /* R2369 - DSP1LMIX Input 1 Volume */
1326 { 0x00000942, 0x0000 }, /* R2370 - DSP1LMIX Input 2 Source */
1327 { 0x00000943, 0x0080 }, /* R2371 - DSP1LMIX Input 2 Volume */
1328 { 0x00000944, 0x0000 }, /* R2372 - DSP1LMIX Input 3 Source */
1329 { 0x00000945, 0x0080 }, /* R2373 - DSP1LMIX Input 3 Volume */
1330 { 0x00000946, 0x0000 }, /* R2374 - DSP1LMIX Input 4 Source */
1331 { 0x00000947, 0x0080 }, /* R2375 - DSP1LMIX Input 4 Volume */
1332 { 0x00000948, 0x0000 }, /* R2376 - DSP1RMIX Input 1 Source */
1333 { 0x00000949, 0x0080 }, /* R2377 - DSP1RMIX Input 1 Volume */
1334 { 0x0000094A, 0x0000 }, /* R2378 - DSP1RMIX Input 2 Source */
1335 { 0x0000094B, 0x0080 }, /* R2379 - DSP1RMIX Input 2 Volume */
1336 { 0x0000094C, 0x0000 }, /* R2380 - DSP1RMIX Input 3 Source */
1337 { 0x0000094D, 0x0080 }, /* R2381 - DSP1RMIX Input 3 Volume */
1338 { 0x0000094E, 0x0000 }, /* R2382 - DSP1RMIX Input 4 Source */
1339 { 0x0000094F, 0x0080 }, /* R2383 - DSP1RMIX Input 4 Volume */
1340 { 0x00000950, 0x0000 }, /* R2384 - DSP1AUX1MIX Input 1 Source */
1341 { 0x00000958, 0x0000 }, /* R2392 - DSP1AUX2MIX Input 1 Source */
1342 { 0x00000960, 0x0000 }, /* R2400 - DSP1AUX3MIX Input 1 Source */
1343 { 0x00000968, 0x0000 }, /* R2408 - DSP1AUX4MIX Input 1 Source */
1344 { 0x00000970, 0x0000 }, /* R2416 - DSP1AUX5MIX Input 1 Source */
1345 { 0x00000978, 0x0000 }, /* R2424 - DSP1AUX6MIX Input 1 Source */
1346 { 0x00000A80, 0x0000 }, /* R2688 - ASRC1LMIX Input 1 Source */
1347 { 0x00000A88, 0x0000 }, /* R2696 - ASRC1RMIX Input 1 Source */
1348 { 0x00000A90, 0x0000 }, /* R2704 - ASRC2LMIX Input 1 Source */
1349 { 0x00000A98, 0x0000 }, /* R2712 - ASRC2RMIX Input 1 Source */
1350 { 0x00000B00, 0x0000 }, /* R2816 - ISRC1DEC1MIX Input 1 Source */
1351 { 0x00000B08, 0x0000 }, /* R2824 - ISRC1DEC2MIX Input 1 Source */
1352 { 0x00000B20, 0x0000 }, /* R2848 - ISRC1INT1MIX Input 1 Source */
1353 { 0x00000B28, 0x0000 }, /* R2856 - ISRC1INT2MIX Input 1 Source */
1354 { 0x00000B40, 0x0000 }, /* R2880 - ISRC2DEC1MIX Input 1 Source */
1355 { 0x00000B48, 0x0000 }, /* R2888 - ISRC2DEC2MIX Input 1 Source */
1356 { 0x00000B60, 0x0000 }, /* R2912 - ISRC2INT1MIX Input 1 Source */
1357 { 0x00000B68, 0x0000 }, /* R2920 - ISRC2INT2MIX Input 1 Source */
1358 { 0x00000C00, 0xA101 }, /* R3072 - GPIO1 CTRL */
1359 { 0x00000C01, 0xA101 }, /* R3073 - GPIO2 CTRL */
1360 { 0x00000C02, 0xA101 }, /* R3074 - GPIO3 CTRL */
1361 { 0x00000C03, 0xA101 }, /* R3075 - GPIO4 CTRL */
1362 { 0x00000C04, 0xA101 }, /* R3076 - GPIO5 CTRL */
1363 { 0x00000C0F, 0x0400 }, /* R3087 - IRQ CTRL 1 */
1364 { 0x00000C10, 0x1000 }, /* R3088 - GPIO Debounce Config */
1365 { 0x00000C20, 0x8002 }, /* R3104 - Misc Pad Ctrl 1 */
1366 { 0x00000C21, 0x8001 }, /* R3105 - Misc Pad Ctrl 2 */
1367 { 0x00000C22, 0x0000 }, /* R3106 - Misc Pad Ctrl 3 */
1368 { 0x00000C23, 0x0000 }, /* R3107 - Misc Pad Ctrl 4 */
1369 { 0x00000C24, 0x0000 }, /* R3108 - Misc Pad Ctrl 5 */
1370 { 0x00000C25, 0x0000 }, /* R3109 - Misc Pad Ctrl 6 */
1371 { 0x00000D08, 0xFFFF }, /* R3336 - Interrupt Status 1 Mask */
1372 { 0x00000D09, 0xFFFF }, /* R3337 - Interrupt Status 2 Mask */
1373 { 0x00000D0A, 0xFFFF }, /* R3338 - Interrupt Status 3 Mask */
1374 { 0x00000D0B, 0xFFFF }, /* R3339 - Interrupt Status 4 Mask */
1375 { 0x00000D0C, 0xFEFF }, /* R3340 - Interrupt Status 5 Mask */
1376 { 0x00000D0F, 0x0000 }, /* R3343 - Interrupt Control */
1377 { 0x00000D18, 0xFFFF }, /* R3352 - IRQ2 Status 1 Mask */
1378 { 0x00000D19, 0xFFFF }, /* R3353 - IRQ2 Status 2 Mask */
1379 { 0x00000D1A, 0xFFFF }, /* R3354 - IRQ2 Status 3 Mask */
1380 { 0x00000D1B, 0xFFFF }, /* R3355 - IRQ2 Status 4 Mask */
1381 { 0x00000D1C, 0xFFFF }, /* R3356 - IRQ2 Status 5 Mask */
1382 { 0x00000D1F, 0x0000 }, /* R3359 - IRQ2 Control */
1383 { 0x00000D41, 0x0000 }, /* R3393 - ADSP2 IRQ0 */
1384 { 0x00000D53, 0xFFFF }, /* R3411 - AOD IRQ Mask IRQ1 */
1385 { 0x00000D54, 0xFFFF }, /* R3412 - AOD IRQ Mask IRQ2 */
1386 { 0x00000D56, 0x0000 }, /* R3414 - Jack detect debounce */
1387 { 0x00000E00, 0x0000 }, /* R3584 - FX_Ctrl1 */
1388 { 0x00000E01, 0x0000 }, /* R3585 - FX_Ctrl2 */
1389 { 0x00000E10, 0x6318 }, /* R3600 - EQ1_1 */
1390 { 0x00000E11, 0x6300 }, /* R3601 - EQ1_2 */
1391 { 0x00000E12, 0x0FC8 }, /* R3602 - EQ1_3 */
1392 { 0x00000E13, 0x03FE }, /* R3603 - EQ1_4 */
1393 { 0x00000E14, 0x00E0 }, /* R3604 - EQ1_5 */
1394 { 0x00000E15, 0x1EC4 }, /* R3605 - EQ1_6 */
1395 { 0x00000E16, 0xF136 }, /* R3606 - EQ1_7 */
1396 { 0x00000E17, 0x0409 }, /* R3607 - EQ1_8 */
1397 { 0x00000E18, 0x04CC }, /* R3608 - EQ1_9 */
1398 { 0x00000E19, 0x1C9B }, /* R3609 - EQ1_10 */
1399 { 0x00000E1A, 0xF337 }, /* R3610 - EQ1_11 */
1400 { 0x00000E1B, 0x040B }, /* R3611 - EQ1_12 */
1401 { 0x00000E1C, 0x0CBB }, /* R3612 - EQ1_13 */
1402 { 0x00000E1D, 0x16F8 }, /* R3613 - EQ1_14 */
1403 { 0x00000E1E, 0xF7D9 }, /* R3614 - EQ1_15 */
1404 { 0x00000E1F, 0x040A }, /* R3615 - EQ1_16 */
1405 { 0x00000E20, 0x1F14 }, /* R3616 - EQ1_17 */
1406 { 0x00000E21, 0x058C }, /* R3617 - EQ1_18 */
1407 { 0x00000E22, 0x0563 }, /* R3618 - EQ1_19 */
1408 { 0x00000E23, 0x4000 }, /* R3619 - EQ1_20 */
1409 { 0x00000E24, 0x0B75 }, /* R3620 - EQ1_21 */
1410 { 0x00000E26, 0x6318 }, /* R3622 - EQ2_1 */
1411 { 0x00000E27, 0x6300 }, /* R3623 - EQ2_2 */
1412 { 0x00000E28, 0x0FC8 }, /* R3624 - EQ2_3 */
1413 { 0x00000E29, 0x03FE }, /* R3625 - EQ2_4 */
1414 { 0x00000E2A, 0x00E0 }, /* R3626 - EQ2_5 */
1415 { 0x00000E2B, 0x1EC4 }, /* R3627 - EQ2_6 */
1416 { 0x00000E2C, 0xF136 }, /* R3628 - EQ2_7 */
1417 { 0x00000E2D, 0x0409 }, /* R3629 - EQ2_8 */
1418 { 0x00000E2E, 0x04CC }, /* R3630 - EQ2_9 */
1419 { 0x00000E2F, 0x1C9B }, /* R3631 - EQ2_10 */
1420 { 0x00000E30, 0xF337 }, /* R3632 - EQ2_11 */
1421 { 0x00000E31, 0x040B }, /* R3633 - EQ2_12 */
1422 { 0x00000E32, 0x0CBB }, /* R3634 - EQ2_13 */
1423 { 0x00000E33, 0x16F8 }, /* R3635 - EQ2_14 */
1424 { 0x00000E34, 0xF7D9 }, /* R3636 - EQ2_15 */
1425 { 0x00000E35, 0x040A }, /* R3637 - EQ2_16 */
1426 { 0x00000E36, 0x1F14 }, /* R3638 - EQ2_17 */
1427 { 0x00000E37, 0x058C }, /* R3639 - EQ2_18 */
1428 { 0x00000E38, 0x0563 }, /* R3640 - EQ2_19 */
1429 { 0x00000E39, 0x4000 }, /* R3641 - EQ2_20 */
1430 { 0x00000E3A, 0x0B75 }, /* R3642 - EQ2_21 */
1431 { 0x00000E3C, 0x6318 }, /* R3644 - EQ3_1 */
1432 { 0x00000E3D, 0x6300 }, /* R3645 - EQ3_2 */
1433 { 0x00000E3E, 0x0FC8 }, /* R3646 - EQ3_3 */
1434 { 0x00000E3F, 0x03FE }, /* R3647 - EQ3_4 */
1435 { 0x00000E40, 0x00E0 }, /* R3648 - EQ3_5 */
1436 { 0x00000E41, 0x1EC4 }, /* R3649 - EQ3_6 */
1437 { 0x00000E42, 0xF136 }, /* R3650 - EQ3_7 */
1438 { 0x00000E43, 0x0409 }, /* R3651 - EQ3_8 */
1439 { 0x00000E44, 0x04CC }, /* R3652 - EQ3_9 */
1440 { 0x00000E45, 0x1C9B }, /* R3653 - EQ3_10 */
1441 { 0x00000E46, 0xF337 }, /* R3654 - EQ3_11 */
1442 { 0x00000E47, 0x040B }, /* R3655 - EQ3_12 */
1443 { 0x00000E48, 0x0CBB }, /* R3656 - EQ3_13 */
1444 { 0x00000E49, 0x16F8 }, /* R3657 - EQ3_14 */
1445 { 0x00000E4A, 0xF7D9 }, /* R3658 - EQ3_15 */
1446 { 0x00000E4B, 0x040A }, /* R3659 - EQ3_16 */
1447 { 0x00000E4C, 0x1F14 }, /* R3660 - EQ3_17 */
1448 { 0x00000E4D, 0x058C }, /* R3661 - EQ3_18 */
1449 { 0x00000E4E, 0x0563 }, /* R3662 - EQ3_19 */
1450 { 0x00000E4F, 0x4000 }, /* R3663 - EQ3_20 */
1451 { 0x00000E50, 0x0B75 }, /* R3664 - EQ3_21 */
1452 { 0x00000E52, 0x6318 }, /* R3666 - EQ4_1 */
1453 { 0x00000E53, 0x6300 }, /* R3667 - EQ4_2 */
1454 { 0x00000E54, 0x0FC8 }, /* R3668 - EQ4_3 */
1455 { 0x00000E55, 0x03FE }, /* R3669 - EQ4_4 */
1456 { 0x00000E56, 0x00E0 }, /* R3670 - EQ4_5 */
1457 { 0x00000E57, 0x1EC4 }, /* R3671 - EQ4_6 */
1458 { 0x00000E58, 0xF136 }, /* R3672 - EQ4_7 */
1459 { 0x00000E59, 0x0409 }, /* R3673 - EQ4_8 */
1460 { 0x00000E5A, 0x04CC }, /* R3674 - EQ4_9 */
1461 { 0x00000E5B, 0x1C9B }, /* R3675 - EQ4_10 */
1462 { 0x00000E5C, 0xF337 }, /* R3676 - EQ4_11 */
1463 { 0x00000E5D, 0x040B }, /* R3677 - EQ4_12 */
1464 { 0x00000E5E, 0x0CBB }, /* R3678 - EQ4_13 */
1465 { 0x00000E5F, 0x16F8 }, /* R3679 - EQ4_14 */
1466 { 0x00000E60, 0xF7D9 }, /* R3680 - EQ4_15 */
1467 { 0x00000E61, 0x040A }, /* R3681 - EQ4_16 */
1468 { 0x00000E62, 0x1F14 }, /* R3682 - EQ4_17 */
1469 { 0x00000E63, 0x058C }, /* R3683 - EQ4_18 */
1470 { 0x00000E64, 0x0563 }, /* R3684 - EQ4_19 */
1471 { 0x00000E65, 0x4000 }, /* R3685 - EQ4_20 */
1472 { 0x00000E66, 0x0B75 }, /* R3686 - EQ4_21 */
1473 { 0x00000E80, 0x0018 }, /* R3712 - DRC1 ctrl1 */
1474 { 0x00000E81, 0x0933 }, /* R3713 - DRC1 ctrl2 */
1475 { 0x00000E82, 0x0018 }, /* R3714 - DRC1 ctrl3 */
1476 { 0x00000E83, 0x0000 }, /* R3715 - DRC1 ctrl4 */
1477 { 0x00000E84, 0x0000 }, /* R3716 - DRC1 ctrl5 */
1478 { 0x00000E89, 0x0018 }, /* R3721 - DRC2 ctrl1 */
1479 { 0x00000E8A, 0x0933 }, /* R3722 - DRC2 ctrl2 */
1480 { 0x00000E8B, 0x0018 }, /* R3723 - DRC2 ctrl3 */
1481 { 0x00000E8C, 0x0000 }, /* R3724 - DRC2 ctrl4 */
1482 { 0x00000E8D, 0x0000 }, /* R3725 - DRC2 ctrl5 */
1483 { 0x00000EC0, 0x0000 }, /* R3776 - HPLPF1_1 */
1484 { 0x00000EC1, 0x0000 }, /* R3777 - HPLPF1_2 */
1485 { 0x00000EC4, 0x0000 }, /* R3780 - HPLPF2_1 */
1486 { 0x00000EC5, 0x0000 }, /* R3781 - HPLPF2_2 */
1487 { 0x00000EC8, 0x0000 }, /* R3784 - HPLPF3_1 */
1488 { 0x00000EC9, 0x0000 }, /* R3785 - HPLPF3_2 */
1489 { 0x00000ECC, 0x0000 }, /* R3788 - HPLPF4_1 */
1490 { 0x00000ECD, 0x0000 }, /* R3789 - HPLPF4_2 */
1491 { 0x00000EE0, 0x0000 }, /* R3808 - ASRC_ENABLE */
1492 { 0x00000EE2, 0x0000 }, /* R3810 - ASRC_RATE1 */
1493 { 0x00000EE3, 0x4000 }, /* R3811 - ASRC_RATE2 */
1494 { 0x00000EF0, 0x0000 }, /* R3824 - ISRC 1 CTRL 1 */
1495 { 0x00000EF1, 0x0000 }, /* R3825 - ISRC 1 CTRL 2 */
1496 { 0x00000EF2, 0x0000 }, /* R3826 - ISRC 1 CTRL 3 */
1497 { 0x00000EF3, 0x0000 }, /* R3827 - ISRC 2 CTRL 1 */
1498 { 0x00000EF4, 0x0000 }, /* R3828 - ISRC 2 CTRL 2 */
1499 { 0x00000EF5, 0x0000 }, /* R3829 - ISRC 2 CTRL 3 */
1500 { 0x00000EF6, 0x0000 }, /* R3830 - ISRC 3 CTRL 1 */
1501 { 0x00000EF7, 0x0000 }, /* R3831 - ISRC 3 CTRL 2 */
1502 { 0x00000EF8, 0x0000 }, /* R3832 - ISRC 3 CTRL 3 */
1503 { 0x00001100, 0x0010 }, /* R4352 - DSP1 Control 1 */
1504 { 0x00001101, 0x0000 }, /* R4353 - DSP1 Clocking 1 */
1505};
1506
1507static bool wm5102_readable_register(struct device *dev, unsigned int reg)
1508{
1509 switch (reg) {
1510 case ARIZONA_SOFTWARE_RESET:
1511 case ARIZONA_DEVICE_REVISION:
1512 case ARIZONA_CTRL_IF_SPI_CFG_1:
1513 case ARIZONA_CTRL_IF_I2C1_CFG_1:
1514 case ARIZONA_CTRL_IF_STATUS_1:
1515 case ARIZONA_WRITE_SEQUENCER_CTRL_0:
1516 case ARIZONA_WRITE_SEQUENCER_CTRL_1:
1517 case ARIZONA_WRITE_SEQUENCER_CTRL_2:
1518 case ARIZONA_WRITE_SEQUENCER_PROM:
1519 case ARIZONA_TONE_GENERATOR_1:
1520 case ARIZONA_TONE_GENERATOR_2:
1521 case ARIZONA_TONE_GENERATOR_3:
1522 case ARIZONA_TONE_GENERATOR_4:
1523 case ARIZONA_TONE_GENERATOR_5:
1524 case ARIZONA_PWM_DRIVE_1:
1525 case ARIZONA_PWM_DRIVE_2:
1526 case ARIZONA_PWM_DRIVE_3:
1527 case ARIZONA_WAKE_CONTROL:
1528 case ARIZONA_SEQUENCE_CONTROL:
1529 case ARIZONA_SAMPLE_RATE_SEQUENCE_SELECT_1:
1530 case ARIZONA_SAMPLE_RATE_SEQUENCE_SELECT_2:
1531 case ARIZONA_SAMPLE_RATE_SEQUENCE_SELECT_3:
1532 case ARIZONA_SAMPLE_RATE_SEQUENCE_SELECT_4:
1533 case ARIZONA_ALWAYS_ON_TRIGGERS_SEQUENCE_SELECT_1:
1534 case ARIZONA_ALWAYS_ON_TRIGGERS_SEQUENCE_SELECT_2:
1535 case ARIZONA_ALWAYS_ON_TRIGGERS_SEQUENCE_SELECT_3:
1536 case ARIZONA_ALWAYS_ON_TRIGGERS_SEQUENCE_SELECT_4:
1537 case ARIZONA_ALWAYS_ON_TRIGGERS_SEQUENCE_SELECT_5:
1538 case ARIZONA_ALWAYS_ON_TRIGGERS_SEQUENCE_SELECT_6:
1539 case ARIZONA_COMFORT_NOISE_GENERATOR:
1540 case ARIZONA_HAPTICS_CONTROL_1:
1541 case ARIZONA_HAPTICS_CONTROL_2:
1542 case ARIZONA_HAPTICS_PHASE_1_INTENSITY:
1543 case ARIZONA_HAPTICS_PHASE_1_DURATION:
1544 case ARIZONA_HAPTICS_PHASE_2_INTENSITY:
1545 case ARIZONA_HAPTICS_PHASE_2_DURATION:
1546 case ARIZONA_HAPTICS_PHASE_3_INTENSITY:
1547 case ARIZONA_HAPTICS_PHASE_3_DURATION:
1548 case ARIZONA_HAPTICS_STATUS:
1549 case ARIZONA_CLOCK_32K_1:
1550 case ARIZONA_SYSTEM_CLOCK_1:
1551 case ARIZONA_SAMPLE_RATE_1:
1552 case ARIZONA_SAMPLE_RATE_2:
1553 case ARIZONA_SAMPLE_RATE_3:
1554 case ARIZONA_SAMPLE_RATE_1_STATUS:
1555 case ARIZONA_SAMPLE_RATE_2_STATUS:
1556 case ARIZONA_SAMPLE_RATE_3_STATUS:
1557 case ARIZONA_ASYNC_CLOCK_1:
1558 case ARIZONA_ASYNC_SAMPLE_RATE_1:
1559 case ARIZONA_ASYNC_SAMPLE_RATE_1_STATUS:
1560 case ARIZONA_OUTPUT_SYSTEM_CLOCK:
1561 case ARIZONA_OUTPUT_ASYNC_CLOCK:
1562 case ARIZONA_RATE_ESTIMATOR_1:
1563 case ARIZONA_RATE_ESTIMATOR_2:
1564 case ARIZONA_RATE_ESTIMATOR_3:
1565 case ARIZONA_RATE_ESTIMATOR_4:
1566 case ARIZONA_RATE_ESTIMATOR_5:
1567 case ARIZONA_FLL1_CONTROL_1:
1568 case ARIZONA_FLL1_CONTROL_2:
1569 case ARIZONA_FLL1_CONTROL_3:
1570 case ARIZONA_FLL1_CONTROL_4:
1571 case ARIZONA_FLL1_CONTROL_5:
1572 case ARIZONA_FLL1_CONTROL_6:
1573 case ARIZONA_FLL1_LOOP_FILTER_TEST_1:
1574 case ARIZONA_FLL1_SYNCHRONISER_1:
1575 case ARIZONA_FLL1_SYNCHRONISER_2:
1576 case ARIZONA_FLL1_SYNCHRONISER_3:
1577 case ARIZONA_FLL1_SYNCHRONISER_4:
1578 case ARIZONA_FLL1_SYNCHRONISER_5:
1579 case ARIZONA_FLL1_SYNCHRONISER_6:
1580 case ARIZONA_FLL1_SPREAD_SPECTRUM:
1581 case ARIZONA_FLL1_GPIO_CLOCK:
1582 case ARIZONA_FLL2_CONTROL_1:
1583 case ARIZONA_FLL2_CONTROL_2:
1584 case ARIZONA_FLL2_CONTROL_3:
1585 case ARIZONA_FLL2_CONTROL_4:
1586 case ARIZONA_FLL2_CONTROL_5:
1587 case ARIZONA_FLL2_CONTROL_6:
1588 case ARIZONA_FLL2_LOOP_FILTER_TEST_1:
1589 case ARIZONA_FLL2_SYNCHRONISER_1:
1590 case ARIZONA_FLL2_SYNCHRONISER_2:
1591 case ARIZONA_FLL2_SYNCHRONISER_3:
1592 case ARIZONA_FLL2_SYNCHRONISER_4:
1593 case ARIZONA_FLL2_SYNCHRONISER_5:
1594 case ARIZONA_FLL2_SYNCHRONISER_6:
1595 case ARIZONA_FLL2_SPREAD_SPECTRUM:
1596 case ARIZONA_FLL2_GPIO_CLOCK:
1597 case ARIZONA_MIC_CHARGE_PUMP_1:
1598 case ARIZONA_LDO1_CONTROL_1:
1599 case ARIZONA_LDO2_CONTROL_1:
1600 case ARIZONA_MIC_BIAS_CTRL_1:
1601 case ARIZONA_MIC_BIAS_CTRL_2:
1602 case ARIZONA_MIC_BIAS_CTRL_3:
1603 case ARIZONA_ACCESSORY_DETECT_MODE_1:
1604 case ARIZONA_HEADPHONE_DETECT_1:
1605 case ARIZONA_HEADPHONE_DETECT_2:
1606 case ARIZONA_MIC_DETECT_1:
1607 case ARIZONA_MIC_DETECT_2:
1608 case ARIZONA_MIC_DETECT_3:
1609 case ARIZONA_MIC_NOISE_MIX_CONTROL_1:
1610 case ARIZONA_ISOLATION_CONTROL:
1611 case ARIZONA_JACK_DETECT_ANALOGUE:
1612 case ARIZONA_INPUT_ENABLES:
1613 case ARIZONA_INPUT_RATE:
1614 case ARIZONA_INPUT_VOLUME_RAMP:
1615 case ARIZONA_IN1L_CONTROL:
1616 case ARIZONA_ADC_DIGITAL_VOLUME_1L:
1617 case ARIZONA_DMIC1L_CONTROL:
1618 case ARIZONA_IN1R_CONTROL:
1619 case ARIZONA_ADC_DIGITAL_VOLUME_1R:
1620 case ARIZONA_DMIC1R_CONTROL:
1621 case ARIZONA_IN2L_CONTROL:
1622 case ARIZONA_ADC_DIGITAL_VOLUME_2L:
1623 case ARIZONA_DMIC2L_CONTROL:
1624 case ARIZONA_IN2R_CONTROL:
1625 case ARIZONA_ADC_DIGITAL_VOLUME_2R:
1626 case ARIZONA_DMIC2R_CONTROL:
1627 case ARIZONA_IN3L_CONTROL:
1628 case ARIZONA_ADC_DIGITAL_VOLUME_3L:
1629 case ARIZONA_DMIC3L_CONTROL:
1630 case ARIZONA_IN3R_CONTROL:
1631 case ARIZONA_ADC_DIGITAL_VOLUME_3R:
1632 case ARIZONA_DMIC3R_CONTROL:
1633 case ARIZONA_OUTPUT_ENABLES_1:
1634 case ARIZONA_OUTPUT_STATUS_1:
1635 case ARIZONA_OUTPUT_RATE_1:
1636 case ARIZONA_OUTPUT_VOLUME_RAMP:
1637 case ARIZONA_OUTPUT_PATH_CONFIG_1L:
1638 case ARIZONA_DAC_DIGITAL_VOLUME_1L:
1639 case ARIZONA_DAC_VOLUME_LIMIT_1L:
1640 case ARIZONA_NOISE_GATE_SELECT_1L:
1641 case ARIZONA_OUTPUT_PATH_CONFIG_1R:
1642 case ARIZONA_DAC_DIGITAL_VOLUME_1R:
1643 case ARIZONA_DAC_VOLUME_LIMIT_1R:
1644 case ARIZONA_NOISE_GATE_SELECT_1R:
1645 case ARIZONA_OUTPUT_PATH_CONFIG_2L:
1646 case ARIZONA_DAC_DIGITAL_VOLUME_2L:
1647 case ARIZONA_DAC_VOLUME_LIMIT_2L:
1648 case ARIZONA_NOISE_GATE_SELECT_2L:
1649 case ARIZONA_OUTPUT_PATH_CONFIG_2R:
1650 case ARIZONA_DAC_DIGITAL_VOLUME_2R:
1651 case ARIZONA_DAC_VOLUME_LIMIT_2R:
1652 case ARIZONA_NOISE_GATE_SELECT_2R:
1653 case ARIZONA_OUTPUT_PATH_CONFIG_3L:
1654 case ARIZONA_DAC_DIGITAL_VOLUME_3L:
1655 case ARIZONA_DAC_VOLUME_LIMIT_3L:
1656 case ARIZONA_NOISE_GATE_SELECT_3L:
1657 case ARIZONA_OUTPUT_PATH_CONFIG_3R:
1658 case ARIZONA_DAC_DIGITAL_VOLUME_3R:
1659 case ARIZONA_DAC_VOLUME_LIMIT_3R:
1660 case ARIZONA_OUTPUT_PATH_CONFIG_4L:
1661 case ARIZONA_DAC_DIGITAL_VOLUME_4L:
1662 case ARIZONA_OUT_VOLUME_4L:
1663 case ARIZONA_NOISE_GATE_SELECT_4L:
1664 case ARIZONA_OUTPUT_PATH_CONFIG_4R:
1665 case ARIZONA_DAC_DIGITAL_VOLUME_4R:
1666 case ARIZONA_OUT_VOLUME_4R:
1667 case ARIZONA_NOISE_GATE_SELECT_4R:
1668 case ARIZONA_OUTPUT_PATH_CONFIG_5L:
1669 case ARIZONA_DAC_DIGITAL_VOLUME_5L:
1670 case ARIZONA_DAC_VOLUME_LIMIT_5L:
1671 case ARIZONA_NOISE_GATE_SELECT_5L:
1672 case ARIZONA_OUTPUT_PATH_CONFIG_5R:
1673 case ARIZONA_DAC_DIGITAL_VOLUME_5R:
1674 case ARIZONA_DAC_VOLUME_LIMIT_5R:
1675 case ARIZONA_NOISE_GATE_SELECT_5R:
1676 case ARIZONA_DAC_AEC_CONTROL_1:
1677 case ARIZONA_NOISE_GATE_CONTROL:
1678 case ARIZONA_PDM_SPK1_CTRL_1:
1679 case ARIZONA_PDM_SPK1_CTRL_2:
1680 case ARIZONA_DAC_COMP_1:
1681 case ARIZONA_DAC_COMP_2:
1682 case ARIZONA_DAC_COMP_3:
1683 case ARIZONA_DAC_COMP_4:
1684 case ARIZONA_AIF1_BCLK_CTRL:
1685 case ARIZONA_AIF1_TX_PIN_CTRL:
1686 case ARIZONA_AIF1_RX_PIN_CTRL:
1687 case ARIZONA_AIF1_RATE_CTRL:
1688 case ARIZONA_AIF1_FORMAT:
1689 case ARIZONA_AIF1_TX_BCLK_RATE:
1690 case ARIZONA_AIF1_RX_BCLK_RATE:
1691 case ARIZONA_AIF1_FRAME_CTRL_1:
1692 case ARIZONA_AIF1_FRAME_CTRL_2:
1693 case ARIZONA_AIF1_FRAME_CTRL_3:
1694 case ARIZONA_AIF1_FRAME_CTRL_4:
1695 case ARIZONA_AIF1_FRAME_CTRL_5:
1696 case ARIZONA_AIF1_FRAME_CTRL_6:
1697 case ARIZONA_AIF1_FRAME_CTRL_7:
1698 case ARIZONA_AIF1_FRAME_CTRL_8:
1699 case ARIZONA_AIF1_FRAME_CTRL_9:
1700 case ARIZONA_AIF1_FRAME_CTRL_10:
1701 case ARIZONA_AIF1_FRAME_CTRL_11:
1702 case ARIZONA_AIF1_FRAME_CTRL_12:
1703 case ARIZONA_AIF1_FRAME_CTRL_13:
1704 case ARIZONA_AIF1_FRAME_CTRL_14:
1705 case ARIZONA_AIF1_FRAME_CTRL_15:
1706 case ARIZONA_AIF1_FRAME_CTRL_16:
1707 case ARIZONA_AIF1_FRAME_CTRL_17:
1708 case ARIZONA_AIF1_FRAME_CTRL_18:
1709 case ARIZONA_AIF1_TX_ENABLES:
1710 case ARIZONA_AIF1_RX_ENABLES:
1711 case ARIZONA_AIF1_FORCE_WRITE:
1712 case ARIZONA_AIF2_BCLK_CTRL:
1713 case ARIZONA_AIF2_TX_PIN_CTRL:
1714 case ARIZONA_AIF2_RX_PIN_CTRL:
1715 case ARIZONA_AIF2_RATE_CTRL:
1716 case ARIZONA_AIF2_FORMAT:
1717 case ARIZONA_AIF2_TX_BCLK_RATE:
1718 case ARIZONA_AIF2_RX_BCLK_RATE:
1719 case ARIZONA_AIF2_FRAME_CTRL_1:
1720 case ARIZONA_AIF2_FRAME_CTRL_2:
1721 case ARIZONA_AIF2_FRAME_CTRL_3:
1722 case ARIZONA_AIF2_FRAME_CTRL_4:
1723 case ARIZONA_AIF2_FRAME_CTRL_11:
1724 case ARIZONA_AIF2_FRAME_CTRL_12:
1725 case ARIZONA_AIF2_TX_ENABLES:
1726 case ARIZONA_AIF2_RX_ENABLES:
1727 case ARIZONA_AIF2_FORCE_WRITE:
1728 case ARIZONA_AIF3_BCLK_CTRL:
1729 case ARIZONA_AIF3_TX_PIN_CTRL:
1730 case ARIZONA_AIF3_RX_PIN_CTRL:
1731 case ARIZONA_AIF3_RATE_CTRL:
1732 case ARIZONA_AIF3_FORMAT:
1733 case ARIZONA_AIF3_TX_BCLK_RATE:
1734 case ARIZONA_AIF3_RX_BCLK_RATE:
1735 case ARIZONA_AIF3_FRAME_CTRL_1:
1736 case ARIZONA_AIF3_FRAME_CTRL_2:
1737 case ARIZONA_AIF3_FRAME_CTRL_3:
1738 case ARIZONA_AIF3_FRAME_CTRL_4:
1739 case ARIZONA_AIF3_FRAME_CTRL_11:
1740 case ARIZONA_AIF3_FRAME_CTRL_12:
1741 case ARIZONA_AIF3_TX_ENABLES:
1742 case ARIZONA_AIF3_RX_ENABLES:
1743 case ARIZONA_AIF3_FORCE_WRITE:
1744 case ARIZONA_SLIMBUS_FRAMER_REF_GEAR:
1745 case ARIZONA_SLIMBUS_RATES_1:
1746 case ARIZONA_SLIMBUS_RATES_2:
1747 case ARIZONA_SLIMBUS_RATES_3:
1748 case ARIZONA_SLIMBUS_RATES_4:
1749 case ARIZONA_SLIMBUS_RATES_5:
1750 case ARIZONA_SLIMBUS_RATES_6:
1751 case ARIZONA_SLIMBUS_RATES_7:
1752 case ARIZONA_SLIMBUS_RATES_8:
1753 case ARIZONA_SLIMBUS_RX_CHANNEL_ENABLE:
1754 case ARIZONA_SLIMBUS_TX_CHANNEL_ENABLE:
1755 case ARIZONA_SLIMBUS_RX_PORT_STATUS:
1756 case ARIZONA_SLIMBUS_TX_PORT_STATUS:
1757 case ARIZONA_PWM1MIX_INPUT_1_SOURCE:
1758 case ARIZONA_PWM1MIX_INPUT_1_VOLUME:
1759 case ARIZONA_PWM1MIX_INPUT_2_SOURCE:
1760 case ARIZONA_PWM1MIX_INPUT_2_VOLUME:
1761 case ARIZONA_PWM1MIX_INPUT_3_SOURCE:
1762 case ARIZONA_PWM1MIX_INPUT_3_VOLUME:
1763 case ARIZONA_PWM1MIX_INPUT_4_SOURCE:
1764 case ARIZONA_PWM1MIX_INPUT_4_VOLUME:
1765 case ARIZONA_PWM2MIX_INPUT_1_SOURCE:
1766 case ARIZONA_PWM2MIX_INPUT_1_VOLUME:
1767 case ARIZONA_PWM2MIX_INPUT_2_SOURCE:
1768 case ARIZONA_PWM2MIX_INPUT_2_VOLUME:
1769 case ARIZONA_PWM2MIX_INPUT_3_SOURCE:
1770 case ARIZONA_PWM2MIX_INPUT_3_VOLUME:
1771 case ARIZONA_PWM2MIX_INPUT_4_SOURCE:
1772 case ARIZONA_PWM2MIX_INPUT_4_VOLUME:
1773 case ARIZONA_MICMIX_INPUT_1_SOURCE:
1774 case ARIZONA_MICMIX_INPUT_1_VOLUME:
1775 case ARIZONA_MICMIX_INPUT_2_SOURCE:
1776 case ARIZONA_MICMIX_INPUT_2_VOLUME:
1777 case ARIZONA_MICMIX_INPUT_3_SOURCE:
1778 case ARIZONA_MICMIX_INPUT_3_VOLUME:
1779 case ARIZONA_MICMIX_INPUT_4_SOURCE:
1780 case ARIZONA_MICMIX_INPUT_4_VOLUME:
1781 case ARIZONA_NOISEMIX_INPUT_1_SOURCE:
1782 case ARIZONA_NOISEMIX_INPUT_1_VOLUME:
1783 case ARIZONA_NOISEMIX_INPUT_2_SOURCE:
1784 case ARIZONA_NOISEMIX_INPUT_2_VOLUME:
1785 case ARIZONA_NOISEMIX_INPUT_3_SOURCE:
1786 case ARIZONA_NOISEMIX_INPUT_3_VOLUME:
1787 case ARIZONA_NOISEMIX_INPUT_4_SOURCE:
1788 case ARIZONA_NOISEMIX_INPUT_4_VOLUME:
1789 case ARIZONA_OUT1LMIX_INPUT_1_SOURCE:
1790 case ARIZONA_OUT1LMIX_INPUT_1_VOLUME:
1791 case ARIZONA_OUT1LMIX_INPUT_2_SOURCE:
1792 case ARIZONA_OUT1LMIX_INPUT_2_VOLUME:
1793 case ARIZONA_OUT1LMIX_INPUT_3_SOURCE:
1794 case ARIZONA_OUT1LMIX_INPUT_3_VOLUME:
1795 case ARIZONA_OUT1LMIX_INPUT_4_SOURCE:
1796 case ARIZONA_OUT1LMIX_INPUT_4_VOLUME:
1797 case ARIZONA_OUT1RMIX_INPUT_1_SOURCE:
1798 case ARIZONA_OUT1RMIX_INPUT_1_VOLUME:
1799 case ARIZONA_OUT1RMIX_INPUT_2_SOURCE:
1800 case ARIZONA_OUT1RMIX_INPUT_2_VOLUME:
1801 case ARIZONA_OUT1RMIX_INPUT_3_SOURCE:
1802 case ARIZONA_OUT1RMIX_INPUT_3_VOLUME:
1803 case ARIZONA_OUT1RMIX_INPUT_4_SOURCE:
1804 case ARIZONA_OUT1RMIX_INPUT_4_VOLUME:
1805 case ARIZONA_OUT2LMIX_INPUT_1_SOURCE:
1806 case ARIZONA_OUT2LMIX_INPUT_1_VOLUME:
1807 case ARIZONA_OUT2LMIX_INPUT_2_SOURCE:
1808 case ARIZONA_OUT2LMIX_INPUT_2_VOLUME:
1809 case ARIZONA_OUT2LMIX_INPUT_3_SOURCE:
1810 case ARIZONA_OUT2LMIX_INPUT_3_VOLUME:
1811 case ARIZONA_OUT2LMIX_INPUT_4_SOURCE:
1812 case ARIZONA_OUT2LMIX_INPUT_4_VOLUME:
1813 case ARIZONA_OUT2RMIX_INPUT_1_SOURCE:
1814 case ARIZONA_OUT2RMIX_INPUT_1_VOLUME:
1815 case ARIZONA_OUT2RMIX_INPUT_2_SOURCE:
1816 case ARIZONA_OUT2RMIX_INPUT_2_VOLUME:
1817 case ARIZONA_OUT2RMIX_INPUT_3_SOURCE:
1818 case ARIZONA_OUT2RMIX_INPUT_3_VOLUME:
1819 case ARIZONA_OUT2RMIX_INPUT_4_SOURCE:
1820 case ARIZONA_OUT2RMIX_INPUT_4_VOLUME:
1821 case ARIZONA_OUT3LMIX_INPUT_1_SOURCE:
1822 case ARIZONA_OUT3LMIX_INPUT_1_VOLUME:
1823 case ARIZONA_OUT3LMIX_INPUT_2_SOURCE:
1824 case ARIZONA_OUT3LMIX_INPUT_2_VOLUME:
1825 case ARIZONA_OUT3LMIX_INPUT_3_SOURCE:
1826 case ARIZONA_OUT3LMIX_INPUT_3_VOLUME:
1827 case ARIZONA_OUT3LMIX_INPUT_4_SOURCE:
1828 case ARIZONA_OUT3LMIX_INPUT_4_VOLUME:
1829 case ARIZONA_OUT4LMIX_INPUT_1_SOURCE:
1830 case ARIZONA_OUT4LMIX_INPUT_1_VOLUME:
1831 case ARIZONA_OUT4LMIX_INPUT_2_SOURCE:
1832 case ARIZONA_OUT4LMIX_INPUT_2_VOLUME:
1833 case ARIZONA_OUT4LMIX_INPUT_3_SOURCE:
1834 case ARIZONA_OUT4LMIX_INPUT_3_VOLUME:
1835 case ARIZONA_OUT4LMIX_INPUT_4_SOURCE:
1836 case ARIZONA_OUT4LMIX_INPUT_4_VOLUME:
1837 case ARIZONA_OUT4RMIX_INPUT_1_SOURCE:
1838 case ARIZONA_OUT4RMIX_INPUT_1_VOLUME:
1839 case ARIZONA_OUT4RMIX_INPUT_2_SOURCE:
1840 case ARIZONA_OUT4RMIX_INPUT_2_VOLUME:
1841 case ARIZONA_OUT4RMIX_INPUT_3_SOURCE:
1842 case ARIZONA_OUT4RMIX_INPUT_3_VOLUME:
1843 case ARIZONA_OUT4RMIX_INPUT_4_SOURCE:
1844 case ARIZONA_OUT4RMIX_INPUT_4_VOLUME:
1845 case ARIZONA_OUT5LMIX_INPUT_1_SOURCE:
1846 case ARIZONA_OUT5LMIX_INPUT_1_VOLUME:
1847 case ARIZONA_OUT5LMIX_INPUT_2_SOURCE:
1848 case ARIZONA_OUT5LMIX_INPUT_2_VOLUME:
1849 case ARIZONA_OUT5LMIX_INPUT_3_SOURCE:
1850 case ARIZONA_OUT5LMIX_INPUT_3_VOLUME:
1851 case ARIZONA_OUT5LMIX_INPUT_4_SOURCE:
1852 case ARIZONA_OUT5LMIX_INPUT_4_VOLUME:
1853 case ARIZONA_OUT5RMIX_INPUT_1_SOURCE:
1854 case ARIZONA_OUT5RMIX_INPUT_1_VOLUME:
1855 case ARIZONA_OUT5RMIX_INPUT_2_SOURCE:
1856 case ARIZONA_OUT5RMIX_INPUT_2_VOLUME:
1857 case ARIZONA_OUT5RMIX_INPUT_3_SOURCE:
1858 case ARIZONA_OUT5RMIX_INPUT_3_VOLUME:
1859 case ARIZONA_OUT5RMIX_INPUT_4_SOURCE:
1860 case ARIZONA_OUT5RMIX_INPUT_4_VOLUME:
1861 case ARIZONA_AIF1TX1MIX_INPUT_1_SOURCE:
1862 case ARIZONA_AIF1TX1MIX_INPUT_1_VOLUME:
1863 case ARIZONA_AIF1TX1MIX_INPUT_2_SOURCE:
1864 case ARIZONA_AIF1TX1MIX_INPUT_2_VOLUME:
1865 case ARIZONA_AIF1TX1MIX_INPUT_3_SOURCE:
1866 case ARIZONA_AIF1TX1MIX_INPUT_3_VOLUME:
1867 case ARIZONA_AIF1TX1MIX_INPUT_4_SOURCE:
1868 case ARIZONA_AIF1TX1MIX_INPUT_4_VOLUME:
1869 case ARIZONA_AIF1TX2MIX_INPUT_1_SOURCE:
1870 case ARIZONA_AIF1TX2MIX_INPUT_1_VOLUME:
1871 case ARIZONA_AIF1TX2MIX_INPUT_2_SOURCE:
1872 case ARIZONA_AIF1TX2MIX_INPUT_2_VOLUME:
1873 case ARIZONA_AIF1TX2MIX_INPUT_3_SOURCE:
1874 case ARIZONA_AIF1TX2MIX_INPUT_3_VOLUME:
1875 case ARIZONA_AIF1TX2MIX_INPUT_4_SOURCE:
1876 case ARIZONA_AIF1TX2MIX_INPUT_4_VOLUME:
1877 case ARIZONA_AIF1TX3MIX_INPUT_1_SOURCE:
1878 case ARIZONA_AIF1TX3MIX_INPUT_1_VOLUME:
1879 case ARIZONA_AIF1TX3MIX_INPUT_2_SOURCE:
1880 case ARIZONA_AIF1TX3MIX_INPUT_2_VOLUME:
1881 case ARIZONA_AIF1TX3MIX_INPUT_3_SOURCE:
1882 case ARIZONA_AIF1TX3MIX_INPUT_3_VOLUME:
1883 case ARIZONA_AIF1TX3MIX_INPUT_4_SOURCE:
1884 case ARIZONA_AIF1TX3MIX_INPUT_4_VOLUME:
1885 case ARIZONA_AIF1TX4MIX_INPUT_1_SOURCE:
1886 case ARIZONA_AIF1TX4MIX_INPUT_1_VOLUME:
1887 case ARIZONA_AIF1TX4MIX_INPUT_2_SOURCE:
1888 case ARIZONA_AIF1TX4MIX_INPUT_2_VOLUME:
1889 case ARIZONA_AIF1TX4MIX_INPUT_3_SOURCE:
1890 case ARIZONA_AIF1TX4MIX_INPUT_3_VOLUME:
1891 case ARIZONA_AIF1TX4MIX_INPUT_4_SOURCE:
1892 case ARIZONA_AIF1TX4MIX_INPUT_4_VOLUME:
1893 case ARIZONA_AIF1TX5MIX_INPUT_1_SOURCE:
1894 case ARIZONA_AIF1TX5MIX_INPUT_1_VOLUME:
1895 case ARIZONA_AIF1TX5MIX_INPUT_2_SOURCE:
1896 case ARIZONA_AIF1TX5MIX_INPUT_2_VOLUME:
1897 case ARIZONA_AIF1TX5MIX_INPUT_3_SOURCE:
1898 case ARIZONA_AIF1TX5MIX_INPUT_3_VOLUME:
1899 case ARIZONA_AIF1TX5MIX_INPUT_4_SOURCE:
1900 case ARIZONA_AIF1TX5MIX_INPUT_4_VOLUME:
1901 case ARIZONA_AIF1TX6MIX_INPUT_1_SOURCE:
1902 case ARIZONA_AIF1TX6MIX_INPUT_1_VOLUME:
1903 case ARIZONA_AIF1TX6MIX_INPUT_2_SOURCE:
1904 case ARIZONA_AIF1TX6MIX_INPUT_2_VOLUME:
1905 case ARIZONA_AIF1TX6MIX_INPUT_3_SOURCE:
1906 case ARIZONA_AIF1TX6MIX_INPUT_3_VOLUME:
1907 case ARIZONA_AIF1TX6MIX_INPUT_4_SOURCE:
1908 case ARIZONA_AIF1TX6MIX_INPUT_4_VOLUME:
1909 case ARIZONA_AIF1TX7MIX_INPUT_1_SOURCE:
1910 case ARIZONA_AIF1TX7MIX_INPUT_1_VOLUME:
1911 case ARIZONA_AIF1TX7MIX_INPUT_2_SOURCE:
1912 case ARIZONA_AIF1TX7MIX_INPUT_2_VOLUME:
1913 case ARIZONA_AIF1TX7MIX_INPUT_3_SOURCE:
1914 case ARIZONA_AIF1TX7MIX_INPUT_3_VOLUME:
1915 case ARIZONA_AIF1TX7MIX_INPUT_4_SOURCE:
1916 case ARIZONA_AIF1TX7MIX_INPUT_4_VOLUME:
1917 case ARIZONA_AIF1TX8MIX_INPUT_1_SOURCE:
1918 case ARIZONA_AIF1TX8MIX_INPUT_1_VOLUME:
1919 case ARIZONA_AIF1TX8MIX_INPUT_2_SOURCE:
1920 case ARIZONA_AIF1TX8MIX_INPUT_2_VOLUME:
1921 case ARIZONA_AIF1TX8MIX_INPUT_3_SOURCE:
1922 case ARIZONA_AIF1TX8MIX_INPUT_3_VOLUME:
1923 case ARIZONA_AIF1TX8MIX_INPUT_4_SOURCE:
1924 case ARIZONA_AIF1TX8MIX_INPUT_4_VOLUME:
1925 case ARIZONA_AIF2TX1MIX_INPUT_1_SOURCE:
1926 case ARIZONA_AIF2TX1MIX_INPUT_1_VOLUME:
1927 case ARIZONA_AIF2TX1MIX_INPUT_2_SOURCE:
1928 case ARIZONA_AIF2TX1MIX_INPUT_2_VOLUME:
1929 case ARIZONA_AIF2TX1MIX_INPUT_3_SOURCE:
1930 case ARIZONA_AIF2TX1MIX_INPUT_3_VOLUME:
1931 case ARIZONA_AIF2TX1MIX_INPUT_4_SOURCE:
1932 case ARIZONA_AIF2TX1MIX_INPUT_4_VOLUME:
1933 case ARIZONA_AIF2TX2MIX_INPUT_1_SOURCE:
1934 case ARIZONA_AIF2TX2MIX_INPUT_1_VOLUME:
1935 case ARIZONA_AIF2TX2MIX_INPUT_2_SOURCE:
1936 case ARIZONA_AIF2TX2MIX_INPUT_2_VOLUME:
1937 case ARIZONA_AIF2TX2MIX_INPUT_3_SOURCE:
1938 case ARIZONA_AIF2TX2MIX_INPUT_3_VOLUME:
1939 case ARIZONA_AIF2TX2MIX_INPUT_4_SOURCE:
1940 case ARIZONA_AIF2TX2MIX_INPUT_4_VOLUME:
1941 case ARIZONA_AIF3TX1MIX_INPUT_1_SOURCE:
1942 case ARIZONA_AIF3TX1MIX_INPUT_1_VOLUME:
1943 case ARIZONA_AIF3TX1MIX_INPUT_2_SOURCE:
1944 case ARIZONA_AIF3TX1MIX_INPUT_2_VOLUME:
1945 case ARIZONA_AIF3TX1MIX_INPUT_3_SOURCE:
1946 case ARIZONA_AIF3TX1MIX_INPUT_3_VOLUME:
1947 case ARIZONA_AIF3TX1MIX_INPUT_4_SOURCE:
1948 case ARIZONA_AIF3TX1MIX_INPUT_4_VOLUME:
1949 case ARIZONA_AIF3TX2MIX_INPUT_1_SOURCE:
1950 case ARIZONA_AIF3TX2MIX_INPUT_1_VOLUME:
1951 case ARIZONA_AIF3TX2MIX_INPUT_2_SOURCE:
1952 case ARIZONA_AIF3TX2MIX_INPUT_2_VOLUME:
1953 case ARIZONA_AIF3TX2MIX_INPUT_3_SOURCE:
1954 case ARIZONA_AIF3TX2MIX_INPUT_3_VOLUME:
1955 case ARIZONA_AIF3TX2MIX_INPUT_4_SOURCE:
1956 case ARIZONA_AIF3TX2MIX_INPUT_4_VOLUME:
1957 case ARIZONA_SLIMTX1MIX_INPUT_1_SOURCE:
1958 case ARIZONA_SLIMTX1MIX_INPUT_1_VOLUME:
1959 case ARIZONA_SLIMTX1MIX_INPUT_2_SOURCE:
1960 case ARIZONA_SLIMTX1MIX_INPUT_2_VOLUME:
1961 case ARIZONA_SLIMTX1MIX_INPUT_3_SOURCE:
1962 case ARIZONA_SLIMTX1MIX_INPUT_3_VOLUME:
1963 case ARIZONA_SLIMTX1MIX_INPUT_4_SOURCE:
1964 case ARIZONA_SLIMTX1MIX_INPUT_4_VOLUME:
1965 case ARIZONA_SLIMTX2MIX_INPUT_1_SOURCE:
1966 case ARIZONA_SLIMTX2MIX_INPUT_1_VOLUME:
1967 case ARIZONA_SLIMTX2MIX_INPUT_2_SOURCE:
1968 case ARIZONA_SLIMTX2MIX_INPUT_2_VOLUME:
1969 case ARIZONA_SLIMTX2MIX_INPUT_3_SOURCE:
1970 case ARIZONA_SLIMTX2MIX_INPUT_3_VOLUME:
1971 case ARIZONA_SLIMTX2MIX_INPUT_4_SOURCE:
1972 case ARIZONA_SLIMTX2MIX_INPUT_4_VOLUME:
1973 case ARIZONA_SLIMTX3MIX_INPUT_1_SOURCE:
1974 case ARIZONA_SLIMTX3MIX_INPUT_1_VOLUME:
1975 case ARIZONA_SLIMTX3MIX_INPUT_2_SOURCE:
1976 case ARIZONA_SLIMTX3MIX_INPUT_2_VOLUME:
1977 case ARIZONA_SLIMTX3MIX_INPUT_3_SOURCE:
1978 case ARIZONA_SLIMTX3MIX_INPUT_3_VOLUME:
1979 case ARIZONA_SLIMTX3MIX_INPUT_4_SOURCE:
1980 case ARIZONA_SLIMTX3MIX_INPUT_4_VOLUME:
1981 case ARIZONA_SLIMTX4MIX_INPUT_1_SOURCE:
1982 case ARIZONA_SLIMTX4MIX_INPUT_1_VOLUME:
1983 case ARIZONA_SLIMTX4MIX_INPUT_2_SOURCE:
1984 case ARIZONA_SLIMTX4MIX_INPUT_2_VOLUME:
1985 case ARIZONA_SLIMTX4MIX_INPUT_3_SOURCE:
1986 case ARIZONA_SLIMTX4MIX_INPUT_3_VOLUME:
1987 case ARIZONA_SLIMTX4MIX_INPUT_4_SOURCE:
1988 case ARIZONA_SLIMTX4MIX_INPUT_4_VOLUME:
1989 case ARIZONA_SLIMTX5MIX_INPUT_1_SOURCE:
1990 case ARIZONA_SLIMTX5MIX_INPUT_1_VOLUME:
1991 case ARIZONA_SLIMTX5MIX_INPUT_2_SOURCE:
1992 case ARIZONA_SLIMTX5MIX_INPUT_2_VOLUME:
1993 case ARIZONA_SLIMTX5MIX_INPUT_3_SOURCE:
1994 case ARIZONA_SLIMTX5MIX_INPUT_3_VOLUME:
1995 case ARIZONA_SLIMTX5MIX_INPUT_4_SOURCE:
1996 case ARIZONA_SLIMTX5MIX_INPUT_4_VOLUME:
1997 case ARIZONA_SLIMTX6MIX_INPUT_1_SOURCE:
1998 case ARIZONA_SLIMTX6MIX_INPUT_1_VOLUME:
1999 case ARIZONA_SLIMTX6MIX_INPUT_2_SOURCE:
2000 case ARIZONA_SLIMTX6MIX_INPUT_2_VOLUME:
2001 case ARIZONA_SLIMTX6MIX_INPUT_3_SOURCE:
2002 case ARIZONA_SLIMTX6MIX_INPUT_3_VOLUME:
2003 case ARIZONA_SLIMTX6MIX_INPUT_4_SOURCE:
2004 case ARIZONA_SLIMTX6MIX_INPUT_4_VOLUME:
2005 case ARIZONA_SLIMTX7MIX_INPUT_1_SOURCE:
2006 case ARIZONA_SLIMTX7MIX_INPUT_1_VOLUME:
2007 case ARIZONA_SLIMTX7MIX_INPUT_2_SOURCE:
2008 case ARIZONA_SLIMTX7MIX_INPUT_2_VOLUME:
2009 case ARIZONA_SLIMTX7MIX_INPUT_3_SOURCE:
2010 case ARIZONA_SLIMTX7MIX_INPUT_3_VOLUME:
2011 case ARIZONA_SLIMTX7MIX_INPUT_4_SOURCE:
2012 case ARIZONA_SLIMTX7MIX_INPUT_4_VOLUME:
2013 case ARIZONA_SLIMTX8MIX_INPUT_1_SOURCE:
2014 case ARIZONA_SLIMTX8MIX_INPUT_1_VOLUME:
2015 case ARIZONA_SLIMTX8MIX_INPUT_2_SOURCE:
2016 case ARIZONA_SLIMTX8MIX_INPUT_2_VOLUME:
2017 case ARIZONA_SLIMTX8MIX_INPUT_3_SOURCE:
2018 case ARIZONA_SLIMTX8MIX_INPUT_3_VOLUME:
2019 case ARIZONA_SLIMTX8MIX_INPUT_4_SOURCE:
2020 case ARIZONA_SLIMTX8MIX_INPUT_4_VOLUME:
2021 case ARIZONA_EQ1MIX_INPUT_1_SOURCE:
2022 case ARIZONA_EQ1MIX_INPUT_1_VOLUME:
2023 case ARIZONA_EQ1MIX_INPUT_2_SOURCE:
2024 case ARIZONA_EQ1MIX_INPUT_2_VOLUME:
2025 case ARIZONA_EQ1MIX_INPUT_3_SOURCE:
2026 case ARIZONA_EQ1MIX_INPUT_3_VOLUME:
2027 case ARIZONA_EQ1MIX_INPUT_4_SOURCE:
2028 case ARIZONA_EQ1MIX_INPUT_4_VOLUME:
2029 case ARIZONA_EQ2MIX_INPUT_1_SOURCE:
2030 case ARIZONA_EQ2MIX_INPUT_1_VOLUME:
2031 case ARIZONA_EQ2MIX_INPUT_2_SOURCE:
2032 case ARIZONA_EQ2MIX_INPUT_2_VOLUME:
2033 case ARIZONA_EQ2MIX_INPUT_3_SOURCE:
2034 case ARIZONA_EQ2MIX_INPUT_3_VOLUME:
2035 case ARIZONA_EQ2MIX_INPUT_4_SOURCE:
2036 case ARIZONA_EQ2MIX_INPUT_4_VOLUME:
2037 case ARIZONA_EQ3MIX_INPUT_1_SOURCE:
2038 case ARIZONA_EQ3MIX_INPUT_1_VOLUME:
2039 case ARIZONA_EQ3MIX_INPUT_2_SOURCE:
2040 case ARIZONA_EQ3MIX_INPUT_2_VOLUME:
2041 case ARIZONA_EQ3MIX_INPUT_3_SOURCE:
2042 case ARIZONA_EQ3MIX_INPUT_3_VOLUME:
2043 case ARIZONA_EQ3MIX_INPUT_4_SOURCE:
2044 case ARIZONA_EQ3MIX_INPUT_4_VOLUME:
2045 case ARIZONA_EQ4MIX_INPUT_1_SOURCE:
2046 case ARIZONA_EQ4MIX_INPUT_1_VOLUME:
2047 case ARIZONA_EQ4MIX_INPUT_2_SOURCE:
2048 case ARIZONA_EQ4MIX_INPUT_2_VOLUME:
2049 case ARIZONA_EQ4MIX_INPUT_3_SOURCE:
2050 case ARIZONA_EQ4MIX_INPUT_3_VOLUME:
2051 case ARIZONA_EQ4MIX_INPUT_4_SOURCE:
2052 case ARIZONA_EQ4MIX_INPUT_4_VOLUME:
2053 case ARIZONA_DRC1LMIX_INPUT_1_SOURCE:
2054 case ARIZONA_DRC1LMIX_INPUT_1_VOLUME:
2055 case ARIZONA_DRC1LMIX_INPUT_2_SOURCE:
2056 case ARIZONA_DRC1LMIX_INPUT_2_VOLUME:
2057 case ARIZONA_DRC1LMIX_INPUT_3_SOURCE:
2058 case ARIZONA_DRC1LMIX_INPUT_3_VOLUME:
2059 case ARIZONA_DRC1LMIX_INPUT_4_SOURCE:
2060 case ARIZONA_DRC1LMIX_INPUT_4_VOLUME:
2061 case ARIZONA_DRC1RMIX_INPUT_1_SOURCE:
2062 case ARIZONA_DRC1RMIX_INPUT_1_VOLUME:
2063 case ARIZONA_DRC1RMIX_INPUT_2_SOURCE:
2064 case ARIZONA_DRC1RMIX_INPUT_2_VOLUME:
2065 case ARIZONA_DRC1RMIX_INPUT_3_SOURCE:
2066 case ARIZONA_DRC1RMIX_INPUT_3_VOLUME:
2067 case ARIZONA_DRC1RMIX_INPUT_4_SOURCE:
2068 case ARIZONA_DRC1RMIX_INPUT_4_VOLUME:
2069 case ARIZONA_DRC2LMIX_INPUT_1_SOURCE:
2070 case ARIZONA_DRC2LMIX_INPUT_1_VOLUME:
2071 case ARIZONA_DRC2LMIX_INPUT_2_SOURCE:
2072 case ARIZONA_DRC2LMIX_INPUT_2_VOLUME:
2073 case ARIZONA_DRC2LMIX_INPUT_3_SOURCE:
2074 case ARIZONA_DRC2LMIX_INPUT_3_VOLUME:
2075 case ARIZONA_DRC2LMIX_INPUT_4_SOURCE:
2076 case ARIZONA_DRC2LMIX_INPUT_4_VOLUME:
2077 case ARIZONA_DRC2RMIX_INPUT_1_SOURCE:
2078 case ARIZONA_DRC2RMIX_INPUT_1_VOLUME:
2079 case ARIZONA_DRC2RMIX_INPUT_2_SOURCE:
2080 case ARIZONA_DRC2RMIX_INPUT_2_VOLUME:
2081 case ARIZONA_DRC2RMIX_INPUT_3_SOURCE:
2082 case ARIZONA_DRC2RMIX_INPUT_3_VOLUME:
2083 case ARIZONA_DRC2RMIX_INPUT_4_SOURCE:
2084 case ARIZONA_DRC2RMIX_INPUT_4_VOLUME:
2085 case ARIZONA_HPLP1MIX_INPUT_1_SOURCE:
2086 case ARIZONA_HPLP1MIX_INPUT_1_VOLUME:
2087 case ARIZONA_HPLP1MIX_INPUT_2_SOURCE:
2088 case ARIZONA_HPLP1MIX_INPUT_2_VOLUME:
2089 case ARIZONA_HPLP1MIX_INPUT_3_SOURCE:
2090 case ARIZONA_HPLP1MIX_INPUT_3_VOLUME:
2091 case ARIZONA_HPLP1MIX_INPUT_4_SOURCE:
2092 case ARIZONA_HPLP1MIX_INPUT_4_VOLUME:
2093 case ARIZONA_HPLP2MIX_INPUT_1_SOURCE:
2094 case ARIZONA_HPLP2MIX_INPUT_1_VOLUME:
2095 case ARIZONA_HPLP2MIX_INPUT_2_SOURCE:
2096 case ARIZONA_HPLP2MIX_INPUT_2_VOLUME:
2097 case ARIZONA_HPLP2MIX_INPUT_3_SOURCE:
2098 case ARIZONA_HPLP2MIX_INPUT_3_VOLUME:
2099 case ARIZONA_HPLP2MIX_INPUT_4_SOURCE:
2100 case ARIZONA_HPLP2MIX_INPUT_4_VOLUME:
2101 case ARIZONA_HPLP3MIX_INPUT_1_SOURCE:
2102 case ARIZONA_HPLP3MIX_INPUT_1_VOLUME:
2103 case ARIZONA_HPLP3MIX_INPUT_2_SOURCE:
2104 case ARIZONA_HPLP3MIX_INPUT_2_VOLUME:
2105 case ARIZONA_HPLP3MIX_INPUT_3_SOURCE:
2106 case ARIZONA_HPLP3MIX_INPUT_3_VOLUME:
2107 case ARIZONA_HPLP3MIX_INPUT_4_SOURCE:
2108 case ARIZONA_HPLP3MIX_INPUT_4_VOLUME:
2109 case ARIZONA_HPLP4MIX_INPUT_1_SOURCE:
2110 case ARIZONA_HPLP4MIX_INPUT_1_VOLUME:
2111 case ARIZONA_HPLP4MIX_INPUT_2_SOURCE:
2112 case ARIZONA_HPLP4MIX_INPUT_2_VOLUME:
2113 case ARIZONA_HPLP4MIX_INPUT_3_SOURCE:
2114 case ARIZONA_HPLP4MIX_INPUT_3_VOLUME:
2115 case ARIZONA_HPLP4MIX_INPUT_4_SOURCE:
2116 case ARIZONA_HPLP4MIX_INPUT_4_VOLUME:
2117 case ARIZONA_DSP1LMIX_INPUT_1_SOURCE:
2118 case ARIZONA_DSP1LMIX_INPUT_1_VOLUME:
2119 case ARIZONA_DSP1LMIX_INPUT_2_SOURCE:
2120 case ARIZONA_DSP1LMIX_INPUT_2_VOLUME:
2121 case ARIZONA_DSP1LMIX_INPUT_3_SOURCE:
2122 case ARIZONA_DSP1LMIX_INPUT_3_VOLUME:
2123 case ARIZONA_DSP1LMIX_INPUT_4_SOURCE:
2124 case ARIZONA_DSP1LMIX_INPUT_4_VOLUME:
2125 case ARIZONA_DSP1RMIX_INPUT_1_SOURCE:
2126 case ARIZONA_DSP1RMIX_INPUT_1_VOLUME:
2127 case ARIZONA_DSP1RMIX_INPUT_2_SOURCE:
2128 case ARIZONA_DSP1RMIX_INPUT_2_VOLUME:
2129 case ARIZONA_DSP1RMIX_INPUT_3_SOURCE:
2130 case ARIZONA_DSP1RMIX_INPUT_3_VOLUME:
2131 case ARIZONA_DSP1RMIX_INPUT_4_SOURCE:
2132 case ARIZONA_DSP1RMIX_INPUT_4_VOLUME:
2133 case ARIZONA_DSP1AUX1MIX_INPUT_1_SOURCE:
2134 case ARIZONA_DSP1AUX2MIX_INPUT_1_SOURCE:
2135 case ARIZONA_DSP1AUX3MIX_INPUT_1_SOURCE:
2136 case ARIZONA_DSP1AUX4MIX_INPUT_1_SOURCE:
2137 case ARIZONA_DSP1AUX5MIX_INPUT_1_SOURCE:
2138 case ARIZONA_DSP1AUX6MIX_INPUT_1_SOURCE:
2139 case ARIZONA_ASRC1LMIX_INPUT_1_SOURCE:
2140 case ARIZONA_ASRC1RMIX_INPUT_1_SOURCE:
2141 case ARIZONA_ASRC2LMIX_INPUT_1_SOURCE:
2142 case ARIZONA_ASRC2RMIX_INPUT_1_SOURCE:
2143 case ARIZONA_ISRC1DEC1MIX_INPUT_1_SOURCE:
2144 case ARIZONA_ISRC1DEC2MIX_INPUT_1_SOURCE:
2145 case ARIZONA_ISRC1INT1MIX_INPUT_1_SOURCE:
2146 case ARIZONA_ISRC1INT2MIX_INPUT_1_SOURCE:
2147 case ARIZONA_ISRC2DEC1MIX_INPUT_1_SOURCE:
2148 case ARIZONA_ISRC2DEC2MIX_INPUT_1_SOURCE:
2149 case ARIZONA_ISRC2INT1MIX_INPUT_1_SOURCE:
2150 case ARIZONA_ISRC2INT2MIX_INPUT_1_SOURCE:
2151 case ARIZONA_GPIO1_CTRL:
2152 case ARIZONA_GPIO2_CTRL:
2153 case ARIZONA_GPIO3_CTRL:
2154 case ARIZONA_GPIO4_CTRL:
2155 case ARIZONA_GPIO5_CTRL:
2156 case ARIZONA_IRQ_CTRL_1:
2157 case ARIZONA_GPIO_DEBOUNCE_CONFIG:
2158 case ARIZONA_MISC_PAD_CTRL_1:
2159 case ARIZONA_MISC_PAD_CTRL_2:
2160 case ARIZONA_MISC_PAD_CTRL_3:
2161 case ARIZONA_MISC_PAD_CTRL_4:
2162 case ARIZONA_MISC_PAD_CTRL_5:
2163 case ARIZONA_MISC_PAD_CTRL_6:
2164 case ARIZONA_INTERRUPT_STATUS_1:
2165 case ARIZONA_INTERRUPT_STATUS_2:
2166 case ARIZONA_INTERRUPT_STATUS_3:
2167 case ARIZONA_INTERRUPT_STATUS_4:
2168 case ARIZONA_INTERRUPT_STATUS_5:
2169 case ARIZONA_INTERRUPT_STATUS_1_MASK:
2170 case ARIZONA_INTERRUPT_STATUS_2_MASK:
2171 case ARIZONA_INTERRUPT_STATUS_3_MASK:
2172 case ARIZONA_INTERRUPT_STATUS_4_MASK:
2173 case ARIZONA_INTERRUPT_STATUS_5_MASK:
2174 case ARIZONA_INTERRUPT_CONTROL:
2175 case ARIZONA_IRQ2_STATUS_1:
2176 case ARIZONA_IRQ2_STATUS_2:
2177 case ARIZONA_IRQ2_STATUS_3:
2178 case ARIZONA_IRQ2_STATUS_4:
2179 case ARIZONA_IRQ2_STATUS_5:
2180 case ARIZONA_IRQ2_STATUS_1_MASK:
2181 case ARIZONA_IRQ2_STATUS_2_MASK:
2182 case ARIZONA_IRQ2_STATUS_3_MASK:
2183 case ARIZONA_IRQ2_STATUS_4_MASK:
2184 case ARIZONA_IRQ2_STATUS_5_MASK:
2185 case ARIZONA_IRQ2_CONTROL:
2186 case ARIZONA_INTERRUPT_RAW_STATUS_2:
2187 case ARIZONA_INTERRUPT_RAW_STATUS_3:
2188 case ARIZONA_INTERRUPT_RAW_STATUS_4:
2189 case ARIZONA_INTERRUPT_RAW_STATUS_5:
2190 case ARIZONA_INTERRUPT_RAW_STATUS_6:
2191 case ARIZONA_INTERRUPT_RAW_STATUS_7:
2192 case ARIZONA_INTERRUPT_RAW_STATUS_8:
2193 case ARIZONA_IRQ_PIN_STATUS:
2194 case ARIZONA_ADSP2_IRQ0:
2195 case ARIZONA_AOD_WKUP_AND_TRIG:
2196 case ARIZONA_AOD_IRQ1:
2197 case ARIZONA_AOD_IRQ2:
2198 case ARIZONA_AOD_IRQ_MASK_IRQ1:
2199 case ARIZONA_AOD_IRQ_MASK_IRQ2:
2200 case ARIZONA_AOD_IRQ_RAW_STATUS:
2201 case ARIZONA_JACK_DETECT_DEBOUNCE:
2202 case ARIZONA_FX_CTRL1:
2203 case ARIZONA_FX_CTRL2:
2204 case ARIZONA_EQ1_1:
2205 case ARIZONA_EQ1_2:
2206 case ARIZONA_EQ1_3:
2207 case ARIZONA_EQ1_4:
2208 case ARIZONA_EQ1_5:
2209 case ARIZONA_EQ1_6:
2210 case ARIZONA_EQ1_7:
2211 case ARIZONA_EQ1_8:
2212 case ARIZONA_EQ1_9:
2213 case ARIZONA_EQ1_10:
2214 case ARIZONA_EQ1_11:
2215 case ARIZONA_EQ1_12:
2216 case ARIZONA_EQ1_13:
2217 case ARIZONA_EQ1_14:
2218 case ARIZONA_EQ1_15:
2219 case ARIZONA_EQ1_16:
2220 case ARIZONA_EQ1_17:
2221 case ARIZONA_EQ1_18:
2222 case ARIZONA_EQ1_19:
2223 case ARIZONA_EQ1_20:
2224 case ARIZONA_EQ1_21:
2225 case ARIZONA_EQ2_1:
2226 case ARIZONA_EQ2_2:
2227 case ARIZONA_EQ2_3:
2228 case ARIZONA_EQ2_4:
2229 case ARIZONA_EQ2_5:
2230 case ARIZONA_EQ2_6:
2231 case ARIZONA_EQ2_7:
2232 case ARIZONA_EQ2_8:
2233 case ARIZONA_EQ2_9:
2234 case ARIZONA_EQ2_10:
2235 case ARIZONA_EQ2_11:
2236 case ARIZONA_EQ2_12:
2237 case ARIZONA_EQ2_13:
2238 case ARIZONA_EQ2_14:
2239 case ARIZONA_EQ2_15:
2240 case ARIZONA_EQ2_16:
2241 case ARIZONA_EQ2_17:
2242 case ARIZONA_EQ2_18:
2243 case ARIZONA_EQ2_19:
2244 case ARIZONA_EQ2_20:
2245 case ARIZONA_EQ2_21:
2246 case ARIZONA_EQ3_1:
2247 case ARIZONA_EQ3_2:
2248 case ARIZONA_EQ3_3:
2249 case ARIZONA_EQ3_4:
2250 case ARIZONA_EQ3_5:
2251 case ARIZONA_EQ3_6:
2252 case ARIZONA_EQ3_7:
2253 case ARIZONA_EQ3_8:
2254 case ARIZONA_EQ3_9:
2255 case ARIZONA_EQ3_10:
2256 case ARIZONA_EQ3_11:
2257 case ARIZONA_EQ3_12:
2258 case ARIZONA_EQ3_13:
2259 case ARIZONA_EQ3_14:
2260 case ARIZONA_EQ3_15:
2261 case ARIZONA_EQ3_16:
2262 case ARIZONA_EQ3_17:
2263 case ARIZONA_EQ3_18:
2264 case ARIZONA_EQ3_19:
2265 case ARIZONA_EQ3_20:
2266 case ARIZONA_EQ3_21:
2267 case ARIZONA_EQ4_1:
2268 case ARIZONA_EQ4_2:
2269 case ARIZONA_EQ4_3:
2270 case ARIZONA_EQ4_4:
2271 case ARIZONA_EQ4_5:
2272 case ARIZONA_EQ4_6:
2273 case ARIZONA_EQ4_7:
2274 case ARIZONA_EQ4_8:
2275 case ARIZONA_EQ4_9:
2276 case ARIZONA_EQ4_10:
2277 case ARIZONA_EQ4_11:
2278 case ARIZONA_EQ4_12:
2279 case ARIZONA_EQ4_13:
2280 case ARIZONA_EQ4_14:
2281 case ARIZONA_EQ4_15:
2282 case ARIZONA_EQ4_16:
2283 case ARIZONA_EQ4_17:
2284 case ARIZONA_EQ4_18:
2285 case ARIZONA_EQ4_19:
2286 case ARIZONA_EQ4_20:
2287 case ARIZONA_EQ4_21:
2288 case ARIZONA_DRC1_CTRL1:
2289 case ARIZONA_DRC1_CTRL2:
2290 case ARIZONA_DRC1_CTRL3:
2291 case ARIZONA_DRC1_CTRL4:
2292 case ARIZONA_DRC1_CTRL5:
2293 case ARIZONA_DRC2_CTRL1:
2294 case ARIZONA_DRC2_CTRL2:
2295 case ARIZONA_DRC2_CTRL3:
2296 case ARIZONA_DRC2_CTRL4:
2297 case ARIZONA_DRC2_CTRL5:
2298 case ARIZONA_HPLPF1_1:
2299 case ARIZONA_HPLPF1_2:
2300 case ARIZONA_HPLPF2_1:
2301 case ARIZONA_HPLPF2_2:
2302 case ARIZONA_HPLPF3_1:
2303 case ARIZONA_HPLPF3_2:
2304 case ARIZONA_HPLPF4_1:
2305 case ARIZONA_HPLPF4_2:
2306 case ARIZONA_ASRC_ENABLE:
2307 case ARIZONA_ASRC_RATE1:
2308 case ARIZONA_ASRC_RATE2:
2309 case ARIZONA_ISRC_1_CTRL_1:
2310 case ARIZONA_ISRC_1_CTRL_2:
2311 case ARIZONA_ISRC_1_CTRL_3:
2312 case ARIZONA_ISRC_2_CTRL_1:
2313 case ARIZONA_ISRC_2_CTRL_2:
2314 case ARIZONA_ISRC_2_CTRL_3:
2315 case ARIZONA_ISRC_3_CTRL_1:
2316 case ARIZONA_ISRC_3_CTRL_2:
2317 case ARIZONA_ISRC_3_CTRL_3:
2318 case ARIZONA_DSP1_CONTROL_1:
2319 case ARIZONA_DSP1_CLOCKING_1:
2320 case ARIZONA_DSP1_STATUS_1:
2321 case ARIZONA_DSP1_STATUS_2:
2322 return true;
2323 default:
2324 return false;
2325 }
2326}
2327
2328static bool wm5102_volatile_register(struct device *dev, unsigned int reg)
2329{
2330 switch (reg) {
2331 case ARIZONA_SOFTWARE_RESET:
2332 case ARIZONA_DEVICE_REVISION:
2333 case ARIZONA_OUTPUT_STATUS_1:
2334 case ARIZONA_SAMPLE_RATE_1_STATUS:
2335 case ARIZONA_SAMPLE_RATE_2_STATUS:
2336 case ARIZONA_SAMPLE_RATE_3_STATUS:
2337 case ARIZONA_HAPTICS_STATUS:
2338 case ARIZONA_ASYNC_SAMPLE_RATE_1_STATUS:
2339 case ARIZONA_FX_CTRL2:
2340 case ARIZONA_INTERRUPT_STATUS_1:
2341 case ARIZONA_INTERRUPT_STATUS_2:
2342 case ARIZONA_INTERRUPT_STATUS_3:
2343 case ARIZONA_INTERRUPT_STATUS_4:
2344 case ARIZONA_INTERRUPT_STATUS_5:
2345 case ARIZONA_IRQ2_STATUS_1:
2346 case ARIZONA_IRQ2_STATUS_2:
2347 case ARIZONA_IRQ2_STATUS_3:
2348 case ARIZONA_IRQ2_STATUS_4:
2349 case ARIZONA_IRQ2_STATUS_5:
2350 case ARIZONA_INTERRUPT_RAW_STATUS_2:
2351 case ARIZONA_INTERRUPT_RAW_STATUS_3:
2352 case ARIZONA_INTERRUPT_RAW_STATUS_4:
2353 case ARIZONA_INTERRUPT_RAW_STATUS_5:
2354 case ARIZONA_INTERRUPT_RAW_STATUS_6:
2355 case ARIZONA_INTERRUPT_RAW_STATUS_7:
2356 case ARIZONA_INTERRUPT_RAW_STATUS_8:
2357 case ARIZONA_IRQ_PIN_STATUS:
2358 case ARIZONA_AOD_WKUP_AND_TRIG:
2359 case ARIZONA_AOD_IRQ1:
2360 case ARIZONA_AOD_IRQ2:
2361 case ARIZONA_AOD_IRQ_RAW_STATUS:
2362 case ARIZONA_DSP1_STATUS_1:
2363 case ARIZONA_DSP1_STATUS_2:
2364 case ARIZONA_HEADPHONE_DETECT_2:
2365 case ARIZONA_MIC_DETECT_3:
2366 return true;
2367 default:
2368 return false;
2369 }
2370}
2371
2372const struct regmap_config wm5102_spi_regmap = {
2373 .reg_bits = 32,
2374 .pad_bits = 16,
2375 .val_bits = 16,
2376
2377 .max_register = ARIZONA_DSP1_STATUS_2,
2378 .readable_reg = wm5102_readable_register,
2379 .volatile_reg = wm5102_volatile_register,
2380
2381 .cache_type = REGCACHE_RBTREE,
2382 .reg_defaults = wm5102_reg_default,
2383 .num_reg_defaults = ARRAY_SIZE(wm5102_reg_default),
2384};
2385EXPORT_SYMBOL_GPL(wm5102_spi_regmap);
2386
2387const struct regmap_config wm5102_i2c_regmap = {
2388 .reg_bits = 32,
2389 .val_bits = 16,
2390
2391 .max_register = ARIZONA_DSP1_STATUS_2,
2392 .readable_reg = wm5102_readable_register,
2393 .volatile_reg = wm5102_volatile_register,
2394
2395 .cache_type = REGCACHE_RBTREE,
2396 .reg_defaults = wm5102_reg_default,
2397 .num_reg_defaults = ARRAY_SIZE(wm5102_reg_default),
2398};
2399EXPORT_SYMBOL_GPL(wm5102_i2c_regmap);
diff --git a/drivers/mfd/wm5110-tables.c b/drivers/mfd/wm5110-tables.c
new file mode 100644
index 000000000000..bd8782c8896b
--- /dev/null
+++ b/drivers/mfd/wm5110-tables.c
@@ -0,0 +1,2281 @@
1/*
2 * wm5110-tables.c -- WM5110 data tables
3 *
4 * Copyright 2012 Wolfson Microelectronics plc
5 *
6 * Author: Mark Brown <broonie@opensource.wolfsonmicro.com>
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License version 2 as
10 * published by the Free Software Foundation.
11 */
12
13#include <linux/module.h>
14
15#include <linux/mfd/arizona/core.h>
16#include <linux/mfd/arizona/registers.h>
17
18#include "arizona.h"
19
20#define WM5110_NUM_AOD_ISR 2
21#define WM5110_NUM_ISR 5
22
23static const struct reg_default wm5110_reva_patch[] = {
24 { 0x80, 0x3 },
25 { 0x44, 0x20 },
26 { 0x45, 0x40 },
27 { 0x46, 0x60 },
28 { 0x47, 0x80 },
29 { 0x48, 0xa0 },
30 { 0x51, 0x13 },
31 { 0x52, 0x33 },
32 { 0x53, 0x53 },
33 { 0x54, 0x73 },
34 { 0x55, 0x75 },
35 { 0x56, 0xb3 },
36 { 0x2ef, 0x124 },
37 { 0x2ef, 0x124 },
38 { 0x2f0, 0x124 },
39 { 0x2f0, 0x124 },
40 { 0x2f1, 0x124 },
41 { 0x2f1, 0x124 },
42 { 0x2f2, 0x124 },
43 { 0x2f2, 0x124 },
44 { 0x2f3, 0x124 },
45 { 0x2f3, 0x124 },
46 { 0x2f4, 0x124 },
47 { 0x2f4, 0x124 },
48 { 0x2eb, 0x60 },
49 { 0x2ec, 0x60 },
50 { 0x2ed, 0x60 },
51 { 0xc30, 0x3e3e },
52 { 0xc30, 0x3e3e },
53 { 0xc31, 0x3e },
54 { 0xc32, 0x3e3e },
55 { 0xc32, 0x3e3e },
56 { 0xc33, 0x3e3e },
57 { 0xc33, 0x3e3e },
58 { 0xc34, 0x3e3e },
59 { 0xc34, 0x3e3e },
60 { 0xc35, 0x3e3e },
61 { 0xc35, 0x3e3e },
62 { 0xc36, 0x3e3e },
63 { 0xc36, 0x3e3e },
64 { 0xc37, 0x3e3e },
65 { 0xc37, 0x3e3e },
66 { 0xc38, 0x3e3e },
67 { 0xc38, 0x3e3e },
68 { 0xc30, 0x3e3e },
69 { 0xc30, 0x3e3e },
70 { 0xc39, 0x3e3e },
71 { 0xc39, 0x3e3e },
72 { 0xc3a, 0x3e3e },
73 { 0xc3a, 0x3e3e },
74 { 0xc3b, 0x3e3e },
75 { 0xc3b, 0x3e3e },
76 { 0xc3c, 0x3e },
77 { 0x201, 0x18a5 },
78 { 0x201, 0x18a5 },
79 { 0x201, 0x18a5 },
80 { 0x202, 0x4100 },
81 { 0x460, 0xc00 },
82 { 0x461, 0x8000 },
83 { 0x462, 0xc01 },
84 { 0x463, 0x50f0 },
85 { 0x464, 0xc01 },
86 { 0x465, 0x4820 },
87 { 0x466, 0xc01 },
88 { 0x466, 0xc01 },
89 { 0x467, 0x4040 },
90 { 0x468, 0xc01 },
91 { 0x468, 0xc01 },
92 { 0x469, 0x3940 },
93 { 0x46a, 0xc01 },
94 { 0x46a, 0xc01 },
95 { 0x46a, 0xc01 },
96 { 0x46b, 0x3310 },
97 { 0x46c, 0x801 },
98 { 0x46c, 0x801 },
99 { 0x46d, 0x2d80 },
100 { 0x46e, 0x801 },
101 { 0x46e, 0x801 },
102 { 0x46f, 0x2890 },
103 { 0x470, 0x801 },
104 { 0x470, 0x801 },
105 { 0x471, 0x1990 },
106 { 0x472, 0x801 },
107 { 0x472, 0x801 },
108 { 0x473, 0x1450 },
109 { 0x474, 0x801 },
110 { 0x474, 0x801 },
111 { 0x474, 0x801 },
112 { 0x475, 0x1020 },
113 { 0x476, 0x801 },
114 { 0x476, 0x801 },
115 { 0x476, 0x801 },
116 { 0x477, 0xcd0 },
117 { 0x478, 0x806 },
118 { 0x478, 0x806 },
119 { 0x479, 0xa30 },
120 { 0x47a, 0x806 },
121 { 0x47a, 0x806 },
122 { 0x47b, 0x810 },
123 { 0x47c, 0x80e },
124 { 0x47c, 0x80e },
125 { 0x47d, 0x510 },
126 { 0x47e, 0x81f },
127 { 0x47e, 0x81f },
128 { 0x2DB, 0x0A00 },
129 { 0x2DD, 0x0023 },
130 { 0x2DF, 0x0102 },
131 { 0x80, 0x0 },
132 { 0xC20, 0x0002 },
133 { 0x209, 0x002A },
134};
135
136/* We use a function so we can use ARRAY_SIZE() */
137int wm5110_patch(struct arizona *arizona)
138{
139 switch (arizona->rev) {
140 case 0:
141 case 1:
142 return regmap_register_patch(arizona->regmap,
143 wm5110_reva_patch,
144 ARRAY_SIZE(wm5110_reva_patch));
145 default:
146 return 0;
147 }
148}
149EXPORT_SYMBOL_GPL(wm5110_patch);
150
151static const struct regmap_irq wm5110_aod_irqs[ARIZONA_NUM_IRQ] = {
152 [ARIZONA_IRQ_GP5_FALL] = { .mask = ARIZONA_GP5_FALL_EINT1 },
153 [ARIZONA_IRQ_GP5_RISE] = { .mask = ARIZONA_GP5_RISE_EINT1 },
154 [ARIZONA_IRQ_JD_FALL] = { .mask = ARIZONA_JD1_FALL_EINT1 },
155 [ARIZONA_IRQ_JD_RISE] = { .mask = ARIZONA_JD1_RISE_EINT1 },
156};
157
158const struct regmap_irq_chip wm5110_aod = {
159 .name = "wm5110 AOD",
160 .status_base = ARIZONA_AOD_IRQ1,
161 .mask_base = ARIZONA_AOD_IRQ_MASK_IRQ1,
162 .ack_base = ARIZONA_AOD_IRQ1,
163 .wake_base = ARIZONA_WAKE_CONTROL,
164 .num_regs = 1,
165 .irqs = wm5110_aod_irqs,
166 .num_irqs = ARRAY_SIZE(wm5110_aod_irqs),
167};
168EXPORT_SYMBOL_GPL(wm5110_aod);
169
170static const struct regmap_irq wm5110_irqs[ARIZONA_NUM_IRQ] = {
171 [ARIZONA_IRQ_GP4] = { .reg_offset = 0, .mask = ARIZONA_GP4_EINT1 },
172 [ARIZONA_IRQ_GP3] = { .reg_offset = 0, .mask = ARIZONA_GP3_EINT1 },
173 [ARIZONA_IRQ_GP2] = { .reg_offset = 0, .mask = ARIZONA_GP2_EINT1 },
174 [ARIZONA_IRQ_GP1] = { .reg_offset = 0, .mask = ARIZONA_GP1_EINT1 },
175
176 [ARIZONA_IRQ_DSP4_RAM_RDY] = {
177 .reg_offset = 1, .mask = ARIZONA_DSP4_RAM_RDY_EINT1
178 },
179 [ARIZONA_IRQ_DSP3_RAM_RDY] = {
180 .reg_offset = 1, .mask = ARIZONA_DSP3_RAM_RDY_EINT1
181 },
182 [ARIZONA_IRQ_DSP2_RAM_RDY] = {
183 .reg_offset = 1, .mask = ARIZONA_DSP2_RAM_RDY_EINT1
184 },
185 [ARIZONA_IRQ_DSP1_RAM_RDY] = {
186 .reg_offset = 1, .mask = ARIZONA_DSP1_RAM_RDY_EINT1
187 },
188 [ARIZONA_IRQ_DSP_IRQ8] = {
189 .reg_offset = 1, .mask = ARIZONA_DSP_IRQ8_EINT1
190 },
191 [ARIZONA_IRQ_DSP_IRQ7] = {
192 .reg_offset = 1, .mask = ARIZONA_DSP_IRQ7_EINT1
193 },
194 [ARIZONA_IRQ_DSP_IRQ6] = {
195 .reg_offset = 1, .mask = ARIZONA_DSP_IRQ6_EINT1
196 },
197 [ARIZONA_IRQ_DSP_IRQ5] = {
198 .reg_offset = 1, .mask = ARIZONA_DSP_IRQ5_EINT1
199 },
200 [ARIZONA_IRQ_DSP_IRQ4] = {
201 .reg_offset = 1, .mask = ARIZONA_DSP_IRQ4_EINT1
202 },
203 [ARIZONA_IRQ_DSP_IRQ3] = {
204 .reg_offset = 1, .mask = ARIZONA_DSP_IRQ3_EINT1
205 },
206 [ARIZONA_IRQ_DSP_IRQ2] = {
207 .reg_offset = 1, .mask = ARIZONA_DSP_IRQ2_EINT1
208 },
209 [ARIZONA_IRQ_DSP_IRQ1] = {
210 .reg_offset = 1, .mask = ARIZONA_DSP_IRQ1_EINT1
211 },
212
213 [ARIZONA_IRQ_SPK_SHUTDOWN_WARN] = {
214 .reg_offset = 2, .mask = ARIZONA_SPK_SHUTDOWN_WARN_EINT1
215 },
216 [ARIZONA_IRQ_SPK_SHUTDOWN] = {
217 .reg_offset = 2, .mask = ARIZONA_SPK_SHUTDOWN_EINT1
218 },
219 [ARIZONA_IRQ_HPDET] = {
220 .reg_offset = 2, .mask = ARIZONA_HPDET_EINT1
221 },
222 [ARIZONA_IRQ_MICDET] = {
223 .reg_offset = 2, .mask = ARIZONA_MICDET_EINT1
224 },
225 [ARIZONA_IRQ_WSEQ_DONE] = {
226 .reg_offset = 2, .mask = ARIZONA_WSEQ_DONE_EINT1
227 },
228 [ARIZONA_IRQ_DRC2_SIG_DET] = {
229 .reg_offset = 2, .mask = ARIZONA_DRC2_SIG_DET_EINT1
230 },
231 [ARIZONA_IRQ_DRC1_SIG_DET] = {
232 .reg_offset = 2, .mask = ARIZONA_DRC1_SIG_DET_EINT1
233 },
234 [ARIZONA_IRQ_ASRC2_LOCK] = {
235 .reg_offset = 2, .mask = ARIZONA_ASRC2_LOCK_EINT1
236 },
237 [ARIZONA_IRQ_ASRC1_LOCK] = {
238 .reg_offset = 2, .mask = ARIZONA_ASRC1_LOCK_EINT1
239 },
240 [ARIZONA_IRQ_UNDERCLOCKED] = {
241 .reg_offset = 2, .mask = ARIZONA_UNDERCLOCKED_EINT1
242 },
243 [ARIZONA_IRQ_OVERCLOCKED] = {
244 .reg_offset = 2, .mask = ARIZONA_OVERCLOCKED_EINT1
245 },
246 [ARIZONA_IRQ_FLL2_LOCK] = {
247 .reg_offset = 2, .mask = ARIZONA_FLL2_LOCK_EINT1
248 },
249 [ARIZONA_IRQ_FLL1_LOCK] = {
250 .reg_offset = 2, .mask = ARIZONA_FLL1_LOCK_EINT1
251 },
252 [ARIZONA_IRQ_CLKGEN_ERR] = {
253 .reg_offset = 2, .mask = ARIZONA_CLKGEN_ERR_EINT1
254 },
255 [ARIZONA_IRQ_CLKGEN_ERR_ASYNC] = {
256 .reg_offset = 2, .mask = ARIZONA_CLKGEN_ERR_ASYNC_EINT1
257 },
258
259 [ARIZONA_IRQ_ASRC_CFG_ERR] = {
260 .reg_offset = 3, .mask = ARIZONA_ASRC_CFG_ERR_EINT1
261 },
262 [ARIZONA_IRQ_AIF3_ERR] = {
263 .reg_offset = 3, .mask = ARIZONA_AIF3_ERR_EINT1
264 },
265 [ARIZONA_IRQ_AIF2_ERR] = {
266 .reg_offset = 3, .mask = ARIZONA_AIF2_ERR_EINT1
267 },
268 [ARIZONA_IRQ_AIF1_ERR] = {
269 .reg_offset = 3, .mask = ARIZONA_AIF1_ERR_EINT1
270 },
271 [ARIZONA_IRQ_CTRLIF_ERR] = {
272 .reg_offset = 3, .mask = ARIZONA_CTRLIF_ERR_EINT1
273 },
274 [ARIZONA_IRQ_MIXER_DROPPED_SAMPLES] = {
275 .reg_offset = 3, .mask = ARIZONA_MIXER_DROPPED_SAMPLE_EINT1
276 },
277 [ARIZONA_IRQ_ASYNC_CLK_ENA_LOW] = {
278 .reg_offset = 3, .mask = ARIZONA_ASYNC_CLK_ENA_LOW_EINT1
279 },
280 [ARIZONA_IRQ_SYSCLK_ENA_LOW] = {
281 .reg_offset = 3, .mask = ARIZONA_SYSCLK_ENA_LOW_EINT1
282 },
283 [ARIZONA_IRQ_ISRC1_CFG_ERR] = {
284 .reg_offset = 3, .mask = ARIZONA_ISRC1_CFG_ERR_EINT1
285 },
286 [ARIZONA_IRQ_ISRC2_CFG_ERR] = {
287 .reg_offset = 3, .mask = ARIZONA_ISRC2_CFG_ERR_EINT1
288 },
289
290 [ARIZONA_IRQ_BOOT_DONE] = {
291 .reg_offset = 4, .mask = ARIZONA_BOOT_DONE_EINT1
292 },
293 [ARIZONA_IRQ_DCS_DAC_DONE] = {
294 .reg_offset = 4, .mask = ARIZONA_DCS_DAC_DONE_EINT1
295 },
296 [ARIZONA_IRQ_DCS_HP_DONE] = {
297 .reg_offset = 4, .mask = ARIZONA_DCS_HP_DONE_EINT1
298 },
299 [ARIZONA_IRQ_FLL2_CLOCK_OK] = {
300 .reg_offset = 4, .mask = ARIZONA_FLL2_CLOCK_OK_EINT1
301 },
302 [ARIZONA_IRQ_FLL1_CLOCK_OK] = {
303 .reg_offset = 4, .mask = ARIZONA_FLL1_CLOCK_OK_EINT1
304 },
305};
306
307const struct regmap_irq_chip wm5110_irq = {
308 .name = "wm5110 IRQ",
309 .status_base = ARIZONA_INTERRUPT_STATUS_1,
310 .mask_base = ARIZONA_INTERRUPT_STATUS_1_MASK,
311 .ack_base = ARIZONA_INTERRUPT_STATUS_1,
312 .num_regs = 5,
313 .irqs = wm5110_irqs,
314 .num_irqs = ARRAY_SIZE(wm5110_irqs),
315};
316EXPORT_SYMBOL_GPL(wm5110_irq);
317
318static const struct reg_default wm5110_reg_default[] = {
319 { 0x00000008, 0x0019 }, /* R8 - Ctrl IF SPI CFG 1 */
320 { 0x00000009, 0x0001 }, /* R9 - Ctrl IF I2C1 CFG 1 */
321 { 0x0000000A, 0x0001 }, /* R10 - Ctrl IF I2C2 CFG 1 */
322 { 0x0000000B, 0x0036 }, /* R11 - Ctrl IF I2C1 CFG 2 */
323 { 0x0000000C, 0x0036 }, /* R12 - Ctrl IF I2C2 CFG 2 */
324 { 0x00000016, 0x0000 }, /* R22 - Write Sequencer Ctrl 0 */
325 { 0x00000017, 0x0000 }, /* R23 - Write Sequencer Ctrl 1 */
326 { 0x00000018, 0x0000 }, /* R24 - Write Sequencer Ctrl 2 */
327 { 0x00000020, 0x0000 }, /* R32 - Tone Generator 1 */
328 { 0x00000021, 0x1000 }, /* R33 - Tone Generator 2 */
329 { 0x00000022, 0x0000 }, /* R34 - Tone Generator 3 */
330 { 0x00000023, 0x1000 }, /* R35 - Tone Generator 4 */
331 { 0x00000024, 0x0000 }, /* R36 - Tone Generator 5 */
332 { 0x00000030, 0x0000 }, /* R48 - PWM Drive 1 */
333 { 0x00000031, 0x0100 }, /* R49 - PWM Drive 2 */
334 { 0x00000032, 0x0100 }, /* R50 - PWM Drive 3 */
335 { 0x00000040, 0x0000 }, /* R64 - Wake control */
336 { 0x00000041, 0x0000 }, /* R65 - Sequence control */
337 { 0x00000061, 0x01FF }, /* R97 - Sample Rate Sequence Select 1 */
338 { 0x00000062, 0x01FF }, /* R98 - Sample Rate Sequence Select 2 */
339 { 0x00000063, 0x01FF }, /* R99 - Sample Rate Sequence Select 3 */
340 { 0x00000064, 0x01FF }, /* R100 - Sample Rate Sequence Select 4 */
341 { 0x00000068, 0x01FF }, /* R104 - Always On Triggers Sequence Select 1 */
342 { 0x00000069, 0x01FF }, /* R105 - Always On Triggers Sequence Select 2 */
343 { 0x0000006A, 0x01FF }, /* R106 - Always On Triggers Sequence Select 3 */
344 { 0x0000006B, 0x01FF }, /* R107 - Always On Triggers Sequence Select 4 */
345 { 0x00000070, 0x0000 }, /* R112 - Comfort Noise Generator */
346 { 0x00000090, 0x0000 }, /* R144 - Haptics Control 1 */
347 { 0x00000091, 0x7FFF }, /* R145 - Haptics Control 2 */
348 { 0x00000092, 0x0000 }, /* R146 - Haptics phase 1 intensity */
349 { 0x00000093, 0x0000 }, /* R147 - Haptics phase 1 duration */
350 { 0x00000094, 0x0000 }, /* R148 - Haptics phase 2 intensity */
351 { 0x00000095, 0x0000 }, /* R149 - Haptics phase 2 duration */
352 { 0x00000096, 0x0000 }, /* R150 - Haptics phase 3 intensity */
353 { 0x00000097, 0x0000 }, /* R151 - Haptics phase 3 duration */
354 { 0x00000100, 0x0001 }, /* R256 - Clock 32k 1 */
355 { 0x00000101, 0x0504 }, /* R257 - System Clock 1 */
356 { 0x00000102, 0x0011 }, /* R258 - Sample rate 1 */
357 { 0x00000103, 0x0011 }, /* R259 - Sample rate 2 */
358 { 0x00000104, 0x0011 }, /* R260 - Sample rate 3 */
359 { 0x00000112, 0x0305 }, /* R274 - Async clock 1 */
360 { 0x00000113, 0x0011 }, /* R275 - Async sample rate 1 */
361 { 0x00000149, 0x0000 }, /* R329 - Output system clock */
362 { 0x0000014A, 0x0000 }, /* R330 - Output async clock */
363 { 0x00000152, 0x0000 }, /* R338 - Rate Estimator 1 */
364 { 0x00000153, 0x0000 }, /* R339 - Rate Estimator 2 */
365 { 0x00000154, 0x0000 }, /* R340 - Rate Estimator 3 */
366 { 0x00000155, 0x0000 }, /* R341 - Rate Estimator 4 */
367 { 0x00000156, 0x0000 }, /* R342 - Rate Estimator 5 */
368 { 0x00000171, 0x0000 }, /* R369 - FLL1 Control 1 */
369 { 0x00000172, 0x0008 }, /* R370 - FLL1 Control 2 */
370 { 0x00000173, 0x0018 }, /* R371 - FLL1 Control 3 */
371 { 0x00000174, 0x007D }, /* R372 - FLL1 Control 4 */
372 { 0x00000175, 0x0006 }, /* R373 - FLL1 Control 5 */
373 { 0x00000176, 0x0000 }, /* R374 - FLL1 Control 6 */
374 { 0x00000177, 0x0281 }, /* R375 - FLL1 Loop Filter Test 1 */
375 { 0x00000178, 0x0000 }, /* R376 - FLL1 NCO Test 0 */
376 { 0x00000181, 0x0000 }, /* R385 - FLL1 Synchroniser 1 */
377 { 0x00000182, 0x0000 }, /* R386 - FLL1 Synchroniser 2 */
378 { 0x00000183, 0x0000 }, /* R387 - FLL1 Synchroniser 3 */
379 { 0x00000184, 0x0000 }, /* R388 - FLL1 Synchroniser 4 */
380 { 0x00000185, 0x0000 }, /* R389 - FLL1 Synchroniser 5 */
381 { 0x00000186, 0x0000 }, /* R390 - FLL1 Synchroniser 6 */
382 { 0x00000189, 0x0000 }, /* R393 - FLL1 Spread Spectrum */
383 { 0x0000018A, 0x0004 }, /* R394 - FLL1 GPIO Clock */
384 { 0x00000191, 0x0000 }, /* R401 - FLL2 Control 1 */
385 { 0x00000192, 0x0008 }, /* R402 - FLL2 Control 2 */
386 { 0x00000193, 0x0018 }, /* R403 - FLL2 Control 3 */
387 { 0x00000194, 0x007D }, /* R404 - FLL2 Control 4 */
388 { 0x00000195, 0x000C }, /* R405 - FLL2 Control 5 */
389 { 0x00000196, 0x0000 }, /* R406 - FLL2 Control 6 */
390 { 0x00000197, 0x0000 }, /* R407 - FLL2 Loop Filter Test 1 */
391 { 0x00000198, 0x0000 }, /* R408 - FLL2 NCO Test 0 */
392 { 0x000001A1, 0x0000 }, /* R417 - FLL2 Synchroniser 1 */
393 { 0x000001A2, 0x0000 }, /* R418 - FLL2 Synchroniser 2 */
394 { 0x000001A3, 0x0000 }, /* R419 - FLL2 Synchroniser 3 */
395 { 0x000001A4, 0x0000 }, /* R420 - FLL2 Synchroniser 4 */
396 { 0x000001A5, 0x0000 }, /* R421 - FLL2 Synchroniser 5 */
397 { 0x000001A6, 0x0000 }, /* R422 - FLL2 Synchroniser 6 */
398 { 0x000001A9, 0x0000 }, /* R425 - FLL2 Spread Spectrum */
399 { 0x000001AA, 0x0004 }, /* R426 - FLL2 GPIO Clock */
400 { 0x00000200, 0x0006 }, /* R512 - Mic Charge Pump 1 */
401 { 0x00000210, 0x0184 }, /* R528 - LDO1 Control 1 */
402 { 0x00000213, 0x0344 }, /* R531 - LDO2 Control 1 */
403 { 0x00000218, 0x01A6 }, /* R536 - Mic Bias Ctrl 1 */
404 { 0x00000219, 0x01A6 }, /* R537 - Mic Bias Ctrl 2 */
405 { 0x0000021A, 0x01A6 }, /* R538 - Mic Bias Ctrl 3 */
406 { 0x00000293, 0x0000 }, /* R659 - Accessory Detect Mode 1 */
407 { 0x0000029B, 0x0020 }, /* R667 - Headphone Detect 1 */
408 { 0x0000029C, 0x0000 }, /* R668 - Headphone Detect 2 */
409 { 0x000002A3, 0x1102 }, /* R675 - Mic Detect 1 */
410 { 0x000002A4, 0x009F }, /* R676 - Mic Detect 2 */
411 { 0x000002C3, 0x0000 }, /* R707 - Mic noise mix control 1 */
412 { 0x000002D3, 0x0000 }, /* R723 - Jack detect analogue */
413 { 0x00000300, 0x0000 }, /* R768 - Input Enables */
414 { 0x00000308, 0x0000 }, /* R776 - Input Rate */
415 { 0x00000309, 0x0022 }, /* R777 - Input Volume Ramp */
416 { 0x00000310, 0x2080 }, /* R784 - IN1L Control */
417 { 0x00000311, 0x0180 }, /* R785 - ADC Digital Volume 1L */
418 { 0x00000312, 0x0000 }, /* R786 - DMIC1L Control */
419 { 0x00000314, 0x0080 }, /* R788 - IN1R Control */
420 { 0x00000315, 0x0180 }, /* R789 - ADC Digital Volume 1R */
421 { 0x00000316, 0x0000 }, /* R790 - DMIC1R Control */
422 { 0x00000318, 0x2080 }, /* R792 - IN2L Control */
423 { 0x00000319, 0x0180 }, /* R793 - ADC Digital Volume 2L */
424 { 0x0000031A, 0x0000 }, /* R794 - DMIC2L Control */
425 { 0x0000031C, 0x0080 }, /* R796 - IN2R Control */
426 { 0x0000031D, 0x0180 }, /* R797 - ADC Digital Volume 2R */
427 { 0x0000031E, 0x0000 }, /* R798 - DMIC2R Control */
428 { 0x00000320, 0x2080 }, /* R800 - IN3L Control */
429 { 0x00000321, 0x0180 }, /* R801 - ADC Digital Volume 3L */
430 { 0x00000322, 0x0000 }, /* R802 - DMIC3L Control */
431 { 0x00000324, 0x0080 }, /* R804 - IN3R Control */
432 { 0x00000325, 0x0180 }, /* R805 - ADC Digital Volume 3R */
433 { 0x00000326, 0x0000 }, /* R806 - DMIC3R Control */
434 { 0x00000328, 0x2000 }, /* R808 - IN4L Control */
435 { 0x00000329, 0x0180 }, /* R809 - ADC Digital Volume 4L */
436 { 0x0000032A, 0x0000 }, /* R810 - DMIC4L Control */
437 { 0x0000032D, 0x0180 }, /* R813 - ADC Digital Volume 4R */
438 { 0x0000032E, 0x0000 }, /* R814 - DMIC4R Control */
439 { 0x00000400, 0x0000 }, /* R1024 - Output Enables 1 */
440 { 0x00000408, 0x0000 }, /* R1032 - Output Rate 1 */
441 { 0x00000409, 0x0022 }, /* R1033 - Output Volume Ramp */
442 { 0x00000410, 0x0080 }, /* R1040 - Output Path Config 1L */
443 { 0x00000411, 0x0180 }, /* R1041 - DAC Digital Volume 1L */
444 { 0x00000412, 0x0080 }, /* R1042 - DAC Volume Limit 1L */
445 { 0x00000413, 0x0001 }, /* R1043 - Noise Gate Select 1L */
446 { 0x00000414, 0x0080 }, /* R1044 - Output Path Config 1R */
447 { 0x00000415, 0x0180 }, /* R1045 - DAC Digital Volume 1R */
448 { 0x00000416, 0x0080 }, /* R1046 - DAC Volume Limit 1R */
449 { 0x00000417, 0x0002 }, /* R1047 - Noise Gate Select 1R */
450 { 0x00000418, 0x0080 }, /* R1048 - Output Path Config 2L */
451 { 0x00000419, 0x0180 }, /* R1049 - DAC Digital Volume 2L */
452 { 0x0000041A, 0x0080 }, /* R1050 - DAC Volume Limit 2L */
453 { 0x0000041B, 0x0004 }, /* R1051 - Noise Gate Select 2L */
454 { 0x0000041C, 0x0080 }, /* R1052 - Output Path Config 2R */
455 { 0x0000041D, 0x0180 }, /* R1053 - DAC Digital Volume 2R */
456 { 0x0000041E, 0x0080 }, /* R1054 - DAC Volume Limit 2R */
457 { 0x0000041F, 0x0008 }, /* R1055 - Noise Gate Select 2R */
458 { 0x00000420, 0x0080 }, /* R1056 - Output Path Config 3L */
459 { 0x00000421, 0x0180 }, /* R1057 - DAC Digital Volume 3L */
460 { 0x00000422, 0x0080 }, /* R1058 - DAC Volume Limit 3L */
461 { 0x00000423, 0x0010 }, /* R1059 - Noise Gate Select 3L */
462 { 0x00000424, 0x0080 }, /* R1060 - Output Path Config 3R */
463 { 0x00000425, 0x0180 }, /* R1061 - DAC Digital Volume 3R */
464 { 0x00000426, 0x0080 }, /* R1062 - DAC Volume Limit 3R */
465 { 0x00000427, 0x0020 }, /* R1063 - Noise Gate Select 3R */
466 { 0x00000428, 0x0000 }, /* R1064 - Output Path Config 4L */
467 { 0x00000429, 0x0180 }, /* R1065 - DAC Digital Volume 4L */
468 { 0x0000042A, 0x0080 }, /* R1066 - Out Volume 4L */
469 { 0x0000042B, 0x0040 }, /* R1067 - Noise Gate Select 4L */
470 { 0x0000042C, 0x0000 }, /* R1068 - Output Path Config 4R */
471 { 0x0000042D, 0x0180 }, /* R1069 - DAC Digital Volume 4R */
472 { 0x0000042E, 0x0080 }, /* R1070 - Out Volume 4R */
473 { 0x0000042F, 0x0080 }, /* R1071 - Noise Gate Select 4R */
474 { 0x00000430, 0x0000 }, /* R1072 - Output Path Config 5L */
475 { 0x00000431, 0x0180 }, /* R1073 - DAC Digital Volume 5L */
476 { 0x00000432, 0x0080 }, /* R1074 - DAC Volume Limit 5L */
477 { 0x00000433, 0x0100 }, /* R1075 - Noise Gate Select 5L */
478 { 0x00000434, 0x0000 }, /* R1076 - Output Path Config 5R */
479 { 0x00000435, 0x0180 }, /* R1077 - DAC Digital Volume 5R */
480 { 0x00000436, 0x0080 }, /* R1078 - DAC Volume Limit 5R */
481 { 0x00000437, 0x0200 }, /* R1079 - Noise Gate Select 5R */
482 { 0x00000438, 0x0000 }, /* R1080 - Output Path Config 6L */
483 { 0x00000439, 0x0180 }, /* R1081 - DAC Digital Volume 6L */
484 { 0x0000043A, 0x0080 }, /* R1082 - DAC Volume Limit 6L */
485 { 0x0000043B, 0x0400 }, /* R1083 - Noise Gate Select 6L */
486 { 0x0000043C, 0x0000 }, /* R1084 - Output Path Config 6R */
487 { 0x0000043D, 0x0180 }, /* R1085 - DAC Digital Volume 6R */
488 { 0x0000043E, 0x0080 }, /* R1086 - DAC Volume Limit 6R */
489 { 0x0000043F, 0x0800 }, /* R1087 - Noise Gate Select 6R */
490 { 0x00000450, 0x0000 }, /* R1104 - DAC AEC Control 1 */
491 { 0x00000458, 0x0001 }, /* R1112 - Noise Gate Control */
492 { 0x00000480, 0x0040 }, /* R1152 - Class W ANC Threshold 1 */
493 { 0x00000481, 0x0040 }, /* R1153 - Class W ANC Threshold 2 */
494 { 0x00000490, 0x0069 }, /* R1168 - PDM SPK1 CTRL 1 */
495 { 0x00000491, 0x0000 }, /* R1169 - PDM SPK1 CTRL 2 */
496 { 0x00000492, 0x0069 }, /* R1170 - PDM SPK2 CTRL 1 */
497 { 0x00000493, 0x0000 }, /* R1171 - PDM SPK2 CTRL 2 */
498 { 0x00000500, 0x000C }, /* R1280 - AIF1 BCLK Ctrl */
499 { 0x00000501, 0x0008 }, /* R1281 - AIF1 Tx Pin Ctrl */
500 { 0x00000502, 0x0000 }, /* R1282 - AIF1 Rx Pin Ctrl */
501 { 0x00000503, 0x0000 }, /* R1283 - AIF1 Rate Ctrl */
502 { 0x00000504, 0x0000 }, /* R1284 - AIF1 Format */
503 { 0x00000505, 0x0040 }, /* R1285 - AIF1 Tx BCLK Rate */
504 { 0x00000506, 0x0040 }, /* R1286 - AIF1 Rx BCLK Rate */
505 { 0x00000507, 0x1818 }, /* R1287 - AIF1 Frame Ctrl 1 */
506 { 0x00000508, 0x1818 }, /* R1288 - AIF1 Frame Ctrl 2 */
507 { 0x00000509, 0x0000 }, /* R1289 - AIF1 Frame Ctrl 3 */
508 { 0x0000050A, 0x0001 }, /* R1290 - AIF1 Frame Ctrl 4 */
509 { 0x0000050B, 0x0002 }, /* R1291 - AIF1 Frame Ctrl 5 */
510 { 0x0000050C, 0x0003 }, /* R1292 - AIF1 Frame Ctrl 6 */
511 { 0x0000050D, 0x0004 }, /* R1293 - AIF1 Frame Ctrl 7 */
512 { 0x0000050E, 0x0005 }, /* R1294 - AIF1 Frame Ctrl 8 */
513 { 0x0000050F, 0x0006 }, /* R1295 - AIF1 Frame Ctrl 9 */
514 { 0x00000510, 0x0007 }, /* R1296 - AIF1 Frame Ctrl 10 */
515 { 0x00000511, 0x0000 }, /* R1297 - AIF1 Frame Ctrl 11 */
516 { 0x00000512, 0x0001 }, /* R1298 - AIF1 Frame Ctrl 12 */
517 { 0x00000513, 0x0002 }, /* R1299 - AIF1 Frame Ctrl 13 */
518 { 0x00000514, 0x0003 }, /* R1300 - AIF1 Frame Ctrl 14 */
519 { 0x00000515, 0x0004 }, /* R1301 - AIF1 Frame Ctrl 15 */
520 { 0x00000516, 0x0005 }, /* R1302 - AIF1 Frame Ctrl 16 */
521 { 0x00000517, 0x0006 }, /* R1303 - AIF1 Frame Ctrl 17 */
522 { 0x00000518, 0x0007 }, /* R1304 - AIF1 Frame Ctrl 18 */
523 { 0x00000519, 0x0000 }, /* R1305 - AIF1 Tx Enables */
524 { 0x0000051A, 0x0000 }, /* R1306 - AIF1 Rx Enables */
525 { 0x00000540, 0x000C }, /* R1344 - AIF2 BCLK Ctrl */
526 { 0x00000541, 0x0008 }, /* R1345 - AIF2 Tx Pin Ctrl */
527 { 0x00000542, 0x0000 }, /* R1346 - AIF2 Rx Pin Ctrl */
528 { 0x00000543, 0x0000 }, /* R1347 - AIF2 Rate Ctrl */
529 { 0x00000544, 0x0000 }, /* R1348 - AIF2 Format */
530 { 0x00000545, 0x0040 }, /* R1349 - AIF2 Tx BCLK Rate */
531 { 0x00000546, 0x0040 }, /* R1350 - AIF2 Rx BCLK Rate */
532 { 0x00000547, 0x1818 }, /* R1351 - AIF2 Frame Ctrl 1 */
533 { 0x00000548, 0x1818 }, /* R1352 - AIF2 Frame Ctrl 2 */
534 { 0x00000549, 0x0000 }, /* R1353 - AIF2 Frame Ctrl 3 */
535 { 0x0000054A, 0x0001 }, /* R1354 - AIF2 Frame Ctrl 4 */
536 { 0x00000551, 0x0000 }, /* R1361 - AIF2 Frame Ctrl 11 */
537 { 0x00000552, 0x0001 }, /* R1362 - AIF2 Frame Ctrl 12 */
538 { 0x00000559, 0x0000 }, /* R1369 - AIF2 Tx Enables */
539 { 0x0000055A, 0x0000 }, /* R1370 - AIF2 Rx Enables */
540 { 0x00000580, 0x000C }, /* R1408 - AIF3 BCLK Ctrl */
541 { 0x00000581, 0x0008 }, /* R1409 - AIF3 Tx Pin Ctrl */
542 { 0x00000582, 0x0000 }, /* R1410 - AIF3 Rx Pin Ctrl */
543 { 0x00000583, 0x0000 }, /* R1411 - AIF3 Rate Ctrl */
544 { 0x00000584, 0x0000 }, /* R1412 - AIF3 Format */
545 { 0x00000585, 0x0040 }, /* R1413 - AIF3 Tx BCLK Rate */
546 { 0x00000586, 0x0040 }, /* R1414 - AIF3 Rx BCLK Rate */
547 { 0x00000587, 0x1818 }, /* R1415 - AIF3 Frame Ctrl 1 */
548 { 0x00000588, 0x1818 }, /* R1416 - AIF3 Frame Ctrl 2 */
549 { 0x00000589, 0x0000 }, /* R1417 - AIF3 Frame Ctrl 3 */
550 { 0x0000058A, 0x0001 }, /* R1418 - AIF3 Frame Ctrl 4 */
551 { 0x00000591, 0x0000 }, /* R1425 - AIF3 Frame Ctrl 11 */
552 { 0x00000592, 0x0001 }, /* R1426 - AIF3 Frame Ctrl 12 */
553 { 0x00000599, 0x0000 }, /* R1433 - AIF3 Tx Enables */
554 { 0x0000059A, 0x0000 }, /* R1434 - AIF3 Rx Enables */
555 { 0x000005E3, 0x0004 }, /* R1507 - SLIMbus Framer Ref Gear */
556 { 0x000005E5, 0x0000 }, /* R1509 - SLIMbus Rates 1 */
557 { 0x000005E6, 0x0000 }, /* R1510 - SLIMbus Rates 2 */
558 { 0x000005E7, 0x0000 }, /* R1511 - SLIMbus Rates 3 */
559 { 0x000005E8, 0x0000 }, /* R1512 - SLIMbus Rates 4 */
560 { 0x000005E9, 0x0000 }, /* R1513 - SLIMbus Rates 5 */
561 { 0x000005EA, 0x0000 }, /* R1514 - SLIMbus Rates 6 */
562 { 0x000005EB, 0x0000 }, /* R1515 - SLIMbus Rates 7 */
563 { 0x000005EC, 0x0000 }, /* R1516 - SLIMbus Rates 8 */
564 { 0x000005F5, 0x0000 }, /* R1525 - SLIMbus RX Channel Enable */
565 { 0x000005F6, 0x0000 }, /* R1526 - SLIMbus TX Channel Enable */
566 { 0x00000640, 0x0000 }, /* R1600 - PWM1MIX Input 1 Source */
567 { 0x00000641, 0x0080 }, /* R1601 - PWM1MIX Input 1 Volume */
568 { 0x00000642, 0x0000 }, /* R1602 - PWM1MIX Input 2 Source */
569 { 0x00000643, 0x0080 }, /* R1603 - PWM1MIX Input 2 Volume */
570 { 0x00000644, 0x0000 }, /* R1604 - PWM1MIX Input 3 Source */
571 { 0x00000645, 0x0080 }, /* R1605 - PWM1MIX Input 3 Volume */
572 { 0x00000646, 0x0000 }, /* R1606 - PWM1MIX Input 4 Source */
573 { 0x00000647, 0x0080 }, /* R1607 - PWM1MIX Input 4 Volume */
574 { 0x00000648, 0x0000 }, /* R1608 - PWM2MIX Input 1 Source */
575 { 0x00000649, 0x0080 }, /* R1609 - PWM2MIX Input 1 Volume */
576 { 0x0000064A, 0x0000 }, /* R1610 - PWM2MIX Input 2 Source */
577 { 0x0000064B, 0x0080 }, /* R1611 - PWM2MIX Input 2 Volume */
578 { 0x0000064C, 0x0000 }, /* R1612 - PWM2MIX Input 3 Source */
579 { 0x0000064D, 0x0080 }, /* R1613 - PWM2MIX Input 3 Volume */
580 { 0x0000064E, 0x0000 }, /* R1614 - PWM2MIX Input 4 Source */
581 { 0x0000064F, 0x0080 }, /* R1615 - PWM2MIX Input 4 Volume */
582 { 0x00000660, 0x0000 }, /* R1632 - MICMIX Input 1 Source */
583 { 0x00000661, 0x0080 }, /* R1633 - MICMIX Input 1 Volume */
584 { 0x00000662, 0x0000 }, /* R1634 - MICMIX Input 2 Source */
585 { 0x00000663, 0x0080 }, /* R1635 - MICMIX Input 2 Volume */
586 { 0x00000664, 0x0000 }, /* R1636 - MICMIX Input 3 Source */
587 { 0x00000665, 0x0080 }, /* R1637 - MICMIX Input 3 Volume */
588 { 0x00000666, 0x0000 }, /* R1638 - MICMIX Input 4 Source */
589 { 0x00000667, 0x0080 }, /* R1639 - MICMIX Input 4 Volume */
590 { 0x00000668, 0x0000 }, /* R1640 - NOISEMIX Input 1 Source */
591 { 0x00000669, 0x0080 }, /* R1641 - NOISEMIX Input 1 Volume */
592 { 0x0000066A, 0x0000 }, /* R1642 - NOISEMIX Input 2 Source */
593 { 0x0000066B, 0x0080 }, /* R1643 - NOISEMIX Input 2 Volume */
594 { 0x0000066C, 0x0000 }, /* R1644 - NOISEMIX Input 3 Source */
595 { 0x0000066D, 0x0080 }, /* R1645 - NOISEMIX Input 3 Volume */
596 { 0x0000066E, 0x0000 }, /* R1646 - NOISEMIX Input 4 Source */
597 { 0x0000066F, 0x0080 }, /* R1647 - NOISEMIX Input 4 Volume */
598 { 0x00000680, 0x0000 }, /* R1664 - OUT1LMIX Input 1 Source */
599 { 0x00000681, 0x0080 }, /* R1665 - OUT1LMIX Input 1 Volume */
600 { 0x00000682, 0x0000 }, /* R1666 - OUT1LMIX Input 2 Source */
601 { 0x00000683, 0x0080 }, /* R1667 - OUT1LMIX Input 2 Volume */
602 { 0x00000684, 0x0000 }, /* R1668 - OUT1LMIX Input 3 Source */
603 { 0x00000685, 0x0080 }, /* R1669 - OUT1LMIX Input 3 Volume */
604 { 0x00000686, 0x0000 }, /* R1670 - OUT1LMIX Input 4 Source */
605 { 0x00000687, 0x0080 }, /* R1671 - OUT1LMIX Input 4 Volume */
606 { 0x00000688, 0x0000 }, /* R1672 - OUT1RMIX Input 1 Source */
607 { 0x00000689, 0x0080 }, /* R1673 - OUT1RMIX Input 1 Volume */
608 { 0x0000068A, 0x0000 }, /* R1674 - OUT1RMIX Input 2 Source */
609 { 0x0000068B, 0x0080 }, /* R1675 - OUT1RMIX Input 2 Volume */
610 { 0x0000068C, 0x0000 }, /* R1676 - OUT1RMIX Input 3 Source */
611 { 0x0000068D, 0x0080 }, /* R1677 - OUT1RMIX Input 3 Volume */
612 { 0x0000068E, 0x0000 }, /* R1678 - OUT1RMIX Input 4 Source */
613 { 0x0000068F, 0x0080 }, /* R1679 - OUT1RMIX Input 4 Volume */
614 { 0x00000690, 0x0000 }, /* R1680 - OUT2LMIX Input 1 Source */
615 { 0x00000691, 0x0080 }, /* R1681 - OUT2LMIX Input 1 Volume */
616 { 0x00000692, 0x0000 }, /* R1682 - OUT2LMIX Input 2 Source */
617 { 0x00000693, 0x0080 }, /* R1683 - OUT2LMIX Input 2 Volume */
618 { 0x00000694, 0x0000 }, /* R1684 - OUT2LMIX Input 3 Source */
619 { 0x00000695, 0x0080 }, /* R1685 - OUT2LMIX Input 3 Volume */
620 { 0x00000696, 0x0000 }, /* R1686 - OUT2LMIX Input 4 Source */
621 { 0x00000697, 0x0080 }, /* R1687 - OUT2LMIX Input 4 Volume */
622 { 0x00000698, 0x0000 }, /* R1688 - OUT2RMIX Input 1 Source */
623 { 0x00000699, 0x0080 }, /* R1689 - OUT2RMIX Input 1 Volume */
624 { 0x0000069A, 0x0000 }, /* R1690 - OUT2RMIX Input 2 Source */
625 { 0x0000069B, 0x0080 }, /* R1691 - OUT2RMIX Input 2 Volume */
626 { 0x0000069C, 0x0000 }, /* R1692 - OUT2RMIX Input 3 Source */
627 { 0x0000069D, 0x0080 }, /* R1693 - OUT2RMIX Input 3 Volume */
628 { 0x0000069E, 0x0000 }, /* R1694 - OUT2RMIX Input 4 Source */
629 { 0x0000069F, 0x0080 }, /* R1695 - OUT2RMIX Input 4 Volume */
630 { 0x000006A0, 0x0000 }, /* R1696 - OUT3LMIX Input 1 Source */
631 { 0x000006A1, 0x0080 }, /* R1697 - OUT3LMIX Input 1 Volume */
632 { 0x000006A2, 0x0000 }, /* R1698 - OUT3LMIX Input 2 Source */
633 { 0x000006A3, 0x0080 }, /* R1699 - OUT3LMIX Input 2 Volume */
634 { 0x000006A4, 0x0000 }, /* R1700 - OUT3LMIX Input 3 Source */
635 { 0x000006A5, 0x0080 }, /* R1701 - OUT3LMIX Input 3 Volume */
636 { 0x000006A6, 0x0000 }, /* R1702 - OUT3LMIX Input 4 Source */
637 { 0x000006A7, 0x0080 }, /* R1703 - OUT3LMIX Input 4 Volume */
638 { 0x000006A8, 0x0000 }, /* R1704 - OUT3RMIX Input 1 Source */
639 { 0x000006A9, 0x0080 }, /* R1705 - OUT3RMIX Input 1 Volume */
640 { 0x000006AA, 0x0000 }, /* R1706 - OUT3RMIX Input 2 Source */
641 { 0x000006AB, 0x0080 }, /* R1707 - OUT3RMIX Input 2 Volume */
642 { 0x000006AC, 0x0000 }, /* R1708 - OUT3RMIX Input 3 Source */
643 { 0x000006AD, 0x0080 }, /* R1709 - OUT3RMIX Input 3 Volume */
644 { 0x000006AE, 0x0000 }, /* R1710 - OUT3RMIX Input 4 Source */
645 { 0x000006AF, 0x0080 }, /* R1711 - OUT3RMIX Input 4 Volume */
646 { 0x000006B0, 0x0000 }, /* R1712 - OUT4LMIX Input 1 Source */
647 { 0x000006B1, 0x0080 }, /* R1713 - OUT4LMIX Input 1 Volume */
648 { 0x000006B2, 0x0000 }, /* R1714 - OUT4LMIX Input 2 Source */
649 { 0x000006B3, 0x0080 }, /* R1715 - OUT4LMIX Input 2 Volume */
650 { 0x000006B4, 0x0000 }, /* R1716 - OUT4LMIX Input 3 Source */
651 { 0x000006B5, 0x0080 }, /* R1717 - OUT4LMIX Input 3 Volume */
652 { 0x000006B6, 0x0000 }, /* R1718 - OUT4LMIX Input 4 Source */
653 { 0x000006B7, 0x0080 }, /* R1719 - OUT4LMIX Input 4 Volume */
654 { 0x000006B8, 0x0000 }, /* R1720 - OUT4RMIX Input 1 Source */
655 { 0x000006B9, 0x0080 }, /* R1721 - OUT4RMIX Input 1 Volume */
656 { 0x000006BA, 0x0000 }, /* R1722 - OUT4RMIX Input 2 Source */
657 { 0x000006BB, 0x0080 }, /* R1723 - OUT4RMIX Input 2 Volume */
658 { 0x000006BC, 0x0000 }, /* R1724 - OUT4RMIX Input 3 Source */
659 { 0x000006BD, 0x0080 }, /* R1725 - OUT4RMIX Input 3 Volume */
660 { 0x000006BE, 0x0000 }, /* R1726 - OUT4RMIX Input 4 Source */
661 { 0x000006BF, 0x0080 }, /* R1727 - OUT4RMIX Input 4 Volume */
662 { 0x000006C0, 0x0000 }, /* R1728 - OUT5LMIX Input 1 Source */
663 { 0x000006C1, 0x0080 }, /* R1729 - OUT5LMIX Input 1 Volume */
664 { 0x000006C2, 0x0000 }, /* R1730 - OUT5LMIX Input 2 Source */
665 { 0x000006C3, 0x0080 }, /* R1731 - OUT5LMIX Input 2 Volume */
666 { 0x000006C4, 0x0000 }, /* R1732 - OUT5LMIX Input 3 Source */
667 { 0x000006C5, 0x0080 }, /* R1733 - OUT5LMIX Input 3 Volume */
668 { 0x000006C6, 0x0000 }, /* R1734 - OUT5LMIX Input 4 Source */
669 { 0x000006C7, 0x0080 }, /* R1735 - OUT5LMIX Input 4 Volume */
670 { 0x000006C8, 0x0000 }, /* R1736 - OUT5RMIX Input 1 Source */
671 { 0x000006C9, 0x0080 }, /* R1737 - OUT5RMIX Input 1 Volume */
672 { 0x000006CA, 0x0000 }, /* R1738 - OUT5RMIX Input 2 Source */
673 { 0x000006CB, 0x0080 }, /* R1739 - OUT5RMIX Input 2 Volume */
674 { 0x000006CC, 0x0000 }, /* R1740 - OUT5RMIX Input 3 Source */
675 { 0x000006CD, 0x0080 }, /* R1741 - OUT5RMIX Input 3 Volume */
676 { 0x000006CE, 0x0000 }, /* R1742 - OUT5RMIX Input 4 Source */
677 { 0x000006CF, 0x0080 }, /* R1743 - OUT5RMIX Input 4 Volume */
678 { 0x000006D0, 0x0000 }, /* R1744 - OUT6LMIX Input 1 Source */
679 { 0x000006D1, 0x0080 }, /* R1745 - OUT6LMIX Input 1 Volume */
680 { 0x000006D2, 0x0000 }, /* R1746 - OUT6LMIX Input 2 Source */
681 { 0x000006D3, 0x0080 }, /* R1747 - OUT6LMIX Input 2 Volume */
682 { 0x000006D4, 0x0000 }, /* R1748 - OUT6LMIX Input 3 Source */
683 { 0x000006D5, 0x0080 }, /* R1749 - OUT6LMIX Input 3 Volume */
684 { 0x000006D6, 0x0000 }, /* R1750 - OUT6LMIX Input 4 Source */
685 { 0x000006D7, 0x0080 }, /* R1751 - OUT6LMIX Input 4 Volume */
686 { 0x000006D8, 0x0000 }, /* R1752 - OUT6RMIX Input 1 Source */
687 { 0x000006D9, 0x0080 }, /* R1753 - OUT6RMIX Input 1 Volume */
688 { 0x000006DA, 0x0000 }, /* R1754 - OUT6RMIX Input 2 Source */
689 { 0x000006DB, 0x0080 }, /* R1755 - OUT6RMIX Input 2 Volume */
690 { 0x000006DC, 0x0000 }, /* R1756 - OUT6RMIX Input 3 Source */
691 { 0x000006DD, 0x0080 }, /* R1757 - OUT6RMIX Input 3 Volume */
692 { 0x000006DE, 0x0000 }, /* R1758 - OUT6RMIX Input 4 Source */
693 { 0x000006DF, 0x0080 }, /* R1759 - OUT6RMIX Input 4 Volume */
694 { 0x00000700, 0x0000 }, /* R1792 - AIF1TX1MIX Input 1 Source */
695 { 0x00000701, 0x0080 }, /* R1793 - AIF1TX1MIX Input 1 Volume */
696 { 0x00000702, 0x0000 }, /* R1794 - AIF1TX1MIX Input 2 Source */
697 { 0x00000703, 0x0080 }, /* R1795 - AIF1TX1MIX Input 2 Volume */
698 { 0x00000704, 0x0000 }, /* R1796 - AIF1TX1MIX Input 3 Source */
699 { 0x00000705, 0x0080 }, /* R1797 - AIF1TX1MIX Input 3 Volume */
700 { 0x00000706, 0x0000 }, /* R1798 - AIF1TX1MIX Input 4 Source */
701 { 0x00000707, 0x0080 }, /* R1799 - AIF1TX1MIX Input 4 Volume */
702 { 0x00000708, 0x0000 }, /* R1800 - AIF1TX2MIX Input 1 Source */
703 { 0x00000709, 0x0080 }, /* R1801 - AIF1TX2MIX Input 1 Volume */
704 { 0x0000070A, 0x0000 }, /* R1802 - AIF1TX2MIX Input 2 Source */
705 { 0x0000070B, 0x0080 }, /* R1803 - AIF1TX2MIX Input 2 Volume */
706 { 0x0000070C, 0x0000 }, /* R1804 - AIF1TX2MIX Input 3 Source */
707 { 0x0000070D, 0x0080 }, /* R1805 - AIF1TX2MIX Input 3 Volume */
708 { 0x0000070E, 0x0000 }, /* R1806 - AIF1TX2MIX Input 4 Source */
709 { 0x0000070F, 0x0080 }, /* R1807 - AIF1TX2MIX Input 4 Volume */
710 { 0x00000710, 0x0000 }, /* R1808 - AIF1TX3MIX Input 1 Source */
711 { 0x00000711, 0x0080 }, /* R1809 - AIF1TX3MIX Input 1 Volume */
712 { 0x00000712, 0x0000 }, /* R1810 - AIF1TX3MIX Input 2 Source */
713 { 0x00000713, 0x0080 }, /* R1811 - AIF1TX3MIX Input 2 Volume */
714 { 0x00000714, 0x0000 }, /* R1812 - AIF1TX3MIX Input 3 Source */
715 { 0x00000715, 0x0080 }, /* R1813 - AIF1TX3MIX Input 3 Volume */
716 { 0x00000716, 0x0000 }, /* R1814 - AIF1TX3MIX Input 4 Source */
717 { 0x00000717, 0x0080 }, /* R1815 - AIF1TX3MIX Input 4 Volume */
718 { 0x00000718, 0x0000 }, /* R1816 - AIF1TX4MIX Input 1 Source */
719 { 0x00000719, 0x0080 }, /* R1817 - AIF1TX4MIX Input 1 Volume */
720 { 0x0000071A, 0x0000 }, /* R1818 - AIF1TX4MIX Input 2 Source */
721 { 0x0000071B, 0x0080 }, /* R1819 - AIF1TX4MIX Input 2 Volume */
722 { 0x0000071C, 0x0000 }, /* R1820 - AIF1TX4MIX Input 3 Source */
723 { 0x0000071D, 0x0080 }, /* R1821 - AIF1TX4MIX Input 3 Volume */
724 { 0x0000071E, 0x0000 }, /* R1822 - AIF1TX4MIX Input 4 Source */
725 { 0x0000071F, 0x0080 }, /* R1823 - AIF1TX4MIX Input 4 Volume */
726 { 0x00000720, 0x0000 }, /* R1824 - AIF1TX5MIX Input 1 Source */
727 { 0x00000721, 0x0080 }, /* R1825 - AIF1TX5MIX Input 1 Volume */
728 { 0x00000722, 0x0000 }, /* R1826 - AIF1TX5MIX Input 2 Source */
729 { 0x00000723, 0x0080 }, /* R1827 - AIF1TX5MIX Input 2 Volume */
730 { 0x00000724, 0x0000 }, /* R1828 - AIF1TX5MIX Input 3 Source */
731 { 0x00000725, 0x0080 }, /* R1829 - AIF1TX5MIX Input 3 Volume */
732 { 0x00000726, 0x0000 }, /* R1830 - AIF1TX5MIX Input 4 Source */
733 { 0x00000727, 0x0080 }, /* R1831 - AIF1TX5MIX Input 4 Volume */
734 { 0x00000728, 0x0000 }, /* R1832 - AIF1TX6MIX Input 1 Source */
735 { 0x00000729, 0x0080 }, /* R1833 - AIF1TX6MIX Input 1 Volume */
736 { 0x0000072A, 0x0000 }, /* R1834 - AIF1TX6MIX Input 2 Source */
737 { 0x0000072B, 0x0080 }, /* R1835 - AIF1TX6MIX Input 2 Volume */
738 { 0x0000072C, 0x0000 }, /* R1836 - AIF1TX6MIX Input 3 Source */
739 { 0x0000072D, 0x0080 }, /* R1837 - AIF1TX6MIX Input 3 Volume */
740 { 0x0000072E, 0x0000 }, /* R1838 - AIF1TX6MIX Input 4 Source */
741 { 0x0000072F, 0x0080 }, /* R1839 - AIF1TX6MIX Input 4 Volume */
742 { 0x00000730, 0x0000 }, /* R1840 - AIF1TX7MIX Input 1 Source */
743 { 0x00000731, 0x0080 }, /* R1841 - AIF1TX7MIX Input 1 Volume */
744 { 0x00000732, 0x0000 }, /* R1842 - AIF1TX7MIX Input 2 Source */
745 { 0x00000733, 0x0080 }, /* R1843 - AIF1TX7MIX Input 2 Volume */
746 { 0x00000734, 0x0000 }, /* R1844 - AIF1TX7MIX Input 3 Source */
747 { 0x00000735, 0x0080 }, /* R1845 - AIF1TX7MIX Input 3 Volume */
748 { 0x00000736, 0x0000 }, /* R1846 - AIF1TX7MIX Input 4 Source */
749 { 0x00000737, 0x0080 }, /* R1847 - AIF1TX7MIX Input 4 Volume */
750 { 0x00000738, 0x0000 }, /* R1848 - AIF1TX8MIX Input 1 Source */
751 { 0x00000739, 0x0080 }, /* R1849 - AIF1TX8MIX Input 1 Volume */
752 { 0x0000073A, 0x0000 }, /* R1850 - AIF1TX8MIX Input 2 Source */
753 { 0x0000073B, 0x0080 }, /* R1851 - AIF1TX8MIX Input 2 Volume */
754 { 0x0000073C, 0x0000 }, /* R1852 - AIF1TX8MIX Input 3 Source */
755 { 0x0000073D, 0x0080 }, /* R1853 - AIF1TX8MIX Input 3 Volume */
756 { 0x0000073E, 0x0000 }, /* R1854 - AIF1TX8MIX Input 4 Source */
757 { 0x0000073F, 0x0080 }, /* R1855 - AIF1TX8MIX Input 4 Volume */
758 { 0x00000740, 0x0000 }, /* R1856 - AIF2TX1MIX Input 1 Source */
759 { 0x00000741, 0x0080 }, /* R1857 - AIF2TX1MIX Input 1 Volume */
760 { 0x00000742, 0x0000 }, /* R1858 - AIF2TX1MIX Input 2 Source */
761 { 0x00000743, 0x0080 }, /* R1859 - AIF2TX1MIX Input 2 Volume */
762 { 0x00000744, 0x0000 }, /* R1860 - AIF2TX1MIX Input 3 Source */
763 { 0x00000745, 0x0080 }, /* R1861 - AIF2TX1MIX Input 3 Volume */
764 { 0x00000746, 0x0000 }, /* R1862 - AIF2TX1MIX Input 4 Source */
765 { 0x00000747, 0x0080 }, /* R1863 - AIF2TX1MIX Input 4 Volume */
766 { 0x00000748, 0x0000 }, /* R1864 - AIF2TX2MIX Input 1 Source */
767 { 0x00000749, 0x0080 }, /* R1865 - AIF2TX2MIX Input 1 Volume */
768 { 0x0000074A, 0x0000 }, /* R1866 - AIF2TX2MIX Input 2 Source */
769 { 0x0000074B, 0x0080 }, /* R1867 - AIF2TX2MIX Input 2 Volume */
770 { 0x0000074C, 0x0000 }, /* R1868 - AIF2TX2MIX Input 3 Source */
771 { 0x0000074D, 0x0080 }, /* R1869 - AIF2TX2MIX Input 3 Volume */
772 { 0x0000074E, 0x0000 }, /* R1870 - AIF2TX2MIX Input 4 Source */
773 { 0x0000074F, 0x0080 }, /* R1871 - AIF2TX2MIX Input 4 Volume */
774 { 0x00000780, 0x0000 }, /* R1920 - AIF3TX1MIX Input 1 Source */
775 { 0x00000781, 0x0080 }, /* R1921 - AIF3TX1MIX Input 1 Volume */
776 { 0x00000782, 0x0000 }, /* R1922 - AIF3TX1MIX Input 2 Source */
777 { 0x00000783, 0x0080 }, /* R1923 - AIF3TX1MIX Input 2 Volume */
778 { 0x00000784, 0x0000 }, /* R1924 - AIF3TX1MIX Input 3 Source */
779 { 0x00000785, 0x0080 }, /* R1925 - AIF3TX1MIX Input 3 Volume */
780 { 0x00000786, 0x0000 }, /* R1926 - AIF3TX1MIX Input 4 Source */
781 { 0x00000787, 0x0080 }, /* R1927 - AIF3TX1MIX Input 4 Volume */
782 { 0x00000788, 0x0000 }, /* R1928 - AIF3TX2MIX Input 1 Source */
783 { 0x00000789, 0x0080 }, /* R1929 - AIF3TX2MIX Input 1 Volume */
784 { 0x0000078A, 0x0000 }, /* R1930 - AIF3TX2MIX Input 2 Source */
785 { 0x0000078B, 0x0080 }, /* R1931 - AIF3TX2MIX Input 2 Volume */
786 { 0x0000078C, 0x0000 }, /* R1932 - AIF3TX2MIX Input 3 Source */
787 { 0x0000078D, 0x0080 }, /* R1933 - AIF3TX2MIX Input 3 Volume */
788 { 0x0000078E, 0x0000 }, /* R1934 - AIF3TX2MIX Input 4 Source */
789 { 0x0000078F, 0x0080 }, /* R1935 - AIF3TX2MIX Input 4 Volume */
790 { 0x000007C0, 0x0000 }, /* R1984 - SLIMTX1MIX Input 1 Source */
791 { 0x000007C1, 0x0080 }, /* R1985 - SLIMTX1MIX Input 1 Volume */
792 { 0x000007C2, 0x0000 }, /* R1986 - SLIMTX1MIX Input 2 Source */
793 { 0x000007C3, 0x0080 }, /* R1987 - SLIMTX1MIX Input 2 Volume */
794 { 0x000007C4, 0x0000 }, /* R1988 - SLIMTX1MIX Input 3 Source */
795 { 0x000007C5, 0x0080 }, /* R1989 - SLIMTX1MIX Input 3 Volume */
796 { 0x000007C6, 0x0000 }, /* R1990 - SLIMTX1MIX Input 4 Source */
797 { 0x000007C7, 0x0080 }, /* R1991 - SLIMTX1MIX Input 4 Volume */
798 { 0x000007C8, 0x0000 }, /* R1992 - SLIMTX2MIX Input 1 Source */
799 { 0x000007C9, 0x0080 }, /* R1993 - SLIMTX2MIX Input 1 Volume */
800 { 0x000007CA, 0x0000 }, /* R1994 - SLIMTX2MIX Input 2 Source */
801 { 0x000007CB, 0x0080 }, /* R1995 - SLIMTX2MIX Input 2 Volume */
802 { 0x000007CC, 0x0000 }, /* R1996 - SLIMTX2MIX Input 3 Source */
803 { 0x000007CD, 0x0080 }, /* R1997 - SLIMTX2MIX Input 3 Volume */
804 { 0x000007CE, 0x0000 }, /* R1998 - SLIMTX2MIX Input 4 Source */
805 { 0x000007CF, 0x0080 }, /* R1999 - SLIMTX2MIX Input 4 Volume */
806 { 0x000007D0, 0x0000 }, /* R2000 - SLIMTX3MIX Input 1 Source */
807 { 0x000007D1, 0x0080 }, /* R2001 - SLIMTX3MIX Input 1 Volume */
808 { 0x000007D2, 0x0000 }, /* R2002 - SLIMTX3MIX Input 2 Source */
809 { 0x000007D3, 0x0080 }, /* R2003 - SLIMTX3MIX Input 2 Volume */
810 { 0x000007D4, 0x0000 }, /* R2004 - SLIMTX3MIX Input 3 Source */
811 { 0x000007D5, 0x0080 }, /* R2005 - SLIMTX3MIX Input 3 Volume */
812 { 0x000007D6, 0x0000 }, /* R2006 - SLIMTX3MIX Input 4 Source */
813 { 0x000007D7, 0x0080 }, /* R2007 - SLIMTX3MIX Input 4 Volume */
814 { 0x000007D8, 0x0000 }, /* R2008 - SLIMTX4MIX Input 1 Source */
815 { 0x000007D9, 0x0080 }, /* R2009 - SLIMTX4MIX Input 1 Volume */
816 { 0x000007DA, 0x0000 }, /* R2010 - SLIMTX4MIX Input 2 Source */
817 { 0x000007DB, 0x0080 }, /* R2011 - SLIMTX4MIX Input 2 Volume */
818 { 0x000007DC, 0x0000 }, /* R2012 - SLIMTX4MIX Input 3 Source */
819 { 0x000007DD, 0x0080 }, /* R2013 - SLIMTX4MIX Input 3 Volume */
820 { 0x000007DE, 0x0000 }, /* R2014 - SLIMTX4MIX Input 4 Source */
821 { 0x000007DF, 0x0080 }, /* R2015 - SLIMTX4MIX Input 4 Volume */
822 { 0x000007E0, 0x0000 }, /* R2016 - SLIMTX5MIX Input 1 Source */
823 { 0x000007E1, 0x0080 }, /* R2017 - SLIMTX5MIX Input 1 Volume */
824 { 0x000007E2, 0x0000 }, /* R2018 - SLIMTX5MIX Input 2 Source */
825 { 0x000007E3, 0x0080 }, /* R2019 - SLIMTX5MIX Input 2 Volume */
826 { 0x000007E4, 0x0000 }, /* R2020 - SLIMTX5MIX Input 3 Source */
827 { 0x000007E5, 0x0080 }, /* R2021 - SLIMTX5MIX Input 3 Volume */
828 { 0x000007E6, 0x0000 }, /* R2022 - SLIMTX5MIX Input 4 Source */
829 { 0x000007E7, 0x0080 }, /* R2023 - SLIMTX5MIX Input 4 Volume */
830 { 0x000007E8, 0x0000 }, /* R2024 - SLIMTX6MIX Input 1 Source */
831 { 0x000007E9, 0x0080 }, /* R2025 - SLIMTX6MIX Input 1 Volume */
832 { 0x000007EA, 0x0000 }, /* R2026 - SLIMTX6MIX Input 2 Source */
833 { 0x000007EB, 0x0080 }, /* R2027 - SLIMTX6MIX Input 2 Volume */
834 { 0x000007EC, 0x0000 }, /* R2028 - SLIMTX6MIX Input 3 Source */
835 { 0x000007ED, 0x0080 }, /* R2029 - SLIMTX6MIX Input 3 Volume */
836 { 0x000007EE, 0x0000 }, /* R2030 - SLIMTX6MIX Input 4 Source */
837 { 0x000007EF, 0x0080 }, /* R2031 - SLIMTX6MIX Input 4 Volume */
838 { 0x000007F0, 0x0000 }, /* R2032 - SLIMTX7MIX Input 1 Source */
839 { 0x000007F1, 0x0080 }, /* R2033 - SLIMTX7MIX Input 1 Volume */
840 { 0x000007F2, 0x0000 }, /* R2034 - SLIMTX7MIX Input 2 Source */
841 { 0x000007F3, 0x0080 }, /* R2035 - SLIMTX7MIX Input 2 Volume */
842 { 0x000007F4, 0x0000 }, /* R2036 - SLIMTX7MIX Input 3 Source */
843 { 0x000007F5, 0x0080 }, /* R2037 - SLIMTX7MIX Input 3 Volume */
844 { 0x000007F6, 0x0000 }, /* R2038 - SLIMTX7MIX Input 4 Source */
845 { 0x000007F7, 0x0080 }, /* R2039 - SLIMTX7MIX Input 4 Volume */
846 { 0x000007F8, 0x0000 }, /* R2040 - SLIMTX8MIX Input 1 Source */
847 { 0x000007F9, 0x0080 }, /* R2041 - SLIMTX8MIX Input 1 Volume */
848 { 0x000007FA, 0x0000 }, /* R2042 - SLIMTX8MIX Input 2 Source */
849 { 0x000007FB, 0x0080 }, /* R2043 - SLIMTX8MIX Input 2 Volume */
850 { 0x000007FC, 0x0000 }, /* R2044 - SLIMTX8MIX Input 3 Source */
851 { 0x000007FD, 0x0080 }, /* R2045 - SLIMTX8MIX Input 3 Volume */
852 { 0x000007FE, 0x0000 }, /* R2046 - SLIMTX8MIX Input 4 Source */
853 { 0x000007FF, 0x0080 }, /* R2047 - SLIMTX8MIX Input 4 Volume */
854 { 0x00000880, 0x0000 }, /* R2176 - EQ1MIX Input 1 Source */
855 { 0x00000881, 0x0080 }, /* R2177 - EQ1MIX Input 1 Volume */
856 { 0x00000882, 0x0000 }, /* R2178 - EQ1MIX Input 2 Source */
857 { 0x00000883, 0x0080 }, /* R2179 - EQ1MIX Input 2 Volume */
858 { 0x00000884, 0x0000 }, /* R2180 - EQ1MIX Input 3 Source */
859 { 0x00000885, 0x0080 }, /* R2181 - EQ1MIX Input 3 Volume */
860 { 0x00000886, 0x0000 }, /* R2182 - EQ1MIX Input 4 Source */
861 { 0x00000887, 0x0080 }, /* R2183 - EQ1MIX Input 4 Volume */
862 { 0x00000888, 0x0000 }, /* R2184 - EQ2MIX Input 1 Source */
863 { 0x00000889, 0x0080 }, /* R2185 - EQ2MIX Input 1 Volume */
864 { 0x0000088A, 0x0000 }, /* R2186 - EQ2MIX Input 2 Source */
865 { 0x0000088B, 0x0080 }, /* R2187 - EQ2MIX Input 2 Volume */
866 { 0x0000088C, 0x0000 }, /* R2188 - EQ2MIX Input 3 Source */
867 { 0x0000088D, 0x0080 }, /* R2189 - EQ2MIX Input 3 Volume */
868 { 0x0000088E, 0x0000 }, /* R2190 - EQ2MIX Input 4 Source */
869 { 0x0000088F, 0x0080 }, /* R2191 - EQ2MIX Input 4 Volume */
870 { 0x00000890, 0x0000 }, /* R2192 - EQ3MIX Input 1 Source */
871 { 0x00000891, 0x0080 }, /* R2193 - EQ3MIX Input 1 Volume */
872 { 0x00000892, 0x0000 }, /* R2194 - EQ3MIX Input 2 Source */
873 { 0x00000893, 0x0080 }, /* R2195 - EQ3MIX Input 2 Volume */
874 { 0x00000894, 0x0000 }, /* R2196 - EQ3MIX Input 3 Source */
875 { 0x00000895, 0x0080 }, /* R2197 - EQ3MIX Input 3 Volume */
876 { 0x00000896, 0x0000 }, /* R2198 - EQ3MIX Input 4 Source */
877 { 0x00000897, 0x0080 }, /* R2199 - EQ3MIX Input 4 Volume */
878 { 0x00000898, 0x0000 }, /* R2200 - EQ4MIX Input 1 Source */
879 { 0x00000899, 0x0080 }, /* R2201 - EQ4MIX Input 1 Volume */
880 { 0x0000089A, 0x0000 }, /* R2202 - EQ4MIX Input 2 Source */
881 { 0x0000089B, 0x0080 }, /* R2203 - EQ4MIX Input 2 Volume */
882 { 0x0000089C, 0x0000 }, /* R2204 - EQ4MIX Input 3 Source */
883 { 0x0000089D, 0x0080 }, /* R2205 - EQ4MIX Input 3 Volume */
884 { 0x0000089E, 0x0000 }, /* R2206 - EQ4MIX Input 4 Source */
885 { 0x0000089F, 0x0080 }, /* R2207 - EQ4MIX Input 4 Volume */
886 { 0x000008C0, 0x0000 }, /* R2240 - DRC1LMIX Input 1 Source */
887 { 0x000008C1, 0x0080 }, /* R2241 - DRC1LMIX Input 1 Volume */
888 { 0x000008C2, 0x0000 }, /* R2242 - DRC1LMIX Input 2 Source */
889 { 0x000008C3, 0x0080 }, /* R2243 - DRC1LMIX Input 2 Volume */
890 { 0x000008C4, 0x0000 }, /* R2244 - DRC1LMIX Input 3 Source */
891 { 0x000008C5, 0x0080 }, /* R2245 - DRC1LMIX Input 3 Volume */
892 { 0x000008C6, 0x0000 }, /* R2246 - DRC1LMIX Input 4 Source */
893 { 0x000008C7, 0x0080 }, /* R2247 - DRC1LMIX Input 4 Volume */
894 { 0x000008C8, 0x0000 }, /* R2248 - DRC1RMIX Input 1 Source */
895 { 0x000008C9, 0x0080 }, /* R2249 - DRC1RMIX Input 1 Volume */
896 { 0x000008CA, 0x0000 }, /* R2250 - DRC1RMIX Input 2 Source */
897 { 0x000008CB, 0x0080 }, /* R2251 - DRC1RMIX Input 2 Volume */
898 { 0x000008CC, 0x0000 }, /* R2252 - DRC1RMIX Input 3 Source */
899 { 0x000008CD, 0x0080 }, /* R2253 - DRC1RMIX Input 3 Volume */
900 { 0x000008CE, 0x0000 }, /* R2254 - DRC1RMIX Input 4 Source */
901 { 0x000008CF, 0x0080 }, /* R2255 - DRC1RMIX Input 4 Volume */
902 { 0x000008D0, 0x0000 }, /* R2256 - DRC2LMIX Input 1 Source */
903 { 0x000008D1, 0x0080 }, /* R2257 - DRC2LMIX Input 1 Volume */
904 { 0x000008D2, 0x0000 }, /* R2258 - DRC2LMIX Input 2 Source */
905 { 0x000008D3, 0x0080 }, /* R2259 - DRC2LMIX Input 2 Volume */
906 { 0x000008D4, 0x0000 }, /* R2260 - DRC2LMIX Input 3 Source */
907 { 0x000008D5, 0x0080 }, /* R2261 - DRC2LMIX Input 3 Volume */
908 { 0x000008D6, 0x0000 }, /* R2262 - DRC2LMIX Input 4 Source */
909 { 0x000008D7, 0x0080 }, /* R2263 - DRC2LMIX Input 4 Volume */
910 { 0x000008D8, 0x0000 }, /* R2264 - DRC2RMIX Input 1 Source */
911 { 0x000008D9, 0x0080 }, /* R2265 - DRC2RMIX Input 1 Volume */
912 { 0x000008DA, 0x0000 }, /* R2266 - DRC2RMIX Input 2 Source */
913 { 0x000008DB, 0x0080 }, /* R2267 - DRC2RMIX Input 2 Volume */
914 { 0x000008DC, 0x0000 }, /* R2268 - DRC2RMIX Input 3 Source */
915 { 0x000008DD, 0x0080 }, /* R2269 - DRC2RMIX Input 3 Volume */
916 { 0x000008DE, 0x0000 }, /* R2270 - DRC2RMIX Input 4 Source */
917 { 0x000008DF, 0x0080 }, /* R2271 - DRC2RMIX Input 4 Volume */
918 { 0x00000900, 0x0000 }, /* R2304 - HPLP1MIX Input 1 Source */
919 { 0x00000901, 0x0080 }, /* R2305 - HPLP1MIX Input 1 Volume */
920 { 0x00000902, 0x0000 }, /* R2306 - HPLP1MIX Input 2 Source */
921 { 0x00000903, 0x0080 }, /* R2307 - HPLP1MIX Input 2 Volume */
922 { 0x00000904, 0x0000 }, /* R2308 - HPLP1MIX Input 3 Source */
923 { 0x00000905, 0x0080 }, /* R2309 - HPLP1MIX Input 3 Volume */
924 { 0x00000906, 0x0000 }, /* R2310 - HPLP1MIX Input 4 Source */
925 { 0x00000907, 0x0080 }, /* R2311 - HPLP1MIX Input 4 Volume */
926 { 0x00000908, 0x0000 }, /* R2312 - HPLP2MIX Input 1 Source */
927 { 0x00000909, 0x0080 }, /* R2313 - HPLP2MIX Input 1 Volume */
928 { 0x0000090A, 0x0000 }, /* R2314 - HPLP2MIX Input 2 Source */
929 { 0x0000090B, 0x0080 }, /* R2315 - HPLP2MIX Input 2 Volume */
930 { 0x0000090C, 0x0000 }, /* R2316 - HPLP2MIX Input 3 Source */
931 { 0x0000090D, 0x0080 }, /* R2317 - HPLP2MIX Input 3 Volume */
932 { 0x0000090E, 0x0000 }, /* R2318 - HPLP2MIX Input 4 Source */
933 { 0x0000090F, 0x0080 }, /* R2319 - HPLP2MIX Input 4 Volume */
934 { 0x00000910, 0x0000 }, /* R2320 - HPLP3MIX Input 1 Source */
935 { 0x00000911, 0x0080 }, /* R2321 - HPLP3MIX Input 1 Volume */
936 { 0x00000912, 0x0000 }, /* R2322 - HPLP3MIX Input 2 Source */
937 { 0x00000913, 0x0080 }, /* R2323 - HPLP3MIX Input 2 Volume */
938 { 0x00000914, 0x0000 }, /* R2324 - HPLP3MIX Input 3 Source */
939 { 0x00000915, 0x0080 }, /* R2325 - HPLP3MIX Input 3 Volume */
940 { 0x00000916, 0x0000 }, /* R2326 - HPLP3MIX Input 4 Source */
941 { 0x00000917, 0x0080 }, /* R2327 - HPLP3MIX Input 4 Volume */
942 { 0x00000918, 0x0000 }, /* R2328 - HPLP4MIX Input 1 Source */
943 { 0x00000919, 0x0080 }, /* R2329 - HPLP4MIX Input 1 Volume */
944 { 0x0000091A, 0x0000 }, /* R2330 - HPLP4MIX Input 2 Source */
945 { 0x0000091B, 0x0080 }, /* R2331 - HPLP4MIX Input 2 Volume */
946 { 0x0000091C, 0x0000 }, /* R2332 - HPLP4MIX Input 3 Source */
947 { 0x0000091D, 0x0080 }, /* R2333 - HPLP4MIX Input 3 Volume */
948 { 0x0000091E, 0x0000 }, /* R2334 - HPLP4MIX Input 4 Source */
949 { 0x0000091F, 0x0080 }, /* R2335 - HPLP4MIX Input 4 Volume */
950 { 0x00000940, 0x0000 }, /* R2368 - DSP1LMIX Input 1 Source */
951 { 0x00000941, 0x0080 }, /* R2369 - DSP1LMIX Input 1 Volume */
952 { 0x00000942, 0x0000 }, /* R2370 - DSP1LMIX Input 2 Source */
953 { 0x00000943, 0x0080 }, /* R2371 - DSP1LMIX Input 2 Volume */
954 { 0x00000944, 0x0000 }, /* R2372 - DSP1LMIX Input 3 Source */
955 { 0x00000945, 0x0080 }, /* R2373 - DSP1LMIX Input 3 Volume */
956 { 0x00000946, 0x0000 }, /* R2374 - DSP1LMIX Input 4 Source */
957 { 0x00000947, 0x0080 }, /* R2375 - DSP1LMIX Input 4 Volume */
958 { 0x00000948, 0x0000 }, /* R2376 - DSP1RMIX Input 1 Source */
959 { 0x00000949, 0x0080 }, /* R2377 - DSP1RMIX Input 1 Volume */
960 { 0x0000094A, 0x0000 }, /* R2378 - DSP1RMIX Input 2 Source */
961 { 0x0000094B, 0x0080 }, /* R2379 - DSP1RMIX Input 2 Volume */
962 { 0x0000094C, 0x0000 }, /* R2380 - DSP1RMIX Input 3 Source */
963 { 0x0000094D, 0x0080 }, /* R2381 - DSP1RMIX Input 3 Volume */
964 { 0x0000094E, 0x0000 }, /* R2382 - DSP1RMIX Input 4 Source */
965 { 0x0000094F, 0x0080 }, /* R2383 - DSP1RMIX Input 4 Volume */
966 { 0x00000950, 0x0000 }, /* R2384 - DSP1AUX1MIX Input 1 Source */
967 { 0x00000958, 0x0000 }, /* R2392 - DSP1AUX2MIX Input 1 Source */
968 { 0x00000960, 0x0000 }, /* R2400 - DSP1AUX3MIX Input 1 Source */
969 { 0x00000968, 0x0000 }, /* R2408 - DSP1AUX4MIX Input 1 Source */
970 { 0x00000970, 0x0000 }, /* R2416 - DSP1AUX5MIX Input 1 Source */
971 { 0x00000978, 0x0000 }, /* R2424 - DSP1AUX6MIX Input 1 Source */
972 { 0x00000980, 0x0000 }, /* R2432 - DSP2LMIX Input 1 Source */
973 { 0x00000981, 0x0080 }, /* R2433 - DSP2LMIX Input 1 Volume */
974 { 0x00000982, 0x0000 }, /* R2434 - DSP2LMIX Input 2 Source */
975 { 0x00000983, 0x0080 }, /* R2435 - DSP2LMIX Input 2 Volume */
976 { 0x00000984, 0x0000 }, /* R2436 - DSP2LMIX Input 3 Source */
977 { 0x00000985, 0x0080 }, /* R2437 - DSP2LMIX Input 3 Volume */
978 { 0x00000986, 0x0000 }, /* R2438 - DSP2LMIX Input 4 Source */
979 { 0x00000987, 0x0080 }, /* R2439 - DSP2LMIX Input 4 Volume */
980 { 0x00000988, 0x0000 }, /* R2440 - DSP2RMIX Input 1 Source */
981 { 0x00000989, 0x0080 }, /* R2441 - DSP2RMIX Input 1 Volume */
982 { 0x0000098A, 0x0000 }, /* R2442 - DSP2RMIX Input 2 Source */
983 { 0x0000098B, 0x0080 }, /* R2443 - DSP2RMIX Input 2 Volume */
984 { 0x0000098C, 0x0000 }, /* R2444 - DSP2RMIX Input 3 Source */
985 { 0x0000098D, 0x0080 }, /* R2445 - DSP2RMIX Input 3 Volume */
986 { 0x0000098E, 0x0000 }, /* R2446 - DSP2RMIX Input 4 Source */
987 { 0x0000098F, 0x0080 }, /* R2447 - DSP2RMIX Input 4 Volume */
988 { 0x00000990, 0x0000 }, /* R2448 - DSP2AUX1MIX Input 1 Source */
989 { 0x00000998, 0x0000 }, /* R2456 - DSP2AUX2MIX Input 1 Source */
990 { 0x000009A0, 0x0000 }, /* R2464 - DSP2AUX3MIX Input 1 Source */
991 { 0x000009A8, 0x0000 }, /* R2472 - DSP2AUX4MIX Input 1 Source */
992 { 0x000009B0, 0x0000 }, /* R2480 - DSP2AUX5MIX Input 1 Source */
993 { 0x000009B8, 0x0000 }, /* R2488 - DSP2AUX6MIX Input 1 Source */
994 { 0x000009C0, 0x0000 }, /* R2496 - DSP3LMIX Input 1 Source */
995 { 0x000009C1, 0x0080 }, /* R2497 - DSP3LMIX Input 1 Volume */
996 { 0x000009C2, 0x0000 }, /* R2498 - DSP3LMIX Input 2 Source */
997 { 0x000009C3, 0x0080 }, /* R2499 - DSP3LMIX Input 2 Volume */
998 { 0x000009C4, 0x0000 }, /* R2500 - DSP3LMIX Input 3 Source */
999 { 0x000009C5, 0x0080 }, /* R2501 - DSP3LMIX Input 3 Volume */
1000 { 0x000009C6, 0x0000 }, /* R2502 - DSP3LMIX Input 4 Source */
1001 { 0x000009C7, 0x0080 }, /* R2503 - DSP3LMIX Input 4 Volume */
1002 { 0x000009C8, 0x0000 }, /* R2504 - DSP3RMIX Input 1 Source */
1003 { 0x000009C9, 0x0080 }, /* R2505 - DSP3RMIX Input 1 Volume */
1004 { 0x000009CA, 0x0000 }, /* R2506 - DSP3RMIX Input 2 Source */
1005 { 0x000009CB, 0x0080 }, /* R2507 - DSP3RMIX Input 2 Volume */
1006 { 0x000009CC, 0x0000 }, /* R2508 - DSP3RMIX Input 3 Source */
1007 { 0x000009CD, 0x0080 }, /* R2509 - DSP3RMIX Input 3 Volume */
1008 { 0x000009CE, 0x0000 }, /* R2510 - DSP3RMIX Input 4 Source */
1009 { 0x000009CF, 0x0080 }, /* R2511 - DSP3RMIX Input 4 Volume */
1010 { 0x000009D0, 0x0000 }, /* R2512 - DSP3AUX1MIX Input 1 Source */
1011 { 0x000009D8, 0x0000 }, /* R2520 - DSP3AUX2MIX Input 1 Source */
1012 { 0x000009E0, 0x0000 }, /* R2528 - DSP3AUX3MIX Input 1 Source */
1013 { 0x000009E8, 0x0000 }, /* R2536 - DSP3AUX4MIX Input 1 Source */
1014 { 0x000009F0, 0x0000 }, /* R2544 - DSP3AUX5MIX Input 1 Source */
1015 { 0x000009F8, 0x0000 }, /* R2552 - DSP3AUX6MIX Input 1 Source */
1016 { 0x00000A00, 0x0000 }, /* R2560 - DSP4LMIX Input 1 Source */
1017 { 0x00000A01, 0x0080 }, /* R2561 - DSP4LMIX Input 1 Volume */
1018 { 0x00000A02, 0x0000 }, /* R2562 - DSP4LMIX Input 2 Source */
1019 { 0x00000A03, 0x0080 }, /* R2563 - DSP4LMIX Input 2 Volume */
1020 { 0x00000A04, 0x0000 }, /* R2564 - DSP4LMIX Input 3 Source */
1021 { 0x00000A05, 0x0080 }, /* R2565 - DSP4LMIX Input 3 Volume */
1022 { 0x00000A06, 0x0000 }, /* R2566 - DSP4LMIX Input 4 Source */
1023 { 0x00000A07, 0x0080 }, /* R2567 - DSP4LMIX Input 4 Volume */
1024 { 0x00000A08, 0x0000 }, /* R2568 - DSP4RMIX Input 1 Source */
1025 { 0x00000A09, 0x0080 }, /* R2569 - DSP4RMIX Input 1 Volume */
1026 { 0x00000A0A, 0x0000 }, /* R2570 - DSP4RMIX Input 2 Source */
1027 { 0x00000A0B, 0x0080 }, /* R2571 - DSP4RMIX Input 2 Volume */
1028 { 0x00000A0C, 0x0000 }, /* R2572 - DSP4RMIX Input 3 Source */
1029 { 0x00000A0D, 0x0080 }, /* R2573 - DSP4RMIX Input 3 Volume */
1030 { 0x00000A0E, 0x0000 }, /* R2574 - DSP4RMIX Input 4 Source */
1031 { 0x00000A0F, 0x0080 }, /* R2575 - DSP4RMIX Input 4 Volume */
1032 { 0x00000A10, 0x0000 }, /* R2576 - DSP4AUX1MIX Input 1 Source */
1033 { 0x00000A18, 0x0000 }, /* R2584 - DSP4AUX2MIX Input 1 Source */
1034 { 0x00000A20, 0x0000 }, /* R2592 - DSP4AUX3MIX Input 1 Source */
1035 { 0x00000A28, 0x0000 }, /* R2600 - DSP4AUX4MIX Input 1 Source */
1036 { 0x00000A30, 0x0000 }, /* R2608 - DSP4AUX5MIX Input 1 Source */
1037 { 0x00000A38, 0x0000 }, /* R2616 - DSP4AUX6MIX Input 1 Source */
1038 { 0x00000A80, 0x0000 }, /* R2688 - ASRC1LMIX Input 1 Source */
1039 { 0x00000A88, 0x0000 }, /* R2696 - ASRC1RMIX Input 1 Source */
1040 { 0x00000A90, 0x0000 }, /* R2704 - ASRC2LMIX Input 1 Source */
1041 { 0x00000A98, 0x0000 }, /* R2712 - ASRC2RMIX Input 1 Source */
1042 { 0x00000B00, 0x0000 }, /* R2816 - ISRC1DEC1MIX Input 1 Source */
1043 { 0x00000B08, 0x0000 }, /* R2824 - ISRC1DEC2MIX Input 1 Source */
1044 { 0x00000B10, 0x0000 }, /* R2832 - ISRC1DEC3MIX Input 1 Source */
1045 { 0x00000B18, 0x0000 }, /* R2840 - ISRC1DEC4MIX Input 1 Source */
1046 { 0x00000B20, 0x0000 }, /* R2848 - ISRC1INT1MIX Input 1 Source */
1047 { 0x00000B28, 0x0000 }, /* R2856 - ISRC1INT2MIX Input 1 Source */
1048 { 0x00000B30, 0x0000 }, /* R2864 - ISRC1INT3MIX Input 1 Source */
1049 { 0x00000B38, 0x0000 }, /* R2872 - ISRC1INT4MIX Input 1 Source */
1050 { 0x00000B40, 0x0000 }, /* R2880 - ISRC2DEC1MIX Input 1 Source */
1051 { 0x00000B48, 0x0000 }, /* R2888 - ISRC2DEC2MIX Input 1 Source */
1052 { 0x00000B50, 0x0000 }, /* R2896 - ISRC2DEC3MIX Input 1 Source */
1053 { 0x00000B58, 0x0000 }, /* R2904 - ISRC2DEC4MIX Input 1 Source */
1054 { 0x00000B60, 0x0000 }, /* R2912 - ISRC2INT1MIX Input 1 Source */
1055 { 0x00000B68, 0x0000 }, /* R2920 - ISRC2INT2MIX Input 1 Source */
1056 { 0x00000B70, 0x0000 }, /* R2928 - ISRC2INT3MIX Input 1 Source */
1057 { 0x00000B78, 0x0000 }, /* R2936 - ISRC2INT4MIX Input 1 Source */
1058 { 0x00000B80, 0x0000 }, /* R2944 - ISRC3DEC1MIX Input 1 Source */
1059 { 0x00000B88, 0x0000 }, /* R2952 - ISRC3DEC2MIX Input 1 Source */
1060 { 0x00000B90, 0x0000 }, /* R2960 - ISRC3DEC3MIX Input 1 Source */
1061 { 0x00000B98, 0x0000 }, /* R2968 - ISRC3DEC4MIX Input 1 Source */
1062 { 0x00000BA0, 0x0000 }, /* R2976 - ISRC3INT1MIX Input 1 Source */
1063 { 0x00000BA8, 0x0000 }, /* R2984 - ISRC3INT2MIX Input 1 Source */
1064 { 0x00000BB0, 0x0000 }, /* R2992 - ISRC3INT3MIX Input 1 Source */
1065 { 0x00000BB8, 0x0000 }, /* R3000 - ISRC3INT4MIX Input 1 Source */
1066 { 0x00000C00, 0xA101 }, /* R3072 - GPIO1 CTRL */
1067 { 0x00000C01, 0xA101 }, /* R3073 - GPIO2 CTRL */
1068 { 0x00000C02, 0xA101 }, /* R3074 - GPIO3 CTRL */
1069 { 0x00000C03, 0xA101 }, /* R3075 - GPIO4 CTRL */
1070 { 0x00000C04, 0xA101 }, /* R3076 - GPIO5 CTRL */
1071 { 0x00000C0F, 0x0400 }, /* R3087 - IRQ CTRL 1 */
1072 { 0x00000C10, 0x1000 }, /* R3088 - GPIO Debounce Config */
1073 { 0x00000C20, 0x8002 }, /* R3104 - Misc Pad Ctrl 1 */
1074 { 0x00000C21, 0x8001 }, /* R3105 - Misc Pad Ctrl 2 */
1075 { 0x00000C22, 0x0000 }, /* R3106 - Misc Pad Ctrl 3 */
1076 { 0x00000C23, 0x0000 }, /* R3107 - Misc Pad Ctrl 4 */
1077 { 0x00000C24, 0x0000 }, /* R3108 - Misc Pad Ctrl 5 */
1078 { 0x00000C25, 0x0000 }, /* R3109 - Misc Pad Ctrl 6 */
1079 { 0x00000C30, 0x8282 }, /* R3120 - Misc Pad Ctrl 7 */
1080 { 0x00000C31, 0x0082 }, /* R3121 - Misc Pad Ctrl 8 */
1081 { 0x00000C32, 0x8282 }, /* R3122 - Misc Pad Ctrl 9 */
1082 { 0x00000C33, 0x8282 }, /* R3123 - Misc Pad Ctrl 10 */
1083 { 0x00000C34, 0x8282 }, /* R3124 - Misc Pad Ctrl 11 */
1084 { 0x00000C35, 0x8282 }, /* R3125 - Misc Pad Ctrl 12 */
1085 { 0x00000C36, 0x8282 }, /* R3126 - Misc Pad Ctrl 13 */
1086 { 0x00000C37, 0x8282 }, /* R3127 - Misc Pad Ctrl 14 */
1087 { 0x00000C38, 0x8282 }, /* R3128 - Misc Pad Ctrl 15 */
1088 { 0x00000C39, 0x8282 }, /* R3129 - Misc Pad Ctrl 16 */
1089 { 0x00000C3A, 0x8282 }, /* R3130 - Misc Pad Ctrl 17 */
1090 { 0x00000C3B, 0x8282 }, /* R3131 - Misc Pad Ctrl 18 */
1091 { 0x00000D08, 0xFFFF }, /* R3336 - Interrupt Status 1 Mask */
1092 { 0x00000D09, 0xFFFF }, /* R3337 - Interrupt Status 2 Mask */
1093 { 0x00000D0A, 0xFFFF }, /* R3338 - Interrupt Status 3 Mask */
1094 { 0x00000D0B, 0xFFFF }, /* R3339 - Interrupt Status 4 Mask */
1095 { 0x00000D0C, 0xFEFF }, /* R3340 - Interrupt Status 5 Mask */
1096 { 0x00000D0F, 0x0000 }, /* R3343 - Interrupt Control */
1097 { 0x00000D18, 0xFFFF }, /* R3352 - IRQ2 Status 1 Mask */
1098 { 0x00000D19, 0xFFFF }, /* R3353 - IRQ2 Status 2 Mask */
1099 { 0x00000D1A, 0xFFFF }, /* R3354 - IRQ2 Status 3 Mask */
1100 { 0x00000D1B, 0xFFFF }, /* R3355 - IRQ2 Status 4 Mask */
1101 { 0x00000D1C, 0xFFFF }, /* R3356 - IRQ2 Status 5 Mask */
1102 { 0x00000D1F, 0x0000 }, /* R3359 - IRQ2 Control */
1103 { 0x00000D50, 0x0000 }, /* R3408 - AOD wkup and trig */
1104 { 0x00000D53, 0xFFFF }, /* R3411 - AOD IRQ Mask IRQ1 */
1105 { 0x00000D54, 0xFFFF }, /* R3412 - AOD IRQ Mask IRQ2 */
1106 { 0x00000D56, 0x0000 }, /* R3414 - Jack detect debounce */
1107 { 0x00000E00, 0x0000 }, /* R3584 - FX_Ctrl1 */
1108 { 0x00000E01, 0x0000 }, /* R3585 - FX_Ctrl2 */
1109 { 0x00000E10, 0x6318 }, /* R3600 - EQ1_1 */
1110 { 0x00000E11, 0x6300 }, /* R3601 - EQ1_2 */
1111 { 0x00000E12, 0x0FC8 }, /* R3602 - EQ1_3 */
1112 { 0x00000E13, 0x03FE }, /* R3603 - EQ1_4 */
1113 { 0x00000E14, 0x00E0 }, /* R3604 - EQ1_5 */
1114 { 0x00000E15, 0x1EC4 }, /* R3605 - EQ1_6 */
1115 { 0x00000E16, 0xF136 }, /* R3606 - EQ1_7 */
1116 { 0x00000E17, 0x0409 }, /* R3607 - EQ1_8 */
1117 { 0x00000E18, 0x04CC }, /* R3608 - EQ1_9 */
1118 { 0x00000E19, 0x1C9B }, /* R3609 - EQ1_10 */
1119 { 0x00000E1A, 0xF337 }, /* R3610 - EQ1_11 */
1120 { 0x00000E1B, 0x040B }, /* R3611 - EQ1_12 */
1121 { 0x00000E1C, 0x0CBB }, /* R3612 - EQ1_13 */
1122 { 0x00000E1D, 0x16F8 }, /* R3613 - EQ1_14 */
1123 { 0x00000E1E, 0xF7D9 }, /* R3614 - EQ1_15 */
1124 { 0x00000E1F, 0x040A }, /* R3615 - EQ1_16 */
1125 { 0x00000E20, 0x1F14 }, /* R3616 - EQ1_17 */
1126 { 0x00000E21, 0x058C }, /* R3617 - EQ1_18 */
1127 { 0x00000E22, 0x0563 }, /* R3618 - EQ1_19 */
1128 { 0x00000E23, 0x4000 }, /* R3619 - EQ1_20 */
1129 { 0x00000E24, 0x0B75 }, /* R3620 - EQ1_21 */
1130 { 0x00000E26, 0x6318 }, /* R3622 - EQ2_1 */
1131 { 0x00000E27, 0x6300 }, /* R3623 - EQ2_2 */
1132 { 0x00000E28, 0x0FC8 }, /* R3624 - EQ2_3 */
1133 { 0x00000E29, 0x03FE }, /* R3625 - EQ2_4 */
1134 { 0x00000E2A, 0x00E0 }, /* R3626 - EQ2_5 */
1135 { 0x00000E2B, 0x1EC4 }, /* R3627 - EQ2_6 */
1136 { 0x00000E2C, 0xF136 }, /* R3628 - EQ2_7 */
1137 { 0x00000E2D, 0x0409 }, /* R3629 - EQ2_8 */
1138 { 0x00000E2E, 0x04CC }, /* R3630 - EQ2_9 */
1139 { 0x00000E2F, 0x1C9B }, /* R3631 - EQ2_10 */
1140 { 0x00000E30, 0xF337 }, /* R3632 - EQ2_11 */
1141 { 0x00000E31, 0x040B }, /* R3633 - EQ2_12 */
1142 { 0x00000E32, 0x0CBB }, /* R3634 - EQ2_13 */
1143 { 0x00000E33, 0x16F8 }, /* R3635 - EQ2_14 */
1144 { 0x00000E34, 0xF7D9 }, /* R3636 - EQ2_15 */
1145 { 0x00000E35, 0x040A }, /* R3637 - EQ2_16 */
1146 { 0x00000E36, 0x1F14 }, /* R3638 - EQ2_17 */
1147 { 0x00000E37, 0x058C }, /* R3639 - EQ2_18 */
1148 { 0x00000E38, 0x0563 }, /* R3640 - EQ2_19 */
1149 { 0x00000E39, 0x4000 }, /* R3641 - EQ2_20 */
1150 { 0x00000E3A, 0x0B75 }, /* R3642 - EQ2_21 */
1151 { 0x00000E3C, 0x6318 }, /* R3644 - EQ3_1 */
1152 { 0x00000E3D, 0x6300 }, /* R3645 - EQ3_2 */
1153 { 0x00000E3E, 0x0FC8 }, /* R3646 - EQ3_3 */
1154 { 0x00000E3F, 0x03FE }, /* R3647 - EQ3_4 */
1155 { 0x00000E40, 0x00E0 }, /* R3648 - EQ3_5 */
1156 { 0x00000E41, 0x1EC4 }, /* R3649 - EQ3_6 */
1157 { 0x00000E42, 0xF136 }, /* R3650 - EQ3_7 */
1158 { 0x00000E43, 0x0409 }, /* R3651 - EQ3_8 */
1159 { 0x00000E44, 0x04CC }, /* R3652 - EQ3_9 */
1160 { 0x00000E45, 0x1C9B }, /* R3653 - EQ3_10 */
1161 { 0x00000E46, 0xF337 }, /* R3654 - EQ3_11 */
1162 { 0x00000E47, 0x040B }, /* R3655 - EQ3_12 */
1163 { 0x00000E48, 0x0CBB }, /* R3656 - EQ3_13 */
1164 { 0x00000E49, 0x16F8 }, /* R3657 - EQ3_14 */
1165 { 0x00000E4A, 0xF7D9 }, /* R3658 - EQ3_15 */
1166 { 0x00000E4B, 0x040A }, /* R3659 - EQ3_16 */
1167 { 0x00000E4C, 0x1F14 }, /* R3660 - EQ3_17 */
1168 { 0x00000E4D, 0x058C }, /* R3661 - EQ3_18 */
1169 { 0x00000E4E, 0x0563 }, /* R3662 - EQ3_19 */
1170 { 0x00000E4F, 0x4000 }, /* R3663 - EQ3_20 */
1171 { 0x00000E50, 0x0B75 }, /* R3664 - EQ3_21 */
1172 { 0x00000E52, 0x6318 }, /* R3666 - EQ4_1 */
1173 { 0x00000E53, 0x6300 }, /* R3667 - EQ4_2 */
1174 { 0x00000E54, 0x0FC8 }, /* R3668 - EQ4_3 */
1175 { 0x00000E55, 0x03FE }, /* R3669 - EQ4_4 */
1176 { 0x00000E56, 0x00E0 }, /* R3670 - EQ4_5 */
1177 { 0x00000E57, 0x1EC4 }, /* R3671 - EQ4_6 */
1178 { 0x00000E58, 0xF136 }, /* R3672 - EQ4_7 */
1179 { 0x00000E59, 0x0409 }, /* R3673 - EQ4_8 */
1180 { 0x00000E5A, 0x04CC }, /* R3674 - EQ4_9 */
1181 { 0x00000E5B, 0x1C9B }, /* R3675 - EQ4_10 */
1182 { 0x00000E5C, 0xF337 }, /* R3676 - EQ4_11 */
1183 { 0x00000E5D, 0x040B }, /* R3677 - EQ4_12 */
1184 { 0x00000E5E, 0x0CBB }, /* R3678 - EQ4_13 */
1185 { 0x00000E5F, 0x16F8 }, /* R3679 - EQ4_14 */
1186 { 0x00000E60, 0xF7D9 }, /* R3680 - EQ4_15 */
1187 { 0x00000E61, 0x040A }, /* R3681 - EQ4_16 */
1188 { 0x00000E62, 0x1F14 }, /* R3682 - EQ4_17 */
1189 { 0x00000E63, 0x058C }, /* R3683 - EQ4_18 */
1190 { 0x00000E64, 0x0563 }, /* R3684 - EQ4_19 */
1191 { 0x00000E65, 0x4000 }, /* R3685 - EQ4_20 */
1192 { 0x00000E66, 0x0B75 }, /* R3686 - EQ4_21 */
1193 { 0x00000E80, 0x0018 }, /* R3712 - DRC1 ctrl1 */
1194 { 0x00000E81, 0x0933 }, /* R3713 - DRC1 ctrl2 */
1195 { 0x00000E82, 0x0018 }, /* R3714 - DRC1 ctrl3 */
1196 { 0x00000E83, 0x0000 }, /* R3715 - DRC1 ctrl4 */
1197 { 0x00000E84, 0x0000 }, /* R3716 - DRC1 ctrl5 */
1198 { 0x00000E89, 0x0018 }, /* R3721 - DRC2 ctrl1 */
1199 { 0x00000E8A, 0x0933 }, /* R3722 - DRC2 ctrl2 */
1200 { 0x00000E8B, 0x0018 }, /* R3723 - DRC2 ctrl3 */
1201 { 0x00000E8C, 0x0000 }, /* R3724 - DRC2 ctrl4 */
1202 { 0x00000E8D, 0x0000 }, /* R3725 - DRC2 ctrl5 */
1203 { 0x00000EC0, 0x0000 }, /* R3776 - HPLPF1_1 */
1204 { 0x00000EC1, 0x0000 }, /* R3777 - HPLPF1_2 */
1205 { 0x00000EC4, 0x0000 }, /* R3780 - HPLPF2_1 */
1206 { 0x00000EC5, 0x0000 }, /* R3781 - HPLPF2_2 */
1207 { 0x00000EC8, 0x0000 }, /* R3784 - HPLPF3_1 */
1208 { 0x00000EC9, 0x0000 }, /* R3785 - HPLPF3_2 */
1209 { 0x00000ECC, 0x0000 }, /* R3788 - HPLPF4_1 */
1210 { 0x00000ECD, 0x0000 }, /* R3789 - HPLPF4_2 */
1211 { 0x00000EE0, 0x0000 }, /* R3808 - ASRC_ENABLE */
1212 { 0x00000EE2, 0x0000 }, /* R3810 - ASRC_RATE1 */
1213 { 0x00000EF0, 0x0000 }, /* R3824 - ISRC 1 CTRL 1 */
1214 { 0x00000EF1, 0x0000 }, /* R3825 - ISRC 1 CTRL 2 */
1215 { 0x00000EF2, 0x0000 }, /* R3826 - ISRC 1 CTRL 3 */
1216 { 0x00000EF3, 0x0000 }, /* R3827 - ISRC 2 CTRL 1 */
1217 { 0x00000EF4, 0x0000 }, /* R3828 - ISRC 2 CTRL 2 */
1218 { 0x00000EF5, 0x0000 }, /* R3829 - ISRC 2 CTRL 3 */
1219 { 0x00000EF6, 0x0000 }, /* R3830 - ISRC 3 CTRL 1 */
1220 { 0x00000EF7, 0x0000 }, /* R3831 - ISRC 3 CTRL 2 */
1221 { 0x00000EF8, 0x0000 }, /* R3832 - ISRC 3 CTRL 3 */
1222 { 0x00000F00, 0x0000 }, /* R3840 - Clock Control */
1223 { 0x00000F01, 0x0000 }, /* R3841 - ANC_SRC */
1224 { 0x00001100, 0x0010 }, /* R4352 - DSP1 Control 1 */
1225 { 0x00001101, 0x0000 }, /* R4353 - DSP1 Clocking 1 */
1226 { 0x00001200, 0x0010 }, /* R4608 - DSP2 Control 1 */
1227 { 0x00001201, 0x0000 }, /* R4609 - DSP2 Clocking 1 */
1228 { 0x00001300, 0x0010 }, /* R4864 - DSP3 Control 1 */
1229 { 0x00001301, 0x0000 }, /* R4865 - DSP3 Clocking 1 */
1230 { 0x00001400, 0x0010 }, /* R5120 - DSP4 Control 1 */
1231 { 0x00001401, 0x0000 }, /* R5121 - DSP4 Clocking 1 */
1232 { 0x00001404, 0x0000 }, /* R5124 - DSP4 Status 1 */
1233};
1234
1235static bool wm5110_readable_register(struct device *dev, unsigned int reg)
1236{
1237 switch (reg) {
1238 case ARIZONA_SOFTWARE_RESET:
1239 case ARIZONA_DEVICE_REVISION:
1240 case ARIZONA_CTRL_IF_SPI_CFG_1:
1241 case ARIZONA_CTRL_IF_I2C1_CFG_1:
1242 case ARIZONA_CTRL_IF_I2C2_CFG_1:
1243 case ARIZONA_CTRL_IF_I2C1_CFG_2:
1244 case ARIZONA_CTRL_IF_I2C2_CFG_2:
1245 case ARIZONA_WRITE_SEQUENCER_CTRL_0:
1246 case ARIZONA_WRITE_SEQUENCER_CTRL_1:
1247 case ARIZONA_WRITE_SEQUENCER_CTRL_2:
1248 case ARIZONA_TONE_GENERATOR_1:
1249 case ARIZONA_TONE_GENERATOR_2:
1250 case ARIZONA_TONE_GENERATOR_3:
1251 case ARIZONA_TONE_GENERATOR_4:
1252 case ARIZONA_TONE_GENERATOR_5:
1253 case ARIZONA_PWM_DRIVE_1:
1254 case ARIZONA_PWM_DRIVE_2:
1255 case ARIZONA_PWM_DRIVE_3:
1256 case ARIZONA_WAKE_CONTROL:
1257 case ARIZONA_SEQUENCE_CONTROL:
1258 case ARIZONA_SAMPLE_RATE_SEQUENCE_SELECT_1:
1259 case ARIZONA_SAMPLE_RATE_SEQUENCE_SELECT_2:
1260 case ARIZONA_SAMPLE_RATE_SEQUENCE_SELECT_3:
1261 case ARIZONA_SAMPLE_RATE_SEQUENCE_SELECT_4:
1262 case ARIZONA_ALWAYS_ON_TRIGGERS_SEQUENCE_SELECT_1:
1263 case ARIZONA_ALWAYS_ON_TRIGGERS_SEQUENCE_SELECT_2:
1264 case ARIZONA_ALWAYS_ON_TRIGGERS_SEQUENCE_SELECT_3:
1265 case ARIZONA_ALWAYS_ON_TRIGGERS_SEQUENCE_SELECT_4:
1266 case ARIZONA_COMFORT_NOISE_GENERATOR:
1267 case ARIZONA_HAPTICS_CONTROL_1:
1268 case ARIZONA_HAPTICS_CONTROL_2:
1269 case ARIZONA_HAPTICS_PHASE_1_INTENSITY:
1270 case ARIZONA_HAPTICS_PHASE_1_DURATION:
1271 case ARIZONA_HAPTICS_PHASE_2_INTENSITY:
1272 case ARIZONA_HAPTICS_PHASE_2_DURATION:
1273 case ARIZONA_HAPTICS_PHASE_3_INTENSITY:
1274 case ARIZONA_HAPTICS_PHASE_3_DURATION:
1275 case ARIZONA_HAPTICS_STATUS:
1276 case ARIZONA_CLOCK_32K_1:
1277 case ARIZONA_SYSTEM_CLOCK_1:
1278 case ARIZONA_SAMPLE_RATE_1:
1279 case ARIZONA_SAMPLE_RATE_2:
1280 case ARIZONA_SAMPLE_RATE_3:
1281 case ARIZONA_SAMPLE_RATE_1_STATUS:
1282 case ARIZONA_SAMPLE_RATE_2_STATUS:
1283 case ARIZONA_SAMPLE_RATE_3_STATUS:
1284 case ARIZONA_ASYNC_CLOCK_1:
1285 case ARIZONA_ASYNC_SAMPLE_RATE_1:
1286 case ARIZONA_ASYNC_SAMPLE_RATE_1_STATUS:
1287 case ARIZONA_OUTPUT_SYSTEM_CLOCK:
1288 case ARIZONA_OUTPUT_ASYNC_CLOCK:
1289 case ARIZONA_RATE_ESTIMATOR_1:
1290 case ARIZONA_RATE_ESTIMATOR_2:
1291 case ARIZONA_RATE_ESTIMATOR_3:
1292 case ARIZONA_RATE_ESTIMATOR_4:
1293 case ARIZONA_RATE_ESTIMATOR_5:
1294 case ARIZONA_FLL1_CONTROL_1:
1295 case ARIZONA_FLL1_CONTROL_2:
1296 case ARIZONA_FLL1_CONTROL_3:
1297 case ARIZONA_FLL1_CONTROL_4:
1298 case ARIZONA_FLL1_CONTROL_5:
1299 case ARIZONA_FLL1_CONTROL_6:
1300 case ARIZONA_FLL1_LOOP_FILTER_TEST_1:
1301 case ARIZONA_FLL1_NCO_TEST_0:
1302 case ARIZONA_FLL1_SYNCHRONISER_1:
1303 case ARIZONA_FLL1_SYNCHRONISER_2:
1304 case ARIZONA_FLL1_SYNCHRONISER_3:
1305 case ARIZONA_FLL1_SYNCHRONISER_4:
1306 case ARIZONA_FLL1_SYNCHRONISER_5:
1307 case ARIZONA_FLL1_SYNCHRONISER_6:
1308 case ARIZONA_FLL1_SPREAD_SPECTRUM:
1309 case ARIZONA_FLL1_GPIO_CLOCK:
1310 case ARIZONA_FLL2_CONTROL_1:
1311 case ARIZONA_FLL2_CONTROL_2:
1312 case ARIZONA_FLL2_CONTROL_3:
1313 case ARIZONA_FLL2_CONTROL_4:
1314 case ARIZONA_FLL2_CONTROL_5:
1315 case ARIZONA_FLL2_CONTROL_6:
1316 case ARIZONA_FLL2_LOOP_FILTER_TEST_1:
1317 case ARIZONA_FLL2_NCO_TEST_0:
1318 case ARIZONA_FLL2_SYNCHRONISER_1:
1319 case ARIZONA_FLL2_SYNCHRONISER_2:
1320 case ARIZONA_FLL2_SYNCHRONISER_3:
1321 case ARIZONA_FLL2_SYNCHRONISER_4:
1322 case ARIZONA_FLL2_SYNCHRONISER_5:
1323 case ARIZONA_FLL2_SYNCHRONISER_6:
1324 case ARIZONA_FLL2_SPREAD_SPECTRUM:
1325 case ARIZONA_FLL2_GPIO_CLOCK:
1326 case ARIZONA_MIC_CHARGE_PUMP_1:
1327 case ARIZONA_LDO1_CONTROL_1:
1328 case ARIZONA_LDO2_CONTROL_1:
1329 case ARIZONA_MIC_BIAS_CTRL_1:
1330 case ARIZONA_MIC_BIAS_CTRL_2:
1331 case ARIZONA_MIC_BIAS_CTRL_3:
1332 case ARIZONA_ACCESSORY_DETECT_MODE_1:
1333 case ARIZONA_HEADPHONE_DETECT_1:
1334 case ARIZONA_HEADPHONE_DETECT_2:
1335 case ARIZONA_MIC_DETECT_1:
1336 case ARIZONA_MIC_DETECT_2:
1337 case ARIZONA_MIC_DETECT_3:
1338 case ARIZONA_MIC_NOISE_MIX_CONTROL_1:
1339 case ARIZONA_JACK_DETECT_ANALOGUE:
1340 case ARIZONA_INPUT_ENABLES:
1341 case ARIZONA_INPUT_ENABLES_STATUS:
1342 case ARIZONA_INPUT_RATE:
1343 case ARIZONA_INPUT_VOLUME_RAMP:
1344 case ARIZONA_IN1L_CONTROL:
1345 case ARIZONA_ADC_DIGITAL_VOLUME_1L:
1346 case ARIZONA_DMIC1L_CONTROL:
1347 case ARIZONA_IN1R_CONTROL:
1348 case ARIZONA_ADC_DIGITAL_VOLUME_1R:
1349 case ARIZONA_DMIC1R_CONTROL:
1350 case ARIZONA_IN2L_CONTROL:
1351 case ARIZONA_ADC_DIGITAL_VOLUME_2L:
1352 case ARIZONA_DMIC2L_CONTROL:
1353 case ARIZONA_IN2R_CONTROL:
1354 case ARIZONA_ADC_DIGITAL_VOLUME_2R:
1355 case ARIZONA_DMIC2R_CONTROL:
1356 case ARIZONA_IN3L_CONTROL:
1357 case ARIZONA_ADC_DIGITAL_VOLUME_3L:
1358 case ARIZONA_DMIC3L_CONTROL:
1359 case ARIZONA_IN3R_CONTROL:
1360 case ARIZONA_ADC_DIGITAL_VOLUME_3R:
1361 case ARIZONA_DMIC3R_CONTROL:
1362 case ARIZONA_IN4L_CONTROL:
1363 case ARIZONA_ADC_DIGITAL_VOLUME_4L:
1364 case ARIZONA_DMIC4L_CONTROL:
1365 case ARIZONA_ADC_DIGITAL_VOLUME_4R:
1366 case ARIZONA_DMIC4R_CONTROL:
1367 case ARIZONA_OUTPUT_ENABLES_1:
1368 case ARIZONA_OUTPUT_STATUS_1:
1369 case ARIZONA_RAW_OUTPUT_STATUS_1:
1370 case ARIZONA_OUTPUT_RATE_1:
1371 case ARIZONA_OUTPUT_VOLUME_RAMP:
1372 case ARIZONA_OUTPUT_PATH_CONFIG_1L:
1373 case ARIZONA_DAC_DIGITAL_VOLUME_1L:
1374 case ARIZONA_DAC_VOLUME_LIMIT_1L:
1375 case ARIZONA_NOISE_GATE_SELECT_1L:
1376 case ARIZONA_OUTPUT_PATH_CONFIG_1R:
1377 case ARIZONA_DAC_DIGITAL_VOLUME_1R:
1378 case ARIZONA_DAC_VOLUME_LIMIT_1R:
1379 case ARIZONA_NOISE_GATE_SELECT_1R:
1380 case ARIZONA_OUTPUT_PATH_CONFIG_2L:
1381 case ARIZONA_DAC_DIGITAL_VOLUME_2L:
1382 case ARIZONA_DAC_VOLUME_LIMIT_2L:
1383 case ARIZONA_NOISE_GATE_SELECT_2L:
1384 case ARIZONA_OUTPUT_PATH_CONFIG_2R:
1385 case ARIZONA_DAC_DIGITAL_VOLUME_2R:
1386 case ARIZONA_DAC_VOLUME_LIMIT_2R:
1387 case ARIZONA_NOISE_GATE_SELECT_2R:
1388 case ARIZONA_OUTPUT_PATH_CONFIG_3L:
1389 case ARIZONA_DAC_DIGITAL_VOLUME_3L:
1390 case ARIZONA_DAC_VOLUME_LIMIT_3L:
1391 case ARIZONA_NOISE_GATE_SELECT_3L:
1392 case ARIZONA_OUTPUT_PATH_CONFIG_3R:
1393 case ARIZONA_DAC_DIGITAL_VOLUME_3R:
1394 case ARIZONA_DAC_VOLUME_LIMIT_3R:
1395 case ARIZONA_NOISE_GATE_SELECT_3R:
1396 case ARIZONA_OUTPUT_PATH_CONFIG_4L:
1397 case ARIZONA_DAC_DIGITAL_VOLUME_4L:
1398 case ARIZONA_OUT_VOLUME_4L:
1399 case ARIZONA_NOISE_GATE_SELECT_4L:
1400 case ARIZONA_OUTPUT_PATH_CONFIG_4R:
1401 case ARIZONA_DAC_DIGITAL_VOLUME_4R:
1402 case ARIZONA_OUT_VOLUME_4R:
1403 case ARIZONA_NOISE_GATE_SELECT_4R:
1404 case ARIZONA_OUTPUT_PATH_CONFIG_5L:
1405 case ARIZONA_DAC_DIGITAL_VOLUME_5L:
1406 case ARIZONA_DAC_VOLUME_LIMIT_5L:
1407 case ARIZONA_NOISE_GATE_SELECT_5L:
1408 case ARIZONA_OUTPUT_PATH_CONFIG_5R:
1409 case ARIZONA_DAC_DIGITAL_VOLUME_5R:
1410 case ARIZONA_DAC_VOLUME_LIMIT_5R:
1411 case ARIZONA_NOISE_GATE_SELECT_5R:
1412 case ARIZONA_OUTPUT_PATH_CONFIG_6L:
1413 case ARIZONA_DAC_DIGITAL_VOLUME_6L:
1414 case ARIZONA_DAC_VOLUME_LIMIT_6L:
1415 case ARIZONA_NOISE_GATE_SELECT_6L:
1416 case ARIZONA_OUTPUT_PATH_CONFIG_6R:
1417 case ARIZONA_DAC_DIGITAL_VOLUME_6R:
1418 case ARIZONA_DAC_VOLUME_LIMIT_6R:
1419 case ARIZONA_NOISE_GATE_SELECT_6R:
1420 case ARIZONA_DAC_AEC_CONTROL_1:
1421 case ARIZONA_NOISE_GATE_CONTROL:
1422 case ARIZONA_PDM_SPK1_CTRL_1:
1423 case ARIZONA_PDM_SPK1_CTRL_2:
1424 case ARIZONA_PDM_SPK2_CTRL_1:
1425 case ARIZONA_PDM_SPK2_CTRL_2:
1426 case ARIZONA_AIF1_BCLK_CTRL:
1427 case ARIZONA_AIF1_TX_PIN_CTRL:
1428 case ARIZONA_AIF1_RX_PIN_CTRL:
1429 case ARIZONA_AIF1_RATE_CTRL:
1430 case ARIZONA_AIF1_FORMAT:
1431 case ARIZONA_AIF1_TX_BCLK_RATE:
1432 case ARIZONA_AIF1_RX_BCLK_RATE:
1433 case ARIZONA_AIF1_FRAME_CTRL_1:
1434 case ARIZONA_AIF1_FRAME_CTRL_2:
1435 case ARIZONA_AIF1_FRAME_CTRL_3:
1436 case ARIZONA_AIF1_FRAME_CTRL_4:
1437 case ARIZONA_AIF1_FRAME_CTRL_5:
1438 case ARIZONA_AIF1_FRAME_CTRL_6:
1439 case ARIZONA_AIF1_FRAME_CTRL_7:
1440 case ARIZONA_AIF1_FRAME_CTRL_8:
1441 case ARIZONA_AIF1_FRAME_CTRL_9:
1442 case ARIZONA_AIF1_FRAME_CTRL_10:
1443 case ARIZONA_AIF1_FRAME_CTRL_11:
1444 case ARIZONA_AIF1_FRAME_CTRL_12:
1445 case ARIZONA_AIF1_FRAME_CTRL_13:
1446 case ARIZONA_AIF1_FRAME_CTRL_14:
1447 case ARIZONA_AIF1_FRAME_CTRL_15:
1448 case ARIZONA_AIF1_FRAME_CTRL_16:
1449 case ARIZONA_AIF1_FRAME_CTRL_17:
1450 case ARIZONA_AIF1_FRAME_CTRL_18:
1451 case ARIZONA_AIF1_TX_ENABLES:
1452 case ARIZONA_AIF1_RX_ENABLES:
1453 case ARIZONA_AIF2_BCLK_CTRL:
1454 case ARIZONA_AIF2_TX_PIN_CTRL:
1455 case ARIZONA_AIF2_RX_PIN_CTRL:
1456 case ARIZONA_AIF2_RATE_CTRL:
1457 case ARIZONA_AIF2_FORMAT:
1458 case ARIZONA_AIF2_TX_BCLK_RATE:
1459 case ARIZONA_AIF2_RX_BCLK_RATE:
1460 case ARIZONA_AIF2_FRAME_CTRL_1:
1461 case ARIZONA_AIF2_FRAME_CTRL_2:
1462 case ARIZONA_AIF2_FRAME_CTRL_3:
1463 case ARIZONA_AIF2_FRAME_CTRL_4:
1464 case ARIZONA_AIF2_FRAME_CTRL_11:
1465 case ARIZONA_AIF2_FRAME_CTRL_12:
1466 case ARIZONA_AIF2_TX_ENABLES:
1467 case ARIZONA_AIF2_RX_ENABLES:
1468 case ARIZONA_AIF3_BCLK_CTRL:
1469 case ARIZONA_AIF3_TX_PIN_CTRL:
1470 case ARIZONA_AIF3_RX_PIN_CTRL:
1471 case ARIZONA_AIF3_RATE_CTRL:
1472 case ARIZONA_AIF3_FORMAT:
1473 case ARIZONA_AIF3_TX_BCLK_RATE:
1474 case ARIZONA_AIF3_RX_BCLK_RATE:
1475 case ARIZONA_AIF3_FRAME_CTRL_1:
1476 case ARIZONA_AIF3_FRAME_CTRL_2:
1477 case ARIZONA_AIF3_FRAME_CTRL_3:
1478 case ARIZONA_AIF3_FRAME_CTRL_4:
1479 case ARIZONA_AIF3_FRAME_CTRL_11:
1480 case ARIZONA_AIF3_FRAME_CTRL_12:
1481 case ARIZONA_AIF3_TX_ENABLES:
1482 case ARIZONA_AIF3_RX_ENABLES:
1483 case ARIZONA_SLIMBUS_FRAMER_REF_GEAR:
1484 case ARIZONA_SLIMBUS_RATES_1:
1485 case ARIZONA_SLIMBUS_RATES_2:
1486 case ARIZONA_SLIMBUS_RATES_3:
1487 case ARIZONA_SLIMBUS_RATES_4:
1488 case ARIZONA_SLIMBUS_RATES_5:
1489 case ARIZONA_SLIMBUS_RATES_6:
1490 case ARIZONA_SLIMBUS_RATES_7:
1491 case ARIZONA_SLIMBUS_RATES_8:
1492 case ARIZONA_SLIMBUS_RX_CHANNEL_ENABLE:
1493 case ARIZONA_SLIMBUS_TX_CHANNEL_ENABLE:
1494 case ARIZONA_SLIMBUS_RX_PORT_STATUS:
1495 case ARIZONA_SLIMBUS_TX_PORT_STATUS:
1496 case ARIZONA_PWM1MIX_INPUT_1_SOURCE:
1497 case ARIZONA_PWM1MIX_INPUT_1_VOLUME:
1498 case ARIZONA_PWM1MIX_INPUT_2_SOURCE:
1499 case ARIZONA_PWM1MIX_INPUT_2_VOLUME:
1500 case ARIZONA_PWM1MIX_INPUT_3_SOURCE:
1501 case ARIZONA_PWM1MIX_INPUT_3_VOLUME:
1502 case ARIZONA_PWM1MIX_INPUT_4_SOURCE:
1503 case ARIZONA_PWM1MIX_INPUT_4_VOLUME:
1504 case ARIZONA_PWM2MIX_INPUT_1_SOURCE:
1505 case ARIZONA_PWM2MIX_INPUT_1_VOLUME:
1506 case ARIZONA_PWM2MIX_INPUT_2_SOURCE:
1507 case ARIZONA_PWM2MIX_INPUT_2_VOLUME:
1508 case ARIZONA_PWM2MIX_INPUT_3_SOURCE:
1509 case ARIZONA_PWM2MIX_INPUT_3_VOLUME:
1510 case ARIZONA_PWM2MIX_INPUT_4_SOURCE:
1511 case ARIZONA_PWM2MIX_INPUT_4_VOLUME:
1512 case ARIZONA_MICMIX_INPUT_1_SOURCE:
1513 case ARIZONA_MICMIX_INPUT_1_VOLUME:
1514 case ARIZONA_MICMIX_INPUT_2_SOURCE:
1515 case ARIZONA_MICMIX_INPUT_2_VOLUME:
1516 case ARIZONA_MICMIX_INPUT_3_SOURCE:
1517 case ARIZONA_MICMIX_INPUT_3_VOLUME:
1518 case ARIZONA_MICMIX_INPUT_4_SOURCE:
1519 case ARIZONA_MICMIX_INPUT_4_VOLUME:
1520 case ARIZONA_NOISEMIX_INPUT_1_SOURCE:
1521 case ARIZONA_NOISEMIX_INPUT_1_VOLUME:
1522 case ARIZONA_NOISEMIX_INPUT_2_SOURCE:
1523 case ARIZONA_NOISEMIX_INPUT_2_VOLUME:
1524 case ARIZONA_NOISEMIX_INPUT_3_SOURCE:
1525 case ARIZONA_NOISEMIX_INPUT_3_VOLUME:
1526 case ARIZONA_NOISEMIX_INPUT_4_SOURCE:
1527 case ARIZONA_NOISEMIX_INPUT_4_VOLUME:
1528 case ARIZONA_OUT1LMIX_INPUT_1_SOURCE:
1529 case ARIZONA_OUT1LMIX_INPUT_1_VOLUME:
1530 case ARIZONA_OUT1LMIX_INPUT_2_SOURCE:
1531 case ARIZONA_OUT1LMIX_INPUT_2_VOLUME:
1532 case ARIZONA_OUT1LMIX_INPUT_3_SOURCE:
1533 case ARIZONA_OUT1LMIX_INPUT_3_VOLUME:
1534 case ARIZONA_OUT1LMIX_INPUT_4_SOURCE:
1535 case ARIZONA_OUT1LMIX_INPUT_4_VOLUME:
1536 case ARIZONA_OUT1RMIX_INPUT_1_SOURCE:
1537 case ARIZONA_OUT1RMIX_INPUT_1_VOLUME:
1538 case ARIZONA_OUT1RMIX_INPUT_2_SOURCE:
1539 case ARIZONA_OUT1RMIX_INPUT_2_VOLUME:
1540 case ARIZONA_OUT1RMIX_INPUT_3_SOURCE:
1541 case ARIZONA_OUT1RMIX_INPUT_3_VOLUME:
1542 case ARIZONA_OUT1RMIX_INPUT_4_SOURCE:
1543 case ARIZONA_OUT1RMIX_INPUT_4_VOLUME:
1544 case ARIZONA_OUT2LMIX_INPUT_1_SOURCE:
1545 case ARIZONA_OUT2LMIX_INPUT_1_VOLUME:
1546 case ARIZONA_OUT2LMIX_INPUT_2_SOURCE:
1547 case ARIZONA_OUT2LMIX_INPUT_2_VOLUME:
1548 case ARIZONA_OUT2LMIX_INPUT_3_SOURCE:
1549 case ARIZONA_OUT2LMIX_INPUT_3_VOLUME:
1550 case ARIZONA_OUT2LMIX_INPUT_4_SOURCE:
1551 case ARIZONA_OUT2LMIX_INPUT_4_VOLUME:
1552 case ARIZONA_OUT2RMIX_INPUT_1_SOURCE:
1553 case ARIZONA_OUT2RMIX_INPUT_1_VOLUME:
1554 case ARIZONA_OUT2RMIX_INPUT_2_SOURCE:
1555 case ARIZONA_OUT2RMIX_INPUT_2_VOLUME:
1556 case ARIZONA_OUT2RMIX_INPUT_3_SOURCE:
1557 case ARIZONA_OUT2RMIX_INPUT_3_VOLUME:
1558 case ARIZONA_OUT2RMIX_INPUT_4_SOURCE:
1559 case ARIZONA_OUT2RMIX_INPUT_4_VOLUME:
1560 case ARIZONA_OUT3LMIX_INPUT_1_SOURCE:
1561 case ARIZONA_OUT3LMIX_INPUT_1_VOLUME:
1562 case ARIZONA_OUT3LMIX_INPUT_2_SOURCE:
1563 case ARIZONA_OUT3LMIX_INPUT_2_VOLUME:
1564 case ARIZONA_OUT3LMIX_INPUT_3_SOURCE:
1565 case ARIZONA_OUT3LMIX_INPUT_3_VOLUME:
1566 case ARIZONA_OUT3LMIX_INPUT_4_SOURCE:
1567 case ARIZONA_OUT3LMIX_INPUT_4_VOLUME:
1568 case ARIZONA_OUT3RMIX_INPUT_1_SOURCE:
1569 case ARIZONA_OUT3RMIX_INPUT_1_VOLUME:
1570 case ARIZONA_OUT3RMIX_INPUT_2_SOURCE:
1571 case ARIZONA_OUT3RMIX_INPUT_2_VOLUME:
1572 case ARIZONA_OUT3RMIX_INPUT_3_SOURCE:
1573 case ARIZONA_OUT3RMIX_INPUT_3_VOLUME:
1574 case ARIZONA_OUT3RMIX_INPUT_4_SOURCE:
1575 case ARIZONA_OUT3RMIX_INPUT_4_VOLUME:
1576 case ARIZONA_OUT4LMIX_INPUT_1_SOURCE:
1577 case ARIZONA_OUT4LMIX_INPUT_1_VOLUME:
1578 case ARIZONA_OUT4LMIX_INPUT_2_SOURCE:
1579 case ARIZONA_OUT4LMIX_INPUT_2_VOLUME:
1580 case ARIZONA_OUT4LMIX_INPUT_3_SOURCE:
1581 case ARIZONA_OUT4LMIX_INPUT_3_VOLUME:
1582 case ARIZONA_OUT4LMIX_INPUT_4_SOURCE:
1583 case ARIZONA_OUT4LMIX_INPUT_4_VOLUME:
1584 case ARIZONA_OUT4RMIX_INPUT_1_SOURCE:
1585 case ARIZONA_OUT4RMIX_INPUT_1_VOLUME:
1586 case ARIZONA_OUT4RMIX_INPUT_2_SOURCE:
1587 case ARIZONA_OUT4RMIX_INPUT_2_VOLUME:
1588 case ARIZONA_OUT4RMIX_INPUT_3_SOURCE:
1589 case ARIZONA_OUT4RMIX_INPUT_3_VOLUME:
1590 case ARIZONA_OUT4RMIX_INPUT_4_SOURCE:
1591 case ARIZONA_OUT4RMIX_INPUT_4_VOLUME:
1592 case ARIZONA_OUT5LMIX_INPUT_1_SOURCE:
1593 case ARIZONA_OUT5LMIX_INPUT_1_VOLUME:
1594 case ARIZONA_OUT5LMIX_INPUT_2_SOURCE:
1595 case ARIZONA_OUT5LMIX_INPUT_2_VOLUME:
1596 case ARIZONA_OUT5LMIX_INPUT_3_SOURCE:
1597 case ARIZONA_OUT5LMIX_INPUT_3_VOLUME:
1598 case ARIZONA_OUT5LMIX_INPUT_4_SOURCE:
1599 case ARIZONA_OUT5LMIX_INPUT_4_VOLUME:
1600 case ARIZONA_OUT5RMIX_INPUT_1_SOURCE:
1601 case ARIZONA_OUT5RMIX_INPUT_1_VOLUME:
1602 case ARIZONA_OUT5RMIX_INPUT_2_SOURCE:
1603 case ARIZONA_OUT5RMIX_INPUT_2_VOLUME:
1604 case ARIZONA_OUT5RMIX_INPUT_3_SOURCE:
1605 case ARIZONA_OUT5RMIX_INPUT_3_VOLUME:
1606 case ARIZONA_OUT5RMIX_INPUT_4_SOURCE:
1607 case ARIZONA_OUT5RMIX_INPUT_4_VOLUME:
1608 case ARIZONA_OUT6LMIX_INPUT_1_SOURCE:
1609 case ARIZONA_OUT6LMIX_INPUT_1_VOLUME:
1610 case ARIZONA_OUT6LMIX_INPUT_2_SOURCE:
1611 case ARIZONA_OUT6LMIX_INPUT_2_VOLUME:
1612 case ARIZONA_OUT6LMIX_INPUT_3_SOURCE:
1613 case ARIZONA_OUT6LMIX_INPUT_3_VOLUME:
1614 case ARIZONA_OUT6LMIX_INPUT_4_SOURCE:
1615 case ARIZONA_OUT6LMIX_INPUT_4_VOLUME:
1616 case ARIZONA_OUT6RMIX_INPUT_1_SOURCE:
1617 case ARIZONA_OUT6RMIX_INPUT_1_VOLUME:
1618 case ARIZONA_OUT6RMIX_INPUT_2_SOURCE:
1619 case ARIZONA_OUT6RMIX_INPUT_2_VOLUME:
1620 case ARIZONA_OUT6RMIX_INPUT_3_SOURCE:
1621 case ARIZONA_OUT6RMIX_INPUT_3_VOLUME:
1622 case ARIZONA_OUT6RMIX_INPUT_4_SOURCE:
1623 case ARIZONA_OUT6RMIX_INPUT_4_VOLUME:
1624 case ARIZONA_AIF1TX1MIX_INPUT_1_SOURCE:
1625 case ARIZONA_AIF1TX1MIX_INPUT_1_VOLUME:
1626 case ARIZONA_AIF1TX1MIX_INPUT_2_SOURCE:
1627 case ARIZONA_AIF1TX1MIX_INPUT_2_VOLUME:
1628 case ARIZONA_AIF1TX1MIX_INPUT_3_SOURCE:
1629 case ARIZONA_AIF1TX1MIX_INPUT_3_VOLUME:
1630 case ARIZONA_AIF1TX1MIX_INPUT_4_SOURCE:
1631 case ARIZONA_AIF1TX1MIX_INPUT_4_VOLUME:
1632 case ARIZONA_AIF1TX2MIX_INPUT_1_SOURCE:
1633 case ARIZONA_AIF1TX2MIX_INPUT_1_VOLUME:
1634 case ARIZONA_AIF1TX2MIX_INPUT_2_SOURCE:
1635 case ARIZONA_AIF1TX2MIX_INPUT_2_VOLUME:
1636 case ARIZONA_AIF1TX2MIX_INPUT_3_SOURCE:
1637 case ARIZONA_AIF1TX2MIX_INPUT_3_VOLUME:
1638 case ARIZONA_AIF1TX2MIX_INPUT_4_SOURCE:
1639 case ARIZONA_AIF1TX2MIX_INPUT_4_VOLUME:
1640 case ARIZONA_AIF1TX3MIX_INPUT_1_SOURCE:
1641 case ARIZONA_AIF1TX3MIX_INPUT_1_VOLUME:
1642 case ARIZONA_AIF1TX3MIX_INPUT_2_SOURCE:
1643 case ARIZONA_AIF1TX3MIX_INPUT_2_VOLUME:
1644 case ARIZONA_AIF1TX3MIX_INPUT_3_SOURCE:
1645 case ARIZONA_AIF1TX3MIX_INPUT_3_VOLUME:
1646 case ARIZONA_AIF1TX3MIX_INPUT_4_SOURCE:
1647 case ARIZONA_AIF1TX3MIX_INPUT_4_VOLUME:
1648 case ARIZONA_AIF1TX4MIX_INPUT_1_SOURCE:
1649 case ARIZONA_AIF1TX4MIX_INPUT_1_VOLUME:
1650 case ARIZONA_AIF1TX4MIX_INPUT_2_SOURCE:
1651 case ARIZONA_AIF1TX4MIX_INPUT_2_VOLUME:
1652 case ARIZONA_AIF1TX4MIX_INPUT_3_SOURCE:
1653 case ARIZONA_AIF1TX4MIX_INPUT_3_VOLUME:
1654 case ARIZONA_AIF1TX4MIX_INPUT_4_SOURCE:
1655 case ARIZONA_AIF1TX4MIX_INPUT_4_VOLUME:
1656 case ARIZONA_AIF1TX5MIX_INPUT_1_SOURCE:
1657 case ARIZONA_AIF1TX5MIX_INPUT_1_VOLUME:
1658 case ARIZONA_AIF1TX5MIX_INPUT_2_SOURCE:
1659 case ARIZONA_AIF1TX5MIX_INPUT_2_VOLUME:
1660 case ARIZONA_AIF1TX5MIX_INPUT_3_SOURCE:
1661 case ARIZONA_AIF1TX5MIX_INPUT_3_VOLUME:
1662 case ARIZONA_AIF1TX5MIX_INPUT_4_SOURCE:
1663 case ARIZONA_AIF1TX5MIX_INPUT_4_VOLUME:
1664 case ARIZONA_AIF1TX6MIX_INPUT_1_SOURCE:
1665 case ARIZONA_AIF1TX6MIX_INPUT_1_VOLUME:
1666 case ARIZONA_AIF1TX6MIX_INPUT_2_SOURCE:
1667 case ARIZONA_AIF1TX6MIX_INPUT_2_VOLUME:
1668 case ARIZONA_AIF1TX6MIX_INPUT_3_SOURCE:
1669 case ARIZONA_AIF1TX6MIX_INPUT_3_VOLUME:
1670 case ARIZONA_AIF1TX6MIX_INPUT_4_SOURCE:
1671 case ARIZONA_AIF1TX6MIX_INPUT_4_VOLUME:
1672 case ARIZONA_AIF1TX7MIX_INPUT_1_SOURCE:
1673 case ARIZONA_AIF1TX7MIX_INPUT_1_VOLUME:
1674 case ARIZONA_AIF1TX7MIX_INPUT_2_SOURCE:
1675 case ARIZONA_AIF1TX7MIX_INPUT_2_VOLUME:
1676 case ARIZONA_AIF1TX7MIX_INPUT_3_SOURCE:
1677 case ARIZONA_AIF1TX7MIX_INPUT_3_VOLUME:
1678 case ARIZONA_AIF1TX7MIX_INPUT_4_SOURCE:
1679 case ARIZONA_AIF1TX7MIX_INPUT_4_VOLUME:
1680 case ARIZONA_AIF1TX8MIX_INPUT_1_SOURCE:
1681 case ARIZONA_AIF1TX8MIX_INPUT_1_VOLUME:
1682 case ARIZONA_AIF1TX8MIX_INPUT_2_SOURCE:
1683 case ARIZONA_AIF1TX8MIX_INPUT_2_VOLUME:
1684 case ARIZONA_AIF1TX8MIX_INPUT_3_SOURCE:
1685 case ARIZONA_AIF1TX8MIX_INPUT_3_VOLUME:
1686 case ARIZONA_AIF1TX8MIX_INPUT_4_SOURCE:
1687 case ARIZONA_AIF1TX8MIX_INPUT_4_VOLUME:
1688 case ARIZONA_AIF2TX1MIX_INPUT_1_SOURCE:
1689 case ARIZONA_AIF2TX1MIX_INPUT_1_VOLUME:
1690 case ARIZONA_AIF2TX1MIX_INPUT_2_SOURCE:
1691 case ARIZONA_AIF2TX1MIX_INPUT_2_VOLUME:
1692 case ARIZONA_AIF2TX1MIX_INPUT_3_SOURCE:
1693 case ARIZONA_AIF2TX1MIX_INPUT_3_VOLUME:
1694 case ARIZONA_AIF2TX1MIX_INPUT_4_SOURCE:
1695 case ARIZONA_AIF2TX1MIX_INPUT_4_VOLUME:
1696 case ARIZONA_AIF2TX2MIX_INPUT_1_SOURCE:
1697 case ARIZONA_AIF2TX2MIX_INPUT_1_VOLUME:
1698 case ARIZONA_AIF2TX2MIX_INPUT_2_SOURCE:
1699 case ARIZONA_AIF2TX2MIX_INPUT_2_VOLUME:
1700 case ARIZONA_AIF2TX2MIX_INPUT_3_SOURCE:
1701 case ARIZONA_AIF2TX2MIX_INPUT_3_VOLUME:
1702 case ARIZONA_AIF2TX2MIX_INPUT_4_SOURCE:
1703 case ARIZONA_AIF2TX2MIX_INPUT_4_VOLUME:
1704 case ARIZONA_AIF3TX1MIX_INPUT_1_SOURCE:
1705 case ARIZONA_AIF3TX1MIX_INPUT_1_VOLUME:
1706 case ARIZONA_AIF3TX1MIX_INPUT_2_SOURCE:
1707 case ARIZONA_AIF3TX1MIX_INPUT_2_VOLUME:
1708 case ARIZONA_AIF3TX1MIX_INPUT_3_SOURCE:
1709 case ARIZONA_AIF3TX1MIX_INPUT_3_VOLUME:
1710 case ARIZONA_AIF3TX1MIX_INPUT_4_SOURCE:
1711 case ARIZONA_AIF3TX1MIX_INPUT_4_VOLUME:
1712 case ARIZONA_AIF3TX2MIX_INPUT_1_SOURCE:
1713 case ARIZONA_AIF3TX2MIX_INPUT_1_VOLUME:
1714 case ARIZONA_AIF3TX2MIX_INPUT_2_SOURCE:
1715 case ARIZONA_AIF3TX2MIX_INPUT_2_VOLUME:
1716 case ARIZONA_AIF3TX2MIX_INPUT_3_SOURCE:
1717 case ARIZONA_AIF3TX2MIX_INPUT_3_VOLUME:
1718 case ARIZONA_AIF3TX2MIX_INPUT_4_SOURCE:
1719 case ARIZONA_AIF3TX2MIX_INPUT_4_VOLUME:
1720 case ARIZONA_SLIMTX1MIX_INPUT_1_SOURCE:
1721 case ARIZONA_SLIMTX1MIX_INPUT_1_VOLUME:
1722 case ARIZONA_SLIMTX1MIX_INPUT_2_SOURCE:
1723 case ARIZONA_SLIMTX1MIX_INPUT_2_VOLUME:
1724 case ARIZONA_SLIMTX1MIX_INPUT_3_SOURCE:
1725 case ARIZONA_SLIMTX1MIX_INPUT_3_VOLUME:
1726 case ARIZONA_SLIMTX1MIX_INPUT_4_SOURCE:
1727 case ARIZONA_SLIMTX1MIX_INPUT_4_VOLUME:
1728 case ARIZONA_SLIMTX2MIX_INPUT_1_SOURCE:
1729 case ARIZONA_SLIMTX2MIX_INPUT_1_VOLUME:
1730 case ARIZONA_SLIMTX2MIX_INPUT_2_SOURCE:
1731 case ARIZONA_SLIMTX2MIX_INPUT_2_VOLUME:
1732 case ARIZONA_SLIMTX2MIX_INPUT_3_SOURCE:
1733 case ARIZONA_SLIMTX2MIX_INPUT_3_VOLUME:
1734 case ARIZONA_SLIMTX2MIX_INPUT_4_SOURCE:
1735 case ARIZONA_SLIMTX2MIX_INPUT_4_VOLUME:
1736 case ARIZONA_SLIMTX3MIX_INPUT_1_SOURCE:
1737 case ARIZONA_SLIMTX3MIX_INPUT_1_VOLUME:
1738 case ARIZONA_SLIMTX3MIX_INPUT_2_SOURCE:
1739 case ARIZONA_SLIMTX3MIX_INPUT_2_VOLUME:
1740 case ARIZONA_SLIMTX3MIX_INPUT_3_SOURCE:
1741 case ARIZONA_SLIMTX3MIX_INPUT_3_VOLUME:
1742 case ARIZONA_SLIMTX3MIX_INPUT_4_SOURCE:
1743 case ARIZONA_SLIMTX3MIX_INPUT_4_VOLUME:
1744 case ARIZONA_SLIMTX4MIX_INPUT_1_SOURCE:
1745 case ARIZONA_SLIMTX4MIX_INPUT_1_VOLUME:
1746 case ARIZONA_SLIMTX4MIX_INPUT_2_SOURCE:
1747 case ARIZONA_SLIMTX4MIX_INPUT_2_VOLUME:
1748 case ARIZONA_SLIMTX4MIX_INPUT_3_SOURCE:
1749 case ARIZONA_SLIMTX4MIX_INPUT_3_VOLUME:
1750 case ARIZONA_SLIMTX4MIX_INPUT_4_SOURCE:
1751 case ARIZONA_SLIMTX4MIX_INPUT_4_VOLUME:
1752 case ARIZONA_SLIMTX5MIX_INPUT_1_SOURCE:
1753 case ARIZONA_SLIMTX5MIX_INPUT_1_VOLUME:
1754 case ARIZONA_SLIMTX5MIX_INPUT_2_SOURCE:
1755 case ARIZONA_SLIMTX5MIX_INPUT_2_VOLUME:
1756 case ARIZONA_SLIMTX5MIX_INPUT_3_SOURCE:
1757 case ARIZONA_SLIMTX5MIX_INPUT_3_VOLUME:
1758 case ARIZONA_SLIMTX5MIX_INPUT_4_SOURCE:
1759 case ARIZONA_SLIMTX5MIX_INPUT_4_VOLUME:
1760 case ARIZONA_SLIMTX6MIX_INPUT_1_SOURCE:
1761 case ARIZONA_SLIMTX6MIX_INPUT_1_VOLUME:
1762 case ARIZONA_SLIMTX6MIX_INPUT_2_SOURCE:
1763 case ARIZONA_SLIMTX6MIX_INPUT_2_VOLUME:
1764 case ARIZONA_SLIMTX6MIX_INPUT_3_SOURCE:
1765 case ARIZONA_SLIMTX6MIX_INPUT_3_VOLUME:
1766 case ARIZONA_SLIMTX6MIX_INPUT_4_SOURCE:
1767 case ARIZONA_SLIMTX6MIX_INPUT_4_VOLUME:
1768 case ARIZONA_SLIMTX7MIX_INPUT_1_SOURCE:
1769 case ARIZONA_SLIMTX7MIX_INPUT_1_VOLUME:
1770 case ARIZONA_SLIMTX7MIX_INPUT_2_SOURCE:
1771 case ARIZONA_SLIMTX7MIX_INPUT_2_VOLUME:
1772 case ARIZONA_SLIMTX7MIX_INPUT_3_SOURCE:
1773 case ARIZONA_SLIMTX7MIX_INPUT_3_VOLUME:
1774 case ARIZONA_SLIMTX7MIX_INPUT_4_SOURCE:
1775 case ARIZONA_SLIMTX7MIX_INPUT_4_VOLUME:
1776 case ARIZONA_SLIMTX8MIX_INPUT_1_SOURCE:
1777 case ARIZONA_SLIMTX8MIX_INPUT_1_VOLUME:
1778 case ARIZONA_SLIMTX8MIX_INPUT_2_SOURCE:
1779 case ARIZONA_SLIMTX8MIX_INPUT_2_VOLUME:
1780 case ARIZONA_SLIMTX8MIX_INPUT_3_SOURCE:
1781 case ARIZONA_SLIMTX8MIX_INPUT_3_VOLUME:
1782 case ARIZONA_SLIMTX8MIX_INPUT_4_SOURCE:
1783 case ARIZONA_SLIMTX8MIX_INPUT_4_VOLUME:
1784 case ARIZONA_EQ1MIX_INPUT_1_SOURCE:
1785 case ARIZONA_EQ1MIX_INPUT_1_VOLUME:
1786 case ARIZONA_EQ1MIX_INPUT_2_SOURCE:
1787 case ARIZONA_EQ1MIX_INPUT_2_VOLUME:
1788 case ARIZONA_EQ1MIX_INPUT_3_SOURCE:
1789 case ARIZONA_EQ1MIX_INPUT_3_VOLUME:
1790 case ARIZONA_EQ1MIX_INPUT_4_SOURCE:
1791 case ARIZONA_EQ1MIX_INPUT_4_VOLUME:
1792 case ARIZONA_EQ2MIX_INPUT_1_SOURCE:
1793 case ARIZONA_EQ2MIX_INPUT_1_VOLUME:
1794 case ARIZONA_EQ2MIX_INPUT_2_SOURCE:
1795 case ARIZONA_EQ2MIX_INPUT_2_VOLUME:
1796 case ARIZONA_EQ2MIX_INPUT_3_SOURCE:
1797 case ARIZONA_EQ2MIX_INPUT_3_VOLUME:
1798 case ARIZONA_EQ2MIX_INPUT_4_SOURCE:
1799 case ARIZONA_EQ2MIX_INPUT_4_VOLUME:
1800 case ARIZONA_EQ3MIX_INPUT_1_SOURCE:
1801 case ARIZONA_EQ3MIX_INPUT_1_VOLUME:
1802 case ARIZONA_EQ3MIX_INPUT_2_SOURCE:
1803 case ARIZONA_EQ3MIX_INPUT_2_VOLUME:
1804 case ARIZONA_EQ3MIX_INPUT_3_SOURCE:
1805 case ARIZONA_EQ3MIX_INPUT_3_VOLUME:
1806 case ARIZONA_EQ3MIX_INPUT_4_SOURCE:
1807 case ARIZONA_EQ3MIX_INPUT_4_VOLUME:
1808 case ARIZONA_EQ4MIX_INPUT_1_SOURCE:
1809 case ARIZONA_EQ4MIX_INPUT_1_VOLUME:
1810 case ARIZONA_EQ4MIX_INPUT_2_SOURCE:
1811 case ARIZONA_EQ4MIX_INPUT_2_VOLUME:
1812 case ARIZONA_EQ4MIX_INPUT_3_SOURCE:
1813 case ARIZONA_EQ4MIX_INPUT_3_VOLUME:
1814 case ARIZONA_EQ4MIX_INPUT_4_SOURCE:
1815 case ARIZONA_EQ4MIX_INPUT_4_VOLUME:
1816 case ARIZONA_DRC1LMIX_INPUT_1_SOURCE:
1817 case ARIZONA_DRC1LMIX_INPUT_1_VOLUME:
1818 case ARIZONA_DRC1LMIX_INPUT_2_SOURCE:
1819 case ARIZONA_DRC1LMIX_INPUT_2_VOLUME:
1820 case ARIZONA_DRC1LMIX_INPUT_3_SOURCE:
1821 case ARIZONA_DRC1LMIX_INPUT_3_VOLUME:
1822 case ARIZONA_DRC1LMIX_INPUT_4_SOURCE:
1823 case ARIZONA_DRC1LMIX_INPUT_4_VOLUME:
1824 case ARIZONA_DRC1RMIX_INPUT_1_SOURCE:
1825 case ARIZONA_DRC1RMIX_INPUT_1_VOLUME:
1826 case ARIZONA_DRC1RMIX_INPUT_2_SOURCE:
1827 case ARIZONA_DRC1RMIX_INPUT_2_VOLUME:
1828 case ARIZONA_DRC1RMIX_INPUT_3_SOURCE:
1829 case ARIZONA_DRC1RMIX_INPUT_3_VOLUME:
1830 case ARIZONA_DRC1RMIX_INPUT_4_SOURCE:
1831 case ARIZONA_DRC1RMIX_INPUT_4_VOLUME:
1832 case ARIZONA_DRC2LMIX_INPUT_1_SOURCE:
1833 case ARIZONA_DRC2LMIX_INPUT_1_VOLUME:
1834 case ARIZONA_DRC2LMIX_INPUT_2_SOURCE:
1835 case ARIZONA_DRC2LMIX_INPUT_2_VOLUME:
1836 case ARIZONA_DRC2LMIX_INPUT_3_SOURCE:
1837 case ARIZONA_DRC2LMIX_INPUT_3_VOLUME:
1838 case ARIZONA_DRC2LMIX_INPUT_4_SOURCE:
1839 case ARIZONA_DRC2LMIX_INPUT_4_VOLUME:
1840 case ARIZONA_DRC2RMIX_INPUT_1_SOURCE:
1841 case ARIZONA_DRC2RMIX_INPUT_1_VOLUME:
1842 case ARIZONA_DRC2RMIX_INPUT_2_SOURCE:
1843 case ARIZONA_DRC2RMIX_INPUT_2_VOLUME:
1844 case ARIZONA_DRC2RMIX_INPUT_3_SOURCE:
1845 case ARIZONA_DRC2RMIX_INPUT_3_VOLUME:
1846 case ARIZONA_DRC2RMIX_INPUT_4_SOURCE:
1847 case ARIZONA_DRC2RMIX_INPUT_4_VOLUME:
1848 case ARIZONA_HPLP1MIX_INPUT_1_SOURCE:
1849 case ARIZONA_HPLP1MIX_INPUT_1_VOLUME:
1850 case ARIZONA_HPLP1MIX_INPUT_2_SOURCE:
1851 case ARIZONA_HPLP1MIX_INPUT_2_VOLUME:
1852 case ARIZONA_HPLP1MIX_INPUT_3_SOURCE:
1853 case ARIZONA_HPLP1MIX_INPUT_3_VOLUME:
1854 case ARIZONA_HPLP1MIX_INPUT_4_SOURCE:
1855 case ARIZONA_HPLP1MIX_INPUT_4_VOLUME:
1856 case ARIZONA_HPLP2MIX_INPUT_1_SOURCE:
1857 case ARIZONA_HPLP2MIX_INPUT_1_VOLUME:
1858 case ARIZONA_HPLP2MIX_INPUT_2_SOURCE:
1859 case ARIZONA_HPLP2MIX_INPUT_2_VOLUME:
1860 case ARIZONA_HPLP2MIX_INPUT_3_SOURCE:
1861 case ARIZONA_HPLP2MIX_INPUT_3_VOLUME:
1862 case ARIZONA_HPLP2MIX_INPUT_4_SOURCE:
1863 case ARIZONA_HPLP2MIX_INPUT_4_VOLUME:
1864 case ARIZONA_HPLP3MIX_INPUT_1_SOURCE:
1865 case ARIZONA_HPLP3MIX_INPUT_1_VOLUME:
1866 case ARIZONA_HPLP3MIX_INPUT_2_SOURCE:
1867 case ARIZONA_HPLP3MIX_INPUT_2_VOLUME:
1868 case ARIZONA_HPLP3MIX_INPUT_3_SOURCE:
1869 case ARIZONA_HPLP3MIX_INPUT_3_VOLUME:
1870 case ARIZONA_HPLP3MIX_INPUT_4_SOURCE:
1871 case ARIZONA_HPLP3MIX_INPUT_4_VOLUME:
1872 case ARIZONA_HPLP4MIX_INPUT_1_SOURCE:
1873 case ARIZONA_HPLP4MIX_INPUT_1_VOLUME:
1874 case ARIZONA_HPLP4MIX_INPUT_2_SOURCE:
1875 case ARIZONA_HPLP4MIX_INPUT_2_VOLUME:
1876 case ARIZONA_HPLP4MIX_INPUT_3_SOURCE:
1877 case ARIZONA_HPLP4MIX_INPUT_3_VOLUME:
1878 case ARIZONA_HPLP4MIX_INPUT_4_SOURCE:
1879 case ARIZONA_HPLP4MIX_INPUT_4_VOLUME:
1880 case ARIZONA_DSP1LMIX_INPUT_1_SOURCE:
1881 case ARIZONA_DSP1LMIX_INPUT_1_VOLUME:
1882 case ARIZONA_DSP1LMIX_INPUT_2_SOURCE:
1883 case ARIZONA_DSP1LMIX_INPUT_2_VOLUME:
1884 case ARIZONA_DSP1LMIX_INPUT_3_SOURCE:
1885 case ARIZONA_DSP1LMIX_INPUT_3_VOLUME:
1886 case ARIZONA_DSP1LMIX_INPUT_4_SOURCE:
1887 case ARIZONA_DSP1LMIX_INPUT_4_VOLUME:
1888 case ARIZONA_DSP1RMIX_INPUT_1_SOURCE:
1889 case ARIZONA_DSP1RMIX_INPUT_1_VOLUME:
1890 case ARIZONA_DSP1RMIX_INPUT_2_SOURCE:
1891 case ARIZONA_DSP1RMIX_INPUT_2_VOLUME:
1892 case ARIZONA_DSP1RMIX_INPUT_3_SOURCE:
1893 case ARIZONA_DSP1RMIX_INPUT_3_VOLUME:
1894 case ARIZONA_DSP1RMIX_INPUT_4_SOURCE:
1895 case ARIZONA_DSP1RMIX_INPUT_4_VOLUME:
1896 case ARIZONA_DSP1AUX1MIX_INPUT_1_SOURCE:
1897 case ARIZONA_DSP1AUX2MIX_INPUT_1_SOURCE:
1898 case ARIZONA_DSP1AUX3MIX_INPUT_1_SOURCE:
1899 case ARIZONA_DSP1AUX4MIX_INPUT_1_SOURCE:
1900 case ARIZONA_DSP1AUX5MIX_INPUT_1_SOURCE:
1901 case ARIZONA_DSP1AUX6MIX_INPUT_1_SOURCE:
1902 case ARIZONA_DSP2LMIX_INPUT_1_SOURCE:
1903 case ARIZONA_DSP2LMIX_INPUT_1_VOLUME:
1904 case ARIZONA_DSP2LMIX_INPUT_2_SOURCE:
1905 case ARIZONA_DSP2LMIX_INPUT_2_VOLUME:
1906 case ARIZONA_DSP2LMIX_INPUT_3_SOURCE:
1907 case ARIZONA_DSP2LMIX_INPUT_3_VOLUME:
1908 case ARIZONA_DSP2LMIX_INPUT_4_SOURCE:
1909 case ARIZONA_DSP2LMIX_INPUT_4_VOLUME:
1910 case ARIZONA_DSP2RMIX_INPUT_1_SOURCE:
1911 case ARIZONA_DSP2RMIX_INPUT_1_VOLUME:
1912 case ARIZONA_DSP2RMIX_INPUT_2_SOURCE:
1913 case ARIZONA_DSP2RMIX_INPUT_2_VOLUME:
1914 case ARIZONA_DSP2RMIX_INPUT_3_SOURCE:
1915 case ARIZONA_DSP2RMIX_INPUT_3_VOLUME:
1916 case ARIZONA_DSP2RMIX_INPUT_4_SOURCE:
1917 case ARIZONA_DSP2RMIX_INPUT_4_VOLUME:
1918 case ARIZONA_DSP2AUX1MIX_INPUT_1_SOURCE:
1919 case ARIZONA_DSP2AUX2MIX_INPUT_1_SOURCE:
1920 case ARIZONA_DSP2AUX3MIX_INPUT_1_SOURCE:
1921 case ARIZONA_DSP2AUX4MIX_INPUT_1_SOURCE:
1922 case ARIZONA_DSP2AUX5MIX_INPUT_1_SOURCE:
1923 case ARIZONA_DSP2AUX6MIX_INPUT_1_SOURCE:
1924 case ARIZONA_DSP3LMIX_INPUT_1_SOURCE:
1925 case ARIZONA_DSP3LMIX_INPUT_1_VOLUME:
1926 case ARIZONA_DSP3LMIX_INPUT_2_SOURCE:
1927 case ARIZONA_DSP3LMIX_INPUT_2_VOLUME:
1928 case ARIZONA_DSP3LMIX_INPUT_3_SOURCE:
1929 case ARIZONA_DSP3LMIX_INPUT_3_VOLUME:
1930 case ARIZONA_DSP3LMIX_INPUT_4_SOURCE:
1931 case ARIZONA_DSP3LMIX_INPUT_4_VOLUME:
1932 case ARIZONA_DSP3RMIX_INPUT_1_SOURCE:
1933 case ARIZONA_DSP3RMIX_INPUT_1_VOLUME:
1934 case ARIZONA_DSP3RMIX_INPUT_2_SOURCE:
1935 case ARIZONA_DSP3RMIX_INPUT_2_VOLUME:
1936 case ARIZONA_DSP3RMIX_INPUT_3_SOURCE:
1937 case ARIZONA_DSP3RMIX_INPUT_3_VOLUME:
1938 case ARIZONA_DSP3RMIX_INPUT_4_SOURCE:
1939 case ARIZONA_DSP3RMIX_INPUT_4_VOLUME:
1940 case ARIZONA_DSP3AUX1MIX_INPUT_1_SOURCE:
1941 case ARIZONA_DSP3AUX2MIX_INPUT_1_SOURCE:
1942 case ARIZONA_DSP3AUX3MIX_INPUT_1_SOURCE:
1943 case ARIZONA_DSP3AUX4MIX_INPUT_1_SOURCE:
1944 case ARIZONA_DSP3AUX5MIX_INPUT_1_SOURCE:
1945 case ARIZONA_DSP3AUX6MIX_INPUT_1_SOURCE:
1946 case ARIZONA_DSP4LMIX_INPUT_1_SOURCE:
1947 case ARIZONA_DSP4LMIX_INPUT_1_VOLUME:
1948 case ARIZONA_DSP4LMIX_INPUT_2_SOURCE:
1949 case ARIZONA_DSP4LMIX_INPUT_2_VOLUME:
1950 case ARIZONA_DSP4LMIX_INPUT_3_SOURCE:
1951 case ARIZONA_DSP4LMIX_INPUT_3_VOLUME:
1952 case ARIZONA_DSP4LMIX_INPUT_4_SOURCE:
1953 case ARIZONA_DSP4LMIX_INPUT_4_VOLUME:
1954 case ARIZONA_DSP4RMIX_INPUT_1_SOURCE:
1955 case ARIZONA_DSP4RMIX_INPUT_1_VOLUME:
1956 case ARIZONA_DSP4RMIX_INPUT_2_SOURCE:
1957 case ARIZONA_DSP4RMIX_INPUT_2_VOLUME:
1958 case ARIZONA_DSP4RMIX_INPUT_3_SOURCE:
1959 case ARIZONA_DSP4RMIX_INPUT_3_VOLUME:
1960 case ARIZONA_DSP4RMIX_INPUT_4_SOURCE:
1961 case ARIZONA_DSP4RMIX_INPUT_4_VOLUME:
1962 case ARIZONA_DSP4AUX1MIX_INPUT_1_SOURCE:
1963 case ARIZONA_DSP4AUX2MIX_INPUT_1_SOURCE:
1964 case ARIZONA_DSP4AUX3MIX_INPUT_1_SOURCE:
1965 case ARIZONA_DSP4AUX4MIX_INPUT_1_SOURCE:
1966 case ARIZONA_DSP4AUX5MIX_INPUT_1_SOURCE:
1967 case ARIZONA_DSP4AUX6MIX_INPUT_1_SOURCE:
1968 case ARIZONA_ASRC1LMIX_INPUT_1_SOURCE:
1969 case ARIZONA_ASRC1RMIX_INPUT_1_SOURCE:
1970 case ARIZONA_ASRC2LMIX_INPUT_1_SOURCE:
1971 case ARIZONA_ASRC2RMIX_INPUT_1_SOURCE:
1972 case ARIZONA_ISRC1DEC1MIX_INPUT_1_SOURCE:
1973 case ARIZONA_ISRC1DEC2MIX_INPUT_1_SOURCE:
1974 case ARIZONA_ISRC1DEC3MIX_INPUT_1_SOURCE:
1975 case ARIZONA_ISRC1DEC4MIX_INPUT_1_SOURCE:
1976 case ARIZONA_ISRC1INT1MIX_INPUT_1_SOURCE:
1977 case ARIZONA_ISRC1INT2MIX_INPUT_1_SOURCE:
1978 case ARIZONA_ISRC1INT3MIX_INPUT_1_SOURCE:
1979 case ARIZONA_ISRC1INT4MIX_INPUT_1_SOURCE:
1980 case ARIZONA_ISRC2DEC1MIX_INPUT_1_SOURCE:
1981 case ARIZONA_ISRC2DEC2MIX_INPUT_1_SOURCE:
1982 case ARIZONA_ISRC2DEC3MIX_INPUT_1_SOURCE:
1983 case ARIZONA_ISRC2DEC4MIX_INPUT_1_SOURCE:
1984 case ARIZONA_ISRC2INT1MIX_INPUT_1_SOURCE:
1985 case ARIZONA_ISRC2INT2MIX_INPUT_1_SOURCE:
1986 case ARIZONA_ISRC2INT3MIX_INPUT_1_SOURCE:
1987 case ARIZONA_ISRC2INT4MIX_INPUT_1_SOURCE:
1988 case ARIZONA_ISRC3DEC1MIX_INPUT_1_SOURCE:
1989 case ARIZONA_ISRC3DEC2MIX_INPUT_1_SOURCE:
1990 case ARIZONA_ISRC3DEC3MIX_INPUT_1_SOURCE:
1991 case ARIZONA_ISRC3DEC4MIX_INPUT_1_SOURCE:
1992 case ARIZONA_ISRC3INT1MIX_INPUT_1_SOURCE:
1993 case ARIZONA_ISRC3INT2MIX_INPUT_1_SOURCE:
1994 case ARIZONA_ISRC3INT3MIX_INPUT_1_SOURCE:
1995 case ARIZONA_ISRC3INT4MIX_INPUT_1_SOURCE:
1996 case ARIZONA_GPIO1_CTRL:
1997 case ARIZONA_GPIO2_CTRL:
1998 case ARIZONA_GPIO3_CTRL:
1999 case ARIZONA_GPIO4_CTRL:
2000 case ARIZONA_GPIO5_CTRL:
2001 case ARIZONA_IRQ_CTRL_1:
2002 case ARIZONA_GPIO_DEBOUNCE_CONFIG:
2003 case ARIZONA_MISC_PAD_CTRL_1:
2004 case ARIZONA_MISC_PAD_CTRL_2:
2005 case ARIZONA_MISC_PAD_CTRL_3:
2006 case ARIZONA_MISC_PAD_CTRL_4:
2007 case ARIZONA_MISC_PAD_CTRL_5:
2008 case ARIZONA_MISC_PAD_CTRL_6:
2009 case ARIZONA_MISC_PAD_CTRL_7:
2010 case ARIZONA_MISC_PAD_CTRL_8:
2011 case ARIZONA_MISC_PAD_CTRL_9:
2012 case ARIZONA_MISC_PAD_CTRL_10:
2013 case ARIZONA_MISC_PAD_CTRL_11:
2014 case ARIZONA_MISC_PAD_CTRL_12:
2015 case ARIZONA_MISC_PAD_CTRL_13:
2016 case ARIZONA_MISC_PAD_CTRL_14:
2017 case ARIZONA_MISC_PAD_CTRL_15:
2018 case ARIZONA_MISC_PAD_CTRL_16:
2019 case ARIZONA_MISC_PAD_CTRL_17:
2020 case ARIZONA_MISC_PAD_CTRL_18:
2021 case ARIZONA_INTERRUPT_STATUS_1:
2022 case ARIZONA_INTERRUPT_STATUS_2:
2023 case ARIZONA_INTERRUPT_STATUS_3:
2024 case ARIZONA_INTERRUPT_STATUS_4:
2025 case ARIZONA_INTERRUPT_STATUS_5:
2026 case ARIZONA_INTERRUPT_STATUS_1_MASK:
2027 case ARIZONA_INTERRUPT_STATUS_2_MASK:
2028 case ARIZONA_INTERRUPT_STATUS_3_MASK:
2029 case ARIZONA_INTERRUPT_STATUS_4_MASK:
2030 case ARIZONA_INTERRUPT_STATUS_5_MASK:
2031 case ARIZONA_INTERRUPT_CONTROL:
2032 case ARIZONA_IRQ2_STATUS_1:
2033 case ARIZONA_IRQ2_STATUS_2:
2034 case ARIZONA_IRQ2_STATUS_3:
2035 case ARIZONA_IRQ2_STATUS_4:
2036 case ARIZONA_IRQ2_STATUS_5:
2037 case ARIZONA_IRQ2_STATUS_1_MASK:
2038 case ARIZONA_IRQ2_STATUS_2_MASK:
2039 case ARIZONA_IRQ2_STATUS_3_MASK:
2040 case ARIZONA_IRQ2_STATUS_4_MASK:
2041 case ARIZONA_IRQ2_STATUS_5_MASK:
2042 case ARIZONA_IRQ2_CONTROL:
2043 case ARIZONA_INTERRUPT_RAW_STATUS_2:
2044 case ARIZONA_INTERRUPT_RAW_STATUS_3:
2045 case ARIZONA_INTERRUPT_RAW_STATUS_4:
2046 case ARIZONA_INTERRUPT_RAW_STATUS_5:
2047 case ARIZONA_INTERRUPT_RAW_STATUS_6:
2048 case ARIZONA_INTERRUPT_RAW_STATUS_7:
2049 case ARIZONA_INTERRUPT_RAW_STATUS_8:
2050 case ARIZONA_IRQ_PIN_STATUS:
2051 case ARIZONA_AOD_WKUP_AND_TRIG:
2052 case ARIZONA_AOD_IRQ1:
2053 case ARIZONA_AOD_IRQ2:
2054 case ARIZONA_AOD_IRQ_MASK_IRQ1:
2055 case ARIZONA_AOD_IRQ_MASK_IRQ2:
2056 case ARIZONA_AOD_IRQ_RAW_STATUS:
2057 case ARIZONA_JACK_DETECT_DEBOUNCE:
2058 case ARIZONA_FX_CTRL1:
2059 case ARIZONA_FX_CTRL2:
2060 case ARIZONA_EQ1_1:
2061 case ARIZONA_EQ1_2:
2062 case ARIZONA_EQ1_3:
2063 case ARIZONA_EQ1_4:
2064 case ARIZONA_EQ1_5:
2065 case ARIZONA_EQ1_6:
2066 case ARIZONA_EQ1_7:
2067 case ARIZONA_EQ1_8:
2068 case ARIZONA_EQ1_9:
2069 case ARIZONA_EQ1_10:
2070 case ARIZONA_EQ1_11:
2071 case ARIZONA_EQ1_12:
2072 case ARIZONA_EQ1_13:
2073 case ARIZONA_EQ1_14:
2074 case ARIZONA_EQ1_15:
2075 case ARIZONA_EQ1_16:
2076 case ARIZONA_EQ1_17:
2077 case ARIZONA_EQ1_18:
2078 case ARIZONA_EQ1_19:
2079 case ARIZONA_EQ1_20:
2080 case ARIZONA_EQ1_21:
2081 case ARIZONA_EQ2_1:
2082 case ARIZONA_EQ2_2:
2083 case ARIZONA_EQ2_3:
2084 case ARIZONA_EQ2_4:
2085 case ARIZONA_EQ2_5:
2086 case ARIZONA_EQ2_6:
2087 case ARIZONA_EQ2_7:
2088 case ARIZONA_EQ2_8:
2089 case ARIZONA_EQ2_9:
2090 case ARIZONA_EQ2_10:
2091 case ARIZONA_EQ2_11:
2092 case ARIZONA_EQ2_12:
2093 case ARIZONA_EQ2_13:
2094 case ARIZONA_EQ2_14:
2095 case ARIZONA_EQ2_15:
2096 case ARIZONA_EQ2_16:
2097 case ARIZONA_EQ2_17:
2098 case ARIZONA_EQ2_18:
2099 case ARIZONA_EQ2_19:
2100 case ARIZONA_EQ2_20:
2101 case ARIZONA_EQ2_21:
2102 case ARIZONA_EQ3_1:
2103 case ARIZONA_EQ3_2:
2104 case ARIZONA_EQ3_3:
2105 case ARIZONA_EQ3_4:
2106 case ARIZONA_EQ3_5:
2107 case ARIZONA_EQ3_6:
2108 case ARIZONA_EQ3_7:
2109 case ARIZONA_EQ3_8:
2110 case ARIZONA_EQ3_9:
2111 case ARIZONA_EQ3_10:
2112 case ARIZONA_EQ3_11:
2113 case ARIZONA_EQ3_12:
2114 case ARIZONA_EQ3_13:
2115 case ARIZONA_EQ3_14:
2116 case ARIZONA_EQ3_15:
2117 case ARIZONA_EQ3_16:
2118 case ARIZONA_EQ3_17:
2119 case ARIZONA_EQ3_18:
2120 case ARIZONA_EQ3_19:
2121 case ARIZONA_EQ3_20:
2122 case ARIZONA_EQ3_21:
2123 case ARIZONA_EQ4_1:
2124 case ARIZONA_EQ4_2:
2125 case ARIZONA_EQ4_3:
2126 case ARIZONA_EQ4_4:
2127 case ARIZONA_EQ4_5:
2128 case ARIZONA_EQ4_6:
2129 case ARIZONA_EQ4_7:
2130 case ARIZONA_EQ4_8:
2131 case ARIZONA_EQ4_9:
2132 case ARIZONA_EQ4_10:
2133 case ARIZONA_EQ4_11:
2134 case ARIZONA_EQ4_12:
2135 case ARIZONA_EQ4_13:
2136 case ARIZONA_EQ4_14:
2137 case ARIZONA_EQ4_15:
2138 case ARIZONA_EQ4_16:
2139 case ARIZONA_EQ4_17:
2140 case ARIZONA_EQ4_18:
2141 case ARIZONA_EQ4_19:
2142 case ARIZONA_EQ4_20:
2143 case ARIZONA_EQ4_21:
2144 case ARIZONA_DRC1_CTRL1:
2145 case ARIZONA_DRC1_CTRL2:
2146 case ARIZONA_DRC1_CTRL3:
2147 case ARIZONA_DRC1_CTRL4:
2148 case ARIZONA_DRC1_CTRL5:
2149 case ARIZONA_DRC2_CTRL1:
2150 case ARIZONA_DRC2_CTRL2:
2151 case ARIZONA_DRC2_CTRL3:
2152 case ARIZONA_DRC2_CTRL4:
2153 case ARIZONA_DRC2_CTRL5:
2154 case ARIZONA_HPLPF1_1:
2155 case ARIZONA_HPLPF1_2:
2156 case ARIZONA_HPLPF2_1:
2157 case ARIZONA_HPLPF2_2:
2158 case ARIZONA_HPLPF3_1:
2159 case ARIZONA_HPLPF3_2:
2160 case ARIZONA_HPLPF4_1:
2161 case ARIZONA_HPLPF4_2:
2162 case ARIZONA_ASRC_ENABLE:
2163 case ARIZONA_ASRC_STATUS:
2164 case ARIZONA_ASRC_RATE1:
2165 case ARIZONA_ISRC_1_CTRL_1:
2166 case ARIZONA_ISRC_1_CTRL_2:
2167 case ARIZONA_ISRC_1_CTRL_3:
2168 case ARIZONA_ISRC_2_CTRL_1:
2169 case ARIZONA_ISRC_2_CTRL_2:
2170 case ARIZONA_ISRC_2_CTRL_3:
2171 case ARIZONA_ISRC_3_CTRL_1:
2172 case ARIZONA_ISRC_3_CTRL_2:
2173 case ARIZONA_ISRC_3_CTRL_3:
2174 case ARIZONA_CLOCK_CONTROL:
2175 case ARIZONA_ANC_SRC:
2176 case ARIZONA_DSP_STATUS:
2177 case ARIZONA_DSP1_CONTROL_1:
2178 case ARIZONA_DSP1_CLOCKING_1:
2179 case ARIZONA_DSP1_STATUS_1:
2180 case ARIZONA_DSP1_STATUS_2:
2181 case ARIZONA_DSP2_CONTROL_1:
2182 case ARIZONA_DSP2_CLOCKING_1:
2183 case ARIZONA_DSP2_STATUS_1:
2184 case ARIZONA_DSP2_STATUS_2:
2185 case ARIZONA_DSP3_CONTROL_1:
2186 case ARIZONA_DSP3_CLOCKING_1:
2187 case ARIZONA_DSP3_STATUS_1:
2188 case ARIZONA_DSP3_STATUS_2:
2189 case ARIZONA_DSP4_CONTROL_1:
2190 case ARIZONA_DSP4_CLOCKING_1:
2191 case ARIZONA_DSP4_STATUS_1:
2192 case ARIZONA_DSP4_STATUS_2:
2193 return true;
2194 default:
2195 return false;
2196 }
2197}
2198
2199static bool wm5110_volatile_register(struct device *dev, unsigned int reg)
2200{
2201 switch (reg) {
2202 case ARIZONA_SOFTWARE_RESET:
2203 case ARIZONA_DEVICE_REVISION:
2204 case ARIZONA_HAPTICS_STATUS:
2205 case ARIZONA_SAMPLE_RATE_1_STATUS:
2206 case ARIZONA_SAMPLE_RATE_2_STATUS:
2207 case ARIZONA_SAMPLE_RATE_3_STATUS:
2208 case ARIZONA_ASYNC_SAMPLE_RATE_1_STATUS:
2209 case ARIZONA_MIC_DETECT_3:
2210 case ARIZONA_HEADPHONE_DETECT_2:
2211 case ARIZONA_INPUT_ENABLES_STATUS:
2212 case ARIZONA_OUTPUT_STATUS_1:
2213 case ARIZONA_RAW_OUTPUT_STATUS_1:
2214 case ARIZONA_SLIMBUS_RX_PORT_STATUS:
2215 case ARIZONA_SLIMBUS_TX_PORT_STATUS:
2216 case ARIZONA_INTERRUPT_STATUS_1:
2217 case ARIZONA_INTERRUPT_STATUS_2:
2218 case ARIZONA_INTERRUPT_STATUS_3:
2219 case ARIZONA_INTERRUPT_STATUS_4:
2220 case ARIZONA_INTERRUPT_STATUS_5:
2221 case ARIZONA_IRQ2_STATUS_1:
2222 case ARIZONA_IRQ2_STATUS_2:
2223 case ARIZONA_IRQ2_STATUS_3:
2224 case ARIZONA_IRQ2_STATUS_4:
2225 case ARIZONA_IRQ2_STATUS_5:
2226 case ARIZONA_INTERRUPT_RAW_STATUS_2:
2227 case ARIZONA_INTERRUPT_RAW_STATUS_3:
2228 case ARIZONA_INTERRUPT_RAW_STATUS_4:
2229 case ARIZONA_INTERRUPT_RAW_STATUS_5:
2230 case ARIZONA_INTERRUPT_RAW_STATUS_6:
2231 case ARIZONA_INTERRUPT_RAW_STATUS_7:
2232 case ARIZONA_INTERRUPT_RAW_STATUS_8:
2233 case ARIZONA_IRQ_PIN_STATUS:
2234 case ARIZONA_AOD_IRQ1:
2235 case ARIZONA_AOD_IRQ2:
2236 case ARIZONA_ASRC_STATUS:
2237 case ARIZONA_DSP_STATUS:
2238 case ARIZONA_DSP1_CONTROL_1:
2239 case ARIZONA_DSP1_CLOCKING_1:
2240 case ARIZONA_DSP1_STATUS_1:
2241 case ARIZONA_DSP1_STATUS_2:
2242 case ARIZONA_DSP2_STATUS_1:
2243 case ARIZONA_DSP2_STATUS_2:
2244 case ARIZONA_DSP3_STATUS_1:
2245 case ARIZONA_DSP3_STATUS_2:
2246 case ARIZONA_DSP4_STATUS_1:
2247 case ARIZONA_DSP4_STATUS_2:
2248 return true;
2249 default:
2250 return false;
2251 }
2252}
2253
2254const struct regmap_config wm5110_spi_regmap = {
2255 .reg_bits = 32,
2256 .pad_bits = 16,
2257 .val_bits = 16,
2258
2259 .max_register = ARIZONA_DSP1_STATUS_2,
2260 .readable_reg = wm5110_readable_register,
2261 .volatile_reg = wm5110_volatile_register,
2262
2263 .cache_type = REGCACHE_RBTREE,
2264 .reg_defaults = wm5110_reg_default,
2265 .num_reg_defaults = ARRAY_SIZE(wm5110_reg_default),
2266};
2267EXPORT_SYMBOL_GPL(wm5110_spi_regmap);
2268
2269const struct regmap_config wm5110_i2c_regmap = {
2270 .reg_bits = 32,
2271 .val_bits = 16,
2272
2273 .max_register = ARIZONA_DSP1_STATUS_2,
2274 .readable_reg = wm5110_readable_register,
2275 .volatile_reg = wm5110_volatile_register,
2276
2277 .cache_type = REGCACHE_RBTREE,
2278 .reg_defaults = wm5110_reg_default,
2279 .num_reg_defaults = ARRAY_SIZE(wm5110_reg_default),
2280};
2281EXPORT_SYMBOL_GPL(wm5110_i2c_regmap);
diff --git a/drivers/mfd/wm8350-core.c b/drivers/mfd/wm8350-core.c
index 8a9b11ca076a..7c1ae24605d9 100644
--- a/drivers/mfd/wm8350-core.c
+++ b/drivers/mfd/wm8350-core.c
@@ -32,9 +32,6 @@
32#include <linux/mfd/wm8350/supply.h> 32#include <linux/mfd/wm8350/supply.h>
33#include <linux/mfd/wm8350/wdt.h> 33#include <linux/mfd/wm8350/wdt.h>
34 34
35#define WM8350_UNLOCK_KEY 0x0013
36#define WM8350_LOCK_KEY 0x0000
37
38#define WM8350_CLOCK_CONTROL_1 0x28 35#define WM8350_CLOCK_CONTROL_1 0x28
39#define WM8350_AIF_TEST 0x74 36#define WM8350_AIF_TEST 0x74
40 37
@@ -63,181 +60,32 @@
63/* 60/*
64 * WM8350 Device IO 61 * WM8350 Device IO
65 */ 62 */
66static DEFINE_MUTEX(io_mutex);
67static DEFINE_MUTEX(reg_lock_mutex); 63static DEFINE_MUTEX(reg_lock_mutex);
68 64
69/* Perform a physical read from the device.
70 */
71static int wm8350_phys_read(struct wm8350 *wm8350, u8 reg, int num_regs,
72 u16 *dest)
73{
74 int i, ret;
75 int bytes = num_regs * 2;
76
77 dev_dbg(wm8350->dev, "volatile read\n");
78 ret = regmap_raw_read(wm8350->regmap, reg, dest, bytes);
79
80 for (i = reg; i < reg + num_regs; i++) {
81 /* Cache is CPU endian */
82 dest[i - reg] = be16_to_cpu(dest[i - reg]);
83
84 /* Mask out non-readable bits */
85 dest[i - reg] &= wm8350_reg_io_map[i].readable;
86 }
87
88 dump(num_regs, dest);
89
90 return ret;
91}
92
93static int wm8350_read(struct wm8350 *wm8350, u8 reg, int num_regs, u16 *dest)
94{
95 int i;
96 int end = reg + num_regs;
97 int ret = 0;
98 int bytes = num_regs * 2;
99
100 if ((reg + num_regs - 1) > WM8350_MAX_REGISTER) {
101 dev_err(wm8350->dev, "invalid reg %x\n",
102 reg + num_regs - 1);
103 return -EINVAL;
104 }
105
106 dev_dbg(wm8350->dev,
107 "%s R%d(0x%2.2x) %d regs\n", __func__, reg, reg, num_regs);
108
109#if WM8350_BUS_DEBUG
110 /* we can _safely_ read any register, but warn if read not supported */
111 for (i = reg; i < end; i++) {
112 if (!wm8350_reg_io_map[i].readable)
113 dev_warn(wm8350->dev,
114 "reg R%d is not readable\n", i);
115 }
116#endif
117
118 /* if any volatile registers are required, then read back all */
119 for (i = reg; i < end; i++)
120 if (wm8350_reg_io_map[i].vol)
121 return wm8350_phys_read(wm8350, reg, num_regs, dest);
122
123 /* no volatiles, then cache is good */
124 dev_dbg(wm8350->dev, "cache read\n");
125 memcpy(dest, &wm8350->reg_cache[reg], bytes);
126 dump(num_regs, dest);
127 return ret;
128}
129
130static inline int is_reg_locked(struct wm8350 *wm8350, u8 reg)
131{
132 if (reg == WM8350_SECURITY ||
133 wm8350->reg_cache[WM8350_SECURITY] == WM8350_UNLOCK_KEY)
134 return 0;
135
136 if ((reg >= WM8350_GPIO_FUNCTION_SELECT_1 &&
137 reg <= WM8350_GPIO_FUNCTION_SELECT_4) ||
138 (reg >= WM8350_BATTERY_CHARGER_CONTROL_1 &&
139 reg <= WM8350_BATTERY_CHARGER_CONTROL_3))
140 return 1;
141 return 0;
142}
143
144static int wm8350_write(struct wm8350 *wm8350, u8 reg, int num_regs, u16 *src)
145{
146 int i;
147 int end = reg + num_regs;
148 int bytes = num_regs * 2;
149
150 if ((reg + num_regs - 1) > WM8350_MAX_REGISTER) {
151 dev_err(wm8350->dev, "invalid reg %x\n",
152 reg + num_regs - 1);
153 return -EINVAL;
154 }
155
156 /* it's generally not a good idea to write to RO or locked registers */
157 for (i = reg; i < end; i++) {
158 if (!wm8350_reg_io_map[i].writable) {
159 dev_err(wm8350->dev,
160 "attempted write to read only reg R%d\n", i);
161 return -EINVAL;
162 }
163
164 if (is_reg_locked(wm8350, i)) {
165 dev_err(wm8350->dev,
166 "attempted write to locked reg R%d\n", i);
167 return -EINVAL;
168 }
169
170 src[i - reg] &= wm8350_reg_io_map[i].writable;
171
172 wm8350->reg_cache[i] =
173 (wm8350->reg_cache[i] & ~wm8350_reg_io_map[i].writable)
174 | src[i - reg];
175
176 src[i - reg] = cpu_to_be16(src[i - reg]);
177 }
178
179 /* Actually write it out */
180 return regmap_raw_write(wm8350->regmap, reg, src, bytes);
181}
182
183/* 65/*
184 * Safe read, modify, write methods 66 * Safe read, modify, write methods
185 */ 67 */
186int wm8350_clear_bits(struct wm8350 *wm8350, u16 reg, u16 mask) 68int wm8350_clear_bits(struct wm8350 *wm8350, u16 reg, u16 mask)
187{ 69{
188 u16 data; 70 return regmap_update_bits(wm8350->regmap, reg, mask, 0);
189 int err;
190
191 mutex_lock(&io_mutex);
192 err = wm8350_read(wm8350, reg, 1, &data);
193 if (err) {
194 dev_err(wm8350->dev, "read from reg R%d failed\n", reg);
195 goto out;
196 }
197
198 data &= ~mask;
199 err = wm8350_write(wm8350, reg, 1, &data);
200 if (err)
201 dev_err(wm8350->dev, "write to reg R%d failed\n", reg);
202out:
203 mutex_unlock(&io_mutex);
204 return err;
205} 71}
206EXPORT_SYMBOL_GPL(wm8350_clear_bits); 72EXPORT_SYMBOL_GPL(wm8350_clear_bits);
207 73
208int wm8350_set_bits(struct wm8350 *wm8350, u16 reg, u16 mask) 74int wm8350_set_bits(struct wm8350 *wm8350, u16 reg, u16 mask)
209{ 75{
210 u16 data; 76 return regmap_update_bits(wm8350->regmap, reg, mask, mask);
211 int err;
212
213 mutex_lock(&io_mutex);
214 err = wm8350_read(wm8350, reg, 1, &data);
215 if (err) {
216 dev_err(wm8350->dev, "read from reg R%d failed\n", reg);
217 goto out;
218 }
219
220 data |= mask;
221 err = wm8350_write(wm8350, reg, 1, &data);
222 if (err)
223 dev_err(wm8350->dev, "write to reg R%d failed\n", reg);
224out:
225 mutex_unlock(&io_mutex);
226 return err;
227} 77}
228EXPORT_SYMBOL_GPL(wm8350_set_bits); 78EXPORT_SYMBOL_GPL(wm8350_set_bits);
229 79
230u16 wm8350_reg_read(struct wm8350 *wm8350, int reg) 80u16 wm8350_reg_read(struct wm8350 *wm8350, int reg)
231{ 81{
232 u16 data; 82 unsigned int data;
233 int err; 83 int err;
234 84
235 mutex_lock(&io_mutex); 85 err = regmap_read(wm8350->regmap, reg, &data);
236 err = wm8350_read(wm8350, reg, 1, &data);
237 if (err) 86 if (err)
238 dev_err(wm8350->dev, "read from reg R%d failed\n", reg); 87 dev_err(wm8350->dev, "read from reg R%d failed\n", reg);
239 88
240 mutex_unlock(&io_mutex);
241 return data; 89 return data;
242} 90}
243EXPORT_SYMBOL_GPL(wm8350_reg_read); 91EXPORT_SYMBOL_GPL(wm8350_reg_read);
@@ -245,13 +93,11 @@ EXPORT_SYMBOL_GPL(wm8350_reg_read);
245int wm8350_reg_write(struct wm8350 *wm8350, int reg, u16 val) 93int wm8350_reg_write(struct wm8350 *wm8350, int reg, u16 val)
246{ 94{
247 int ret; 95 int ret;
248 u16 data = val;
249 96
250 mutex_lock(&io_mutex); 97 ret = regmap_write(wm8350->regmap, reg, val);
251 ret = wm8350_write(wm8350, reg, 1, &data); 98
252 if (ret) 99 if (ret)
253 dev_err(wm8350->dev, "write to reg R%d failed\n", reg); 100 dev_err(wm8350->dev, "write to reg R%d failed\n", reg);
254 mutex_unlock(&io_mutex);
255 return ret; 101 return ret;
256} 102}
257EXPORT_SYMBOL_GPL(wm8350_reg_write); 103EXPORT_SYMBOL_GPL(wm8350_reg_write);
@@ -261,12 +107,11 @@ int wm8350_block_read(struct wm8350 *wm8350, int start_reg, int regs,
261{ 107{
262 int err = 0; 108 int err = 0;
263 109
264 mutex_lock(&io_mutex); 110 err = regmap_bulk_read(wm8350->regmap, start_reg, dest, regs);
265 err = wm8350_read(wm8350, start_reg, regs, dest);
266 if (err) 111 if (err)
267 dev_err(wm8350->dev, "block read starting from R%d failed\n", 112 dev_err(wm8350->dev, "block read starting from R%d failed\n",
268 start_reg); 113 start_reg);
269 mutex_unlock(&io_mutex); 114
270 return err; 115 return err;
271} 116}
272EXPORT_SYMBOL_GPL(wm8350_block_read); 117EXPORT_SYMBOL_GPL(wm8350_block_read);
@@ -276,12 +121,11 @@ int wm8350_block_write(struct wm8350 *wm8350, int start_reg, int regs,
276{ 121{
277 int ret = 0; 122 int ret = 0;
278 123
279 mutex_lock(&io_mutex); 124 ret = regmap_bulk_write(wm8350->regmap, start_reg, src, regs);
280 ret = wm8350_write(wm8350, start_reg, regs, src);
281 if (ret) 125 if (ret)
282 dev_err(wm8350->dev, "block write starting at R%d failed\n", 126 dev_err(wm8350->dev, "block write starting at R%d failed\n",
283 start_reg); 127 start_reg);
284 mutex_unlock(&io_mutex); 128
285 return ret; 129 return ret;
286} 130}
287EXPORT_SYMBOL_GPL(wm8350_block_write); 131EXPORT_SYMBOL_GPL(wm8350_block_write);
@@ -295,15 +139,20 @@ EXPORT_SYMBOL_GPL(wm8350_block_write);
295 */ 139 */
296int wm8350_reg_lock(struct wm8350 *wm8350) 140int wm8350_reg_lock(struct wm8350 *wm8350)
297{ 141{
298 u16 key = WM8350_LOCK_KEY;
299 int ret; 142 int ret;
300 143
144 mutex_lock(&reg_lock_mutex);
145
301 ldbg(__func__); 146 ldbg(__func__);
302 mutex_lock(&io_mutex); 147
303 ret = wm8350_write(wm8350, WM8350_SECURITY, 1, &key); 148 ret = wm8350_reg_write(wm8350, WM8350_SECURITY, WM8350_LOCK_KEY);
304 if (ret) 149 if (ret)
305 dev_err(wm8350->dev, "lock failed\n"); 150 dev_err(wm8350->dev, "lock failed\n");
306 mutex_unlock(&io_mutex); 151
152 wm8350->unlocked = false;
153
154 mutex_unlock(&reg_lock_mutex);
155
307 return ret; 156 return ret;
308} 157}
309EXPORT_SYMBOL_GPL(wm8350_reg_lock); 158EXPORT_SYMBOL_GPL(wm8350_reg_lock);
@@ -319,15 +168,20 @@ EXPORT_SYMBOL_GPL(wm8350_reg_lock);
319 */ 168 */
320int wm8350_reg_unlock(struct wm8350 *wm8350) 169int wm8350_reg_unlock(struct wm8350 *wm8350)
321{ 170{
322 u16 key = WM8350_UNLOCK_KEY;
323 int ret; 171 int ret;
324 172
173 mutex_lock(&reg_lock_mutex);
174
325 ldbg(__func__); 175 ldbg(__func__);
326 mutex_lock(&io_mutex); 176
327 ret = wm8350_write(wm8350, WM8350_SECURITY, 1, &key); 177 ret = wm8350_reg_write(wm8350, WM8350_SECURITY, WM8350_UNLOCK_KEY);
328 if (ret) 178 if (ret)
329 dev_err(wm8350->dev, "unlock failed\n"); 179 dev_err(wm8350->dev, "unlock failed\n");
330 mutex_unlock(&io_mutex); 180
181 wm8350->unlocked = true;
182
183 mutex_unlock(&reg_lock_mutex);
184
331 return ret; 185 return ret;
332} 186}
333EXPORT_SYMBOL_GPL(wm8350_reg_unlock); 187EXPORT_SYMBOL_GPL(wm8350_reg_unlock);
@@ -395,146 +249,6 @@ static irqreturn_t wm8350_auxadc_irq(int irq, void *irq_data)
395} 249}
396 250
397/* 251/*
398 * Cache is always host endian.
399 */
400static int wm8350_create_cache(struct wm8350 *wm8350, int type, int mode)
401{
402 int i, ret = 0;
403 u16 value;
404 const u16 *reg_map;
405
406 switch (type) {
407 case 0:
408 switch (mode) {
409#ifdef CONFIG_MFD_WM8350_CONFIG_MODE_0
410 case 0:
411 reg_map = wm8350_mode0_defaults;
412 break;
413#endif
414#ifdef CONFIG_MFD_WM8350_CONFIG_MODE_1
415 case 1:
416 reg_map = wm8350_mode1_defaults;
417 break;
418#endif
419#ifdef CONFIG_MFD_WM8350_CONFIG_MODE_2
420 case 2:
421 reg_map = wm8350_mode2_defaults;
422 break;
423#endif
424#ifdef CONFIG_MFD_WM8350_CONFIG_MODE_3
425 case 3:
426 reg_map = wm8350_mode3_defaults;
427 break;
428#endif
429 default:
430 dev_err(wm8350->dev,
431 "WM8350 configuration mode %d not supported\n",
432 mode);
433 return -EINVAL;
434 }
435 break;
436
437 case 1:
438 switch (mode) {
439#ifdef CONFIG_MFD_WM8351_CONFIG_MODE_0
440 case 0:
441 reg_map = wm8351_mode0_defaults;
442 break;
443#endif
444#ifdef CONFIG_MFD_WM8351_CONFIG_MODE_1
445 case 1:
446 reg_map = wm8351_mode1_defaults;
447 break;
448#endif
449#ifdef CONFIG_MFD_WM8351_CONFIG_MODE_2
450 case 2:
451 reg_map = wm8351_mode2_defaults;
452 break;
453#endif
454#ifdef CONFIG_MFD_WM8351_CONFIG_MODE_3
455 case 3:
456 reg_map = wm8351_mode3_defaults;
457 break;
458#endif
459 default:
460 dev_err(wm8350->dev,
461 "WM8351 configuration mode %d not supported\n",
462 mode);
463 return -EINVAL;
464 }
465 break;
466
467 case 2:
468 switch (mode) {
469#ifdef CONFIG_MFD_WM8352_CONFIG_MODE_0
470 case 0:
471 reg_map = wm8352_mode0_defaults;
472 break;
473#endif
474#ifdef CONFIG_MFD_WM8352_CONFIG_MODE_1
475 case 1:
476 reg_map = wm8352_mode1_defaults;
477 break;
478#endif
479#ifdef CONFIG_MFD_WM8352_CONFIG_MODE_2
480 case 2:
481 reg_map = wm8352_mode2_defaults;
482 break;
483#endif
484#ifdef CONFIG_MFD_WM8352_CONFIG_MODE_3
485 case 3:
486 reg_map = wm8352_mode3_defaults;
487 break;
488#endif
489 default:
490 dev_err(wm8350->dev,
491 "WM8352 configuration mode %d not supported\n",
492 mode);
493 return -EINVAL;
494 }
495 break;
496
497 default:
498 dev_err(wm8350->dev,
499 "WM835x configuration mode %d not supported\n",
500 mode);
501 return -EINVAL;
502 }
503
504 wm8350->reg_cache =
505 kmalloc(sizeof(u16) * (WM8350_MAX_REGISTER + 1), GFP_KERNEL);
506 if (wm8350->reg_cache == NULL)
507 return -ENOMEM;
508
509 /* Read the initial cache state back from the device - this is
510 * a PMIC so the device many not be in a virgin state and we
511 * can't rely on the silicon values.
512 */
513 ret = regmap_raw_read(wm8350->regmap, 0, wm8350->reg_cache,
514 sizeof(u16) * (WM8350_MAX_REGISTER + 1));
515 if (ret < 0) {
516 dev_err(wm8350->dev,
517 "failed to read initial cache values\n");
518 goto out;
519 }
520
521 /* Mask out uncacheable/unreadable bits and the audio. */
522 for (i = 0; i < WM8350_MAX_REGISTER; i++) {
523 if (wm8350_reg_io_map[i].readable &&
524 (i < WM8350_CLOCK_CONTROL_1 || i > WM8350_AIF_TEST)) {
525 value = be16_to_cpu(wm8350->reg_cache[i]);
526 value &= wm8350_reg_io_map[i].readable;
527 wm8350->reg_cache[i] = value;
528 } else
529 wm8350->reg_cache[i] = reg_map[i];
530 }
531
532out:
533 kfree(wm8350->reg_cache);
534 return ret;
535}
536
537/*
538 * Register a client device. This is non-fatal since there is no need to 252 * Register a client device. This is non-fatal since there is no need to
539 * fail the entire device init due to a single platform device failing. 253 * fail the entire device init due to a single platform device failing.
540 */ 254 */
@@ -681,18 +395,12 @@ int wm8350_device_init(struct wm8350 *wm8350, int irq,
681 goto err; 395 goto err;
682 } 396 }
683 397
684 ret = wm8350_create_cache(wm8350, mask_rev, mode);
685 if (ret < 0) {
686 dev_err(wm8350->dev, "Failed to create register cache\n");
687 return ret;
688 }
689
690 mutex_init(&wm8350->auxadc_mutex); 398 mutex_init(&wm8350->auxadc_mutex);
691 init_completion(&wm8350->auxadc_done); 399 init_completion(&wm8350->auxadc_done);
692 400
693 ret = wm8350_irq_init(wm8350, irq, pdata); 401 ret = wm8350_irq_init(wm8350, irq, pdata);
694 if (ret < 0) 402 if (ret < 0)
695 goto err_free; 403 goto err;
696 404
697 if (wm8350->irq_base) { 405 if (wm8350->irq_base) {
698 ret = request_threaded_irq(wm8350->irq_base + 406 ret = request_threaded_irq(wm8350->irq_base +
@@ -730,8 +438,6 @@ int wm8350_device_init(struct wm8350 *wm8350, int irq,
730 438
731err_irq: 439err_irq:
732 wm8350_irq_exit(wm8350); 440 wm8350_irq_exit(wm8350);
733err_free:
734 kfree(wm8350->reg_cache);
735err: 441err:
736 return ret; 442 return ret;
737} 443}
@@ -758,8 +464,6 @@ void wm8350_device_exit(struct wm8350 *wm8350)
758 free_irq(wm8350->irq_base + WM8350_IRQ_AUXADC_DATARDY, wm8350); 464 free_irq(wm8350->irq_base + WM8350_IRQ_AUXADC_DATARDY, wm8350);
759 465
760 wm8350_irq_exit(wm8350); 466 wm8350_irq_exit(wm8350);
761
762 kfree(wm8350->reg_cache);
763} 467}
764EXPORT_SYMBOL_GPL(wm8350_device_exit); 468EXPORT_SYMBOL_GPL(wm8350_device_exit);
765 469
diff --git a/drivers/mfd/wm8350-i2c.c b/drivers/mfd/wm8350-i2c.c
index a68aceb4e48c..2e57101c8d3d 100644
--- a/drivers/mfd/wm8350-i2c.c
+++ b/drivers/mfd/wm8350-i2c.c
@@ -23,11 +23,6 @@
23#include <linux/regmap.h> 23#include <linux/regmap.h>
24#include <linux/slab.h> 24#include <linux/slab.h>
25 25
26static const struct regmap_config wm8350_regmap = {
27 .reg_bits = 8,
28 .val_bits = 16,
29};
30
31static int wm8350_i2c_probe(struct i2c_client *i2c, 26static int wm8350_i2c_probe(struct i2c_client *i2c,
32 const struct i2c_device_id *id) 27 const struct i2c_device_id *id)
33{ 28{
diff --git a/drivers/mfd/wm8350-irq.c b/drivers/mfd/wm8350-irq.c
index 9fd01bf63c51..624ff90501cd 100644
--- a/drivers/mfd/wm8350-irq.c
+++ b/drivers/mfd/wm8350-irq.c
@@ -432,11 +432,9 @@ static void wm8350_irq_sync_unlock(struct irq_data *data)
432 for (i = 0; i < ARRAY_SIZE(wm8350->irq_masks); i++) { 432 for (i = 0; i < ARRAY_SIZE(wm8350->irq_masks); i++) {
433 /* If there's been a change in the mask write it back 433 /* If there's been a change in the mask write it back
434 * to the hardware. */ 434 * to the hardware. */
435 if (wm8350->irq_masks[i] != 435 WARN_ON(regmap_update_bits(wm8350->regmap,
436 wm8350->reg_cache[WM8350_INT_STATUS_1_MASK + i]) 436 WM8350_INT_STATUS_1_MASK + i,
437 WARN_ON(wm8350_reg_write(wm8350, 437 0xffff, wm8350->irq_masks[i]));
438 WM8350_INT_STATUS_1_MASK + i,
439 wm8350->irq_masks[i]));
440 } 438 }
441 439
442 mutex_unlock(&wm8350->irq_lock); 440 mutex_unlock(&wm8350->irq_lock);
diff --git a/drivers/mfd/wm8350-regmap.c b/drivers/mfd/wm8350-regmap.c
index e965139e5cd5..9efc64750fb6 100644
--- a/drivers/mfd/wm8350-regmap.c
+++ b/drivers/mfd/wm8350-regmap.c
@@ -14,3170 +14,18 @@
14 14
15#include <linux/mfd/wm8350/core.h> 15#include <linux/mfd/wm8350/core.h>
16 16
17#ifdef CONFIG_MFD_WM8350_CONFIG_MODE_0
18
19#undef WM8350_HAVE_CONFIG_MODE
20#define WM8350_HAVE_CONFIG_MODE
21
22const u16 wm8350_mode0_defaults[] = {
23 0x17FF, /* R0 - Reset/ID */
24 0x1000, /* R1 - ID */
25 0x0000, /* R2 */
26 0x1002, /* R3 - System Control 1 */
27 0x0004, /* R4 - System Control 2 */
28 0x0000, /* R5 - System Hibernate */
29 0x8A00, /* R6 - Interface Control */
30 0x0000, /* R7 */
31 0x8000, /* R8 - Power mgmt (1) */
32 0x0000, /* R9 - Power mgmt (2) */
33 0x0000, /* R10 - Power mgmt (3) */
34 0x2000, /* R11 - Power mgmt (4) */
35 0x0E00, /* R12 - Power mgmt (5) */
36 0x0000, /* R13 - Power mgmt (6) */
37 0x0000, /* R14 - Power mgmt (7) */
38 0x0000, /* R15 */
39 0x0000, /* R16 - RTC Seconds/Minutes */
40 0x0100, /* R17 - RTC Hours/Day */
41 0x0101, /* R18 - RTC Date/Month */
42 0x1400, /* R19 - RTC Year */
43 0x0000, /* R20 - Alarm Seconds/Minutes */
44 0x0000, /* R21 - Alarm Hours/Day */
45 0x0000, /* R22 - Alarm Date/Month */
46 0x0320, /* R23 - RTC Time Control */
47 0x0000, /* R24 - System Interrupts */
48 0x0000, /* R25 - Interrupt Status 1 */
49 0x0000, /* R26 - Interrupt Status 2 */
50 0x0000, /* R27 - Power Up Interrupt Status */
51 0x0000, /* R28 - Under Voltage Interrupt status */
52 0x0000, /* R29 - Over Current Interrupt status */
53 0x0000, /* R30 - GPIO Interrupt Status */
54 0x0000, /* R31 - Comparator Interrupt Status */
55 0x3FFF, /* R32 - System Interrupts Mask */
56 0x0000, /* R33 - Interrupt Status 1 Mask */
57 0x0000, /* R34 - Interrupt Status 2 Mask */
58 0x0000, /* R35 - Power Up Interrupt Status Mask */
59 0x0000, /* R36 - Under Voltage Interrupt status Mask */
60 0x0000, /* R37 - Over Current Interrupt status Mask */
61 0x0000, /* R38 - GPIO Interrupt Status Mask */
62 0x0000, /* R39 - Comparator Interrupt Status Mask */
63 0x0040, /* R40 - Clock Control 1 */
64 0x0000, /* R41 - Clock Control 2 */
65 0x3B00, /* R42 - FLL Control 1 */
66 0x7086, /* R43 - FLL Control 2 */
67 0xC226, /* R44 - FLL Control 3 */
68 0x0000, /* R45 - FLL Control 4 */
69 0x0000, /* R46 */
70 0x0000, /* R47 */
71 0x0000, /* R48 - DAC Control */
72 0x0000, /* R49 */
73 0x00C0, /* R50 - DAC Digital Volume L */
74 0x00C0, /* R51 - DAC Digital Volume R */
75 0x0000, /* R52 */
76 0x0040, /* R53 - DAC LR Rate */
77 0x0000, /* R54 - DAC Clock Control */
78 0x0000, /* R55 */
79 0x0000, /* R56 */
80 0x0000, /* R57 */
81 0x4000, /* R58 - DAC Mute */
82 0x0000, /* R59 - DAC Mute Volume */
83 0x0000, /* R60 - DAC Side */
84 0x0000, /* R61 */
85 0x0000, /* R62 */
86 0x0000, /* R63 */
87 0x8000, /* R64 - ADC Control */
88 0x0000, /* R65 */
89 0x00C0, /* R66 - ADC Digital Volume L */
90 0x00C0, /* R67 - ADC Digital Volume R */
91 0x0000, /* R68 - ADC Divider */
92 0x0000, /* R69 */
93 0x0040, /* R70 - ADC LR Rate */
94 0x0000, /* R71 */
95 0x0303, /* R72 - Input Control */
96 0x0000, /* R73 - IN3 Input Control */
97 0x0000, /* R74 - Mic Bias Control */
98 0x0000, /* R75 */
99 0x0000, /* R76 - Output Control */
100 0x0000, /* R77 - Jack Detect */
101 0x0000, /* R78 - Anti Pop Control */
102 0x0000, /* R79 */
103 0x0040, /* R80 - Left Input Volume */
104 0x0040, /* R81 - Right Input Volume */
105 0x0000, /* R82 */
106 0x0000, /* R83 */
107 0x0000, /* R84 */
108 0x0000, /* R85 */
109 0x0000, /* R86 */
110 0x0000, /* R87 */
111 0x0800, /* R88 - Left Mixer Control */
112 0x1000, /* R89 - Right Mixer Control */
113 0x0000, /* R90 */
114 0x0000, /* R91 */
115 0x0000, /* R92 - OUT3 Mixer Control */
116 0x0000, /* R93 - OUT4 Mixer Control */
117 0x0000, /* R94 */
118 0x0000, /* R95 */
119 0x0000, /* R96 - Output Left Mixer Volume */
120 0x0000, /* R97 - Output Right Mixer Volume */
121 0x0000, /* R98 - Input Mixer Volume L */
122 0x0000, /* R99 - Input Mixer Volume R */
123 0x0000, /* R100 - Input Mixer Volume */
124 0x0000, /* R101 */
125 0x0000, /* R102 */
126 0x0000, /* R103 */
127 0x00E4, /* R104 - LOUT1 Volume */
128 0x00E4, /* R105 - ROUT1 Volume */
129 0x00E4, /* R106 - LOUT2 Volume */
130 0x02E4, /* R107 - ROUT2 Volume */
131 0x0000, /* R108 */
132 0x0000, /* R109 */
133 0x0000, /* R110 */
134 0x0000, /* R111 - BEEP Volume */
135 0x0A00, /* R112 - AI Formating */
136 0x0000, /* R113 - ADC DAC COMP */
137 0x0020, /* R114 - AI ADC Control */
138 0x0020, /* R115 - AI DAC Control */
139 0x0000, /* R116 - AIF Test */
140 0x0000, /* R117 */
141 0x0000, /* R118 */
142 0x0000, /* R119 */
143 0x0000, /* R120 */
144 0x0000, /* R121 */
145 0x0000, /* R122 */
146 0x0000, /* R123 */
147 0x0000, /* R124 */
148 0x0000, /* R125 */
149 0x0000, /* R126 */
150 0x0000, /* R127 */
151 0x1FFF, /* R128 - GPIO Debounce */
152 0x0000, /* R129 - GPIO Pin pull up Control */
153 0x03FC, /* R130 - GPIO Pull down Control */
154 0x0000, /* R131 - GPIO Interrupt Mode */
155 0x0000, /* R132 */
156 0x0000, /* R133 - GPIO Control */
157 0x0FFC, /* R134 - GPIO Configuration (i/o) */
158 0x0FFC, /* R135 - GPIO Pin Polarity / Type */
159 0x0000, /* R136 */
160 0x0000, /* R137 */
161 0x0000, /* R138 */
162 0x0000, /* R139 */
163 0x0013, /* R140 - GPIO Function Select 1 */
164 0x0000, /* R141 - GPIO Function Select 2 */
165 0x0000, /* R142 - GPIO Function Select 3 */
166 0x0003, /* R143 - GPIO Function Select 4 */
167 0x0000, /* R144 - Digitiser Control (1) */
168 0x0002, /* R145 - Digitiser Control (2) */
169 0x0000, /* R146 */
170 0x0000, /* R147 */
171 0x0000, /* R148 */
172 0x0000, /* R149 */
173 0x0000, /* R150 */
174 0x0000, /* R151 */
175 0x7000, /* R152 - AUX1 Readback */
176 0x7000, /* R153 - AUX2 Readback */
177 0x7000, /* R154 - AUX3 Readback */
178 0x7000, /* R155 - AUX4 Readback */
179 0x0000, /* R156 - USB Voltage Readback */
180 0x0000, /* R157 - LINE Voltage Readback */
181 0x0000, /* R158 - BATT Voltage Readback */
182 0x0000, /* R159 - Chip Temp Readback */
183 0x0000, /* R160 */
184 0x0000, /* R161 */
185 0x0000, /* R162 */
186 0x0000, /* R163 - Generic Comparator Control */
187 0x0000, /* R164 - Generic comparator 1 */
188 0x0000, /* R165 - Generic comparator 2 */
189 0x0000, /* R166 - Generic comparator 3 */
190 0x0000, /* R167 - Generic comparator 4 */
191 0xA00F, /* R168 - Battery Charger Control 1 */
192 0x0B06, /* R169 - Battery Charger Control 2 */
193 0x0000, /* R170 - Battery Charger Control 3 */
194 0x0000, /* R171 */
195 0x0000, /* R172 - Current Sink Driver A */
196 0x0000, /* R173 - CSA Flash control */
197 0x0000, /* R174 - Current Sink Driver B */
198 0x0000, /* R175 - CSB Flash control */
199 0x0000, /* R176 - DCDC/LDO requested */
200 0x002D, /* R177 - DCDC Active options */
201 0x0000, /* R178 - DCDC Sleep options */
202 0x0025, /* R179 - Power-check comparator */
203 0x000E, /* R180 - DCDC1 Control */
204 0x0000, /* R181 - DCDC1 Timeouts */
205 0x1006, /* R182 - DCDC1 Low Power */
206 0x0018, /* R183 - DCDC2 Control */
207 0x0000, /* R184 - DCDC2 Timeouts */
208 0x0000, /* R185 */
209 0x0000, /* R186 - DCDC3 Control */
210 0x0000, /* R187 - DCDC3 Timeouts */
211 0x0006, /* R188 - DCDC3 Low Power */
212 0x0000, /* R189 - DCDC4 Control */
213 0x0000, /* R190 - DCDC4 Timeouts */
214 0x0006, /* R191 - DCDC4 Low Power */
215 0x0008, /* R192 - DCDC5 Control */
216 0x0000, /* R193 - DCDC5 Timeouts */
217 0x0000, /* R194 */
218 0x0000, /* R195 - DCDC6 Control */
219 0x0000, /* R196 - DCDC6 Timeouts */
220 0x0006, /* R197 - DCDC6 Low Power */
221 0x0000, /* R198 */
222 0x0003, /* R199 - Limit Switch Control */
223 0x001C, /* R200 - LDO1 Control */
224 0x0000, /* R201 - LDO1 Timeouts */
225 0x001C, /* R202 - LDO1 Low Power */
226 0x001B, /* R203 - LDO2 Control */
227 0x0000, /* R204 - LDO2 Timeouts */
228 0x001C, /* R205 - LDO2 Low Power */
229 0x001B, /* R206 - LDO3 Control */
230 0x0000, /* R207 - LDO3 Timeouts */
231 0x001C, /* R208 - LDO3 Low Power */
232 0x001B, /* R209 - LDO4 Control */
233 0x0000, /* R210 - LDO4 Timeouts */
234 0x001C, /* R211 - LDO4 Low Power */
235 0x0000, /* R212 */
236 0x0000, /* R213 */
237 0x0000, /* R214 */
238 0x0000, /* R215 - VCC_FAULT Masks */
239 0x001F, /* R216 - Main Bandgap Control */
240 0x0000, /* R217 - OSC Control */
241 0x9000, /* R218 - RTC Tick Control */
242 0x0000, /* R219 */
243 0x4000, /* R220 - RAM BIST 1 */
244 0x0000, /* R221 */
245 0x0000, /* R222 */
246 0x0000, /* R223 */
247 0x0000, /* R224 */
248 0x0000, /* R225 - DCDC/LDO status */
249 0x0000, /* R226 */
250 0x0000, /* R227 */
251 0x0000, /* R228 */
252 0x0000, /* R229 */
253 0xE000, /* R230 - GPIO Pin Status */
254 0x0000, /* R231 */
255 0x0000, /* R232 */
256 0x0000, /* R233 */
257 0x0000, /* R234 */
258 0x0000, /* R235 */
259 0x0000, /* R236 */
260 0x0000, /* R237 */
261 0x0000, /* R238 */
262 0x0000, /* R239 */
263 0x0000, /* R240 */
264 0x0000, /* R241 */
265 0x0000, /* R242 */
266 0x0000, /* R243 */
267 0x0000, /* R244 */
268 0x0000, /* R245 */
269 0x0000, /* R246 */
270 0x0000, /* R247 */
271 0x0000, /* R248 */
272 0x0000, /* R249 */
273 0x0000, /* R250 */
274 0x0000, /* R251 */
275 0x0000, /* R252 */
276 0x0000, /* R253 */
277 0x0000, /* R254 */
278 0x0000, /* R255 */
279};
280#endif
281
282#ifdef CONFIG_MFD_WM8350_CONFIG_MODE_1
283
284#undef WM8350_HAVE_CONFIG_MODE
285#define WM8350_HAVE_CONFIG_MODE
286
287const u16 wm8350_mode1_defaults[] = {
288 0x17FF, /* R0 - Reset/ID */
289 0x1000, /* R1 - ID */
290 0x0000, /* R2 */
291 0x1002, /* R3 - System Control 1 */
292 0x0014, /* R4 - System Control 2 */
293 0x0000, /* R5 - System Hibernate */
294 0x8A00, /* R6 - Interface Control */
295 0x0000, /* R7 */
296 0x8000, /* R8 - Power mgmt (1) */
297 0x0000, /* R9 - Power mgmt (2) */
298 0x0000, /* R10 - Power mgmt (3) */
299 0x2000, /* R11 - Power mgmt (4) */
300 0x0E00, /* R12 - Power mgmt (5) */
301 0x0000, /* R13 - Power mgmt (6) */
302 0x0000, /* R14 - Power mgmt (7) */
303 0x0000, /* R15 */
304 0x0000, /* R16 - RTC Seconds/Minutes */
305 0x0100, /* R17 - RTC Hours/Day */
306 0x0101, /* R18 - RTC Date/Month */
307 0x1400, /* R19 - RTC Year */
308 0x0000, /* R20 - Alarm Seconds/Minutes */
309 0x0000, /* R21 - Alarm Hours/Day */
310 0x0000, /* R22 - Alarm Date/Month */
311 0x0320, /* R23 - RTC Time Control */
312 0x0000, /* R24 - System Interrupts */
313 0x0000, /* R25 - Interrupt Status 1 */
314 0x0000, /* R26 - Interrupt Status 2 */
315 0x0000, /* R27 - Power Up Interrupt Status */
316 0x0000, /* R28 - Under Voltage Interrupt status */
317 0x0000, /* R29 - Over Current Interrupt status */
318 0x0000, /* R30 - GPIO Interrupt Status */
319 0x0000, /* R31 - Comparator Interrupt Status */
320 0x3FFF, /* R32 - System Interrupts Mask */
321 0x0000, /* R33 - Interrupt Status 1 Mask */
322 0x0000, /* R34 - Interrupt Status 2 Mask */
323 0x0000, /* R35 - Power Up Interrupt Status Mask */
324 0x0000, /* R36 - Under Voltage Interrupt status Mask */
325 0x0000, /* R37 - Over Current Interrupt status Mask */
326 0x0000, /* R38 - GPIO Interrupt Status Mask */
327 0x0000, /* R39 - Comparator Interrupt Status Mask */
328 0x0040, /* R40 - Clock Control 1 */
329 0x0000, /* R41 - Clock Control 2 */
330 0x3B00, /* R42 - FLL Control 1 */
331 0x7086, /* R43 - FLL Control 2 */
332 0xC226, /* R44 - FLL Control 3 */
333 0x0000, /* R45 - FLL Control 4 */
334 0x0000, /* R46 */
335 0x0000, /* R47 */
336 0x0000, /* R48 - DAC Control */
337 0x0000, /* R49 */
338 0x00C0, /* R50 - DAC Digital Volume L */
339 0x00C0, /* R51 - DAC Digital Volume R */
340 0x0000, /* R52 */
341 0x0040, /* R53 - DAC LR Rate */
342 0x0000, /* R54 - DAC Clock Control */
343 0x0000, /* R55 */
344 0x0000, /* R56 */
345 0x0000, /* R57 */
346 0x4000, /* R58 - DAC Mute */
347 0x0000, /* R59 - DAC Mute Volume */
348 0x0000, /* R60 - DAC Side */
349 0x0000, /* R61 */
350 0x0000, /* R62 */
351 0x0000, /* R63 */
352 0x8000, /* R64 - ADC Control */
353 0x0000, /* R65 */
354 0x00C0, /* R66 - ADC Digital Volume L */
355 0x00C0, /* R67 - ADC Digital Volume R */
356 0x0000, /* R68 - ADC Divider */
357 0x0000, /* R69 */
358 0x0040, /* R70 - ADC LR Rate */
359 0x0000, /* R71 */
360 0x0303, /* R72 - Input Control */
361 0x0000, /* R73 - IN3 Input Control */
362 0x0000, /* R74 - Mic Bias Control */
363 0x0000, /* R75 */
364 0x0000, /* R76 - Output Control */
365 0x0000, /* R77 - Jack Detect */
366 0x0000, /* R78 - Anti Pop Control */
367 0x0000, /* R79 */
368 0x0040, /* R80 - Left Input Volume */
369 0x0040, /* R81 - Right Input Volume */
370 0x0000, /* R82 */
371 0x0000, /* R83 */
372 0x0000, /* R84 */
373 0x0000, /* R85 */
374 0x0000, /* R86 */
375 0x0000, /* R87 */
376 0x0800, /* R88 - Left Mixer Control */
377 0x1000, /* R89 - Right Mixer Control */
378 0x0000, /* R90 */
379 0x0000, /* R91 */
380 0x0000, /* R92 - OUT3 Mixer Control */
381 0x0000, /* R93 - OUT4 Mixer Control */
382 0x0000, /* R94 */
383 0x0000, /* R95 */
384 0x0000, /* R96 - Output Left Mixer Volume */
385 0x0000, /* R97 - Output Right Mixer Volume */
386 0x0000, /* R98 - Input Mixer Volume L */
387 0x0000, /* R99 - Input Mixer Volume R */
388 0x0000, /* R100 - Input Mixer Volume */
389 0x0000, /* R101 */
390 0x0000, /* R102 */
391 0x0000, /* R103 */
392 0x00E4, /* R104 - LOUT1 Volume */
393 0x00E4, /* R105 - ROUT1 Volume */
394 0x00E4, /* R106 - LOUT2 Volume */
395 0x02E4, /* R107 - ROUT2 Volume */
396 0x0000, /* R108 */
397 0x0000, /* R109 */
398 0x0000, /* R110 */
399 0x0000, /* R111 - BEEP Volume */
400 0x0A00, /* R112 - AI Formating */
401 0x0000, /* R113 - ADC DAC COMP */
402 0x0020, /* R114 - AI ADC Control */
403 0x0020, /* R115 - AI DAC Control */
404 0x0000, /* R116 - AIF Test */
405 0x0000, /* R117 */
406 0x0000, /* R118 */
407 0x0000, /* R119 */
408 0x0000, /* R120 */
409 0x0000, /* R121 */
410 0x0000, /* R122 */
411 0x0000, /* R123 */
412 0x0000, /* R124 */
413 0x0000, /* R125 */
414 0x0000, /* R126 */
415 0x0000, /* R127 */
416 0x1FFF, /* R128 - GPIO Debounce */
417 0x0000, /* R129 - GPIO Pin pull up Control */
418 0x03FC, /* R130 - GPIO Pull down Control */
419 0x0000, /* R131 - GPIO Interrupt Mode */
420 0x0000, /* R132 */
421 0x0000, /* R133 - GPIO Control */
422 0x00FB, /* R134 - GPIO Configuration (i/o) */
423 0x04FE, /* R135 - GPIO Pin Polarity / Type */
424 0x0000, /* R136 */
425 0x0000, /* R137 */
426 0x0000, /* R138 */
427 0x0000, /* R139 */
428 0x0312, /* R140 - GPIO Function Select 1 */
429 0x1003, /* R141 - GPIO Function Select 2 */
430 0x1331, /* R142 - GPIO Function Select 3 */
431 0x0003, /* R143 - GPIO Function Select 4 */
432 0x0000, /* R144 - Digitiser Control (1) */
433 0x0002, /* R145 - Digitiser Control (2) */
434 0x0000, /* R146 */
435 0x0000, /* R147 */
436 0x0000, /* R148 */
437 0x0000, /* R149 */
438 0x0000, /* R150 */
439 0x0000, /* R151 */
440 0x7000, /* R152 - AUX1 Readback */
441 0x7000, /* R153 - AUX2 Readback */
442 0x7000, /* R154 - AUX3 Readback */
443 0x7000, /* R155 - AUX4 Readback */
444 0x0000, /* R156 - USB Voltage Readback */
445 0x0000, /* R157 - LINE Voltage Readback */
446 0x0000, /* R158 - BATT Voltage Readback */
447 0x0000, /* R159 - Chip Temp Readback */
448 0x0000, /* R160 */
449 0x0000, /* R161 */
450 0x0000, /* R162 */
451 0x0000, /* R163 - Generic Comparator Control */
452 0x0000, /* R164 - Generic comparator 1 */
453 0x0000, /* R165 - Generic comparator 2 */
454 0x0000, /* R166 - Generic comparator 3 */
455 0x0000, /* R167 - Generic comparator 4 */
456 0xA00F, /* R168 - Battery Charger Control 1 */
457 0x0B06, /* R169 - Battery Charger Control 2 */
458 0x0000, /* R170 - Battery Charger Control 3 */
459 0x0000, /* R171 */
460 0x0000, /* R172 - Current Sink Driver A */
461 0x0000, /* R173 - CSA Flash control */
462 0x0000, /* R174 - Current Sink Driver B */
463 0x0000, /* R175 - CSB Flash control */
464 0x0000, /* R176 - DCDC/LDO requested */
465 0x002D, /* R177 - DCDC Active options */
466 0x0000, /* R178 - DCDC Sleep options */
467 0x0025, /* R179 - Power-check comparator */
468 0x0062, /* R180 - DCDC1 Control */
469 0x0400, /* R181 - DCDC1 Timeouts */
470 0x1006, /* R182 - DCDC1 Low Power */
471 0x0018, /* R183 - DCDC2 Control */
472 0x0000, /* R184 - DCDC2 Timeouts */
473 0x0000, /* R185 */
474 0x0026, /* R186 - DCDC3 Control */
475 0x0400, /* R187 - DCDC3 Timeouts */
476 0x0006, /* R188 - DCDC3 Low Power */
477 0x0062, /* R189 - DCDC4 Control */
478 0x0400, /* R190 - DCDC4 Timeouts */
479 0x0006, /* R191 - DCDC4 Low Power */
480 0x0008, /* R192 - DCDC5 Control */
481 0x0000, /* R193 - DCDC5 Timeouts */
482 0x0000, /* R194 */
483 0x0026, /* R195 - DCDC6 Control */
484 0x0800, /* R196 - DCDC6 Timeouts */
485 0x0006, /* R197 - DCDC6 Low Power */
486 0x0000, /* R198 */
487 0x0003, /* R199 - Limit Switch Control */
488 0x0006, /* R200 - LDO1 Control */
489 0x0400, /* R201 - LDO1 Timeouts */
490 0x001C, /* R202 - LDO1 Low Power */
491 0x0006, /* R203 - LDO2 Control */
492 0x0400, /* R204 - LDO2 Timeouts */
493 0x001C, /* R205 - LDO2 Low Power */
494 0x001B, /* R206 - LDO3 Control */
495 0x0000, /* R207 - LDO3 Timeouts */
496 0x001C, /* R208 - LDO3 Low Power */
497 0x001B, /* R209 - LDO4 Control */
498 0x0000, /* R210 - LDO4 Timeouts */
499 0x001C, /* R211 - LDO4 Low Power */
500 0x0000, /* R212 */
501 0x0000, /* R213 */
502 0x0000, /* R214 */
503 0x0000, /* R215 - VCC_FAULT Masks */
504 0x001F, /* R216 - Main Bandgap Control */
505 0x0000, /* R217 - OSC Control */
506 0x9000, /* R218 - RTC Tick Control */
507 0x0000, /* R219 */
508 0x4000, /* R220 - RAM BIST 1 */
509 0x0000, /* R221 */
510 0x0000, /* R222 */
511 0x0000, /* R223 */
512 0x0000, /* R224 */
513 0x0000, /* R225 - DCDC/LDO status */
514 0x0000, /* R226 */
515 0x0000, /* R227 */
516 0x0000, /* R228 */
517 0x0000, /* R229 */
518 0xE000, /* R230 - GPIO Pin Status */
519 0x0000, /* R231 */
520 0x0000, /* R232 */
521 0x0000, /* R233 */
522 0x0000, /* R234 */
523 0x0000, /* R235 */
524 0x0000, /* R236 */
525 0x0000, /* R237 */
526 0x0000, /* R238 */
527 0x0000, /* R239 */
528 0x0000, /* R240 */
529 0x0000, /* R241 */
530 0x0000, /* R242 */
531 0x0000, /* R243 */
532 0x0000, /* R244 */
533 0x0000, /* R245 */
534 0x0000, /* R246 */
535 0x0000, /* R247 */
536 0x0000, /* R248 */
537 0x0000, /* R249 */
538 0x0000, /* R250 */
539 0x0000, /* R251 */
540 0x0000, /* R252 */
541 0x0000, /* R253 */
542 0x0000, /* R254 */
543 0x0000, /* R255 */
544};
545#endif
546
547#ifdef CONFIG_MFD_WM8350_CONFIG_MODE_2
548
549#undef WM8350_HAVE_CONFIG_MODE
550#define WM8350_HAVE_CONFIG_MODE
551
552const u16 wm8350_mode2_defaults[] = {
553 0x17FF, /* R0 - Reset/ID */
554 0x1000, /* R1 - ID */
555 0x0000, /* R2 */
556 0x1002, /* R3 - System Control 1 */
557 0x0014, /* R4 - System Control 2 */
558 0x0000, /* R5 - System Hibernate */
559 0x8A00, /* R6 - Interface Control */
560 0x0000, /* R7 */
561 0x8000, /* R8 - Power mgmt (1) */
562 0x0000, /* R9 - Power mgmt (2) */
563 0x0000, /* R10 - Power mgmt (3) */
564 0x2000, /* R11 - Power mgmt (4) */
565 0x0E00, /* R12 - Power mgmt (5) */
566 0x0000, /* R13 - Power mgmt (6) */
567 0x0000, /* R14 - Power mgmt (7) */
568 0x0000, /* R15 */
569 0x0000, /* R16 - RTC Seconds/Minutes */
570 0x0100, /* R17 - RTC Hours/Day */
571 0x0101, /* R18 - RTC Date/Month */
572 0x1400, /* R19 - RTC Year */
573 0x0000, /* R20 - Alarm Seconds/Minutes */
574 0x0000, /* R21 - Alarm Hours/Day */
575 0x0000, /* R22 - Alarm Date/Month */
576 0x0320, /* R23 - RTC Time Control */
577 0x0000, /* R24 - System Interrupts */
578 0x0000, /* R25 - Interrupt Status 1 */
579 0x0000, /* R26 - Interrupt Status 2 */
580 0x0000, /* R27 - Power Up Interrupt Status */
581 0x0000, /* R28 - Under Voltage Interrupt status */
582 0x0000, /* R29 - Over Current Interrupt status */
583 0x0000, /* R30 - GPIO Interrupt Status */
584 0x0000, /* R31 - Comparator Interrupt Status */
585 0x3FFF, /* R32 - System Interrupts Mask */
586 0x0000, /* R33 - Interrupt Status 1 Mask */
587 0x0000, /* R34 - Interrupt Status 2 Mask */
588 0x0000, /* R35 - Power Up Interrupt Status Mask */
589 0x0000, /* R36 - Under Voltage Interrupt status Mask */
590 0x0000, /* R37 - Over Current Interrupt status Mask */
591 0x0000, /* R38 - GPIO Interrupt Status Mask */
592 0x0000, /* R39 - Comparator Interrupt Status Mask */
593 0x0040, /* R40 - Clock Control 1 */
594 0x0000, /* R41 - Clock Control 2 */
595 0x3B00, /* R42 - FLL Control 1 */
596 0x7086, /* R43 - FLL Control 2 */
597 0xC226, /* R44 - FLL Control 3 */
598 0x0000, /* R45 - FLL Control 4 */
599 0x0000, /* R46 */
600 0x0000, /* R47 */
601 0x0000, /* R48 - DAC Control */
602 0x0000, /* R49 */
603 0x00C0, /* R50 - DAC Digital Volume L */
604 0x00C0, /* R51 - DAC Digital Volume R */
605 0x0000, /* R52 */
606 0x0040, /* R53 - DAC LR Rate */
607 0x0000, /* R54 - DAC Clock Control */
608 0x0000, /* R55 */
609 0x0000, /* R56 */
610 0x0000, /* R57 */
611 0x4000, /* R58 - DAC Mute */
612 0x0000, /* R59 - DAC Mute Volume */
613 0x0000, /* R60 - DAC Side */
614 0x0000, /* R61 */
615 0x0000, /* R62 */
616 0x0000, /* R63 */
617 0x8000, /* R64 - ADC Control */
618 0x0000, /* R65 */
619 0x00C0, /* R66 - ADC Digital Volume L */
620 0x00C0, /* R67 - ADC Digital Volume R */
621 0x0000, /* R68 - ADC Divider */
622 0x0000, /* R69 */
623 0x0040, /* R70 - ADC LR Rate */
624 0x0000, /* R71 */
625 0x0303, /* R72 - Input Control */
626 0x0000, /* R73 - IN3 Input Control */
627 0x0000, /* R74 - Mic Bias Control */
628 0x0000, /* R75 */
629 0x0000, /* R76 - Output Control */
630 0x0000, /* R77 - Jack Detect */
631 0x0000, /* R78 - Anti Pop Control */
632 0x0000, /* R79 */
633 0x0040, /* R80 - Left Input Volume */
634 0x0040, /* R81 - Right Input Volume */
635 0x0000, /* R82 */
636 0x0000, /* R83 */
637 0x0000, /* R84 */
638 0x0000, /* R85 */
639 0x0000, /* R86 */
640 0x0000, /* R87 */
641 0x0800, /* R88 - Left Mixer Control */
642 0x1000, /* R89 - Right Mixer Control */
643 0x0000, /* R90 */
644 0x0000, /* R91 */
645 0x0000, /* R92 - OUT3 Mixer Control */
646 0x0000, /* R93 - OUT4 Mixer Control */
647 0x0000, /* R94 */
648 0x0000, /* R95 */
649 0x0000, /* R96 - Output Left Mixer Volume */
650 0x0000, /* R97 - Output Right Mixer Volume */
651 0x0000, /* R98 - Input Mixer Volume L */
652 0x0000, /* R99 - Input Mixer Volume R */
653 0x0000, /* R100 - Input Mixer Volume */
654 0x0000, /* R101 */
655 0x0000, /* R102 */
656 0x0000, /* R103 */
657 0x00E4, /* R104 - LOUT1 Volume */
658 0x00E4, /* R105 - ROUT1 Volume */
659 0x00E4, /* R106 - LOUT2 Volume */
660 0x02E4, /* R107 - ROUT2 Volume */
661 0x0000, /* R108 */
662 0x0000, /* R109 */
663 0x0000, /* R110 */
664 0x0000, /* R111 - BEEP Volume */
665 0x0A00, /* R112 - AI Formating */
666 0x0000, /* R113 - ADC DAC COMP */
667 0x0020, /* R114 - AI ADC Control */
668 0x0020, /* R115 - AI DAC Control */
669 0x0000, /* R116 - AIF Test */
670 0x0000, /* R117 */
671 0x0000, /* R118 */
672 0x0000, /* R119 */
673 0x0000, /* R120 */
674 0x0000, /* R121 */
675 0x0000, /* R122 */
676 0x0000, /* R123 */
677 0x0000, /* R124 */
678 0x0000, /* R125 */
679 0x0000, /* R126 */
680 0x0000, /* R127 */
681 0x1FFF, /* R128 - GPIO Debounce */
682 0x0000, /* R129 - GPIO Pin pull up Control */
683 0x03FC, /* R130 - GPIO Pull down Control */
684 0x0000, /* R131 - GPIO Interrupt Mode */
685 0x0000, /* R132 */
686 0x0000, /* R133 - GPIO Control */
687 0x08FB, /* R134 - GPIO Configuration (i/o) */
688 0x0CFE, /* R135 - GPIO Pin Polarity / Type */
689 0x0000, /* R136 */
690 0x0000, /* R137 */
691 0x0000, /* R138 */
692 0x0000, /* R139 */
693 0x0312, /* R140 - GPIO Function Select 1 */
694 0x0003, /* R141 - GPIO Function Select 2 */
695 0x2331, /* R142 - GPIO Function Select 3 */
696 0x0003, /* R143 - GPIO Function Select 4 */
697 0x0000, /* R144 - Digitiser Control (1) */
698 0x0002, /* R145 - Digitiser Control (2) */
699 0x0000, /* R146 */
700 0x0000, /* R147 */
701 0x0000, /* R148 */
702 0x0000, /* R149 */
703 0x0000, /* R150 */
704 0x0000, /* R151 */
705 0x7000, /* R152 - AUX1 Readback */
706 0x7000, /* R153 - AUX2 Readback */
707 0x7000, /* R154 - AUX3 Readback */
708 0x7000, /* R155 - AUX4 Readback */
709 0x0000, /* R156 - USB Voltage Readback */
710 0x0000, /* R157 - LINE Voltage Readback */
711 0x0000, /* R158 - BATT Voltage Readback */
712 0x0000, /* R159 - Chip Temp Readback */
713 0x0000, /* R160 */
714 0x0000, /* R161 */
715 0x0000, /* R162 */
716 0x0000, /* R163 - Generic Comparator Control */
717 0x0000, /* R164 - Generic comparator 1 */
718 0x0000, /* R165 - Generic comparator 2 */
719 0x0000, /* R166 - Generic comparator 3 */
720 0x0000, /* R167 - Generic comparator 4 */
721 0xA00F, /* R168 - Battery Charger Control 1 */
722 0x0B06, /* R169 - Battery Charger Control 2 */
723 0x0000, /* R170 - Battery Charger Control 3 */
724 0x0000, /* R171 */
725 0x0000, /* R172 - Current Sink Driver A */
726 0x0000, /* R173 - CSA Flash control */
727 0x0000, /* R174 - Current Sink Driver B */
728 0x0000, /* R175 - CSB Flash control */
729 0x0000, /* R176 - DCDC/LDO requested */
730 0x002D, /* R177 - DCDC Active options */
731 0x0000, /* R178 - DCDC Sleep options */
732 0x0025, /* R179 - Power-check comparator */
733 0x000E, /* R180 - DCDC1 Control */
734 0x0400, /* R181 - DCDC1 Timeouts */
735 0x1006, /* R182 - DCDC1 Low Power */
736 0x0018, /* R183 - DCDC2 Control */
737 0x0000, /* R184 - DCDC2 Timeouts */
738 0x0000, /* R185 */
739 0x002E, /* R186 - DCDC3 Control */
740 0x0800, /* R187 - DCDC3 Timeouts */
741 0x0006, /* R188 - DCDC3 Low Power */
742 0x000E, /* R189 - DCDC4 Control */
743 0x0800, /* R190 - DCDC4 Timeouts */
744 0x0006, /* R191 - DCDC4 Low Power */
745 0x0008, /* R192 - DCDC5 Control */
746 0x0000, /* R193 - DCDC5 Timeouts */
747 0x0000, /* R194 */
748 0x0026, /* R195 - DCDC6 Control */
749 0x0C00, /* R196 - DCDC6 Timeouts */
750 0x0006, /* R197 - DCDC6 Low Power */
751 0x0000, /* R198 */
752 0x0003, /* R199 - Limit Switch Control */
753 0x001A, /* R200 - LDO1 Control */
754 0x0800, /* R201 - LDO1 Timeouts */
755 0x001C, /* R202 - LDO1 Low Power */
756 0x0010, /* R203 - LDO2 Control */
757 0x0800, /* R204 - LDO2 Timeouts */
758 0x001C, /* R205 - LDO2 Low Power */
759 0x000A, /* R206 - LDO3 Control */
760 0x0C00, /* R207 - LDO3 Timeouts */
761 0x001C, /* R208 - LDO3 Low Power */
762 0x001A, /* R209 - LDO4 Control */
763 0x0800, /* R210 - LDO4 Timeouts */
764 0x001C, /* R211 - LDO4 Low Power */
765 0x0000, /* R212 */
766 0x0000, /* R213 */
767 0x0000, /* R214 */
768 0x0000, /* R215 - VCC_FAULT Masks */
769 0x001F, /* R216 - Main Bandgap Control */
770 0x0000, /* R217 - OSC Control */
771 0x9000, /* R218 - RTC Tick Control */
772 0x0000, /* R219 */
773 0x4000, /* R220 - RAM BIST 1 */
774 0x0000, /* R221 */
775 0x0000, /* R222 */
776 0x0000, /* R223 */
777 0x0000, /* R224 */
778 0x0000, /* R225 - DCDC/LDO status */
779 0x0000, /* R226 */
780 0x0000, /* R227 */
781 0x0000, /* R228 */
782 0x0000, /* R229 */
783 0xE000, /* R230 - GPIO Pin Status */
784 0x0000, /* R231 */
785 0x0000, /* R232 */
786 0x0000, /* R233 */
787 0x0000, /* R234 */
788 0x0000, /* R235 */
789 0x0000, /* R236 */
790 0x0000, /* R237 */
791 0x0000, /* R238 */
792 0x0000, /* R239 */
793 0x0000, /* R240 */
794 0x0000, /* R241 */
795 0x0000, /* R242 */
796 0x0000, /* R243 */
797 0x0000, /* R244 */
798 0x0000, /* R245 */
799 0x0000, /* R246 */
800 0x0000, /* R247 */
801 0x0000, /* R248 */
802 0x0000, /* R249 */
803 0x0000, /* R250 */
804 0x0000, /* R251 */
805 0x0000, /* R252 */
806 0x0000, /* R253 */
807 0x0000, /* R254 */
808 0x0000, /* R255 */
809};
810#endif
811
812#ifdef CONFIG_MFD_WM8350_CONFIG_MODE_3
813
814#undef WM8350_HAVE_CONFIG_MODE
815#define WM8350_HAVE_CONFIG_MODE
816
817const u16 wm8350_mode3_defaults[] = {
818 0x17FF, /* R0 - Reset/ID */
819 0x1000, /* R1 - ID */
820 0x0000, /* R2 */
821 0x1000, /* R3 - System Control 1 */
822 0x0004, /* R4 - System Control 2 */
823 0x0000, /* R5 - System Hibernate */
824 0x8A00, /* R6 - Interface Control */
825 0x0000, /* R7 */
826 0x8000, /* R8 - Power mgmt (1) */
827 0x0000, /* R9 - Power mgmt (2) */
828 0x0000, /* R10 - Power mgmt (3) */
829 0x2000, /* R11 - Power mgmt (4) */
830 0x0E00, /* R12 - Power mgmt (5) */
831 0x0000, /* R13 - Power mgmt (6) */
832 0x0000, /* R14 - Power mgmt (7) */
833 0x0000, /* R15 */
834 0x0000, /* R16 - RTC Seconds/Minutes */
835 0x0100, /* R17 - RTC Hours/Day */
836 0x0101, /* R18 - RTC Date/Month */
837 0x1400, /* R19 - RTC Year */
838 0x0000, /* R20 - Alarm Seconds/Minutes */
839 0x0000, /* R21 - Alarm Hours/Day */
840 0x0000, /* R22 - Alarm Date/Month */
841 0x0320, /* R23 - RTC Time Control */
842 0x0000, /* R24 - System Interrupts */
843 0x0000, /* R25 - Interrupt Status 1 */
844 0x0000, /* R26 - Interrupt Status 2 */
845 0x0000, /* R27 - Power Up Interrupt Status */
846 0x0000, /* R28 - Under Voltage Interrupt status */
847 0x0000, /* R29 - Over Current Interrupt status */
848 0x0000, /* R30 - GPIO Interrupt Status */
849 0x0000, /* R31 - Comparator Interrupt Status */
850 0x3FFF, /* R32 - System Interrupts Mask */
851 0x0000, /* R33 - Interrupt Status 1 Mask */
852 0x0000, /* R34 - Interrupt Status 2 Mask */
853 0x0000, /* R35 - Power Up Interrupt Status Mask */
854 0x0000, /* R36 - Under Voltage Interrupt status Mask */
855 0x0000, /* R37 - Over Current Interrupt status Mask */
856 0x0000, /* R38 - GPIO Interrupt Status Mask */
857 0x0000, /* R39 - Comparator Interrupt Status Mask */
858 0x0040, /* R40 - Clock Control 1 */
859 0x0000, /* R41 - Clock Control 2 */
860 0x3B00, /* R42 - FLL Control 1 */
861 0x7086, /* R43 - FLL Control 2 */
862 0xC226, /* R44 - FLL Control 3 */
863 0x0000, /* R45 - FLL Control 4 */
864 0x0000, /* R46 */
865 0x0000, /* R47 */
866 0x0000, /* R48 - DAC Control */
867 0x0000, /* R49 */
868 0x00C0, /* R50 - DAC Digital Volume L */
869 0x00C0, /* R51 - DAC Digital Volume R */
870 0x0000, /* R52 */
871 0x0040, /* R53 - DAC LR Rate */
872 0x0000, /* R54 - DAC Clock Control */
873 0x0000, /* R55 */
874 0x0000, /* R56 */
875 0x0000, /* R57 */
876 0x4000, /* R58 - DAC Mute */
877 0x0000, /* R59 - DAC Mute Volume */
878 0x0000, /* R60 - DAC Side */
879 0x0000, /* R61 */
880 0x0000, /* R62 */
881 0x0000, /* R63 */
882 0x8000, /* R64 - ADC Control */
883 0x0000, /* R65 */
884 0x00C0, /* R66 - ADC Digital Volume L */
885 0x00C0, /* R67 - ADC Digital Volume R */
886 0x0000, /* R68 - ADC Divider */
887 0x0000, /* R69 */
888 0x0040, /* R70 - ADC LR Rate */
889 0x0000, /* R71 */
890 0x0303, /* R72 - Input Control */
891 0x0000, /* R73 - IN3 Input Control */
892 0x0000, /* R74 - Mic Bias Control */
893 0x0000, /* R75 */
894 0x0000, /* R76 - Output Control */
895 0x0000, /* R77 - Jack Detect */
896 0x0000, /* R78 - Anti Pop Control */
897 0x0000, /* R79 */
898 0x0040, /* R80 - Left Input Volume */
899 0x0040, /* R81 - Right Input Volume */
900 0x0000, /* R82 */
901 0x0000, /* R83 */
902 0x0000, /* R84 */
903 0x0000, /* R85 */
904 0x0000, /* R86 */
905 0x0000, /* R87 */
906 0x0800, /* R88 - Left Mixer Control */
907 0x1000, /* R89 - Right Mixer Control */
908 0x0000, /* R90 */
909 0x0000, /* R91 */
910 0x0000, /* R92 - OUT3 Mixer Control */
911 0x0000, /* R93 - OUT4 Mixer Control */
912 0x0000, /* R94 */
913 0x0000, /* R95 */
914 0x0000, /* R96 - Output Left Mixer Volume */
915 0x0000, /* R97 - Output Right Mixer Volume */
916 0x0000, /* R98 - Input Mixer Volume L */
917 0x0000, /* R99 - Input Mixer Volume R */
918 0x0000, /* R100 - Input Mixer Volume */
919 0x0000, /* R101 */
920 0x0000, /* R102 */
921 0x0000, /* R103 */
922 0x00E4, /* R104 - LOUT1 Volume */
923 0x00E4, /* R105 - ROUT1 Volume */
924 0x00E4, /* R106 - LOUT2 Volume */
925 0x02E4, /* R107 - ROUT2 Volume */
926 0x0000, /* R108 */
927 0x0000, /* R109 */
928 0x0000, /* R110 */
929 0x0000, /* R111 - BEEP Volume */
930 0x0A00, /* R112 - AI Formating */
931 0x0000, /* R113 - ADC DAC COMP */
932 0x0020, /* R114 - AI ADC Control */
933 0x0020, /* R115 - AI DAC Control */
934 0x0000, /* R116 - AIF Test */
935 0x0000, /* R117 */
936 0x0000, /* R118 */
937 0x0000, /* R119 */
938 0x0000, /* R120 */
939 0x0000, /* R121 */
940 0x0000, /* R122 */
941 0x0000, /* R123 */
942 0x0000, /* R124 */
943 0x0000, /* R125 */
944 0x0000, /* R126 */
945 0x0000, /* R127 */
946 0x1FFF, /* R128 - GPIO Debounce */
947 0x0000, /* R129 - GPIO Pin pull up Control */
948 0x03FC, /* R130 - GPIO Pull down Control */
949 0x0000, /* R131 - GPIO Interrupt Mode */
950 0x0000, /* R132 */
951 0x0000, /* R133 - GPIO Control */
952 0x0A7B, /* R134 - GPIO Configuration (i/o) */
953 0x06FE, /* R135 - GPIO Pin Polarity / Type */
954 0x0000, /* R136 */
955 0x0000, /* R137 */
956 0x0000, /* R138 */
957 0x0000, /* R139 */
958 0x1312, /* R140 - GPIO Function Select 1 */
959 0x1030, /* R141 - GPIO Function Select 2 */
960 0x2231, /* R142 - GPIO Function Select 3 */
961 0x0003, /* R143 - GPIO Function Select 4 */
962 0x0000, /* R144 - Digitiser Control (1) */
963 0x0002, /* R145 - Digitiser Control (2) */
964 0x0000, /* R146 */
965 0x0000, /* R147 */
966 0x0000, /* R148 */
967 0x0000, /* R149 */
968 0x0000, /* R150 */
969 0x0000, /* R151 */
970 0x7000, /* R152 - AUX1 Readback */
971 0x7000, /* R153 - AUX2 Readback */
972 0x7000, /* R154 - AUX3 Readback */
973 0x7000, /* R155 - AUX4 Readback */
974 0x0000, /* R156 - USB Voltage Readback */
975 0x0000, /* R157 - LINE Voltage Readback */
976 0x0000, /* R158 - BATT Voltage Readback */
977 0x0000, /* R159 - Chip Temp Readback */
978 0x0000, /* R160 */
979 0x0000, /* R161 */
980 0x0000, /* R162 */
981 0x0000, /* R163 - Generic Comparator Control */
982 0x0000, /* R164 - Generic comparator 1 */
983 0x0000, /* R165 - Generic comparator 2 */
984 0x0000, /* R166 - Generic comparator 3 */
985 0x0000, /* R167 - Generic comparator 4 */
986 0xA00F, /* R168 - Battery Charger Control 1 */
987 0x0B06, /* R169 - Battery Charger Control 2 */
988 0x0000, /* R170 - Battery Charger Control 3 */
989 0x0000, /* R171 */
990 0x0000, /* R172 - Current Sink Driver A */
991 0x0000, /* R173 - CSA Flash control */
992 0x0000, /* R174 - Current Sink Driver B */
993 0x0000, /* R175 - CSB Flash control */
994 0x0000, /* R176 - DCDC/LDO requested */
995 0x002D, /* R177 - DCDC Active options */
996 0x0000, /* R178 - DCDC Sleep options */
997 0x0025, /* R179 - Power-check comparator */
998 0x000E, /* R180 - DCDC1 Control */
999 0x0400, /* R181 - DCDC1 Timeouts */
1000 0x1006, /* R182 - DCDC1 Low Power */
1001 0x0018, /* R183 - DCDC2 Control */
1002 0x0000, /* R184 - DCDC2 Timeouts */
1003 0x0000, /* R185 */
1004 0x000E, /* R186 - DCDC3 Control */
1005 0x0400, /* R187 - DCDC3 Timeouts */
1006 0x0006, /* R188 - DCDC3 Low Power */
1007 0x0026, /* R189 - DCDC4 Control */
1008 0x0400, /* R190 - DCDC4 Timeouts */
1009 0x0006, /* R191 - DCDC4 Low Power */
1010 0x0008, /* R192 - DCDC5 Control */
1011 0x0000, /* R193 - DCDC5 Timeouts */
1012 0x0000, /* R194 */
1013 0x0026, /* R195 - DCDC6 Control */
1014 0x0400, /* R196 - DCDC6 Timeouts */
1015 0x0006, /* R197 - DCDC6 Low Power */
1016 0x0000, /* R198 */
1017 0x0003, /* R199 - Limit Switch Control */
1018 0x001C, /* R200 - LDO1 Control */
1019 0x0000, /* R201 - LDO1 Timeouts */
1020 0x001C, /* R202 - LDO1 Low Power */
1021 0x001C, /* R203 - LDO2 Control */
1022 0x0400, /* R204 - LDO2 Timeouts */
1023 0x001C, /* R205 - LDO2 Low Power */
1024 0x001C, /* R206 - LDO3 Control */
1025 0x0400, /* R207 - LDO3 Timeouts */
1026 0x001C, /* R208 - LDO3 Low Power */
1027 0x001F, /* R209 - LDO4 Control */
1028 0x0400, /* R210 - LDO4 Timeouts */
1029 0x001C, /* R211 - LDO4 Low Power */
1030 0x0000, /* R212 */
1031 0x0000, /* R213 */
1032 0x0000, /* R214 */
1033 0x0000, /* R215 - VCC_FAULT Masks */
1034 0x001F, /* R216 - Main Bandgap Control */
1035 0x0000, /* R217 - OSC Control */
1036 0x9000, /* R218 - RTC Tick Control */
1037 0x0000, /* R219 */
1038 0x4000, /* R220 - RAM BIST 1 */
1039 0x0000, /* R221 */
1040 0x0000, /* R222 */
1041 0x0000, /* R223 */
1042 0x0000, /* R224 */
1043 0x0000, /* R225 - DCDC/LDO status */
1044 0x0000, /* R226 */
1045 0x0000, /* R227 */
1046 0x0000, /* R228 */
1047 0x0000, /* R229 */
1048 0xE000, /* R230 - GPIO Pin Status */
1049 0x0000, /* R231 */
1050 0x0000, /* R232 */
1051 0x0000, /* R233 */
1052 0x0000, /* R234 */
1053 0x0000, /* R235 */
1054 0x0000, /* R236 */
1055 0x0000, /* R237 */
1056 0x0000, /* R238 */
1057 0x0000, /* R239 */
1058 0x0000, /* R240 */
1059 0x0000, /* R241 */
1060 0x0000, /* R242 */
1061 0x0000, /* R243 */
1062 0x0000, /* R244 */
1063 0x0000, /* R245 */
1064 0x0000, /* R246 */
1065 0x0000, /* R247 */
1066 0x0000, /* R248 */
1067 0x0000, /* R249 */
1068 0x0000, /* R250 */
1069 0x0000, /* R251 */
1070 0x0000, /* R252 */
1071 0x0000, /* R253 */
1072 0x0000, /* R254 */
1073 0x0000, /* R255 */
1074};
1075#endif
1076
1077#ifdef CONFIG_MFD_WM8351_CONFIG_MODE_0
1078
1079#undef WM8350_HAVE_CONFIG_MODE
1080#define WM8350_HAVE_CONFIG_MODE
1081
1082const u16 wm8351_mode0_defaults[] = {
1083 0x6143, /* R0 - Reset/ID */
1084 0x0000, /* R1 - ID */
1085 0x0001, /* R2 - Revision */
1086 0x1C02, /* R3 - System Control 1 */
1087 0x0004, /* R4 - System Control 2 */
1088 0x0000, /* R5 - System Hibernate */
1089 0x8A00, /* R6 - Interface Control */
1090 0x0000, /* R7 */
1091 0x8000, /* R8 - Power mgmt (1) */
1092 0x0000, /* R9 - Power mgmt (2) */
1093 0x0000, /* R10 - Power mgmt (3) */
1094 0x2000, /* R11 - Power mgmt (4) */
1095 0x0E00, /* R12 - Power mgmt (5) */
1096 0x0000, /* R13 - Power mgmt (6) */
1097 0x0000, /* R14 - Power mgmt (7) */
1098 0x0000, /* R15 */
1099 0x0000, /* R16 - RTC Seconds/Minutes */
1100 0x0100, /* R17 - RTC Hours/Day */
1101 0x0101, /* R18 - RTC Date/Month */
1102 0x1400, /* R19 - RTC Year */
1103 0x0000, /* R20 - Alarm Seconds/Minutes */
1104 0x0000, /* R21 - Alarm Hours/Day */
1105 0x0000, /* R22 - Alarm Date/Month */
1106 0x0320, /* R23 - RTC Time Control */
1107 0x0000, /* R24 - System Interrupts */
1108 0x0000, /* R25 - Interrupt Status 1 */
1109 0x0000, /* R26 - Interrupt Status 2 */
1110 0x0000, /* R27 */
1111 0x0000, /* R28 - Under Voltage Interrupt status */
1112 0x0000, /* R29 - Over Current Interrupt status */
1113 0x0000, /* R30 - GPIO Interrupt Status */
1114 0x0000, /* R31 - Comparator Interrupt Status */
1115 0x3FFF, /* R32 - System Interrupts Mask */
1116 0x0000, /* R33 - Interrupt Status 1 Mask */
1117 0x0000, /* R34 - Interrupt Status 2 Mask */
1118 0x0000, /* R35 */
1119 0x0000, /* R36 - Under Voltage Interrupt status Mask */
1120 0x0000, /* R37 - Over Current Interrupt status Mask */
1121 0x0000, /* R38 - GPIO Interrupt Status Mask */
1122 0x0000, /* R39 - Comparator Interrupt Status Mask */
1123 0x0040, /* R40 - Clock Control 1 */
1124 0x0000, /* R41 - Clock Control 2 */
1125 0x3A00, /* R42 - FLL Control 1 */
1126 0x7086, /* R43 - FLL Control 2 */
1127 0xC226, /* R44 - FLL Control 3 */
1128 0x0000, /* R45 - FLL Control 4 */
1129 0x0000, /* R46 */
1130 0x0000, /* R47 */
1131 0x0000, /* R48 - DAC Control */
1132 0x0000, /* R49 */
1133 0x00C0, /* R50 - DAC Digital Volume L */
1134 0x00C0, /* R51 - DAC Digital Volume R */
1135 0x0000, /* R52 */
1136 0x0040, /* R53 - DAC LR Rate */
1137 0x0000, /* R54 - DAC Clock Control */
1138 0x0000, /* R55 */
1139 0x0000, /* R56 */
1140 0x0000, /* R57 */
1141 0x4000, /* R58 - DAC Mute */
1142 0x0000, /* R59 - DAC Mute Volume */
1143 0x0000, /* R60 - DAC Side */
1144 0x0000, /* R61 */
1145 0x0000, /* R62 */
1146 0x0000, /* R63 */
1147 0x8000, /* R64 - ADC Control */
1148 0x0000, /* R65 */
1149 0x00C0, /* R66 - ADC Digital Volume L */
1150 0x00C0, /* R67 - ADC Digital Volume R */
1151 0x0000, /* R68 - ADC Divider */
1152 0x0000, /* R69 */
1153 0x0040, /* R70 - ADC LR Rate */
1154 0x0000, /* R71 */
1155 0x0303, /* R72 - Input Control */
1156 0x0000, /* R73 - IN3 Input Control */
1157 0x0000, /* R74 - Mic Bias Control */
1158 0x0000, /* R75 */
1159 0x0000, /* R76 - Output Control */
1160 0x0000, /* R77 - Jack Detect */
1161 0x0000, /* R78 - Anti Pop Control */
1162 0x0000, /* R79 */
1163 0x0040, /* R80 - Left Input Volume */
1164 0x0040, /* R81 - Right Input Volume */
1165 0x0000, /* R82 */
1166 0x0000, /* R83 */
1167 0x0000, /* R84 */
1168 0x0000, /* R85 */
1169 0x0000, /* R86 */
1170 0x0000, /* R87 */
1171 0x0800, /* R88 - Left Mixer Control */
1172 0x1000, /* R89 - Right Mixer Control */
1173 0x0000, /* R90 */
1174 0x0000, /* R91 */
1175 0x0000, /* R92 - OUT3 Mixer Control */
1176 0x0000, /* R93 - OUT4 Mixer Control */
1177 0x0000, /* R94 */
1178 0x0000, /* R95 */
1179 0x0000, /* R96 - Output Left Mixer Volume */
1180 0x0000, /* R97 - Output Right Mixer Volume */
1181 0x0000, /* R98 - Input Mixer Volume L */
1182 0x0000, /* R99 - Input Mixer Volume R */
1183 0x0000, /* R100 - Input Mixer Volume */
1184 0x0000, /* R101 */
1185 0x0000, /* R102 */
1186 0x0000, /* R103 */
1187 0x00E4, /* R104 - OUT1L Volume */
1188 0x00E4, /* R105 - OUT1R Volume */
1189 0x00E4, /* R106 - OUT2L Volume */
1190 0x02E4, /* R107 - OUT2R Volume */
1191 0x0000, /* R108 */
1192 0x0000, /* R109 */
1193 0x0000, /* R110 */
1194 0x0000, /* R111 - BEEP Volume */
1195 0x0A00, /* R112 - AI Formating */
1196 0x0000, /* R113 - ADC DAC COMP */
1197 0x0020, /* R114 - AI ADC Control */
1198 0x0020, /* R115 - AI DAC Control */
1199 0x0000, /* R116 */
1200 0x0000, /* R117 */
1201 0x0000, /* R118 */
1202 0x0000, /* R119 */
1203 0x0000, /* R120 */
1204 0x0000, /* R121 */
1205 0x0000, /* R122 */
1206 0x0000, /* R123 */
1207 0x0000, /* R124 */
1208 0x0000, /* R125 */
1209 0x0000, /* R126 */
1210 0x0000, /* R127 */
1211 0x1FFF, /* R128 - GPIO Debounce */
1212 0x0000, /* R129 - GPIO Pin pull up Control */
1213 0x0000, /* R130 - GPIO Pull down Control */
1214 0x0000, /* R131 - GPIO Interrupt Mode */
1215 0x0000, /* R132 */
1216 0x0000, /* R133 - GPIO Control */
1217 0x0FFC, /* R134 - GPIO Configuration (i/o) */
1218 0x0FFC, /* R135 - GPIO Pin Polarity / Type */
1219 0x0000, /* R136 */
1220 0x0000, /* R137 */
1221 0x0000, /* R138 */
1222 0x0000, /* R139 */
1223 0x0013, /* R140 - GPIO Function Select 1 */
1224 0x0000, /* R141 - GPIO Function Select 2 */
1225 0x0000, /* R142 - GPIO Function Select 3 */
1226 0x0003, /* R143 - GPIO Function Select 4 */
1227 0x0000, /* R144 - Digitiser Control (1) */
1228 0x0002, /* R145 - Digitiser Control (2) */
1229 0x0000, /* R146 */
1230 0x0000, /* R147 */
1231 0x0000, /* R148 */
1232 0x0000, /* R149 */
1233 0x0000, /* R150 */
1234 0x0000, /* R151 */
1235 0x7000, /* R152 - AUX1 Readback */
1236 0x7000, /* R153 - AUX2 Readback */
1237 0x7000, /* R154 - AUX3 Readback */
1238 0x7000, /* R155 - AUX4 Readback */
1239 0x0000, /* R156 - USB Voltage Readback */
1240 0x0000, /* R157 - LINE Voltage Readback */
1241 0x0000, /* R158 - BATT Voltage Readback */
1242 0x0000, /* R159 - Chip Temp Readback */
1243 0x0000, /* R160 */
1244 0x0000, /* R161 */
1245 0x0000, /* R162 */
1246 0x0000, /* R163 - Generic Comparator Control */
1247 0x0000, /* R164 - Generic comparator 1 */
1248 0x0000, /* R165 - Generic comparator 2 */
1249 0x0000, /* R166 - Generic comparator 3 */
1250 0x0000, /* R167 - Generic comparator 4 */
1251 0xA00F, /* R168 - Battery Charger Control 1 */
1252 0x0B06, /* R169 - Battery Charger Control 2 */
1253 0x0000, /* R170 - Battery Charger Control 3 */
1254 0x0000, /* R171 */
1255 0x0000, /* R172 - Current Sink Driver A */
1256 0x0000, /* R173 - CSA Flash control */
1257 0x0000, /* R174 */
1258 0x0000, /* R175 */
1259 0x0000, /* R176 - DCDC/LDO requested */
1260 0x032D, /* R177 - DCDC Active options */
1261 0x0000, /* R178 - DCDC Sleep options */
1262 0x0025, /* R179 - Power-check comparator */
1263 0x000E, /* R180 - DCDC1 Control */
1264 0x0000, /* R181 - DCDC1 Timeouts */
1265 0x1006, /* R182 - DCDC1 Low Power */
1266 0x0018, /* R183 - DCDC2 Control */
1267 0x0000, /* R184 - DCDC2 Timeouts */
1268 0x0000, /* R185 */
1269 0x0000, /* R186 - DCDC3 Control */
1270 0x0000, /* R187 - DCDC3 Timeouts */
1271 0x0006, /* R188 - DCDC3 Low Power */
1272 0x0000, /* R189 - DCDC4 Control */
1273 0x0000, /* R190 - DCDC4 Timeouts */
1274 0x0006, /* R191 - DCDC4 Low Power */
1275 0x0008, /* R192 */
1276 0x0000, /* R193 */
1277 0x0000, /* R194 */
1278 0x0000, /* R195 */
1279 0x0000, /* R196 */
1280 0x0006, /* R197 */
1281 0x0000, /* R198 */
1282 0x0003, /* R199 - Limit Switch Control */
1283 0x001C, /* R200 - LDO1 Control */
1284 0x0000, /* R201 - LDO1 Timeouts */
1285 0x001C, /* R202 - LDO1 Low Power */
1286 0x001B, /* R203 - LDO2 Control */
1287 0x0000, /* R204 - LDO2 Timeouts */
1288 0x001C, /* R205 - LDO2 Low Power */
1289 0x001B, /* R206 - LDO3 Control */
1290 0x0000, /* R207 - LDO3 Timeouts */
1291 0x001C, /* R208 - LDO3 Low Power */
1292 0x001B, /* R209 - LDO4 Control */
1293 0x0000, /* R210 - LDO4 Timeouts */
1294 0x001C, /* R211 - LDO4 Low Power */
1295 0x0000, /* R212 */
1296 0x0000, /* R213 */
1297 0x0000, /* R214 */
1298 0x0000, /* R215 - VCC_FAULT Masks */
1299 0x001F, /* R216 - Main Bandgap Control */
1300 0x0000, /* R217 - OSC Control */
1301 0x9000, /* R218 - RTC Tick Control */
1302 0x0000, /* R219 - Security1 */
1303 0x4000, /* R220 */
1304 0x0000, /* R221 */
1305 0x0000, /* R222 */
1306 0x0000, /* R223 */
1307 0x0000, /* R224 - Signal overrides */
1308 0x0000, /* R225 - DCDC/LDO status */
1309 0x0000, /* R226 - Charger Overides/status */
1310 0x0000, /* R227 - misc overrides */
1311 0x0000, /* R228 - Supply overrides/status 1 */
1312 0x0000, /* R229 - Supply overrides/status 2 */
1313 0xE000, /* R230 - GPIO Pin Status */
1314 0x0000, /* R231 - comparotor overrides */
1315 0x0000, /* R232 */
1316 0x0000, /* R233 - State Machine status */
1317 0x1200, /* R234 - FLL Test 1 */
1318 0x0000, /* R235 */
1319 0x8000, /* R236 */
1320 0x0000, /* R237 */
1321 0x0000, /* R238 */
1322 0x0000, /* R239 */
1323 0x0003, /* R240 */
1324 0x0000, /* R241 */
1325 0x0000, /* R242 */
1326 0x0004, /* R243 */
1327 0x0300, /* R244 */
1328 0x0000, /* R245 */
1329 0x0200, /* R246 */
1330 0x0000, /* R247 */
1331 0x1000, /* R248 - DCDC1 Test Controls */
1332 0x1000, /* R249 */
1333 0x1000, /* R250 - DCDC3 Test Controls */
1334 0x1000, /* R251 - DCDC4 Test Controls */
1335};
1336#endif
1337
1338#ifdef CONFIG_MFD_WM8351_CONFIG_MODE_1
1339
1340#undef WM8350_HAVE_CONFIG_MODE
1341#define WM8350_HAVE_CONFIG_MODE
1342
1343const u16 wm8351_mode1_defaults[] = {
1344 0x6143, /* R0 - Reset/ID */
1345 0x0000, /* R1 - ID */
1346 0x0001, /* R2 - Revision */
1347 0x1C02, /* R3 - System Control 1 */
1348 0x0204, /* R4 - System Control 2 */
1349 0x0000, /* R5 - System Hibernate */
1350 0x8A00, /* R6 - Interface Control */
1351 0x0000, /* R7 */
1352 0x8000, /* R8 - Power mgmt (1) */
1353 0x0000, /* R9 - Power mgmt (2) */
1354 0x0000, /* R10 - Power mgmt (3) */
1355 0x2000, /* R11 - Power mgmt (4) */
1356 0x0E00, /* R12 - Power mgmt (5) */
1357 0x0000, /* R13 - Power mgmt (6) */
1358 0x0000, /* R14 - Power mgmt (7) */
1359 0x0000, /* R15 */
1360 0x0000, /* R16 - RTC Seconds/Minutes */
1361 0x0100, /* R17 - RTC Hours/Day */
1362 0x0101, /* R18 - RTC Date/Month */
1363 0x1400, /* R19 - RTC Year */
1364 0x0000, /* R20 - Alarm Seconds/Minutes */
1365 0x0000, /* R21 - Alarm Hours/Day */
1366 0x0000, /* R22 - Alarm Date/Month */
1367 0x0320, /* R23 - RTC Time Control */
1368 0x0000, /* R24 - System Interrupts */
1369 0x0000, /* R25 - Interrupt Status 1 */
1370 0x0000, /* R26 - Interrupt Status 2 */
1371 0x0000, /* R27 */
1372 0x0000, /* R28 - Under Voltage Interrupt status */
1373 0x0000, /* R29 - Over Current Interrupt status */
1374 0x0000, /* R30 - GPIO Interrupt Status */
1375 0x0000, /* R31 - Comparator Interrupt Status */
1376 0x3FFF, /* R32 - System Interrupts Mask */
1377 0x0000, /* R33 - Interrupt Status 1 Mask */
1378 0x0000, /* R34 - Interrupt Status 2 Mask */
1379 0x0000, /* R35 */
1380 0x0000, /* R36 - Under Voltage Interrupt status Mask */
1381 0x0000, /* R37 - Over Current Interrupt status Mask */
1382 0x0000, /* R38 - GPIO Interrupt Status Mask */
1383 0x0000, /* R39 - Comparator Interrupt Status Mask */
1384 0x0040, /* R40 - Clock Control 1 */
1385 0x0000, /* R41 - Clock Control 2 */
1386 0x3A00, /* R42 - FLL Control 1 */
1387 0x7086, /* R43 - FLL Control 2 */
1388 0xC226, /* R44 - FLL Control 3 */
1389 0x0000, /* R45 - FLL Control 4 */
1390 0x0000, /* R46 */
1391 0x0000, /* R47 */
1392 0x0000, /* R48 - DAC Control */
1393 0x0000, /* R49 */
1394 0x00C0, /* R50 - DAC Digital Volume L */
1395 0x00C0, /* R51 - DAC Digital Volume R */
1396 0x0000, /* R52 */
1397 0x0040, /* R53 - DAC LR Rate */
1398 0x0000, /* R54 - DAC Clock Control */
1399 0x0000, /* R55 */
1400 0x0000, /* R56 */
1401 0x0000, /* R57 */
1402 0x4000, /* R58 - DAC Mute */
1403 0x0000, /* R59 - DAC Mute Volume */
1404 0x0000, /* R60 - DAC Side */
1405 0x0000, /* R61 */
1406 0x0000, /* R62 */
1407 0x0000, /* R63 */
1408 0x8000, /* R64 - ADC Control */
1409 0x0000, /* R65 */
1410 0x00C0, /* R66 - ADC Digital Volume L */
1411 0x00C0, /* R67 - ADC Digital Volume R */
1412 0x0000, /* R68 - ADC Divider */
1413 0x0000, /* R69 */
1414 0x0040, /* R70 - ADC LR Rate */
1415 0x0000, /* R71 */
1416 0x0303, /* R72 - Input Control */
1417 0x0000, /* R73 - IN3 Input Control */
1418 0x0000, /* R74 - Mic Bias Control */
1419 0x0000, /* R75 */
1420 0x0000, /* R76 - Output Control */
1421 0x0000, /* R77 - Jack Detect */
1422 0x0000, /* R78 - Anti Pop Control */
1423 0x0000, /* R79 */
1424 0x0040, /* R80 - Left Input Volume */
1425 0x0040, /* R81 - Right Input Volume */
1426 0x0000, /* R82 */
1427 0x0000, /* R83 */
1428 0x0000, /* R84 */
1429 0x0000, /* R85 */
1430 0x0000, /* R86 */
1431 0x0000, /* R87 */
1432 0x0800, /* R88 - Left Mixer Control */
1433 0x1000, /* R89 - Right Mixer Control */
1434 0x0000, /* R90 */
1435 0x0000, /* R91 */
1436 0x0000, /* R92 - OUT3 Mixer Control */
1437 0x0000, /* R93 - OUT4 Mixer Control */
1438 0x0000, /* R94 */
1439 0x0000, /* R95 */
1440 0x0000, /* R96 - Output Left Mixer Volume */
1441 0x0000, /* R97 - Output Right Mixer Volume */
1442 0x0000, /* R98 - Input Mixer Volume L */
1443 0x0000, /* R99 - Input Mixer Volume R */
1444 0x0000, /* R100 - Input Mixer Volume */
1445 0x0000, /* R101 */
1446 0x0000, /* R102 */
1447 0x0000, /* R103 */
1448 0x00E4, /* R104 - OUT1L Volume */
1449 0x00E4, /* R105 - OUT1R Volume */
1450 0x00E4, /* R106 - OUT2L Volume */
1451 0x02E4, /* R107 - OUT2R Volume */
1452 0x0000, /* R108 */
1453 0x0000, /* R109 */
1454 0x0000, /* R110 */
1455 0x0000, /* R111 - BEEP Volume */
1456 0x0A00, /* R112 - AI Formating */
1457 0x0000, /* R113 - ADC DAC COMP */
1458 0x0020, /* R114 - AI ADC Control */
1459 0x0020, /* R115 - AI DAC Control */
1460 0x0000, /* R116 */
1461 0x0000, /* R117 */
1462 0x0000, /* R118 */
1463 0x0000, /* R119 */
1464 0x0000, /* R120 */
1465 0x0000, /* R121 */
1466 0x0000, /* R122 */
1467 0x0000, /* R123 */
1468 0x0000, /* R124 */
1469 0x0000, /* R125 */
1470 0x0000, /* R126 */
1471 0x0000, /* R127 */
1472 0x1FFF, /* R128 - GPIO Debounce */
1473 0x0000, /* R129 - GPIO Pin pull up Control */
1474 0x0000, /* R130 - GPIO Pull down Control */
1475 0x0000, /* R131 - GPIO Interrupt Mode */
1476 0x0000, /* R132 */
1477 0x0000, /* R133 - GPIO Control */
1478 0x0CFB, /* R134 - GPIO Configuration (i/o) */
1479 0x0C1F, /* R135 - GPIO Pin Polarity / Type */
1480 0x0000, /* R136 */
1481 0x0000, /* R137 */
1482 0x0000, /* R138 */
1483 0x0000, /* R139 */
1484 0x0300, /* R140 - GPIO Function Select 1 */
1485 0x1110, /* R141 - GPIO Function Select 2 */
1486 0x0013, /* R142 - GPIO Function Select 3 */
1487 0x0003, /* R143 - GPIO Function Select 4 */
1488 0x0000, /* R144 - Digitiser Control (1) */
1489 0x0002, /* R145 - Digitiser Control (2) */
1490 0x0000, /* R146 */
1491 0x0000, /* R147 */
1492 0x0000, /* R148 */
1493 0x0000, /* R149 */
1494 0x0000, /* R150 */
1495 0x0000, /* R151 */
1496 0x7000, /* R152 - AUX1 Readback */
1497 0x7000, /* R153 - AUX2 Readback */
1498 0x7000, /* R154 - AUX3 Readback */
1499 0x7000, /* R155 - AUX4 Readback */
1500 0x0000, /* R156 - USB Voltage Readback */
1501 0x0000, /* R157 - LINE Voltage Readback */
1502 0x0000, /* R158 - BATT Voltage Readback */
1503 0x0000, /* R159 - Chip Temp Readback */
1504 0x0000, /* R160 */
1505 0x0000, /* R161 */
1506 0x0000, /* R162 */
1507 0x0000, /* R163 - Generic Comparator Control */
1508 0x0000, /* R164 - Generic comparator 1 */
1509 0x0000, /* R165 - Generic comparator 2 */
1510 0x0000, /* R166 - Generic comparator 3 */
1511 0x0000, /* R167 - Generic comparator 4 */
1512 0xA00F, /* R168 - Battery Charger Control 1 */
1513 0x0B06, /* R169 - Battery Charger Control 2 */
1514 0x0000, /* R170 - Battery Charger Control 3 */
1515 0x0000, /* R171 */
1516 0x0000, /* R172 - Current Sink Driver A */
1517 0x0000, /* R173 - CSA Flash control */
1518 0x0000, /* R174 */
1519 0x0000, /* R175 */
1520 0x0000, /* R176 - DCDC/LDO requested */
1521 0x032D, /* R177 - DCDC Active options */
1522 0x0000, /* R178 - DCDC Sleep options */
1523 0x0025, /* R179 - Power-check comparator */
1524 0x000E, /* R180 - DCDC1 Control */
1525 0x0C00, /* R181 - DCDC1 Timeouts */
1526 0x1006, /* R182 - DCDC1 Low Power */
1527 0x0018, /* R183 - DCDC2 Control */
1528 0x0000, /* R184 - DCDC2 Timeouts */
1529 0x0000, /* R185 */
1530 0x0026, /* R186 - DCDC3 Control */
1531 0x0400, /* R187 - DCDC3 Timeouts */
1532 0x0006, /* R188 - DCDC3 Low Power */
1533 0x0062, /* R189 - DCDC4 Control */
1534 0x0800, /* R190 - DCDC4 Timeouts */
1535 0x0006, /* R191 - DCDC4 Low Power */
1536 0x0008, /* R192 */
1537 0x0000, /* R193 */
1538 0x0000, /* R194 */
1539 0x000A, /* R195 */
1540 0x1000, /* R196 */
1541 0x0006, /* R197 */
1542 0x0000, /* R198 */
1543 0x0003, /* R199 - Limit Switch Control */
1544 0x0006, /* R200 - LDO1 Control */
1545 0x0000, /* R201 - LDO1 Timeouts */
1546 0x001C, /* R202 - LDO1 Low Power */
1547 0x0010, /* R203 - LDO2 Control */
1548 0x0C00, /* R204 - LDO2 Timeouts */
1549 0x001C, /* R205 - LDO2 Low Power */
1550 0x001F, /* R206 - LDO3 Control */
1551 0x0800, /* R207 - LDO3 Timeouts */
1552 0x001C, /* R208 - LDO3 Low Power */
1553 0x000A, /* R209 - LDO4 Control */
1554 0x0800, /* R210 - LDO4 Timeouts */
1555 0x001C, /* R211 - LDO4 Low Power */
1556 0x0000, /* R212 */
1557 0x0000, /* R213 */
1558 0x0000, /* R214 */
1559 0x0000, /* R215 - VCC_FAULT Masks */
1560 0x001F, /* R216 - Main Bandgap Control */
1561 0x0000, /* R217 - OSC Control */
1562 0x9000, /* R218 - RTC Tick Control */
1563 0x0000, /* R219 - Security1 */
1564 0x4000, /* R220 */
1565 0x0000, /* R221 */
1566 0x0000, /* R222 */
1567 0x0000, /* R223 */
1568 0x0000, /* R224 - Signal overrides */
1569 0x0000, /* R225 - DCDC/LDO status */
1570 0x0000, /* R226 - Charger Overides/status */
1571 0x0000, /* R227 - misc overrides */
1572 0x0000, /* R228 - Supply overrides/status 1 */
1573 0x0000, /* R229 - Supply overrides/status 2 */
1574 0xE000, /* R230 - GPIO Pin Status */
1575 0x0000, /* R231 - comparotor overrides */
1576 0x0000, /* R232 */
1577 0x0000, /* R233 - State Machine status */
1578 0x1200, /* R234 - FLL Test 1 */
1579 0x0000, /* R235 */
1580 0x8000, /* R236 */
1581 0x0000, /* R237 */
1582 0x0000, /* R238 */
1583 0x0000, /* R239 */
1584 0x0003, /* R240 */
1585 0x0000, /* R241 */
1586 0x0000, /* R242 */
1587 0x0004, /* R243 */
1588 0x0300, /* R244 */
1589 0x0000, /* R245 */
1590 0x0200, /* R246 */
1591 0x1000, /* R247 */
1592 0x1000, /* R248 - DCDC1 Test Controls */
1593 0x1000, /* R249 */
1594 0x1000, /* R250 - DCDC3 Test Controls */
1595 0x1000, /* R251 - DCDC4 Test Controls */
1596};
1597#endif
1598
1599#ifdef CONFIG_MFD_WM8351_CONFIG_MODE_2
1600
1601#undef WM8350_HAVE_CONFIG_MODE
1602#define WM8350_HAVE_CONFIG_MODE
1603
1604const u16 wm8351_mode2_defaults[] = {
1605 0x6143, /* R0 - Reset/ID */
1606 0x0000, /* R1 - ID */
1607 0x0001, /* R2 - Revision */
1608 0x1C02, /* R3 - System Control 1 */
1609 0x0214, /* R4 - System Control 2 */
1610 0x0000, /* R5 - System Hibernate */
1611 0x8A00, /* R6 - Interface Control */
1612 0x0000, /* R7 */
1613 0x8000, /* R8 - Power mgmt (1) */
1614 0x0000, /* R9 - Power mgmt (2) */
1615 0x0000, /* R10 - Power mgmt (3) */
1616 0x2000, /* R11 - Power mgmt (4) */
1617 0x0E00, /* R12 - Power mgmt (5) */
1618 0x0000, /* R13 - Power mgmt (6) */
1619 0x0000, /* R14 - Power mgmt (7) */
1620 0x0000, /* R15 */
1621 0x0000, /* R16 - RTC Seconds/Minutes */
1622 0x0100, /* R17 - RTC Hours/Day */
1623 0x0101, /* R18 - RTC Date/Month */
1624 0x1400, /* R19 - RTC Year */
1625 0x0000, /* R20 - Alarm Seconds/Minutes */
1626 0x0000, /* R21 - Alarm Hours/Day */
1627 0x0000, /* R22 - Alarm Date/Month */
1628 0x0320, /* R23 - RTC Time Control */
1629 0x0000, /* R24 - System Interrupts */
1630 0x0000, /* R25 - Interrupt Status 1 */
1631 0x0000, /* R26 - Interrupt Status 2 */
1632 0x0000, /* R27 */
1633 0x0000, /* R28 - Under Voltage Interrupt status */
1634 0x0000, /* R29 - Over Current Interrupt status */
1635 0x0000, /* R30 - GPIO Interrupt Status */
1636 0x0000, /* R31 - Comparator Interrupt Status */
1637 0x3FFF, /* R32 - System Interrupts Mask */
1638 0x0000, /* R33 - Interrupt Status 1 Mask */
1639 0x0000, /* R34 - Interrupt Status 2 Mask */
1640 0x0000, /* R35 */
1641 0x0000, /* R36 - Under Voltage Interrupt status Mask */
1642 0x0000, /* R37 - Over Current Interrupt status Mask */
1643 0x0000, /* R38 - GPIO Interrupt Status Mask */
1644 0x0000, /* R39 - Comparator Interrupt Status Mask */
1645 0x0040, /* R40 - Clock Control 1 */
1646 0x0000, /* R41 - Clock Control 2 */
1647 0x3A00, /* R42 - FLL Control 1 */
1648 0x7086, /* R43 - FLL Control 2 */
1649 0xC226, /* R44 - FLL Control 3 */
1650 0x0000, /* R45 - FLL Control 4 */
1651 0x0000, /* R46 */
1652 0x0000, /* R47 */
1653 0x0000, /* R48 - DAC Control */
1654 0x0000, /* R49 */
1655 0x00C0, /* R50 - DAC Digital Volume L */
1656 0x00C0, /* R51 - DAC Digital Volume R */
1657 0x0000, /* R52 */
1658 0x0040, /* R53 - DAC LR Rate */
1659 0x0000, /* R54 - DAC Clock Control */
1660 0x0000, /* R55 */
1661 0x0000, /* R56 */
1662 0x0000, /* R57 */
1663 0x4000, /* R58 - DAC Mute */
1664 0x0000, /* R59 - DAC Mute Volume */
1665 0x0000, /* R60 - DAC Side */
1666 0x0000, /* R61 */
1667 0x0000, /* R62 */
1668 0x0000, /* R63 */
1669 0x8000, /* R64 - ADC Control */
1670 0x0000, /* R65 */
1671 0x00C0, /* R66 - ADC Digital Volume L */
1672 0x00C0, /* R67 - ADC Digital Volume R */
1673 0x0000, /* R68 - ADC Divider */
1674 0x0000, /* R69 */
1675 0x0040, /* R70 - ADC LR Rate */
1676 0x0000, /* R71 */
1677 0x0303, /* R72 - Input Control */
1678 0x0000, /* R73 - IN3 Input Control */
1679 0x0000, /* R74 - Mic Bias Control */
1680 0x0000, /* R75 */
1681 0x0000, /* R76 - Output Control */
1682 0x0000, /* R77 - Jack Detect */
1683 0x0000, /* R78 - Anti Pop Control */
1684 0x0000, /* R79 */
1685 0x0040, /* R80 - Left Input Volume */
1686 0x0040, /* R81 - Right Input Volume */
1687 0x0000, /* R82 */
1688 0x0000, /* R83 */
1689 0x0000, /* R84 */
1690 0x0000, /* R85 */
1691 0x0000, /* R86 */
1692 0x0000, /* R87 */
1693 0x0800, /* R88 - Left Mixer Control */
1694 0x1000, /* R89 - Right Mixer Control */
1695 0x0000, /* R90 */
1696 0x0000, /* R91 */
1697 0x0000, /* R92 - OUT3 Mixer Control */
1698 0x0000, /* R93 - OUT4 Mixer Control */
1699 0x0000, /* R94 */
1700 0x0000, /* R95 */
1701 0x0000, /* R96 - Output Left Mixer Volume */
1702 0x0000, /* R97 - Output Right Mixer Volume */
1703 0x0000, /* R98 - Input Mixer Volume L */
1704 0x0000, /* R99 - Input Mixer Volume R */
1705 0x0000, /* R100 - Input Mixer Volume */
1706 0x0000, /* R101 */
1707 0x0000, /* R102 */
1708 0x0000, /* R103 */
1709 0x00E4, /* R104 - OUT1L Volume */
1710 0x00E4, /* R105 - OUT1R Volume */
1711 0x00E4, /* R106 - OUT2L Volume */
1712 0x02E4, /* R107 - OUT2R Volume */
1713 0x0000, /* R108 */
1714 0x0000, /* R109 */
1715 0x0000, /* R110 */
1716 0x0000, /* R111 - BEEP Volume */
1717 0x0A00, /* R112 - AI Formating */
1718 0x0000, /* R113 - ADC DAC COMP */
1719 0x0020, /* R114 - AI ADC Control */
1720 0x0020, /* R115 - AI DAC Control */
1721 0x0000, /* R116 */
1722 0x0000, /* R117 */
1723 0x0000, /* R118 */
1724 0x0000, /* R119 */
1725 0x0000, /* R120 */
1726 0x0000, /* R121 */
1727 0x0000, /* R122 */
1728 0x0000, /* R123 */
1729 0x0000, /* R124 */
1730 0x0000, /* R125 */
1731 0x0000, /* R126 */
1732 0x0000, /* R127 */
1733 0x1FFF, /* R128 - GPIO Debounce */
1734 0x0000, /* R129 - GPIO Pin pull up Control */
1735 0x0110, /* R130 - GPIO Pull down Control */
1736 0x0000, /* R131 - GPIO Interrupt Mode */
1737 0x0000, /* R132 */
1738 0x0000, /* R133 - GPIO Control */
1739 0x09FA, /* R134 - GPIO Configuration (i/o) */
1740 0x0DF6, /* R135 - GPIO Pin Polarity / Type */
1741 0x0000, /* R136 */
1742 0x0000, /* R137 */
1743 0x0000, /* R138 */
1744 0x0000, /* R139 */
1745 0x1310, /* R140 - GPIO Function Select 1 */
1746 0x0003, /* R141 - GPIO Function Select 2 */
1747 0x2000, /* R142 - GPIO Function Select 3 */
1748 0x0000, /* R143 - GPIO Function Select 4 */
1749 0x0000, /* R144 - Digitiser Control (1) */
1750 0x0002, /* R145 - Digitiser Control (2) */
1751 0x0000, /* R146 */
1752 0x0000, /* R147 */
1753 0x0000, /* R148 */
1754 0x0000, /* R149 */
1755 0x0000, /* R150 */
1756 0x0000, /* R151 */
1757 0x7000, /* R152 - AUX1 Readback */
1758 0x7000, /* R153 - AUX2 Readback */
1759 0x7000, /* R154 - AUX3 Readback */
1760 0x7000, /* R155 - AUX4 Readback */
1761 0x0000, /* R156 - USB Voltage Readback */
1762 0x0000, /* R157 - LINE Voltage Readback */
1763 0x0000, /* R158 - BATT Voltage Readback */
1764 0x0000, /* R159 - Chip Temp Readback */
1765 0x0000, /* R160 */
1766 0x0000, /* R161 */
1767 0x0000, /* R162 */
1768 0x0000, /* R163 - Generic Comparator Control */
1769 0x0000, /* R164 - Generic comparator 1 */
1770 0x0000, /* R165 - Generic comparator 2 */
1771 0x0000, /* R166 - Generic comparator 3 */
1772 0x0000, /* R167 - Generic comparator 4 */
1773 0xA00F, /* R168 - Battery Charger Control 1 */
1774 0x0B06, /* R169 - Battery Charger Control 2 */
1775 0x0000, /* R170 - Battery Charger Control 3 */
1776 0x0000, /* R171 */
1777 0x0000, /* R172 - Current Sink Driver A */
1778 0x0000, /* R173 - CSA Flash control */
1779 0x0000, /* R174 */
1780 0x0000, /* R175 */
1781 0x0000, /* R176 - DCDC/LDO requested */
1782 0x032D, /* R177 - DCDC Active options */
1783 0x0000, /* R178 - DCDC Sleep options */
1784 0x0025, /* R179 - Power-check comparator */
1785 0x001A, /* R180 - DCDC1 Control */
1786 0x0800, /* R181 - DCDC1 Timeouts */
1787 0x1006, /* R182 - DCDC1 Low Power */
1788 0x0018, /* R183 - DCDC2 Control */
1789 0x0000, /* R184 - DCDC2 Timeouts */
1790 0x0000, /* R185 */
1791 0x0056, /* R186 - DCDC3 Control */
1792 0x0400, /* R187 - DCDC3 Timeouts */
1793 0x0006, /* R188 - DCDC3 Low Power */
1794 0x0026, /* R189 - DCDC4 Control */
1795 0x0C00, /* R190 - DCDC4 Timeouts */
1796 0x0006, /* R191 - DCDC4 Low Power */
1797 0x0008, /* R192 */
1798 0x0000, /* R193 */
1799 0x0000, /* R194 */
1800 0x0026, /* R195 */
1801 0x0C00, /* R196 */
1802 0x0006, /* R197 */
1803 0x0000, /* R198 */
1804 0x0003, /* R199 - Limit Switch Control */
1805 0x001C, /* R200 - LDO1 Control */
1806 0x0400, /* R201 - LDO1 Timeouts */
1807 0x001C, /* R202 - LDO1 Low Power */
1808 0x0010, /* R203 - LDO2 Control */
1809 0x0C00, /* R204 - LDO2 Timeouts */
1810 0x001C, /* R205 - LDO2 Low Power */
1811 0x0015, /* R206 - LDO3 Control */
1812 0x0000, /* R207 - LDO3 Timeouts */
1813 0x001C, /* R208 - LDO3 Low Power */
1814 0x001A, /* R209 - LDO4 Control */
1815 0x0000, /* R210 - LDO4 Timeouts */
1816 0x001C, /* R211 - LDO4 Low Power */
1817 0x0000, /* R212 */
1818 0x0000, /* R213 */
1819 0x0000, /* R214 */
1820 0x0000, /* R215 - VCC_FAULT Masks */
1821 0x001F, /* R216 - Main Bandgap Control */
1822 0x0000, /* R217 - OSC Control */
1823 0x9000, /* R218 - RTC Tick Control */
1824 0x0000, /* R219 - Security1 */
1825 0x4000, /* R220 */
1826 0x0000, /* R221 */
1827 0x0000, /* R222 */
1828 0x0000, /* R223 */
1829 0x0000, /* R224 - Signal overrides */
1830 0x0000, /* R225 - DCDC/LDO status */
1831 0x0000, /* R226 - Charger Overides/status */
1832 0x0000, /* R227 - misc overrides */
1833 0x0000, /* R228 - Supply overrides/status 1 */
1834 0x0000, /* R229 - Supply overrides/status 2 */
1835 0xE000, /* R230 - GPIO Pin Status */
1836 0x0000, /* R231 - comparotor overrides */
1837 0x0000, /* R232 */
1838 0x0000, /* R233 - State Machine status */
1839 0x1200, /* R234 - FLL Test 1 */
1840 0x0000, /* R235 */
1841 0x8000, /* R236 */
1842 0x0000, /* R237 */
1843 0x0000, /* R238 */
1844 0x0000, /* R239 */
1845 0x0003, /* R240 */
1846 0x0000, /* R241 */
1847 0x0000, /* R242 */
1848 0x0004, /* R243 */
1849 0x0300, /* R244 */
1850 0x0000, /* R245 */
1851 0x0200, /* R246 */
1852 0x0000, /* R247 */
1853 0x1000, /* R248 - DCDC1 Test Controls */
1854 0x1000, /* R249 */
1855 0x1000, /* R250 - DCDC3 Test Controls */
1856 0x1000, /* R251 - DCDC4 Test Controls */
1857};
1858#endif
1859
1860#ifdef CONFIG_MFD_WM8351_CONFIG_MODE_3
1861
1862#undef WM8350_HAVE_CONFIG_MODE
1863#define WM8350_HAVE_CONFIG_MODE
1864
1865const u16 wm8351_mode3_defaults[] = {
1866 0x6143, /* R0 - Reset/ID */
1867 0x0000, /* R1 - ID */
1868 0x0001, /* R2 - Revision */
1869 0x1C02, /* R3 - System Control 1 */
1870 0x0204, /* R4 - System Control 2 */
1871 0x0000, /* R5 - System Hibernate */
1872 0x8A00, /* R6 - Interface Control */
1873 0x0000, /* R7 */
1874 0x8000, /* R8 - Power mgmt (1) */
1875 0x0000, /* R9 - Power mgmt (2) */
1876 0x0000, /* R10 - Power mgmt (3) */
1877 0x2000, /* R11 - Power mgmt (4) */
1878 0x0E00, /* R12 - Power mgmt (5) */
1879 0x0000, /* R13 - Power mgmt (6) */
1880 0x0000, /* R14 - Power mgmt (7) */
1881 0x0000, /* R15 */
1882 0x0000, /* R16 - RTC Seconds/Minutes */
1883 0x0100, /* R17 - RTC Hours/Day */
1884 0x0101, /* R18 - RTC Date/Month */
1885 0x1400, /* R19 - RTC Year */
1886 0x0000, /* R20 - Alarm Seconds/Minutes */
1887 0x0000, /* R21 - Alarm Hours/Day */
1888 0x0000, /* R22 - Alarm Date/Month */
1889 0x0320, /* R23 - RTC Time Control */
1890 0x0000, /* R24 - System Interrupts */
1891 0x0000, /* R25 - Interrupt Status 1 */
1892 0x0000, /* R26 - Interrupt Status 2 */
1893 0x0000, /* R27 */
1894 0x0000, /* R28 - Under Voltage Interrupt status */
1895 0x0000, /* R29 - Over Current Interrupt status */
1896 0x0000, /* R30 - GPIO Interrupt Status */
1897 0x0000, /* R31 - Comparator Interrupt Status */
1898 0x3FFF, /* R32 - System Interrupts Mask */
1899 0x0000, /* R33 - Interrupt Status 1 Mask */
1900 0x0000, /* R34 - Interrupt Status 2 Mask */
1901 0x0000, /* R35 */
1902 0x0000, /* R36 - Under Voltage Interrupt status Mask */
1903 0x0000, /* R37 - Over Current Interrupt status Mask */
1904 0x0000, /* R38 - GPIO Interrupt Status Mask */
1905 0x0000, /* R39 - Comparator Interrupt Status Mask */
1906 0x0040, /* R40 - Clock Control 1 */
1907 0x0000, /* R41 - Clock Control 2 */
1908 0x3A00, /* R42 - FLL Control 1 */
1909 0x7086, /* R43 - FLL Control 2 */
1910 0xC226, /* R44 - FLL Control 3 */
1911 0x0000, /* R45 - FLL Control 4 */
1912 0x0000, /* R46 */
1913 0x0000, /* R47 */
1914 0x0000, /* R48 - DAC Control */
1915 0x0000, /* R49 */
1916 0x00C0, /* R50 - DAC Digital Volume L */
1917 0x00C0, /* R51 - DAC Digital Volume R */
1918 0x0000, /* R52 */
1919 0x0040, /* R53 - DAC LR Rate */
1920 0x0000, /* R54 - DAC Clock Control */
1921 0x0000, /* R55 */
1922 0x0000, /* R56 */
1923 0x0000, /* R57 */
1924 0x4000, /* R58 - DAC Mute */
1925 0x0000, /* R59 - DAC Mute Volume */
1926 0x0000, /* R60 - DAC Side */
1927 0x0000, /* R61 */
1928 0x0000, /* R62 */
1929 0x0000, /* R63 */
1930 0x8000, /* R64 - ADC Control */
1931 0x0000, /* R65 */
1932 0x00C0, /* R66 - ADC Digital Volume L */
1933 0x00C0, /* R67 - ADC Digital Volume R */
1934 0x0000, /* R68 - ADC Divider */
1935 0x0000, /* R69 */
1936 0x0040, /* R70 - ADC LR Rate */
1937 0x0000, /* R71 */
1938 0x0303, /* R72 - Input Control */
1939 0x0000, /* R73 - IN3 Input Control */
1940 0x0000, /* R74 - Mic Bias Control */
1941 0x0000, /* R75 */
1942 0x0000, /* R76 - Output Control */
1943 0x0000, /* R77 - Jack Detect */
1944 0x0000, /* R78 - Anti Pop Control */
1945 0x0000, /* R79 */
1946 0x0040, /* R80 - Left Input Volume */
1947 0x0040, /* R81 - Right Input Volume */
1948 0x0000, /* R82 */
1949 0x0000, /* R83 */
1950 0x0000, /* R84 */
1951 0x0000, /* R85 */
1952 0x0000, /* R86 */
1953 0x0000, /* R87 */
1954 0x0800, /* R88 - Left Mixer Control */
1955 0x1000, /* R89 - Right Mixer Control */
1956 0x0000, /* R90 */
1957 0x0000, /* R91 */
1958 0x0000, /* R92 - OUT3 Mixer Control */
1959 0x0000, /* R93 - OUT4 Mixer Control */
1960 0x0000, /* R94 */
1961 0x0000, /* R95 */
1962 0x0000, /* R96 - Output Left Mixer Volume */
1963 0x0000, /* R97 - Output Right Mixer Volume */
1964 0x0000, /* R98 - Input Mixer Volume L */
1965 0x0000, /* R99 - Input Mixer Volume R */
1966 0x0000, /* R100 - Input Mixer Volume */
1967 0x0000, /* R101 */
1968 0x0000, /* R102 */
1969 0x0000, /* R103 */
1970 0x00E4, /* R104 - OUT1L Volume */
1971 0x00E4, /* R105 - OUT1R Volume */
1972 0x00E4, /* R106 - OUT2L Volume */
1973 0x02E4, /* R107 - OUT2R Volume */
1974 0x0000, /* R108 */
1975 0x0000, /* R109 */
1976 0x0000, /* R110 */
1977 0x0000, /* R111 - BEEP Volume */
1978 0x0A00, /* R112 - AI Formating */
1979 0x0000, /* R113 - ADC DAC COMP */
1980 0x0020, /* R114 - AI ADC Control */
1981 0x0020, /* R115 - AI DAC Control */
1982 0x0000, /* R116 */
1983 0x0000, /* R117 */
1984 0x0000, /* R118 */
1985 0x0000, /* R119 */
1986 0x0000, /* R120 */
1987 0x0000, /* R121 */
1988 0x0000, /* R122 */
1989 0x0000, /* R123 */
1990 0x0000, /* R124 */
1991 0x0000, /* R125 */
1992 0x0000, /* R126 */
1993 0x0000, /* R127 */
1994 0x1FFF, /* R128 - GPIO Debounce */
1995 0x0010, /* R129 - GPIO Pin pull up Control */
1996 0x0000, /* R130 - GPIO Pull down Control */
1997 0x0000, /* R131 - GPIO Interrupt Mode */
1998 0x0000, /* R132 */
1999 0x0000, /* R133 - GPIO Control */
2000 0x0BFB, /* R134 - GPIO Configuration (i/o) */
2001 0x0FFD, /* R135 - GPIO Pin Polarity / Type */
2002 0x0000, /* R136 */
2003 0x0000, /* R137 */
2004 0x0000, /* R138 */
2005 0x0000, /* R139 */
2006 0x0310, /* R140 - GPIO Function Select 1 */
2007 0x0001, /* R141 - GPIO Function Select 2 */
2008 0x2300, /* R142 - GPIO Function Select 3 */
2009 0x0003, /* R143 - GPIO Function Select 4 */
2010 0x0000, /* R144 - Digitiser Control (1) */
2011 0x0002, /* R145 - Digitiser Control (2) */
2012 0x0000, /* R146 */
2013 0x0000, /* R147 */
2014 0x0000, /* R148 */
2015 0x0000, /* R149 */
2016 0x0000, /* R150 */
2017 0x0000, /* R151 */
2018 0x7000, /* R152 - AUX1 Readback */
2019 0x7000, /* R153 - AUX2 Readback */
2020 0x7000, /* R154 - AUX3 Readback */
2021 0x7000, /* R155 - AUX4 Readback */
2022 0x0000, /* R156 - USB Voltage Readback */
2023 0x0000, /* R157 - LINE Voltage Readback */
2024 0x0000, /* R158 - BATT Voltage Readback */
2025 0x0000, /* R159 - Chip Temp Readback */
2026 0x0000, /* R160 */
2027 0x0000, /* R161 */
2028 0x0000, /* R162 */
2029 0x0000, /* R163 - Generic Comparator Control */
2030 0x0000, /* R164 - Generic comparator 1 */
2031 0x0000, /* R165 - Generic comparator 2 */
2032 0x0000, /* R166 - Generic comparator 3 */
2033 0x0000, /* R167 - Generic comparator 4 */
2034 0xA00F, /* R168 - Battery Charger Control 1 */
2035 0x0B06, /* R169 - Battery Charger Control 2 */
2036 0x0000, /* R170 - Battery Charger Control 3 */
2037 0x0000, /* R171 */
2038 0x0000, /* R172 - Current Sink Driver A */
2039 0x0000, /* R173 - CSA Flash control */
2040 0x0000, /* R174 */
2041 0x0000, /* R175 */
2042 0x0000, /* R176 - DCDC/LDO requested */
2043 0x032D, /* R177 - DCDC Active options */
2044 0x0000, /* R178 - DCDC Sleep options */
2045 0x0025, /* R179 - Power-check comparator */
2046 0x000E, /* R180 - DCDC1 Control */
2047 0x0400, /* R181 - DCDC1 Timeouts */
2048 0x1006, /* R182 - DCDC1 Low Power */
2049 0x0018, /* R183 - DCDC2 Control */
2050 0x0000, /* R184 - DCDC2 Timeouts */
2051 0x0000, /* R185 */
2052 0x0026, /* R186 - DCDC3 Control */
2053 0x0800, /* R187 - DCDC3 Timeouts */
2054 0x0006, /* R188 - DCDC3 Low Power */
2055 0x0062, /* R189 - DCDC4 Control */
2056 0x1400, /* R190 - DCDC4 Timeouts */
2057 0x0006, /* R191 - DCDC4 Low Power */
2058 0x0008, /* R192 */
2059 0x0000, /* R193 */
2060 0x0000, /* R194 */
2061 0x0026, /* R195 */
2062 0x0400, /* R196 */
2063 0x0006, /* R197 */
2064 0x0000, /* R198 */
2065 0x0003, /* R199 - Limit Switch Control */
2066 0x0006, /* R200 - LDO1 Control */
2067 0x0C00, /* R201 - LDO1 Timeouts */
2068 0x001C, /* R202 - LDO1 Low Power */
2069 0x0016, /* R203 - LDO2 Control */
2070 0x0000, /* R204 - LDO2 Timeouts */
2071 0x001C, /* R205 - LDO2 Low Power */
2072 0x0019, /* R206 - LDO3 Control */
2073 0x0000, /* R207 - LDO3 Timeouts */
2074 0x001C, /* R208 - LDO3 Low Power */
2075 0x001A, /* R209 - LDO4 Control */
2076 0x1000, /* R210 - LDO4 Timeouts */
2077 0x001C, /* R211 - LDO4 Low Power */
2078 0x0000, /* R212 */
2079 0x0000, /* R213 */
2080 0x0000, /* R214 */
2081 0x0000, /* R215 - VCC_FAULT Masks */
2082 0x001F, /* R216 - Main Bandgap Control */
2083 0x0000, /* R217 - OSC Control */
2084 0x9000, /* R218 - RTC Tick Control */
2085 0x0000, /* R219 - Security1 */
2086 0x4000, /* R220 */
2087 0x0000, /* R221 */
2088 0x0000, /* R222 */
2089 0x0000, /* R223 */
2090 0x0000, /* R224 - Signal overrides */
2091 0x0000, /* R225 - DCDC/LDO status */
2092 0x0000, /* R226 - Charger Overides/status */
2093 0x0000, /* R227 - misc overrides */
2094 0x0000, /* R228 - Supply overrides/status 1 */
2095 0x0000, /* R229 - Supply overrides/status 2 */
2096 0xE000, /* R230 - GPIO Pin Status */
2097 0x0000, /* R231 - comparotor overrides */
2098 0x0000, /* R232 */
2099 0x0000, /* R233 - State Machine status */
2100 0x1200, /* R234 - FLL Test 1 */
2101 0x0000, /* R235 */
2102 0x8000, /* R236 */
2103 0x0000, /* R237 */
2104 0x0000, /* R238 */
2105 0x0000, /* R239 */
2106 0x0003, /* R240 */
2107 0x0000, /* R241 */
2108 0x0000, /* R242 */
2109 0x0004, /* R243 */
2110 0x0300, /* R244 */
2111 0x0000, /* R245 */
2112 0x0200, /* R246 */
2113 0x0000, /* R247 */
2114 0x1000, /* R248 - DCDC1 Test Controls */
2115 0x1000, /* R249 */
2116 0x1000, /* R250 - DCDC3 Test Controls */
2117 0x1000, /* R251 - DCDC4 Test Controls */
2118};
2119#endif
2120
2121#ifdef CONFIG_MFD_WM8352_CONFIG_MODE_0
2122
2123#undef WM8350_HAVE_CONFIG_MODE
2124#define WM8350_HAVE_CONFIG_MODE
2125
2126const u16 wm8352_mode0_defaults[] = {
2127 0x6143, /* R0 - Reset/ID */
2128 0x0000, /* R1 - ID */
2129 0x0002, /* R2 - Revision */
2130 0x1C02, /* R3 - System Control 1 */
2131 0x0004, /* R4 - System Control 2 */
2132 0x0000, /* R5 - System Hibernate */
2133 0x8A00, /* R6 - Interface Control */
2134 0x0000, /* R7 */
2135 0x8000, /* R8 - Power mgmt (1) */
2136 0x0000, /* R9 - Power mgmt (2) */
2137 0x0000, /* R10 - Power mgmt (3) */
2138 0x2000, /* R11 - Power mgmt (4) */
2139 0x0E00, /* R12 - Power mgmt (5) */
2140 0x0000, /* R13 - Power mgmt (6) */
2141 0x0000, /* R14 - Power mgmt (7) */
2142 0x0000, /* R15 */
2143 0x0000, /* R16 - RTC Seconds/Minutes */
2144 0x0100, /* R17 - RTC Hours/Day */
2145 0x0101, /* R18 - RTC Date/Month */
2146 0x1400, /* R19 - RTC Year */
2147 0x0000, /* R20 - Alarm Seconds/Minutes */
2148 0x0000, /* R21 - Alarm Hours/Day */
2149 0x0000, /* R22 - Alarm Date/Month */
2150 0x0320, /* R23 - RTC Time Control */
2151 0x0000, /* R24 - System Interrupts */
2152 0x0000, /* R25 - Interrupt Status 1 */
2153 0x0000, /* R26 - Interrupt Status 2 */
2154 0x0000, /* R27 */
2155 0x0000, /* R28 - Under Voltage Interrupt status */
2156 0x0000, /* R29 - Over Current Interrupt status */
2157 0x0000, /* R30 - GPIO Interrupt Status */
2158 0x0000, /* R31 - Comparator Interrupt Status */
2159 0x3FFF, /* R32 - System Interrupts Mask */
2160 0x0000, /* R33 - Interrupt Status 1 Mask */
2161 0x0000, /* R34 - Interrupt Status 2 Mask */
2162 0x0000, /* R35 */
2163 0x0000, /* R36 - Under Voltage Interrupt status Mask */
2164 0x0000, /* R37 - Over Current Interrupt status Mask */
2165 0x0000, /* R38 - GPIO Interrupt Status Mask */
2166 0x0000, /* R39 - Comparator Interrupt Status Mask */
2167 0x0040, /* R40 - Clock Control 1 */
2168 0x0000, /* R41 - Clock Control 2 */
2169 0x3A00, /* R42 - FLL Control 1 */
2170 0x7086, /* R43 - FLL Control 2 */
2171 0xC226, /* R44 - FLL Control 3 */
2172 0x0000, /* R45 - FLL Control 4 */
2173 0x0000, /* R46 */
2174 0x0000, /* R47 */
2175 0x0000, /* R48 - DAC Control */
2176 0x0000, /* R49 */
2177 0x00C0, /* R50 - DAC Digital Volume L */
2178 0x00C0, /* R51 - DAC Digital Volume R */
2179 0x0000, /* R52 */
2180 0x0040, /* R53 - DAC LR Rate */
2181 0x0000, /* R54 - DAC Clock Control */
2182 0x0000, /* R55 */
2183 0x0000, /* R56 */
2184 0x0000, /* R57 */
2185 0x4000, /* R58 - DAC Mute */
2186 0x0000, /* R59 - DAC Mute Volume */
2187 0x0000, /* R60 - DAC Side */
2188 0x0000, /* R61 */
2189 0x0000, /* R62 */
2190 0x0000, /* R63 */
2191 0x8000, /* R64 - ADC Control */
2192 0x0000, /* R65 */
2193 0x00C0, /* R66 - ADC Digital Volume L */
2194 0x00C0, /* R67 - ADC Digital Volume R */
2195 0x0000, /* R68 - ADC Divider */
2196 0x0000, /* R69 */
2197 0x0040, /* R70 - ADC LR Rate */
2198 0x0000, /* R71 */
2199 0x0303, /* R72 - Input Control */
2200 0x0000, /* R73 - IN3 Input Control */
2201 0x0000, /* R74 - Mic Bias Control */
2202 0x0000, /* R75 */
2203 0x0000, /* R76 - Output Control */
2204 0x0000, /* R77 - Jack Detect */
2205 0x0000, /* R78 - Anti Pop Control */
2206 0x0000, /* R79 */
2207 0x0040, /* R80 - Left Input Volume */
2208 0x0040, /* R81 - Right Input Volume */
2209 0x0000, /* R82 */
2210 0x0000, /* R83 */
2211 0x0000, /* R84 */
2212 0x0000, /* R85 */
2213 0x0000, /* R86 */
2214 0x0000, /* R87 */
2215 0x0800, /* R88 - Left Mixer Control */
2216 0x1000, /* R89 - Right Mixer Control */
2217 0x0000, /* R90 */
2218 0x0000, /* R91 */
2219 0x0000, /* R92 - OUT3 Mixer Control */
2220 0x0000, /* R93 - OUT4 Mixer Control */
2221 0x0000, /* R94 */
2222 0x0000, /* R95 */
2223 0x0000, /* R96 - Output Left Mixer Volume */
2224 0x0000, /* R97 - Output Right Mixer Volume */
2225 0x0000, /* R98 - Input Mixer Volume L */
2226 0x0000, /* R99 - Input Mixer Volume R */
2227 0x0000, /* R100 - Input Mixer Volume */
2228 0x0000, /* R101 */
2229 0x0000, /* R102 */
2230 0x0000, /* R103 */
2231 0x00E4, /* R104 - OUT1L Volume */
2232 0x00E4, /* R105 - OUT1R Volume */
2233 0x00E4, /* R106 - OUT2L Volume */
2234 0x02E4, /* R107 - OUT2R Volume */
2235 0x0000, /* R108 */
2236 0x0000, /* R109 */
2237 0x0000, /* R110 */
2238 0x0000, /* R111 - BEEP Volume */
2239 0x0A00, /* R112 - AI Formating */
2240 0x0000, /* R113 - ADC DAC COMP */
2241 0x0020, /* R114 - AI ADC Control */
2242 0x0020, /* R115 - AI DAC Control */
2243 0x0000, /* R116 */
2244 0x0000, /* R117 */
2245 0x0000, /* R118 */
2246 0x0000, /* R119 */
2247 0x0000, /* R120 */
2248 0x0000, /* R121 */
2249 0x0000, /* R122 */
2250 0x0000, /* R123 */
2251 0x0000, /* R124 */
2252 0x0000, /* R125 */
2253 0x0000, /* R126 */
2254 0x0000, /* R127 */
2255 0x1FFF, /* R128 - GPIO Debounce */
2256 0x0000, /* R129 - GPIO Pin pull up Control */
2257 0x0000, /* R130 - GPIO Pull down Control */
2258 0x0000, /* R131 - GPIO Interrupt Mode */
2259 0x0000, /* R132 */
2260 0x0000, /* R133 - GPIO Control */
2261 0x0FFC, /* R134 - GPIO Configuration (i/o) */
2262 0x0FFC, /* R135 - GPIO Pin Polarity / Type */
2263 0x0000, /* R136 */
2264 0x0000, /* R137 */
2265 0x0000, /* R138 */
2266 0x0000, /* R139 */
2267 0x0013, /* R140 - GPIO Function Select 1 */
2268 0x0000, /* R141 - GPIO Function Select 2 */
2269 0x0000, /* R142 - GPIO Function Select 3 */
2270 0x0003, /* R143 - GPIO Function Select 4 */
2271 0x0000, /* R144 - Digitiser Control (1) */
2272 0x0002, /* R145 - Digitiser Control (2) */
2273 0x0000, /* R146 */
2274 0x0000, /* R147 */
2275 0x0000, /* R148 */
2276 0x0000, /* R149 */
2277 0x0000, /* R150 */
2278 0x0000, /* R151 */
2279 0x7000, /* R152 - AUX1 Readback */
2280 0x7000, /* R153 - AUX2 Readback */
2281 0x7000, /* R154 - AUX3 Readback */
2282 0x7000, /* R155 - AUX4 Readback */
2283 0x0000, /* R156 - USB Voltage Readback */
2284 0x0000, /* R157 - LINE Voltage Readback */
2285 0x0000, /* R158 - BATT Voltage Readback */
2286 0x0000, /* R159 - Chip Temp Readback */
2287 0x0000, /* R160 */
2288 0x0000, /* R161 */
2289 0x0000, /* R162 */
2290 0x0000, /* R163 - Generic Comparator Control */
2291 0x0000, /* R164 - Generic comparator 1 */
2292 0x0000, /* R165 - Generic comparator 2 */
2293 0x0000, /* R166 - Generic comparator 3 */
2294 0x0000, /* R167 - Generic comparator 4 */
2295 0xA00F, /* R168 - Battery Charger Control 1 */
2296 0x0B06, /* R169 - Battery Charger Control 2 */
2297 0x0000, /* R170 - Battery Charger Control 3 */
2298 0x0000, /* R171 */
2299 0x0000, /* R172 - Current Sink Driver A */
2300 0x0000, /* R173 - CSA Flash control */
2301 0x0000, /* R174 - Current Sink Driver B */
2302 0x0000, /* R175 - CSB Flash control */
2303 0x0000, /* R176 - DCDC/LDO requested */
2304 0x032D, /* R177 - DCDC Active options */
2305 0x0000, /* R178 - DCDC Sleep options */
2306 0x0025, /* R179 - Power-check comparator */
2307 0x000E, /* R180 - DCDC1 Control */
2308 0x0000, /* R181 - DCDC1 Timeouts */
2309 0x1006, /* R182 - DCDC1 Low Power */
2310 0x0018, /* R183 - DCDC2 Control */
2311 0x0000, /* R184 - DCDC2 Timeouts */
2312 0x0000, /* R185 */
2313 0x0000, /* R186 - DCDC3 Control */
2314 0x0000, /* R187 - DCDC3 Timeouts */
2315 0x0006, /* R188 - DCDC3 Low Power */
2316 0x0000, /* R189 - DCDC4 Control */
2317 0x0000, /* R190 - DCDC4 Timeouts */
2318 0x0006, /* R191 - DCDC4 Low Power */
2319 0x0008, /* R192 - DCDC5 Control */
2320 0x0000, /* R193 - DCDC5 Timeouts */
2321 0x0000, /* R194 */
2322 0x0000, /* R195 - DCDC6 Control */
2323 0x0000, /* R196 - DCDC6 Timeouts */
2324 0x0006, /* R197 - DCDC6 Low Power */
2325 0x0000, /* R198 */
2326 0x0003, /* R199 - Limit Switch Control */
2327 0x001C, /* R200 - LDO1 Control */
2328 0x0000, /* R201 - LDO1 Timeouts */
2329 0x001C, /* R202 - LDO1 Low Power */
2330 0x001B, /* R203 - LDO2 Control */
2331 0x0000, /* R204 - LDO2 Timeouts */
2332 0x001C, /* R205 - LDO2 Low Power */
2333 0x001B, /* R206 - LDO3 Control */
2334 0x0000, /* R207 - LDO3 Timeouts */
2335 0x001C, /* R208 - LDO3 Low Power */
2336 0x001B, /* R209 - LDO4 Control */
2337 0x0000, /* R210 - LDO4 Timeouts */
2338 0x001C, /* R211 - LDO4 Low Power */
2339 0x0000, /* R212 */
2340 0x0000, /* R213 */
2341 0x0000, /* R214 */
2342 0x0000, /* R215 - VCC_FAULT Masks */
2343 0x001F, /* R216 - Main Bandgap Control */
2344 0x0000, /* R217 - OSC Control */
2345 0x9000, /* R218 - RTC Tick Control */
2346 0x0000, /* R219 - Security1 */
2347 0x4000, /* R220 */
2348 0x0000, /* R221 */
2349 0x0000, /* R222 */
2350 0x0000, /* R223 */
2351 0x0000, /* R224 - Signal overrides */
2352 0x0000, /* R225 - DCDC/LDO status */
2353 0x0000, /* R226 - Charger Overides/status */
2354 0x0000, /* R227 - misc overrides */
2355 0x0000, /* R228 - Supply overrides/status 1 */
2356 0x0000, /* R229 - Supply overrides/status 2 */
2357 0xE000, /* R230 - GPIO Pin Status */
2358 0x0000, /* R231 - comparotor overrides */
2359 0x0000, /* R232 */
2360 0x0000, /* R233 - State Machine status */
2361 0x1200, /* R234 */
2362 0x0000, /* R235 */
2363 0x8000, /* R236 */
2364 0x0000, /* R237 */
2365 0x0000, /* R238 */
2366 0x0000, /* R239 */
2367 0x0003, /* R240 */
2368 0x0000, /* R241 */
2369 0x0000, /* R242 */
2370 0x0004, /* R243 */
2371 0x0300, /* R244 */
2372 0x0000, /* R245 */
2373 0x0200, /* R246 */
2374 0x0000, /* R247 */
2375 0x1000, /* R248 - DCDC1 Test Controls */
2376 0x5000, /* R249 */
2377 0x1000, /* R250 - DCDC3 Test Controls */
2378 0x1000, /* R251 - DCDC4 Test Controls */
2379 0x5100, /* R252 */
2380 0x1000, /* R253 - DCDC6 Test Controls */
2381};
2382#endif
2383
2384#ifdef CONFIG_MFD_WM8352_CONFIG_MODE_1
2385
2386#undef WM8350_HAVE_CONFIG_MODE
2387#define WM8350_HAVE_CONFIG_MODE
2388
2389const u16 wm8352_mode1_defaults[] = {
2390 0x6143, /* R0 - Reset/ID */
2391 0x0000, /* R1 - ID */
2392 0x0002, /* R2 - Revision */
2393 0x1C02, /* R3 - System Control 1 */
2394 0x0204, /* R4 - System Control 2 */
2395 0x0000, /* R5 - System Hibernate */
2396 0x8A00, /* R6 - Interface Control */
2397 0x0000, /* R7 */
2398 0x8000, /* R8 - Power mgmt (1) */
2399 0x0000, /* R9 - Power mgmt (2) */
2400 0x0000, /* R10 - Power mgmt (3) */
2401 0x2000, /* R11 - Power mgmt (4) */
2402 0x0E00, /* R12 - Power mgmt (5) */
2403 0x0000, /* R13 - Power mgmt (6) */
2404 0x0000, /* R14 - Power mgmt (7) */
2405 0x0000, /* R15 */
2406 0x0000, /* R16 - RTC Seconds/Minutes */
2407 0x0100, /* R17 - RTC Hours/Day */
2408 0x0101, /* R18 - RTC Date/Month */
2409 0x1400, /* R19 - RTC Year */
2410 0x0000, /* R20 - Alarm Seconds/Minutes */
2411 0x0000, /* R21 - Alarm Hours/Day */
2412 0x0000, /* R22 - Alarm Date/Month */
2413 0x0320, /* R23 - RTC Time Control */
2414 0x0000, /* R24 - System Interrupts */
2415 0x0000, /* R25 - Interrupt Status 1 */
2416 0x0000, /* R26 - Interrupt Status 2 */
2417 0x0000, /* R27 */
2418 0x0000, /* R28 - Under Voltage Interrupt status */
2419 0x0000, /* R29 - Over Current Interrupt status */
2420 0x0000, /* R30 - GPIO Interrupt Status */
2421 0x0000, /* R31 - Comparator Interrupt Status */
2422 0x3FFF, /* R32 - System Interrupts Mask */
2423 0x0000, /* R33 - Interrupt Status 1 Mask */
2424 0x0000, /* R34 - Interrupt Status 2 Mask */
2425 0x0000, /* R35 */
2426 0x0000, /* R36 - Under Voltage Interrupt status Mask */
2427 0x0000, /* R37 - Over Current Interrupt status Mask */
2428 0x0000, /* R38 - GPIO Interrupt Status Mask */
2429 0x0000, /* R39 - Comparator Interrupt Status Mask */
2430 0x0040, /* R40 - Clock Control 1 */
2431 0x0000, /* R41 - Clock Control 2 */
2432 0x3A00, /* R42 - FLL Control 1 */
2433 0x7086, /* R43 - FLL Control 2 */
2434 0xC226, /* R44 - FLL Control 3 */
2435 0x0000, /* R45 - FLL Control 4 */
2436 0x0000, /* R46 */
2437 0x0000, /* R47 */
2438 0x0000, /* R48 - DAC Control */
2439 0x0000, /* R49 */
2440 0x00C0, /* R50 - DAC Digital Volume L */
2441 0x00C0, /* R51 - DAC Digital Volume R */
2442 0x0000, /* R52 */
2443 0x0040, /* R53 - DAC LR Rate */
2444 0x0000, /* R54 - DAC Clock Control */
2445 0x0000, /* R55 */
2446 0x0000, /* R56 */
2447 0x0000, /* R57 */
2448 0x4000, /* R58 - DAC Mute */
2449 0x0000, /* R59 - DAC Mute Volume */
2450 0x0000, /* R60 - DAC Side */
2451 0x0000, /* R61 */
2452 0x0000, /* R62 */
2453 0x0000, /* R63 */
2454 0x8000, /* R64 - ADC Control */
2455 0x0000, /* R65 */
2456 0x00C0, /* R66 - ADC Digital Volume L */
2457 0x00C0, /* R67 - ADC Digital Volume R */
2458 0x0000, /* R68 - ADC Divider */
2459 0x0000, /* R69 */
2460 0x0040, /* R70 - ADC LR Rate */
2461 0x0000, /* R71 */
2462 0x0303, /* R72 - Input Control */
2463 0x0000, /* R73 - IN3 Input Control */
2464 0x0000, /* R74 - Mic Bias Control */
2465 0x0000, /* R75 */
2466 0x0000, /* R76 - Output Control */
2467 0x0000, /* R77 - Jack Detect */
2468 0x0000, /* R78 - Anti Pop Control */
2469 0x0000, /* R79 */
2470 0x0040, /* R80 - Left Input Volume */
2471 0x0040, /* R81 - Right Input Volume */
2472 0x0000, /* R82 */
2473 0x0000, /* R83 */
2474 0x0000, /* R84 */
2475 0x0000, /* R85 */
2476 0x0000, /* R86 */
2477 0x0000, /* R87 */
2478 0x0800, /* R88 - Left Mixer Control */
2479 0x1000, /* R89 - Right Mixer Control */
2480 0x0000, /* R90 */
2481 0x0000, /* R91 */
2482 0x0000, /* R92 - OUT3 Mixer Control */
2483 0x0000, /* R93 - OUT4 Mixer Control */
2484 0x0000, /* R94 */
2485 0x0000, /* R95 */
2486 0x0000, /* R96 - Output Left Mixer Volume */
2487 0x0000, /* R97 - Output Right Mixer Volume */
2488 0x0000, /* R98 - Input Mixer Volume L */
2489 0x0000, /* R99 - Input Mixer Volume R */
2490 0x0000, /* R100 - Input Mixer Volume */
2491 0x0000, /* R101 */
2492 0x0000, /* R102 */
2493 0x0000, /* R103 */
2494 0x00E4, /* R104 - OUT1L Volume */
2495 0x00E4, /* R105 - OUT1R Volume */
2496 0x00E4, /* R106 - OUT2L Volume */
2497 0x02E4, /* R107 - OUT2R Volume */
2498 0x0000, /* R108 */
2499 0x0000, /* R109 */
2500 0x0000, /* R110 */
2501 0x0000, /* R111 - BEEP Volume */
2502 0x0A00, /* R112 - AI Formating */
2503 0x0000, /* R113 - ADC DAC COMP */
2504 0x0020, /* R114 - AI ADC Control */
2505 0x0020, /* R115 - AI DAC Control */
2506 0x0000, /* R116 */
2507 0x0000, /* R117 */
2508 0x0000, /* R118 */
2509 0x0000, /* R119 */
2510 0x0000, /* R120 */
2511 0x0000, /* R121 */
2512 0x0000, /* R122 */
2513 0x0000, /* R123 */
2514 0x0000, /* R124 */
2515 0x0000, /* R125 */
2516 0x0000, /* R126 */
2517 0x0000, /* R127 */
2518 0x1FFF, /* R128 - GPIO Debounce */
2519 0x0000, /* R129 - GPIO Pin pull up Control */
2520 0x0000, /* R130 - GPIO Pull down Control */
2521 0x0000, /* R131 - GPIO Interrupt Mode */
2522 0x0000, /* R132 */
2523 0x0000, /* R133 - GPIO Control */
2524 0x0BFB, /* R134 - GPIO Configuration (i/o) */
2525 0x0FFF, /* R135 - GPIO Pin Polarity / Type */
2526 0x0000, /* R136 */
2527 0x0000, /* R137 */
2528 0x0000, /* R138 */
2529 0x0000, /* R139 */
2530 0x0300, /* R140 - GPIO Function Select 1 */
2531 0x0000, /* R141 - GPIO Function Select 2 */
2532 0x2300, /* R142 - GPIO Function Select 3 */
2533 0x0003, /* R143 - GPIO Function Select 4 */
2534 0x0000, /* R144 - Digitiser Control (1) */
2535 0x0002, /* R145 - Digitiser Control (2) */
2536 0x0000, /* R146 */
2537 0x0000, /* R147 */
2538 0x0000, /* R148 */
2539 0x0000, /* R149 */
2540 0x0000, /* R150 */
2541 0x0000, /* R151 */
2542 0x7000, /* R152 - AUX1 Readback */
2543 0x7000, /* R153 - AUX2 Readback */
2544 0x7000, /* R154 - AUX3 Readback */
2545 0x7000, /* R155 - AUX4 Readback */
2546 0x0000, /* R156 - USB Voltage Readback */
2547 0x0000, /* R157 - LINE Voltage Readback */
2548 0x0000, /* R158 - BATT Voltage Readback */
2549 0x0000, /* R159 - Chip Temp Readback */
2550 0x0000, /* R160 */
2551 0x0000, /* R161 */
2552 0x0000, /* R162 */
2553 0x0000, /* R163 - Generic Comparator Control */
2554 0x0000, /* R164 - Generic comparator 1 */
2555 0x0000, /* R165 - Generic comparator 2 */
2556 0x0000, /* R166 - Generic comparator 3 */
2557 0x0000, /* R167 - Generic comparator 4 */
2558 0xA00F, /* R168 - Battery Charger Control 1 */
2559 0x0B06, /* R169 - Battery Charger Control 2 */
2560 0x0000, /* R170 - Battery Charger Control 3 */
2561 0x0000, /* R171 */
2562 0x0000, /* R172 - Current Sink Driver A */
2563 0x0000, /* R173 - CSA Flash control */
2564 0x0000, /* R174 - Current Sink Driver B */
2565 0x0000, /* R175 - CSB Flash control */
2566 0x0000, /* R176 - DCDC/LDO requested */
2567 0x032D, /* R177 - DCDC Active options */
2568 0x0000, /* R178 - DCDC Sleep options */
2569 0x0025, /* R179 - Power-check comparator */
2570 0x0062, /* R180 - DCDC1 Control */
2571 0x0400, /* R181 - DCDC1 Timeouts */
2572 0x1006, /* R182 - DCDC1 Low Power */
2573 0x0018, /* R183 - DCDC2 Control */
2574 0x0000, /* R184 - DCDC2 Timeouts */
2575 0x0000, /* R185 */
2576 0x0006, /* R186 - DCDC3 Control */
2577 0x0800, /* R187 - DCDC3 Timeouts */
2578 0x0006, /* R188 - DCDC3 Low Power */
2579 0x0006, /* R189 - DCDC4 Control */
2580 0x0C00, /* R190 - DCDC4 Timeouts */
2581 0x0006, /* R191 - DCDC4 Low Power */
2582 0x0008, /* R192 - DCDC5 Control */
2583 0x0000, /* R193 - DCDC5 Timeouts */
2584 0x0000, /* R194 */
2585 0x0026, /* R195 - DCDC6 Control */
2586 0x1000, /* R196 - DCDC6 Timeouts */
2587 0x0006, /* R197 - DCDC6 Low Power */
2588 0x0000, /* R198 */
2589 0x0003, /* R199 - Limit Switch Control */
2590 0x0002, /* R200 - LDO1 Control */
2591 0x0000, /* R201 - LDO1 Timeouts */
2592 0x001C, /* R202 - LDO1 Low Power */
2593 0x001A, /* R203 - LDO2 Control */
2594 0x0000, /* R204 - LDO2 Timeouts */
2595 0x001C, /* R205 - LDO2 Low Power */
2596 0x001F, /* R206 - LDO3 Control */
2597 0x0000, /* R207 - LDO3 Timeouts */
2598 0x001C, /* R208 - LDO3 Low Power */
2599 0x001F, /* R209 - LDO4 Control */
2600 0x0000, /* R210 - LDO4 Timeouts */
2601 0x001C, /* R211 - LDO4 Low Power */
2602 0x0000, /* R212 */
2603 0x0000, /* R213 */
2604 0x0000, /* R214 */
2605 0x0000, /* R215 - VCC_FAULT Masks */
2606 0x001F, /* R216 - Main Bandgap Control */
2607 0x0000, /* R217 - OSC Control */
2608 0x9000, /* R218 - RTC Tick Control */
2609 0x0000, /* R219 - Security1 */
2610 0x4000, /* R220 */
2611 0x0000, /* R221 */
2612 0x0000, /* R222 */
2613 0x0000, /* R223 */
2614 0x0000, /* R224 - Signal overrides */
2615 0x0000, /* R225 - DCDC/LDO status */
2616 0x0000, /* R226 - Charger Overides/status */
2617 0x0000, /* R227 - misc overrides */
2618 0x0000, /* R228 - Supply overrides/status 1 */
2619 0x0000, /* R229 - Supply overrides/status 2 */
2620 0xE000, /* R230 - GPIO Pin Status */
2621 0x0000, /* R231 - comparotor overrides */
2622 0x0000, /* R232 */
2623 0x0000, /* R233 - State Machine status */
2624 0x1200, /* R234 */
2625 0x0000, /* R235 */
2626 0x8000, /* R236 */
2627 0x0000, /* R237 */
2628 0x0000, /* R238 */
2629 0x0000, /* R239 */
2630 0x0003, /* R240 */
2631 0x0000, /* R241 */
2632 0x0000, /* R242 */
2633 0x0004, /* R243 */
2634 0x0300, /* R244 */
2635 0x0000, /* R245 */
2636 0x0200, /* R246 */
2637 0x0000, /* R247 */
2638 0x1000, /* R248 - DCDC1 Test Controls */
2639 0x5000, /* R249 */
2640 0x1000, /* R250 - DCDC3 Test Controls */
2641 0x1000, /* R251 - DCDC4 Test Controls */
2642 0x5100, /* R252 */
2643 0x1000, /* R253 - DCDC6 Test Controls */
2644};
2645#endif
2646
2647#ifdef CONFIG_MFD_WM8352_CONFIG_MODE_2
2648
2649#undef WM8350_HAVE_CONFIG_MODE
2650#define WM8350_HAVE_CONFIG_MODE
2651
2652const u16 wm8352_mode2_defaults[] = {
2653 0x6143, /* R0 - Reset/ID */
2654 0x0000, /* R1 - ID */
2655 0x0002, /* R2 - Revision */
2656 0x1C02, /* R3 - System Control 1 */
2657 0x0204, /* R4 - System Control 2 */
2658 0x0000, /* R5 - System Hibernate */
2659 0x8A00, /* R6 - Interface Control */
2660 0x0000, /* R7 */
2661 0x8000, /* R8 - Power mgmt (1) */
2662 0x0000, /* R9 - Power mgmt (2) */
2663 0x0000, /* R10 - Power mgmt (3) */
2664 0x2000, /* R11 - Power mgmt (4) */
2665 0x0E00, /* R12 - Power mgmt (5) */
2666 0x0000, /* R13 - Power mgmt (6) */
2667 0x0000, /* R14 - Power mgmt (7) */
2668 0x0000, /* R15 */
2669 0x0000, /* R16 - RTC Seconds/Minutes */
2670 0x0100, /* R17 - RTC Hours/Day */
2671 0x0101, /* R18 - RTC Date/Month */
2672 0x1400, /* R19 - RTC Year */
2673 0x0000, /* R20 - Alarm Seconds/Minutes */
2674 0x0000, /* R21 - Alarm Hours/Day */
2675 0x0000, /* R22 - Alarm Date/Month */
2676 0x0320, /* R23 - RTC Time Control */
2677 0x0000, /* R24 - System Interrupts */
2678 0x0000, /* R25 - Interrupt Status 1 */
2679 0x0000, /* R26 - Interrupt Status 2 */
2680 0x0000, /* R27 */
2681 0x0000, /* R28 - Under Voltage Interrupt status */
2682 0x0000, /* R29 - Over Current Interrupt status */
2683 0x0000, /* R30 - GPIO Interrupt Status */
2684 0x0000, /* R31 - Comparator Interrupt Status */
2685 0x3FFF, /* R32 - System Interrupts Mask */
2686 0x0000, /* R33 - Interrupt Status 1 Mask */
2687 0x0000, /* R34 - Interrupt Status 2 Mask */
2688 0x0000, /* R35 */
2689 0x0000, /* R36 - Under Voltage Interrupt status Mask */
2690 0x0000, /* R37 - Over Current Interrupt status Mask */
2691 0x0000, /* R38 - GPIO Interrupt Status Mask */
2692 0x0000, /* R39 - Comparator Interrupt Status Mask */
2693 0x0040, /* R40 - Clock Control 1 */
2694 0x0000, /* R41 - Clock Control 2 */
2695 0x3A00, /* R42 - FLL Control 1 */
2696 0x7086, /* R43 - FLL Control 2 */
2697 0xC226, /* R44 - FLL Control 3 */
2698 0x0000, /* R45 - FLL Control 4 */
2699 0x0000, /* R46 */
2700 0x0000, /* R47 */
2701 0x0000, /* R48 - DAC Control */
2702 0x0000, /* R49 */
2703 0x00C0, /* R50 - DAC Digital Volume L */
2704 0x00C0, /* R51 - DAC Digital Volume R */
2705 0x0000, /* R52 */
2706 0x0040, /* R53 - DAC LR Rate */
2707 0x0000, /* R54 - DAC Clock Control */
2708 0x0000, /* R55 */
2709 0x0000, /* R56 */
2710 0x0000, /* R57 */
2711 0x4000, /* R58 - DAC Mute */
2712 0x0000, /* R59 - DAC Mute Volume */
2713 0x0000, /* R60 - DAC Side */
2714 0x0000, /* R61 */
2715 0x0000, /* R62 */
2716 0x0000, /* R63 */
2717 0x8000, /* R64 - ADC Control */
2718 0x0000, /* R65 */
2719 0x00C0, /* R66 - ADC Digital Volume L */
2720 0x00C0, /* R67 - ADC Digital Volume R */
2721 0x0000, /* R68 - ADC Divider */
2722 0x0000, /* R69 */
2723 0x0040, /* R70 - ADC LR Rate */
2724 0x0000, /* R71 */
2725 0x0303, /* R72 - Input Control */
2726 0x0000, /* R73 - IN3 Input Control */
2727 0x0000, /* R74 - Mic Bias Control */
2728 0x0000, /* R75 */
2729 0x0000, /* R76 - Output Control */
2730 0x0000, /* R77 - Jack Detect */
2731 0x0000, /* R78 - Anti Pop Control */
2732 0x0000, /* R79 */
2733 0x0040, /* R80 - Left Input Volume */
2734 0x0040, /* R81 - Right Input Volume */
2735 0x0000, /* R82 */
2736 0x0000, /* R83 */
2737 0x0000, /* R84 */
2738 0x0000, /* R85 */
2739 0x0000, /* R86 */
2740 0x0000, /* R87 */
2741 0x0800, /* R88 - Left Mixer Control */
2742 0x1000, /* R89 - Right Mixer Control */
2743 0x0000, /* R90 */
2744 0x0000, /* R91 */
2745 0x0000, /* R92 - OUT3 Mixer Control */
2746 0x0000, /* R93 - OUT4 Mixer Control */
2747 0x0000, /* R94 */
2748 0x0000, /* R95 */
2749 0x0000, /* R96 - Output Left Mixer Volume */
2750 0x0000, /* R97 - Output Right Mixer Volume */
2751 0x0000, /* R98 - Input Mixer Volume L */
2752 0x0000, /* R99 - Input Mixer Volume R */
2753 0x0000, /* R100 - Input Mixer Volume */
2754 0x0000, /* R101 */
2755 0x0000, /* R102 */
2756 0x0000, /* R103 */
2757 0x00E4, /* R104 - OUT1L Volume */
2758 0x00E4, /* R105 - OUT1R Volume */
2759 0x00E4, /* R106 - OUT2L Volume */
2760 0x02E4, /* R107 - OUT2R Volume */
2761 0x0000, /* R108 */
2762 0x0000, /* R109 */
2763 0x0000, /* R110 */
2764 0x0000, /* R111 - BEEP Volume */
2765 0x0A00, /* R112 - AI Formating */
2766 0x0000, /* R113 - ADC DAC COMP */
2767 0x0020, /* R114 - AI ADC Control */
2768 0x0020, /* R115 - AI DAC Control */
2769 0x0000, /* R116 */
2770 0x0000, /* R117 */
2771 0x0000, /* R118 */
2772 0x0000, /* R119 */
2773 0x0000, /* R120 */
2774 0x0000, /* R121 */
2775 0x0000, /* R122 */
2776 0x0000, /* R123 */
2777 0x0000, /* R124 */
2778 0x0000, /* R125 */
2779 0x0000, /* R126 */
2780 0x0000, /* R127 */
2781 0x1FFF, /* R128 - GPIO Debounce */
2782 0x0000, /* R129 - GPIO Pin pull up Control */
2783 0x0110, /* R130 - GPIO Pull down Control */
2784 0x0000, /* R131 - GPIO Interrupt Mode */
2785 0x0000, /* R132 */
2786 0x0000, /* R133 - GPIO Control */
2787 0x09DA, /* R134 - GPIO Configuration (i/o) */
2788 0x0DD6, /* R135 - GPIO Pin Polarity / Type */
2789 0x0000, /* R136 */
2790 0x0000, /* R137 */
2791 0x0000, /* R138 */
2792 0x0000, /* R139 */
2793 0x1310, /* R140 - GPIO Function Select 1 */
2794 0x0033, /* R141 - GPIO Function Select 2 */
2795 0x2000, /* R142 - GPIO Function Select 3 */
2796 0x0000, /* R143 - GPIO Function Select 4 */
2797 0x0000, /* R144 - Digitiser Control (1) */
2798 0x0002, /* R145 - Digitiser Control (2) */
2799 0x0000, /* R146 */
2800 0x0000, /* R147 */
2801 0x0000, /* R148 */
2802 0x0000, /* R149 */
2803 0x0000, /* R150 */
2804 0x0000, /* R151 */
2805 0x7000, /* R152 - AUX1 Readback */
2806 0x7000, /* R153 - AUX2 Readback */
2807 0x7000, /* R154 - AUX3 Readback */
2808 0x7000, /* R155 - AUX4 Readback */
2809 0x0000, /* R156 - USB Voltage Readback */
2810 0x0000, /* R157 - LINE Voltage Readback */
2811 0x0000, /* R158 - BATT Voltage Readback */
2812 0x0000, /* R159 - Chip Temp Readback */
2813 0x0000, /* R160 */
2814 0x0000, /* R161 */
2815 0x0000, /* R162 */
2816 0x0000, /* R163 - Generic Comparator Control */
2817 0x0000, /* R164 - Generic comparator 1 */
2818 0x0000, /* R165 - Generic comparator 2 */
2819 0x0000, /* R166 - Generic comparator 3 */
2820 0x0000, /* R167 - Generic comparator 4 */
2821 0xA00F, /* R168 - Battery Charger Control 1 */
2822 0x0B06, /* R169 - Battery Charger Control 2 */
2823 0x0000, /* R170 - Battery Charger Control 3 */
2824 0x0000, /* R171 */
2825 0x0000, /* R172 - Current Sink Driver A */
2826 0x0000, /* R173 - CSA Flash control */
2827 0x0000, /* R174 - Current Sink Driver B */
2828 0x0000, /* R175 - CSB Flash control */
2829 0x0000, /* R176 - DCDC/LDO requested */
2830 0x032D, /* R177 - DCDC Active options */
2831 0x0000, /* R178 - DCDC Sleep options */
2832 0x0025, /* R179 - Power-check comparator */
2833 0x000E, /* R180 - DCDC1 Control */
2834 0x0800, /* R181 - DCDC1 Timeouts */
2835 0x1006, /* R182 - DCDC1 Low Power */
2836 0x0018, /* R183 - DCDC2 Control */
2837 0x0000, /* R184 - DCDC2 Timeouts */
2838 0x0000, /* R185 */
2839 0x0056, /* R186 - DCDC3 Control */
2840 0x1800, /* R187 - DCDC3 Timeouts */
2841 0x0006, /* R188 - DCDC3 Low Power */
2842 0x000E, /* R189 - DCDC4 Control */
2843 0x1000, /* R190 - DCDC4 Timeouts */
2844 0x0006, /* R191 - DCDC4 Low Power */
2845 0x0008, /* R192 - DCDC5 Control */
2846 0x0000, /* R193 - DCDC5 Timeouts */
2847 0x0000, /* R194 */
2848 0x0026, /* R195 - DCDC6 Control */
2849 0x0C00, /* R196 - DCDC6 Timeouts */
2850 0x0006, /* R197 - DCDC6 Low Power */
2851 0x0000, /* R198 */
2852 0x0003, /* R199 - Limit Switch Control */
2853 0x001C, /* R200 - LDO1 Control */
2854 0x0000, /* R201 - LDO1 Timeouts */
2855 0x001C, /* R202 - LDO1 Low Power */
2856 0x0006, /* R203 - LDO2 Control */
2857 0x0400, /* R204 - LDO2 Timeouts */
2858 0x001C, /* R205 - LDO2 Low Power */
2859 0x001C, /* R206 - LDO3 Control */
2860 0x1400, /* R207 - LDO3 Timeouts */
2861 0x001C, /* R208 - LDO3 Low Power */
2862 0x001A, /* R209 - LDO4 Control */
2863 0x0000, /* R210 - LDO4 Timeouts */
2864 0x001C, /* R211 - LDO4 Low Power */
2865 0x0000, /* R212 */
2866 0x0000, /* R213 */
2867 0x0000, /* R214 */
2868 0x0000, /* R215 - VCC_FAULT Masks */
2869 0x001F, /* R216 - Main Bandgap Control */
2870 0x0000, /* R217 - OSC Control */
2871 0x9000, /* R218 - RTC Tick Control */
2872 0x0000, /* R219 - Security1 */
2873 0x4000, /* R220 */
2874 0x0000, /* R221 */
2875 0x0000, /* R222 */
2876 0x0000, /* R223 */
2877 0x0000, /* R224 - Signal overrides */
2878 0x0000, /* R225 - DCDC/LDO status */
2879 0x0000, /* R226 - Charger Overides/status */
2880 0x0000, /* R227 - misc overrides */
2881 0x0000, /* R228 - Supply overrides/status 1 */
2882 0x0000, /* R229 - Supply overrides/status 2 */
2883 0xE000, /* R230 - GPIO Pin Status */
2884 0x0000, /* R231 - comparotor overrides */
2885 0x0000, /* R232 */
2886 0x0000, /* R233 - State Machine status */
2887 0x1200, /* R234 */
2888 0x0000, /* R235 */
2889 0x8000, /* R236 */
2890 0x0000, /* R237 */
2891 0x0000, /* R238 */
2892 0x0000, /* R239 */
2893 0x0003, /* R240 */
2894 0x0000, /* R241 */
2895 0x0000, /* R242 */
2896 0x0004, /* R243 */
2897 0x0300, /* R244 */
2898 0x0000, /* R245 */
2899 0x0200, /* R246 */
2900 0x0000, /* R247 */
2901 0x1000, /* R248 - DCDC1 Test Controls */
2902 0x5000, /* R249 */
2903 0x1000, /* R250 - DCDC3 Test Controls */
2904 0x1000, /* R251 - DCDC4 Test Controls */
2905 0x5100, /* R252 */
2906 0x1000, /* R253 - DCDC6 Test Controls */
2907};
2908#endif
2909
2910#ifdef CONFIG_MFD_WM8352_CONFIG_MODE_3
2911
2912#undef WM8350_HAVE_CONFIG_MODE
2913#define WM8350_HAVE_CONFIG_MODE
2914
2915const u16 wm8352_mode3_defaults[] = {
2916 0x6143, /* R0 - Reset/ID */
2917 0x0000, /* R1 - ID */
2918 0x0002, /* R2 - Revision */
2919 0x1C02, /* R3 - System Control 1 */
2920 0x0204, /* R4 - System Control 2 */
2921 0x0000, /* R5 - System Hibernate */
2922 0x8A00, /* R6 - Interface Control */
2923 0x0000, /* R7 */
2924 0x8000, /* R8 - Power mgmt (1) */
2925 0x0000, /* R9 - Power mgmt (2) */
2926 0x0000, /* R10 - Power mgmt (3) */
2927 0x2000, /* R11 - Power mgmt (4) */
2928 0x0E00, /* R12 - Power mgmt (5) */
2929 0x0000, /* R13 - Power mgmt (6) */
2930 0x0000, /* R14 - Power mgmt (7) */
2931 0x0000, /* R15 */
2932 0x0000, /* R16 - RTC Seconds/Minutes */
2933 0x0100, /* R17 - RTC Hours/Day */
2934 0x0101, /* R18 - RTC Date/Month */
2935 0x1400, /* R19 - RTC Year */
2936 0x0000, /* R20 - Alarm Seconds/Minutes */
2937 0x0000, /* R21 - Alarm Hours/Day */
2938 0x0000, /* R22 - Alarm Date/Month */
2939 0x0320, /* R23 - RTC Time Control */
2940 0x0000, /* R24 - System Interrupts */
2941 0x0000, /* R25 - Interrupt Status 1 */
2942 0x0000, /* R26 - Interrupt Status 2 */
2943 0x0000, /* R27 */
2944 0x0000, /* R28 - Under Voltage Interrupt status */
2945 0x0000, /* R29 - Over Current Interrupt status */
2946 0x0000, /* R30 - GPIO Interrupt Status */
2947 0x0000, /* R31 - Comparator Interrupt Status */
2948 0x3FFF, /* R32 - System Interrupts Mask */
2949 0x0000, /* R33 - Interrupt Status 1 Mask */
2950 0x0000, /* R34 - Interrupt Status 2 Mask */
2951 0x0000, /* R35 */
2952 0x0000, /* R36 - Under Voltage Interrupt status Mask */
2953 0x0000, /* R37 - Over Current Interrupt status Mask */
2954 0x0000, /* R38 - GPIO Interrupt Status Mask */
2955 0x0000, /* R39 - Comparator Interrupt Status Mask */
2956 0x0040, /* R40 - Clock Control 1 */
2957 0x0000, /* R41 - Clock Control 2 */
2958 0x3A00, /* R42 - FLL Control 1 */
2959 0x7086, /* R43 - FLL Control 2 */
2960 0xC226, /* R44 - FLL Control 3 */
2961 0x0000, /* R45 - FLL Control 4 */
2962 0x0000, /* R46 */
2963 0x0000, /* R47 */
2964 0x0000, /* R48 - DAC Control */
2965 0x0000, /* R49 */
2966 0x00C0, /* R50 - DAC Digital Volume L */
2967 0x00C0, /* R51 - DAC Digital Volume R */
2968 0x0000, /* R52 */
2969 0x0040, /* R53 - DAC LR Rate */
2970 0x0000, /* R54 - DAC Clock Control */
2971 0x0000, /* R55 */
2972 0x0000, /* R56 */
2973 0x0000, /* R57 */
2974 0x4000, /* R58 - DAC Mute */
2975 0x0000, /* R59 - DAC Mute Volume */
2976 0x0000, /* R60 - DAC Side */
2977 0x0000, /* R61 */
2978 0x0000, /* R62 */
2979 0x0000, /* R63 */
2980 0x8000, /* R64 - ADC Control */
2981 0x0000, /* R65 */
2982 0x00C0, /* R66 - ADC Digital Volume L */
2983 0x00C0, /* R67 - ADC Digital Volume R */
2984 0x0000, /* R68 - ADC Divider */
2985 0x0000, /* R69 */
2986 0x0040, /* R70 - ADC LR Rate */
2987 0x0000, /* R71 */
2988 0x0303, /* R72 - Input Control */
2989 0x0000, /* R73 - IN3 Input Control */
2990 0x0000, /* R74 - Mic Bias Control */
2991 0x0000, /* R75 */
2992 0x0000, /* R76 - Output Control */
2993 0x0000, /* R77 - Jack Detect */
2994 0x0000, /* R78 - Anti Pop Control */
2995 0x0000, /* R79 */
2996 0x0040, /* R80 - Left Input Volume */
2997 0x0040, /* R81 - Right Input Volume */
2998 0x0000, /* R82 */
2999 0x0000, /* R83 */
3000 0x0000, /* R84 */
3001 0x0000, /* R85 */
3002 0x0000, /* R86 */
3003 0x0000, /* R87 */
3004 0x0800, /* R88 - Left Mixer Control */
3005 0x1000, /* R89 - Right Mixer Control */
3006 0x0000, /* R90 */
3007 0x0000, /* R91 */
3008 0x0000, /* R92 - OUT3 Mixer Control */
3009 0x0000, /* R93 - OUT4 Mixer Control */
3010 0x0000, /* R94 */
3011 0x0000, /* R95 */
3012 0x0000, /* R96 - Output Left Mixer Volume */
3013 0x0000, /* R97 - Output Right Mixer Volume */
3014 0x0000, /* R98 - Input Mixer Volume L */
3015 0x0000, /* R99 - Input Mixer Volume R */
3016 0x0000, /* R100 - Input Mixer Volume */
3017 0x0000, /* R101 */
3018 0x0000, /* R102 */
3019 0x0000, /* R103 */
3020 0x00E4, /* R104 - OUT1L Volume */
3021 0x00E4, /* R105 - OUT1R Volume */
3022 0x00E4, /* R106 - OUT2L Volume */
3023 0x02E4, /* R107 - OUT2R Volume */
3024 0x0000, /* R108 */
3025 0x0000, /* R109 */
3026 0x0000, /* R110 */
3027 0x0000, /* R111 - BEEP Volume */
3028 0x0A00, /* R112 - AI Formating */
3029 0x0000, /* R113 - ADC DAC COMP */
3030 0x0020, /* R114 - AI ADC Control */
3031 0x0020, /* R115 - AI DAC Control */
3032 0x0000, /* R116 */
3033 0x0000, /* R117 */
3034 0x0000, /* R118 */
3035 0x0000, /* R119 */
3036 0x0000, /* R120 */
3037 0x0000, /* R121 */
3038 0x0000, /* R122 */
3039 0x0000, /* R123 */
3040 0x0000, /* R124 */
3041 0x0000, /* R125 */
3042 0x0000, /* R126 */
3043 0x0000, /* R127 */
3044 0x1FFF, /* R128 - GPIO Debounce */
3045 0x0010, /* R129 - GPIO Pin pull up Control */
3046 0x0000, /* R130 - GPIO Pull down Control */
3047 0x0000, /* R131 - GPIO Interrupt Mode */
3048 0x0000, /* R132 */
3049 0x0000, /* R133 - GPIO Control */
3050 0x0BFB, /* R134 - GPIO Configuration (i/o) */
3051 0x0FFD, /* R135 - GPIO Pin Polarity / Type */
3052 0x0000, /* R136 */
3053 0x0000, /* R137 */
3054 0x0000, /* R138 */
3055 0x0000, /* R139 */
3056 0x0310, /* R140 - GPIO Function Select 1 */
3057 0x0001, /* R141 - GPIO Function Select 2 */
3058 0x2300, /* R142 - GPIO Function Select 3 */
3059 0x0003, /* R143 - GPIO Function Select 4 */
3060 0x0000, /* R144 - Digitiser Control (1) */
3061 0x0002, /* R145 - Digitiser Control (2) */
3062 0x0000, /* R146 */
3063 0x0000, /* R147 */
3064 0x0000, /* R148 */
3065 0x0000, /* R149 */
3066 0x0000, /* R150 */
3067 0x0000, /* R151 */
3068 0x7000, /* R152 - AUX1 Readback */
3069 0x7000, /* R153 - AUX2 Readback */
3070 0x7000, /* R154 - AUX3 Readback */
3071 0x7000, /* R155 - AUX4 Readback */
3072 0x0000, /* R156 - USB Voltage Readback */
3073 0x0000, /* R157 - LINE Voltage Readback */
3074 0x0000, /* R158 - BATT Voltage Readback */
3075 0x0000, /* R159 - Chip Temp Readback */
3076 0x0000, /* R160 */
3077 0x0000, /* R161 */
3078 0x0000, /* R162 */
3079 0x0000, /* R163 - Generic Comparator Control */
3080 0x0000, /* R164 - Generic comparator 1 */
3081 0x0000, /* R165 - Generic comparator 2 */
3082 0x0000, /* R166 - Generic comparator 3 */
3083 0x0000, /* R167 - Generic comparator 4 */
3084 0xA00F, /* R168 - Battery Charger Control 1 */
3085 0x0B06, /* R169 - Battery Charger Control 2 */
3086 0x0000, /* R170 - Battery Charger Control 3 */
3087 0x0000, /* R171 */
3088 0x0000, /* R172 - Current Sink Driver A */
3089 0x0000, /* R173 - CSA Flash control */
3090 0x0000, /* R174 - Current Sink Driver B */
3091 0x0000, /* R175 - CSB Flash control */
3092 0x0000, /* R176 - DCDC/LDO requested */
3093 0x032D, /* R177 - DCDC Active options */
3094 0x0000, /* R178 - DCDC Sleep options */
3095 0x0025, /* R179 - Power-check comparator */
3096 0x0006, /* R180 - DCDC1 Control */
3097 0x0400, /* R181 - DCDC1 Timeouts */
3098 0x1006, /* R182 - DCDC1 Low Power */
3099 0x0018, /* R183 - DCDC2 Control */
3100 0x0000, /* R184 - DCDC2 Timeouts */
3101 0x0000, /* R185 */
3102 0x0050, /* R186 - DCDC3 Control */
3103 0x0C00, /* R187 - DCDC3 Timeouts */
3104 0x0006, /* R188 - DCDC3 Low Power */
3105 0x000E, /* R189 - DCDC4 Control */
3106 0x0400, /* R190 - DCDC4 Timeouts */
3107 0x0006, /* R191 - DCDC4 Low Power */
3108 0x0008, /* R192 - DCDC5 Control */
3109 0x0000, /* R193 - DCDC5 Timeouts */
3110 0x0000, /* R194 */
3111 0x0029, /* R195 - DCDC6 Control */
3112 0x0800, /* R196 - DCDC6 Timeouts */
3113 0x0006, /* R197 - DCDC6 Low Power */
3114 0x0000, /* R198 */
3115 0x0003, /* R199 - Limit Switch Control */
3116 0x001D, /* R200 - LDO1 Control */
3117 0x1000, /* R201 - LDO1 Timeouts */
3118 0x001C, /* R202 - LDO1 Low Power */
3119 0x0017, /* R203 - LDO2 Control */
3120 0x1000, /* R204 - LDO2 Timeouts */
3121 0x001C, /* R205 - LDO2 Low Power */
3122 0x0006, /* R206 - LDO3 Control */
3123 0x1000, /* R207 - LDO3 Timeouts */
3124 0x001C, /* R208 - LDO3 Low Power */
3125 0x0010, /* R209 - LDO4 Control */
3126 0x1000, /* R210 - LDO4 Timeouts */
3127 0x001C, /* R211 - LDO4 Low Power */
3128 0x0000, /* R212 */
3129 0x0000, /* R213 */
3130 0x0000, /* R214 */
3131 0x0000, /* R215 - VCC_FAULT Masks */
3132 0x001F, /* R216 - Main Bandgap Control */
3133 0x0000, /* R217 - OSC Control */
3134 0x9000, /* R218 - RTC Tick Control */
3135 0x0000, /* R219 - Security1 */
3136 0x4000, /* R220 */
3137 0x0000, /* R221 */
3138 0x0000, /* R222 */
3139 0x0000, /* R223 */
3140 0x0000, /* R224 - Signal overrides */
3141 0x0000, /* R225 - DCDC/LDO status */
3142 0x0000, /* R226 - Charger Overides/status */
3143 0x0000, /* R227 - misc overrides */
3144 0x0000, /* R228 - Supply overrides/status 1 */
3145 0x0000, /* R229 - Supply overrides/status 2 */
3146 0xE000, /* R230 - GPIO Pin Status */
3147 0x0000, /* R231 - comparotor overrides */
3148 0x0000, /* R232 */
3149 0x0000, /* R233 - State Machine status */
3150 0x1200, /* R234 */
3151 0x0000, /* R235 */
3152 0x8000, /* R236 */
3153 0x0000, /* R237 */
3154 0x0000, /* R238 */
3155 0x0000, /* R239 */
3156 0x0003, /* R240 */
3157 0x0000, /* R241 */
3158 0x0000, /* R242 */
3159 0x0004, /* R243 */
3160 0x0300, /* R244 */
3161 0x0000, /* R245 */
3162 0x0200, /* R246 */
3163 0x0000, /* R247 */
3164 0x1000, /* R248 - DCDC1 Test Controls */
3165 0x5000, /* R249 */
3166 0x1000, /* R250 - DCDC3 Test Controls */
3167 0x1000, /* R251 - DCDC4 Test Controls */
3168 0x5100, /* R252 */
3169 0x1000, /* R253 - DCDC6 Test Controls */
3170};
3171#endif
3172
3173/* 17/*
3174 * Access masks. 18 * Access masks.
3175 */ 19 */
3176 20
3177const struct wm8350_reg_access wm8350_reg_io_map[] = { 21static const struct wm8350_reg_access {
22 u16 readable; /* Mask of readable bits */
23 u16 writable; /* Mask of writable bits */
24 u16 vol; /* Mask of volatile bits */
25} wm8350_reg_io_map[] = {
3178 /* read write volatile */ 26 /* read write volatile */
3179 { 0xFFFF, 0xFFFF, 0xFFFF }, /* R0 - Reset/ID */ 27 { 0xFFFF, 0xFFFF, 0x0000 }, /* R0 - Reset/ID */
3180 { 0x7CFF, 0x0C00, 0x7FFF }, /* R1 - ID */ 28 { 0x7CFF, 0x0C00, 0x0000 }, /* R1 - ID */
3181 { 0x007F, 0x0000, 0x0000 }, /* R2 - ROM Mask ID */ 29 { 0x007F, 0x0000, 0x0000 }, /* R2 - ROM Mask ID */
3182 { 0xBE3B, 0xBE3B, 0x8000 }, /* R3 - System Control 1 */ 30 { 0xBE3B, 0xBE3B, 0x8000 }, /* R3 - System Control 1 */
3183 { 0xFEF7, 0xFEF7, 0xF800 }, /* R4 - System Control 2 */ 31 { 0xFEF7, 0xFEF7, 0xF800 }, /* R4 - System Control 2 */
@@ -3433,3 +281,59 @@ const struct wm8350_reg_access wm8350_reg_io_map[] = {
3433 { 0x0000, 0x0000, 0x0000 }, /* R254 */ 281 { 0x0000, 0x0000, 0x0000 }, /* R254 */
3434 { 0x0000, 0x0000, 0x0000 }, /* R255 */ 282 { 0x0000, 0x0000, 0x0000 }, /* R255 */
3435}; 283};
284
285static bool wm8350_readable(struct device *dev, unsigned int reg)
286{
287 return wm8350_reg_io_map[reg].readable;
288}
289
290static bool wm8350_writeable(struct device *dev, unsigned int reg)
291{
292 struct wm8350 *wm8350 = dev_get_drvdata(dev);
293
294 if (!wm8350->unlocked) {
295 if ((reg >= WM8350_GPIO_FUNCTION_SELECT_1 &&
296 reg <= WM8350_GPIO_FUNCTION_SELECT_4) ||
297 (reg >= WM8350_BATTERY_CHARGER_CONTROL_1 &&
298 reg <= WM8350_BATTERY_CHARGER_CONTROL_3))
299 return false;
300 }
301
302 return wm8350_reg_io_map[reg].writable;
303}
304
305static bool wm8350_volatile(struct device *dev, unsigned int reg)
306{
307 return wm8350_reg_io_map[reg].vol;
308}
309
310static bool wm8350_precious(struct device *dev, unsigned int reg)
311{
312 switch (reg) {
313 case WM8350_SYSTEM_INTERRUPTS:
314 case WM8350_INT_STATUS_1:
315 case WM8350_INT_STATUS_2:
316 case WM8350_POWER_UP_INT_STATUS:
317 case WM8350_UNDER_VOLTAGE_INT_STATUS:
318 case WM8350_OVER_CURRENT_INT_STATUS:
319 case WM8350_GPIO_INT_STATUS:
320 case WM8350_COMPARATOR_INT_STATUS:
321 return true;
322
323 default:
324 return false;
325 }
326}
327
328const struct regmap_config wm8350_regmap = {
329 .reg_bits = 8,
330 .val_bits = 16,
331
332 .cache_type = REGCACHE_RBTREE,
333
334 .max_register = WM8350_MAX_REGISTER,
335 .readable_reg = wm8350_readable,
336 .writeable_reg = wm8350_writeable,
337 .volatile_reg = wm8350_volatile,
338 .precious_reg = wm8350_precious,
339};
diff --git a/drivers/mfd/wm8994-core.c b/drivers/mfd/wm8994-core.c
index 1e321d349777..eec74aa55fdf 100644
--- a/drivers/mfd/wm8994-core.c
+++ b/drivers/mfd/wm8994-core.c
@@ -283,9 +283,24 @@ static int wm8994_suspend(struct device *dev)
283 wm8994_reg_write(wm8994, WM8994_SOFTWARE_RESET, 283 wm8994_reg_write(wm8994, WM8994_SOFTWARE_RESET,
284 wm8994_reg_read(wm8994, WM8994_SOFTWARE_RESET)); 284 wm8994_reg_read(wm8994, WM8994_SOFTWARE_RESET));
285 285
286 regcache_cache_only(wm8994->regmap, true);
287 regcache_mark_dirty(wm8994->regmap); 286 regcache_mark_dirty(wm8994->regmap);
288 287
288 /* Restore GPIO registers to prevent problems with mismatched
289 * pin configurations.
290 */
291 ret = regcache_sync_region(wm8994->regmap, WM8994_GPIO_1,
292 WM8994_GPIO_11);
293 if (ret != 0)
294 dev_err(dev, "Failed to restore GPIO registers: %d\n", ret);
295
296 /* In case one of the GPIOs is used as a wake input. */
297 ret = regcache_sync_region(wm8994->regmap,
298 WM8994_INTERRUPT_STATUS_1_MASK,
299 WM8994_INTERRUPT_STATUS_1_MASK);
300 if (ret != 0)
301 dev_err(dev, "Failed to restore interrupt mask: %d\n", ret);
302
303 regcache_cache_only(wm8994->regmap, true);
289 wm8994->suspended = true; 304 wm8994->suspended = true;
290 305
291 ret = regulator_bulk_disable(wm8994->num_supplies, 306 ret = regulator_bulk_disable(wm8994->num_supplies,
diff --git a/drivers/mfd/wm8994-irq.c b/drivers/mfd/wm8994-irq.c
index f1837f669755..0aac4aff17a5 100644
--- a/drivers/mfd/wm8994-irq.c
+++ b/drivers/mfd/wm8994-irq.c
@@ -21,6 +21,7 @@
21#include <linux/regmap.h> 21#include <linux/regmap.h>
22 22
23#include <linux/mfd/wm8994/core.h> 23#include <linux/mfd/wm8994/core.h>
24#include <linux/mfd/wm8994/pdata.h>
24#include <linux/mfd/wm8994/registers.h> 25#include <linux/mfd/wm8994/registers.h>
25 26
26#include <linux/delay.h> 27#include <linux/delay.h>
@@ -139,6 +140,8 @@ static struct regmap_irq_chip wm8994_irq_chip = {
139int wm8994_irq_init(struct wm8994 *wm8994) 140int wm8994_irq_init(struct wm8994 *wm8994)
140{ 141{
141 int ret; 142 int ret;
143 unsigned long irqflags;
144 struct wm8994_pdata *pdata = wm8994->dev->platform_data;
142 145
143 if (!wm8994->irq) { 146 if (!wm8994->irq) {
144 dev_warn(wm8994->dev, 147 dev_warn(wm8994->dev,
@@ -147,8 +150,13 @@ int wm8994_irq_init(struct wm8994 *wm8994)
147 return 0; 150 return 0;
148 } 151 }
149 152
153 /* select user or default irq flags */
154 irqflags = IRQF_TRIGGER_HIGH | IRQF_ONESHOT;
155 if (pdata->irq_flags)
156 irqflags = pdata->irq_flags;
157
150 ret = regmap_add_irq_chip(wm8994->regmap, wm8994->irq, 158 ret = regmap_add_irq_chip(wm8994->regmap, wm8994->irq,
151 IRQF_TRIGGER_HIGH | IRQF_ONESHOT, 159 irqflags,
152 wm8994->irq_base, &wm8994_irq_chip, 160 wm8994->irq_base, &wm8994_irq_chip,
153 &wm8994->irq_data); 161 &wm8994->irq_data);
154 if (ret != 0) { 162 if (ret != 0) {
diff --git a/drivers/misc/ab8500-pwm.c b/drivers/misc/ab8500-pwm.c
index 042a8fe4efaa..d7a9aa14e5d5 100644
--- a/drivers/misc/ab8500-pwm.c
+++ b/drivers/misc/ab8500-pwm.c
@@ -142,16 +142,10 @@ static int __devexit ab8500_pwm_remove(struct platform_device *pdev)
142 return 0; 142 return 0;
143} 143}
144 144
145static const struct of_device_id ab8500_pwm_match[] = {
146 { .compatible = "stericsson,ab8500-pwm", },
147 {}
148};
149
150static struct platform_driver ab8500_pwm_driver = { 145static struct platform_driver ab8500_pwm_driver = {
151 .driver = { 146 .driver = {
152 .name = "ab8500-pwm", 147 .name = "ab8500-pwm",
153 .owner = THIS_MODULE, 148 .owner = THIS_MODULE,
154 .of_match_table = ab8500_pwm_match,
155 }, 149 },
156 .probe = ab8500_pwm_probe, 150 .probe = ab8500_pwm_probe,
157 .remove = __devexit_p(ab8500_pwm_remove), 151 .remove = __devexit_p(ab8500_pwm_remove),
diff --git a/drivers/regulator/Kconfig b/drivers/regulator/Kconfig
index f34c3be6c9fe..4e932cc695e9 100644
--- a/drivers/regulator/Kconfig
+++ b/drivers/regulator/Kconfig
@@ -272,7 +272,7 @@ config REGULATOR_S2MPS11
272 272
273config REGULATOR_S5M8767 273config REGULATOR_S5M8767
274 tristate "Samsung S5M8767A voltage regulator" 274 tristate "Samsung S5M8767A voltage regulator"
275 depends on MFD_S5M_CORE 275 depends on MFD_SEC_CORE
276 help 276 help
277 This driver supports a Samsung S5M8767A voltage output regulator 277 This driver supports a Samsung S5M8767A voltage output regulator
278 via I2C bus. S5M8767A have 9 Bucks and 28 LDOs output and 278 via I2C bus. S5M8767A have 9 Bucks and 28 LDOs output and
diff --git a/drivers/regulator/ab8500.c b/drivers/regulator/ab8500.c
index 13d424fc1c14..10f2f4d4d190 100644
--- a/drivers/regulator/ab8500.c
+++ b/drivers/regulator/ab8500.c
@@ -848,18 +848,12 @@ static __devexit int ab8500_regulator_remove(struct platform_device *pdev)
848 return 0; 848 return 0;
849} 849}
850 850
851static const struct of_device_id ab8500_regulator_match[] = {
852 { .compatible = "stericsson,ab8500-regulator", },
853 {}
854};
855
856static struct platform_driver ab8500_regulator_driver = { 851static struct platform_driver ab8500_regulator_driver = {
857 .probe = ab8500_regulator_probe, 852 .probe = ab8500_regulator_probe,
858 .remove = __devexit_p(ab8500_regulator_remove), 853 .remove = __devexit_p(ab8500_regulator_remove),
859 .driver = { 854 .driver = {
860 .name = "ab8500-regulator", 855 .name = "ab8500-regulator",
861 .owner = THIS_MODULE, 856 .owner = THIS_MODULE,
862 .of_match_table = ab8500_regulator_match,
863 }, 857 },
864}; 858};
865 859
diff --git a/drivers/regulator/db8500-prcmu.c b/drivers/regulator/db8500-prcmu.c
index 9dbb491b6efa..359f8d18fc3f 100644
--- a/drivers/regulator/db8500-prcmu.c
+++ b/drivers/regulator/db8500-prcmu.c
@@ -547,16 +547,10 @@ static int __exit db8500_regulator_remove(struct platform_device *pdev)
547 return 0; 547 return 0;
548} 548}
549 549
550static const struct of_device_id db8500_prcmu_regulator_match[] = {
551 { .compatible = "stericsson,db8500-prcmu-regulator", },
552 {}
553};
554
555static struct platform_driver db8500_regulator_driver = { 550static struct platform_driver db8500_regulator_driver = {
556 .driver = { 551 .driver = {
557 .name = "db8500-prcmu-regulators", 552 .name = "db8500-prcmu-regulators",
558 .owner = THIS_MODULE, 553 .owner = THIS_MODULE,
559 .of_match_table = db8500_prcmu_regulator_match,
560 }, 554 },
561 .probe = db8500_regulator_probe, 555 .probe = db8500_regulator_probe,
562 .remove = __exit_p(db8500_regulator_remove), 556 .remove = __exit_p(db8500_regulator_remove),
diff --git a/drivers/regulator/s5m8767.c b/drivers/regulator/s5m8767.c
index 102287fa7ecb..5a0d18a7aa2a 100644
--- a/drivers/regulator/s5m8767.c
+++ b/drivers/regulator/s5m8767.c
@@ -19,15 +19,15 @@
19#include <linux/platform_device.h> 19#include <linux/platform_device.h>
20#include <linux/regulator/driver.h> 20#include <linux/regulator/driver.h>
21#include <linux/regulator/machine.h> 21#include <linux/regulator/machine.h>
22#include <linux/mfd/s5m87xx/s5m-core.h> 22#include <linux/mfd/samsung/core.h>
23#include <linux/mfd/s5m87xx/s5m-pmic.h> 23#include <linux/mfd/samsung/s5m8767.h>
24 24
25struct s5m8767_info { 25struct s5m8767_info {
26 struct device *dev; 26 struct device *dev;
27 struct s5m87xx_dev *iodev; 27 struct sec_pmic_dev *iodev;
28 int num_regulators; 28 int num_regulators;
29 struct regulator_dev **rdev; 29 struct regulator_dev **rdev;
30 struct s5m_opmode_data *opmode; 30 struct sec_opmode_data *opmode;
31 31
32 int ramp_delay; 32 int ramp_delay;
33 bool buck2_ramp; 33 bool buck2_ramp;
@@ -45,43 +45,43 @@ struct s5m8767_info {
45 int buck_gpioindex; 45 int buck_gpioindex;
46}; 46};
47 47
48struct s5m_voltage_desc { 48struct sec_voltage_desc {
49 int max; 49 int max;
50 int min; 50 int min;
51 int step; 51 int step;
52}; 52};
53 53
54static const struct s5m_voltage_desc buck_voltage_val1 = { 54static const struct sec_voltage_desc buck_voltage_val1 = {
55 .max = 2225000, 55 .max = 2225000,
56 .min = 650000, 56 .min = 650000,
57 .step = 6250, 57 .step = 6250,
58}; 58};
59 59
60static const struct s5m_voltage_desc buck_voltage_val2 = { 60static const struct sec_voltage_desc buck_voltage_val2 = {
61 .max = 1600000, 61 .max = 1600000,
62 .min = 600000, 62 .min = 600000,
63 .step = 6250, 63 .step = 6250,
64}; 64};
65 65
66static const struct s5m_voltage_desc buck_voltage_val3 = { 66static const struct sec_voltage_desc buck_voltage_val3 = {
67 .max = 3000000, 67 .max = 3000000,
68 .min = 750000, 68 .min = 750000,
69 .step = 12500, 69 .step = 12500,
70}; 70};
71 71
72static const struct s5m_voltage_desc ldo_voltage_val1 = { 72static const struct sec_voltage_desc ldo_voltage_val1 = {
73 .max = 3950000, 73 .max = 3950000,
74 .min = 800000, 74 .min = 800000,
75 .step = 50000, 75 .step = 50000,
76}; 76};
77 77
78static const struct s5m_voltage_desc ldo_voltage_val2 = { 78static const struct sec_voltage_desc ldo_voltage_val2 = {
79 .max = 2375000, 79 .max = 2375000,
80 .min = 800000, 80 .min = 800000,
81 .step = 25000, 81 .step = 25000,
82}; 82};
83 83
84static const struct s5m_voltage_desc *reg_voltage_map[] = { 84static const struct sec_voltage_desc *reg_voltage_map[] = {
85 [S5M8767_LDO1] = &ldo_voltage_val2, 85 [S5M8767_LDO1] = &ldo_voltage_val2,
86 [S5M8767_LDO2] = &ldo_voltage_val2, 86 [S5M8767_LDO2] = &ldo_voltage_val2,
87 [S5M8767_LDO3] = &ldo_voltage_val1, 87 [S5M8767_LDO3] = &ldo_voltage_val1,
@@ -213,7 +213,7 @@ static int s5m8767_reg_is_enabled(struct regulator_dev *rdev)
213 else if (ret) 213 else if (ret)
214 return ret; 214 return ret;
215 215
216 ret = s5m_reg_read(s5m8767->iodev, reg, &val); 216 ret = sec_reg_read(s5m8767->iodev, reg, &val);
217 if (ret) 217 if (ret)
218 return ret; 218 return ret;
219 219
@@ -230,7 +230,7 @@ static int s5m8767_reg_enable(struct regulator_dev *rdev)
230 if (ret) 230 if (ret)
231 return ret; 231 return ret;
232 232
233 return s5m_reg_update(s5m8767->iodev, reg, enable_ctrl, mask); 233 return sec_reg_update(s5m8767->iodev, reg, enable_ctrl, mask);
234} 234}
235 235
236static int s5m8767_reg_disable(struct regulator_dev *rdev) 236static int s5m8767_reg_disable(struct regulator_dev *rdev)
@@ -243,7 +243,7 @@ static int s5m8767_reg_disable(struct regulator_dev *rdev)
243 if (ret) 243 if (ret)
244 return ret; 244 return ret;
245 245
246 return s5m_reg_update(s5m8767->iodev, reg, ~mask, mask); 246 return sec_reg_update(s5m8767->iodev, reg, ~mask, mask);
247} 247}
248 248
249static int s5m8767_get_voltage_register(struct regulator_dev *rdev, int *_reg) 249static int s5m8767_get_voltage_register(struct regulator_dev *rdev, int *_reg)
@@ -305,7 +305,7 @@ static int s5m8767_get_voltage_sel(struct regulator_dev *rdev)
305 305
306 mask = (reg_id < S5M8767_BUCK1) ? 0x3f : 0xff; 306 mask = (reg_id < S5M8767_BUCK1) ? 0x3f : 0xff;
307 307
308 ret = s5m_reg_read(s5m8767->iodev, reg, &val); 308 ret = sec_reg_read(s5m8767->iodev, reg, &val);
309 if (ret) 309 if (ret)
310 return ret; 310 return ret;
311 311
@@ -315,7 +315,7 @@ static int s5m8767_get_voltage_sel(struct regulator_dev *rdev)
315} 315}
316 316
317static int s5m8767_convert_voltage_to_sel( 317static int s5m8767_convert_voltage_to_sel(
318 const struct s5m_voltage_desc *desc, 318 const struct sec_voltage_desc *desc,
319 int min_vol, int max_vol) 319 int min_vol, int max_vol)
320{ 320{
321 int selector = 0; 321 int selector = 0;
@@ -407,7 +407,7 @@ static int s5m8767_set_voltage_sel(struct regulator_dev *rdev,
407 if (ret) 407 if (ret)
408 return ret; 408 return ret;
409 409
410 return s5m_reg_update(s5m8767->iodev, reg, selector, mask); 410 return sec_reg_update(s5m8767->iodev, reg, selector, mask);
411 } 411 }
412} 412}
413 413
@@ -416,7 +416,7 @@ static int s5m8767_set_voltage_time_sel(struct regulator_dev *rdev,
416 unsigned int new_sel) 416 unsigned int new_sel)
417{ 417{
418 struct s5m8767_info *s5m8767 = rdev_get_drvdata(rdev); 418 struct s5m8767_info *s5m8767 = rdev_get_drvdata(rdev);
419 const struct s5m_voltage_desc *desc; 419 const struct sec_voltage_desc *desc;
420 int reg_id = rdev_get_id(rdev); 420 int reg_id = rdev_get_id(rdev);
421 421
422 desc = reg_voltage_map[reg_id]; 422 desc = reg_voltage_map[reg_id];
@@ -501,8 +501,8 @@ static struct regulator_desc regulators[] = {
501 501
502static __devinit int s5m8767_pmic_probe(struct platform_device *pdev) 502static __devinit int s5m8767_pmic_probe(struct platform_device *pdev)
503{ 503{
504 struct s5m87xx_dev *iodev = dev_get_drvdata(pdev->dev.parent); 504 struct sec_pmic_dev *iodev = dev_get_drvdata(pdev->dev.parent);
505 struct s5m_platform_data *pdata = dev_get_platdata(iodev->dev); 505 struct sec_platform_data *pdata = dev_get_platdata(iodev->dev);
506 struct regulator_config config = { }; 506 struct regulator_config config = { };
507 struct regulator_dev **rdev; 507 struct regulator_dev **rdev;
508 struct s5m8767_info *s5m8767; 508 struct s5m8767_info *s5m8767;
@@ -671,13 +671,13 @@ static __devinit int s5m8767_pmic_probe(struct platform_device *pdev)
671 671
672 if (pdata->buck2_gpiodvs || pdata->buck3_gpiodvs || 672 if (pdata->buck2_gpiodvs || pdata->buck3_gpiodvs ||
673 pdata->buck4_gpiodvs) { 673 pdata->buck4_gpiodvs) {
674 s5m_reg_update(s5m8767->iodev, S5M8767_REG_BUCK2CTRL, 674 sec_reg_update(s5m8767->iodev, S5M8767_REG_BUCK2CTRL,
675 (pdata->buck2_gpiodvs) ? (1 << 1) : (0 << 1), 675 (pdata->buck2_gpiodvs) ? (1 << 1) : (0 << 1),
676 1 << 1); 676 1 << 1);
677 s5m_reg_update(s5m8767->iodev, S5M8767_REG_BUCK3CTRL, 677 sec_reg_update(s5m8767->iodev, S5M8767_REG_BUCK3CTRL,
678 (pdata->buck3_gpiodvs) ? (1 << 1) : (0 << 1), 678 (pdata->buck3_gpiodvs) ? (1 << 1) : (0 << 1),
679 1 << 1); 679 1 << 1);
680 s5m_reg_update(s5m8767->iodev, S5M8767_REG_BUCK4CTRL, 680 sec_reg_update(s5m8767->iodev, S5M8767_REG_BUCK4CTRL,
681 (pdata->buck4_gpiodvs) ? (1 << 1) : (0 << 1), 681 (pdata->buck4_gpiodvs) ? (1 << 1) : (0 << 1),
682 1 << 1); 682 1 << 1);
683 } 683 }
@@ -685,61 +685,61 @@ static __devinit int s5m8767_pmic_probe(struct platform_device *pdev)
685 /* Initialize GPIO DVS registers */ 685 /* Initialize GPIO DVS registers */
686 for (i = 0; i < 8; i++) { 686 for (i = 0; i < 8; i++) {
687 if (s5m8767->buck2_gpiodvs) { 687 if (s5m8767->buck2_gpiodvs) {
688 s5m_reg_write(s5m8767->iodev, S5M8767_REG_BUCK2DVS1 + i, 688 sec_reg_write(s5m8767->iodev, S5M8767_REG_BUCK2DVS1 + i,
689 s5m8767->buck2_vol[i]); 689 s5m8767->buck2_vol[i]);
690 } 690 }
691 691
692 if (s5m8767->buck3_gpiodvs) { 692 if (s5m8767->buck3_gpiodvs) {
693 s5m_reg_write(s5m8767->iodev, S5M8767_REG_BUCK3DVS1 + i, 693 sec_reg_write(s5m8767->iodev, S5M8767_REG_BUCK3DVS1 + i,
694 s5m8767->buck3_vol[i]); 694 s5m8767->buck3_vol[i]);
695 } 695 }
696 696
697 if (s5m8767->buck4_gpiodvs) { 697 if (s5m8767->buck4_gpiodvs) {
698 s5m_reg_write(s5m8767->iodev, S5M8767_REG_BUCK4DVS1 + i, 698 sec_reg_write(s5m8767->iodev, S5M8767_REG_BUCK4DVS1 + i,
699 s5m8767->buck4_vol[i]); 699 s5m8767->buck4_vol[i]);
700 } 700 }
701 } 701 }
702 702
703 if (s5m8767->buck2_ramp) 703 if (s5m8767->buck2_ramp)
704 s5m_reg_update(s5m8767->iodev, S5M8767_REG_DVSRAMP, 0x08, 0x08); 704 sec_reg_update(s5m8767->iodev, S5M8767_REG_DVSRAMP, 0x08, 0x08);
705 705
706 if (s5m8767->buck3_ramp) 706 if (s5m8767->buck3_ramp)
707 s5m_reg_update(s5m8767->iodev, S5M8767_REG_DVSRAMP, 0x04, 0x04); 707 sec_reg_update(s5m8767->iodev, S5M8767_REG_DVSRAMP, 0x04, 0x04);
708 708
709 if (s5m8767->buck4_ramp) 709 if (s5m8767->buck4_ramp)
710 s5m_reg_update(s5m8767->iodev, S5M8767_REG_DVSRAMP, 0x02, 0x02); 710 sec_reg_update(s5m8767->iodev, S5M8767_REG_DVSRAMP, 0x02, 0x02);
711 711
712 if (s5m8767->buck2_ramp || s5m8767->buck3_ramp 712 if (s5m8767->buck2_ramp || s5m8767->buck3_ramp
713 || s5m8767->buck4_ramp) { 713 || s5m8767->buck4_ramp) {
714 switch (s5m8767->ramp_delay) { 714 switch (s5m8767->ramp_delay) {
715 case 5: 715 case 5:
716 s5m_reg_update(s5m8767->iodev, S5M8767_REG_DVSRAMP, 716 sec_reg_update(s5m8767->iodev, S5M8767_REG_DVSRAMP,
717 0x40, 0xf0); 717 0x40, 0xf0);
718 break; 718 break;
719 case 10: 719 case 10:
720 s5m_reg_update(s5m8767->iodev, S5M8767_REG_DVSRAMP, 720 sec_reg_update(s5m8767->iodev, S5M8767_REG_DVSRAMP,
721 0x90, 0xf0); 721 0x90, 0xf0);
722 break; 722 break;
723 case 25: 723 case 25:
724 s5m_reg_update(s5m8767->iodev, S5M8767_REG_DVSRAMP, 724 sec_reg_update(s5m8767->iodev, S5M8767_REG_DVSRAMP,
725 0xd0, 0xf0); 725 0xd0, 0xf0);
726 break; 726 break;
727 case 50: 727 case 50:
728 s5m_reg_update(s5m8767->iodev, S5M8767_REG_DVSRAMP, 728 sec_reg_update(s5m8767->iodev, S5M8767_REG_DVSRAMP,
729 0xe0, 0xf0); 729 0xe0, 0xf0);
730 break; 730 break;
731 case 100: 731 case 100:
732 s5m_reg_update(s5m8767->iodev, S5M8767_REG_DVSRAMP, 732 sec_reg_update(s5m8767->iodev, S5M8767_REG_DVSRAMP,
733 0xf0, 0xf0); 733 0xf0, 0xf0);
734 break; 734 break;
735 default: 735 default:
736 s5m_reg_update(s5m8767->iodev, S5M8767_REG_DVSRAMP, 736 sec_reg_update(s5m8767->iodev, S5M8767_REG_DVSRAMP,
737 0x90, 0xf0); 737 0x90, 0xf0);
738 } 738 }
739 } 739 }
740 740
741 for (i = 0; i < pdata->num_regulators; i++) { 741 for (i = 0; i < pdata->num_regulators; i++) {
742 const struct s5m_voltage_desc *desc; 742 const struct sec_voltage_desc *desc;
743 int id = pdata->regulators[i].id; 743 int id = pdata->regulators[i].id;
744 744
745 desc = reg_voltage_map[id]; 745 desc = reg_voltage_map[id];
diff --git a/drivers/rtc/Kconfig b/drivers/rtc/Kconfig
index 08cbdb900a18..f049c02413ce 100644
--- a/drivers/rtc/Kconfig
+++ b/drivers/rtc/Kconfig
@@ -135,6 +135,16 @@ config RTC_DRV_88PM860X
135 This driver can also be built as a module. If so, the module 135 This driver can also be built as a module. If so, the module
136 will be called rtc-88pm860x. 136 will be called rtc-88pm860x.
137 137
138config RTC_DRV_88PM80X
139 tristate "Marvell 88PM80x"
140 depends on RTC_CLASS && I2C && MFD_88PM800
141 help
142 If you say yes here you get support for RTC function in Marvell
143 88PM80x chips.
144
145 This driver can also be built as a module. If so, the module
146 will be called rtc-88pm80x.
147
138config RTC_DRV_DS1307 148config RTC_DRV_DS1307
139 tristate "Dallas/Maxim DS1307/37/38/39/40, ST M41T00, EPSON RX-8025" 149 tristate "Dallas/Maxim DS1307/37/38/39/40, ST M41T00, EPSON RX-8025"
140 help 150 help
diff --git a/drivers/rtc/Makefile b/drivers/rtc/Makefile
index 2973921c30d8..0d5b2b66f90d 100644
--- a/drivers/rtc/Makefile
+++ b/drivers/rtc/Makefile
@@ -16,6 +16,7 @@ rtc-core-$(CONFIG_RTC_INTF_SYSFS) += rtc-sysfs.o
16# Keep the list ordered. 16# Keep the list ordered.
17 17
18obj-$(CONFIG_RTC_DRV_88PM860X) += rtc-88pm860x.o 18obj-$(CONFIG_RTC_DRV_88PM860X) += rtc-88pm860x.o
19obj-$(CONFIG_RTC_DRV_88PM80X) += rtc-88pm80x.o
19obj-$(CONFIG_RTC_DRV_AB3100) += rtc-ab3100.o 20obj-$(CONFIG_RTC_DRV_AB3100) += rtc-ab3100.o
20obj-$(CONFIG_RTC_DRV_AB8500) += rtc-ab8500.o 21obj-$(CONFIG_RTC_DRV_AB8500) += rtc-ab8500.o
21obj-$(CONFIG_RTC_DRV_AT32AP700X)+= rtc-at32ap700x.o 22obj-$(CONFIG_RTC_DRV_AT32AP700X)+= rtc-at32ap700x.o
diff --git a/drivers/rtc/rtc-88pm80x.c b/drivers/rtc/rtc-88pm80x.c
new file mode 100644
index 000000000000..a2f956d90de0
--- /dev/null
+++ b/drivers/rtc/rtc-88pm80x.c
@@ -0,0 +1,371 @@
1/*
2 * Real Time Clock driver for Marvell 88PM80x PMIC
3 *
4 * Copyright (c) 2012 Marvell International Ltd.
5 * Wenzeng Chen<wzch@marvell.com>
6 * Qiao Zhou <zhouqiao@marvell.com>
7 *
8 * This file is subject to the terms and conditions of the GNU General
9 * Public License. See the file "COPYING" in the main directory of this
10 * archive for more details.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 */
21
22#include <linux/kernel.h>
23#include <linux/module.h>
24#include <linux/slab.h>
25#include <linux/regmap.h>
26#include <linux/mfd/core.h>
27#include <linux/mfd/88pm80x.h>
28#include <linux/rtc.h>
29
30#define PM800_RTC_COUNTER1 (0xD1)
31#define PM800_RTC_COUNTER2 (0xD2)
32#define PM800_RTC_COUNTER3 (0xD3)
33#define PM800_RTC_COUNTER4 (0xD4)
34#define PM800_RTC_EXPIRE1_1 (0xD5)
35#define PM800_RTC_EXPIRE1_2 (0xD6)
36#define PM800_RTC_EXPIRE1_3 (0xD7)
37#define PM800_RTC_EXPIRE1_4 (0xD8)
38#define PM800_RTC_TRIM1 (0xD9)
39#define PM800_RTC_TRIM2 (0xDA)
40#define PM800_RTC_TRIM3 (0xDB)
41#define PM800_RTC_TRIM4 (0xDC)
42#define PM800_RTC_EXPIRE2_1 (0xDD)
43#define PM800_RTC_EXPIRE2_2 (0xDE)
44#define PM800_RTC_EXPIRE2_3 (0xDF)
45#define PM800_RTC_EXPIRE2_4 (0xE0)
46
47#define PM800_POWER_DOWN_LOG1 (0xE5)
48#define PM800_POWER_DOWN_LOG2 (0xE6)
49
50struct pm80x_rtc_info {
51 struct pm80x_chip *chip;
52 struct regmap *map;
53 struct rtc_device *rtc_dev;
54 struct device *dev;
55 struct delayed_work calib_work;
56
57 int irq;
58 int vrtc;
59};
60
61static irqreturn_t rtc_update_handler(int irq, void *data)
62{
63 struct pm80x_rtc_info *info = (struct pm80x_rtc_info *)data;
64 int mask;
65
66 mask = PM800_ALARM | PM800_ALARM_WAKEUP;
67 regmap_update_bits(info->map, PM800_RTC_CONTROL, mask | PM800_ALARM1_EN,
68 mask);
69 rtc_update_irq(info->rtc_dev, 1, RTC_AF);
70 return IRQ_HANDLED;
71}
72
73static int pm80x_rtc_alarm_irq_enable(struct device *dev, unsigned int enabled)
74{
75 struct pm80x_rtc_info *info = dev_get_drvdata(dev);
76
77 if (enabled)
78 regmap_update_bits(info->map, PM800_RTC_CONTROL,
79 PM800_ALARM1_EN, PM800_ALARM1_EN);
80 else
81 regmap_update_bits(info->map, PM800_RTC_CONTROL,
82 PM800_ALARM1_EN, 0);
83 return 0;
84}
85
86/*
87 * Calculate the next alarm time given the requested alarm time mask
88 * and the current time.
89 */
90static void rtc_next_alarm_time(struct rtc_time *next, struct rtc_time *now,
91 struct rtc_time *alrm)
92{
93 unsigned long next_time;
94 unsigned long now_time;
95
96 next->tm_year = now->tm_year;
97 next->tm_mon = now->tm_mon;
98 next->tm_mday = now->tm_mday;
99 next->tm_hour = alrm->tm_hour;
100 next->tm_min = alrm->tm_min;
101 next->tm_sec = alrm->tm_sec;
102
103 rtc_tm_to_time(now, &now_time);
104 rtc_tm_to_time(next, &next_time);
105
106 if (next_time < now_time) {
107 /* Advance one day */
108 next_time += 60 * 60 * 24;
109 rtc_time_to_tm(next_time, next);
110 }
111}
112
113static int pm80x_rtc_read_time(struct device *dev, struct rtc_time *tm)
114{
115 struct pm80x_rtc_info *info = dev_get_drvdata(dev);
116 unsigned char buf[4];
117 unsigned long ticks, base, data;
118 regmap_raw_read(info->map, PM800_RTC_EXPIRE2_1, buf, 4);
119 base = (buf[3] << 24) | (buf[2] << 16) | (buf[1] << 8) | buf[0];
120 dev_dbg(info->dev, "%x-%x-%x-%x\n", buf[0], buf[1], buf[2], buf[3]);
121
122 /* load 32-bit read-only counter */
123 regmap_raw_read(info->map, PM800_RTC_COUNTER1, buf, 4);
124 data = (buf[3] << 24) | (buf[2] << 16) | (buf[1] << 8) | buf[0];
125 ticks = base + data;
126 dev_dbg(info->dev, "get base:0x%lx, RO count:0x%lx, ticks:0x%lx\n",
127 base, data, ticks);
128 rtc_time_to_tm(ticks, tm);
129 return 0;
130}
131
132static int pm80x_rtc_set_time(struct device *dev, struct rtc_time *tm)
133{
134 struct pm80x_rtc_info *info = dev_get_drvdata(dev);
135 unsigned char buf[4];
136 unsigned long ticks, base, data;
137 if ((tm->tm_year < 70) || (tm->tm_year > 138)) {
138 dev_dbg(info->dev,
139 "Set time %d out of range. Please set time between 1970 to 2038.\n",
140 1900 + tm->tm_year);
141 return -EINVAL;
142 }
143 rtc_tm_to_time(tm, &ticks);
144
145 /* load 32-bit read-only counter */
146 regmap_raw_read(info->map, PM800_RTC_COUNTER1, buf, 4);
147 data = (buf[3] << 24) | (buf[2] << 16) | (buf[1] << 8) | buf[0];
148 base = ticks - data;
149 dev_dbg(info->dev, "set base:0x%lx, RO count:0x%lx, ticks:0x%lx\n",
150 base, data, ticks);
151 buf[0] = base & 0xFF;
152 buf[1] = (base >> 8) & 0xFF;
153 buf[2] = (base >> 16) & 0xFF;
154 buf[3] = (base >> 24) & 0xFF;
155 regmap_raw_write(info->map, PM800_RTC_EXPIRE2_1, buf, 4);
156
157 return 0;
158}
159
160static int pm80x_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alrm)
161{
162 struct pm80x_rtc_info *info = dev_get_drvdata(dev);
163 unsigned char buf[4];
164 unsigned long ticks, base, data;
165 int ret;
166
167 regmap_raw_read(info->map, PM800_RTC_EXPIRE2_1, buf, 4);
168 base = (buf[3] << 24) | (buf[2] << 16) | (buf[1] << 8) | buf[0];
169 dev_dbg(info->dev, "%x-%x-%x-%x\n", buf[0], buf[1], buf[2], buf[3]);
170
171 regmap_raw_read(info->map, PM800_RTC_EXPIRE1_1, buf, 4);
172 data = (buf[3] << 24) | (buf[2] << 16) | (buf[1] << 8) | buf[0];
173 ticks = base + data;
174 dev_dbg(info->dev, "get base:0x%lx, RO count:0x%lx, ticks:0x%lx\n",
175 base, data, ticks);
176
177 rtc_time_to_tm(ticks, &alrm->time);
178 regmap_read(info->map, PM800_RTC_CONTROL, &ret);
179 alrm->enabled = (ret & PM800_ALARM1_EN) ? 1 : 0;
180 alrm->pending = (ret & (PM800_ALARM | PM800_ALARM_WAKEUP)) ? 1 : 0;
181 return 0;
182}
183
184static int pm80x_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alrm)
185{
186 struct pm80x_rtc_info *info = dev_get_drvdata(dev);
187 struct rtc_time now_tm, alarm_tm;
188 unsigned long ticks, base, data;
189 unsigned char buf[4];
190 int mask;
191
192 regmap_update_bits(info->map, PM800_RTC_CONTROL, PM800_ALARM1_EN, 0);
193
194 regmap_raw_read(info->map, PM800_RTC_EXPIRE2_1, buf, 4);
195 base = (buf[3] << 24) | (buf[2] << 16) | (buf[1] << 8) | buf[0];
196 dev_dbg(info->dev, "%x-%x-%x-%x\n", buf[0], buf[1], buf[2], buf[3]);
197
198 /* load 32-bit read-only counter */
199 regmap_raw_read(info->map, PM800_RTC_COUNTER1, buf, 4);
200 data = (buf[3] << 24) | (buf[2] << 16) | (buf[1] << 8) | buf[0];
201 ticks = base + data;
202 dev_dbg(info->dev, "get base:0x%lx, RO count:0x%lx, ticks:0x%lx\n",
203 base, data, ticks);
204
205 rtc_time_to_tm(ticks, &now_tm);
206 dev_dbg(info->dev, "%s, now time : %lu\n", __func__, ticks);
207 rtc_next_alarm_time(&alarm_tm, &now_tm, &alrm->time);
208 /* get new ticks for alarm in 24 hours */
209 rtc_tm_to_time(&alarm_tm, &ticks);
210 dev_dbg(info->dev, "%s, alarm time: %lu\n", __func__, ticks);
211 data = ticks - base;
212
213 buf[0] = data & 0xff;
214 buf[1] = (data >> 8) & 0xff;
215 buf[2] = (data >> 16) & 0xff;
216 buf[3] = (data >> 24) & 0xff;
217 regmap_raw_write(info->map, PM800_RTC_EXPIRE1_1, buf, 4);
218 if (alrm->enabled) {
219 mask = PM800_ALARM | PM800_ALARM_WAKEUP | PM800_ALARM1_EN;
220 regmap_update_bits(info->map, PM800_RTC_CONTROL, mask, mask);
221 } else {
222 mask = PM800_ALARM | PM800_ALARM_WAKEUP | PM800_ALARM1_EN;
223 regmap_update_bits(info->map, PM800_RTC_CONTROL, mask,
224 PM800_ALARM | PM800_ALARM_WAKEUP);
225 }
226 return 0;
227}
228
229static const struct rtc_class_ops pm80x_rtc_ops = {
230 .read_time = pm80x_rtc_read_time,
231 .set_time = pm80x_rtc_set_time,
232 .read_alarm = pm80x_rtc_read_alarm,
233 .set_alarm = pm80x_rtc_set_alarm,
234 .alarm_irq_enable = pm80x_rtc_alarm_irq_enable,
235};
236
237#ifdef CONFIG_PM
238static int pm80x_rtc_suspend(struct device *dev)
239{
240 return pm80x_dev_suspend(dev);
241}
242
243static int pm80x_rtc_resume(struct device *dev)
244{
245 return pm80x_dev_resume(dev);
246}
247#endif
248
249static SIMPLE_DEV_PM_OPS(pm80x_rtc_pm_ops, pm80x_rtc_suspend, pm80x_rtc_resume);
250
251static int __devinit pm80x_rtc_probe(struct platform_device *pdev)
252{
253 struct pm80x_chip *chip = dev_get_drvdata(pdev->dev.parent);
254 struct pm80x_platform_data *pm80x_pdata;
255 struct pm80x_rtc_pdata *pdata = NULL;
256 struct pm80x_rtc_info *info;
257 struct rtc_time tm;
258 unsigned long ticks = 0;
259 int ret;
260
261 pdata = pdev->dev.platform_data;
262 if (pdata == NULL)
263 dev_warn(&pdev->dev, "No platform data!\n");
264
265 info =
266 devm_kzalloc(&pdev->dev, sizeof(struct pm80x_rtc_info), GFP_KERNEL);
267 if (!info)
268 return -ENOMEM;
269 info->irq = platform_get_irq(pdev, 0);
270 if (info->irq < 0) {
271 dev_err(&pdev->dev, "No IRQ resource!\n");
272 ret = -EINVAL;
273 goto out;
274 }
275
276 info->chip = chip;
277 info->map = chip->regmap;
278 if (!info->map) {
279 dev_err(&pdev->dev, "no regmap!\n");
280 ret = -EINVAL;
281 goto out;
282 }
283
284 info->dev = &pdev->dev;
285 dev_set_drvdata(&pdev->dev, info);
286
287 ret = pm80x_request_irq(chip, info->irq, rtc_update_handler,
288 IRQF_ONESHOT, "rtc", info);
289 if (ret < 0) {
290 dev_err(chip->dev, "Failed to request IRQ: #%d: %d\n",
291 info->irq, ret);
292 goto out;
293 }
294
295 ret = pm80x_rtc_read_time(&pdev->dev, &tm);
296 if (ret < 0) {
297 dev_err(&pdev->dev, "Failed to read initial time.\n");
298 goto out_rtc;
299 }
300 if ((tm.tm_year < 70) || (tm.tm_year > 138)) {
301 tm.tm_year = 70;
302 tm.tm_mon = 0;
303 tm.tm_mday = 1;
304 tm.tm_hour = 0;
305 tm.tm_min = 0;
306 tm.tm_sec = 0;
307 ret = pm80x_rtc_set_time(&pdev->dev, &tm);
308 if (ret < 0) {
309 dev_err(&pdev->dev, "Failed to set initial time.\n");
310 goto out_rtc;
311 }
312 }
313 rtc_tm_to_time(&tm, &ticks);
314
315 info->rtc_dev = rtc_device_register("88pm80x-rtc", &pdev->dev,
316 &pm80x_rtc_ops, THIS_MODULE);
317 ret = PTR_ERR(info->rtc_dev);
318 if (IS_ERR(info->rtc_dev)) {
319 dev_err(&pdev->dev, "Failed to register RTC device: %d\n", ret);
320 goto out_rtc;
321 }
322 /*
323 * enable internal XO instead of internal 3.25MHz clock since it can
324 * free running in PMIC power-down state.
325 */
326 regmap_update_bits(info->map, PM800_RTC_CONTROL, PM800_RTC1_USE_XO,
327 PM800_RTC1_USE_XO);
328
329 if (pdev->dev.parent->platform_data) {
330 pm80x_pdata = pdev->dev.parent->platform_data;
331 pdata = pm80x_pdata->rtc;
332 if (pdata)
333 info->rtc_dev->dev.platform_data = &pdata->rtc_wakeup;
334 }
335
336 device_init_wakeup(&pdev->dev, 1);
337
338 return 0;
339out_rtc:
340 pm80x_free_irq(chip, info->irq, info);
341out:
342 devm_kfree(&pdev->dev, info);
343 return ret;
344}
345
346static int __devexit pm80x_rtc_remove(struct platform_device *pdev)
347{
348 struct pm80x_rtc_info *info = platform_get_drvdata(pdev);
349 platform_set_drvdata(pdev, NULL);
350 rtc_device_unregister(info->rtc_dev);
351 pm80x_free_irq(info->chip, info->irq, info);
352 devm_kfree(&pdev->dev, info);
353 return 0;
354}
355
356static struct platform_driver pm80x_rtc_driver = {
357 .driver = {
358 .name = "88pm80x-rtc",
359 .owner = THIS_MODULE,
360 .pm = &pm80x_rtc_pm_ops,
361 },
362 .probe = pm80x_rtc_probe,
363 .remove = __devexit_p(pm80x_rtc_remove),
364};
365
366module_platform_driver(pm80x_rtc_driver);
367
368MODULE_LICENSE("GPL");
369MODULE_DESCRIPTION("Marvell 88PM80x RTC driver");
370MODULE_AUTHOR("Qiao Zhou <zhouqiao@marvell.com>");
371MODULE_ALIAS("platform:88pm80x-rtc");
diff --git a/drivers/rtc/rtc-max8925.c b/drivers/rtc/rtc-max8925.c
index 1459055a83aa..34e4349611db 100644
--- a/drivers/rtc/rtc-max8925.c
+++ b/drivers/rtc/rtc-max8925.c
@@ -69,6 +69,7 @@ struct max8925_rtc_info {
69 struct max8925_chip *chip; 69 struct max8925_chip *chip;
70 struct i2c_client *rtc; 70 struct i2c_client *rtc;
71 struct device *dev; 71 struct device *dev;
72 int irq;
72}; 73};
73 74
74static irqreturn_t rtc_update_handler(int irq, void *data) 75static irqreturn_t rtc_update_handler(int irq, void *data)
@@ -250,7 +251,7 @@ static int __devinit max8925_rtc_probe(struct platform_device *pdev)
250{ 251{
251 struct max8925_chip *chip = dev_get_drvdata(pdev->dev.parent); 252 struct max8925_chip *chip = dev_get_drvdata(pdev->dev.parent);
252 struct max8925_rtc_info *info; 253 struct max8925_rtc_info *info;
253 int irq, ret; 254 int ret;
254 255
255 info = kzalloc(sizeof(struct max8925_rtc_info), GFP_KERNEL); 256 info = kzalloc(sizeof(struct max8925_rtc_info), GFP_KERNEL);
256 if (!info) 257 if (!info)
@@ -258,13 +259,13 @@ static int __devinit max8925_rtc_probe(struct platform_device *pdev)
258 info->chip = chip; 259 info->chip = chip;
259 info->rtc = chip->rtc; 260 info->rtc = chip->rtc;
260 info->dev = &pdev->dev; 261 info->dev = &pdev->dev;
261 irq = chip->irq_base + MAX8925_IRQ_RTC_ALARM0; 262 info->irq = platform_get_irq(pdev, 0);
262 263
263 ret = request_threaded_irq(irq, NULL, rtc_update_handler, 264 ret = request_threaded_irq(info->irq, NULL, rtc_update_handler,
264 IRQF_ONESHOT, "rtc-alarm0", info); 265 IRQF_ONESHOT, "rtc-alarm0", info);
265 if (ret < 0) { 266 if (ret < 0) {
266 dev_err(chip->dev, "Failed to request IRQ: #%d: %d\n", 267 dev_err(chip->dev, "Failed to request IRQ: #%d: %d\n",
267 irq, ret); 268 info->irq, ret);
268 goto out_irq; 269 goto out_irq;
269 } 270 }
270 271
@@ -285,7 +286,7 @@ static int __devinit max8925_rtc_probe(struct platform_device *pdev)
285 return 0; 286 return 0;
286out_rtc: 287out_rtc:
287 platform_set_drvdata(pdev, NULL); 288 platform_set_drvdata(pdev, NULL);
288 free_irq(chip->irq_base + MAX8925_IRQ_RTC_ALARM0, info); 289 free_irq(info->irq, info);
289out_irq: 290out_irq:
290 kfree(info); 291 kfree(info);
291 return ret; 292 return ret;
@@ -296,7 +297,7 @@ static int __devexit max8925_rtc_remove(struct platform_device *pdev)
296 struct max8925_rtc_info *info = platform_get_drvdata(pdev); 297 struct max8925_rtc_info *info = platform_get_drvdata(pdev);
297 298
298 if (info) { 299 if (info) {
299 free_irq(info->chip->irq_base + MAX8925_IRQ_RTC_ALARM0, info); 300 free_irq(info->irq, info);
300 rtc_device_unregister(info->rtc_dev); 301 rtc_device_unregister(info->rtc_dev);
301 kfree(info); 302 kfree(info);
302 } 303 }
diff --git a/drivers/usb/host/ehci-omap.c b/drivers/usb/host/ehci-omap.c
index ec21f4a4a056..bb55eb4a7d48 100644
--- a/drivers/usb/host/ehci-omap.c
+++ b/drivers/usb/host/ehci-omap.c
@@ -152,14 +152,14 @@ static int omap_ehci_init(struct usb_hcd *hcd)
152 struct ehci_hcd_omap_platform_data *pdata; 152 struct ehci_hcd_omap_platform_data *pdata;
153 153
154 pdata = hcd->self.controller->platform_data; 154 pdata = hcd->self.controller->platform_data;
155
156 /* Hold PHYs in reset while initializing EHCI controller */
155 if (pdata->phy_reset) { 157 if (pdata->phy_reset) {
156 if (gpio_is_valid(pdata->reset_gpio_port[0])) 158 if (gpio_is_valid(pdata->reset_gpio_port[0]))
157 gpio_request_one(pdata->reset_gpio_port[0], 159 gpio_set_value_cansleep(pdata->reset_gpio_port[0], 0);
158 GPIOF_OUT_INIT_LOW, "USB1 PHY reset");
159 160
160 if (gpio_is_valid(pdata->reset_gpio_port[1])) 161 if (gpio_is_valid(pdata->reset_gpio_port[1]))
161 gpio_request_one(pdata->reset_gpio_port[1], 162 gpio_set_value_cansleep(pdata->reset_gpio_port[1], 0);
162 GPIOF_OUT_INIT_LOW, "USB2 PHY reset");
163 163
164 /* Hold the PHY in RESET for enough time till DIR is high */ 164 /* Hold the PHY in RESET for enough time till DIR is high */
165 udelay(10); 165 udelay(10);
diff --git a/include/linux/mfd/88pm80x.h b/include/linux/mfd/88pm80x.h
new file mode 100644
index 000000000000..a0ca0dca1244
--- /dev/null
+++ b/include/linux/mfd/88pm80x.h
@@ -0,0 +1,369 @@
1/*
2 * Marvell 88PM80x Interface
3 *
4 * Copyright (C) 2012 Marvell International Ltd.
5 * Qiao Zhou <zhouqiao@marvell.com>
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License version 2 as
9 * published by the Free Software Foundation.
10 */
11
12#ifndef __LINUX_MFD_88PM80X_H
13#define __LINUX_MFD_88PM80X_H
14
15#include <linux/platform_device.h>
16#include <linux/interrupt.h>
17#include <linux/regmap.h>
18#include <linux/atomic.h>
19
20#define PM80X_VERSION_MASK (0xFF) /* 80X chip ID mask */
21enum {
22 CHIP_INVALID = 0,
23 CHIP_PM800,
24 CHIP_PM805,
25 CHIP_MAX,
26};
27
28enum {
29 PM800_ID_BUCK1 = 0,
30 PM800_ID_BUCK2,
31 PM800_ID_BUCK3,
32 PM800_ID_BUCK4,
33 PM800_ID_BUCK5,
34
35 PM800_ID_LDO1,
36 PM800_ID_LDO2,
37 PM800_ID_LDO3,
38 PM800_ID_LDO4,
39 PM800_ID_LDO5,
40 PM800_ID_LDO6,
41 PM800_ID_LDO7,
42 PM800_ID_LDO8,
43 PM800_ID_LDO9,
44 PM800_ID_LDO10,
45 PM800_ID_LDO11,
46 PM800_ID_LDO12,
47 PM800_ID_LDO13,
48 PM800_ID_LDO14,
49 PM800_ID_LDO15,
50 PM800_ID_LDO16,
51 PM800_ID_LDO17,
52 PM800_ID_LDO18,
53 PM800_ID_LDO19,
54
55 PM800_ID_RG_MAX,
56};
57#define PM800_MAX_REGULATOR PM800_ID_RG_MAX /* 5 Bucks, 19 LDOs */
58#define PM800_NUM_BUCK (5) /*5 Bucks */
59#define PM800_NUM_LDO (19) /*19 Bucks */
60
61/* page 0 basic: slave adder 0x60 */
62
63#define PM800_STATUS_1 (0x01)
64#define PM800_ONKEY_STS1 (1 << 0)
65#define PM800_EXTON_STS1 (1 << 1)
66#define PM800_CHG_STS1 (1 << 2)
67#define PM800_BAT_STS1 (1 << 3)
68#define PM800_VBUS_STS1 (1 << 4)
69#define PM800_LDO_PGOOD_STS1 (1 << 5)
70#define PM800_BUCK_PGOOD_STS1 (1 << 6)
71
72#define PM800_STATUS_2 (0x02)
73#define PM800_RTC_ALARM_STS2 (1 << 0)
74
75/* Wakeup Registers */
76#define PM800_WAKEUP1 (0x0D)
77
78#define PM800_WAKEUP2 (0x0E)
79#define PM800_WAKEUP2_INV_INT (1 << 0)
80#define PM800_WAKEUP2_INT_CLEAR (1 << 1)
81#define PM800_WAKEUP2_INT_MASK (1 << 2)
82
83#define PM800_POWER_UP_LOG (0x10)
84
85/* Referance and low power registers */
86#define PM800_LOW_POWER1 (0x20)
87#define PM800_LOW_POWER2 (0x21)
88#define PM800_LOW_POWER_CONFIG3 (0x22)
89#define PM800_LOW_POWER_CONFIG4 (0x23)
90
91/* GPIO register */
92#define PM800_GPIO_0_1_CNTRL (0x30)
93#define PM800_GPIO0_VAL (1 << 0)
94#define PM800_GPIO0_GPIO_MODE(x) (x << 1)
95#define PM800_GPIO1_VAL (1 << 4)
96#define PM800_GPIO1_GPIO_MODE(x) (x << 5)
97
98#define PM800_GPIO_2_3_CNTRL (0x31)
99#define PM800_GPIO2_VAL (1 << 0)
100#define PM800_GPIO2_GPIO_MODE(x) (x << 1)
101#define PM800_GPIO3_VAL (1 << 4)
102#define PM800_GPIO3_GPIO_MODE(x) (x << 5)
103#define PM800_GPIO3_MODE_MASK 0x1F
104#define PM800_GPIO3_HEADSET_MODE PM800_GPIO3_GPIO_MODE(6)
105
106#define PM800_GPIO_4_CNTRL (0x32)
107#define PM800_GPIO4_VAL (1 << 0)
108#define PM800_GPIO4_GPIO_MODE(x) (x << 1)
109
110#define PM800_HEADSET_CNTRL (0x38)
111#define PM800_HEADSET_DET_EN (1 << 7)
112#define PM800_HSDET_SLP (1 << 1)
113/* PWM register */
114#define PM800_PWM1 (0x40)
115#define PM800_PWM2 (0x41)
116#define PM800_PWM3 (0x42)
117#define PM800_PWM4 (0x43)
118
119/* RTC Registers */
120#define PM800_RTC_CONTROL (0xD0)
121#define PM800_RTC_MISC1 (0xE1)
122#define PM800_RTC_MISC2 (0xE2)
123#define PM800_RTC_MISC3 (0xE3)
124#define PM800_RTC_MISC4 (0xE4)
125#define PM800_RTC_MISC5 (0xE7)
126/* bit definitions of RTC Register 1 (0xD0) */
127#define PM800_ALARM1_EN (1 << 0)
128#define PM800_ALARM_WAKEUP (1 << 4)
129#define PM800_ALARM (1 << 5)
130#define PM800_RTC1_USE_XO (1 << 7)
131
132/* Regulator Control Registers: BUCK1,BUCK5,LDO1 have DVC */
133
134/* buck registers */
135#define PM800_SLEEP_BUCK1 (0x30)
136
137/* BUCK Sleep Mode Register 1: BUCK[1..4] */
138#define PM800_BUCK_SLP1 (0x5A)
139#define PM800_BUCK1_SLP1_SHIFT 0
140#define PM800_BUCK1_SLP1_MASK (0x3 << PM800_BUCK1_SLP1_SHIFT)
141
142/* page 2 GPADC: slave adder 0x02 */
143#define PM800_GPADC_MEAS_EN1 (0x01)
144#define PM800_MEAS_EN1_VBAT (1 << 2)
145#define PM800_GPADC_MEAS_EN2 (0x02)
146#define PM800_MEAS_EN2_RFTMP (1 << 0)
147#define PM800_MEAS_GP0_EN (1 << 2)
148#define PM800_MEAS_GP1_EN (1 << 3)
149#define PM800_MEAS_GP2_EN (1 << 4)
150#define PM800_MEAS_GP3_EN (1 << 5)
151#define PM800_MEAS_GP4_EN (1 << 6)
152
153#define PM800_GPADC_MISC_CONFIG1 (0x05)
154#define PM800_GPADC_MISC_CONFIG2 (0x06)
155#define PM800_GPADC_MISC_GPFSM_EN (1 << 0)
156#define PM800_GPADC_SLOW_MODE(x) (x << 3)
157
158#define PM800_GPADC_MISC_CONFIG3 (0x09)
159#define PM800_GPADC_MISC_CONFIG4 (0x0A)
160
161#define PM800_GPADC_PREBIAS1 (0x0F)
162#define PM800_GPADC0_GP_PREBIAS_TIME(x) (x << 0)
163#define PM800_GPADC_PREBIAS2 (0x10)
164
165#define PM800_GP_BIAS_ENA1 (0x14)
166#define PM800_GPADC_GP_BIAS_EN0 (1 << 0)
167#define PM800_GPADC_GP_BIAS_EN1 (1 << 1)
168#define PM800_GPADC_GP_BIAS_EN2 (1 << 2)
169#define PM800_GPADC_GP_BIAS_EN3 (1 << 3)
170
171#define PM800_GP_BIAS_OUT1 (0x15)
172#define PM800_BIAS_OUT_GP0 (1 << 0)
173#define PM800_BIAS_OUT_GP1 (1 << 1)
174#define PM800_BIAS_OUT_GP2 (1 << 2)
175#define PM800_BIAS_OUT_GP3 (1 << 3)
176
177#define PM800_GPADC0_LOW_TH 0x20
178#define PM800_GPADC1_LOW_TH 0x21
179#define PM800_GPADC2_LOW_TH 0x22
180#define PM800_GPADC3_LOW_TH 0x23
181#define PM800_GPADC4_LOW_TH 0x24
182
183#define PM800_GPADC0_UPP_TH 0x30
184#define PM800_GPADC1_UPP_TH 0x31
185#define PM800_GPADC2_UPP_TH 0x32
186#define PM800_GPADC3_UPP_TH 0x33
187#define PM800_GPADC4_UPP_TH 0x34
188
189#define PM800_VBBAT_MEAS1 0x40
190#define PM800_VBBAT_MEAS2 0x41
191#define PM800_VBAT_MEAS1 0x42
192#define PM800_VBAT_MEAS2 0x43
193#define PM800_VSYS_MEAS1 0x44
194#define PM800_VSYS_MEAS2 0x45
195#define PM800_VCHG_MEAS1 0x46
196#define PM800_VCHG_MEAS2 0x47
197#define PM800_TINT_MEAS1 0x50
198#define PM800_TINT_MEAS2 0x51
199#define PM800_PMOD_MEAS1 0x52
200#define PM800_PMOD_MEAS2 0x53
201
202#define PM800_GPADC0_MEAS1 0x54
203#define PM800_GPADC0_MEAS2 0x55
204#define PM800_GPADC1_MEAS1 0x56
205#define PM800_GPADC1_MEAS2 0x57
206#define PM800_GPADC2_MEAS1 0x58
207#define PM800_GPADC2_MEAS2 0x59
208#define PM800_GPADC3_MEAS1 0x5A
209#define PM800_GPADC3_MEAS2 0x5B
210#define PM800_GPADC4_MEAS1 0x5C
211#define PM800_GPADC4_MEAS2 0x5D
212
213#define PM800_GPADC4_AVG1 0xA8
214#define PM800_GPADC4_AVG2 0xA9
215
216/* 88PM805 Registers */
217#define PM805_MAIN_POWERUP (0x01)
218#define PM805_INT_STATUS0 (0x02) /* for ena/dis all interrupts */
219
220#define PM805_STATUS0_INT_CLEAR (1 << 0)
221#define PM805_STATUS0_INV_INT (1 << 1)
222#define PM800_STATUS0_INT_MASK (1 << 2)
223
224#define PM805_INT_STATUS1 (0x03)
225
226#define PM805_INT1_HP1_SHRT (1 << 0)
227#define PM805_INT1_HP2_SHRT (1 << 1)
228#define PM805_INT1_MIC_CONFLICT (1 << 2)
229#define PM805_INT1_CLIP_FAULT (1 << 3)
230#define PM805_INT1_LDO_OFF (1 << 4)
231#define PM805_INT1_SRC_DPLL_LOCK (1 << 5)
232
233#define PM805_INT_STATUS2 (0x04)
234
235#define PM805_INT2_MIC_DET (1 << 0)
236#define PM805_INT2_SHRT_BTN_DET (1 << 1)
237#define PM805_INT2_VOLM_BTN_DET (1 << 2)
238#define PM805_INT2_VOLP_BTN_DET (1 << 3)
239#define PM805_INT2_RAW_PLL_FAULT (1 << 4)
240#define PM805_INT2_FINE_PLL_FAULT (1 << 5)
241
242#define PM805_INT_MASK1 (0x05)
243#define PM805_INT_MASK2 (0x06)
244#define PM805_SHRT_BTN_DET (1 << 1)
245
246/* number of status and int reg in a row */
247#define PM805_INT_REG_NUM (2)
248
249#define PM805_MIC_DET1 (0x07)
250#define PM805_MIC_DET_EN_MIC_DET (1 << 0)
251#define PM805_MIC_DET2 (0x08)
252#define PM805_MIC_DET_STATUS1 (0x09)
253
254#define PM805_MIC_DET_STATUS3 (0x0A)
255#define PM805_AUTO_SEQ_STATUS1 (0x0B)
256#define PM805_AUTO_SEQ_STATUS2 (0x0C)
257
258#define PM805_ADC_SETTING1 (0x10)
259#define PM805_ADC_SETTING2 (0x11)
260#define PM805_ADC_SETTING3 (0x11)
261#define PM805_ADC_GAIN1 (0x12)
262#define PM805_ADC_GAIN2 (0x13)
263#define PM805_DMIC_SETTING (0x15)
264#define PM805_DWS_SETTING (0x16)
265#define PM805_MIC_CONFLICT_STS (0x17)
266
267#define PM805_PDM_SETTING1 (0x20)
268#define PM805_PDM_SETTING2 (0x21)
269#define PM805_PDM_SETTING3 (0x22)
270#define PM805_PDM_CONTROL1 (0x23)
271#define PM805_PDM_CONTROL2 (0x24)
272#define PM805_PDM_CONTROL3 (0x25)
273
274#define PM805_HEADPHONE_SETTING (0x26)
275#define PM805_HEADPHONE_GAIN_A2A (0x27)
276#define PM805_HEADPHONE_SHORT_STATE (0x28)
277#define PM805_EARPHONE_SETTING (0x29)
278#define PM805_AUTO_SEQ_SETTING (0x2A)
279
280struct pm80x_rtc_pdata {
281 int vrtc;
282 int rtc_wakeup;
283};
284
285struct pm80x_subchip {
286 struct i2c_client *power_page; /* chip client for power page */
287 struct i2c_client *gpadc_page; /* chip client for gpadc page */
288 struct regmap *regmap_power;
289 struct regmap *regmap_gpadc;
290 unsigned short power_page_addr; /* power page I2C address */
291 unsigned short gpadc_page_addr; /* gpadc page I2C address */
292};
293
294struct pm80x_chip {
295 struct pm80x_subchip *subchip;
296 struct device *dev;
297 struct i2c_client *client;
298 struct i2c_client *companion;
299 struct regmap *regmap;
300 struct regmap_irq_chip *regmap_irq_chip;
301 struct regmap_irq_chip_data *irq_data;
302 unsigned char version;
303 int id;
304 int irq;
305 int irq_mode;
306 unsigned long wu_flag;
307 spinlock_t lock;
308};
309
310struct pm80x_platform_data {
311 struct pm80x_rtc_pdata *rtc;
312 unsigned short power_page_addr; /* power page I2C address */
313 unsigned short gpadc_page_addr; /* gpadc page I2C address */
314 int irq_mode; /* Clear interrupt by read/write(0/1) */
315 int batt_det; /* enable/disable */
316 int (*plat_config)(struct pm80x_chip *chip,
317 struct pm80x_platform_data *pdata);
318};
319
320extern const struct dev_pm_ops pm80x_pm_ops;
321extern const struct regmap_config pm80x_regmap_config;
322
323static inline int pm80x_request_irq(struct pm80x_chip *pm80x, int irq,
324 irq_handler_t handler, unsigned long flags,
325 const char *name, void *data)
326{
327 if (!pm80x->irq_data)
328 return -EINVAL;
329 return request_threaded_irq(regmap_irq_get_virq(pm80x->irq_data, irq),
330 NULL, handler, flags, name, data);
331}
332
333static inline void pm80x_free_irq(struct pm80x_chip *pm80x, int irq, void *data)
334{
335 if (!pm80x->irq_data)
336 return;
337 free_irq(regmap_irq_get_virq(pm80x->irq_data, irq), data);
338}
339
340#ifdef CONFIG_PM
341static inline int pm80x_dev_suspend(struct device *dev)
342{
343 struct platform_device *pdev = to_platform_device(dev);
344 struct pm80x_chip *chip = dev_get_drvdata(pdev->dev.parent);
345 int irq = platform_get_irq(pdev, 0);
346
347 if (device_may_wakeup(dev))
348 set_bit((1 << irq), &chip->wu_flag);
349
350 return 0;
351}
352
353static inline int pm80x_dev_resume(struct device *dev)
354{
355 struct platform_device *pdev = to_platform_device(dev);
356 struct pm80x_chip *chip = dev_get_drvdata(pdev->dev.parent);
357 int irq = platform_get_irq(pdev, 0);
358
359 if (device_may_wakeup(dev))
360 clear_bit((1 << irq), &chip->wu_flag);
361
362 return 0;
363}
364#endif
365
366extern int pm80x_init(struct i2c_client *client,
367 const struct i2c_device_id *id) __devinit;
368extern int pm80x_deinit(struct i2c_client *client);
369#endif /* __LINUX_MFD_88PM80X_H */
diff --git a/include/linux/mfd/88pm860x.h b/include/linux/mfd/88pm860x.h
index 84d071ade1d8..7b24943779fa 100644
--- a/include/linux/mfd/88pm860x.h
+++ b/include/linux/mfd/88pm860x.h
@@ -136,6 +136,7 @@ enum {
136 PM8607_ID_LDO13, 136 PM8607_ID_LDO13,
137 PM8607_ID_LDO14, 137 PM8607_ID_LDO14,
138 PM8607_ID_LDO15, 138 PM8607_ID_LDO15,
139 PM8606_ID_PREG,
139 140
140 PM8607_ID_RG_MAX, 141 PM8607_ID_RG_MAX,
141}; 142};
diff --git a/include/linux/mfd/abx500/ab8500.h b/include/linux/mfd/abx500/ab8500.h
index bc9b84b60ec6..3764cb6759e3 100644
--- a/include/linux/mfd/abx500/ab8500.h
+++ b/include/linux/mfd/abx500/ab8500.h
@@ -9,6 +9,7 @@
9 9
10#include <linux/atomic.h> 10#include <linux/atomic.h>
11#include <linux/mutex.h> 11#include <linux/mutex.h>
12#include <linux/irqdomain.h>
12 13
13struct device; 14struct device;
14 15
@@ -227,6 +228,7 @@ enum ab8500_version {
227 * @irq_lock: genirq bus lock 228 * @irq_lock: genirq bus lock
228 * @transfer_ongoing: 0 if no transfer ongoing 229 * @transfer_ongoing: 0 if no transfer ongoing
229 * @irq: irq line 230 * @irq: irq line
231 * @irq_domain: irq domain
230 * @version: chip version id (e.g. ab8500 or ab9540) 232 * @version: chip version id (e.g. ab8500 or ab9540)
231 * @chip_id: chip revision id 233 * @chip_id: chip revision id
232 * @write: register write 234 * @write: register write
@@ -247,6 +249,7 @@ struct ab8500 {
247 atomic_t transfer_ongoing; 249 atomic_t transfer_ongoing;
248 int irq_base; 250 int irq_base;
249 int irq; 251 int irq;
252 struct irq_domain *domain;
250 enum ab8500_version version; 253 enum ab8500_version version;
251 u8 chip_id; 254 u8 chip_id;
252 255
@@ -338,4 +341,6 @@ static inline int is_ab8500_2p0(struct ab8500 *ab)
338 return (is_ab8500(ab) && (ab->chip_id == AB8500_CUT2P0)); 341 return (is_ab8500(ab) && (ab->chip_id == AB8500_CUT2P0));
339} 342}
340 343
344int ab8500_irq_get_virq(struct ab8500 *ab8500, int irq);
345
341#endif /* MFD_AB8500_H */ 346#endif /* MFD_AB8500_H */
diff --git a/include/linux/mfd/arizona/core.h b/include/linux/mfd/arizona/core.h
new file mode 100644
index 000000000000..dd231ac0bb1f
--- /dev/null
+++ b/include/linux/mfd/arizona/core.h
@@ -0,0 +1,114 @@
1/*
2 * Arizona MFD internals
3 *
4 * Copyright 2012 Wolfson Microelectronics plc
5 *
6 * Author: Mark Brown <broonie@opensource.wolfsonmicro.com>
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License version 2 as
10 * published by the Free Software Foundation.
11 */
12
13#ifndef _WM_ARIZONA_CORE_H
14#define _WM_ARIZONA_CORE_H
15
16#include <linux/interrupt.h>
17#include <linux/regmap.h>
18#include <linux/regulator/consumer.h>
19#include <linux/mfd/arizona/pdata.h>
20
21#define ARIZONA_MAX_CORE_SUPPLIES 3
22
23enum arizona_type {
24 WM5102 = 1,
25 WM5110 = 2,
26};
27
28#define ARIZONA_IRQ_GP1 0
29#define ARIZONA_IRQ_GP2 1
30#define ARIZONA_IRQ_GP3 2
31#define ARIZONA_IRQ_GP4 3
32#define ARIZONA_IRQ_GP5_FALL 4
33#define ARIZONA_IRQ_GP5_RISE 5
34#define ARIZONA_IRQ_JD_FALL 6
35#define ARIZONA_IRQ_JD_RISE 7
36#define ARIZONA_IRQ_DSP1_RAM_RDY 8
37#define ARIZONA_IRQ_DSP2_RAM_RDY 9
38#define ARIZONA_IRQ_DSP3_RAM_RDY 10
39#define ARIZONA_IRQ_DSP4_RAM_RDY 11
40#define ARIZONA_IRQ_DSP_IRQ1 12
41#define ARIZONA_IRQ_DSP_IRQ2 13
42#define ARIZONA_IRQ_DSP_IRQ3 14
43#define ARIZONA_IRQ_DSP_IRQ4 15
44#define ARIZONA_IRQ_DSP_IRQ5 16
45#define ARIZONA_IRQ_DSP_IRQ6 17
46#define ARIZONA_IRQ_DSP_IRQ7 18
47#define ARIZONA_IRQ_DSP_IRQ8 19
48#define ARIZONA_IRQ_SPK_SHUTDOWN_WARN 20
49#define ARIZONA_IRQ_SPK_SHUTDOWN 21
50#define ARIZONA_IRQ_MICDET 22
51#define ARIZONA_IRQ_HPDET 23
52#define ARIZONA_IRQ_WSEQ_DONE 24
53#define ARIZONA_IRQ_DRC2_SIG_DET 25
54#define ARIZONA_IRQ_DRC1_SIG_DET 26
55#define ARIZONA_IRQ_ASRC2_LOCK 27
56#define ARIZONA_IRQ_ASRC1_LOCK 28
57#define ARIZONA_IRQ_UNDERCLOCKED 29
58#define ARIZONA_IRQ_OVERCLOCKED 30
59#define ARIZONA_IRQ_FLL2_LOCK 31
60#define ARIZONA_IRQ_FLL1_LOCK 32
61#define ARIZONA_IRQ_CLKGEN_ERR 33
62#define ARIZONA_IRQ_CLKGEN_ERR_ASYNC 34
63#define ARIZONA_IRQ_ASRC_CFG_ERR 35
64#define ARIZONA_IRQ_AIF3_ERR 36
65#define ARIZONA_IRQ_AIF2_ERR 37
66#define ARIZONA_IRQ_AIF1_ERR 38
67#define ARIZONA_IRQ_CTRLIF_ERR 39
68#define ARIZONA_IRQ_MIXER_DROPPED_SAMPLES 40
69#define ARIZONA_IRQ_ASYNC_CLK_ENA_LOW 41
70#define ARIZONA_IRQ_SYSCLK_ENA_LOW 42
71#define ARIZONA_IRQ_ISRC1_CFG_ERR 43
72#define ARIZONA_IRQ_ISRC2_CFG_ERR 44
73#define ARIZONA_IRQ_BOOT_DONE 45
74#define ARIZONA_IRQ_DCS_DAC_DONE 46
75#define ARIZONA_IRQ_DCS_HP_DONE 47
76#define ARIZONA_IRQ_FLL2_CLOCK_OK 48
77#define ARIZONA_IRQ_FLL1_CLOCK_OK 49
78
79#define ARIZONA_NUM_IRQ 50
80
81struct arizona {
82 struct regmap *regmap;
83 struct device *dev;
84
85 enum arizona_type type;
86 unsigned int rev;
87
88 int num_core_supplies;
89 struct regulator_bulk_data core_supplies[ARIZONA_MAX_CORE_SUPPLIES];
90 struct regulator *dcvdd;
91
92 struct arizona_pdata pdata;
93
94 int irq;
95 struct irq_domain *virq;
96 struct regmap_irq_chip_data *aod_irq_chip;
97 struct regmap_irq_chip_data *irq_chip;
98
99 struct mutex clk_lock;
100 int clk32k_ref;
101};
102
103int arizona_clk32k_enable(struct arizona *arizona);
104int arizona_clk32k_disable(struct arizona *arizona);
105
106int arizona_request_irq(struct arizona *arizona, int irq, char *name,
107 irq_handler_t handler, void *data);
108void arizona_free_irq(struct arizona *arizona, int irq, void *data);
109int arizona_set_irq_wake(struct arizona *arizona, int irq, int on);
110
111int wm5102_patch(struct arizona *arizona);
112int wm5110_patch(struct arizona *arizona);
113
114#endif
diff --git a/include/linux/mfd/arizona/pdata.h b/include/linux/mfd/arizona/pdata.h
new file mode 100644
index 000000000000..7ab442905a57
--- /dev/null
+++ b/include/linux/mfd/arizona/pdata.h
@@ -0,0 +1,119 @@
1/*
2 * Platform data for Arizona devices
3 *
4 * Copyright 2012 Wolfson Microelectronics. PLC.
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.
9 */
10
11#ifndef _ARIZONA_PDATA_H
12#define _ARIZONA_PDATA_H
13
14#define ARIZONA_GPN_DIR 0x8000 /* GPN_DIR */
15#define ARIZONA_GPN_DIR_MASK 0x8000 /* GPN_DIR */
16#define ARIZONA_GPN_DIR_SHIFT 15 /* GPN_DIR */
17#define ARIZONA_GPN_DIR_WIDTH 1 /* GPN_DIR */
18#define ARIZONA_GPN_PU 0x4000 /* GPN_PU */
19#define ARIZONA_GPN_PU_MASK 0x4000 /* GPN_PU */
20#define ARIZONA_GPN_PU_SHIFT 14 /* GPN_PU */
21#define ARIZONA_GPN_PU_WIDTH 1 /* GPN_PU */
22#define ARIZONA_GPN_PD 0x2000 /* GPN_PD */
23#define ARIZONA_GPN_PD_MASK 0x2000 /* GPN_PD */
24#define ARIZONA_GPN_PD_SHIFT 13 /* GPN_PD */
25#define ARIZONA_GPN_PD_WIDTH 1 /* GPN_PD */
26#define ARIZONA_GPN_LVL 0x0800 /* GPN_LVL */
27#define ARIZONA_GPN_LVL_MASK 0x0800 /* GPN_LVL */
28#define ARIZONA_GPN_LVL_SHIFT 11 /* GPN_LVL */
29#define ARIZONA_GPN_LVL_WIDTH 1 /* GPN_LVL */
30#define ARIZONA_GPN_POL 0x0400 /* GPN_POL */
31#define ARIZONA_GPN_POL_MASK 0x0400 /* GPN_POL */
32#define ARIZONA_GPN_POL_SHIFT 10 /* GPN_POL */
33#define ARIZONA_GPN_POL_WIDTH 1 /* GPN_POL */
34#define ARIZONA_GPN_OP_CFG 0x0200 /* GPN_OP_CFG */
35#define ARIZONA_GPN_OP_CFG_MASK 0x0200 /* GPN_OP_CFG */
36#define ARIZONA_GPN_OP_CFG_SHIFT 9 /* GPN_OP_CFG */
37#define ARIZONA_GPN_OP_CFG_WIDTH 1 /* GPN_OP_CFG */
38#define ARIZONA_GPN_DB 0x0100 /* GPN_DB */
39#define ARIZONA_GPN_DB_MASK 0x0100 /* GPN_DB */
40#define ARIZONA_GPN_DB_SHIFT 8 /* GPN_DB */
41#define ARIZONA_GPN_DB_WIDTH 1 /* GPN_DB */
42#define ARIZONA_GPN_FN_MASK 0x007F /* GPN_FN - [6:0] */
43#define ARIZONA_GPN_FN_SHIFT 0 /* GPN_FN - [6:0] */
44#define ARIZONA_GPN_FN_WIDTH 7 /* GPN_FN - [6:0] */
45
46#define ARIZONA_MAX_GPIO 5
47
48#define ARIZONA_32KZ_MCLK1 1
49#define ARIZONA_32KZ_MCLK2 2
50#define ARIZONA_32KZ_NONE 3
51
52#define ARIZONA_MAX_INPUT 4
53
54#define ARIZONA_DMIC_MICVDD 0
55#define ARIZONA_DMIC_MICBIAS1 1
56#define ARIZONA_DMIC_MICBIAS2 2
57#define ARIZONA_DMIC_MICBIAS3 3
58
59#define ARIZONA_INMODE_DIFF 0
60#define ARIZONA_INMODE_SE 1
61#define ARIZONA_INMODE_DMIC 2
62
63#define ARIZONA_MAX_OUTPUT 6
64
65#define ARIZONA_MAX_PDM_SPK 2
66
67struct regulator_init_data;
68
69struct arizona_micd_config {
70 unsigned int src;
71 unsigned int bias;
72 bool gpio;
73};
74
75struct arizona_pdata {
76 int reset; /** GPIO controlling /RESET, if any */
77 int ldoena; /** GPIO controlling LODENA, if any */
78
79 /** Regulator configuration for MICVDD */
80 struct regulator_init_data *micvdd;
81
82 /** Regulator configuration for LDO1 */
83 struct regulator_init_data *ldo1;
84
85 /** If a direct 32kHz clock is provided on an MCLK specify it here */
86 int clk32k_src;
87
88 bool irq_active_high; /** IRQ polarity */
89
90 /* Base GPIO */
91 int gpio_base;
92
93 /** Pin state for GPIO pins */
94 int gpio_defaults[ARIZONA_MAX_GPIO];
95
96 /** GPIO for mic detection polarity */
97 int micd_pol_gpio;
98
99 /** Headset polarity configurations */
100 struct arizona_micd_config *micd_configs;
101 int num_micd_configs;
102
103 /** Reference voltage for DMIC inputs */
104 int dmic_ref[ARIZONA_MAX_INPUT];
105
106 /** Mode of input structures */
107 int inmode[ARIZONA_MAX_INPUT];
108
109 /** Mode for outputs */
110 bool out_mono[ARIZONA_MAX_OUTPUT];
111
112 /** PDM speaker mute setting */
113 unsigned int spk_mute[ARIZONA_MAX_PDM_SPK];
114
115 /** PDM speaker format */
116 unsigned int spk_fmt[ARIZONA_MAX_PDM_SPK];
117};
118
119#endif
diff --git a/include/linux/mfd/arizona/registers.h b/include/linux/mfd/arizona/registers.h
new file mode 100644
index 000000000000..7671a287dfee
--- /dev/null
+++ b/include/linux/mfd/arizona/registers.h
@@ -0,0 +1,6594 @@
1/*
2 * ARIZONA register definitions
3 *
4 * Copyright 2012 Wolfson Microelectronics plc
5 *
6 * Author: Mark Brown <broonie@opensource.wolfsonmicro.com>
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License version 2 as
10 * published by the Free Software Foundation.
11 */
12
13#ifndef _ARIZONA_REGISTERS_H
14#define _ARIZONA_REGISTERS_H
15
16/*
17 * Register values.
18 */
19#define ARIZONA_SOFTWARE_RESET 0x00
20#define ARIZONA_DEVICE_REVISION 0x01
21#define ARIZONA_CTRL_IF_SPI_CFG_1 0x08
22#define ARIZONA_CTRL_IF_I2C1_CFG_1 0x09
23#define ARIZONA_CTRL_IF_I2C2_CFG_1 0x0A
24#define ARIZONA_CTRL_IF_I2C1_CFG_2 0x0B
25#define ARIZONA_CTRL_IF_I2C2_CFG_2 0x0C
26#define ARIZONA_CTRL_IF_STATUS_1 0x0D
27#define ARIZONA_WRITE_SEQUENCER_CTRL_0 0x16
28#define ARIZONA_WRITE_SEQUENCER_CTRL_1 0x17
29#define ARIZONA_WRITE_SEQUENCER_CTRL_2 0x18
30#define ARIZONA_WRITE_SEQUENCER_PROM 0x1A
31#define ARIZONA_TONE_GENERATOR_1 0x20
32#define ARIZONA_TONE_GENERATOR_2 0x21
33#define ARIZONA_TONE_GENERATOR_3 0x22
34#define ARIZONA_TONE_GENERATOR_4 0x23
35#define ARIZONA_TONE_GENERATOR_5 0x24
36#define ARIZONA_PWM_DRIVE_1 0x30
37#define ARIZONA_PWM_DRIVE_2 0x31
38#define ARIZONA_PWM_DRIVE_3 0x32
39#define ARIZONA_WAKE_CONTROL 0x40
40#define ARIZONA_SEQUENCE_CONTROL 0x41
41#define ARIZONA_SAMPLE_RATE_SEQUENCE_SELECT_1 0x61
42#define ARIZONA_SAMPLE_RATE_SEQUENCE_SELECT_2 0x62
43#define ARIZONA_SAMPLE_RATE_SEQUENCE_SELECT_3 0x63
44#define ARIZONA_SAMPLE_RATE_SEQUENCE_SELECT_4 0x64
45#define ARIZONA_ALWAYS_ON_TRIGGERS_SEQUENCE_SELECT_1 0x68
46#define ARIZONA_ALWAYS_ON_TRIGGERS_SEQUENCE_SELECT_2 0x69
47#define ARIZONA_ALWAYS_ON_TRIGGERS_SEQUENCE_SELECT_3 0x6A
48#define ARIZONA_ALWAYS_ON_TRIGGERS_SEQUENCE_SELECT_4 0x6B
49#define ARIZONA_ALWAYS_ON_TRIGGERS_SEQUENCE_SELECT_5 0x6C
50#define ARIZONA_ALWAYS_ON_TRIGGERS_SEQUENCE_SELECT_6 0x6D
51#define ARIZONA_COMFORT_NOISE_GENERATOR 0x70
52#define ARIZONA_HAPTICS_CONTROL_1 0x90
53#define ARIZONA_HAPTICS_CONTROL_2 0x91
54#define ARIZONA_HAPTICS_PHASE_1_INTENSITY 0x92
55#define ARIZONA_HAPTICS_PHASE_1_DURATION 0x93
56#define ARIZONA_HAPTICS_PHASE_2_INTENSITY 0x94
57#define ARIZONA_HAPTICS_PHASE_2_DURATION 0x95
58#define ARIZONA_HAPTICS_PHASE_3_INTENSITY 0x96
59#define ARIZONA_HAPTICS_PHASE_3_DURATION 0x97
60#define ARIZONA_HAPTICS_STATUS 0x98
61#define ARIZONA_CLOCK_32K_1 0x100
62#define ARIZONA_SYSTEM_CLOCK_1 0x101
63#define ARIZONA_SAMPLE_RATE_1 0x102
64#define ARIZONA_SAMPLE_RATE_2 0x103
65#define ARIZONA_SAMPLE_RATE_3 0x104
66#define ARIZONA_SAMPLE_RATE_1_STATUS 0x10A
67#define ARIZONA_SAMPLE_RATE_2_STATUS 0x10B
68#define ARIZONA_SAMPLE_RATE_3_STATUS 0x10C
69#define ARIZONA_ASYNC_CLOCK_1 0x112
70#define ARIZONA_ASYNC_SAMPLE_RATE_1 0x113
71#define ARIZONA_ASYNC_SAMPLE_RATE_1_STATUS 0x11B
72#define ARIZONA_OUTPUT_SYSTEM_CLOCK 0x149
73#define ARIZONA_OUTPUT_ASYNC_CLOCK 0x14A
74#define ARIZONA_RATE_ESTIMATOR_1 0x152
75#define ARIZONA_RATE_ESTIMATOR_2 0x153
76#define ARIZONA_RATE_ESTIMATOR_3 0x154
77#define ARIZONA_RATE_ESTIMATOR_4 0x155
78#define ARIZONA_RATE_ESTIMATOR_5 0x156
79#define ARIZONA_FLL1_CONTROL_1 0x171
80#define ARIZONA_FLL1_CONTROL_2 0x172
81#define ARIZONA_FLL1_CONTROL_3 0x173
82#define ARIZONA_FLL1_CONTROL_4 0x174
83#define ARIZONA_FLL1_CONTROL_5 0x175
84#define ARIZONA_FLL1_CONTROL_6 0x176
85#define ARIZONA_FLL1_LOOP_FILTER_TEST_1 0x177
86#define ARIZONA_FLL1_NCO_TEST_0 0x178
87#define ARIZONA_FLL1_SYNCHRONISER_1 0x181
88#define ARIZONA_FLL1_SYNCHRONISER_2 0x182
89#define ARIZONA_FLL1_SYNCHRONISER_3 0x183
90#define ARIZONA_FLL1_SYNCHRONISER_4 0x184
91#define ARIZONA_FLL1_SYNCHRONISER_5 0x185
92#define ARIZONA_FLL1_SYNCHRONISER_6 0x186
93#define ARIZONA_FLL1_SPREAD_SPECTRUM 0x189
94#define ARIZONA_FLL1_GPIO_CLOCK 0x18A
95#define ARIZONA_FLL2_CONTROL_1 0x191
96#define ARIZONA_FLL2_CONTROL_2 0x192
97#define ARIZONA_FLL2_CONTROL_3 0x193
98#define ARIZONA_FLL2_CONTROL_4 0x194
99#define ARIZONA_FLL2_CONTROL_5 0x195
100#define ARIZONA_FLL2_CONTROL_6 0x196
101#define ARIZONA_FLL2_LOOP_FILTER_TEST_1 0x197
102#define ARIZONA_FLL2_NCO_TEST_0 0x198
103#define ARIZONA_FLL2_SYNCHRONISER_1 0x1A1
104#define ARIZONA_FLL2_SYNCHRONISER_2 0x1A2
105#define ARIZONA_FLL2_SYNCHRONISER_3 0x1A3
106#define ARIZONA_FLL2_SYNCHRONISER_4 0x1A4
107#define ARIZONA_FLL2_SYNCHRONISER_5 0x1A5
108#define ARIZONA_FLL2_SYNCHRONISER_6 0x1A6
109#define ARIZONA_FLL2_SPREAD_SPECTRUM 0x1A9
110#define ARIZONA_FLL2_GPIO_CLOCK 0x1AA
111#define ARIZONA_MIC_CHARGE_PUMP_1 0x200
112#define ARIZONA_LDO1_CONTROL_1 0x210
113#define ARIZONA_LDO2_CONTROL_1 0x213
114#define ARIZONA_MIC_BIAS_CTRL_1 0x218
115#define ARIZONA_MIC_BIAS_CTRL_2 0x219
116#define ARIZONA_MIC_BIAS_CTRL_3 0x21A
117#define ARIZONA_ACCESSORY_DETECT_MODE_1 0x293
118#define ARIZONA_HEADPHONE_DETECT_1 0x29B
119#define ARIZONA_HEADPHONE_DETECT_2 0x29C
120#define ARIZONA_MIC_DETECT_1 0x2A3
121#define ARIZONA_MIC_DETECT_2 0x2A4
122#define ARIZONA_MIC_DETECT_3 0x2A5
123#define ARIZONA_MIC_NOISE_MIX_CONTROL_1 0x2C3
124#define ARIZONA_ISOLATION_CONTROL 0x2CB
125#define ARIZONA_JACK_DETECT_ANALOGUE 0x2D3
126#define ARIZONA_INPUT_ENABLES 0x300
127#define ARIZONA_INPUT_ENABLES_STATUS 0x301
128#define ARIZONA_INPUT_RATE 0x308
129#define ARIZONA_INPUT_VOLUME_RAMP 0x309
130#define ARIZONA_IN1L_CONTROL 0x310
131#define ARIZONA_ADC_DIGITAL_VOLUME_1L 0x311
132#define ARIZONA_DMIC1L_CONTROL 0x312
133#define ARIZONA_IN1R_CONTROL 0x314
134#define ARIZONA_ADC_DIGITAL_VOLUME_1R 0x315
135#define ARIZONA_DMIC1R_CONTROL 0x316
136#define ARIZONA_IN2L_CONTROL 0x318
137#define ARIZONA_ADC_DIGITAL_VOLUME_2L 0x319
138#define ARIZONA_DMIC2L_CONTROL 0x31A
139#define ARIZONA_IN2R_CONTROL 0x31C
140#define ARIZONA_ADC_DIGITAL_VOLUME_2R 0x31D
141#define ARIZONA_DMIC2R_CONTROL 0x31E
142#define ARIZONA_IN3L_CONTROL 0x320
143#define ARIZONA_ADC_DIGITAL_VOLUME_3L 0x321
144#define ARIZONA_DMIC3L_CONTROL 0x322
145#define ARIZONA_IN3R_CONTROL 0x324
146#define ARIZONA_ADC_DIGITAL_VOLUME_3R 0x325
147#define ARIZONA_DMIC3R_CONTROL 0x326
148#define ARIZONA_IN4L_CONTROL 0x328
149#define ARIZONA_ADC_DIGITAL_VOLUME_4L 0x329
150#define ARIZONA_DMIC4L_CONTROL 0x32A
151#define ARIZONA_ADC_DIGITAL_VOLUME_4R 0x32D
152#define ARIZONA_DMIC4R_CONTROL 0x32E
153#define ARIZONA_OUTPUT_ENABLES_1 0x400
154#define ARIZONA_OUTPUT_STATUS_1 0x401
155#define ARIZONA_RAW_OUTPUT_STATUS_1 0x406
156#define ARIZONA_OUTPUT_RATE_1 0x408
157#define ARIZONA_OUTPUT_VOLUME_RAMP 0x409
158#define ARIZONA_OUTPUT_PATH_CONFIG_1L 0x410
159#define ARIZONA_DAC_DIGITAL_VOLUME_1L 0x411
160#define ARIZONA_DAC_VOLUME_LIMIT_1L 0x412
161#define ARIZONA_NOISE_GATE_SELECT_1L 0x413
162#define ARIZONA_OUTPUT_PATH_CONFIG_1R 0x414
163#define ARIZONA_DAC_DIGITAL_VOLUME_1R 0x415
164#define ARIZONA_DAC_VOLUME_LIMIT_1R 0x416
165#define ARIZONA_NOISE_GATE_SELECT_1R 0x417
166#define ARIZONA_OUTPUT_PATH_CONFIG_2L 0x418
167#define ARIZONA_DAC_DIGITAL_VOLUME_2L 0x419
168#define ARIZONA_DAC_VOLUME_LIMIT_2L 0x41A
169#define ARIZONA_NOISE_GATE_SELECT_2L 0x41B
170#define ARIZONA_OUTPUT_PATH_CONFIG_2R 0x41C
171#define ARIZONA_DAC_DIGITAL_VOLUME_2R 0x41D
172#define ARIZONA_DAC_VOLUME_LIMIT_2R 0x41E
173#define ARIZONA_NOISE_GATE_SELECT_2R 0x41F
174#define ARIZONA_OUTPUT_PATH_CONFIG_3L 0x420
175#define ARIZONA_DAC_DIGITAL_VOLUME_3L 0x421
176#define ARIZONA_DAC_VOLUME_LIMIT_3L 0x422
177#define ARIZONA_NOISE_GATE_SELECT_3L 0x423
178#define ARIZONA_OUTPUT_PATH_CONFIG_3R 0x424
179#define ARIZONA_DAC_DIGITAL_VOLUME_3R 0x425
180#define ARIZONA_DAC_VOLUME_LIMIT_3R 0x426
181#define ARIZONA_NOISE_GATE_SELECT_3R 0x427
182#define ARIZONA_OUTPUT_PATH_CONFIG_4L 0x428
183#define ARIZONA_DAC_DIGITAL_VOLUME_4L 0x429
184#define ARIZONA_OUT_VOLUME_4L 0x42A
185#define ARIZONA_NOISE_GATE_SELECT_4L 0x42B
186#define ARIZONA_OUTPUT_PATH_CONFIG_4R 0x42C
187#define ARIZONA_DAC_DIGITAL_VOLUME_4R 0x42D
188#define ARIZONA_OUT_VOLUME_4R 0x42E
189#define ARIZONA_NOISE_GATE_SELECT_4R 0x42F
190#define ARIZONA_OUTPUT_PATH_CONFIG_5L 0x430
191#define ARIZONA_DAC_DIGITAL_VOLUME_5L 0x431
192#define ARIZONA_DAC_VOLUME_LIMIT_5L 0x432
193#define ARIZONA_NOISE_GATE_SELECT_5L 0x433
194#define ARIZONA_OUTPUT_PATH_CONFIG_5R 0x434
195#define ARIZONA_DAC_DIGITAL_VOLUME_5R 0x435
196#define ARIZONA_DAC_VOLUME_LIMIT_5R 0x436
197#define ARIZONA_NOISE_GATE_SELECT_5R 0x437
198#define ARIZONA_OUTPUT_PATH_CONFIG_6L 0x438
199#define ARIZONA_DAC_DIGITAL_VOLUME_6L 0x439
200#define ARIZONA_DAC_VOLUME_LIMIT_6L 0x43A
201#define ARIZONA_NOISE_GATE_SELECT_6L 0x43B
202#define ARIZONA_OUTPUT_PATH_CONFIG_6R 0x43C
203#define ARIZONA_DAC_DIGITAL_VOLUME_6R 0x43D
204#define ARIZONA_DAC_VOLUME_LIMIT_6R 0x43E
205#define ARIZONA_NOISE_GATE_SELECT_6R 0x43F
206#define ARIZONA_DAC_AEC_CONTROL_1 0x450
207#define ARIZONA_NOISE_GATE_CONTROL 0x458
208#define ARIZONA_PDM_SPK1_CTRL_1 0x490
209#define ARIZONA_PDM_SPK1_CTRL_2 0x491
210#define ARIZONA_PDM_SPK2_CTRL_1 0x492
211#define ARIZONA_PDM_SPK2_CTRL_2 0x493
212#define ARIZONA_DAC_COMP_1 0x4DC
213#define ARIZONA_DAC_COMP_2 0x4DD
214#define ARIZONA_DAC_COMP_3 0x4DE
215#define ARIZONA_DAC_COMP_4 0x4DF
216#define ARIZONA_AIF1_BCLK_CTRL 0x500
217#define ARIZONA_AIF1_TX_PIN_CTRL 0x501
218#define ARIZONA_AIF1_RX_PIN_CTRL 0x502
219#define ARIZONA_AIF1_RATE_CTRL 0x503
220#define ARIZONA_AIF1_FORMAT 0x504
221#define ARIZONA_AIF1_TX_BCLK_RATE 0x505
222#define ARIZONA_AIF1_RX_BCLK_RATE 0x506
223#define ARIZONA_AIF1_FRAME_CTRL_1 0x507
224#define ARIZONA_AIF1_FRAME_CTRL_2 0x508
225#define ARIZONA_AIF1_FRAME_CTRL_3 0x509
226#define ARIZONA_AIF1_FRAME_CTRL_4 0x50A
227#define ARIZONA_AIF1_FRAME_CTRL_5 0x50B
228#define ARIZONA_AIF1_FRAME_CTRL_6 0x50C
229#define ARIZONA_AIF1_FRAME_CTRL_7 0x50D
230#define ARIZONA_AIF1_FRAME_CTRL_8 0x50E
231#define ARIZONA_AIF1_FRAME_CTRL_9 0x50F
232#define ARIZONA_AIF1_FRAME_CTRL_10 0x510
233#define ARIZONA_AIF1_FRAME_CTRL_11 0x511
234#define ARIZONA_AIF1_FRAME_CTRL_12 0x512
235#define ARIZONA_AIF1_FRAME_CTRL_13 0x513
236#define ARIZONA_AIF1_FRAME_CTRL_14 0x514
237#define ARIZONA_AIF1_FRAME_CTRL_15 0x515
238#define ARIZONA_AIF1_FRAME_CTRL_16 0x516
239#define ARIZONA_AIF1_FRAME_CTRL_17 0x517
240#define ARIZONA_AIF1_FRAME_CTRL_18 0x518
241#define ARIZONA_AIF1_TX_ENABLES 0x519
242#define ARIZONA_AIF1_RX_ENABLES 0x51A
243#define ARIZONA_AIF1_FORCE_WRITE 0x51B
244#define ARIZONA_AIF2_BCLK_CTRL 0x540
245#define ARIZONA_AIF2_TX_PIN_CTRL 0x541
246#define ARIZONA_AIF2_RX_PIN_CTRL 0x542
247#define ARIZONA_AIF2_RATE_CTRL 0x543
248#define ARIZONA_AIF2_FORMAT 0x544
249#define ARIZONA_AIF2_TX_BCLK_RATE 0x545
250#define ARIZONA_AIF2_RX_BCLK_RATE 0x546
251#define ARIZONA_AIF2_FRAME_CTRL_1 0x547
252#define ARIZONA_AIF2_FRAME_CTRL_2 0x548
253#define ARIZONA_AIF2_FRAME_CTRL_3 0x549
254#define ARIZONA_AIF2_FRAME_CTRL_4 0x54A
255#define ARIZONA_AIF2_FRAME_CTRL_11 0x551
256#define ARIZONA_AIF2_FRAME_CTRL_12 0x552
257#define ARIZONA_AIF2_TX_ENABLES 0x559
258#define ARIZONA_AIF2_RX_ENABLES 0x55A
259#define ARIZONA_AIF2_FORCE_WRITE 0x55B
260#define ARIZONA_AIF3_BCLK_CTRL 0x580
261#define ARIZONA_AIF3_TX_PIN_CTRL 0x581
262#define ARIZONA_AIF3_RX_PIN_CTRL 0x582
263#define ARIZONA_AIF3_RATE_CTRL 0x583
264#define ARIZONA_AIF3_FORMAT 0x584
265#define ARIZONA_AIF3_TX_BCLK_RATE 0x585
266#define ARIZONA_AIF3_RX_BCLK_RATE 0x586
267#define ARIZONA_AIF3_FRAME_CTRL_1 0x587
268#define ARIZONA_AIF3_FRAME_CTRL_2 0x588
269#define ARIZONA_AIF3_FRAME_CTRL_3 0x589
270#define ARIZONA_AIF3_FRAME_CTRL_4 0x58A
271#define ARIZONA_AIF3_FRAME_CTRL_11 0x591
272#define ARIZONA_AIF3_FRAME_CTRL_12 0x592
273#define ARIZONA_AIF3_TX_ENABLES 0x599
274#define ARIZONA_AIF3_RX_ENABLES 0x59A
275#define ARIZONA_AIF3_FORCE_WRITE 0x59B
276#define ARIZONA_SLIMBUS_FRAMER_REF_GEAR 0x5E3
277#define ARIZONA_SLIMBUS_RATES_1 0x5E5
278#define ARIZONA_SLIMBUS_RATES_2 0x5E6
279#define ARIZONA_SLIMBUS_RATES_3 0x5E7
280#define ARIZONA_SLIMBUS_RATES_4 0x5E8
281#define ARIZONA_SLIMBUS_RATES_5 0x5E9
282#define ARIZONA_SLIMBUS_RATES_6 0x5EA
283#define ARIZONA_SLIMBUS_RATES_7 0x5EB
284#define ARIZONA_SLIMBUS_RATES_8 0x5EC
285#define ARIZONA_SLIMBUS_RX_CHANNEL_ENABLE 0x5F5
286#define ARIZONA_SLIMBUS_TX_CHANNEL_ENABLE 0x5F6
287#define ARIZONA_SLIMBUS_RX_PORT_STATUS 0x5F7
288#define ARIZONA_SLIMBUS_TX_PORT_STATUS 0x5F8
289#define ARIZONA_PWM1MIX_INPUT_1_SOURCE 0x640
290#define ARIZONA_PWM1MIX_INPUT_1_VOLUME 0x641
291#define ARIZONA_PWM1MIX_INPUT_2_SOURCE 0x642
292#define ARIZONA_PWM1MIX_INPUT_2_VOLUME 0x643
293#define ARIZONA_PWM1MIX_INPUT_3_SOURCE 0x644
294#define ARIZONA_PWM1MIX_INPUT_3_VOLUME 0x645
295#define ARIZONA_PWM1MIX_INPUT_4_SOURCE 0x646
296#define ARIZONA_PWM1MIX_INPUT_4_VOLUME 0x647
297#define ARIZONA_PWM2MIX_INPUT_1_SOURCE 0x648
298#define ARIZONA_PWM2MIX_INPUT_1_VOLUME 0x649
299#define ARIZONA_PWM2MIX_INPUT_2_SOURCE 0x64A
300#define ARIZONA_PWM2MIX_INPUT_2_VOLUME 0x64B
301#define ARIZONA_PWM2MIX_INPUT_3_SOURCE 0x64C
302#define ARIZONA_PWM2MIX_INPUT_3_VOLUME 0x64D
303#define ARIZONA_PWM2MIX_INPUT_4_SOURCE 0x64E
304#define ARIZONA_PWM2MIX_INPUT_4_VOLUME 0x64F
305#define ARIZONA_MICMIX_INPUT_1_SOURCE 0x660
306#define ARIZONA_MICMIX_INPUT_1_VOLUME 0x661
307#define ARIZONA_MICMIX_INPUT_2_SOURCE 0x662
308#define ARIZONA_MICMIX_INPUT_2_VOLUME 0x663
309#define ARIZONA_MICMIX_INPUT_3_SOURCE 0x664
310#define ARIZONA_MICMIX_INPUT_3_VOLUME 0x665
311#define ARIZONA_MICMIX_INPUT_4_SOURCE 0x666
312#define ARIZONA_MICMIX_INPUT_4_VOLUME 0x667
313#define ARIZONA_NOISEMIX_INPUT_1_SOURCE 0x668
314#define ARIZONA_NOISEMIX_INPUT_1_VOLUME 0x669
315#define ARIZONA_NOISEMIX_INPUT_2_SOURCE 0x66A
316#define ARIZONA_NOISEMIX_INPUT_2_VOLUME 0x66B
317#define ARIZONA_NOISEMIX_INPUT_3_SOURCE 0x66C
318#define ARIZONA_NOISEMIX_INPUT_3_VOLUME 0x66D
319#define ARIZONA_NOISEMIX_INPUT_4_SOURCE 0x66E
320#define ARIZONA_NOISEMIX_INPUT_4_VOLUME 0x66F
321#define ARIZONA_OUT1LMIX_INPUT_1_SOURCE 0x680
322#define ARIZONA_OUT1LMIX_INPUT_1_VOLUME 0x681
323#define ARIZONA_OUT1LMIX_INPUT_2_SOURCE 0x682
324#define ARIZONA_OUT1LMIX_INPUT_2_VOLUME 0x683
325#define ARIZONA_OUT1LMIX_INPUT_3_SOURCE 0x684
326#define ARIZONA_OUT1LMIX_INPUT_3_VOLUME 0x685
327#define ARIZONA_OUT1LMIX_INPUT_4_SOURCE 0x686
328#define ARIZONA_OUT1LMIX_INPUT_4_VOLUME 0x687
329#define ARIZONA_OUT1RMIX_INPUT_1_SOURCE 0x688
330#define ARIZONA_OUT1RMIX_INPUT_1_VOLUME 0x689
331#define ARIZONA_OUT1RMIX_INPUT_2_SOURCE 0x68A
332#define ARIZONA_OUT1RMIX_INPUT_2_VOLUME 0x68B
333#define ARIZONA_OUT1RMIX_INPUT_3_SOURCE 0x68C
334#define ARIZONA_OUT1RMIX_INPUT_3_VOLUME 0x68D
335#define ARIZONA_OUT1RMIX_INPUT_4_SOURCE 0x68E
336#define ARIZONA_OUT1RMIX_INPUT_4_VOLUME 0x68F
337#define ARIZONA_OUT2LMIX_INPUT_1_SOURCE 0x690
338#define ARIZONA_OUT2LMIX_INPUT_1_VOLUME 0x691
339#define ARIZONA_OUT2LMIX_INPUT_2_SOURCE 0x692
340#define ARIZONA_OUT2LMIX_INPUT_2_VOLUME 0x693
341#define ARIZONA_OUT2LMIX_INPUT_3_SOURCE 0x694
342#define ARIZONA_OUT2LMIX_INPUT_3_VOLUME 0x695
343#define ARIZONA_OUT2LMIX_INPUT_4_SOURCE 0x696
344#define ARIZONA_OUT2LMIX_INPUT_4_VOLUME 0x697
345#define ARIZONA_OUT2RMIX_INPUT_1_SOURCE 0x698
346#define ARIZONA_OUT2RMIX_INPUT_1_VOLUME 0x699
347#define ARIZONA_OUT2RMIX_INPUT_2_SOURCE 0x69A
348#define ARIZONA_OUT2RMIX_INPUT_2_VOLUME 0x69B
349#define ARIZONA_OUT2RMIX_INPUT_3_SOURCE 0x69C
350#define ARIZONA_OUT2RMIX_INPUT_3_VOLUME 0x69D
351#define ARIZONA_OUT2RMIX_INPUT_4_SOURCE 0x69E
352#define ARIZONA_OUT2RMIX_INPUT_4_VOLUME 0x69F
353#define ARIZONA_OUT3LMIX_INPUT_1_SOURCE 0x6A0
354#define ARIZONA_OUT3LMIX_INPUT_1_VOLUME 0x6A1
355#define ARIZONA_OUT3LMIX_INPUT_2_SOURCE 0x6A2
356#define ARIZONA_OUT3LMIX_INPUT_2_VOLUME 0x6A3
357#define ARIZONA_OUT3LMIX_INPUT_3_SOURCE 0x6A4
358#define ARIZONA_OUT3LMIX_INPUT_3_VOLUME 0x6A5
359#define ARIZONA_OUT3LMIX_INPUT_4_SOURCE 0x6A6
360#define ARIZONA_OUT3LMIX_INPUT_4_VOLUME 0x6A7
361#define ARIZONA_OUT3RMIX_INPUT_1_SOURCE 0x6A8
362#define ARIZONA_OUT3RMIX_INPUT_1_VOLUME 0x6A9
363#define ARIZONA_OUT3RMIX_INPUT_2_SOURCE 0x6AA
364#define ARIZONA_OUT3RMIX_INPUT_2_VOLUME 0x6AB
365#define ARIZONA_OUT3RMIX_INPUT_3_SOURCE 0x6AC
366#define ARIZONA_OUT3RMIX_INPUT_3_VOLUME 0x6AD
367#define ARIZONA_OUT3RMIX_INPUT_4_SOURCE 0x6AE
368#define ARIZONA_OUT3RMIX_INPUT_4_VOLUME 0x6AF
369#define ARIZONA_OUT4LMIX_INPUT_1_SOURCE 0x6B0
370#define ARIZONA_OUT4LMIX_INPUT_1_VOLUME 0x6B1
371#define ARIZONA_OUT4LMIX_INPUT_2_SOURCE 0x6B2
372#define ARIZONA_OUT4LMIX_INPUT_2_VOLUME 0x6B3
373#define ARIZONA_OUT4LMIX_INPUT_3_SOURCE 0x6B4
374#define ARIZONA_OUT4LMIX_INPUT_3_VOLUME 0x6B5
375#define ARIZONA_OUT4LMIX_INPUT_4_SOURCE 0x6B6
376#define ARIZONA_OUT4LMIX_INPUT_4_VOLUME 0x6B7
377#define ARIZONA_OUT4RMIX_INPUT_1_SOURCE 0x6B8
378#define ARIZONA_OUT4RMIX_INPUT_1_VOLUME 0x6B9
379#define ARIZONA_OUT4RMIX_INPUT_2_SOURCE 0x6BA
380#define ARIZONA_OUT4RMIX_INPUT_2_VOLUME 0x6BB
381#define ARIZONA_OUT4RMIX_INPUT_3_SOURCE 0x6BC
382#define ARIZONA_OUT4RMIX_INPUT_3_VOLUME 0x6BD
383#define ARIZONA_OUT4RMIX_INPUT_4_SOURCE 0x6BE
384#define ARIZONA_OUT4RMIX_INPUT_4_VOLUME 0x6BF
385#define ARIZONA_OUT5LMIX_INPUT_1_SOURCE 0x6C0
386#define ARIZONA_OUT5LMIX_INPUT_1_VOLUME 0x6C1
387#define ARIZONA_OUT5LMIX_INPUT_2_SOURCE 0x6C2
388#define ARIZONA_OUT5LMIX_INPUT_2_VOLUME 0x6C3
389#define ARIZONA_OUT5LMIX_INPUT_3_SOURCE 0x6C4
390#define ARIZONA_OUT5LMIX_INPUT_3_VOLUME 0x6C5
391#define ARIZONA_OUT5LMIX_INPUT_4_SOURCE 0x6C6
392#define ARIZONA_OUT5LMIX_INPUT_4_VOLUME 0x6C7
393#define ARIZONA_OUT5RMIX_INPUT_1_SOURCE 0x6C8
394#define ARIZONA_OUT5RMIX_INPUT_1_VOLUME 0x6C9
395#define ARIZONA_OUT5RMIX_INPUT_2_SOURCE 0x6CA
396#define ARIZONA_OUT5RMIX_INPUT_2_VOLUME 0x6CB
397#define ARIZONA_OUT5RMIX_INPUT_3_SOURCE 0x6CC
398#define ARIZONA_OUT5RMIX_INPUT_3_VOLUME 0x6CD
399#define ARIZONA_OUT5RMIX_INPUT_4_SOURCE 0x6CE
400#define ARIZONA_OUT5RMIX_INPUT_4_VOLUME 0x6CF
401#define ARIZONA_OUT6LMIX_INPUT_1_SOURCE 0x6D0
402#define ARIZONA_OUT6LMIX_INPUT_1_VOLUME 0x6D1
403#define ARIZONA_OUT6LMIX_INPUT_2_SOURCE 0x6D2
404#define ARIZONA_OUT6LMIX_INPUT_2_VOLUME 0x6D3
405#define ARIZONA_OUT6LMIX_INPUT_3_SOURCE 0x6D4
406#define ARIZONA_OUT6LMIX_INPUT_3_VOLUME 0x6D5
407#define ARIZONA_OUT6LMIX_INPUT_4_SOURCE 0x6D6
408#define ARIZONA_OUT6LMIX_INPUT_4_VOLUME 0x6D7
409#define ARIZONA_OUT6RMIX_INPUT_1_SOURCE 0x6D8
410#define ARIZONA_OUT6RMIX_INPUT_1_VOLUME 0x6D9
411#define ARIZONA_OUT6RMIX_INPUT_2_SOURCE 0x6DA
412#define ARIZONA_OUT6RMIX_INPUT_2_VOLUME 0x6DB
413#define ARIZONA_OUT6RMIX_INPUT_3_SOURCE 0x6DC
414#define ARIZONA_OUT6RMIX_INPUT_3_VOLUME 0x6DD
415#define ARIZONA_OUT6RMIX_INPUT_4_SOURCE 0x6DE
416#define ARIZONA_OUT6RMIX_INPUT_4_VOLUME 0x6DF
417#define ARIZONA_AIF1TX1MIX_INPUT_1_SOURCE 0x700
418#define ARIZONA_AIF1TX1MIX_INPUT_1_VOLUME 0x701
419#define ARIZONA_AIF1TX1MIX_INPUT_2_SOURCE 0x702
420#define ARIZONA_AIF1TX1MIX_INPUT_2_VOLUME 0x703
421#define ARIZONA_AIF1TX1MIX_INPUT_3_SOURCE 0x704
422#define ARIZONA_AIF1TX1MIX_INPUT_3_VOLUME 0x705
423#define ARIZONA_AIF1TX1MIX_INPUT_4_SOURCE 0x706
424#define ARIZONA_AIF1TX1MIX_INPUT_4_VOLUME 0x707
425#define ARIZONA_AIF1TX2MIX_INPUT_1_SOURCE 0x708
426#define ARIZONA_AIF1TX2MIX_INPUT_1_VOLUME 0x709
427#define ARIZONA_AIF1TX2MIX_INPUT_2_SOURCE 0x70A
428#define ARIZONA_AIF1TX2MIX_INPUT_2_VOLUME 0x70B
429#define ARIZONA_AIF1TX2MIX_INPUT_3_SOURCE 0x70C
430#define ARIZONA_AIF1TX2MIX_INPUT_3_VOLUME 0x70D
431#define ARIZONA_AIF1TX2MIX_INPUT_4_SOURCE 0x70E
432#define ARIZONA_AIF1TX2MIX_INPUT_4_VOLUME 0x70F
433#define ARIZONA_AIF1TX3MIX_INPUT_1_SOURCE 0x710
434#define ARIZONA_AIF1TX3MIX_INPUT_1_VOLUME 0x711
435#define ARIZONA_AIF1TX3MIX_INPUT_2_SOURCE 0x712
436#define ARIZONA_AIF1TX3MIX_INPUT_2_VOLUME 0x713
437#define ARIZONA_AIF1TX3MIX_INPUT_3_SOURCE 0x714
438#define ARIZONA_AIF1TX3MIX_INPUT_3_VOLUME 0x715
439#define ARIZONA_AIF1TX3MIX_INPUT_4_SOURCE 0x716
440#define ARIZONA_AIF1TX3MIX_INPUT_4_VOLUME 0x717
441#define ARIZONA_AIF1TX4MIX_INPUT_1_SOURCE 0x718
442#define ARIZONA_AIF1TX4MIX_INPUT_1_VOLUME 0x719
443#define ARIZONA_AIF1TX4MIX_INPUT_2_SOURCE 0x71A
444#define ARIZONA_AIF1TX4MIX_INPUT_2_VOLUME 0x71B
445#define ARIZONA_AIF1TX4MIX_INPUT_3_SOURCE 0x71C
446#define ARIZONA_AIF1TX4MIX_INPUT_3_VOLUME 0x71D
447#define ARIZONA_AIF1TX4MIX_INPUT_4_SOURCE 0x71E
448#define ARIZONA_AIF1TX4MIX_INPUT_4_VOLUME 0x71F
449#define ARIZONA_AIF1TX5MIX_INPUT_1_SOURCE 0x720
450#define ARIZONA_AIF1TX5MIX_INPUT_1_VOLUME 0x721
451#define ARIZONA_AIF1TX5MIX_INPUT_2_SOURCE 0x722
452#define ARIZONA_AIF1TX5MIX_INPUT_2_VOLUME 0x723
453#define ARIZONA_AIF1TX5MIX_INPUT_3_SOURCE 0x724
454#define ARIZONA_AIF1TX5MIX_INPUT_3_VOLUME 0x725
455#define ARIZONA_AIF1TX5MIX_INPUT_4_SOURCE 0x726
456#define ARIZONA_AIF1TX5MIX_INPUT_4_VOLUME 0x727
457#define ARIZONA_AIF1TX6MIX_INPUT_1_SOURCE 0x728
458#define ARIZONA_AIF1TX6MIX_INPUT_1_VOLUME 0x729
459#define ARIZONA_AIF1TX6MIX_INPUT_2_SOURCE 0x72A
460#define ARIZONA_AIF1TX6MIX_INPUT_2_VOLUME 0x72B
461#define ARIZONA_AIF1TX6MIX_INPUT_3_SOURCE 0x72C
462#define ARIZONA_AIF1TX6MIX_INPUT_3_VOLUME 0x72D
463#define ARIZONA_AIF1TX6MIX_INPUT_4_SOURCE 0x72E
464#define ARIZONA_AIF1TX6MIX_INPUT_4_VOLUME 0x72F
465#define ARIZONA_AIF1TX7MIX_INPUT_1_SOURCE 0x730
466#define ARIZONA_AIF1TX7MIX_INPUT_1_VOLUME 0x731
467#define ARIZONA_AIF1TX7MIX_INPUT_2_SOURCE 0x732
468#define ARIZONA_AIF1TX7MIX_INPUT_2_VOLUME 0x733
469#define ARIZONA_AIF1TX7MIX_INPUT_3_SOURCE 0x734
470#define ARIZONA_AIF1TX7MIX_INPUT_3_VOLUME 0x735
471#define ARIZONA_AIF1TX7MIX_INPUT_4_SOURCE 0x736
472#define ARIZONA_AIF1TX7MIX_INPUT_4_VOLUME 0x737
473#define ARIZONA_AIF1TX8MIX_INPUT_1_SOURCE 0x738
474#define ARIZONA_AIF1TX8MIX_INPUT_1_VOLUME 0x739
475#define ARIZONA_AIF1TX8MIX_INPUT_2_SOURCE 0x73A
476#define ARIZONA_AIF1TX8MIX_INPUT_2_VOLUME 0x73B
477#define ARIZONA_AIF1TX8MIX_INPUT_3_SOURCE 0x73C
478#define ARIZONA_AIF1TX8MIX_INPUT_3_VOLUME 0x73D
479#define ARIZONA_AIF1TX8MIX_INPUT_4_SOURCE 0x73E
480#define ARIZONA_AIF1TX8MIX_INPUT_4_VOLUME 0x73F
481#define ARIZONA_AIF2TX1MIX_INPUT_1_SOURCE 0x740
482#define ARIZONA_AIF2TX1MIX_INPUT_1_VOLUME 0x741
483#define ARIZONA_AIF2TX1MIX_INPUT_2_SOURCE 0x742
484#define ARIZONA_AIF2TX1MIX_INPUT_2_VOLUME 0x743
485#define ARIZONA_AIF2TX1MIX_INPUT_3_SOURCE 0x744
486#define ARIZONA_AIF2TX1MIX_INPUT_3_VOLUME 0x745
487#define ARIZONA_AIF2TX1MIX_INPUT_4_SOURCE 0x746
488#define ARIZONA_AIF2TX1MIX_INPUT_4_VOLUME 0x747
489#define ARIZONA_AIF2TX2MIX_INPUT_1_SOURCE 0x748
490#define ARIZONA_AIF2TX2MIX_INPUT_1_VOLUME 0x749
491#define ARIZONA_AIF2TX2MIX_INPUT_2_SOURCE 0x74A
492#define ARIZONA_AIF2TX2MIX_INPUT_2_VOLUME 0x74B
493#define ARIZONA_AIF2TX2MIX_INPUT_3_SOURCE 0x74C
494#define ARIZONA_AIF2TX2MIX_INPUT_3_VOLUME 0x74D
495#define ARIZONA_AIF2TX2MIX_INPUT_4_SOURCE 0x74E
496#define ARIZONA_AIF2TX2MIX_INPUT_4_VOLUME 0x74F
497#define ARIZONA_AIF3TX1MIX_INPUT_1_SOURCE 0x780
498#define ARIZONA_AIF3TX1MIX_INPUT_1_VOLUME 0x781
499#define ARIZONA_AIF3TX1MIX_INPUT_2_SOURCE 0x782
500#define ARIZONA_AIF3TX1MIX_INPUT_2_VOLUME 0x783
501#define ARIZONA_AIF3TX1MIX_INPUT_3_SOURCE 0x784
502#define ARIZONA_AIF3TX1MIX_INPUT_3_VOLUME 0x785
503#define ARIZONA_AIF3TX1MIX_INPUT_4_SOURCE 0x786
504#define ARIZONA_AIF3TX1MIX_INPUT_4_VOLUME 0x787
505#define ARIZONA_AIF3TX2MIX_INPUT_1_SOURCE 0x788
506#define ARIZONA_AIF3TX2MIX_INPUT_1_VOLUME 0x789
507#define ARIZONA_AIF3TX2MIX_INPUT_2_SOURCE 0x78A
508#define ARIZONA_AIF3TX2MIX_INPUT_2_VOLUME 0x78B
509#define ARIZONA_AIF3TX2MIX_INPUT_3_SOURCE 0x78C
510#define ARIZONA_AIF3TX2MIX_INPUT_3_VOLUME 0x78D
511#define ARIZONA_AIF3TX2MIX_INPUT_4_SOURCE 0x78E
512#define ARIZONA_AIF3TX2MIX_INPUT_4_VOLUME 0x78F
513#define ARIZONA_SLIMTX1MIX_INPUT_1_SOURCE 0x7C0
514#define ARIZONA_SLIMTX1MIX_INPUT_1_VOLUME 0x7C1
515#define ARIZONA_SLIMTX1MIX_INPUT_2_SOURCE 0x7C2
516#define ARIZONA_SLIMTX1MIX_INPUT_2_VOLUME 0x7C3
517#define ARIZONA_SLIMTX1MIX_INPUT_3_SOURCE 0x7C4
518#define ARIZONA_SLIMTX1MIX_INPUT_3_VOLUME 0x7C5
519#define ARIZONA_SLIMTX1MIX_INPUT_4_SOURCE 0x7C6
520#define ARIZONA_SLIMTX1MIX_INPUT_4_VOLUME 0x7C7
521#define ARIZONA_SLIMTX2MIX_INPUT_1_SOURCE 0x7C8
522#define ARIZONA_SLIMTX2MIX_INPUT_1_VOLUME 0x7C9
523#define ARIZONA_SLIMTX2MIX_INPUT_2_SOURCE 0x7CA
524#define ARIZONA_SLIMTX2MIX_INPUT_2_VOLUME 0x7CB
525#define ARIZONA_SLIMTX2MIX_INPUT_3_SOURCE 0x7CC
526#define ARIZONA_SLIMTX2MIX_INPUT_3_VOLUME 0x7CD
527#define ARIZONA_SLIMTX2MIX_INPUT_4_SOURCE 0x7CE
528#define ARIZONA_SLIMTX2MIX_INPUT_4_VOLUME 0x7CF
529#define ARIZONA_SLIMTX3MIX_INPUT_1_SOURCE 0x7D0
530#define ARIZONA_SLIMTX3MIX_INPUT_1_VOLUME 0x7D1
531#define ARIZONA_SLIMTX3MIX_INPUT_2_SOURCE 0x7D2
532#define ARIZONA_SLIMTX3MIX_INPUT_2_VOLUME 0x7D3
533#define ARIZONA_SLIMTX3MIX_INPUT_3_SOURCE 0x7D4
534#define ARIZONA_SLIMTX3MIX_INPUT_3_VOLUME 0x7D5
535#define ARIZONA_SLIMTX3MIX_INPUT_4_SOURCE 0x7D6
536#define ARIZONA_SLIMTX3MIX_INPUT_4_VOLUME 0x7D7
537#define ARIZONA_SLIMTX4MIX_INPUT_1_SOURCE 0x7D8
538#define ARIZONA_SLIMTX4MIX_INPUT_1_VOLUME 0x7D9
539#define ARIZONA_SLIMTX4MIX_INPUT_2_SOURCE 0x7DA
540#define ARIZONA_SLIMTX4MIX_INPUT_2_VOLUME 0x7DB
541#define ARIZONA_SLIMTX4MIX_INPUT_3_SOURCE 0x7DC
542#define ARIZONA_SLIMTX4MIX_INPUT_3_VOLUME 0x7DD
543#define ARIZONA_SLIMTX4MIX_INPUT_4_SOURCE 0x7DE
544#define ARIZONA_SLIMTX4MIX_INPUT_4_VOLUME 0x7DF
545#define ARIZONA_SLIMTX5MIX_INPUT_1_SOURCE 0x7E0
546#define ARIZONA_SLIMTX5MIX_INPUT_1_VOLUME 0x7E1
547#define ARIZONA_SLIMTX5MIX_INPUT_2_SOURCE 0x7E2
548#define ARIZONA_SLIMTX5MIX_INPUT_2_VOLUME 0x7E3
549#define ARIZONA_SLIMTX5MIX_INPUT_3_SOURCE 0x7E4
550#define ARIZONA_SLIMTX5MIX_INPUT_3_VOLUME 0x7E5
551#define ARIZONA_SLIMTX5MIX_INPUT_4_SOURCE 0x7E6
552#define ARIZONA_SLIMTX5MIX_INPUT_4_VOLUME 0x7E7
553#define ARIZONA_SLIMTX6MIX_INPUT_1_SOURCE 0x7E8
554#define ARIZONA_SLIMTX6MIX_INPUT_1_VOLUME 0x7E9
555#define ARIZONA_SLIMTX6MIX_INPUT_2_SOURCE 0x7EA
556#define ARIZONA_SLIMTX6MIX_INPUT_2_VOLUME 0x7EB
557#define ARIZONA_SLIMTX6MIX_INPUT_3_SOURCE 0x7EC
558#define ARIZONA_SLIMTX6MIX_INPUT_3_VOLUME 0x7ED
559#define ARIZONA_SLIMTX6MIX_INPUT_4_SOURCE 0x7EE
560#define ARIZONA_SLIMTX6MIX_INPUT_4_VOLUME 0x7EF
561#define ARIZONA_SLIMTX7MIX_INPUT_1_SOURCE 0x7F0
562#define ARIZONA_SLIMTX7MIX_INPUT_1_VOLUME 0x7F1
563#define ARIZONA_SLIMTX7MIX_INPUT_2_SOURCE 0x7F2
564#define ARIZONA_SLIMTX7MIX_INPUT_2_VOLUME 0x7F3
565#define ARIZONA_SLIMTX7MIX_INPUT_3_SOURCE 0x7F4
566#define ARIZONA_SLIMTX7MIX_INPUT_3_VOLUME 0x7F5
567#define ARIZONA_SLIMTX7MIX_INPUT_4_SOURCE 0x7F6
568#define ARIZONA_SLIMTX7MIX_INPUT_4_VOLUME 0x7F7
569#define ARIZONA_SLIMTX8MIX_INPUT_1_SOURCE 0x7F8
570#define ARIZONA_SLIMTX8MIX_INPUT_1_VOLUME 0x7F9
571#define ARIZONA_SLIMTX8MIX_INPUT_2_SOURCE 0x7FA
572#define ARIZONA_SLIMTX8MIX_INPUT_2_VOLUME 0x7FB
573#define ARIZONA_SLIMTX8MIX_INPUT_3_SOURCE 0x7FC
574#define ARIZONA_SLIMTX8MIX_INPUT_3_VOLUME 0x7FD
575#define ARIZONA_SLIMTX8MIX_INPUT_4_SOURCE 0x7FE
576#define ARIZONA_SLIMTX8MIX_INPUT_4_VOLUME 0x7FF
577#define ARIZONA_EQ1MIX_INPUT_1_SOURCE 0x880
578#define ARIZONA_EQ1MIX_INPUT_1_VOLUME 0x881
579#define ARIZONA_EQ1MIX_INPUT_2_SOURCE 0x882
580#define ARIZONA_EQ1MIX_INPUT_2_VOLUME 0x883
581#define ARIZONA_EQ1MIX_INPUT_3_SOURCE 0x884
582#define ARIZONA_EQ1MIX_INPUT_3_VOLUME 0x885
583#define ARIZONA_EQ1MIX_INPUT_4_SOURCE 0x886
584#define ARIZONA_EQ1MIX_INPUT_4_VOLUME 0x887
585#define ARIZONA_EQ2MIX_INPUT_1_SOURCE 0x888
586#define ARIZONA_EQ2MIX_INPUT_1_VOLUME 0x889
587#define ARIZONA_EQ2MIX_INPUT_2_SOURCE 0x88A
588#define ARIZONA_EQ2MIX_INPUT_2_VOLUME 0x88B
589#define ARIZONA_EQ2MIX_INPUT_3_SOURCE 0x88C
590#define ARIZONA_EQ2MIX_INPUT_3_VOLUME 0x88D
591#define ARIZONA_EQ2MIX_INPUT_4_SOURCE 0x88E
592#define ARIZONA_EQ2MIX_INPUT_4_VOLUME 0x88F
593#define ARIZONA_EQ3MIX_INPUT_1_SOURCE 0x890
594#define ARIZONA_EQ3MIX_INPUT_1_VOLUME 0x891
595#define ARIZONA_EQ3MIX_INPUT_2_SOURCE 0x892
596#define ARIZONA_EQ3MIX_INPUT_2_VOLUME 0x893
597#define ARIZONA_EQ3MIX_INPUT_3_SOURCE 0x894
598#define ARIZONA_EQ3MIX_INPUT_3_VOLUME 0x895
599#define ARIZONA_EQ3MIX_INPUT_4_SOURCE 0x896
600#define ARIZONA_EQ3MIX_INPUT_4_VOLUME 0x897
601#define ARIZONA_EQ4MIX_INPUT_1_SOURCE 0x898
602#define ARIZONA_EQ4MIX_INPUT_1_VOLUME 0x899
603#define ARIZONA_EQ4MIX_INPUT_2_SOURCE 0x89A
604#define ARIZONA_EQ4MIX_INPUT_2_VOLUME 0x89B
605#define ARIZONA_EQ4MIX_INPUT_3_SOURCE 0x89C
606#define ARIZONA_EQ4MIX_INPUT_3_VOLUME 0x89D
607#define ARIZONA_EQ4MIX_INPUT_4_SOURCE 0x89E
608#define ARIZONA_EQ4MIX_INPUT_4_VOLUME 0x89F
609#define ARIZONA_DRC1LMIX_INPUT_1_SOURCE 0x8C0
610#define ARIZONA_DRC1LMIX_INPUT_1_VOLUME 0x8C1
611#define ARIZONA_DRC1LMIX_INPUT_2_SOURCE 0x8C2
612#define ARIZONA_DRC1LMIX_INPUT_2_VOLUME 0x8C3
613#define ARIZONA_DRC1LMIX_INPUT_3_SOURCE 0x8C4
614#define ARIZONA_DRC1LMIX_INPUT_3_VOLUME 0x8C5
615#define ARIZONA_DRC1LMIX_INPUT_4_SOURCE 0x8C6
616#define ARIZONA_DRC1LMIX_INPUT_4_VOLUME 0x8C7
617#define ARIZONA_DRC1RMIX_INPUT_1_SOURCE 0x8C8
618#define ARIZONA_DRC1RMIX_INPUT_1_VOLUME 0x8C9
619#define ARIZONA_DRC1RMIX_INPUT_2_SOURCE 0x8CA
620#define ARIZONA_DRC1RMIX_INPUT_2_VOLUME 0x8CB
621#define ARIZONA_DRC1RMIX_INPUT_3_SOURCE 0x8CC
622#define ARIZONA_DRC1RMIX_INPUT_3_VOLUME 0x8CD
623#define ARIZONA_DRC1RMIX_INPUT_4_SOURCE 0x8CE
624#define ARIZONA_DRC1RMIX_INPUT_4_VOLUME 0x8CF
625#define ARIZONA_DRC2LMIX_INPUT_1_SOURCE 0x8D0
626#define ARIZONA_DRC2LMIX_INPUT_1_VOLUME 0x8D1
627#define ARIZONA_DRC2LMIX_INPUT_2_SOURCE 0x8D2
628#define ARIZONA_DRC2LMIX_INPUT_2_VOLUME 0x8D3
629#define ARIZONA_DRC2LMIX_INPUT_3_SOURCE 0x8D4
630#define ARIZONA_DRC2LMIX_INPUT_3_VOLUME 0x8D5
631#define ARIZONA_DRC2LMIX_INPUT_4_SOURCE 0x8D6
632#define ARIZONA_DRC2LMIX_INPUT_4_VOLUME 0x8D7
633#define ARIZONA_DRC2RMIX_INPUT_1_SOURCE 0x8D8
634#define ARIZONA_DRC2RMIX_INPUT_1_VOLUME 0x8D9
635#define ARIZONA_DRC2RMIX_INPUT_2_SOURCE 0x8DA
636#define ARIZONA_DRC2RMIX_INPUT_2_VOLUME 0x8DB
637#define ARIZONA_DRC2RMIX_INPUT_3_SOURCE 0x8DC
638#define ARIZONA_DRC2RMIX_INPUT_3_VOLUME 0x8DD
639#define ARIZONA_DRC2RMIX_INPUT_4_SOURCE 0x8DE
640#define ARIZONA_DRC2RMIX_INPUT_4_VOLUME 0x8DF
641#define ARIZONA_HPLP1MIX_INPUT_1_SOURCE 0x900
642#define ARIZONA_HPLP1MIX_INPUT_1_VOLUME 0x901
643#define ARIZONA_HPLP1MIX_INPUT_2_SOURCE 0x902
644#define ARIZONA_HPLP1MIX_INPUT_2_VOLUME 0x903
645#define ARIZONA_HPLP1MIX_INPUT_3_SOURCE 0x904
646#define ARIZONA_HPLP1MIX_INPUT_3_VOLUME 0x905
647#define ARIZONA_HPLP1MIX_INPUT_4_SOURCE 0x906
648#define ARIZONA_HPLP1MIX_INPUT_4_VOLUME 0x907
649#define ARIZONA_HPLP2MIX_INPUT_1_SOURCE 0x908
650#define ARIZONA_HPLP2MIX_INPUT_1_VOLUME 0x909
651#define ARIZONA_HPLP2MIX_INPUT_2_SOURCE 0x90A
652#define ARIZONA_HPLP2MIX_INPUT_2_VOLUME 0x90B
653#define ARIZONA_HPLP2MIX_INPUT_3_SOURCE 0x90C
654#define ARIZONA_HPLP2MIX_INPUT_3_VOLUME 0x90D
655#define ARIZONA_HPLP2MIX_INPUT_4_SOURCE 0x90E
656#define ARIZONA_HPLP2MIX_INPUT_4_VOLUME 0x90F
657#define ARIZONA_HPLP3MIX_INPUT_1_SOURCE 0x910
658#define ARIZONA_HPLP3MIX_INPUT_1_VOLUME 0x911
659#define ARIZONA_HPLP3MIX_INPUT_2_SOURCE 0x912
660#define ARIZONA_HPLP3MIX_INPUT_2_VOLUME 0x913
661#define ARIZONA_HPLP3MIX_INPUT_3_SOURCE 0x914
662#define ARIZONA_HPLP3MIX_INPUT_3_VOLUME 0x915
663#define ARIZONA_HPLP3MIX_INPUT_4_SOURCE 0x916
664#define ARIZONA_HPLP3MIX_INPUT_4_VOLUME 0x917
665#define ARIZONA_HPLP4MIX_INPUT_1_SOURCE 0x918
666#define ARIZONA_HPLP4MIX_INPUT_1_VOLUME 0x919
667#define ARIZONA_HPLP4MIX_INPUT_2_SOURCE 0x91A
668#define ARIZONA_HPLP4MIX_INPUT_2_VOLUME 0x91B
669#define ARIZONA_HPLP4MIX_INPUT_3_SOURCE 0x91C
670#define ARIZONA_HPLP4MIX_INPUT_3_VOLUME 0x91D
671#define ARIZONA_HPLP4MIX_INPUT_4_SOURCE 0x91E
672#define ARIZONA_HPLP4MIX_INPUT_4_VOLUME 0x91F
673#define ARIZONA_DSP1LMIX_INPUT_1_SOURCE 0x940
674#define ARIZONA_DSP1LMIX_INPUT_1_VOLUME 0x941
675#define ARIZONA_DSP1LMIX_INPUT_2_SOURCE 0x942
676#define ARIZONA_DSP1LMIX_INPUT_2_VOLUME 0x943
677#define ARIZONA_DSP1LMIX_INPUT_3_SOURCE 0x944
678#define ARIZONA_DSP1LMIX_INPUT_3_VOLUME 0x945
679#define ARIZONA_DSP1LMIX_INPUT_4_SOURCE 0x946
680#define ARIZONA_DSP1LMIX_INPUT_4_VOLUME 0x947
681#define ARIZONA_DSP1RMIX_INPUT_1_SOURCE 0x948
682#define ARIZONA_DSP1RMIX_INPUT_1_VOLUME 0x949
683#define ARIZONA_DSP1RMIX_INPUT_2_SOURCE 0x94A
684#define ARIZONA_DSP1RMIX_INPUT_2_VOLUME 0x94B
685#define ARIZONA_DSP1RMIX_INPUT_3_SOURCE 0x94C
686#define ARIZONA_DSP1RMIX_INPUT_3_VOLUME 0x94D
687#define ARIZONA_DSP1RMIX_INPUT_4_SOURCE 0x94E
688#define ARIZONA_DSP1RMIX_INPUT_4_VOLUME 0x94F
689#define ARIZONA_DSP1AUX1MIX_INPUT_1_SOURCE 0x950
690#define ARIZONA_DSP1AUX2MIX_INPUT_1_SOURCE 0x958
691#define ARIZONA_DSP1AUX3MIX_INPUT_1_SOURCE 0x960
692#define ARIZONA_DSP1AUX4MIX_INPUT_1_SOURCE 0x968
693#define ARIZONA_DSP1AUX5MIX_INPUT_1_SOURCE 0x970
694#define ARIZONA_DSP1AUX6MIX_INPUT_1_SOURCE 0x978
695#define ARIZONA_DSP2LMIX_INPUT_1_SOURCE 0x980
696#define ARIZONA_DSP2LMIX_INPUT_1_VOLUME 0x981
697#define ARIZONA_DSP2LMIX_INPUT_2_SOURCE 0x982
698#define ARIZONA_DSP2LMIX_INPUT_2_VOLUME 0x983
699#define ARIZONA_DSP2LMIX_INPUT_3_SOURCE 0x984
700#define ARIZONA_DSP2LMIX_INPUT_3_VOLUME 0x985
701#define ARIZONA_DSP2LMIX_INPUT_4_SOURCE 0x986
702#define ARIZONA_DSP2LMIX_INPUT_4_VOLUME 0x987
703#define ARIZONA_DSP2RMIX_INPUT_1_SOURCE 0x988
704#define ARIZONA_DSP2RMIX_INPUT_1_VOLUME 0x989
705#define ARIZONA_DSP2RMIX_INPUT_2_SOURCE 0x98A
706#define ARIZONA_DSP2RMIX_INPUT_2_VOLUME 0x98B
707#define ARIZONA_DSP2RMIX_INPUT_3_SOURCE 0x98C
708#define ARIZONA_DSP2RMIX_INPUT_3_VOLUME 0x98D
709#define ARIZONA_DSP2RMIX_INPUT_4_SOURCE 0x98E
710#define ARIZONA_DSP2RMIX_INPUT_4_VOLUME 0x98F
711#define ARIZONA_DSP2AUX1MIX_INPUT_1_SOURCE 0x990
712#define ARIZONA_DSP2AUX2MIX_INPUT_1_SOURCE 0x998
713#define ARIZONA_DSP2AUX3MIX_INPUT_1_SOURCE 0x9A0
714#define ARIZONA_DSP2AUX4MIX_INPUT_1_SOURCE 0x9A8
715#define ARIZONA_DSP2AUX5MIX_INPUT_1_SOURCE 0x9B0
716#define ARIZONA_DSP2AUX6MIX_INPUT_1_SOURCE 0x9B8
717#define ARIZONA_DSP3LMIX_INPUT_1_SOURCE 0x9C0
718#define ARIZONA_DSP3LMIX_INPUT_1_VOLUME 0x9C1
719#define ARIZONA_DSP3LMIX_INPUT_2_SOURCE 0x9C2
720#define ARIZONA_DSP3LMIX_INPUT_2_VOLUME 0x9C3
721#define ARIZONA_DSP3LMIX_INPUT_3_SOURCE 0x9C4
722#define ARIZONA_DSP3LMIX_INPUT_3_VOLUME 0x9C5
723#define ARIZONA_DSP3LMIX_INPUT_4_SOURCE 0x9C6
724#define ARIZONA_DSP3LMIX_INPUT_4_VOLUME 0x9C7
725#define ARIZONA_DSP3RMIX_INPUT_1_SOURCE 0x9C8
726#define ARIZONA_DSP3RMIX_INPUT_1_VOLUME 0x9C9
727#define ARIZONA_DSP3RMIX_INPUT_2_SOURCE 0x9CA
728#define ARIZONA_DSP3RMIX_INPUT_2_VOLUME 0x9CB
729#define ARIZONA_DSP3RMIX_INPUT_3_SOURCE 0x9CC
730#define ARIZONA_DSP3RMIX_INPUT_3_VOLUME 0x9CD
731#define ARIZONA_DSP3RMIX_INPUT_4_SOURCE 0x9CE
732#define ARIZONA_DSP3RMIX_INPUT_4_VOLUME 0x9CF
733#define ARIZONA_DSP3AUX1MIX_INPUT_1_SOURCE 0x9D0
734#define ARIZONA_DSP3AUX2MIX_INPUT_1_SOURCE 0x9D8
735#define ARIZONA_DSP3AUX3MIX_INPUT_1_SOURCE 0x9E0
736#define ARIZONA_DSP3AUX4MIX_INPUT_1_SOURCE 0x9E8
737#define ARIZONA_DSP3AUX5MIX_INPUT_1_SOURCE 0x9F0
738#define ARIZONA_DSP3AUX6MIX_INPUT_1_SOURCE 0x9F8
739#define ARIZONA_DSP4LMIX_INPUT_1_SOURCE 0xA00
740#define ARIZONA_DSP4LMIX_INPUT_1_VOLUME 0xA01
741#define ARIZONA_DSP4LMIX_INPUT_2_SOURCE 0xA02
742#define ARIZONA_DSP4LMIX_INPUT_2_VOLUME 0xA03
743#define ARIZONA_DSP4LMIX_INPUT_3_SOURCE 0xA04
744#define ARIZONA_DSP4LMIX_INPUT_3_VOLUME 0xA05
745#define ARIZONA_DSP4LMIX_INPUT_4_SOURCE 0xA06
746#define ARIZONA_DSP4LMIX_INPUT_4_VOLUME 0xA07
747#define ARIZONA_DSP4RMIX_INPUT_1_SOURCE 0xA08
748#define ARIZONA_DSP4RMIX_INPUT_1_VOLUME 0xA09
749#define ARIZONA_DSP4RMIX_INPUT_2_SOURCE 0xA0A
750#define ARIZONA_DSP4RMIX_INPUT_2_VOLUME 0xA0B
751#define ARIZONA_DSP4RMIX_INPUT_3_SOURCE 0xA0C
752#define ARIZONA_DSP4RMIX_INPUT_3_VOLUME 0xA0D
753#define ARIZONA_DSP4RMIX_INPUT_4_SOURCE 0xA0E
754#define ARIZONA_DSP4RMIX_INPUT_4_VOLUME 0xA0F
755#define ARIZONA_DSP4AUX1MIX_INPUT_1_SOURCE 0xA10
756#define ARIZONA_DSP4AUX2MIX_INPUT_1_SOURCE 0xA18
757#define ARIZONA_DSP4AUX3MIX_INPUT_1_SOURCE 0xA20
758#define ARIZONA_DSP4AUX4MIX_INPUT_1_SOURCE 0xA28
759#define ARIZONA_DSP4AUX5MIX_INPUT_1_SOURCE 0xA30
760#define ARIZONA_DSP4AUX6MIX_INPUT_1_SOURCE 0xA38
761#define ARIZONA_ASRC1LMIX_INPUT_1_SOURCE 0xA80
762#define ARIZONA_ASRC1RMIX_INPUT_1_SOURCE 0xA88
763#define ARIZONA_ASRC2LMIX_INPUT_1_SOURCE 0xA90
764#define ARIZONA_ASRC2RMIX_INPUT_1_SOURCE 0xA98
765#define ARIZONA_ISRC1DEC1MIX_INPUT_1_SOURCE 0xB00
766#define ARIZONA_ISRC1DEC2MIX_INPUT_1_SOURCE 0xB08
767#define ARIZONA_ISRC1DEC3MIX_INPUT_1_SOURCE 0xB10
768#define ARIZONA_ISRC1DEC4MIX_INPUT_1_SOURCE 0xB18
769#define ARIZONA_ISRC1INT1MIX_INPUT_1_SOURCE 0xB20
770#define ARIZONA_ISRC1INT2MIX_INPUT_1_SOURCE 0xB28
771#define ARIZONA_ISRC1INT3MIX_INPUT_1_SOURCE 0xB30
772#define ARIZONA_ISRC1INT4MIX_INPUT_1_SOURCE 0xB38
773#define ARIZONA_ISRC2DEC1MIX_INPUT_1_SOURCE 0xB40
774#define ARIZONA_ISRC2DEC2MIX_INPUT_1_SOURCE 0xB48
775#define ARIZONA_ISRC2INT1MIX_INPUT_1_SOURCE 0xB60
776#define ARIZONA_ISRC2INT2MIX_INPUT_1_SOURCE 0xB68
777#define ARIZONA_ISRC1INT3MIX_INPUT_1_SOURCE 0xB30
778#define ARIZONA_ISRC1INT4MIX_INPUT_1_SOURCE 0xB38
779#define ARIZONA_ISRC2DEC1MIX_INPUT_1_SOURCE 0xB40
780#define ARIZONA_ISRC2DEC2MIX_INPUT_1_SOURCE 0xB48
781#define ARIZONA_ISRC2DEC3MIX_INPUT_1_SOURCE 0xB50
782#define ARIZONA_ISRC2DEC4MIX_INPUT_1_SOURCE 0xB58
783#define ARIZONA_ISRC2INT1MIX_INPUT_1_SOURCE 0xB60
784#define ARIZONA_ISRC2INT2MIX_INPUT_1_SOURCE 0xB68
785#define ARIZONA_ISRC2INT3MIX_INPUT_1_SOURCE 0xB70
786#define ARIZONA_ISRC2INT4MIX_INPUT_1_SOURCE 0xB78
787#define ARIZONA_ISRC3DEC1MIX_INPUT_1_SOURCE 0xB80
788#define ARIZONA_ISRC3DEC2MIX_INPUT_1_SOURCE 0xB88
789#define ARIZONA_ISRC3DEC3MIX_INPUT_1_SOURCE 0xB90
790#define ARIZONA_ISRC3DEC4MIX_INPUT_1_SOURCE 0xB98
791#define ARIZONA_ISRC3INT1MIX_INPUT_1_SOURCE 0xBA0
792#define ARIZONA_ISRC3INT2MIX_INPUT_1_SOURCE 0xBA8
793#define ARIZONA_ISRC3INT3MIX_INPUT_1_SOURCE 0xBB0
794#define ARIZONA_ISRC3INT4MIX_INPUT_1_SOURCE 0xBB8
795#define ARIZONA_GPIO1_CTRL 0xC00
796#define ARIZONA_GPIO2_CTRL 0xC01
797#define ARIZONA_GPIO3_CTRL 0xC02
798#define ARIZONA_GPIO4_CTRL 0xC03
799#define ARIZONA_GPIO5_CTRL 0xC04
800#define ARIZONA_IRQ_CTRL_1 0xC0F
801#define ARIZONA_GPIO_DEBOUNCE_CONFIG 0xC10
802#define ARIZONA_MISC_PAD_CTRL_1 0xC20
803#define ARIZONA_MISC_PAD_CTRL_2 0xC21
804#define ARIZONA_MISC_PAD_CTRL_3 0xC22
805#define ARIZONA_MISC_PAD_CTRL_4 0xC23
806#define ARIZONA_MISC_PAD_CTRL_5 0xC24
807#define ARIZONA_MISC_PAD_CTRL_6 0xC25
808#define ARIZONA_MISC_PAD_CTRL_7 0xC30
809#define ARIZONA_MISC_PAD_CTRL_8 0xC31
810#define ARIZONA_MISC_PAD_CTRL_9 0xC32
811#define ARIZONA_MISC_PAD_CTRL_10 0xC33
812#define ARIZONA_MISC_PAD_CTRL_11 0xC34
813#define ARIZONA_MISC_PAD_CTRL_12 0xC35
814#define ARIZONA_MISC_PAD_CTRL_13 0xC36
815#define ARIZONA_MISC_PAD_CTRL_14 0xC37
816#define ARIZONA_MISC_PAD_CTRL_15 0xC38
817#define ARIZONA_MISC_PAD_CTRL_16 0xC39
818#define ARIZONA_MISC_PAD_CTRL_17 0xC3A
819#define ARIZONA_MISC_PAD_CTRL_18 0xC3B
820#define ARIZONA_INTERRUPT_STATUS_1 0xD00
821#define ARIZONA_INTERRUPT_STATUS_2 0xD01
822#define ARIZONA_INTERRUPT_STATUS_3 0xD02
823#define ARIZONA_INTERRUPT_STATUS_4 0xD03
824#define ARIZONA_INTERRUPT_STATUS_5 0xD04
825#define ARIZONA_INTERRUPT_STATUS_1_MASK 0xD08
826#define ARIZONA_INTERRUPT_STATUS_2_MASK 0xD09
827#define ARIZONA_INTERRUPT_STATUS_3_MASK 0xD0A
828#define ARIZONA_INTERRUPT_STATUS_4_MASK 0xD0B
829#define ARIZONA_INTERRUPT_STATUS_5_MASK 0xD0C
830#define ARIZONA_INTERRUPT_CONTROL 0xD0F
831#define ARIZONA_IRQ2_STATUS_1 0xD10
832#define ARIZONA_IRQ2_STATUS_2 0xD11
833#define ARIZONA_IRQ2_STATUS_3 0xD12
834#define ARIZONA_IRQ2_STATUS_4 0xD13
835#define ARIZONA_IRQ2_STATUS_5 0xD14
836#define ARIZONA_IRQ2_STATUS_1_MASK 0xD18
837#define ARIZONA_IRQ2_STATUS_2_MASK 0xD19
838#define ARIZONA_IRQ2_STATUS_3_MASK 0xD1A
839#define ARIZONA_IRQ2_STATUS_4_MASK 0xD1B
840#define ARIZONA_IRQ2_STATUS_5_MASK 0xD1C
841#define ARIZONA_IRQ2_CONTROL 0xD1F
842#define ARIZONA_INTERRUPT_RAW_STATUS_2 0xD20
843#define ARIZONA_INTERRUPT_RAW_STATUS_3 0xD21
844#define ARIZONA_INTERRUPT_RAW_STATUS_4 0xD22
845#define ARIZONA_INTERRUPT_RAW_STATUS_5 0xD23
846#define ARIZONA_INTERRUPT_RAW_STATUS_6 0xD24
847#define ARIZONA_INTERRUPT_RAW_STATUS_7 0xD25
848#define ARIZONA_INTERRUPT_RAW_STATUS_8 0xD26
849#define ARIZONA_IRQ_PIN_STATUS 0xD40
850#define ARIZONA_ADSP2_IRQ0 0xD41
851#define ARIZONA_AOD_WKUP_AND_TRIG 0xD50
852#define ARIZONA_AOD_IRQ1 0xD51
853#define ARIZONA_AOD_IRQ2 0xD52
854#define ARIZONA_AOD_IRQ_MASK_IRQ1 0xD53
855#define ARIZONA_AOD_IRQ_MASK_IRQ2 0xD54
856#define ARIZONA_AOD_IRQ_RAW_STATUS 0xD55
857#define ARIZONA_JACK_DETECT_DEBOUNCE 0xD56
858#define ARIZONA_FX_CTRL1 0xE00
859#define ARIZONA_FX_CTRL2 0xE01
860#define ARIZONA_EQ1_1 0xE10
861#define ARIZONA_EQ1_2 0xE11
862#define ARIZONA_EQ1_3 0xE12
863#define ARIZONA_EQ1_4 0xE13
864#define ARIZONA_EQ1_5 0xE14
865#define ARIZONA_EQ1_6 0xE15
866#define ARIZONA_EQ1_7 0xE16
867#define ARIZONA_EQ1_8 0xE17
868#define ARIZONA_EQ1_9 0xE18
869#define ARIZONA_EQ1_10 0xE19
870#define ARIZONA_EQ1_11 0xE1A
871#define ARIZONA_EQ1_12 0xE1B
872#define ARIZONA_EQ1_13 0xE1C
873#define ARIZONA_EQ1_14 0xE1D
874#define ARIZONA_EQ1_15 0xE1E
875#define ARIZONA_EQ1_16 0xE1F
876#define ARIZONA_EQ1_17 0xE20
877#define ARIZONA_EQ1_18 0xE21
878#define ARIZONA_EQ1_19 0xE22
879#define ARIZONA_EQ1_20 0xE23
880#define ARIZONA_EQ1_21 0xE24
881#define ARIZONA_EQ2_1 0xE26
882#define ARIZONA_EQ2_2 0xE27
883#define ARIZONA_EQ2_3 0xE28
884#define ARIZONA_EQ2_4 0xE29
885#define ARIZONA_EQ2_5 0xE2A
886#define ARIZONA_EQ2_6 0xE2B
887#define ARIZONA_EQ2_7 0xE2C
888#define ARIZONA_EQ2_8 0xE2D
889#define ARIZONA_EQ2_9 0xE2E
890#define ARIZONA_EQ2_10 0xE2F
891#define ARIZONA_EQ2_11 0xE30
892#define ARIZONA_EQ2_12 0xE31
893#define ARIZONA_EQ2_13 0xE32
894#define ARIZONA_EQ2_14 0xE33
895#define ARIZONA_EQ2_15 0xE34
896#define ARIZONA_EQ2_16 0xE35
897#define ARIZONA_EQ2_17 0xE36
898#define ARIZONA_EQ2_18 0xE37
899#define ARIZONA_EQ2_19 0xE38
900#define ARIZONA_EQ2_20 0xE39
901#define ARIZONA_EQ2_21 0xE3A
902#define ARIZONA_EQ3_1 0xE3C
903#define ARIZONA_EQ3_2 0xE3D
904#define ARIZONA_EQ3_3 0xE3E
905#define ARIZONA_EQ3_4 0xE3F
906#define ARIZONA_EQ3_5 0xE40
907#define ARIZONA_EQ3_6 0xE41
908#define ARIZONA_EQ3_7 0xE42
909#define ARIZONA_EQ3_8 0xE43
910#define ARIZONA_EQ3_9 0xE44
911#define ARIZONA_EQ3_10 0xE45
912#define ARIZONA_EQ3_11 0xE46
913#define ARIZONA_EQ3_12 0xE47
914#define ARIZONA_EQ3_13 0xE48
915#define ARIZONA_EQ3_14 0xE49
916#define ARIZONA_EQ3_15 0xE4A
917#define ARIZONA_EQ3_16 0xE4B
918#define ARIZONA_EQ3_17 0xE4C
919#define ARIZONA_EQ3_18 0xE4D
920#define ARIZONA_EQ3_19 0xE4E
921#define ARIZONA_EQ3_20 0xE4F
922#define ARIZONA_EQ3_21 0xE50
923#define ARIZONA_EQ4_1 0xE52
924#define ARIZONA_EQ4_2 0xE53
925#define ARIZONA_EQ4_3 0xE54
926#define ARIZONA_EQ4_4 0xE55
927#define ARIZONA_EQ4_5 0xE56
928#define ARIZONA_EQ4_6 0xE57
929#define ARIZONA_EQ4_7 0xE58
930#define ARIZONA_EQ4_8 0xE59
931#define ARIZONA_EQ4_9 0xE5A
932#define ARIZONA_EQ4_10 0xE5B
933#define ARIZONA_EQ4_11 0xE5C
934#define ARIZONA_EQ4_12 0xE5D
935#define ARIZONA_EQ4_13 0xE5E
936#define ARIZONA_EQ4_14 0xE5F
937#define ARIZONA_EQ4_15 0xE60
938#define ARIZONA_EQ4_16 0xE61
939#define ARIZONA_EQ4_17 0xE62
940#define ARIZONA_EQ4_18 0xE63
941#define ARIZONA_EQ4_19 0xE64
942#define ARIZONA_EQ4_20 0xE65
943#define ARIZONA_EQ4_21 0xE66
944#define ARIZONA_DRC1_CTRL1 0xE80
945#define ARIZONA_DRC1_CTRL2 0xE81
946#define ARIZONA_DRC1_CTRL3 0xE82
947#define ARIZONA_DRC1_CTRL4 0xE83
948#define ARIZONA_DRC1_CTRL5 0xE84
949#define ARIZONA_DRC2_CTRL1 0xE89
950#define ARIZONA_DRC2_CTRL2 0xE8A
951#define ARIZONA_DRC2_CTRL3 0xE8B
952#define ARIZONA_DRC2_CTRL4 0xE8C
953#define ARIZONA_DRC2_CTRL5 0xE8D
954#define ARIZONA_HPLPF1_1 0xEC0
955#define ARIZONA_HPLPF1_2 0xEC1
956#define ARIZONA_HPLPF2_1 0xEC4
957#define ARIZONA_HPLPF2_2 0xEC5
958#define ARIZONA_HPLPF3_1 0xEC8
959#define ARIZONA_HPLPF3_2 0xEC9
960#define ARIZONA_HPLPF4_1 0xECC
961#define ARIZONA_HPLPF4_2 0xECD
962#define ARIZONA_ASRC_ENABLE 0xEE0
963#define ARIZONA_ASRC_STATUS 0xEE1
964#define ARIZONA_ASRC_RATE1 0xEE2
965#define ARIZONA_ASRC_RATE2 0xEE3
966#define ARIZONA_ISRC_1_CTRL_1 0xEF0
967#define ARIZONA_ISRC_1_CTRL_2 0xEF1
968#define ARIZONA_ISRC_1_CTRL_3 0xEF2
969#define ARIZONA_ISRC_2_CTRL_1 0xEF3
970#define ARIZONA_ISRC_2_CTRL_2 0xEF4
971#define ARIZONA_ISRC_2_CTRL_3 0xEF5
972#define ARIZONA_ISRC_3_CTRL_1 0xEF6
973#define ARIZONA_ISRC_3_CTRL_2 0xEF7
974#define ARIZONA_ISRC_3_CTRL_3 0xEF8
975#define ARIZONA_CLOCK_CONTROL 0xF00
976#define ARIZONA_ANC_SRC 0xF01
977#define ARIZONA_DSP_STATUS 0xF02
978#define ARIZONA_DSP1_CONTROL_1 0x1100
979#define ARIZONA_DSP1_CLOCKING_1 0x1101
980#define ARIZONA_DSP1_STATUS_1 0x1104
981#define ARIZONA_DSP1_STATUS_2 0x1105
982#define ARIZONA_DSP2_CONTROL_1 0x1200
983#define ARIZONA_DSP2_CLOCKING_1 0x1201
984#define ARIZONA_DSP2_STATUS_1 0x1204
985#define ARIZONA_DSP2_STATUS_2 0x1205
986#define ARIZONA_DSP3_CONTROL_1 0x1300
987#define ARIZONA_DSP3_CLOCKING_1 0x1301
988#define ARIZONA_DSP3_STATUS_1 0x1304
989#define ARIZONA_DSP3_STATUS_2 0x1305
990#define ARIZONA_DSP4_CONTROL_1 0x1400
991#define ARIZONA_DSP4_CLOCKING_1 0x1401
992#define ARIZONA_DSP4_STATUS_1 0x1404
993#define ARIZONA_DSP4_STATUS_2 0x1405
994
995/*
996 * Field Definitions.
997 */
998
999/*
1000 * R0 (0x00) - software reset
1001 */
1002#define ARIZONA_SW_RST_DEV_ID1_MASK 0xFFFF /* SW_RST_DEV_ID1 - [15:0] */
1003#define ARIZONA_SW_RST_DEV_ID1_SHIFT 0 /* SW_RST_DEV_ID1 - [15:0] */
1004#define ARIZONA_SW_RST_DEV_ID1_WIDTH 16 /* SW_RST_DEV_ID1 - [15:0] */
1005
1006/*
1007 * R1 (0x01) - Device Revision
1008 */
1009#define ARIZONA_DEVICE_REVISION_MASK 0x00FF /* DEVICE_REVISION - [7:0] */
1010#define ARIZONA_DEVICE_REVISION_SHIFT 0 /* DEVICE_REVISION - [7:0] */
1011#define ARIZONA_DEVICE_REVISION_WIDTH 8 /* DEVICE_REVISION - [7:0] */
1012
1013/*
1014 * R8 (0x08) - Ctrl IF SPI CFG 1
1015 */
1016#define ARIZONA_SPI_CFG 0x0010 /* SPI_CFG */
1017#define ARIZONA_SPI_CFG_MASK 0x0010 /* SPI_CFG */
1018#define ARIZONA_SPI_CFG_SHIFT 4 /* SPI_CFG */
1019#define ARIZONA_SPI_CFG_WIDTH 1 /* SPI_CFG */
1020#define ARIZONA_SPI_4WIRE 0x0008 /* SPI_4WIRE */
1021#define ARIZONA_SPI_4WIRE_MASK 0x0008 /* SPI_4WIRE */
1022#define ARIZONA_SPI_4WIRE_SHIFT 3 /* SPI_4WIRE */
1023#define ARIZONA_SPI_4WIRE_WIDTH 1 /* SPI_4WIRE */
1024#define ARIZONA_SPI_AUTO_INC_MASK 0x0003 /* SPI_AUTO_INC - [1:0] */
1025#define ARIZONA_SPI_AUTO_INC_SHIFT 0 /* SPI_AUTO_INC - [1:0] */
1026#define ARIZONA_SPI_AUTO_INC_WIDTH 2 /* SPI_AUTO_INC - [1:0] */
1027
1028/*
1029 * R9 (0x09) - Ctrl IF I2C1 CFG 1
1030 */
1031#define ARIZONA_I2C1_AUTO_INC_MASK 0x0003 /* I2C1_AUTO_INC - [1:0] */
1032#define ARIZONA_I2C1_AUTO_INC_SHIFT 0 /* I2C1_AUTO_INC - [1:0] */
1033#define ARIZONA_I2C1_AUTO_INC_WIDTH 2 /* I2C1_AUTO_INC - [1:0] */
1034
1035/*
1036 * R13 (0x0D) - Ctrl IF Status 1
1037 */
1038#define ARIZONA_I2C1_BUSY 0x0020 /* I2C1_BUSY */
1039#define ARIZONA_I2C1_BUSY_MASK 0x0020 /* I2C1_BUSY */
1040#define ARIZONA_I2C1_BUSY_SHIFT 5 /* I2C1_BUSY */
1041#define ARIZONA_I2C1_BUSY_WIDTH 1 /* I2C1_BUSY */
1042#define ARIZONA_SPI_BUSY 0x0010 /* SPI_BUSY */
1043#define ARIZONA_SPI_BUSY_MASK 0x0010 /* SPI_BUSY */
1044#define ARIZONA_SPI_BUSY_SHIFT 4 /* SPI_BUSY */
1045#define ARIZONA_SPI_BUSY_WIDTH 1 /* SPI_BUSY */
1046
1047/*
1048 * R22 (0x16) - Write Sequencer Ctrl 0
1049 */
1050#define ARIZONA_WSEQ_ABORT 0x0800 /* WSEQ_ABORT */
1051#define ARIZONA_WSEQ_ABORT_MASK 0x0800 /* WSEQ_ABORT */
1052#define ARIZONA_WSEQ_ABORT_SHIFT 11 /* WSEQ_ABORT */
1053#define ARIZONA_WSEQ_ABORT_WIDTH 1 /* WSEQ_ABORT */
1054#define ARIZONA_WSEQ_START 0x0400 /* WSEQ_START */
1055#define ARIZONA_WSEQ_START_MASK 0x0400 /* WSEQ_START */
1056#define ARIZONA_WSEQ_START_SHIFT 10 /* WSEQ_START */
1057#define ARIZONA_WSEQ_START_WIDTH 1 /* WSEQ_START */
1058#define ARIZONA_WSEQ_ENA 0x0200 /* WSEQ_ENA */
1059#define ARIZONA_WSEQ_ENA_MASK 0x0200 /* WSEQ_ENA */
1060#define ARIZONA_WSEQ_ENA_SHIFT 9 /* WSEQ_ENA */
1061#define ARIZONA_WSEQ_ENA_WIDTH 1 /* WSEQ_ENA */
1062#define ARIZONA_WSEQ_START_INDEX_MASK 0x01FF /* WSEQ_START_INDEX - [8:0] */
1063#define ARIZONA_WSEQ_START_INDEX_SHIFT 0 /* WSEQ_START_INDEX - [8:0] */
1064#define ARIZONA_WSEQ_START_INDEX_WIDTH 9 /* WSEQ_START_INDEX - [8:0] */
1065
1066/*
1067 * R23 (0x17) - Write Sequencer Ctrl 1
1068 */
1069#define ARIZONA_WSEQ_BUSY 0x0200 /* WSEQ_BUSY */
1070#define ARIZONA_WSEQ_BUSY_MASK 0x0200 /* WSEQ_BUSY */
1071#define ARIZONA_WSEQ_BUSY_SHIFT 9 /* WSEQ_BUSY */
1072#define ARIZONA_WSEQ_BUSY_WIDTH 1 /* WSEQ_BUSY */
1073#define ARIZONA_WSEQ_CURRENT_INDEX_MASK 0x01FF /* WSEQ_CURRENT_INDEX - [8:0] */
1074#define ARIZONA_WSEQ_CURRENT_INDEX_SHIFT 0 /* WSEQ_CURRENT_INDEX - [8:0] */
1075#define ARIZONA_WSEQ_CURRENT_INDEX_WIDTH 9 /* WSEQ_CURRENT_INDEX - [8:0] */
1076
1077/*
1078 * R24 (0x18) - Write Sequencer Ctrl 2
1079 */
1080#define ARIZONA_LOAD_DEFAULTS 0x0002 /* LOAD_DEFAULTS */
1081#define ARIZONA_LOAD_DEFAULTS_MASK 0x0002 /* LOAD_DEFAULTS */
1082#define ARIZONA_LOAD_DEFAULTS_SHIFT 1 /* LOAD_DEFAULTS */
1083#define ARIZONA_LOAD_DEFAULTS_WIDTH 1 /* LOAD_DEFAULTS */
1084#define ARIZONA_WSEQ_LOAD_MEM 0x0001 /* WSEQ_LOAD_MEM */
1085#define ARIZONA_WSEQ_LOAD_MEM_MASK 0x0001 /* WSEQ_LOAD_MEM */
1086#define ARIZONA_WSEQ_LOAD_MEM_SHIFT 0 /* WSEQ_LOAD_MEM */
1087#define ARIZONA_WSEQ_LOAD_MEM_WIDTH 1 /* WSEQ_LOAD_MEM */
1088
1089/*
1090 * R26 (0x1A) - Write Sequencer PROM
1091 */
1092#define ARIZONA_WSEQ_OTP_WRITE 0x0001 /* WSEQ_OTP_WRITE */
1093#define ARIZONA_WSEQ_OTP_WRITE_MASK 0x0001 /* WSEQ_OTP_WRITE */
1094#define ARIZONA_WSEQ_OTP_WRITE_SHIFT 0 /* WSEQ_OTP_WRITE */
1095#define ARIZONA_WSEQ_OTP_WRITE_WIDTH 1 /* WSEQ_OTP_WRITE */
1096
1097/*
1098 * R32 (0x20) - Tone Generator 1
1099 */
1100#define ARIZONA_TONE_RATE_MASK 0x7800 /* TONE_RATE - [14:11] */
1101#define ARIZONA_TONE_RATE_SHIFT 11 /* TONE_RATE - [14:11] */
1102#define ARIZONA_TONE_RATE_WIDTH 4 /* TONE_RATE - [14:11] */
1103#define ARIZONA_TONE_OFFSET_MASK 0x0300 /* TONE_OFFSET - [9:8] */
1104#define ARIZONA_TONE_OFFSET_SHIFT 8 /* TONE_OFFSET - [9:8] */
1105#define ARIZONA_TONE_OFFSET_WIDTH 2 /* TONE_OFFSET - [9:8] */
1106#define ARIZONA_TONE2_OVD 0x0020 /* TONE2_OVD */
1107#define ARIZONA_TONE2_OVD_MASK 0x0020 /* TONE2_OVD */
1108#define ARIZONA_TONE2_OVD_SHIFT 5 /* TONE2_OVD */
1109#define ARIZONA_TONE2_OVD_WIDTH 1 /* TONE2_OVD */
1110#define ARIZONA_TONE1_OVD 0x0010 /* TONE1_OVD */
1111#define ARIZONA_TONE1_OVD_MASK 0x0010 /* TONE1_OVD */
1112#define ARIZONA_TONE1_OVD_SHIFT 4 /* TONE1_OVD */
1113#define ARIZONA_TONE1_OVD_WIDTH 1 /* TONE1_OVD */
1114#define ARIZONA_TONE2_ENA 0x0002 /* TONE2_ENA */
1115#define ARIZONA_TONE2_ENA_MASK 0x0002 /* TONE2_ENA */
1116#define ARIZONA_TONE2_ENA_SHIFT 1 /* TONE2_ENA */
1117#define ARIZONA_TONE2_ENA_WIDTH 1 /* TONE2_ENA */
1118#define ARIZONA_TONE1_ENA 0x0001 /* TONE1_ENA */
1119#define ARIZONA_TONE1_ENA_MASK 0x0001 /* TONE1_ENA */
1120#define ARIZONA_TONE1_ENA_SHIFT 0 /* TONE1_ENA */
1121#define ARIZONA_TONE1_ENA_WIDTH 1 /* TONE1_ENA */
1122
1123/*
1124 * R33 (0x21) - Tone Generator 2
1125 */
1126#define ARIZONA_TONE1_LVL_0_MASK 0xFFFF /* TONE1_LVL - [15:0] */
1127#define ARIZONA_TONE1_LVL_0_SHIFT 0 /* TONE1_LVL - [15:0] */
1128#define ARIZONA_TONE1_LVL_0_WIDTH 16 /* TONE1_LVL - [15:0] */
1129
1130/*
1131 * R34 (0x22) - Tone Generator 3
1132 */
1133#define ARIZONA_TONE1_LVL_MASK 0x00FF /* TONE1_LVL - [7:0] */
1134#define ARIZONA_TONE1_LVL_SHIFT 0 /* TONE1_LVL - [7:0] */
1135#define ARIZONA_TONE1_LVL_WIDTH 8 /* TONE1_LVL - [7:0] */
1136
1137/*
1138 * R35 (0x23) - Tone Generator 4
1139 */
1140#define ARIZONA_TONE2_LVL_0_MASK 0xFFFF /* TONE2_LVL - [15:0] */
1141#define ARIZONA_TONE2_LVL_0_SHIFT 0 /* TONE2_LVL - [15:0] */
1142#define ARIZONA_TONE2_LVL_0_WIDTH 16 /* TONE2_LVL - [15:0] */
1143
1144/*
1145 * R36 (0x24) - Tone Generator 5
1146 */
1147#define ARIZONA_TONE2_LVL_MASK 0x00FF /* TONE2_LVL - [7:0] */
1148#define ARIZONA_TONE2_LVL_SHIFT 0 /* TONE2_LVL - [7:0] */
1149#define ARIZONA_TONE2_LVL_WIDTH 8 /* TONE2_LVL - [7:0] */
1150
1151/*
1152 * R48 (0x30) - PWM Drive 1
1153 */
1154#define ARIZONA_PWM_RATE_MASK 0x7800 /* PWM_RATE - [14:11] */
1155#define ARIZONA_PWM_RATE_SHIFT 11 /* PWM_RATE - [14:11] */
1156#define ARIZONA_PWM_RATE_WIDTH 4 /* PWM_RATE - [14:11] */
1157#define ARIZONA_PWM_CLK_SEL_MASK 0x0700 /* PWM_CLK_SEL - [10:8] */
1158#define ARIZONA_PWM_CLK_SEL_SHIFT 8 /* PWM_CLK_SEL - [10:8] */
1159#define ARIZONA_PWM_CLK_SEL_WIDTH 3 /* PWM_CLK_SEL - [10:8] */
1160#define ARIZONA_PWM2_OVD 0x0020 /* PWM2_OVD */
1161#define ARIZONA_PWM2_OVD_MASK 0x0020 /* PWM2_OVD */
1162#define ARIZONA_PWM2_OVD_SHIFT 5 /* PWM2_OVD */
1163#define ARIZONA_PWM2_OVD_WIDTH 1 /* PWM2_OVD */
1164#define ARIZONA_PWM1_OVD 0x0010 /* PWM1_OVD */
1165#define ARIZONA_PWM1_OVD_MASK 0x0010 /* PWM1_OVD */
1166#define ARIZONA_PWM1_OVD_SHIFT 4 /* PWM1_OVD */
1167#define ARIZONA_PWM1_OVD_WIDTH 1 /* PWM1_OVD */
1168#define ARIZONA_PWM2_ENA 0x0002 /* PWM2_ENA */
1169#define ARIZONA_PWM2_ENA_MASK 0x0002 /* PWM2_ENA */
1170#define ARIZONA_PWM2_ENA_SHIFT 1 /* PWM2_ENA */
1171#define ARIZONA_PWM2_ENA_WIDTH 1 /* PWM2_ENA */
1172#define ARIZONA_PWM1_ENA 0x0001 /* PWM1_ENA */
1173#define ARIZONA_PWM1_ENA_MASK 0x0001 /* PWM1_ENA */
1174#define ARIZONA_PWM1_ENA_SHIFT 0 /* PWM1_ENA */
1175#define ARIZONA_PWM1_ENA_WIDTH 1 /* PWM1_ENA */
1176
1177/*
1178 * R49 (0x31) - PWM Drive 2
1179 */
1180#define ARIZONA_PWM1_LVL_MASK 0x03FF /* PWM1_LVL - [9:0] */
1181#define ARIZONA_PWM1_LVL_SHIFT 0 /* PWM1_LVL - [9:0] */
1182#define ARIZONA_PWM1_LVL_WIDTH 10 /* PWM1_LVL - [9:0] */
1183
1184/*
1185 * R50 (0x32) - PWM Drive 3
1186 */
1187#define ARIZONA_PWM2_LVL_MASK 0x03FF /* PWM2_LVL - [9:0] */
1188#define ARIZONA_PWM2_LVL_SHIFT 0 /* PWM2_LVL - [9:0] */
1189#define ARIZONA_PWM2_LVL_WIDTH 10 /* PWM2_LVL - [9:0] */
1190
1191/*
1192 * R64 (0x40) - Wake control
1193 */
1194#define ARIZONA_WKUP_GP5_FALL 0x0020 /* WKUP_GP5_FALL */
1195#define ARIZONA_WKUP_GP5_FALL_MASK 0x0020 /* WKUP_GP5_FALL */
1196#define ARIZONA_WKUP_GP5_FALL_SHIFT 5 /* WKUP_GP5_FALL */
1197#define ARIZONA_WKUP_GP5_FALL_WIDTH 1 /* WKUP_GP5_FALL */
1198#define ARIZONA_WKUP_GP5_RISE 0x0010 /* WKUP_GP5_RISE */
1199#define ARIZONA_WKUP_GP5_RISE_MASK 0x0010 /* WKUP_GP5_RISE */
1200#define ARIZONA_WKUP_GP5_RISE_SHIFT 4 /* WKUP_GP5_RISE */
1201#define ARIZONA_WKUP_GP5_RISE_WIDTH 1 /* WKUP_GP5_RISE */
1202#define ARIZONA_WKUP_JD1_FALL 0x0008 /* WKUP_JD1_FALL */
1203#define ARIZONA_WKUP_JD1_FALL_MASK 0x0008 /* WKUP_JD1_FALL */
1204#define ARIZONA_WKUP_JD1_FALL_SHIFT 3 /* WKUP_JD1_FALL */
1205#define ARIZONA_WKUP_JD1_FALL_WIDTH 1 /* WKUP_JD1_FALL */
1206#define ARIZONA_WKUP_JD1_RISE 0x0004 /* WKUP_JD1_RISE */
1207#define ARIZONA_WKUP_JD1_RISE_MASK 0x0004 /* WKUP_JD1_RISE */
1208#define ARIZONA_WKUP_JD1_RISE_SHIFT 2 /* WKUP_JD1_RISE */
1209#define ARIZONA_WKUP_JD1_RISE_WIDTH 1 /* WKUP_JD1_RISE */
1210#define ARIZONA_WKUP_JD2_FALL 0x0002 /* WKUP_JD2_FALL */
1211#define ARIZONA_WKUP_JD2_FALL_MASK 0x0002 /* WKUP_JD2_FALL */
1212#define ARIZONA_WKUP_JD2_FALL_SHIFT 1 /* WKUP_JD2_FALL */
1213#define ARIZONA_WKUP_JD2_FALL_WIDTH 1 /* WKUP_JD2_FALL */
1214#define ARIZONA_WKUP_JD2_RISE 0x0001 /* WKUP_JD2_RISE */
1215#define ARIZONA_WKUP_JD2_RISE_MASK 0x0001 /* WKUP_JD2_RISE */
1216#define ARIZONA_WKUP_JD2_RISE_SHIFT 0 /* WKUP_JD2_RISE */
1217#define ARIZONA_WKUP_JD2_RISE_WIDTH 1 /* WKUP_JD2_RISE */
1218
1219/*
1220 * R65 (0x41) - Sequence control
1221 */
1222#define ARIZONA_WSEQ_ENA_GP5_FALL 0x0020 /* WSEQ_ENA_GP5_FALL */
1223#define ARIZONA_WSEQ_ENA_GP5_FALL_MASK 0x0020 /* WSEQ_ENA_GP5_FALL */
1224#define ARIZONA_WSEQ_ENA_GP5_FALL_SHIFT 5 /* WSEQ_ENA_GP5_FALL */
1225#define ARIZONA_WSEQ_ENA_GP5_FALL_WIDTH 1 /* WSEQ_ENA_GP5_FALL */
1226#define ARIZONA_WSEQ_ENA_GP5_RISE 0x0010 /* WSEQ_ENA_GP5_RISE */
1227#define ARIZONA_WSEQ_ENA_GP5_RISE_MASK 0x0010 /* WSEQ_ENA_GP5_RISE */
1228#define ARIZONA_WSEQ_ENA_GP5_RISE_SHIFT 4 /* WSEQ_ENA_GP5_RISE */
1229#define ARIZONA_WSEQ_ENA_GP5_RISE_WIDTH 1 /* WSEQ_ENA_GP5_RISE */
1230#define ARIZONA_WSEQ_ENA_JD1_FALL 0x0008 /* WSEQ_ENA_JD1_FALL */
1231#define ARIZONA_WSEQ_ENA_JD1_FALL_MASK 0x0008 /* WSEQ_ENA_JD1_FALL */
1232#define ARIZONA_WSEQ_ENA_JD1_FALL_SHIFT 3 /* WSEQ_ENA_JD1_FALL */
1233#define ARIZONA_WSEQ_ENA_JD1_FALL_WIDTH 1 /* WSEQ_ENA_JD1_FALL */
1234#define ARIZONA_WSEQ_ENA_JD1_RISE 0x0004 /* WSEQ_ENA_JD1_RISE */
1235#define ARIZONA_WSEQ_ENA_JD1_RISE_MASK 0x0004 /* WSEQ_ENA_JD1_RISE */
1236#define ARIZONA_WSEQ_ENA_JD1_RISE_SHIFT 2 /* WSEQ_ENA_JD1_RISE */
1237#define ARIZONA_WSEQ_ENA_JD1_RISE_WIDTH 1 /* WSEQ_ENA_JD1_RISE */
1238#define ARIZONA_WSEQ_ENA_JD2_FALL 0x0002 /* WSEQ_ENA_JD2_FALL */
1239#define ARIZONA_WSEQ_ENA_JD2_FALL_MASK 0x0002 /* WSEQ_ENA_JD2_FALL */
1240#define ARIZONA_WSEQ_ENA_JD2_FALL_SHIFT 1 /* WSEQ_ENA_JD2_FALL */
1241#define ARIZONA_WSEQ_ENA_JD2_FALL_WIDTH 1 /* WSEQ_ENA_JD2_FALL */
1242#define ARIZONA_WSEQ_ENA_JD2_RISE 0x0001 /* WSEQ_ENA_JD2_RISE */
1243#define ARIZONA_WSEQ_ENA_JD2_RISE_MASK 0x0001 /* WSEQ_ENA_JD2_RISE */
1244#define ARIZONA_WSEQ_ENA_JD2_RISE_SHIFT 0 /* WSEQ_ENA_JD2_RISE */
1245#define ARIZONA_WSEQ_ENA_JD2_RISE_WIDTH 1 /* WSEQ_ENA_JD2_RISE */
1246
1247/*
1248 * R97 (0x61) - Sample Rate Sequence Select 1
1249 */
1250#define ARIZONA_WSEQ_SAMPLE_RATE_DETECT_A_SEQ_ADDR_MASK 0x01FF /* WSEQ_SAMPLE_RATE_DETECT_A_SEQ_ADDR - [8:0] */
1251#define ARIZONA_WSEQ_SAMPLE_RATE_DETECT_A_SEQ_ADDR_SHIFT 0 /* WSEQ_SAMPLE_RATE_DETECT_A_SEQ_ADDR - [8:0] */
1252#define ARIZONA_WSEQ_SAMPLE_RATE_DETECT_A_SEQ_ADDR_WIDTH 9 /* WSEQ_SAMPLE_RATE_DETECT_A_SEQ_ADDR - [8:0] */
1253
1254/*
1255 * R98 (0x62) - Sample Rate Sequence Select 2
1256 */
1257#define ARIZONA_WSEQ_SAMPLE_RATE_DETECT_B_SEQ_ADDR_MASK 0x01FF /* WSEQ_SAMPLE_RATE_DETECT_B_SEQ_ADDR - [8:0] */
1258#define ARIZONA_WSEQ_SAMPLE_RATE_DETECT_B_SEQ_ADDR_SHIFT 0 /* WSEQ_SAMPLE_RATE_DETECT_B_SEQ_ADDR - [8:0] */
1259#define ARIZONA_WSEQ_SAMPLE_RATE_DETECT_B_SEQ_ADDR_WIDTH 9 /* WSEQ_SAMPLE_RATE_DETECT_B_SEQ_ADDR - [8:0] */
1260
1261/*
1262 * R99 (0x63) - Sample Rate Sequence Select 3
1263 */
1264#define ARIZONA_WSEQ_SAMPLE_RATE_DETECT_C_SEQ_ADDR_MASK 0x01FF /* WSEQ_SAMPLE_RATE_DETECT_C_SEQ_ADDR - [8:0] */
1265#define ARIZONA_WSEQ_SAMPLE_RATE_DETECT_C_SEQ_ADDR_SHIFT 0 /* WSEQ_SAMPLE_RATE_DETECT_C_SEQ_ADDR - [8:0] */
1266#define ARIZONA_WSEQ_SAMPLE_RATE_DETECT_C_SEQ_ADDR_WIDTH 9 /* WSEQ_SAMPLE_RATE_DETECT_C_SEQ_ADDR - [8:0] */
1267
1268/*
1269 * R100 (0x64) - Sample Rate Sequence Select 4
1270 */
1271#define ARIZONA_WSEQ_SAMPLE_RATE_DETECT_D_SEQ_ADDR_MASK 0x01FF /* WSEQ_SAMPLE_RATE_DETECT_D_SEQ_ADDR - [8:0] */
1272#define ARIZONA_WSEQ_SAMPLE_RATE_DETECT_D_SEQ_ADDR_SHIFT 0 /* WSEQ_SAMPLE_RATE_DETECT_D_SEQ_ADDR - [8:0] */
1273#define ARIZONA_WSEQ_SAMPLE_RATE_DETECT_D_SEQ_ADDR_WIDTH 9 /* WSEQ_SAMPLE_RATE_DETECT_D_SEQ_ADDR - [8:0] */
1274
1275/*
1276 * R104 (0x68) - Always On Triggers Sequence Select 1
1277 */
1278#define ARIZONA_WSEQ_GP5_RISE_SEQ_ADDR_MASK 0x01FF /* WSEQ_GP5_RISE_SEQ_ADDR - [8:0] */
1279#define ARIZONA_WSEQ_GP5_RISE_SEQ_ADDR_SHIFT 0 /* WSEQ_GP5_RISE_SEQ_ADDR - [8:0] */
1280#define ARIZONA_WSEQ_GP5_RISE_SEQ_ADDR_WIDTH 9 /* WSEQ_GP5_RISE_SEQ_ADDR - [8:0] */
1281
1282/*
1283 * R105 (0x69) - Always On Triggers Sequence Select 2
1284 */
1285#define ARIZONA_WSEQ_GP5_FALL_SEQ_ADDR_MASK 0x01FF /* WSEQ_GP5_FALL_SEQ_ADDR - [8:0] */
1286#define ARIZONA_WSEQ_GP5_FALL_SEQ_ADDR_SHIFT 0 /* WSEQ_GP5_FALL_SEQ_ADDR - [8:0] */
1287#define ARIZONA_WSEQ_GP5_FALL_SEQ_ADDR_WIDTH 9 /* WSEQ_GP5_FALL_SEQ_ADDR - [8:0] */
1288
1289/*
1290 * R106 (0x6A) - Always On Triggers Sequence Select 3
1291 */
1292#define ARIZONA_WSEQ_JD1_RISE_SEQ_ADDR_MASK 0x01FF /* WSEQ_JD1_RISE_SEQ_ADDR - [8:0] */
1293#define ARIZONA_WSEQ_JD1_RISE_SEQ_ADDR_SHIFT 0 /* WSEQ_JD1_RISE_SEQ_ADDR - [8:0] */
1294#define ARIZONA_WSEQ_JD1_RISE_SEQ_ADDR_WIDTH 9 /* WSEQ_JD1_RISE_SEQ_ADDR - [8:0] */
1295
1296/*
1297 * R107 (0x6B) - Always On Triggers Sequence Select 4
1298 */
1299#define ARIZONA_WSEQ_JD1_FALL_SEQ_ADDR_MASK 0x01FF /* WSEQ_JD1_FALL_SEQ_ADDR - [8:0] */
1300#define ARIZONA_WSEQ_JD1_FALL_SEQ_ADDR_SHIFT 0 /* WSEQ_JD1_FALL_SEQ_ADDR - [8:0] */
1301#define ARIZONA_WSEQ_JD1_FALL_SEQ_ADDR_WIDTH 9 /* WSEQ_JD1_FALL_SEQ_ADDR - [8:0] */
1302
1303/*
1304 * R108 (0x6C) - Always On Triggers Sequence Select 5
1305 */
1306#define ARIZONA_WSEQ_JD2_RISE_SEQ_ADDR_MASK 0x01FF /* WSEQ_JD2_RISE_SEQ_ADDR - [8:0] */
1307#define ARIZONA_WSEQ_JD2_RISE_SEQ_ADDR_SHIFT 0 /* WSEQ_JD2_RISE_SEQ_ADDR - [8:0] */
1308#define ARIZONA_WSEQ_JD2_RISE_SEQ_ADDR_WIDTH 9 /* WSEQ_JD2_RISE_SEQ_ADDR - [8:0] */
1309
1310/*
1311 * R109 (0x6D) - Always On Triggers Sequence Select 6
1312 */
1313#define ARIZONA_WSEQ_JD2_FALL_SEQ_ADDR_MASK 0x01FF /* WSEQ_JD2_FALL_SEQ_ADDR - [8:0] */
1314#define ARIZONA_WSEQ_JD2_FALL_SEQ_ADDR_SHIFT 0 /* WSEQ_JD2_FALL_SEQ_ADDR - [8:0] */
1315#define ARIZONA_WSEQ_JD2_FALL_SEQ_ADDR_WIDTH 9 /* WSEQ_JD2_FALL_SEQ_ADDR - [8:0] */
1316
1317/*
1318 * R112 (0x70) - Comfort Noise Generator
1319 */
1320#define ARIZONA_NOISE_GEN_RATE_MASK 0x7800 /* NOISE_GEN_RATE - [14:11] */
1321#define ARIZONA_NOISE_GEN_RATE_SHIFT 11 /* NOISE_GEN_RATE - [14:11] */
1322#define ARIZONA_NOISE_GEN_RATE_WIDTH 4 /* NOISE_GEN_RATE - [14:11] */
1323#define ARIZONA_NOISE_GEN_ENA 0x0020 /* NOISE_GEN_ENA */
1324#define ARIZONA_NOISE_GEN_ENA_MASK 0x0020 /* NOISE_GEN_ENA */
1325#define ARIZONA_NOISE_GEN_ENA_SHIFT 5 /* NOISE_GEN_ENA */
1326#define ARIZONA_NOISE_GEN_ENA_WIDTH 1 /* NOISE_GEN_ENA */
1327#define ARIZONA_NOISE_GEN_GAIN_MASK 0x001F /* NOISE_GEN_GAIN - [4:0] */
1328#define ARIZONA_NOISE_GEN_GAIN_SHIFT 0 /* NOISE_GEN_GAIN - [4:0] */
1329#define ARIZONA_NOISE_GEN_GAIN_WIDTH 5 /* NOISE_GEN_GAIN - [4:0] */
1330
1331/*
1332 * R144 (0x90) - Haptics Control 1
1333 */
1334#define ARIZONA_HAP_RATE_MASK 0x7800 /* HAP_RATE - [14:11] */
1335#define ARIZONA_HAP_RATE_SHIFT 11 /* HAP_RATE - [14:11] */
1336#define ARIZONA_HAP_RATE_WIDTH 4 /* HAP_RATE - [14:11] */
1337#define ARIZONA_ONESHOT_TRIG 0x0010 /* ONESHOT_TRIG */
1338#define ARIZONA_ONESHOT_TRIG_MASK 0x0010 /* ONESHOT_TRIG */
1339#define ARIZONA_ONESHOT_TRIG_SHIFT 4 /* ONESHOT_TRIG */
1340#define ARIZONA_ONESHOT_TRIG_WIDTH 1 /* ONESHOT_TRIG */
1341#define ARIZONA_HAP_CTRL_MASK 0x000C /* HAP_CTRL - [3:2] */
1342#define ARIZONA_HAP_CTRL_SHIFT 2 /* HAP_CTRL - [3:2] */
1343#define ARIZONA_HAP_CTRL_WIDTH 2 /* HAP_CTRL - [3:2] */
1344#define ARIZONA_HAP_ACT 0x0002 /* HAP_ACT */
1345#define ARIZONA_HAP_ACT_MASK 0x0002 /* HAP_ACT */
1346#define ARIZONA_HAP_ACT_SHIFT 1 /* HAP_ACT */
1347#define ARIZONA_HAP_ACT_WIDTH 1 /* HAP_ACT */
1348
1349/*
1350 * R145 (0x91) - Haptics Control 2
1351 */
1352#define ARIZONA_LRA_FREQ_MASK 0x7FFF /* LRA_FREQ - [14:0] */
1353#define ARIZONA_LRA_FREQ_SHIFT 0 /* LRA_FREQ - [14:0] */
1354#define ARIZONA_LRA_FREQ_WIDTH 15 /* LRA_FREQ - [14:0] */
1355
1356/*
1357 * R146 (0x92) - Haptics phase 1 intensity
1358 */
1359#define ARIZONA_PHASE1_INTENSITY_MASK 0x00FF /* PHASE1_INTENSITY - [7:0] */
1360#define ARIZONA_PHASE1_INTENSITY_SHIFT 0 /* PHASE1_INTENSITY - [7:0] */
1361#define ARIZONA_PHASE1_INTENSITY_WIDTH 8 /* PHASE1_INTENSITY - [7:0] */
1362
1363/*
1364 * R147 (0x93) - Haptics phase 1 duration
1365 */
1366#define ARIZONA_PHASE1_DURATION_MASK 0x01FF /* PHASE1_DURATION - [8:0] */
1367#define ARIZONA_PHASE1_DURATION_SHIFT 0 /* PHASE1_DURATION - [8:0] */
1368#define ARIZONA_PHASE1_DURATION_WIDTH 9 /* PHASE1_DURATION - [8:0] */
1369
1370/*
1371 * R148 (0x94) - Haptics phase 2 intensity
1372 */
1373#define ARIZONA_PHASE2_INTENSITY_MASK 0x00FF /* PHASE2_INTENSITY - [7:0] */
1374#define ARIZONA_PHASE2_INTENSITY_SHIFT 0 /* PHASE2_INTENSITY - [7:0] */
1375#define ARIZONA_PHASE2_INTENSITY_WIDTH 8 /* PHASE2_INTENSITY - [7:0] */
1376
1377/*
1378 * R149 (0x95) - Haptics phase 2 duration
1379 */
1380#define ARIZONA_PHASE2_DURATION_MASK 0x07FF /* PHASE2_DURATION - [10:0] */
1381#define ARIZONA_PHASE2_DURATION_SHIFT 0 /* PHASE2_DURATION - [10:0] */
1382#define ARIZONA_PHASE2_DURATION_WIDTH 11 /* PHASE2_DURATION - [10:0] */
1383
1384/*
1385 * R150 (0x96) - Haptics phase 3 intensity
1386 */
1387#define ARIZONA_PHASE3_INTENSITY_MASK 0x00FF /* PHASE3_INTENSITY - [7:0] */
1388#define ARIZONA_PHASE3_INTENSITY_SHIFT 0 /* PHASE3_INTENSITY - [7:0] */
1389#define ARIZONA_PHASE3_INTENSITY_WIDTH 8 /* PHASE3_INTENSITY - [7:0] */
1390
1391/*
1392 * R151 (0x97) - Haptics phase 3 duration
1393 */
1394#define ARIZONA_PHASE3_DURATION_MASK 0x01FF /* PHASE3_DURATION - [8:0] */
1395#define ARIZONA_PHASE3_DURATION_SHIFT 0 /* PHASE3_DURATION - [8:0] */
1396#define ARIZONA_PHASE3_DURATION_WIDTH 9 /* PHASE3_DURATION - [8:0] */
1397
1398/*
1399 * R152 (0x98) - Haptics Status
1400 */
1401#define ARIZONA_ONESHOT_STS 0x0001 /* ONESHOT_STS */
1402#define ARIZONA_ONESHOT_STS_MASK 0x0001 /* ONESHOT_STS */
1403#define ARIZONA_ONESHOT_STS_SHIFT 0 /* ONESHOT_STS */
1404#define ARIZONA_ONESHOT_STS_WIDTH 1 /* ONESHOT_STS */
1405
1406/*
1407 * R256 (0x100) - Clock 32k 1
1408 */
1409#define ARIZONA_CLK_32K_ENA 0x0040 /* CLK_32K_ENA */
1410#define ARIZONA_CLK_32K_ENA_MASK 0x0040 /* CLK_32K_ENA */
1411#define ARIZONA_CLK_32K_ENA_SHIFT 6 /* CLK_32K_ENA */
1412#define ARIZONA_CLK_32K_ENA_WIDTH 1 /* CLK_32K_ENA */
1413#define ARIZONA_CLK_32K_SRC_MASK 0x0003 /* CLK_32K_SRC - [1:0] */
1414#define ARIZONA_CLK_32K_SRC_SHIFT 0 /* CLK_32K_SRC - [1:0] */
1415#define ARIZONA_CLK_32K_SRC_WIDTH 2 /* CLK_32K_SRC - [1:0] */
1416
1417/*
1418 * R257 (0x101) - System Clock 1
1419 */
1420#define ARIZONA_SYSCLK_FRAC 0x8000 /* SYSCLK_FRAC */
1421#define ARIZONA_SYSCLK_FRAC_MASK 0x8000 /* SYSCLK_FRAC */
1422#define ARIZONA_SYSCLK_FRAC_SHIFT 15 /* SYSCLK_FRAC */
1423#define ARIZONA_SYSCLK_FRAC_WIDTH 1 /* SYSCLK_FRAC */
1424#define ARIZONA_SYSCLK_FREQ_MASK 0x0700 /* SYSCLK_FREQ - [10:8] */
1425#define ARIZONA_SYSCLK_FREQ_SHIFT 8 /* SYSCLK_FREQ - [10:8] */
1426#define ARIZONA_SYSCLK_FREQ_WIDTH 3 /* SYSCLK_FREQ - [10:8] */
1427#define ARIZONA_SYSCLK_ENA 0x0040 /* SYSCLK_ENA */
1428#define ARIZONA_SYSCLK_ENA_MASK 0x0040 /* SYSCLK_ENA */
1429#define ARIZONA_SYSCLK_ENA_SHIFT 6 /* SYSCLK_ENA */
1430#define ARIZONA_SYSCLK_ENA_WIDTH 1 /* SYSCLK_ENA */
1431#define ARIZONA_SYSCLK_SRC_MASK 0x000F /* SYSCLK_SRC - [3:0] */
1432#define ARIZONA_SYSCLK_SRC_SHIFT 0 /* SYSCLK_SRC - [3:0] */
1433#define ARIZONA_SYSCLK_SRC_WIDTH 4 /* SYSCLK_SRC - [3:0] */
1434
1435/*
1436 * R258 (0x102) - Sample rate 1
1437 */
1438#define ARIZONA_SAMPLE_RATE_1_MASK 0x001F /* SAMPLE_RATE_1 - [4:0] */
1439#define ARIZONA_SAMPLE_RATE_1_SHIFT 0 /* SAMPLE_RATE_1 - [4:0] */
1440#define ARIZONA_SAMPLE_RATE_1_WIDTH 5 /* SAMPLE_RATE_1 - [4:0] */
1441
1442/*
1443 * R259 (0x103) - Sample rate 2
1444 */
1445#define ARIZONA_SAMPLE_RATE_2_MASK 0x001F /* SAMPLE_RATE_2 - [4:0] */
1446#define ARIZONA_SAMPLE_RATE_2_SHIFT 0 /* SAMPLE_RATE_2 - [4:0] */
1447#define ARIZONA_SAMPLE_RATE_2_WIDTH 5 /* SAMPLE_RATE_2 - [4:0] */
1448
1449/*
1450 * R260 (0x104) - Sample rate 3
1451 */
1452#define ARIZONA_SAMPLE_RATE_3_MASK 0x001F /* SAMPLE_RATE_3 - [4:0] */
1453#define ARIZONA_SAMPLE_RATE_3_SHIFT 0 /* SAMPLE_RATE_3 - [4:0] */
1454#define ARIZONA_SAMPLE_RATE_3_WIDTH 5 /* SAMPLE_RATE_3 - [4:0] */
1455
1456/*
1457 * R266 (0x10A) - Sample rate 1 status
1458 */
1459#define ARIZONA_SAMPLE_RATE_1_STS_MASK 0x001F /* SAMPLE_RATE_1_STS - [4:0] */
1460#define ARIZONA_SAMPLE_RATE_1_STS_SHIFT 0 /* SAMPLE_RATE_1_STS - [4:0] */
1461#define ARIZONA_SAMPLE_RATE_1_STS_WIDTH 5 /* SAMPLE_RATE_1_STS - [4:0] */
1462
1463/*
1464 * R267 (0x10B) - Sample rate 2 status
1465 */
1466#define ARIZONA_SAMPLE_RATE_2_STS_MASK 0x001F /* SAMPLE_RATE_2_STS - [4:0] */
1467#define ARIZONA_SAMPLE_RATE_2_STS_SHIFT 0 /* SAMPLE_RATE_2_STS - [4:0] */
1468#define ARIZONA_SAMPLE_RATE_2_STS_WIDTH 5 /* SAMPLE_RATE_2_STS - [4:0] */
1469
1470/*
1471 * R268 (0x10C) - Sample rate 3 status
1472 */
1473#define ARIZONA_SAMPLE_RATE_3_STS_MASK 0x001F /* SAMPLE_RATE_3_STS - [4:0] */
1474#define ARIZONA_SAMPLE_RATE_3_STS_SHIFT 0 /* SAMPLE_RATE_3_STS - [4:0] */
1475#define ARIZONA_SAMPLE_RATE_3_STS_WIDTH 5 /* SAMPLE_RATE_3_STS - [4:0] */
1476
1477/*
1478 * R274 (0x112) - Async clock 1
1479 */
1480#define ARIZONA_ASYNC_CLK_FREQ_MASK 0x0700 /* ASYNC_CLK_FREQ - [10:8] */
1481#define ARIZONA_ASYNC_CLK_FREQ_SHIFT 8 /* ASYNC_CLK_FREQ - [10:8] */
1482#define ARIZONA_ASYNC_CLK_FREQ_WIDTH 3 /* ASYNC_CLK_FREQ - [10:8] */
1483#define ARIZONA_ASYNC_CLK_ENA 0x0040 /* ASYNC_CLK_ENA */
1484#define ARIZONA_ASYNC_CLK_ENA_MASK 0x0040 /* ASYNC_CLK_ENA */
1485#define ARIZONA_ASYNC_CLK_ENA_SHIFT 6 /* ASYNC_CLK_ENA */
1486#define ARIZONA_ASYNC_CLK_ENA_WIDTH 1 /* ASYNC_CLK_ENA */
1487#define ARIZONA_ASYNC_CLK_SRC_MASK 0x000F /* ASYNC_CLK_SRC - [3:0] */
1488#define ARIZONA_ASYNC_CLK_SRC_SHIFT 0 /* ASYNC_CLK_SRC - [3:0] */
1489#define ARIZONA_ASYNC_CLK_SRC_WIDTH 4 /* ASYNC_CLK_SRC - [3:0] */
1490
1491/*
1492 * R275 (0x113) - Async sample rate 1
1493 */
1494#define ARIZONA_ASYNC_SAMPLE_RATE_MASK 0x001F /* ASYNC_SAMPLE_RATE - [4:0] */
1495#define ARIZONA_ASYNC_SAMPLE_RATE_SHIFT 0 /* ASYNC_SAMPLE_RATE - [4:0] */
1496#define ARIZONA_ASYNC_SAMPLE_RATE_WIDTH 5 /* ASYNC_SAMPLE_RATE - [4:0] */
1497
1498/*
1499 * R283 (0x11B) - Async sample rate 1 status
1500 */
1501#define ARIZONA_ASYNC_SAMPLE_RATE_STS_MASK 0x001F /* ASYNC_SAMPLE_RATE_STS - [4:0] */
1502#define ARIZONA_ASYNC_SAMPLE_RATE_STS_SHIFT 0 /* ASYNC_SAMPLE_RATE_STS - [4:0] */
1503#define ARIZONA_ASYNC_SAMPLE_RATE_STS_WIDTH 5 /* ASYNC_SAMPLE_RATE_STS - [4:0] */
1504
1505/*
1506 * R329 (0x149) - Output system clock
1507 */
1508#define ARIZONA_OPCLK_ENA 0x8000 /* OPCLK_ENA */
1509#define ARIZONA_OPCLK_ENA_MASK 0x8000 /* OPCLK_ENA */
1510#define ARIZONA_OPCLK_ENA_SHIFT 15 /* OPCLK_ENA */
1511#define ARIZONA_OPCLK_ENA_WIDTH 1 /* OPCLK_ENA */
1512#define ARIZONA_OPCLK_DIV_MASK 0x00F8 /* OPCLK_DIV - [7:3] */
1513#define ARIZONA_OPCLK_DIV_SHIFT 3 /* OPCLK_DIV - [7:3] */
1514#define ARIZONA_OPCLK_DIV_WIDTH 5 /* OPCLK_DIV - [7:3] */
1515#define ARIZONA_OPCLK_SEL_MASK 0x0007 /* OPCLK_SEL - [2:0] */
1516#define ARIZONA_OPCLK_SEL_SHIFT 0 /* OPCLK_SEL - [2:0] */
1517#define ARIZONA_OPCLK_SEL_WIDTH 3 /* OPCLK_SEL - [2:0] */
1518
1519/*
1520 * R330 (0x14A) - Output async clock
1521 */
1522#define ARIZONA_OPCLK_ASYNC_ENA 0x8000 /* OPCLK_ASYNC_ENA */
1523#define ARIZONA_OPCLK_ASYNC_ENA_MASK 0x8000 /* OPCLK_ASYNC_ENA */
1524#define ARIZONA_OPCLK_ASYNC_ENA_SHIFT 15 /* OPCLK_ASYNC_ENA */
1525#define ARIZONA_OPCLK_ASYNC_ENA_WIDTH 1 /* OPCLK_ASYNC_ENA */
1526#define ARIZONA_OPCLK_ASYNC_DIV_MASK 0x00F8 /* OPCLK_ASYNC_DIV - [7:3] */
1527#define ARIZONA_OPCLK_ASYNC_DIV_SHIFT 3 /* OPCLK_ASYNC_DIV - [7:3] */
1528#define ARIZONA_OPCLK_ASYNC_DIV_WIDTH 5 /* OPCLK_ASYNC_DIV - [7:3] */
1529#define ARIZONA_OPCLK_ASYNC_SEL_MASK 0x0007 /* OPCLK_ASYNC_SEL - [2:0] */
1530#define ARIZONA_OPCLK_ASYNC_SEL_SHIFT 0 /* OPCLK_ASYNC_SEL - [2:0] */
1531#define ARIZONA_OPCLK_ASYNC_SEL_WIDTH 3 /* OPCLK_ASYNC_SEL - [2:0] */
1532
1533/*
1534 * R338 (0x152) - Rate Estimator 1
1535 */
1536#define ARIZONA_TRIG_ON_STARTUP 0x0010 /* TRIG_ON_STARTUP */
1537#define ARIZONA_TRIG_ON_STARTUP_MASK 0x0010 /* TRIG_ON_STARTUP */
1538#define ARIZONA_TRIG_ON_STARTUP_SHIFT 4 /* TRIG_ON_STARTUP */
1539#define ARIZONA_TRIG_ON_STARTUP_WIDTH 1 /* TRIG_ON_STARTUP */
1540#define ARIZONA_LRCLK_SRC_MASK 0x000E /* LRCLK_SRC - [3:1] */
1541#define ARIZONA_LRCLK_SRC_SHIFT 1 /* LRCLK_SRC - [3:1] */
1542#define ARIZONA_LRCLK_SRC_WIDTH 3 /* LRCLK_SRC - [3:1] */
1543#define ARIZONA_RATE_EST_ENA 0x0001 /* RATE_EST_ENA */
1544#define ARIZONA_RATE_EST_ENA_MASK 0x0001 /* RATE_EST_ENA */
1545#define ARIZONA_RATE_EST_ENA_SHIFT 0 /* RATE_EST_ENA */
1546#define ARIZONA_RATE_EST_ENA_WIDTH 1 /* RATE_EST_ENA */
1547
1548/*
1549 * R339 (0x153) - Rate Estimator 2
1550 */
1551#define ARIZONA_SAMPLE_RATE_DETECT_A_MASK 0x001F /* SAMPLE_RATE_DETECT_A - [4:0] */
1552#define ARIZONA_SAMPLE_RATE_DETECT_A_SHIFT 0 /* SAMPLE_RATE_DETECT_A - [4:0] */
1553#define ARIZONA_SAMPLE_RATE_DETECT_A_WIDTH 5 /* SAMPLE_RATE_DETECT_A - [4:0] */
1554
1555/*
1556 * R340 (0x154) - Rate Estimator 3
1557 */
1558#define ARIZONA_SAMPLE_RATE_DETECT_B_MASK 0x001F /* SAMPLE_RATE_DETECT_B - [4:0] */
1559#define ARIZONA_SAMPLE_RATE_DETECT_B_SHIFT 0 /* SAMPLE_RATE_DETECT_B - [4:0] */
1560#define ARIZONA_SAMPLE_RATE_DETECT_B_WIDTH 5 /* SAMPLE_RATE_DETECT_B - [4:0] */
1561
1562/*
1563 * R341 (0x155) - Rate Estimator 4
1564 */
1565#define ARIZONA_SAMPLE_RATE_DETECT_C_MASK 0x001F /* SAMPLE_RATE_DETECT_C - [4:0] */
1566#define ARIZONA_SAMPLE_RATE_DETECT_C_SHIFT 0 /* SAMPLE_RATE_DETECT_C - [4:0] */
1567#define ARIZONA_SAMPLE_RATE_DETECT_C_WIDTH 5 /* SAMPLE_RATE_DETECT_C - [4:0] */
1568
1569/*
1570 * R342 (0x156) - Rate Estimator 5
1571 */
1572#define ARIZONA_SAMPLE_RATE_DETECT_D_MASK 0x001F /* SAMPLE_RATE_DETECT_D - [4:0] */
1573#define ARIZONA_SAMPLE_RATE_DETECT_D_SHIFT 0 /* SAMPLE_RATE_DETECT_D - [4:0] */
1574#define ARIZONA_SAMPLE_RATE_DETECT_D_WIDTH 5 /* SAMPLE_RATE_DETECT_D - [4:0] */
1575
1576/*
1577 * R369 (0x171) - FLL1 Control 1
1578 */
1579#define ARIZONA_FLL1_FREERUN 0x0002 /* FLL1_FREERUN */
1580#define ARIZONA_FLL1_FREERUN_MASK 0x0002 /* FLL1_FREERUN */
1581#define ARIZONA_FLL1_FREERUN_SHIFT 1 /* FLL1_FREERUN */
1582#define ARIZONA_FLL1_FREERUN_WIDTH 1 /* FLL1_FREERUN */
1583#define ARIZONA_FLL1_ENA 0x0001 /* FLL1_ENA */
1584#define ARIZONA_FLL1_ENA_MASK 0x0001 /* FLL1_ENA */
1585#define ARIZONA_FLL1_ENA_SHIFT 0 /* FLL1_ENA */
1586#define ARIZONA_FLL1_ENA_WIDTH 1 /* FLL1_ENA */
1587
1588/*
1589 * R370 (0x172) - FLL1 Control 2
1590 */
1591#define ARIZONA_FLL1_CTRL_UPD 0x8000 /* FLL1_CTRL_UPD */
1592#define ARIZONA_FLL1_CTRL_UPD_MASK 0x8000 /* FLL1_CTRL_UPD */
1593#define ARIZONA_FLL1_CTRL_UPD_SHIFT 15 /* FLL1_CTRL_UPD */
1594#define ARIZONA_FLL1_CTRL_UPD_WIDTH 1 /* FLL1_CTRL_UPD */
1595#define ARIZONA_FLL1_N_MASK 0x03FF /* FLL1_N - [9:0] */
1596#define ARIZONA_FLL1_N_SHIFT 0 /* FLL1_N - [9:0] */
1597#define ARIZONA_FLL1_N_WIDTH 10 /* FLL1_N - [9:0] */
1598
1599/*
1600 * R371 (0x173) - FLL1 Control 3
1601 */
1602#define ARIZONA_FLL1_THETA_MASK 0xFFFF /* FLL1_THETA - [15:0] */
1603#define ARIZONA_FLL1_THETA_SHIFT 0 /* FLL1_THETA - [15:0] */
1604#define ARIZONA_FLL1_THETA_WIDTH 16 /* FLL1_THETA - [15:0] */
1605
1606/*
1607 * R372 (0x174) - FLL1 Control 4
1608 */
1609#define ARIZONA_FLL1_LAMBDA_MASK 0xFFFF /* FLL1_LAMBDA - [15:0] */
1610#define ARIZONA_FLL1_LAMBDA_SHIFT 0 /* FLL1_LAMBDA - [15:0] */
1611#define ARIZONA_FLL1_LAMBDA_WIDTH 16 /* FLL1_LAMBDA - [15:0] */
1612
1613/*
1614 * R373 (0x175) - FLL1 Control 5
1615 */
1616#define ARIZONA_FLL1_FRATIO_MASK 0x0700 /* FLL1_FRATIO - [10:8] */
1617#define ARIZONA_FLL1_FRATIO_SHIFT 8 /* FLL1_FRATIO - [10:8] */
1618#define ARIZONA_FLL1_FRATIO_WIDTH 3 /* FLL1_FRATIO - [10:8] */
1619#define ARIZONA_FLL1_OUTDIV_MASK 0x000E /* FLL1_OUTDIV - [3:1] */
1620#define ARIZONA_FLL1_OUTDIV_SHIFT 1 /* FLL1_OUTDIV - [3:1] */
1621#define ARIZONA_FLL1_OUTDIV_WIDTH 3 /* FLL1_OUTDIV - [3:1] */
1622
1623/*
1624 * R374 (0x176) - FLL1 Control 6
1625 */
1626#define ARIZONA_FLL1_CLK_REF_DIV_MASK 0x00C0 /* FLL1_CLK_REF_DIV - [7:6] */
1627#define ARIZONA_FLL1_CLK_REF_DIV_SHIFT 6 /* FLL1_CLK_REF_DIV - [7:6] */
1628#define ARIZONA_FLL1_CLK_REF_DIV_WIDTH 2 /* FLL1_CLK_REF_DIV - [7:6] */
1629#define ARIZONA_FLL1_CLK_REF_SRC_MASK 0x000F /* FLL1_CLK_REF_SRC - [3:0] */
1630#define ARIZONA_FLL1_CLK_REF_SRC_SHIFT 0 /* FLL1_CLK_REF_SRC - [3:0] */
1631#define ARIZONA_FLL1_CLK_REF_SRC_WIDTH 4 /* FLL1_CLK_REF_SRC - [3:0] */
1632
1633/*
1634 * R375 (0x177) - FLL1 Loop Filter Test 1
1635 */
1636#define ARIZONA_FLL1_FRC_INTEG_UPD 0x8000 /* FLL1_FRC_INTEG_UPD */
1637#define ARIZONA_FLL1_FRC_INTEG_UPD_MASK 0x8000 /* FLL1_FRC_INTEG_UPD */
1638#define ARIZONA_FLL1_FRC_INTEG_UPD_SHIFT 15 /* FLL1_FRC_INTEG_UPD */
1639#define ARIZONA_FLL1_FRC_INTEG_UPD_WIDTH 1 /* FLL1_FRC_INTEG_UPD */
1640#define ARIZONA_FLL1_FRC_INTEG_VAL_MASK 0x0FFF /* FLL1_FRC_INTEG_VAL - [11:0] */
1641#define ARIZONA_FLL1_FRC_INTEG_VAL_SHIFT 0 /* FLL1_FRC_INTEG_VAL - [11:0] */
1642#define ARIZONA_FLL1_FRC_INTEG_VAL_WIDTH 12 /* FLL1_FRC_INTEG_VAL - [11:0] */
1643
1644/*
1645 * R385 (0x181) - FLL1 Synchroniser 1
1646 */
1647#define ARIZONA_FLL1_SYNC_ENA 0x0001 /* FLL1_SYNC_ENA */
1648#define ARIZONA_FLL1_SYNC_ENA_MASK 0x0001 /* FLL1_SYNC_ENA */
1649#define ARIZONA_FLL1_SYNC_ENA_SHIFT 0 /* FLL1_SYNC_ENA */
1650#define ARIZONA_FLL1_SYNC_ENA_WIDTH 1 /* FLL1_SYNC_ENA */
1651
1652/*
1653 * R386 (0x182) - FLL1 Synchroniser 2
1654 */
1655#define ARIZONA_FLL1_SYNC_N_MASK 0x03FF /* FLL1_SYNC_N - [9:0] */
1656#define ARIZONA_FLL1_SYNC_N_SHIFT 0 /* FLL1_SYNC_N - [9:0] */
1657#define ARIZONA_FLL1_SYNC_N_WIDTH 10 /* FLL1_SYNC_N - [9:0] */
1658
1659/*
1660 * R387 (0x183) - FLL1 Synchroniser 3
1661 */
1662#define ARIZONA_FLL1_SYNC_THETA_MASK 0xFFFF /* FLL1_SYNC_THETA - [15:0] */
1663#define ARIZONA_FLL1_SYNC_THETA_SHIFT 0 /* FLL1_SYNC_THETA - [15:0] */
1664#define ARIZONA_FLL1_SYNC_THETA_WIDTH 16 /* FLL1_SYNC_THETA - [15:0] */
1665
1666/*
1667 * R388 (0x184) - FLL1 Synchroniser 4
1668 */
1669#define ARIZONA_FLL1_SYNC_LAMBDA_MASK 0xFFFF /* FLL1_SYNC_LAMBDA - [15:0] */
1670#define ARIZONA_FLL1_SYNC_LAMBDA_SHIFT 0 /* FLL1_SYNC_LAMBDA - [15:0] */
1671#define ARIZONA_FLL1_SYNC_LAMBDA_WIDTH 16 /* FLL1_SYNC_LAMBDA - [15:0] */
1672
1673/*
1674 * R389 (0x185) - FLL1 Synchroniser 5
1675 */
1676#define ARIZONA_FLL1_SYNC_FRATIO_MASK 0x0700 /* FLL1_SYNC_FRATIO - [10:8] */
1677#define ARIZONA_FLL1_SYNC_FRATIO_SHIFT 8 /* FLL1_SYNC_FRATIO - [10:8] */
1678#define ARIZONA_FLL1_SYNC_FRATIO_WIDTH 3 /* FLL1_SYNC_FRATIO - [10:8] */
1679
1680/*
1681 * R390 (0x186) - FLL1 Synchroniser 6
1682 */
1683#define ARIZONA_FLL1_CLK_SYNC_DIV_MASK 0x00C0 /* FLL1_CLK_SYNC_DIV - [7:6] */
1684#define ARIZONA_FLL1_CLK_SYNC_DIV_SHIFT 6 /* FLL1_CLK_SYNC_DIV - [7:6] */
1685#define ARIZONA_FLL1_CLK_SYNC_DIV_WIDTH 2 /* FLL1_CLK_SYNC_DIV - [7:6] */
1686#define ARIZONA_FLL1_CLK_SYNC_SRC_MASK 0x000F /* FLL1_CLK_SYNC_SRC - [3:0] */
1687#define ARIZONA_FLL1_CLK_SYNC_SRC_SHIFT 0 /* FLL1_CLK_SYNC_SRC - [3:0] */
1688#define ARIZONA_FLL1_CLK_SYNC_SRC_WIDTH 4 /* FLL1_CLK_SYNC_SRC - [3:0] */
1689
1690/*
1691 * R393 (0x189) - FLL1 Spread Spectrum
1692 */
1693#define ARIZONA_FLL1_SS_AMPL_MASK 0x0030 /* FLL1_SS_AMPL - [5:4] */
1694#define ARIZONA_FLL1_SS_AMPL_SHIFT 4 /* FLL1_SS_AMPL - [5:4] */
1695#define ARIZONA_FLL1_SS_AMPL_WIDTH 2 /* FLL1_SS_AMPL - [5:4] */
1696#define ARIZONA_FLL1_SS_FREQ_MASK 0x000C /* FLL1_SS_FREQ - [3:2] */
1697#define ARIZONA_FLL1_SS_FREQ_SHIFT 2 /* FLL1_SS_FREQ - [3:2] */
1698#define ARIZONA_FLL1_SS_FREQ_WIDTH 2 /* FLL1_SS_FREQ - [3:2] */
1699#define ARIZONA_FLL1_SS_SEL_MASK 0x0003 /* FLL1_SS_SEL - [1:0] */
1700#define ARIZONA_FLL1_SS_SEL_SHIFT 0 /* FLL1_SS_SEL - [1:0] */
1701#define ARIZONA_FLL1_SS_SEL_WIDTH 2 /* FLL1_SS_SEL - [1:0] */
1702
1703/*
1704 * R394 (0x18A) - FLL1 GPIO Clock
1705 */
1706#define ARIZONA_FLL1_GPDIV_MASK 0x00FE /* FLL1_GPDIV - [7:1] */
1707#define ARIZONA_FLL1_GPDIV_SHIFT 1 /* FLL1_GPDIV - [7:1] */
1708#define ARIZONA_FLL1_GPDIV_WIDTH 7 /* FLL1_GPDIV - [7:1] */
1709#define ARIZONA_FLL1_GPDIV_ENA 0x0001 /* FLL1_GPDIV_ENA */
1710#define ARIZONA_FLL1_GPDIV_ENA_MASK 0x0001 /* FLL1_GPDIV_ENA */
1711#define ARIZONA_FLL1_GPDIV_ENA_SHIFT 0 /* FLL1_GPDIV_ENA */
1712#define ARIZONA_FLL1_GPDIV_ENA_WIDTH 1 /* FLL1_GPDIV_ENA */
1713
1714/*
1715 * R401 (0x191) - FLL2 Control 1
1716 */
1717#define ARIZONA_FLL2_FREERUN 0x0002 /* FLL2_FREERUN */
1718#define ARIZONA_FLL2_FREERUN_MASK 0x0002 /* FLL2_FREERUN */
1719#define ARIZONA_FLL2_FREERUN_SHIFT 1 /* FLL2_FREERUN */
1720#define ARIZONA_FLL2_FREERUN_WIDTH 1 /* FLL2_FREERUN */
1721#define ARIZONA_FLL2_ENA 0x0001 /* FLL2_ENA */
1722#define ARIZONA_FLL2_ENA_MASK 0x0001 /* FLL2_ENA */
1723#define ARIZONA_FLL2_ENA_SHIFT 0 /* FLL2_ENA */
1724#define ARIZONA_FLL2_ENA_WIDTH 1 /* FLL2_ENA */
1725
1726/*
1727 * R402 (0x192) - FLL2 Control 2
1728 */
1729#define ARIZONA_FLL2_CTRL_UPD 0x8000 /* FLL2_CTRL_UPD */
1730#define ARIZONA_FLL2_CTRL_UPD_MASK 0x8000 /* FLL2_CTRL_UPD */
1731#define ARIZONA_FLL2_CTRL_UPD_SHIFT 15 /* FLL2_CTRL_UPD */
1732#define ARIZONA_FLL2_CTRL_UPD_WIDTH 1 /* FLL2_CTRL_UPD */
1733#define ARIZONA_FLL2_N_MASK 0x03FF /* FLL2_N - [9:0] */
1734#define ARIZONA_FLL2_N_SHIFT 0 /* FLL2_N - [9:0] */
1735#define ARIZONA_FLL2_N_WIDTH 10 /* FLL2_N - [9:0] */
1736
1737/*
1738 * R403 (0x193) - FLL2 Control 3
1739 */
1740#define ARIZONA_FLL2_THETA_MASK 0xFFFF /* FLL2_THETA - [15:0] */
1741#define ARIZONA_FLL2_THETA_SHIFT 0 /* FLL2_THETA - [15:0] */
1742#define ARIZONA_FLL2_THETA_WIDTH 16 /* FLL2_THETA - [15:0] */
1743
1744/*
1745 * R404 (0x194) - FLL2 Control 4
1746 */
1747#define ARIZONA_FLL2_LAMBDA_MASK 0xFFFF /* FLL2_LAMBDA - [15:0] */
1748#define ARIZONA_FLL2_LAMBDA_SHIFT 0 /* FLL2_LAMBDA - [15:0] */
1749#define ARIZONA_FLL2_LAMBDA_WIDTH 16 /* FLL2_LAMBDA - [15:0] */
1750
1751/*
1752 * R405 (0x195) - FLL2 Control 5
1753 */
1754#define ARIZONA_FLL2_FRATIO_MASK 0x0700 /* FLL2_FRATIO - [10:8] */
1755#define ARIZONA_FLL2_FRATIO_SHIFT 8 /* FLL2_FRATIO - [10:8] */
1756#define ARIZONA_FLL2_FRATIO_WIDTH 3 /* FLL2_FRATIO - [10:8] */
1757#define ARIZONA_FLL2_OUTDIV_MASK 0x000E /* FLL2_OUTDIV - [3:1] */
1758#define ARIZONA_FLL2_OUTDIV_SHIFT 1 /* FLL2_OUTDIV - [3:1] */
1759#define ARIZONA_FLL2_OUTDIV_WIDTH 3 /* FLL2_OUTDIV - [3:1] */
1760
1761/*
1762 * R406 (0x196) - FLL2 Control 6
1763 */
1764#define ARIZONA_FLL2_CLK_REF_DIV_MASK 0x00C0 /* FLL2_CLK_REF_DIV - [7:6] */
1765#define ARIZONA_FLL2_CLK_REF_DIV_SHIFT 6 /* FLL2_CLK_REF_DIV - [7:6] */
1766#define ARIZONA_FLL2_CLK_REF_DIV_WIDTH 2 /* FLL2_CLK_REF_DIV - [7:6] */
1767#define ARIZONA_FLL2_CLK_REF_SRC_MASK 0x000F /* FLL2_CLK_REF_SRC - [3:0] */
1768#define ARIZONA_FLL2_CLK_REF_SRC_SHIFT 0 /* FLL2_CLK_REF_SRC - [3:0] */
1769#define ARIZONA_FLL2_CLK_REF_SRC_WIDTH 4 /* FLL2_CLK_REF_SRC - [3:0] */
1770
1771/*
1772 * R407 (0x197) - FLL2 Loop Filter Test 1
1773 */
1774#define ARIZONA_FLL2_FRC_INTEG_UPD 0x8000 /* FLL2_FRC_INTEG_UPD */
1775#define ARIZONA_FLL2_FRC_INTEG_UPD_MASK 0x8000 /* FLL2_FRC_INTEG_UPD */
1776#define ARIZONA_FLL2_FRC_INTEG_UPD_SHIFT 15 /* FLL2_FRC_INTEG_UPD */
1777#define ARIZONA_FLL2_FRC_INTEG_UPD_WIDTH 1 /* FLL2_FRC_INTEG_UPD */
1778#define ARIZONA_FLL2_FRC_INTEG_VAL_MASK 0x0FFF /* FLL2_FRC_INTEG_VAL - [11:0] */
1779#define ARIZONA_FLL2_FRC_INTEG_VAL_SHIFT 0 /* FLL2_FRC_INTEG_VAL - [11:0] */
1780#define ARIZONA_FLL2_FRC_INTEG_VAL_WIDTH 12 /* FLL2_FRC_INTEG_VAL - [11:0] */
1781
1782/*
1783 * R417 (0x1A1) - FLL2 Synchroniser 1
1784 */
1785#define ARIZONA_FLL2_SYNC_ENA 0x0001 /* FLL2_SYNC_ENA */
1786#define ARIZONA_FLL2_SYNC_ENA_MASK 0x0001 /* FLL2_SYNC_ENA */
1787#define ARIZONA_FLL2_SYNC_ENA_SHIFT 0 /* FLL2_SYNC_ENA */
1788#define ARIZONA_FLL2_SYNC_ENA_WIDTH 1 /* FLL2_SYNC_ENA */
1789
1790/*
1791 * R418 (0x1A2) - FLL2 Synchroniser 2
1792 */
1793#define ARIZONA_FLL2_SYNC_N_MASK 0x03FF /* FLL2_SYNC_N - [9:0] */
1794#define ARIZONA_FLL2_SYNC_N_SHIFT 0 /* FLL2_SYNC_N - [9:0] */
1795#define ARIZONA_FLL2_SYNC_N_WIDTH 10 /* FLL2_SYNC_N - [9:0] */
1796
1797/*
1798 * R419 (0x1A3) - FLL2 Synchroniser 3
1799 */
1800#define ARIZONA_FLL2_SYNC_THETA_MASK 0xFFFF /* FLL2_SYNC_THETA - [15:0] */
1801#define ARIZONA_FLL2_SYNC_THETA_SHIFT 0 /* FLL2_SYNC_THETA - [15:0] */
1802#define ARIZONA_FLL2_SYNC_THETA_WIDTH 16 /* FLL2_SYNC_THETA - [15:0] */
1803
1804/*
1805 * R420 (0x1A4) - FLL2 Synchroniser 4
1806 */
1807#define ARIZONA_FLL2_SYNC_LAMBDA_MASK 0xFFFF /* FLL2_SYNC_LAMBDA - [15:0] */
1808#define ARIZONA_FLL2_SYNC_LAMBDA_SHIFT 0 /* FLL2_SYNC_LAMBDA - [15:0] */
1809#define ARIZONA_FLL2_SYNC_LAMBDA_WIDTH 16 /* FLL2_SYNC_LAMBDA - [15:0] */
1810
1811/*
1812 * R421 (0x1A5) - FLL2 Synchroniser 5
1813 */
1814#define ARIZONA_FLL2_SYNC_FRATIO_MASK 0x0700 /* FLL2_SYNC_FRATIO - [10:8] */
1815#define ARIZONA_FLL2_SYNC_FRATIO_SHIFT 8 /* FLL2_SYNC_FRATIO - [10:8] */
1816#define ARIZONA_FLL2_SYNC_FRATIO_WIDTH 3 /* FLL2_SYNC_FRATIO - [10:8] */
1817
1818/*
1819 * R422 (0x1A6) - FLL2 Synchroniser 6
1820 */
1821#define ARIZONA_FLL2_CLK_SYNC_DIV_MASK 0x00C0 /* FLL2_CLK_SYNC_DIV - [7:6] */
1822#define ARIZONA_FLL2_CLK_SYNC_DIV_SHIFT 6 /* FLL2_CLK_SYNC_DIV - [7:6] */
1823#define ARIZONA_FLL2_CLK_SYNC_DIV_WIDTH 2 /* FLL2_CLK_SYNC_DIV - [7:6] */
1824#define ARIZONA_FLL2_CLK_SYNC_SRC_MASK 0x000F /* FLL2_CLK_SYNC_SRC - [3:0] */
1825#define ARIZONA_FLL2_CLK_SYNC_SRC_SHIFT 0 /* FLL2_CLK_SYNC_SRC - [3:0] */
1826#define ARIZONA_FLL2_CLK_SYNC_SRC_WIDTH 4 /* FLL2_CLK_SYNC_SRC - [3:0] */
1827
1828/*
1829 * R425 (0x1A9) - FLL2 Spread Spectrum
1830 */
1831#define ARIZONA_FLL2_SS_AMPL_MASK 0x0030 /* FLL2_SS_AMPL - [5:4] */
1832#define ARIZONA_FLL2_SS_AMPL_SHIFT 4 /* FLL2_SS_AMPL - [5:4] */
1833#define ARIZONA_FLL2_SS_AMPL_WIDTH 2 /* FLL2_SS_AMPL - [5:4] */
1834#define ARIZONA_FLL2_SS_FREQ_MASK 0x000C /* FLL2_SS_FREQ - [3:2] */
1835#define ARIZONA_FLL2_SS_FREQ_SHIFT 2 /* FLL2_SS_FREQ - [3:2] */
1836#define ARIZONA_FLL2_SS_FREQ_WIDTH 2 /* FLL2_SS_FREQ - [3:2] */
1837#define ARIZONA_FLL2_SS_SEL_MASK 0x0003 /* FLL2_SS_SEL - [1:0] */
1838#define ARIZONA_FLL2_SS_SEL_SHIFT 0 /* FLL2_SS_SEL - [1:0] */
1839#define ARIZONA_FLL2_SS_SEL_WIDTH 2 /* FLL2_SS_SEL - [1:0] */
1840
1841/*
1842 * R426 (0x1AA) - FLL2 GPIO Clock
1843 */
1844#define ARIZONA_FLL2_GPDIV_MASK 0x00FE /* FLL2_GPDIV - [7:1] */
1845#define ARIZONA_FLL2_GPDIV_SHIFT 1 /* FLL2_GPDIV - [7:1] */
1846#define ARIZONA_FLL2_GPDIV_WIDTH 7 /* FLL2_GPDIV - [7:1] */
1847#define ARIZONA_FLL2_GPDIV_ENA 0x0001 /* FLL2_GPDIV_ENA */
1848#define ARIZONA_FLL2_GPDIV_ENA_MASK 0x0001 /* FLL2_GPDIV_ENA */
1849#define ARIZONA_FLL2_GPDIV_ENA_SHIFT 0 /* FLL2_GPDIV_ENA */
1850#define ARIZONA_FLL2_GPDIV_ENA_WIDTH 1 /* FLL2_GPDIV_ENA */
1851
1852/*
1853 * R512 (0x200) - Mic Charge Pump 1
1854 */
1855#define ARIZONA_CPMIC_DISCH 0x0004 /* CPMIC_DISCH */
1856#define ARIZONA_CPMIC_DISCH_MASK 0x0004 /* CPMIC_DISCH */
1857#define ARIZONA_CPMIC_DISCH_SHIFT 2 /* CPMIC_DISCH */
1858#define ARIZONA_CPMIC_DISCH_WIDTH 1 /* CPMIC_DISCH */
1859#define ARIZONA_CPMIC_BYPASS 0x0002 /* CPMIC_BYPASS */
1860#define ARIZONA_CPMIC_BYPASS_MASK 0x0002 /* CPMIC_BYPASS */
1861#define ARIZONA_CPMIC_BYPASS_SHIFT 1 /* CPMIC_BYPASS */
1862#define ARIZONA_CPMIC_BYPASS_WIDTH 1 /* CPMIC_BYPASS */
1863#define ARIZONA_CPMIC_ENA 0x0001 /* CPMIC_ENA */
1864#define ARIZONA_CPMIC_ENA_MASK 0x0001 /* CPMIC_ENA */
1865#define ARIZONA_CPMIC_ENA_SHIFT 0 /* CPMIC_ENA */
1866#define ARIZONA_CPMIC_ENA_WIDTH 1 /* CPMIC_ENA */
1867
1868/*
1869 * R528 (0x210) - LDO1 Control 1
1870 */
1871#define ARIZONA_LDO1_VSEL_MASK 0x07E0 /* LDO1_VSEL - [10:5] */
1872#define ARIZONA_LDO1_VSEL_SHIFT 5 /* LDO1_VSEL - [10:5] */
1873#define ARIZONA_LDO1_VSEL_WIDTH 6 /* LDO1_VSEL - [10:5] */
1874#define ARIZONA_LDO1_FAST 0x0010 /* LDO1_FAST */
1875#define ARIZONA_LDO1_FAST_MASK 0x0010 /* LDO1_FAST */
1876#define ARIZONA_LDO1_FAST_SHIFT 4 /* LDO1_FAST */
1877#define ARIZONA_LDO1_FAST_WIDTH 1 /* LDO1_FAST */
1878#define ARIZONA_LDO1_DISCH 0x0004 /* LDO1_DISCH */
1879#define ARIZONA_LDO1_DISCH_MASK 0x0004 /* LDO1_DISCH */
1880#define ARIZONA_LDO1_DISCH_SHIFT 2 /* LDO1_DISCH */
1881#define ARIZONA_LDO1_DISCH_WIDTH 1 /* LDO1_DISCH */
1882#define ARIZONA_LDO1_BYPASS 0x0002 /* LDO1_BYPASS */
1883#define ARIZONA_LDO1_BYPASS_MASK 0x0002 /* LDO1_BYPASS */
1884#define ARIZONA_LDO1_BYPASS_SHIFT 1 /* LDO1_BYPASS */
1885#define ARIZONA_LDO1_BYPASS_WIDTH 1 /* LDO1_BYPASS */
1886#define ARIZONA_LDO1_ENA 0x0001 /* LDO1_ENA */
1887#define ARIZONA_LDO1_ENA_MASK 0x0001 /* LDO1_ENA */
1888#define ARIZONA_LDO1_ENA_SHIFT 0 /* LDO1_ENA */
1889#define ARIZONA_LDO1_ENA_WIDTH 1 /* LDO1_ENA */
1890
1891/*
1892 * R531 (0x213) - LDO2 Control 1
1893 */
1894#define ARIZONA_LDO2_VSEL_MASK 0x07E0 /* LDO2_VSEL - [10:5] */
1895#define ARIZONA_LDO2_VSEL_SHIFT 5 /* LDO2_VSEL - [10:5] */
1896#define ARIZONA_LDO2_VSEL_WIDTH 6 /* LDO2_VSEL - [10:5] */
1897#define ARIZONA_LDO2_FAST 0x0010 /* LDO2_FAST */
1898#define ARIZONA_LDO2_FAST_MASK 0x0010 /* LDO2_FAST */
1899#define ARIZONA_LDO2_FAST_SHIFT 4 /* LDO2_FAST */
1900#define ARIZONA_LDO2_FAST_WIDTH 1 /* LDO2_FAST */
1901#define ARIZONA_LDO2_DISCH 0x0004 /* LDO2_DISCH */
1902#define ARIZONA_LDO2_DISCH_MASK 0x0004 /* LDO2_DISCH */
1903#define ARIZONA_LDO2_DISCH_SHIFT 2 /* LDO2_DISCH */
1904#define ARIZONA_LDO2_DISCH_WIDTH 1 /* LDO2_DISCH */
1905#define ARIZONA_LDO2_BYPASS 0x0002 /* LDO2_BYPASS */
1906#define ARIZONA_LDO2_BYPASS_MASK 0x0002 /* LDO2_BYPASS */
1907#define ARIZONA_LDO2_BYPASS_SHIFT 1 /* LDO2_BYPASS */
1908#define ARIZONA_LDO2_BYPASS_WIDTH 1 /* LDO2_BYPASS */
1909#define ARIZONA_LDO2_ENA 0x0001 /* LDO2_ENA */
1910#define ARIZONA_LDO2_ENA_MASK 0x0001 /* LDO2_ENA */
1911#define ARIZONA_LDO2_ENA_SHIFT 0 /* LDO2_ENA */
1912#define ARIZONA_LDO2_ENA_WIDTH 1 /* LDO2_ENA */
1913
1914/*
1915 * R536 (0x218) - Mic Bias Ctrl 1
1916 */
1917#define ARIZONA_MICB1_EXT_CAP 0x8000 /* MICB1_EXT_CAP */
1918#define ARIZONA_MICB1_EXT_CAP_MASK 0x8000 /* MICB1_EXT_CAP */
1919#define ARIZONA_MICB1_EXT_CAP_SHIFT 15 /* MICB1_EXT_CAP */
1920#define ARIZONA_MICB1_EXT_CAP_WIDTH 1 /* MICB1_EXT_CAP */
1921#define ARIZONA_MICB1_LVL_MASK 0x01E0 /* MICB1_LVL - [8:5] */
1922#define ARIZONA_MICB1_LVL_SHIFT 5 /* MICB1_LVL - [8:5] */
1923#define ARIZONA_MICB1_LVL_WIDTH 4 /* MICB1_LVL - [8:5] */
1924#define ARIZONA_MICB1_FAST 0x0010 /* MICB1_FAST */
1925#define ARIZONA_MICB1_FAST_MASK 0x0010 /* MICB1_FAST */
1926#define ARIZONA_MICB1_FAST_SHIFT 4 /* MICB1_FAST */
1927#define ARIZONA_MICB1_FAST_WIDTH 1 /* MICB1_FAST */
1928#define ARIZONA_MICB1_RATE 0x0008 /* MICB1_RATE */
1929#define ARIZONA_MICB1_RATE_MASK 0x0008 /* MICB1_RATE */
1930#define ARIZONA_MICB1_RATE_SHIFT 3 /* MICB1_RATE */
1931#define ARIZONA_MICB1_RATE_WIDTH 1 /* MICB1_RATE */
1932#define ARIZONA_MICB1_DISCH 0x0004 /* MICB1_DISCH */
1933#define ARIZONA_MICB1_DISCH_MASK 0x0004 /* MICB1_DISCH */
1934#define ARIZONA_MICB1_DISCH_SHIFT 2 /* MICB1_DISCH */
1935#define ARIZONA_MICB1_DISCH_WIDTH 1 /* MICB1_DISCH */
1936#define ARIZONA_MICB1_BYPASS 0x0002 /* MICB1_BYPASS */
1937#define ARIZONA_MICB1_BYPASS_MASK 0x0002 /* MICB1_BYPASS */
1938#define ARIZONA_MICB1_BYPASS_SHIFT 1 /* MICB1_BYPASS */
1939#define ARIZONA_MICB1_BYPASS_WIDTH 1 /* MICB1_BYPASS */
1940#define ARIZONA_MICB1_ENA 0x0001 /* MICB1_ENA */
1941#define ARIZONA_MICB1_ENA_MASK 0x0001 /* MICB1_ENA */
1942#define ARIZONA_MICB1_ENA_SHIFT 0 /* MICB1_ENA */
1943#define ARIZONA_MICB1_ENA_WIDTH 1 /* MICB1_ENA */
1944
1945/*
1946 * R537 (0x219) - Mic Bias Ctrl 2
1947 */
1948#define ARIZONA_MICB2_EXT_CAP 0x8000 /* MICB2_EXT_CAP */
1949#define ARIZONA_MICB2_EXT_CAP_MASK 0x8000 /* MICB2_EXT_CAP */
1950#define ARIZONA_MICB2_EXT_CAP_SHIFT 15 /* MICB2_EXT_CAP */
1951#define ARIZONA_MICB2_EXT_CAP_WIDTH 1 /* MICB2_EXT_CAP */
1952#define ARIZONA_MICB2_LVL_MASK 0x01E0 /* MICB2_LVL - [8:5] */
1953#define ARIZONA_MICB2_LVL_SHIFT 5 /* MICB2_LVL - [8:5] */
1954#define ARIZONA_MICB2_LVL_WIDTH 4 /* MICB2_LVL - [8:5] */
1955#define ARIZONA_MICB2_FAST 0x0010 /* MICB2_FAST */
1956#define ARIZONA_MICB2_FAST_MASK 0x0010 /* MICB2_FAST */
1957#define ARIZONA_MICB2_FAST_SHIFT 4 /* MICB2_FAST */
1958#define ARIZONA_MICB2_FAST_WIDTH 1 /* MICB2_FAST */
1959#define ARIZONA_MICB2_RATE 0x0008 /* MICB2_RATE */
1960#define ARIZONA_MICB2_RATE_MASK 0x0008 /* MICB2_RATE */
1961#define ARIZONA_MICB2_RATE_SHIFT 3 /* MICB2_RATE */
1962#define ARIZONA_MICB2_RATE_WIDTH 1 /* MICB2_RATE */
1963#define ARIZONA_MICB2_DISCH 0x0004 /* MICB2_DISCH */
1964#define ARIZONA_MICB2_DISCH_MASK 0x0004 /* MICB2_DISCH */
1965#define ARIZONA_MICB2_DISCH_SHIFT 2 /* MICB2_DISCH */
1966#define ARIZONA_MICB2_DISCH_WIDTH 1 /* MICB2_DISCH */
1967#define ARIZONA_MICB2_BYPASS 0x0002 /* MICB2_BYPASS */
1968#define ARIZONA_MICB2_BYPASS_MASK 0x0002 /* MICB2_BYPASS */
1969#define ARIZONA_MICB2_BYPASS_SHIFT 1 /* MICB2_BYPASS */
1970#define ARIZONA_MICB2_BYPASS_WIDTH 1 /* MICB2_BYPASS */
1971#define ARIZONA_MICB2_ENA 0x0001 /* MICB2_ENA */
1972#define ARIZONA_MICB2_ENA_MASK 0x0001 /* MICB2_ENA */
1973#define ARIZONA_MICB2_ENA_SHIFT 0 /* MICB2_ENA */
1974#define ARIZONA_MICB2_ENA_WIDTH 1 /* MICB2_ENA */
1975
1976/*
1977 * R538 (0x21A) - Mic Bias Ctrl 3
1978 */
1979#define ARIZONA_MICB3_EXT_CAP 0x8000 /* MICB3_EXT_CAP */
1980#define ARIZONA_MICB3_EXT_CAP_MASK 0x8000 /* MICB3_EXT_CAP */
1981#define ARIZONA_MICB3_EXT_CAP_SHIFT 15 /* MICB3_EXT_CAP */
1982#define ARIZONA_MICB3_EXT_CAP_WIDTH 1 /* MICB3_EXT_CAP */
1983#define ARIZONA_MICB3_LVL_MASK 0x01E0 /* MICB3_LVL - [8:5] */
1984#define ARIZONA_MICB3_LVL_SHIFT 5 /* MICB3_LVL - [8:5] */
1985#define ARIZONA_MICB3_LVL_WIDTH 4 /* MICB3_LVL - [8:5] */
1986#define ARIZONA_MICB3_FAST 0x0010 /* MICB3_FAST */
1987#define ARIZONA_MICB3_FAST_MASK 0x0010 /* MICB3_FAST */
1988#define ARIZONA_MICB3_FAST_SHIFT 4 /* MICB3_FAST */
1989#define ARIZONA_MICB3_FAST_WIDTH 1 /* MICB3_FAST */
1990#define ARIZONA_MICB3_RATE 0x0008 /* MICB3_RATE */
1991#define ARIZONA_MICB3_RATE_MASK 0x0008 /* MICB3_RATE */
1992#define ARIZONA_MICB3_RATE_SHIFT 3 /* MICB3_RATE */
1993#define ARIZONA_MICB3_RATE_WIDTH 1 /* MICB3_RATE */
1994#define ARIZONA_MICB3_DISCH 0x0004 /* MICB3_DISCH */
1995#define ARIZONA_MICB3_DISCH_MASK 0x0004 /* MICB3_DISCH */
1996#define ARIZONA_MICB3_DISCH_SHIFT 2 /* MICB3_DISCH */
1997#define ARIZONA_MICB3_DISCH_WIDTH 1 /* MICB3_DISCH */
1998#define ARIZONA_MICB3_BYPASS 0x0002 /* MICB3_BYPASS */
1999#define ARIZONA_MICB3_BYPASS_MASK 0x0002 /* MICB3_BYPASS */
2000#define ARIZONA_MICB3_BYPASS_SHIFT 1 /* MICB3_BYPASS */
2001#define ARIZONA_MICB3_BYPASS_WIDTH 1 /* MICB3_BYPASS */
2002#define ARIZONA_MICB3_ENA 0x0001 /* MICB3_ENA */
2003#define ARIZONA_MICB3_ENA_MASK 0x0001 /* MICB3_ENA */
2004#define ARIZONA_MICB3_ENA_SHIFT 0 /* MICB3_ENA */
2005#define ARIZONA_MICB3_ENA_WIDTH 1 /* MICB3_ENA */
2006
2007/*
2008 * R659 (0x293) - Accessory Detect Mode 1
2009 */
2010#define ARIZONA_ACCDET_SRC 0x2000 /* ACCDET_SRC */
2011#define ARIZONA_ACCDET_SRC_MASK 0x2000 /* ACCDET_SRC */
2012#define ARIZONA_ACCDET_SRC_SHIFT 13 /* ACCDET_SRC */
2013#define ARIZONA_ACCDET_SRC_WIDTH 1 /* ACCDET_SRC */
2014#define ARIZONA_ACCDET_MODE_MASK 0x0003 /* ACCDET_MODE - [1:0] */
2015#define ARIZONA_ACCDET_MODE_SHIFT 0 /* ACCDET_MODE - [1:0] */
2016#define ARIZONA_ACCDET_MODE_WIDTH 2 /* ACCDET_MODE - [1:0] */
2017
2018/*
2019 * R667 (0x29B) - Headphone Detect 1
2020 */
2021#define ARIZONA_HP_STEP_SIZE 0x0100 /* HP_STEP_SIZE */
2022#define ARIZONA_HP_STEP_SIZE_MASK 0x0100 /* HP_STEP_SIZE */
2023#define ARIZONA_HP_STEP_SIZE_SHIFT 8 /* HP_STEP_SIZE */
2024#define ARIZONA_HP_STEP_SIZE_WIDTH 1 /* HP_STEP_SIZE */
2025#define ARIZONA_HP_HOLDTIME_MASK 0x00E0 /* HP_HOLDTIME - [7:5] */
2026#define ARIZONA_HP_HOLDTIME_SHIFT 5 /* HP_HOLDTIME - [7:5] */
2027#define ARIZONA_HP_HOLDTIME_WIDTH 3 /* HP_HOLDTIME - [7:5] */
2028#define ARIZONA_HP_CLK_DIV_MASK 0x0018 /* HP_CLK_DIV - [4:3] */
2029#define ARIZONA_HP_CLK_DIV_SHIFT 3 /* HP_CLK_DIV - [4:3] */
2030#define ARIZONA_HP_CLK_DIV_WIDTH 2 /* HP_CLK_DIV - [4:3] */
2031#define ARIZONA_HP_IDAC_STEER 0x0004 /* HP_IDAC_STEER */
2032#define ARIZONA_HP_IDAC_STEER_MASK 0x0004 /* HP_IDAC_STEER */
2033#define ARIZONA_HP_IDAC_STEER_SHIFT 2 /* HP_IDAC_STEER */
2034#define ARIZONA_HP_IDAC_STEER_WIDTH 1 /* HP_IDAC_STEER */
2035#define ARIZONA_HP_RATE 0x0002 /* HP_RATE */
2036#define ARIZONA_HP_RATE_MASK 0x0002 /* HP_RATE */
2037#define ARIZONA_HP_RATE_SHIFT 1 /* HP_RATE */
2038#define ARIZONA_HP_RATE_WIDTH 1 /* HP_RATE */
2039#define ARIZONA_HP_POLL 0x0001 /* HP_POLL */
2040#define ARIZONA_HP_POLL_MASK 0x0001 /* HP_POLL */
2041#define ARIZONA_HP_POLL_SHIFT 0 /* HP_POLL */
2042#define ARIZONA_HP_POLL_WIDTH 1 /* HP_POLL */
2043
2044/*
2045 * R668 (0x29C) - Headphone Detect 2
2046 */
2047#define ARIZONA_HP_DONE 0x0080 /* HP_DONE */
2048#define ARIZONA_HP_DONE_MASK 0x0080 /* HP_DONE */
2049#define ARIZONA_HP_DONE_SHIFT 7 /* HP_DONE */
2050#define ARIZONA_HP_DONE_WIDTH 1 /* HP_DONE */
2051#define ARIZONA_HP_LVL_MASK 0x007F /* HP_LVL - [6:0] */
2052#define ARIZONA_HP_LVL_SHIFT 0 /* HP_LVL - [6:0] */
2053#define ARIZONA_HP_LVL_WIDTH 7 /* HP_LVL - [6:0] */
2054
2055/*
2056 * R675 (0x2A3) - Mic Detect 1
2057 */
2058#define ARIZONA_MICD_BIAS_STARTTIME_MASK 0xF000 /* MICD_BIAS_STARTTIME - [15:12] */
2059#define ARIZONA_MICD_BIAS_STARTTIME_SHIFT 12 /* MICD_BIAS_STARTTIME - [15:12] */
2060#define ARIZONA_MICD_BIAS_STARTTIME_WIDTH 4 /* MICD_BIAS_STARTTIME - [15:12] */
2061#define ARIZONA_MICD_RATE_MASK 0x0F00 /* MICD_RATE - [11:8] */
2062#define ARIZONA_MICD_RATE_SHIFT 8 /* MICD_RATE - [11:8] */
2063#define ARIZONA_MICD_RATE_WIDTH 4 /* MICD_RATE - [11:8] */
2064#define ARIZONA_MICD_BIAS_SRC_MASK 0x0030 /* MICD_BIAS_SRC - [5:4] */
2065#define ARIZONA_MICD_BIAS_SRC_SHIFT 4 /* MICD_BIAS_SRC - [5:4] */
2066#define ARIZONA_MICD_BIAS_SRC_WIDTH 2 /* MICD_BIAS_SRC - [5:4] */
2067#define ARIZONA_MICD_DBTIME 0x0002 /* MICD_DBTIME */
2068#define ARIZONA_MICD_DBTIME_MASK 0x0002 /* MICD_DBTIME */
2069#define ARIZONA_MICD_DBTIME_SHIFT 1 /* MICD_DBTIME */
2070#define ARIZONA_MICD_DBTIME_WIDTH 1 /* MICD_DBTIME */
2071#define ARIZONA_MICD_ENA 0x0001 /* MICD_ENA */
2072#define ARIZONA_MICD_ENA_MASK 0x0001 /* MICD_ENA */
2073#define ARIZONA_MICD_ENA_SHIFT 0 /* MICD_ENA */
2074#define ARIZONA_MICD_ENA_WIDTH 1 /* MICD_ENA */
2075
2076/*
2077 * R676 (0x2A4) - Mic Detect 2
2078 */
2079#define ARIZONA_MICD_LVL_SEL_MASK 0x00FF /* MICD_LVL_SEL - [7:0] */
2080#define ARIZONA_MICD_LVL_SEL_SHIFT 0 /* MICD_LVL_SEL - [7:0] */
2081#define ARIZONA_MICD_LVL_SEL_WIDTH 8 /* MICD_LVL_SEL - [7:0] */
2082
2083/*
2084 * R677 (0x2A5) - Mic Detect 3
2085 */
2086#define ARIZONA_MICD_LVL_MASK 0x07FC /* MICD_LVL - [10:2] */
2087#define ARIZONA_MICD_LVL_SHIFT 2 /* MICD_LVL - [10:2] */
2088#define ARIZONA_MICD_LVL_WIDTH 9 /* MICD_LVL - [10:2] */
2089#define ARIZONA_MICD_VALID 0x0002 /* MICD_VALID */
2090#define ARIZONA_MICD_VALID_MASK 0x0002 /* MICD_VALID */
2091#define ARIZONA_MICD_VALID_SHIFT 1 /* MICD_VALID */
2092#define ARIZONA_MICD_VALID_WIDTH 1 /* MICD_VALID */
2093#define ARIZONA_MICD_STS 0x0001 /* MICD_STS */
2094#define ARIZONA_MICD_STS_MASK 0x0001 /* MICD_STS */
2095#define ARIZONA_MICD_STS_SHIFT 0 /* MICD_STS */
2096#define ARIZONA_MICD_STS_WIDTH 1 /* MICD_STS */
2097
2098/*
2099 * R707 (0x2C3) - Mic noise mix control 1
2100 */
2101#define ARIZONA_MICMUTE_RATE_MASK 0x7800 /* MICMUTE_RATE - [14:11] */
2102#define ARIZONA_MICMUTE_RATE_SHIFT 11 /* MICMUTE_RATE - [14:11] */
2103#define ARIZONA_MICMUTE_RATE_WIDTH 4 /* MICMUTE_RATE - [14:11] */
2104#define ARIZONA_MICMUTE_MIX_ENA 0x0040 /* MICMUTE_MIX_ENA */
2105#define ARIZONA_MICMUTE_MIX_ENA_MASK 0x0040 /* MICMUTE_MIX_ENA */
2106#define ARIZONA_MICMUTE_MIX_ENA_SHIFT 6 /* MICMUTE_MIX_ENA */
2107#define ARIZONA_MICMUTE_MIX_ENA_WIDTH 1 /* MICMUTE_MIX_ENA */
2108
2109/*
2110 * R715 (0x2CB) - Isolation control
2111 */
2112#define ARIZONA_ISOLATE_DCVDD1 0x0001 /* ISOLATE_DCVDD1 */
2113#define ARIZONA_ISOLATE_DCVDD1_MASK 0x0001 /* ISOLATE_DCVDD1 */
2114#define ARIZONA_ISOLATE_DCVDD1_SHIFT 0 /* ISOLATE_DCVDD1 */
2115#define ARIZONA_ISOLATE_DCVDD1_WIDTH 1 /* ISOLATE_DCVDD1 */
2116
2117/*
2118 * R723 (0x2D3) - Jack detect analogue
2119 */
2120#define ARIZONA_JD2_ENA 0x0002 /* JD2_ENA */
2121#define ARIZONA_JD2_ENA_MASK 0x0002 /* JD2_ENA */
2122#define ARIZONA_JD2_ENA_SHIFT 1 /* JD2_ENA */
2123#define ARIZONA_JD2_ENA_WIDTH 1 /* JD2_ENA */
2124#define ARIZONA_JD1_ENA 0x0001 /* JD1_ENA */
2125#define ARIZONA_JD1_ENA_MASK 0x0001 /* JD1_ENA */
2126#define ARIZONA_JD1_ENA_SHIFT 0 /* JD1_ENA */
2127#define ARIZONA_JD1_ENA_WIDTH 1 /* JD1_ENA */
2128
2129/*
2130 * R768 (0x300) - Input Enables
2131 */
2132#define ARIZONA_IN4L_ENA 0x0080 /* IN4L_ENA */
2133#define ARIZONA_IN4L_ENA_MASK 0x0080 /* IN4L_ENA */
2134#define ARIZONA_IN4L_ENA_SHIFT 7 /* IN4L_ENA */
2135#define ARIZONA_IN4L_ENA_WIDTH 1 /* IN4L_ENA */
2136#define ARIZONA_IN4R_ENA 0x0040 /* IN4R_ENA */
2137#define ARIZONA_IN4R_ENA_MASK 0x0040 /* IN4R_ENA */
2138#define ARIZONA_IN4R_ENA_SHIFT 6 /* IN4R_ENA */
2139#define ARIZONA_IN4R_ENA_WIDTH 1 /* IN4R_ENA */
2140#define ARIZONA_IN3L_ENA 0x0020 /* IN3L_ENA */
2141#define ARIZONA_IN3L_ENA_MASK 0x0020 /* IN3L_ENA */
2142#define ARIZONA_IN3L_ENA_SHIFT 5 /* IN3L_ENA */
2143#define ARIZONA_IN3L_ENA_WIDTH 1 /* IN3L_ENA */
2144#define ARIZONA_IN3R_ENA 0x0010 /* IN3R_ENA */
2145#define ARIZONA_IN3R_ENA_MASK 0x0010 /* IN3R_ENA */
2146#define ARIZONA_IN3R_ENA_SHIFT 4 /* IN3R_ENA */
2147#define ARIZONA_IN3R_ENA_WIDTH 1 /* IN3R_ENA */
2148#define ARIZONA_IN2L_ENA 0x0008 /* IN2L_ENA */
2149#define ARIZONA_IN2L_ENA_MASK 0x0008 /* IN2L_ENA */
2150#define ARIZONA_IN2L_ENA_SHIFT 3 /* IN2L_ENA */
2151#define ARIZONA_IN2L_ENA_WIDTH 1 /* IN2L_ENA */
2152#define ARIZONA_IN2R_ENA 0x0004 /* IN2R_ENA */
2153#define ARIZONA_IN2R_ENA_MASK 0x0004 /* IN2R_ENA */
2154#define ARIZONA_IN2R_ENA_SHIFT 2 /* IN2R_ENA */
2155#define ARIZONA_IN2R_ENA_WIDTH 1 /* IN2R_ENA */
2156#define ARIZONA_IN1L_ENA 0x0002 /* IN1L_ENA */
2157#define ARIZONA_IN1L_ENA_MASK 0x0002 /* IN1L_ENA */
2158#define ARIZONA_IN1L_ENA_SHIFT 1 /* IN1L_ENA */
2159#define ARIZONA_IN1L_ENA_WIDTH 1 /* IN1L_ENA */
2160#define ARIZONA_IN1R_ENA 0x0001 /* IN1R_ENA */
2161#define ARIZONA_IN1R_ENA_MASK 0x0001 /* IN1R_ENA */
2162#define ARIZONA_IN1R_ENA_SHIFT 0 /* IN1R_ENA */
2163#define ARIZONA_IN1R_ENA_WIDTH 1 /* IN1R_ENA */
2164
2165/*
2166 * R776 (0x308) - Input Rate
2167 */
2168#define ARIZONA_IN_RATE_MASK 0x7800 /* IN_RATE - [14:11] */
2169#define ARIZONA_IN_RATE_SHIFT 11 /* IN_RATE - [14:11] */
2170#define ARIZONA_IN_RATE_WIDTH 4 /* IN_RATE - [14:11] */
2171
2172/*
2173 * R777 (0x309) - Input Volume Ramp
2174 */
2175#define ARIZONA_IN_VD_RAMP_MASK 0x0070 /* IN_VD_RAMP - [6:4] */
2176#define ARIZONA_IN_VD_RAMP_SHIFT 4 /* IN_VD_RAMP - [6:4] */
2177#define ARIZONA_IN_VD_RAMP_WIDTH 3 /* IN_VD_RAMP - [6:4] */
2178#define ARIZONA_IN_VI_RAMP_MASK 0x0007 /* IN_VI_RAMP - [2:0] */
2179#define ARIZONA_IN_VI_RAMP_SHIFT 0 /* IN_VI_RAMP - [2:0] */
2180#define ARIZONA_IN_VI_RAMP_WIDTH 3 /* IN_VI_RAMP - [2:0] */
2181
2182/*
2183 * R784 (0x310) - IN1L Control
2184 */
2185#define ARIZONA_IN1_OSR_MASK 0x6000 /* IN1_OSR - [14:13] */
2186#define ARIZONA_IN1_OSR_SHIFT 13 /* IN1_OSR - [14:13] */
2187#define ARIZONA_IN1_OSR_WIDTH 2 /* IN1_OSR - [14:13] */
2188#define ARIZONA_IN1_DMIC_SUP_MASK 0x1800 /* IN1_DMIC_SUP - [12:11] */
2189#define ARIZONA_IN1_DMIC_SUP_SHIFT 11 /* IN1_DMIC_SUP - [12:11] */
2190#define ARIZONA_IN1_DMIC_SUP_WIDTH 2 /* IN1_DMIC_SUP - [12:11] */
2191#define ARIZONA_IN1_MODE_MASK 0x0600 /* IN1_MODE - [10:9] */
2192#define ARIZONA_IN1_MODE_SHIFT 9 /* IN1_MODE - [10:9] */
2193#define ARIZONA_IN1_MODE_WIDTH 2 /* IN1_MODE - [10:9] */
2194#define ARIZONA_IN1L_PGA_VOL_MASK 0x00FE /* IN1L_PGA_VOL - [7:1] */
2195#define ARIZONA_IN1L_PGA_VOL_SHIFT 1 /* IN1L_PGA_VOL - [7:1] */
2196#define ARIZONA_IN1L_PGA_VOL_WIDTH 7 /* IN1L_PGA_VOL - [7:1] */
2197
2198/*
2199 * R785 (0x311) - ADC Digital Volume 1L
2200 */
2201#define ARIZONA_IN_VU 0x0200 /* IN_VU */
2202#define ARIZONA_IN_VU_MASK 0x0200 /* IN_VU */
2203#define ARIZONA_IN_VU_SHIFT 9 /* IN_VU */
2204#define ARIZONA_IN_VU_WIDTH 1 /* IN_VU */
2205#define ARIZONA_IN1L_MUTE 0x0100 /* IN1L_MUTE */
2206#define ARIZONA_IN1L_MUTE_MASK 0x0100 /* IN1L_MUTE */
2207#define ARIZONA_IN1L_MUTE_SHIFT 8 /* IN1L_MUTE */
2208#define ARIZONA_IN1L_MUTE_WIDTH 1 /* IN1L_MUTE */
2209#define ARIZONA_IN1L_DIG_VOL_MASK 0x00FF /* IN1L_DIG_VOL - [7:0] */
2210#define ARIZONA_IN1L_DIG_VOL_SHIFT 0 /* IN1L_DIG_VOL - [7:0] */
2211#define ARIZONA_IN1L_DIG_VOL_WIDTH 8 /* IN1L_DIG_VOL - [7:0] */
2212
2213/*
2214 * R786 (0x312) - DMIC1L Control
2215 */
2216#define ARIZONA_IN1_DMICL_DLY_MASK 0x003F /* IN1_DMICL_DLY - [5:0] */
2217#define ARIZONA_IN1_DMICL_DLY_SHIFT 0 /* IN1_DMICL_DLY - [5:0] */
2218#define ARIZONA_IN1_DMICL_DLY_WIDTH 6 /* IN1_DMICL_DLY - [5:0] */
2219
2220/*
2221 * R788 (0x314) - IN1R Control
2222 */
2223#define ARIZONA_IN1R_PGA_VOL_MASK 0x00FE /* IN1R_PGA_VOL - [7:1] */
2224#define ARIZONA_IN1R_PGA_VOL_SHIFT 1 /* IN1R_PGA_VOL - [7:1] */
2225#define ARIZONA_IN1R_PGA_VOL_WIDTH 7 /* IN1R_PGA_VOL - [7:1] */
2226
2227/*
2228 * R789 (0x315) - ADC Digital Volume 1R
2229 */
2230#define ARIZONA_IN_VU 0x0200 /* IN_VU */
2231#define ARIZONA_IN_VU_MASK 0x0200 /* IN_VU */
2232#define ARIZONA_IN_VU_SHIFT 9 /* IN_VU */
2233#define ARIZONA_IN_VU_WIDTH 1 /* IN_VU */
2234#define ARIZONA_IN1R_MUTE 0x0100 /* IN1R_MUTE */
2235#define ARIZONA_IN1R_MUTE_MASK 0x0100 /* IN1R_MUTE */
2236#define ARIZONA_IN1R_MUTE_SHIFT 8 /* IN1R_MUTE */
2237#define ARIZONA_IN1R_MUTE_WIDTH 1 /* IN1R_MUTE */
2238#define ARIZONA_IN1R_DIG_VOL_MASK 0x00FF /* IN1R_DIG_VOL - [7:0] */
2239#define ARIZONA_IN1R_DIG_VOL_SHIFT 0 /* IN1R_DIG_VOL - [7:0] */
2240#define ARIZONA_IN1R_DIG_VOL_WIDTH 8 /* IN1R_DIG_VOL - [7:0] */
2241
2242/*
2243 * R790 (0x316) - DMIC1R Control
2244 */
2245#define ARIZONA_IN1_DMICR_DLY_MASK 0x003F /* IN1_DMICR_DLY - [5:0] */
2246#define ARIZONA_IN1_DMICR_DLY_SHIFT 0 /* IN1_DMICR_DLY - [5:0] */
2247#define ARIZONA_IN1_DMICR_DLY_WIDTH 6 /* IN1_DMICR_DLY - [5:0] */
2248
2249/*
2250 * R792 (0x318) - IN2L Control
2251 */
2252#define ARIZONA_IN2_OSR_MASK 0x6000 /* IN2_OSR - [14:13] */
2253#define ARIZONA_IN2_OSR_SHIFT 13 /* IN2_OSR - [14:13] */
2254#define ARIZONA_IN2_OSR_WIDTH 2 /* IN2_OSR - [14:13] */
2255#define ARIZONA_IN2_DMIC_SUP_MASK 0x1800 /* IN2_DMIC_SUP - [12:11] */
2256#define ARIZONA_IN2_DMIC_SUP_SHIFT 11 /* IN2_DMIC_SUP - [12:11] */
2257#define ARIZONA_IN2_DMIC_SUP_WIDTH 2 /* IN2_DMIC_SUP - [12:11] */
2258#define ARIZONA_IN2_MODE_MASK 0x0600 /* IN2_MODE - [10:9] */
2259#define ARIZONA_IN2_MODE_SHIFT 9 /* IN2_MODE - [10:9] */
2260#define ARIZONA_IN2_MODE_WIDTH 2 /* IN2_MODE - [10:9] */
2261#define ARIZONA_IN2L_PGA_VOL_MASK 0x00FE /* IN2L_PGA_VOL - [7:1] */
2262#define ARIZONA_IN2L_PGA_VOL_SHIFT 1 /* IN2L_PGA_VOL - [7:1] */
2263#define ARIZONA_IN2L_PGA_VOL_WIDTH 7 /* IN2L_PGA_VOL - [7:1] */
2264
2265/*
2266 * R793 (0x319) - ADC Digital Volume 2L
2267 */
2268#define ARIZONA_IN_VU 0x0200 /* IN_VU */
2269#define ARIZONA_IN_VU_MASK 0x0200 /* IN_VU */
2270#define ARIZONA_IN_VU_SHIFT 9 /* IN_VU */
2271#define ARIZONA_IN_VU_WIDTH 1 /* IN_VU */
2272#define ARIZONA_IN2L_MUTE 0x0100 /* IN2L_MUTE */
2273#define ARIZONA_IN2L_MUTE_MASK 0x0100 /* IN2L_MUTE */
2274#define ARIZONA_IN2L_MUTE_SHIFT 8 /* IN2L_MUTE */
2275#define ARIZONA_IN2L_MUTE_WIDTH 1 /* IN2L_MUTE */
2276#define ARIZONA_IN2L_DIG_VOL_MASK 0x00FF /* IN2L_DIG_VOL - [7:0] */
2277#define ARIZONA_IN2L_DIG_VOL_SHIFT 0 /* IN2L_DIG_VOL - [7:0] */
2278#define ARIZONA_IN2L_DIG_VOL_WIDTH 8 /* IN2L_DIG_VOL - [7:0] */
2279
2280/*
2281 * R794 (0x31A) - DMIC2L Control
2282 */
2283#define ARIZONA_IN2_DMICL_DLY_MASK 0x003F /* IN2_DMICL_DLY - [5:0] */
2284#define ARIZONA_IN2_DMICL_DLY_SHIFT 0 /* IN2_DMICL_DLY - [5:0] */
2285#define ARIZONA_IN2_DMICL_DLY_WIDTH 6 /* IN2_DMICL_DLY - [5:0] */
2286
2287/*
2288 * R796 (0x31C) - IN2R Control
2289 */
2290#define ARIZONA_IN2R_PGA_VOL_MASK 0x00FE /* IN2R_PGA_VOL - [7:1] */
2291#define ARIZONA_IN2R_PGA_VOL_SHIFT 1 /* IN2R_PGA_VOL - [7:1] */
2292#define ARIZONA_IN2R_PGA_VOL_WIDTH 7 /* IN2R_PGA_VOL - [7:1] */
2293
2294/*
2295 * R797 (0x31D) - ADC Digital Volume 2R
2296 */
2297#define ARIZONA_IN_VU 0x0200 /* IN_VU */
2298#define ARIZONA_IN_VU_MASK 0x0200 /* IN_VU */
2299#define ARIZONA_IN_VU_SHIFT 9 /* IN_VU */
2300#define ARIZONA_IN_VU_WIDTH 1 /* IN_VU */
2301#define ARIZONA_IN2R_MUTE 0x0100 /* IN2R_MUTE */
2302#define ARIZONA_IN2R_MUTE_MASK 0x0100 /* IN2R_MUTE */
2303#define ARIZONA_IN2R_MUTE_SHIFT 8 /* IN2R_MUTE */
2304#define ARIZONA_IN2R_MUTE_WIDTH 1 /* IN2R_MUTE */
2305#define ARIZONA_IN2R_DIG_VOL_MASK 0x00FF /* IN2R_DIG_VOL - [7:0] */
2306#define ARIZONA_IN2R_DIG_VOL_SHIFT 0 /* IN2R_DIG_VOL - [7:0] */
2307#define ARIZONA_IN2R_DIG_VOL_WIDTH 8 /* IN2R_DIG_VOL - [7:0] */
2308
2309/*
2310 * R798 (0x31E) - DMIC2R Control
2311 */
2312#define ARIZONA_IN2_DMICR_DLY_MASK 0x003F /* IN2_DMICR_DLY - [5:0] */
2313#define ARIZONA_IN2_DMICR_DLY_SHIFT 0 /* IN2_DMICR_DLY - [5:0] */
2314#define ARIZONA_IN2_DMICR_DLY_WIDTH 6 /* IN2_DMICR_DLY - [5:0] */
2315
2316/*
2317 * R800 (0x320) - IN3L Control
2318 */
2319#define ARIZONA_IN3_OSR_MASK 0x6000 /* IN3_OSR - [14:13] */
2320#define ARIZONA_IN3_OSR_SHIFT 13 /* IN3_OSR - [14:13] */
2321#define ARIZONA_IN3_OSR_WIDTH 2 /* IN3_OSR - [14:13] */
2322#define ARIZONA_IN3_DMIC_SUP_MASK 0x1800 /* IN3_DMIC_SUP - [12:11] */
2323#define ARIZONA_IN3_DMIC_SUP_SHIFT 11 /* IN3_DMIC_SUP - [12:11] */
2324#define ARIZONA_IN3_DMIC_SUP_WIDTH 2 /* IN3_DMIC_SUP - [12:11] */
2325#define ARIZONA_IN3_MODE_MASK 0x0600 /* IN3_MODE - [10:9] */
2326#define ARIZONA_IN3_MODE_SHIFT 9 /* IN3_MODE - [10:9] */
2327#define ARIZONA_IN3_MODE_WIDTH 2 /* IN3_MODE - [10:9] */
2328#define ARIZONA_IN3L_PGA_VOL_MASK 0x00FE /* IN3L_PGA_VOL - [7:1] */
2329#define ARIZONA_IN3L_PGA_VOL_SHIFT 1 /* IN3L_PGA_VOL - [7:1] */
2330#define ARIZONA_IN3L_PGA_VOL_WIDTH 7 /* IN3L_PGA_VOL - [7:1] */
2331
2332/*
2333 * R801 (0x321) - ADC Digital Volume 3L
2334 */
2335#define ARIZONA_IN_VU 0x0200 /* IN_VU */
2336#define ARIZONA_IN_VU_MASK 0x0200 /* IN_VU */
2337#define ARIZONA_IN_VU_SHIFT 9 /* IN_VU */
2338#define ARIZONA_IN_VU_WIDTH 1 /* IN_VU */
2339#define ARIZONA_IN3L_MUTE 0x0100 /* IN3L_MUTE */
2340#define ARIZONA_IN3L_MUTE_MASK 0x0100 /* IN3L_MUTE */
2341#define ARIZONA_IN3L_MUTE_SHIFT 8 /* IN3L_MUTE */
2342#define ARIZONA_IN3L_MUTE_WIDTH 1 /* IN3L_MUTE */
2343#define ARIZONA_IN3L_DIG_VOL_MASK 0x00FF /* IN3L_DIG_VOL - [7:0] */
2344#define ARIZONA_IN3L_DIG_VOL_SHIFT 0 /* IN3L_DIG_VOL - [7:0] */
2345#define ARIZONA_IN3L_DIG_VOL_WIDTH 8 /* IN3L_DIG_VOL - [7:0] */
2346
2347/*
2348 * R802 (0x322) - DMIC3L Control
2349 */
2350#define ARIZONA_IN3_DMICL_DLY_MASK 0x003F /* IN3_DMICL_DLY - [5:0] */
2351#define ARIZONA_IN3_DMICL_DLY_SHIFT 0 /* IN3_DMICL_DLY - [5:0] */
2352#define ARIZONA_IN3_DMICL_DLY_WIDTH 6 /* IN3_DMICL_DLY - [5:0] */
2353
2354/*
2355 * R804 (0x324) - IN3R Control
2356 */
2357#define ARIZONA_IN3R_PGA_VOL_MASK 0x00FE /* IN3R_PGA_VOL - [7:1] */
2358#define ARIZONA_IN3R_PGA_VOL_SHIFT 1 /* IN3R_PGA_VOL - [7:1] */
2359#define ARIZONA_IN3R_PGA_VOL_WIDTH 7 /* IN3R_PGA_VOL - [7:1] */
2360
2361/*
2362 * R805 (0x325) - ADC Digital Volume 3R
2363 */
2364#define ARIZONA_IN_VU 0x0200 /* IN_VU */
2365#define ARIZONA_IN_VU_MASK 0x0200 /* IN_VU */
2366#define ARIZONA_IN_VU_SHIFT 9 /* IN_VU */
2367#define ARIZONA_IN_VU_WIDTH 1 /* IN_VU */
2368#define ARIZONA_IN3R_MUTE 0x0100 /* IN3R_MUTE */
2369#define ARIZONA_IN3R_MUTE_MASK 0x0100 /* IN3R_MUTE */
2370#define ARIZONA_IN3R_MUTE_SHIFT 8 /* IN3R_MUTE */
2371#define ARIZONA_IN3R_MUTE_WIDTH 1 /* IN3R_MUTE */
2372#define ARIZONA_IN3R_DIG_VOL_MASK 0x00FF /* IN3R_DIG_VOL - [7:0] */
2373#define ARIZONA_IN3R_DIG_VOL_SHIFT 0 /* IN3R_DIG_VOL - [7:0] */
2374#define ARIZONA_IN3R_DIG_VOL_WIDTH 8 /* IN3R_DIG_VOL - [7:0] */
2375
2376/*
2377 * R806 (0x326) - DMIC3R Control
2378 */
2379#define ARIZONA_IN3_DMICR_DLY_MASK 0x003F /* IN3_DMICR_DLY - [5:0] */
2380#define ARIZONA_IN3_DMICR_DLY_SHIFT 0 /* IN3_DMICR_DLY - [5:0] */
2381#define ARIZONA_IN3_DMICR_DLY_WIDTH 6 /* IN3_DMICR_DLY - [5:0] */
2382
2383/*
2384 * R808 (0x328) - IN4 Control
2385 */
2386#define ARIZONA_IN4_OSR_MASK 0x6000 /* IN4_OSR - [14:13] */
2387#define ARIZONA_IN4_OSR_SHIFT 13 /* IN4_OSR - [14:13] */
2388#define ARIZONA_IN4_OSR_WIDTH 2 /* IN4_OSR - [14:13] */
2389#define ARIZONA_IN4_DMIC_SUP_MASK 0x1800 /* IN4_DMIC_SUP - [12:11] */
2390#define ARIZONA_IN4_DMIC_SUP_SHIFT 11 /* IN4_DMIC_SUP - [12:11] */
2391#define ARIZONA_IN4_DMIC_SUP_WIDTH 2 /* IN4_DMIC_SUP - [12:11] */
2392
2393/*
2394 * R809 (0x329) - ADC Digital Volume 4L
2395 */
2396#define ARIZONA_IN_VU 0x0200 /* IN_VU */
2397#define ARIZONA_IN_VU_MASK 0x0200 /* IN_VU */
2398#define ARIZONA_IN_VU_SHIFT 9 /* IN_VU */
2399#define ARIZONA_IN_VU_WIDTH 1 /* IN_VU */
2400#define ARIZONA_IN4L_MUTE 0x0100 /* IN4L_MUTE */
2401#define ARIZONA_IN4L_MUTE_MASK 0x0100 /* IN4L_MUTE */
2402#define ARIZONA_IN4L_MUTE_SHIFT 8 /* IN4L_MUTE */
2403#define ARIZONA_IN4L_MUTE_WIDTH 1 /* IN4L_MUTE */
2404#define ARIZONA_IN4L_DIG_VOL_MASK 0x00FF /* IN4L_DIG_VOL - [7:0] */
2405#define ARIZONA_IN4L_DIG_VOL_SHIFT 0 /* IN4L_DIG_VOL - [7:0] */
2406#define ARIZONA_IN4L_DIG_VOL_WIDTH 8 /* IN4L_DIG_VOL - [7:0] */
2407
2408/*
2409 * R810 (0x32A) - DMIC4L Control
2410 */
2411#define ARIZONA_IN4L_DMIC_DLY_MASK 0x003F /* IN4L_DMIC_DLY - [5:0] */
2412#define ARIZONA_IN4L_DMIC_DLY_SHIFT 0 /* IN4L_DMIC_DLY - [5:0] */
2413#define ARIZONA_IN4L_DMIC_DLY_WIDTH 6 /* IN4L_DMIC_DLY - [5:0] */
2414
2415/*
2416 * R813 (0x32D) - ADC Digital Volume 4R
2417 */
2418#define ARIZONA_IN_VU 0x0200 /* IN_VU */
2419#define ARIZONA_IN_VU_MASK 0x0200 /* IN_VU */
2420#define ARIZONA_IN_VU_SHIFT 9 /* IN_VU */
2421#define ARIZONA_IN_VU_WIDTH 1 /* IN_VU */
2422#define ARIZONA_IN4R_MUTE 0x0100 /* IN4R_MUTE */
2423#define ARIZONA_IN4R_MUTE_MASK 0x0100 /* IN4R_MUTE */
2424#define ARIZONA_IN4R_MUTE_SHIFT 8 /* IN4R_MUTE */
2425#define ARIZONA_IN4R_MUTE_WIDTH 1 /* IN4R_MUTE */
2426#define ARIZONA_IN4R_DIG_VOL_MASK 0x00FF /* IN4R_DIG_VOL - [7:0] */
2427#define ARIZONA_IN4R_DIG_VOL_SHIFT 0 /* IN4R_DIG_VOL - [7:0] */
2428#define ARIZONA_IN4R_DIG_VOL_WIDTH 8 /* IN4R_DIG_VOL - [7:0] */
2429
2430/*
2431 * R814 (0x32E) - DMIC4R Control
2432 */
2433#define ARIZONA_IN4R_DMIC_DLY_MASK 0x003F /* IN4R_DMIC_DLY - [5:0] */
2434#define ARIZONA_IN4R_DMIC_DLY_SHIFT 0 /* IN4R_DMIC_DLY - [5:0] */
2435#define ARIZONA_IN4R_DMIC_DLY_WIDTH 6 /* IN4R_DMIC_DLY - [5:0] */
2436
2437/*
2438 * R1024 (0x400) - Output Enables 1
2439 */
2440#define ARIZONA_OUT6L_ENA 0x0800 /* OUT6L_ENA */
2441#define ARIZONA_OUT6L_ENA_MASK 0x0800 /* OUT6L_ENA */
2442#define ARIZONA_OUT6L_ENA_SHIFT 11 /* OUT6L_ENA */
2443#define ARIZONA_OUT6L_ENA_WIDTH 1 /* OUT6L_ENA */
2444#define ARIZONA_OUT6R_ENA 0x0400 /* OUT6R_ENA */
2445#define ARIZONA_OUT6R_ENA_MASK 0x0400 /* OUT6R_ENA */
2446#define ARIZONA_OUT6R_ENA_SHIFT 10 /* OUT6R_ENA */
2447#define ARIZONA_OUT6R_ENA_WIDTH 1 /* OUT6R_ENA */
2448#define ARIZONA_OUT5L_ENA 0x0200 /* OUT5L_ENA */
2449#define ARIZONA_OUT5L_ENA_MASK 0x0200 /* OUT5L_ENA */
2450#define ARIZONA_OUT5L_ENA_SHIFT 9 /* OUT5L_ENA */
2451#define ARIZONA_OUT5L_ENA_WIDTH 1 /* OUT5L_ENA */
2452#define ARIZONA_OUT5R_ENA 0x0100 /* OUT5R_ENA */
2453#define ARIZONA_OUT5R_ENA_MASK 0x0100 /* OUT5R_ENA */
2454#define ARIZONA_OUT5R_ENA_SHIFT 8 /* OUT5R_ENA */
2455#define ARIZONA_OUT5R_ENA_WIDTH 1 /* OUT5R_ENA */
2456#define ARIZONA_OUT4L_ENA 0x0080 /* OUT4L_ENA */
2457#define ARIZONA_OUT4L_ENA_MASK 0x0080 /* OUT4L_ENA */
2458#define ARIZONA_OUT4L_ENA_SHIFT 7 /* OUT4L_ENA */
2459#define ARIZONA_OUT4L_ENA_WIDTH 1 /* OUT4L_ENA */
2460#define ARIZONA_OUT4R_ENA 0x0040 /* OUT4R_ENA */
2461#define ARIZONA_OUT4R_ENA_MASK 0x0040 /* OUT4R_ENA */
2462#define ARIZONA_OUT4R_ENA_SHIFT 6 /* OUT4R_ENA */
2463#define ARIZONA_OUT4R_ENA_WIDTH 1 /* OUT4R_ENA */
2464#define ARIZONA_OUT3L_ENA 0x0020 /* OUT3L_ENA */
2465#define ARIZONA_OUT3L_ENA_MASK 0x0020 /* OUT3L_ENA */
2466#define ARIZONA_OUT3L_ENA_SHIFT 5 /* OUT3L_ENA */
2467#define ARIZONA_OUT3L_ENA_WIDTH 1 /* OUT3L_ENA */
2468#define ARIZONA_OUT3R_ENA 0x0010 /* OUT3R_ENA */
2469#define ARIZONA_OUT3R_ENA_MASK 0x0010 /* OUT3R_ENA */
2470#define ARIZONA_OUT3R_ENA_SHIFT 4 /* OUT3R_ENA */
2471#define ARIZONA_OUT3R_ENA_WIDTH 1 /* OUT3R_ENA */
2472#define ARIZONA_OUT2L_ENA 0x0008 /* OUT2L_ENA */
2473#define ARIZONA_OUT2L_ENA_MASK 0x0008 /* OUT2L_ENA */
2474#define ARIZONA_OUT2L_ENA_SHIFT 3 /* OUT2L_ENA */
2475#define ARIZONA_OUT2L_ENA_WIDTH 1 /* OUT2L_ENA */
2476#define ARIZONA_OUT2R_ENA 0x0004 /* OUT2R_ENA */
2477#define ARIZONA_OUT2R_ENA_MASK 0x0004 /* OUT2R_ENA */
2478#define ARIZONA_OUT2R_ENA_SHIFT 2 /* OUT2R_ENA */
2479#define ARIZONA_OUT2R_ENA_WIDTH 1 /* OUT2R_ENA */
2480#define ARIZONA_OUT1L_ENA 0x0002 /* OUT1L_ENA */
2481#define ARIZONA_OUT1L_ENA_MASK 0x0002 /* OUT1L_ENA */
2482#define ARIZONA_OUT1L_ENA_SHIFT 1 /* OUT1L_ENA */
2483#define ARIZONA_OUT1L_ENA_WIDTH 1 /* OUT1L_ENA */
2484#define ARIZONA_OUT1R_ENA 0x0001 /* OUT1R_ENA */
2485#define ARIZONA_OUT1R_ENA_MASK 0x0001 /* OUT1R_ENA */
2486#define ARIZONA_OUT1R_ENA_SHIFT 0 /* OUT1R_ENA */
2487#define ARIZONA_OUT1R_ENA_WIDTH 1 /* OUT1R_ENA */
2488
2489/*
2490 * R1025 (0x401) - Output Status 1
2491 */
2492#define ARIZONA_OUT6L_ENA_STS 0x0800 /* OUT6L_ENA_STS */
2493#define ARIZONA_OUT6L_ENA_STS_MASK 0x0800 /* OUT6L_ENA_STS */
2494#define ARIZONA_OUT6L_ENA_STS_SHIFT 11 /* OUT6L_ENA_STS */
2495#define ARIZONA_OUT6L_ENA_STS_WIDTH 1 /* OUT6L_ENA_STS */
2496#define ARIZONA_OUT6R_ENA_STS 0x0400 /* OUT6R_ENA_STS */
2497#define ARIZONA_OUT6R_ENA_STS_MASK 0x0400 /* OUT6R_ENA_STS */
2498#define ARIZONA_OUT6R_ENA_STS_SHIFT 10 /* OUT6R_ENA_STS */
2499#define ARIZONA_OUT6R_ENA_STS_WIDTH 1 /* OUT6R_ENA_STS */
2500#define ARIZONA_OUT5L_ENA_STS 0x0200 /* OUT5L_ENA_STS */
2501#define ARIZONA_OUT5L_ENA_STS_MASK 0x0200 /* OUT5L_ENA_STS */
2502#define ARIZONA_OUT5L_ENA_STS_SHIFT 9 /* OUT5L_ENA_STS */
2503#define ARIZONA_OUT5L_ENA_STS_WIDTH 1 /* OUT5L_ENA_STS */
2504#define ARIZONA_OUT5R_ENA_STS 0x0100 /* OUT5R_ENA_STS */
2505#define ARIZONA_OUT5R_ENA_STS_MASK 0x0100 /* OUT5R_ENA_STS */
2506#define ARIZONA_OUT5R_ENA_STS_SHIFT 8 /* OUT5R_ENA_STS */
2507#define ARIZONA_OUT5R_ENA_STS_WIDTH 1 /* OUT5R_ENA_STS */
2508#define ARIZONA_OUT4L_ENA_STS 0x0080 /* OUT4L_ENA_STS */
2509#define ARIZONA_OUT4L_ENA_STS_MASK 0x0080 /* OUT4L_ENA_STS */
2510#define ARIZONA_OUT4L_ENA_STS_SHIFT 7 /* OUT4L_ENA_STS */
2511#define ARIZONA_OUT4L_ENA_STS_WIDTH 1 /* OUT4L_ENA_STS */
2512#define ARIZONA_OUT4R_ENA_STS 0x0040 /* OUT4R_ENA_STS */
2513#define ARIZONA_OUT4R_ENA_STS_MASK 0x0040 /* OUT4R_ENA_STS */
2514#define ARIZONA_OUT4R_ENA_STS_SHIFT 6 /* OUT4R_ENA_STS */
2515#define ARIZONA_OUT4R_ENA_STS_WIDTH 1 /* OUT4R_ENA_STS */
2516
2517/*
2518 * R1032 (0x408) - Output Rate 1
2519 */
2520#define ARIZONA_OUT_RATE_MASK 0x7800 /* OUT_RATE - [14:11] */
2521#define ARIZONA_OUT_RATE_SHIFT 11 /* OUT_RATE - [14:11] */
2522#define ARIZONA_OUT_RATE_WIDTH 4 /* OUT_RATE - [14:11] */
2523
2524/*
2525 * R1033 (0x409) - Output Volume Ramp
2526 */
2527#define ARIZONA_OUT_VD_RAMP_MASK 0x0070 /* OUT_VD_RAMP - [6:4] */
2528#define ARIZONA_OUT_VD_RAMP_SHIFT 4 /* OUT_VD_RAMP - [6:4] */
2529#define ARIZONA_OUT_VD_RAMP_WIDTH 3 /* OUT_VD_RAMP - [6:4] */
2530#define ARIZONA_OUT_VI_RAMP_MASK 0x0007 /* OUT_VI_RAMP - [2:0] */
2531#define ARIZONA_OUT_VI_RAMP_SHIFT 0 /* OUT_VI_RAMP - [2:0] */
2532#define ARIZONA_OUT_VI_RAMP_WIDTH 3 /* OUT_VI_RAMP - [2:0] */
2533
2534/*
2535 * R1040 (0x410) - Output Path Config 1L
2536 */
2537#define ARIZONA_OUT1_LP_MODE 0x8000 /* OUT1_LP_MODE */
2538#define ARIZONA_OUT1_LP_MODE_MASK 0x8000 /* OUT1_LP_MODE */
2539#define ARIZONA_OUT1_LP_MODE_SHIFT 15 /* OUT1_LP_MODE */
2540#define ARIZONA_OUT1_LP_MODE_WIDTH 1 /* OUT1_LP_MODE */
2541#define ARIZONA_OUT1_OSR 0x2000 /* OUT1_OSR */
2542#define ARIZONA_OUT1_OSR_MASK 0x2000 /* OUT1_OSR */
2543#define ARIZONA_OUT1_OSR_SHIFT 13 /* OUT1_OSR */
2544#define ARIZONA_OUT1_OSR_WIDTH 1 /* OUT1_OSR */
2545#define ARIZONA_OUT1_MONO 0x1000 /* OUT1_MONO */
2546#define ARIZONA_OUT1_MONO_MASK 0x1000 /* OUT1_MONO */
2547#define ARIZONA_OUT1_MONO_SHIFT 12 /* OUT1_MONO */
2548#define ARIZONA_OUT1_MONO_WIDTH 1 /* OUT1_MONO */
2549#define ARIZONA_OUT1L_ANC_SRC_MASK 0x0C00 /* OUT1L_ANC_SRC - [11:10] */
2550#define ARIZONA_OUT1L_ANC_SRC_SHIFT 10 /* OUT1L_ANC_SRC - [11:10] */
2551#define ARIZONA_OUT1L_ANC_SRC_WIDTH 2 /* OUT1L_ANC_SRC - [11:10] */
2552#define ARIZONA_OUT1L_PGA_VOL_MASK 0x00FE /* OUT1L_PGA_VOL - [7:1] */
2553#define ARIZONA_OUT1L_PGA_VOL_SHIFT 1 /* OUT1L_PGA_VOL - [7:1] */
2554#define ARIZONA_OUT1L_PGA_VOL_WIDTH 7 /* OUT1L_PGA_VOL - [7:1] */
2555
2556/*
2557 * R1041 (0x411) - DAC Digital Volume 1L
2558 */
2559#define ARIZONA_OUT_VU 0x0200 /* OUT_VU */
2560#define ARIZONA_OUT_VU_MASK 0x0200 /* OUT_VU */
2561#define ARIZONA_OUT_VU_SHIFT 9 /* OUT_VU */
2562#define ARIZONA_OUT_VU_WIDTH 1 /* OUT_VU */
2563#define ARIZONA_OUT1L_MUTE 0x0100 /* OUT1L_MUTE */
2564#define ARIZONA_OUT1L_MUTE_MASK 0x0100 /* OUT1L_MUTE */
2565#define ARIZONA_OUT1L_MUTE_SHIFT 8 /* OUT1L_MUTE */
2566#define ARIZONA_OUT1L_MUTE_WIDTH 1 /* OUT1L_MUTE */
2567#define ARIZONA_OUT1L_VOL_MASK 0x00FF /* OUT1L_VOL - [7:0] */
2568#define ARIZONA_OUT1L_VOL_SHIFT 0 /* OUT1L_VOL - [7:0] */
2569#define ARIZONA_OUT1L_VOL_WIDTH 8 /* OUT1L_VOL - [7:0] */
2570
2571/*
2572 * R1042 (0x412) - DAC Volume Limit 1L
2573 */
2574#define ARIZONA_OUT1L_VOL_LIM_MASK 0x00FF /* OUT1L_VOL_LIM - [7:0] */
2575#define ARIZONA_OUT1L_VOL_LIM_SHIFT 0 /* OUT1L_VOL_LIM - [7:0] */
2576#define ARIZONA_OUT1L_VOL_LIM_WIDTH 8 /* OUT1L_VOL_LIM - [7:0] */
2577
2578/*
2579 * R1043 (0x413) - Noise Gate Select 1L
2580 */
2581#define ARIZONA_OUT1L_NGATE_SRC_MASK 0x0FFF /* OUT1L_NGATE_SRC - [11:0] */
2582#define ARIZONA_OUT1L_NGATE_SRC_SHIFT 0 /* OUT1L_NGATE_SRC - [11:0] */
2583#define ARIZONA_OUT1L_NGATE_SRC_WIDTH 12 /* OUT1L_NGATE_SRC - [11:0] */
2584
2585/*
2586 * R1044 (0x414) - Output Path Config 1R
2587 */
2588#define ARIZONA_OUT1R_ANC_SRC_MASK 0x0C00 /* OUT1R_ANC_SRC - [11:10] */
2589#define ARIZONA_OUT1R_ANC_SRC_SHIFT 10 /* OUT1R_ANC_SRC - [11:10] */
2590#define ARIZONA_OUT1R_ANC_SRC_WIDTH 2 /* OUT1R_ANC_SRC - [11:10] */
2591#define ARIZONA_OUT1R_PGA_VOL_MASK 0x00FE /* OUT1R_PGA_VOL - [7:1] */
2592#define ARIZONA_OUT1R_PGA_VOL_SHIFT 1 /* OUT1R_PGA_VOL - [7:1] */
2593#define ARIZONA_OUT1R_PGA_VOL_WIDTH 7 /* OUT1R_PGA_VOL - [7:1] */
2594
2595/*
2596 * R1045 (0x415) - DAC Digital Volume 1R
2597 */
2598#define ARIZONA_OUT_VU 0x0200 /* OUT_VU */
2599#define ARIZONA_OUT_VU_MASK 0x0200 /* OUT_VU */
2600#define ARIZONA_OUT_VU_SHIFT 9 /* OUT_VU */
2601#define ARIZONA_OUT_VU_WIDTH 1 /* OUT_VU */
2602#define ARIZONA_OUT1R_MUTE 0x0100 /* OUT1R_MUTE */
2603#define ARIZONA_OUT1R_MUTE_MASK 0x0100 /* OUT1R_MUTE */
2604#define ARIZONA_OUT1R_MUTE_SHIFT 8 /* OUT1R_MUTE */
2605#define ARIZONA_OUT1R_MUTE_WIDTH 1 /* OUT1R_MUTE */
2606#define ARIZONA_OUT1R_VOL_MASK 0x00FF /* OUT1R_VOL - [7:0] */
2607#define ARIZONA_OUT1R_VOL_SHIFT 0 /* OUT1R_VOL - [7:0] */
2608#define ARIZONA_OUT1R_VOL_WIDTH 8 /* OUT1R_VOL - [7:0] */
2609
2610/*
2611 * R1046 (0x416) - DAC Volume Limit 1R
2612 */
2613#define ARIZONA_OUT1R_VOL_LIM_MASK 0x00FF /* OUT1R_VOL_LIM - [7:0] */
2614#define ARIZONA_OUT1R_VOL_LIM_SHIFT 0 /* OUT1R_VOL_LIM - [7:0] */
2615#define ARIZONA_OUT1R_VOL_LIM_WIDTH 8 /* OUT1R_VOL_LIM - [7:0] */
2616
2617/*
2618 * R1047 (0x417) - Noise Gate Select 1R
2619 */
2620#define ARIZONA_OUT1R_NGATE_SRC_MASK 0x0FFF /* OUT1R_NGATE_SRC - [11:0] */
2621#define ARIZONA_OUT1R_NGATE_SRC_SHIFT 0 /* OUT1R_NGATE_SRC - [11:0] */
2622#define ARIZONA_OUT1R_NGATE_SRC_WIDTH 12 /* OUT1R_NGATE_SRC - [11:0] */
2623
2624/*
2625 * R1048 (0x418) - Output Path Config 2L
2626 */
2627#define ARIZONA_OUT2_LP_MODE 0x8000 /* OUT2_LP_MODE */
2628#define ARIZONA_OUT2_LP_MODE_MASK 0x8000 /* OUT2_LP_MODE */
2629#define ARIZONA_OUT2_LP_MODE_SHIFT 15 /* OUT2_LP_MODE */
2630#define ARIZONA_OUT2_LP_MODE_WIDTH 1 /* OUT2_LP_MODE */
2631#define ARIZONA_OUT2_OSR 0x2000 /* OUT2_OSR */
2632#define ARIZONA_OUT2_OSR_MASK 0x2000 /* OUT2_OSR */
2633#define ARIZONA_OUT2_OSR_SHIFT 13 /* OUT2_OSR */
2634#define ARIZONA_OUT2_OSR_WIDTH 1 /* OUT2_OSR */
2635#define ARIZONA_OUT2_MONO 0x1000 /* OUT2_MONO */
2636#define ARIZONA_OUT2_MONO_MASK 0x1000 /* OUT2_MONO */
2637#define ARIZONA_OUT2_MONO_SHIFT 12 /* OUT2_MONO */
2638#define ARIZONA_OUT2_MONO_WIDTH 1 /* OUT2_MONO */
2639#define ARIZONA_OUT2L_ANC_SRC_MASK 0x0C00 /* OUT2L_ANC_SRC - [11:10] */
2640#define ARIZONA_OUT2L_ANC_SRC_SHIFT 10 /* OUT2L_ANC_SRC - [11:10] */
2641#define ARIZONA_OUT2L_ANC_SRC_WIDTH 2 /* OUT2L_ANC_SRC - [11:10] */
2642#define ARIZONA_OUT2L_PGA_VOL_MASK 0x00FE /* OUT2L_PGA_VOL - [7:1] */
2643#define ARIZONA_OUT2L_PGA_VOL_SHIFT 1 /* OUT2L_PGA_VOL - [7:1] */
2644#define ARIZONA_OUT2L_PGA_VOL_WIDTH 7 /* OUT2L_PGA_VOL - [7:1] */
2645
2646/*
2647 * R1049 (0x419) - DAC Digital Volume 2L
2648 */
2649#define ARIZONA_OUT_VU 0x0200 /* OUT_VU */
2650#define ARIZONA_OUT_VU_MASK 0x0200 /* OUT_VU */
2651#define ARIZONA_OUT_VU_SHIFT 9 /* OUT_VU */
2652#define ARIZONA_OUT_VU_WIDTH 1 /* OUT_VU */
2653#define ARIZONA_OUT2L_MUTE 0x0100 /* OUT2L_MUTE */
2654#define ARIZONA_OUT2L_MUTE_MASK 0x0100 /* OUT2L_MUTE */
2655#define ARIZONA_OUT2L_MUTE_SHIFT 8 /* OUT2L_MUTE */
2656#define ARIZONA_OUT2L_MUTE_WIDTH 1 /* OUT2L_MUTE */
2657#define ARIZONA_OUT2L_VOL_MASK 0x00FF /* OUT2L_VOL - [7:0] */
2658#define ARIZONA_OUT2L_VOL_SHIFT 0 /* OUT2L_VOL - [7:0] */
2659#define ARIZONA_OUT2L_VOL_WIDTH 8 /* OUT2L_VOL - [7:0] */
2660
2661/*
2662 * R1050 (0x41A) - DAC Volume Limit 2L
2663 */
2664#define ARIZONA_OUT2L_VOL_LIM_MASK 0x00FF /* OUT2L_VOL_LIM - [7:0] */
2665#define ARIZONA_OUT2L_VOL_LIM_SHIFT 0 /* OUT2L_VOL_LIM - [7:0] */
2666#define ARIZONA_OUT2L_VOL_LIM_WIDTH 8 /* OUT2L_VOL_LIM - [7:0] */
2667
2668/*
2669 * R1051 (0x41B) - Noise Gate Select 2L
2670 */
2671#define ARIZONA_OUT2L_NGATE_SRC_MASK 0x0FFF /* OUT2L_NGATE_SRC - [11:0] */
2672#define ARIZONA_OUT2L_NGATE_SRC_SHIFT 0 /* OUT2L_NGATE_SRC - [11:0] */
2673#define ARIZONA_OUT2L_NGATE_SRC_WIDTH 12 /* OUT2L_NGATE_SRC - [11:0] */
2674
2675/*
2676 * R1052 (0x41C) - Output Path Config 2R
2677 */
2678#define ARIZONA_OUT2R_ANC_SRC_MASK 0x0C00 /* OUT2R_ANC_SRC - [11:10] */
2679#define ARIZONA_OUT2R_ANC_SRC_SHIFT 10 /* OUT2R_ANC_SRC - [11:10] */
2680#define ARIZONA_OUT2R_ANC_SRC_WIDTH 2 /* OUT2R_ANC_SRC - [11:10] */
2681#define ARIZONA_OUT2R_PGA_VOL_MASK 0x00FE /* OUT2R_PGA_VOL - [7:1] */
2682#define ARIZONA_OUT2R_PGA_VOL_SHIFT 1 /* OUT2R_PGA_VOL - [7:1] */
2683#define ARIZONA_OUT2R_PGA_VOL_WIDTH 7 /* OUT2R_PGA_VOL - [7:1] */
2684
2685/*
2686 * R1053 (0x41D) - DAC Digital Volume 2R
2687 */
2688#define ARIZONA_OUT_VU 0x0200 /* OUT_VU */
2689#define ARIZONA_OUT_VU_MASK 0x0200 /* OUT_VU */
2690#define ARIZONA_OUT_VU_SHIFT 9 /* OUT_VU */
2691#define ARIZONA_OUT_VU_WIDTH 1 /* OUT_VU */
2692#define ARIZONA_OUT2R_MUTE 0x0100 /* OUT2R_MUTE */
2693#define ARIZONA_OUT2R_MUTE_MASK 0x0100 /* OUT2R_MUTE */
2694#define ARIZONA_OUT2R_MUTE_SHIFT 8 /* OUT2R_MUTE */
2695#define ARIZONA_OUT2R_MUTE_WIDTH 1 /* OUT2R_MUTE */
2696#define ARIZONA_OUT2R_VOL_MASK 0x00FF /* OUT2R_VOL - [7:0] */
2697#define ARIZONA_OUT2R_VOL_SHIFT 0 /* OUT2R_VOL - [7:0] */
2698#define ARIZONA_OUT2R_VOL_WIDTH 8 /* OUT2R_VOL - [7:0] */
2699
2700/*
2701 * R1054 (0x41E) - DAC Volume Limit 2R
2702 */
2703#define ARIZONA_OUT2R_VOL_LIM_MASK 0x00FF /* OUT2R_VOL_LIM - [7:0] */
2704#define ARIZONA_OUT2R_VOL_LIM_SHIFT 0 /* OUT2R_VOL_LIM - [7:0] */
2705#define ARIZONA_OUT2R_VOL_LIM_WIDTH 8 /* OUT2R_VOL_LIM - [7:0] */
2706
2707/*
2708 * R1055 (0x41F) - Noise Gate Select 2R
2709 */
2710#define ARIZONA_OUT2R_NGATE_SRC_MASK 0x0FFF /* OUT2R_NGATE_SRC - [11:0] */
2711#define ARIZONA_OUT2R_NGATE_SRC_SHIFT 0 /* OUT2R_NGATE_SRC - [11:0] */
2712#define ARIZONA_OUT2R_NGATE_SRC_WIDTH 12 /* OUT2R_NGATE_SRC - [11:0] */
2713
2714/*
2715 * R1056 (0x420) - Output Path Config 3L
2716 */
2717#define ARIZONA_OUT3_LP_MODE 0x8000 /* OUT3_LP_MODE */
2718#define ARIZONA_OUT3_LP_MODE_MASK 0x8000 /* OUT3_LP_MODE */
2719#define ARIZONA_OUT3_LP_MODE_SHIFT 15 /* OUT3_LP_MODE */
2720#define ARIZONA_OUT3_LP_MODE_WIDTH 1 /* OUT3_LP_MODE */
2721#define ARIZONA_OUT3_OSR 0x2000 /* OUT3_OSR */
2722#define ARIZONA_OUT3_OSR_MASK 0x2000 /* OUT3_OSR */
2723#define ARIZONA_OUT3_OSR_SHIFT 13 /* OUT3_OSR */
2724#define ARIZONA_OUT3_OSR_WIDTH 1 /* OUT3_OSR */
2725#define ARIZONA_OUT3_MONO 0x1000 /* OUT3_MONO */
2726#define ARIZONA_OUT3_MONO_MASK 0x1000 /* OUT3_MONO */
2727#define ARIZONA_OUT3_MONO_SHIFT 12 /* OUT3_MONO */
2728#define ARIZONA_OUT3_MONO_WIDTH 1 /* OUT3_MONO */
2729#define ARIZONA_OUT3L_ANC_SRC_MASK 0x0C00 /* OUT3L_ANC_SRC - [11:10] */
2730#define ARIZONA_OUT3L_ANC_SRC_SHIFT 10 /* OUT3L_ANC_SRC - [11:10] */
2731#define ARIZONA_OUT3L_ANC_SRC_WIDTH 2 /* OUT3L_ANC_SRC - [11:10] */
2732#define ARIZONA_OUT3L_PGA_VOL_MASK 0x00FE /* OUT3L_PGA_VOL - [7:1] */
2733#define ARIZONA_OUT3L_PGA_VOL_SHIFT 1 /* OUT3L_PGA_VOL - [7:1] */
2734#define ARIZONA_OUT3L_PGA_VOL_WIDTH 7 /* OUT3L_PGA_VOL - [7:1] */
2735
2736/*
2737 * R1057 (0x421) - DAC Digital Volume 3L
2738 */
2739#define ARIZONA_OUT_VU 0x0200 /* OUT_VU */
2740#define ARIZONA_OUT_VU_MASK 0x0200 /* OUT_VU */
2741#define ARIZONA_OUT_VU_SHIFT 9 /* OUT_VU */
2742#define ARIZONA_OUT_VU_WIDTH 1 /* OUT_VU */
2743#define ARIZONA_OUT3L_MUTE 0x0100 /* OUT3L_MUTE */
2744#define ARIZONA_OUT3L_MUTE_MASK 0x0100 /* OUT3L_MUTE */
2745#define ARIZONA_OUT3L_MUTE_SHIFT 8 /* OUT3L_MUTE */
2746#define ARIZONA_OUT3L_MUTE_WIDTH 1 /* OUT3L_MUTE */
2747#define ARIZONA_OUT3L_VOL_MASK 0x00FF /* OUT3L_VOL - [7:0] */
2748#define ARIZONA_OUT3L_VOL_SHIFT 0 /* OUT3L_VOL - [7:0] */
2749#define ARIZONA_OUT3L_VOL_WIDTH 8 /* OUT3L_VOL - [7:0] */
2750
2751/*
2752 * R1058 (0x422) - DAC Volume Limit 3L
2753 */
2754#define ARIZONA_OUT3L_VOL_LIM_MASK 0x00FF /* OUT3L_VOL_LIM - [7:0] */
2755#define ARIZONA_OUT3L_VOL_LIM_SHIFT 0 /* OUT3L_VOL_LIM - [7:0] */
2756#define ARIZONA_OUT3L_VOL_LIM_WIDTH 8 /* OUT3L_VOL_LIM - [7:0] */
2757
2758/*
2759 * R1059 (0x423) - Noise Gate Select 3L
2760 */
2761#define ARIZONA_OUT3_NGATE_SRC_MASK 0x0FFF /* OUT3_NGATE_SRC - [11:0] */
2762#define ARIZONA_OUT3_NGATE_SRC_SHIFT 0 /* OUT3_NGATE_SRC - [11:0] */
2763#define ARIZONA_OUT3_NGATE_SRC_WIDTH 12 /* OUT3_NGATE_SRC - [11:0] */
2764
2765/*
2766 * R1060 (0x424) - Output Path Config 3R
2767 */
2768#define ARIZONA_OUT3R_PGA_VOL_MASK 0x00FE /* OUT3R_PGA_VOL - [7:1] */
2769#define ARIZONA_OUT3R_PGA_VOL_SHIFT 1 /* OUT3R_PGA_VOL - [7:1] */
2770#define ARIZONA_OUT3R_PGA_VOL_WIDTH 7 /* OUT3R_PGA_VOL - [7:1] */
2771
2772/*
2773 * R1061 (0x425) - DAC Digital Volume 3R
2774 */
2775#define ARIZONA_OUT_VU 0x0200 /* OUT_VU */
2776#define ARIZONA_OUT_VU_MASK 0x0200 /* OUT_VU */
2777#define ARIZONA_OUT_VU_SHIFT 9 /* OUT_VU */
2778#define ARIZONA_OUT_VU_WIDTH 1 /* OUT_VU */
2779#define ARIZONA_OUT3R_MUTE 0x0100 /* OUT3R_MUTE */
2780#define ARIZONA_OUT3R_MUTE_MASK 0x0100 /* OUT3R_MUTE */
2781#define ARIZONA_OUT3R_MUTE_SHIFT 8 /* OUT3R_MUTE */
2782#define ARIZONA_OUT3R_MUTE_WIDTH 1 /* OUT3R_MUTE */
2783#define ARIZONA_OUT3R_VOL_MASK 0x00FF /* OUT3R_VOL - [7:0] */
2784#define ARIZONA_OUT3R_VOL_SHIFT 0 /* OUT3R_VOL - [7:0] */
2785#define ARIZONA_OUT3R_VOL_WIDTH 8 /* OUT3R_VOL - [7:0] */
2786
2787/*
2788 * R1062 (0x426) - DAC Volume Limit 3R
2789 */
2790#define ARIZONA_OUT3R_ANC_SRC_MASK 0x0C00 /* OUT3R_ANC_SRC - [11:10] */
2791#define ARIZONA_OUT3R_ANC_SRC_SHIFT 10 /* OUT3R_ANC_SRC - [11:10] */
2792#define ARIZONA_OUT3R_ANC_SRC_WIDTH 2 /* OUT3R_ANC_SRC - [11:10] */
2793#define ARIZONA_OUT3R_VOL_LIM_MASK 0x00FF /* OUT3R_VOL_LIM - [7:0] */
2794#define ARIZONA_OUT3R_VOL_LIM_SHIFT 0 /* OUT3R_VOL_LIM - [7:0] */
2795#define ARIZONA_OUT3R_VOL_LIM_WIDTH 8 /* OUT3R_VOL_LIM - [7:0] */
2796
2797/*
2798 * R1064 (0x428) - Output Path Config 4L
2799 */
2800#define ARIZONA_OUT4_OSR 0x2000 /* OUT4_OSR */
2801#define ARIZONA_OUT4_OSR_MASK 0x2000 /* OUT4_OSR */
2802#define ARIZONA_OUT4_OSR_SHIFT 13 /* OUT4_OSR */
2803#define ARIZONA_OUT4_OSR_WIDTH 1 /* OUT4_OSR */
2804#define ARIZONA_OUT4L_ANC_SRC_MASK 0x0C00 /* OUT4L_ANC_SRC - [11:10] */
2805#define ARIZONA_OUT4L_ANC_SRC_SHIFT 10 /* OUT4L_ANC_SRC - [11:10] */
2806#define ARIZONA_OUT4L_ANC_SRC_WIDTH 2 /* OUT4L_ANC_SRC - [11:10] */
2807
2808/*
2809 * R1065 (0x429) - DAC Digital Volume 4L
2810 */
2811#define ARIZONA_OUT_VU 0x0200 /* OUT_VU */
2812#define ARIZONA_OUT_VU_MASK 0x0200 /* OUT_VU */
2813#define ARIZONA_OUT_VU_SHIFT 9 /* OUT_VU */
2814#define ARIZONA_OUT_VU_WIDTH 1 /* OUT_VU */
2815#define ARIZONA_OUT4L_MUTE 0x0100 /* OUT4L_MUTE */
2816#define ARIZONA_OUT4L_MUTE_MASK 0x0100 /* OUT4L_MUTE */
2817#define ARIZONA_OUT4L_MUTE_SHIFT 8 /* OUT4L_MUTE */
2818#define ARIZONA_OUT4L_MUTE_WIDTH 1 /* OUT4L_MUTE */
2819#define ARIZONA_OUT4L_VOL_MASK 0x00FF /* OUT4L_VOL - [7:0] */
2820#define ARIZONA_OUT4L_VOL_SHIFT 0 /* OUT4L_VOL - [7:0] */
2821#define ARIZONA_OUT4L_VOL_WIDTH 8 /* OUT4L_VOL - [7:0] */
2822
2823/*
2824 * R1066 (0x42A) - Out Volume 4L
2825 */
2826#define ARIZONA_OUT4L_VOL_LIM_MASK 0x00FF /* OUT4L_VOL_LIM - [7:0] */
2827#define ARIZONA_OUT4L_VOL_LIM_SHIFT 0 /* OUT4L_VOL_LIM - [7:0] */
2828#define ARIZONA_OUT4L_VOL_LIM_WIDTH 8 /* OUT4L_VOL_LIM - [7:0] */
2829
2830/*
2831 * R1067 (0x42B) - Noise Gate Select 4L
2832 */
2833#define ARIZONA_OUT4L_NGATE_SRC_MASK 0x0FFF /* OUT4L_NGATE_SRC - [11:0] */
2834#define ARIZONA_OUT4L_NGATE_SRC_SHIFT 0 /* OUT4L_NGATE_SRC - [11:0] */
2835#define ARIZONA_OUT4L_NGATE_SRC_WIDTH 12 /* OUT4L_NGATE_SRC - [11:0] */
2836
2837/*
2838 * R1068 (0x42C) - Output Path Config 4R
2839 */
2840#define ARIZONA_OUT4R_ANC_SRC_MASK 0x0C00 /* OUT4R_ANC_SRC - [11:10] */
2841#define ARIZONA_OUT4R_ANC_SRC_SHIFT 10 /* OUT4R_ANC_SRC - [11:10] */
2842#define ARIZONA_OUT4R_ANC_SRC_WIDTH 2 /* OUT4R_ANC_SRC - [11:10] */
2843
2844/*
2845 * R1069 (0x42D) - DAC Digital Volume 4R
2846 */
2847#define ARIZONA_OUT_VU 0x0200 /* OUT_VU */
2848#define ARIZONA_OUT_VU_MASK 0x0200 /* OUT_VU */
2849#define ARIZONA_OUT_VU_SHIFT 9 /* OUT_VU */
2850#define ARIZONA_OUT_VU_WIDTH 1 /* OUT_VU */
2851#define ARIZONA_OUT4R_MUTE 0x0100 /* OUT4R_MUTE */
2852#define ARIZONA_OUT4R_MUTE_MASK 0x0100 /* OUT4R_MUTE */
2853#define ARIZONA_OUT4R_MUTE_SHIFT 8 /* OUT4R_MUTE */
2854#define ARIZONA_OUT4R_MUTE_WIDTH 1 /* OUT4R_MUTE */
2855#define ARIZONA_OUT4R_VOL_MASK 0x00FF /* OUT4R_VOL - [7:0] */
2856#define ARIZONA_OUT4R_VOL_SHIFT 0 /* OUT4R_VOL - [7:0] */
2857#define ARIZONA_OUT4R_VOL_WIDTH 8 /* OUT4R_VOL - [7:0] */
2858
2859/*
2860 * R1070 (0x42E) - Out Volume 4R
2861 */
2862#define ARIZONA_OUT4R_VOL_LIM_MASK 0x00FF /* OUT4R_VOL_LIM - [7:0] */
2863#define ARIZONA_OUT4R_VOL_LIM_SHIFT 0 /* OUT4R_VOL_LIM - [7:0] */
2864#define ARIZONA_OUT4R_VOL_LIM_WIDTH 8 /* OUT4R_VOL_LIM - [7:0] */
2865
2866/*
2867 * R1071 (0x42F) - Noise Gate Select 4R
2868 */
2869#define ARIZONA_OUT4R_NGATE_SRC_MASK 0x0FFF /* OUT4R_NGATE_SRC - [11:0] */
2870#define ARIZONA_OUT4R_NGATE_SRC_SHIFT 0 /* OUT4R_NGATE_SRC - [11:0] */
2871#define ARIZONA_OUT4R_NGATE_SRC_WIDTH 12 /* OUT4R_NGATE_SRC - [11:0] */
2872
2873/*
2874 * R1072 (0x430) - Output Path Config 5L
2875 */
2876#define ARIZONA_OUT5_OSR 0x2000 /* OUT5_OSR */
2877#define ARIZONA_OUT5_OSR_MASK 0x2000 /* OUT5_OSR */
2878#define ARIZONA_OUT5_OSR_SHIFT 13 /* OUT5_OSR */
2879#define ARIZONA_OUT5_OSR_WIDTH 1 /* OUT5_OSR */
2880#define ARIZONA_OUT5L_ANC_SRC_MASK 0x0C00 /* OUT5L_ANC_SRC - [11:10] */
2881#define ARIZONA_OUT5L_ANC_SRC_SHIFT 10 /* OUT5L_ANC_SRC - [11:10] */
2882#define ARIZONA_OUT5L_ANC_SRC_WIDTH 2 /* OUT5L_ANC_SRC - [11:10] */
2883
2884/*
2885 * R1073 (0x431) - DAC Digital Volume 5L
2886 */
2887#define ARIZONA_OUT_VU 0x0200 /* OUT_VU */
2888#define ARIZONA_OUT_VU_MASK 0x0200 /* OUT_VU */
2889#define ARIZONA_OUT_VU_SHIFT 9 /* OUT_VU */
2890#define ARIZONA_OUT_VU_WIDTH 1 /* OUT_VU */
2891#define ARIZONA_OUT5L_MUTE 0x0100 /* OUT5L_MUTE */
2892#define ARIZONA_OUT5L_MUTE_MASK 0x0100 /* OUT5L_MUTE */
2893#define ARIZONA_OUT5L_MUTE_SHIFT 8 /* OUT5L_MUTE */
2894#define ARIZONA_OUT5L_MUTE_WIDTH 1 /* OUT5L_MUTE */
2895#define ARIZONA_OUT5L_VOL_MASK 0x00FF /* OUT5L_VOL - [7:0] */
2896#define ARIZONA_OUT5L_VOL_SHIFT 0 /* OUT5L_VOL - [7:0] */
2897#define ARIZONA_OUT5L_VOL_WIDTH 8 /* OUT5L_VOL - [7:0] */
2898
2899/*
2900 * R1074 (0x432) - DAC Volume Limit 5L
2901 */
2902#define ARIZONA_OUT5L_VOL_LIM_MASK 0x00FF /* OUT5L_VOL_LIM - [7:0] */
2903#define ARIZONA_OUT5L_VOL_LIM_SHIFT 0 /* OUT5L_VOL_LIM - [7:0] */
2904#define ARIZONA_OUT5L_VOL_LIM_WIDTH 8 /* OUT5L_VOL_LIM - [7:0] */
2905
2906/*
2907 * R1075 (0x433) - Noise Gate Select 5L
2908 */
2909#define ARIZONA_OUT5L_NGATE_SRC_MASK 0x0FFF /* OUT5L_NGATE_SRC - [11:0] */
2910#define ARIZONA_OUT5L_NGATE_SRC_SHIFT 0 /* OUT5L_NGATE_SRC - [11:0] */
2911#define ARIZONA_OUT5L_NGATE_SRC_WIDTH 12 /* OUT5L_NGATE_SRC - [11:0] */
2912
2913/*
2914 * R1076 (0x434) - Output Path Config 5R
2915 */
2916#define ARIZONA_OUT5R_ANC_SRC_MASK 0x0C00 /* OUT5R_ANC_SRC - [11:10] */
2917#define ARIZONA_OUT5R_ANC_SRC_SHIFT 10 /* OUT5R_ANC_SRC - [11:10] */
2918#define ARIZONA_OUT5R_ANC_SRC_WIDTH 2 /* OUT5R_ANC_SRC - [11:10] */
2919
2920/*
2921 * R1077 (0x435) - DAC Digital Volume 5R
2922 */
2923#define ARIZONA_OUT_VU 0x0200 /* OUT_VU */
2924#define ARIZONA_OUT_VU_MASK 0x0200 /* OUT_VU */
2925#define ARIZONA_OUT_VU_SHIFT 9 /* OUT_VU */
2926#define ARIZONA_OUT_VU_WIDTH 1 /* OUT_VU */
2927#define ARIZONA_OUT5R_MUTE 0x0100 /* OUT5R_MUTE */
2928#define ARIZONA_OUT5R_MUTE_MASK 0x0100 /* OUT5R_MUTE */
2929#define ARIZONA_OUT5R_MUTE_SHIFT 8 /* OUT5R_MUTE */
2930#define ARIZONA_OUT5R_MUTE_WIDTH 1 /* OUT5R_MUTE */
2931#define ARIZONA_OUT5R_VOL_MASK 0x00FF /* OUT5R_VOL - [7:0] */
2932#define ARIZONA_OUT5R_VOL_SHIFT 0 /* OUT5R_VOL - [7:0] */
2933#define ARIZONA_OUT5R_VOL_WIDTH 8 /* OUT5R_VOL - [7:0] */
2934
2935/*
2936 * R1078 (0x436) - DAC Volume Limit 5R
2937 */
2938#define ARIZONA_OUT5R_VOL_LIM_MASK 0x00FF /* OUT5R_VOL_LIM - [7:0] */
2939#define ARIZONA_OUT5R_VOL_LIM_SHIFT 0 /* OUT5R_VOL_LIM - [7:0] */
2940#define ARIZONA_OUT5R_VOL_LIM_WIDTH 8 /* OUT5R_VOL_LIM - [7:0] */
2941
2942/*
2943 * R1079 (0x437) - Noise Gate Select 5R
2944 */
2945#define ARIZONA_OUT5R_NGATE_SRC_MASK 0x0FFF /* OUT5R_NGATE_SRC - [11:0] */
2946#define ARIZONA_OUT5R_NGATE_SRC_SHIFT 0 /* OUT5R_NGATE_SRC - [11:0] */
2947#define ARIZONA_OUT5R_NGATE_SRC_WIDTH 12 /* OUT5R_NGATE_SRC - [11:0] */
2948
2949/*
2950 * R1080 (0x438) - Output Path Config 6L
2951 */
2952#define ARIZONA_OUT6_OSR 0x2000 /* OUT6_OSR */
2953#define ARIZONA_OUT6_OSR_MASK 0x2000 /* OUT6_OSR */
2954#define ARIZONA_OUT6_OSR_SHIFT 13 /* OUT6_OSR */
2955#define ARIZONA_OUT6_OSR_WIDTH 1 /* OUT6_OSR */
2956#define ARIZONA_OUT6L_ANC_SRC_MASK 0x0C00 /* OUT6L_ANC_SRC - [11:10] */
2957#define ARIZONA_OUT6L_ANC_SRC_SHIFT 10 /* OUT6L_ANC_SRC - [11:10] */
2958#define ARIZONA_OUT6L_ANC_SRC_WIDTH 2 /* OUT6L_ANC_SRC - [11:10] */
2959
2960/*
2961 * R1081 (0x439) - DAC Digital Volume 6L
2962 */
2963#define ARIZONA_OUT_VU 0x0200 /* OUT_VU */
2964#define ARIZONA_OUT_VU_MASK 0x0200 /* OUT_VU */
2965#define ARIZONA_OUT_VU_SHIFT 9 /* OUT_VU */
2966#define ARIZONA_OUT_VU_WIDTH 1 /* OUT_VU */
2967#define ARIZONA_OUT6L_MUTE 0x0100 /* OUT6L_MUTE */
2968#define ARIZONA_OUT6L_MUTE_MASK 0x0100 /* OUT6L_MUTE */
2969#define ARIZONA_OUT6L_MUTE_SHIFT 8 /* OUT6L_MUTE */
2970#define ARIZONA_OUT6L_MUTE_WIDTH 1 /* OUT6L_MUTE */
2971#define ARIZONA_OUT6L_VOL_MASK 0x00FF /* OUT6L_VOL - [7:0] */
2972#define ARIZONA_OUT6L_VOL_SHIFT 0 /* OUT6L_VOL - [7:0] */
2973#define ARIZONA_OUT6L_VOL_WIDTH 8 /* OUT6L_VOL - [7:0] */
2974
2975/*
2976 * R1082 (0x43A) - DAC Volume Limit 6L
2977 */
2978#define ARIZONA_OUT6L_VOL_LIM_MASK 0x00FF /* OUT6L_VOL_LIM - [7:0] */
2979#define ARIZONA_OUT6L_VOL_LIM_SHIFT 0 /* OUT6L_VOL_LIM - [7:0] */
2980#define ARIZONA_OUT6L_VOL_LIM_WIDTH 8 /* OUT6L_VOL_LIM - [7:0] */
2981
2982/*
2983 * R1083 (0x43B) - Noise Gate Select 6L
2984 */
2985#define ARIZONA_OUT6L_NGATE_SRC_MASK 0x0FFF /* OUT6L_NGATE_SRC - [11:0] */
2986#define ARIZONA_OUT6L_NGATE_SRC_SHIFT 0 /* OUT6L_NGATE_SRC - [11:0] */
2987#define ARIZONA_OUT6L_NGATE_SRC_WIDTH 12 /* OUT6L_NGATE_SRC - [11:0] */
2988
2989/*
2990 * R1084 (0x43C) - Output Path Config 6R
2991 */
2992#define ARIZONA_OUT6R_ANC_SRC_MASK 0x0C00 /* OUT6R_ANC_SRC - [11:10] */
2993#define ARIZONA_OUT6R_ANC_SRC_SHIFT 10 /* OUT6R_ANC_SRC - [11:10] */
2994#define ARIZONA_OUT6R_ANC_SRC_WIDTH 2 /* OUT6R_ANC_SRC - [11:10] */
2995
2996/*
2997 * R1085 (0x43D) - DAC Digital Volume 6R
2998 */
2999#define ARIZONA_OUT_VU 0x0200 /* OUT_VU */
3000#define ARIZONA_OUT_VU_MASK 0x0200 /* OUT_VU */
3001#define ARIZONA_OUT_VU_SHIFT 9 /* OUT_VU */
3002#define ARIZONA_OUT_VU_WIDTH 1 /* OUT_VU */
3003#define ARIZONA_OUT6R_MUTE 0x0100 /* OUT6R_MUTE */
3004#define ARIZONA_OUT6R_MUTE_MASK 0x0100 /* OUT6R_MUTE */
3005#define ARIZONA_OUT6R_MUTE_SHIFT 8 /* OUT6R_MUTE */
3006#define ARIZONA_OUT6R_MUTE_WIDTH 1 /* OUT6R_MUTE */
3007#define ARIZONA_OUT6R_VOL_MASK 0x00FF /* OUT6R_VOL - [7:0] */
3008#define ARIZONA_OUT6R_VOL_SHIFT 0 /* OUT6R_VOL - [7:0] */
3009#define ARIZONA_OUT6R_VOL_WIDTH 8 /* OUT6R_VOL - [7:0] */
3010
3011/*
3012 * R1086 (0x43E) - DAC Volume Limit 6R
3013 */
3014#define ARIZONA_OUT6R_VOL_LIM_MASK 0x00FF /* OUT6R_VOL_LIM - [7:0] */
3015#define ARIZONA_OUT6R_VOL_LIM_SHIFT 0 /* OUT6R_VOL_LIM - [7:0] */
3016#define ARIZONA_OUT6R_VOL_LIM_WIDTH 8 /* OUT6R_VOL_LIM - [7:0] */
3017
3018/*
3019 * R1087 (0x43F) - Noise Gate Select 6R
3020 */
3021#define ARIZONA_OUT6R_NGATE_SRC_MASK 0x0FFF /* OUT6R_NGATE_SRC - [11:0] */
3022#define ARIZONA_OUT6R_NGATE_SRC_SHIFT 0 /* OUT6R_NGATE_SRC - [11:0] */
3023#define ARIZONA_OUT6R_NGATE_SRC_WIDTH 12 /* OUT6R_NGATE_SRC - [11:0] */
3024
3025/*
3026 * R1104 (0x450) - DAC AEC Control 1
3027 */
3028#define ARIZONA_AEC_LOOPBACK_SRC_MASK 0x003C /* AEC_LOOPBACK_SRC - [5:2] */
3029#define ARIZONA_AEC_LOOPBACK_SRC_SHIFT 2 /* AEC_LOOPBACK_SRC - [5:2] */
3030#define ARIZONA_AEC_LOOPBACK_SRC_WIDTH 4 /* AEC_LOOPBACK_SRC - [5:2] */
3031#define ARIZONA_AEC_ENA_STS 0x0002 /* AEC_ENA_STS */
3032#define ARIZONA_AEC_ENA_STS_MASK 0x0002 /* AEC_ENA_STS */
3033#define ARIZONA_AEC_ENA_STS_SHIFT 1 /* AEC_ENA_STS */
3034#define ARIZONA_AEC_ENA_STS_WIDTH 1 /* AEC_ENA_STS */
3035#define ARIZONA_AEC_LOOPBACK_ENA 0x0001 /* AEC_LOOPBACK_ENA */
3036#define ARIZONA_AEC_LOOPBACK_ENA_MASK 0x0001 /* AEC_LOOPBACK_ENA */
3037#define ARIZONA_AEC_LOOPBACK_ENA_SHIFT 0 /* AEC_LOOPBACK_ENA */
3038#define ARIZONA_AEC_LOOPBACK_ENA_WIDTH 1 /* AEC_LOOPBACK_ENA */
3039
3040/*
3041 * R1112 (0x458) - Noise Gate Control
3042 */
3043#define ARIZONA_NGATE_HOLD_MASK 0x0030 /* NGATE_HOLD - [5:4] */
3044#define ARIZONA_NGATE_HOLD_SHIFT 4 /* NGATE_HOLD - [5:4] */
3045#define ARIZONA_NGATE_HOLD_WIDTH 2 /* NGATE_HOLD - [5:4] */
3046#define ARIZONA_NGATE_THR_MASK 0x000E /* NGATE_THR - [3:1] */
3047#define ARIZONA_NGATE_THR_SHIFT 1 /* NGATE_THR - [3:1] */
3048#define ARIZONA_NGATE_THR_WIDTH 3 /* NGATE_THR - [3:1] */
3049#define ARIZONA_NGATE_ENA 0x0001 /* NGATE_ENA */
3050#define ARIZONA_NGATE_ENA_MASK 0x0001 /* NGATE_ENA */
3051#define ARIZONA_NGATE_ENA_SHIFT 0 /* NGATE_ENA */
3052#define ARIZONA_NGATE_ENA_WIDTH 1 /* NGATE_ENA */
3053
3054/*
3055 * R1168 (0x490) - PDM SPK1 CTRL 1
3056 */
3057#define ARIZONA_SPK1R_MUTE 0x2000 /* SPK1R_MUTE */
3058#define ARIZONA_SPK1R_MUTE_MASK 0x2000 /* SPK1R_MUTE */
3059#define ARIZONA_SPK1R_MUTE_SHIFT 13 /* SPK1R_MUTE */
3060#define ARIZONA_SPK1R_MUTE_WIDTH 1 /* SPK1R_MUTE */
3061#define ARIZONA_SPK1L_MUTE 0x1000 /* SPK1L_MUTE */
3062#define ARIZONA_SPK1L_MUTE_MASK 0x1000 /* SPK1L_MUTE */
3063#define ARIZONA_SPK1L_MUTE_SHIFT 12 /* SPK1L_MUTE */
3064#define ARIZONA_SPK1L_MUTE_WIDTH 1 /* SPK1L_MUTE */
3065#define ARIZONA_SPK1_MUTE_ENDIAN 0x0100 /* SPK1_MUTE_ENDIAN */
3066#define ARIZONA_SPK1_MUTE_ENDIAN_MASK 0x0100 /* SPK1_MUTE_ENDIAN */
3067#define ARIZONA_SPK1_MUTE_ENDIAN_SHIFT 8 /* SPK1_MUTE_ENDIAN */
3068#define ARIZONA_SPK1_MUTE_ENDIAN_WIDTH 1 /* SPK1_MUTE_ENDIAN */
3069#define ARIZONA_SPK1_MUTE_SEQ1_MASK 0x00FF /* SPK1_MUTE_SEQ1 - [7:0] */
3070#define ARIZONA_SPK1_MUTE_SEQ1_SHIFT 0 /* SPK1_MUTE_SEQ1 - [7:0] */
3071#define ARIZONA_SPK1_MUTE_SEQ1_WIDTH 8 /* SPK1_MUTE_SEQ1 - [7:0] */
3072
3073/*
3074 * R1169 (0x491) - PDM SPK1 CTRL 2
3075 */
3076#define ARIZONA_SPK1_FMT 0x0001 /* SPK1_FMT */
3077#define ARIZONA_SPK1_FMT_MASK 0x0001 /* SPK1_FMT */
3078#define ARIZONA_SPK1_FMT_SHIFT 0 /* SPK1_FMT */
3079#define ARIZONA_SPK1_FMT_WIDTH 1 /* SPK1_FMT */
3080
3081/*
3082 * R1170 (0x492) - PDM SPK2 CTRL 1
3083 */
3084#define ARIZONA_SPK2R_MUTE 0x2000 /* SPK2R_MUTE */
3085#define ARIZONA_SPK2R_MUTE_MASK 0x2000 /* SPK2R_MUTE */
3086#define ARIZONA_SPK2R_MUTE_SHIFT 13 /* SPK2R_MUTE */
3087#define ARIZONA_SPK2R_MUTE_WIDTH 1 /* SPK2R_MUTE */
3088#define ARIZONA_SPK2L_MUTE 0x1000 /* SPK2L_MUTE */
3089#define ARIZONA_SPK2L_MUTE_MASK 0x1000 /* SPK2L_MUTE */
3090#define ARIZONA_SPK2L_MUTE_SHIFT 12 /* SPK2L_MUTE */
3091#define ARIZONA_SPK2L_MUTE_WIDTH 1 /* SPK2L_MUTE */
3092#define ARIZONA_SPK2_MUTE_ENDIAN 0x0100 /* SPK2_MUTE_ENDIAN */
3093#define ARIZONA_SPK2_MUTE_ENDIAN_MASK 0x0100 /* SPK2_MUTE_ENDIAN */
3094#define ARIZONA_SPK2_MUTE_ENDIAN_SHIFT 8 /* SPK2_MUTE_ENDIAN */
3095#define ARIZONA_SPK2_MUTE_ENDIAN_WIDTH 1 /* SPK2_MUTE_ENDIAN */
3096#define ARIZONA_SPK2_MUTE_SEQ_MASK 0x00FF /* SPK2_MUTE_SEQ - [7:0] */
3097#define ARIZONA_SPK2_MUTE_SEQ_SHIFT 0 /* SPK2_MUTE_SEQ - [7:0] */
3098#define ARIZONA_SPK2_MUTE_SEQ_WIDTH 8 /* SPK2_MUTE_SEQ - [7:0] */
3099
3100/*
3101 * R1171 (0x493) - PDM SPK2 CTRL 2
3102 */
3103#define ARIZONA_SPK2_FMT 0x0001 /* SPK2_FMT */
3104#define ARIZONA_SPK2_FMT_MASK 0x0001 /* SPK2_FMT */
3105#define ARIZONA_SPK2_FMT_SHIFT 0 /* SPK2_FMT */
3106#define ARIZONA_SPK2_FMT_WIDTH 1 /* SPK2_FMT */
3107
3108/*
3109 * R1244 (0x4DC) - DAC comp 1
3110 */
3111#define ARIZONA_OUT_COMP_COEFF_MASK 0xFFFF /* OUT_COMP_COEFF - [15:0] */
3112#define ARIZONA_OUT_COMP_COEFF_SHIFT 0 /* OUT_COMP_COEFF - [15:0] */
3113#define ARIZONA_OUT_COMP_COEFF_WIDTH 16 /* OUT_COMP_COEFF - [15:0] */
3114
3115/*
3116 * R1245 (0x4DD) - DAC comp 2
3117 */
3118#define ARIZONA_OUT_COMP_COEFF_1 0x0002 /* OUT_COMP_COEFF */
3119#define ARIZONA_OUT_COMP_COEFF_1_MASK 0x0002 /* OUT_COMP_COEFF */
3120#define ARIZONA_OUT_COMP_COEFF_1_SHIFT 1 /* OUT_COMP_COEFF */
3121#define ARIZONA_OUT_COMP_COEFF_1_WIDTH 1 /* OUT_COMP_COEFF */
3122#define ARIZONA_OUT_COMP_COEFF_SEL 0x0001 /* OUT_COMP_COEFF_SEL */
3123#define ARIZONA_OUT_COMP_COEFF_SEL_MASK 0x0001 /* OUT_COMP_COEFF_SEL */
3124#define ARIZONA_OUT_COMP_COEFF_SEL_SHIFT 0 /* OUT_COMP_COEFF_SEL */
3125#define ARIZONA_OUT_COMP_COEFF_SEL_WIDTH 1 /* OUT_COMP_COEFF_SEL */
3126
3127/*
3128 * R1246 (0x4DE) - DAC comp 3
3129 */
3130#define ARIZONA_AEC_COMP_COEFF_MASK 0xFFFF /* AEC_COMP_COEFF - [15:0] */
3131#define ARIZONA_AEC_COMP_COEFF_SHIFT 0 /* AEC_COMP_COEFF - [15:0] */
3132#define ARIZONA_AEC_COMP_COEFF_WIDTH 16 /* AEC_COMP_COEFF - [15:0] */
3133
3134/*
3135 * R1247 (0x4DF) - DAC comp 4
3136 */
3137#define ARIZONA_AEC_COMP_COEFF_1 0x0002 /* AEC_COMP_COEFF */
3138#define ARIZONA_AEC_COMP_COEFF_1_MASK 0x0002 /* AEC_COMP_COEFF */
3139#define ARIZONA_AEC_COMP_COEFF_1_SHIFT 1 /* AEC_COMP_COEFF */
3140#define ARIZONA_AEC_COMP_COEFF_1_WIDTH 1 /* AEC_COMP_COEFF */
3141#define ARIZONA_AEC_COMP_COEFF_SEL 0x0001 /* AEC_COMP_COEFF_SEL */
3142#define ARIZONA_AEC_COMP_COEFF_SEL_MASK 0x0001 /* AEC_COMP_COEFF_SEL */
3143#define ARIZONA_AEC_COMP_COEFF_SEL_SHIFT 0 /* AEC_COMP_COEFF_SEL */
3144#define ARIZONA_AEC_COMP_COEFF_SEL_WIDTH 1 /* AEC_COMP_COEFF_SEL */
3145
3146/*
3147 * R1280 (0x500) - AIF1 BCLK Ctrl
3148 */
3149#define ARIZONA_AIF1_BCLK_INV 0x0080 /* AIF1_BCLK_INV */
3150#define ARIZONA_AIF1_BCLK_INV_MASK 0x0080 /* AIF1_BCLK_INV */
3151#define ARIZONA_AIF1_BCLK_INV_SHIFT 7 /* AIF1_BCLK_INV */
3152#define ARIZONA_AIF1_BCLK_INV_WIDTH 1 /* AIF1_BCLK_INV */
3153#define ARIZONA_AIF1_BCLK_FRC 0x0040 /* AIF1_BCLK_FRC */
3154#define ARIZONA_AIF1_BCLK_FRC_MASK 0x0040 /* AIF1_BCLK_FRC */
3155#define ARIZONA_AIF1_BCLK_FRC_SHIFT 6 /* AIF1_BCLK_FRC */
3156#define ARIZONA_AIF1_BCLK_FRC_WIDTH 1 /* AIF1_BCLK_FRC */
3157#define ARIZONA_AIF1_BCLK_MSTR 0x0020 /* AIF1_BCLK_MSTR */
3158#define ARIZONA_AIF1_BCLK_MSTR_MASK 0x0020 /* AIF1_BCLK_MSTR */
3159#define ARIZONA_AIF1_BCLK_MSTR_SHIFT 5 /* AIF1_BCLK_MSTR */
3160#define ARIZONA_AIF1_BCLK_MSTR_WIDTH 1 /* AIF1_BCLK_MSTR */
3161#define ARIZONA_AIF1_BCLK_FREQ_MASK 0x001F /* AIF1_BCLK_FREQ - [4:0] */
3162#define ARIZONA_AIF1_BCLK_FREQ_SHIFT 0 /* AIF1_BCLK_FREQ - [4:0] */
3163#define ARIZONA_AIF1_BCLK_FREQ_WIDTH 5 /* AIF1_BCLK_FREQ - [4:0] */
3164
3165/*
3166 * R1281 (0x501) - AIF1 Tx Pin Ctrl
3167 */
3168#define ARIZONA_AIF1TX_DAT_TRI 0x0020 /* AIF1TX_DAT_TRI */
3169#define ARIZONA_AIF1TX_DAT_TRI_MASK 0x0020 /* AIF1TX_DAT_TRI */
3170#define ARIZONA_AIF1TX_DAT_TRI_SHIFT 5 /* AIF1TX_DAT_TRI */
3171#define ARIZONA_AIF1TX_DAT_TRI_WIDTH 1 /* AIF1TX_DAT_TRI */
3172#define ARIZONA_AIF1TX_LRCLK_SRC 0x0008 /* AIF1TX_LRCLK_SRC */
3173#define ARIZONA_AIF1TX_LRCLK_SRC_MASK 0x0008 /* AIF1TX_LRCLK_SRC */
3174#define ARIZONA_AIF1TX_LRCLK_SRC_SHIFT 3 /* AIF1TX_LRCLK_SRC */
3175#define ARIZONA_AIF1TX_LRCLK_SRC_WIDTH 1 /* AIF1TX_LRCLK_SRC */
3176#define ARIZONA_AIF1TX_LRCLK_INV 0x0004 /* AIF1TX_LRCLK_INV */
3177#define ARIZONA_AIF1TX_LRCLK_INV_MASK 0x0004 /* AIF1TX_LRCLK_INV */
3178#define ARIZONA_AIF1TX_LRCLK_INV_SHIFT 2 /* AIF1TX_LRCLK_INV */
3179#define ARIZONA_AIF1TX_LRCLK_INV_WIDTH 1 /* AIF1TX_LRCLK_INV */
3180#define ARIZONA_AIF1TX_LRCLK_FRC 0x0002 /* AIF1TX_LRCLK_FRC */
3181#define ARIZONA_AIF1TX_LRCLK_FRC_MASK 0x0002 /* AIF1TX_LRCLK_FRC */
3182#define ARIZONA_AIF1TX_LRCLK_FRC_SHIFT 1 /* AIF1TX_LRCLK_FRC */
3183#define ARIZONA_AIF1TX_LRCLK_FRC_WIDTH 1 /* AIF1TX_LRCLK_FRC */
3184#define ARIZONA_AIF1TX_LRCLK_MSTR 0x0001 /* AIF1TX_LRCLK_MSTR */
3185#define ARIZONA_AIF1TX_LRCLK_MSTR_MASK 0x0001 /* AIF1TX_LRCLK_MSTR */
3186#define ARIZONA_AIF1TX_LRCLK_MSTR_SHIFT 0 /* AIF1TX_LRCLK_MSTR */
3187#define ARIZONA_AIF1TX_LRCLK_MSTR_WIDTH 1 /* AIF1TX_LRCLK_MSTR */
3188
3189/*
3190 * R1282 (0x502) - AIF1 Rx Pin Ctrl
3191 */
3192#define ARIZONA_AIF1RX_LRCLK_INV 0x0004 /* AIF1RX_LRCLK_INV */
3193#define ARIZONA_AIF1RX_LRCLK_INV_MASK 0x0004 /* AIF1RX_LRCLK_INV */
3194#define ARIZONA_AIF1RX_LRCLK_INV_SHIFT 2 /* AIF1RX_LRCLK_INV */
3195#define ARIZONA_AIF1RX_LRCLK_INV_WIDTH 1 /* AIF1RX_LRCLK_INV */
3196#define ARIZONA_AIF1RX_LRCLK_FRC 0x0002 /* AIF1RX_LRCLK_FRC */
3197#define ARIZONA_AIF1RX_LRCLK_FRC_MASK 0x0002 /* AIF1RX_LRCLK_FRC */
3198#define ARIZONA_AIF1RX_LRCLK_FRC_SHIFT 1 /* AIF1RX_LRCLK_FRC */
3199#define ARIZONA_AIF1RX_LRCLK_FRC_WIDTH 1 /* AIF1RX_LRCLK_FRC */
3200#define ARIZONA_AIF1RX_LRCLK_MSTR 0x0001 /* AIF1RX_LRCLK_MSTR */
3201#define ARIZONA_AIF1RX_LRCLK_MSTR_MASK 0x0001 /* AIF1RX_LRCLK_MSTR */
3202#define ARIZONA_AIF1RX_LRCLK_MSTR_SHIFT 0 /* AIF1RX_LRCLK_MSTR */
3203#define ARIZONA_AIF1RX_LRCLK_MSTR_WIDTH 1 /* AIF1RX_LRCLK_MSTR */
3204
3205/*
3206 * R1283 (0x503) - AIF1 Rate Ctrl
3207 */
3208#define ARIZONA_AIF1_RATE_MASK 0x7800 /* AIF1_RATE - [14:11] */
3209#define ARIZONA_AIF1_RATE_SHIFT 11 /* AIF1_RATE - [14:11] */
3210#define ARIZONA_AIF1_RATE_WIDTH 4 /* AIF1_RATE - [14:11] */
3211#define ARIZONA_AIF1_TRI 0x0040 /* AIF1_TRI */
3212#define ARIZONA_AIF1_TRI_MASK 0x0040 /* AIF1_TRI */
3213#define ARIZONA_AIF1_TRI_SHIFT 6 /* AIF1_TRI */
3214#define ARIZONA_AIF1_TRI_WIDTH 1 /* AIF1_TRI */
3215
3216/*
3217 * R1284 (0x504) - AIF1 Format
3218 */
3219#define ARIZONA_AIF1_FMT_MASK 0x0007 /* AIF1_FMT - [2:0] */
3220#define ARIZONA_AIF1_FMT_SHIFT 0 /* AIF1_FMT - [2:0] */
3221#define ARIZONA_AIF1_FMT_WIDTH 3 /* AIF1_FMT - [2:0] */
3222
3223/*
3224 * R1285 (0x505) - AIF1 Tx BCLK Rate
3225 */
3226#define ARIZONA_AIF1TX_BCPF_MASK 0x1FFF /* AIF1TX_BCPF - [12:0] */
3227#define ARIZONA_AIF1TX_BCPF_SHIFT 0 /* AIF1TX_BCPF - [12:0] */
3228#define ARIZONA_AIF1TX_BCPF_WIDTH 13 /* AIF1TX_BCPF - [12:0] */
3229
3230/*
3231 * R1286 (0x506) - AIF1 Rx BCLK Rate
3232 */
3233#define ARIZONA_AIF1RX_BCPF_MASK 0x1FFF /* AIF1RX_BCPF - [12:0] */
3234#define ARIZONA_AIF1RX_BCPF_SHIFT 0 /* AIF1RX_BCPF - [12:0] */
3235#define ARIZONA_AIF1RX_BCPF_WIDTH 13 /* AIF1RX_BCPF - [12:0] */
3236
3237/*
3238 * R1287 (0x507) - AIF1 Frame Ctrl 1
3239 */
3240#define ARIZONA_AIF1TX_WL_MASK 0x3F00 /* AIF1TX_WL - [13:8] */
3241#define ARIZONA_AIF1TX_WL_SHIFT 8 /* AIF1TX_WL - [13:8] */
3242#define ARIZONA_AIF1TX_WL_WIDTH 6 /* AIF1TX_WL - [13:8] */
3243#define ARIZONA_AIF1TX_SLOT_LEN_MASK 0x00FF /* AIF1TX_SLOT_LEN - [7:0] */
3244#define ARIZONA_AIF1TX_SLOT_LEN_SHIFT 0 /* AIF1TX_SLOT_LEN - [7:0] */
3245#define ARIZONA_AIF1TX_SLOT_LEN_WIDTH 8 /* AIF1TX_SLOT_LEN - [7:0] */
3246
3247/*
3248 * R1288 (0x508) - AIF1 Frame Ctrl 2
3249 */
3250#define ARIZONA_AIF1RX_WL_MASK 0x3F00 /* AIF1RX_WL - [13:8] */
3251#define ARIZONA_AIF1RX_WL_SHIFT 8 /* AIF1RX_WL - [13:8] */
3252#define ARIZONA_AIF1RX_WL_WIDTH 6 /* AIF1RX_WL - [13:8] */
3253#define ARIZONA_AIF1RX_SLOT_LEN_MASK 0x00FF /* AIF1RX_SLOT_LEN - [7:0] */
3254#define ARIZONA_AIF1RX_SLOT_LEN_SHIFT 0 /* AIF1RX_SLOT_LEN - [7:0] */
3255#define ARIZONA_AIF1RX_SLOT_LEN_WIDTH 8 /* AIF1RX_SLOT_LEN - [7:0] */
3256
3257/*
3258 * R1289 (0x509) - AIF1 Frame Ctrl 3
3259 */
3260#define ARIZONA_AIF1TX1_SLOT_MASK 0x003F /* AIF1TX1_SLOT - [5:0] */
3261#define ARIZONA_AIF1TX1_SLOT_SHIFT 0 /* AIF1TX1_SLOT - [5:0] */
3262#define ARIZONA_AIF1TX1_SLOT_WIDTH 6 /* AIF1TX1_SLOT - [5:0] */
3263
3264/*
3265 * R1290 (0x50A) - AIF1 Frame Ctrl 4
3266 */
3267#define ARIZONA_AIF1TX2_SLOT_MASK 0x003F /* AIF1TX2_SLOT - [5:0] */
3268#define ARIZONA_AIF1TX2_SLOT_SHIFT 0 /* AIF1TX2_SLOT - [5:0] */
3269#define ARIZONA_AIF1TX2_SLOT_WIDTH 6 /* AIF1TX2_SLOT - [5:0] */
3270
3271/*
3272 * R1291 (0x50B) - AIF1 Frame Ctrl 5
3273 */
3274#define ARIZONA_AIF1TX3_SLOT_MASK 0x003F /* AIF1TX3_SLOT - [5:0] */
3275#define ARIZONA_AIF1TX3_SLOT_SHIFT 0 /* AIF1TX3_SLOT - [5:0] */
3276#define ARIZONA_AIF1TX3_SLOT_WIDTH 6 /* AIF1TX3_SLOT - [5:0] */
3277
3278/*
3279 * R1292 (0x50C) - AIF1 Frame Ctrl 6
3280 */
3281#define ARIZONA_AIF1TX4_SLOT_MASK 0x003F /* AIF1TX4_SLOT - [5:0] */
3282#define ARIZONA_AIF1TX4_SLOT_SHIFT 0 /* AIF1TX4_SLOT - [5:0] */
3283#define ARIZONA_AIF1TX4_SLOT_WIDTH 6 /* AIF1TX4_SLOT - [5:0] */
3284
3285/*
3286 * R1293 (0x50D) - AIF1 Frame Ctrl 7
3287 */
3288#define ARIZONA_AIF1TX5_SLOT_MASK 0x003F /* AIF1TX5_SLOT - [5:0] */
3289#define ARIZONA_AIF1TX5_SLOT_SHIFT 0 /* AIF1TX5_SLOT - [5:0] */
3290#define ARIZONA_AIF1TX5_SLOT_WIDTH 6 /* AIF1TX5_SLOT - [5:0] */
3291
3292/*
3293 * R1294 (0x50E) - AIF1 Frame Ctrl 8
3294 */
3295#define ARIZONA_AIF1TX6_SLOT_MASK 0x003F /* AIF1TX6_SLOT - [5:0] */
3296#define ARIZONA_AIF1TX6_SLOT_SHIFT 0 /* AIF1TX6_SLOT - [5:0] */
3297#define ARIZONA_AIF1TX6_SLOT_WIDTH 6 /* AIF1TX6_SLOT - [5:0] */
3298
3299/*
3300 * R1295 (0x50F) - AIF1 Frame Ctrl 9
3301 */
3302#define ARIZONA_AIF1TX7_SLOT_MASK 0x003F /* AIF1TX7_SLOT - [5:0] */
3303#define ARIZONA_AIF1TX7_SLOT_SHIFT 0 /* AIF1TX7_SLOT - [5:0] */
3304#define ARIZONA_AIF1TX7_SLOT_WIDTH 6 /* AIF1TX7_SLOT - [5:0] */
3305
3306/*
3307 * R1296 (0x510) - AIF1 Frame Ctrl 10
3308 */
3309#define ARIZONA_AIF1TX8_SLOT_MASK 0x003F /* AIF1TX8_SLOT - [5:0] */
3310#define ARIZONA_AIF1TX8_SLOT_SHIFT 0 /* AIF1TX8_SLOT - [5:0] */
3311#define ARIZONA_AIF1TX8_SLOT_WIDTH 6 /* AIF1TX8_SLOT - [5:0] */
3312
3313/*
3314 * R1297 (0x511) - AIF1 Frame Ctrl 11
3315 */
3316#define ARIZONA_AIF1RX1_SLOT_MASK 0x003F /* AIF1RX1_SLOT - [5:0] */
3317#define ARIZONA_AIF1RX1_SLOT_SHIFT 0 /* AIF1RX1_SLOT - [5:0] */
3318#define ARIZONA_AIF1RX1_SLOT_WIDTH 6 /* AIF1RX1_SLOT - [5:0] */
3319
3320/*
3321 * R1298 (0x512) - AIF1 Frame Ctrl 12
3322 */
3323#define ARIZONA_AIF1RX2_SLOT_MASK 0x003F /* AIF1RX2_SLOT - [5:0] */
3324#define ARIZONA_AIF1RX2_SLOT_SHIFT 0 /* AIF1RX2_SLOT - [5:0] */
3325#define ARIZONA_AIF1RX2_SLOT_WIDTH 6 /* AIF1RX2_SLOT - [5:0] */
3326
3327/*
3328 * R1299 (0x513) - AIF1 Frame Ctrl 13
3329 */
3330#define ARIZONA_AIF1RX3_SLOT_MASK 0x003F /* AIF1RX3_SLOT - [5:0] */
3331#define ARIZONA_AIF1RX3_SLOT_SHIFT 0 /* AIF1RX3_SLOT - [5:0] */
3332#define ARIZONA_AIF1RX3_SLOT_WIDTH 6 /* AIF1RX3_SLOT - [5:0] */
3333
3334/*
3335 * R1300 (0x514) - AIF1 Frame Ctrl 14
3336 */
3337#define ARIZONA_AIF1RX4_SLOT_MASK 0x003F /* AIF1RX4_SLOT - [5:0] */
3338#define ARIZONA_AIF1RX4_SLOT_SHIFT 0 /* AIF1RX4_SLOT - [5:0] */
3339#define ARIZONA_AIF1RX4_SLOT_WIDTH 6 /* AIF1RX4_SLOT - [5:0] */
3340
3341/*
3342 * R1301 (0x515) - AIF1 Frame Ctrl 15
3343 */
3344#define ARIZONA_AIF1RX5_SLOT_MASK 0x003F /* AIF1RX5_SLOT - [5:0] */
3345#define ARIZONA_AIF1RX5_SLOT_SHIFT 0 /* AIF1RX5_SLOT - [5:0] */
3346#define ARIZONA_AIF1RX5_SLOT_WIDTH 6 /* AIF1RX5_SLOT - [5:0] */
3347
3348/*
3349 * R1302 (0x516) - AIF1 Frame Ctrl 16
3350 */
3351#define ARIZONA_AIF1RX6_SLOT_MASK 0x003F /* AIF1RX6_SLOT - [5:0] */
3352#define ARIZONA_AIF1RX6_SLOT_SHIFT 0 /* AIF1RX6_SLOT - [5:0] */
3353#define ARIZONA_AIF1RX6_SLOT_WIDTH 6 /* AIF1RX6_SLOT - [5:0] */
3354
3355/*
3356 * R1303 (0x517) - AIF1 Frame Ctrl 17
3357 */
3358#define ARIZONA_AIF1RX7_SLOT_MASK 0x003F /* AIF1RX7_SLOT - [5:0] */
3359#define ARIZONA_AIF1RX7_SLOT_SHIFT 0 /* AIF1RX7_SLOT - [5:0] */
3360#define ARIZONA_AIF1RX7_SLOT_WIDTH 6 /* AIF1RX7_SLOT - [5:0] */
3361
3362/*
3363 * R1304 (0x518) - AIF1 Frame Ctrl 18
3364 */
3365#define ARIZONA_AIF1RX8_SLOT_MASK 0x003F /* AIF1RX8_SLOT - [5:0] */
3366#define ARIZONA_AIF1RX8_SLOT_SHIFT 0 /* AIF1RX8_SLOT - [5:0] */
3367#define ARIZONA_AIF1RX8_SLOT_WIDTH 6 /* AIF1RX8_SLOT - [5:0] */
3368
3369/*
3370 * R1305 (0x519) - AIF1 Tx Enables
3371 */
3372#define ARIZONA_AIF1TX8_ENA 0x0080 /* AIF1TX8_ENA */
3373#define ARIZONA_AIF1TX8_ENA_MASK 0x0080 /* AIF1TX8_ENA */
3374#define ARIZONA_AIF1TX8_ENA_SHIFT 7 /* AIF1TX8_ENA */
3375#define ARIZONA_AIF1TX8_ENA_WIDTH 1 /* AIF1TX8_ENA */
3376#define ARIZONA_AIF1TX7_ENA 0x0040 /* AIF1TX7_ENA */
3377#define ARIZONA_AIF1TX7_ENA_MASK 0x0040 /* AIF1TX7_ENA */
3378#define ARIZONA_AIF1TX7_ENA_SHIFT 6 /* AIF1TX7_ENA */
3379#define ARIZONA_AIF1TX7_ENA_WIDTH 1 /* AIF1TX7_ENA */
3380#define ARIZONA_AIF1TX6_ENA 0x0020 /* AIF1TX6_ENA */
3381#define ARIZONA_AIF1TX6_ENA_MASK 0x0020 /* AIF1TX6_ENA */
3382#define ARIZONA_AIF1TX6_ENA_SHIFT 5 /* AIF1TX6_ENA */
3383#define ARIZONA_AIF1TX6_ENA_WIDTH 1 /* AIF1TX6_ENA */
3384#define ARIZONA_AIF1TX5_ENA 0x0010 /* AIF1TX5_ENA */
3385#define ARIZONA_AIF1TX5_ENA_MASK 0x0010 /* AIF1TX5_ENA */
3386#define ARIZONA_AIF1TX5_ENA_SHIFT 4 /* AIF1TX5_ENA */
3387#define ARIZONA_AIF1TX5_ENA_WIDTH 1 /* AIF1TX5_ENA */
3388#define ARIZONA_AIF1TX4_ENA 0x0008 /* AIF1TX4_ENA */
3389#define ARIZONA_AIF1TX4_ENA_MASK 0x0008 /* AIF1TX4_ENA */
3390#define ARIZONA_AIF1TX4_ENA_SHIFT 3 /* AIF1TX4_ENA */
3391#define ARIZONA_AIF1TX4_ENA_WIDTH 1 /* AIF1TX4_ENA */
3392#define ARIZONA_AIF1TX3_ENA 0x0004 /* AIF1TX3_ENA */
3393#define ARIZONA_AIF1TX3_ENA_MASK 0x0004 /* AIF1TX3_ENA */
3394#define ARIZONA_AIF1TX3_ENA_SHIFT 2 /* AIF1TX3_ENA */
3395#define ARIZONA_AIF1TX3_ENA_WIDTH 1 /* AIF1TX3_ENA */
3396#define ARIZONA_AIF1TX2_ENA 0x0002 /* AIF1TX2_ENA */
3397#define ARIZONA_AIF1TX2_ENA_MASK 0x0002 /* AIF1TX2_ENA */
3398#define ARIZONA_AIF1TX2_ENA_SHIFT 1 /* AIF1TX2_ENA */
3399#define ARIZONA_AIF1TX2_ENA_WIDTH 1 /* AIF1TX2_ENA */
3400#define ARIZONA_AIF1TX1_ENA 0x0001 /* AIF1TX1_ENA */
3401#define ARIZONA_AIF1TX1_ENA_MASK 0x0001 /* AIF1TX1_ENA */
3402#define ARIZONA_AIF1TX1_ENA_SHIFT 0 /* AIF1TX1_ENA */
3403#define ARIZONA_AIF1TX1_ENA_WIDTH 1 /* AIF1TX1_ENA */
3404
3405/*
3406 * R1306 (0x51A) - AIF1 Rx Enables
3407 */
3408#define ARIZONA_AIF1RX8_ENA 0x0080 /* AIF1RX8_ENA */
3409#define ARIZONA_AIF1RX8_ENA_MASK 0x0080 /* AIF1RX8_ENA */
3410#define ARIZONA_AIF1RX8_ENA_SHIFT 7 /* AIF1RX8_ENA */
3411#define ARIZONA_AIF1RX8_ENA_WIDTH 1 /* AIF1RX8_ENA */
3412#define ARIZONA_AIF1RX7_ENA 0x0040 /* AIF1RX7_ENA */
3413#define ARIZONA_AIF1RX7_ENA_MASK 0x0040 /* AIF1RX7_ENA */
3414#define ARIZONA_AIF1RX7_ENA_SHIFT 6 /* AIF1RX7_ENA */
3415#define ARIZONA_AIF1RX7_ENA_WIDTH 1 /* AIF1RX7_ENA */
3416#define ARIZONA_AIF1RX6_ENA 0x0020 /* AIF1RX6_ENA */
3417#define ARIZONA_AIF1RX6_ENA_MASK 0x0020 /* AIF1RX6_ENA */
3418#define ARIZONA_AIF1RX6_ENA_SHIFT 5 /* AIF1RX6_ENA */
3419#define ARIZONA_AIF1RX6_ENA_WIDTH 1 /* AIF1RX6_ENA */
3420#define ARIZONA_AIF1RX5_ENA 0x0010 /* AIF1RX5_ENA */
3421#define ARIZONA_AIF1RX5_ENA_MASK 0x0010 /* AIF1RX5_ENA */
3422#define ARIZONA_AIF1RX5_ENA_SHIFT 4 /* AIF1RX5_ENA */
3423#define ARIZONA_AIF1RX5_ENA_WIDTH 1 /* AIF1RX5_ENA */
3424#define ARIZONA_AIF1RX4_ENA 0x0008 /* AIF1RX4_ENA */
3425#define ARIZONA_AIF1RX4_ENA_MASK 0x0008 /* AIF1RX4_ENA */
3426#define ARIZONA_AIF1RX4_ENA_SHIFT 3 /* AIF1RX4_ENA */
3427#define ARIZONA_AIF1RX4_ENA_WIDTH 1 /* AIF1RX4_ENA */
3428#define ARIZONA_AIF1RX3_ENA 0x0004 /* AIF1RX3_ENA */
3429#define ARIZONA_AIF1RX3_ENA_MASK 0x0004 /* AIF1RX3_ENA */
3430#define ARIZONA_AIF1RX3_ENA_SHIFT 2 /* AIF1RX3_ENA */
3431#define ARIZONA_AIF1RX3_ENA_WIDTH 1 /* AIF1RX3_ENA */
3432#define ARIZONA_AIF1RX2_ENA 0x0002 /* AIF1RX2_ENA */
3433#define ARIZONA_AIF1RX2_ENA_MASK 0x0002 /* AIF1RX2_ENA */
3434#define ARIZONA_AIF1RX2_ENA_SHIFT 1 /* AIF1RX2_ENA */
3435#define ARIZONA_AIF1RX2_ENA_WIDTH 1 /* AIF1RX2_ENA */
3436#define ARIZONA_AIF1RX1_ENA 0x0001 /* AIF1RX1_ENA */
3437#define ARIZONA_AIF1RX1_ENA_MASK 0x0001 /* AIF1RX1_ENA */
3438#define ARIZONA_AIF1RX1_ENA_SHIFT 0 /* AIF1RX1_ENA */
3439#define ARIZONA_AIF1RX1_ENA_WIDTH 1 /* AIF1RX1_ENA */
3440
3441/*
3442 * R1307 (0x51B) - AIF1 Force Write
3443 */
3444#define ARIZONA_AIF1_FRC_WR 0x0001 /* AIF1_FRC_WR */
3445#define ARIZONA_AIF1_FRC_WR_MASK 0x0001 /* AIF1_FRC_WR */
3446#define ARIZONA_AIF1_FRC_WR_SHIFT 0 /* AIF1_FRC_WR */
3447#define ARIZONA_AIF1_FRC_WR_WIDTH 1 /* AIF1_FRC_WR */
3448
3449/*
3450 * R1344 (0x540) - AIF2 BCLK Ctrl
3451 */
3452#define ARIZONA_AIF2_BCLK_INV 0x0080 /* AIF2_BCLK_INV */
3453#define ARIZONA_AIF2_BCLK_INV_MASK 0x0080 /* AIF2_BCLK_INV */
3454#define ARIZONA_AIF2_BCLK_INV_SHIFT 7 /* AIF2_BCLK_INV */
3455#define ARIZONA_AIF2_BCLK_INV_WIDTH 1 /* AIF2_BCLK_INV */
3456#define ARIZONA_AIF2_BCLK_FRC 0x0040 /* AIF2_BCLK_FRC */
3457#define ARIZONA_AIF2_BCLK_FRC_MASK 0x0040 /* AIF2_BCLK_FRC */
3458#define ARIZONA_AIF2_BCLK_FRC_SHIFT 6 /* AIF2_BCLK_FRC */
3459#define ARIZONA_AIF2_BCLK_FRC_WIDTH 1 /* AIF2_BCLK_FRC */
3460#define ARIZONA_AIF2_BCLK_MSTR 0x0020 /* AIF2_BCLK_MSTR */
3461#define ARIZONA_AIF2_BCLK_MSTR_MASK 0x0020 /* AIF2_BCLK_MSTR */
3462#define ARIZONA_AIF2_BCLK_MSTR_SHIFT 5 /* AIF2_BCLK_MSTR */
3463#define ARIZONA_AIF2_BCLK_MSTR_WIDTH 1 /* AIF2_BCLK_MSTR */
3464#define ARIZONA_AIF2_BCLK_FREQ_MASK 0x001F /* AIF2_BCLK_FREQ - [4:0] */
3465#define ARIZONA_AIF2_BCLK_FREQ_SHIFT 0 /* AIF2_BCLK_FREQ - [4:0] */
3466#define ARIZONA_AIF2_BCLK_FREQ_WIDTH 5 /* AIF2_BCLK_FREQ - [4:0] */
3467
3468/*
3469 * R1345 (0x541) - AIF2 Tx Pin Ctrl
3470 */
3471#define ARIZONA_AIF2TX_DAT_TRI 0x0020 /* AIF2TX_DAT_TRI */
3472#define ARIZONA_AIF2TX_DAT_TRI_MASK 0x0020 /* AIF2TX_DAT_TRI */
3473#define ARIZONA_AIF2TX_DAT_TRI_SHIFT 5 /* AIF2TX_DAT_TRI */
3474#define ARIZONA_AIF2TX_DAT_TRI_WIDTH 1 /* AIF2TX_DAT_TRI */
3475#define ARIZONA_AIF2TX_LRCLK_SRC 0x0008 /* AIF2TX_LRCLK_SRC */
3476#define ARIZONA_AIF2TX_LRCLK_SRC_MASK 0x0008 /* AIF2TX_LRCLK_SRC */
3477#define ARIZONA_AIF2TX_LRCLK_SRC_SHIFT 3 /* AIF2TX_LRCLK_SRC */
3478#define ARIZONA_AIF2TX_LRCLK_SRC_WIDTH 1 /* AIF2TX_LRCLK_SRC */
3479#define ARIZONA_AIF2TX_LRCLK_INV 0x0004 /* AIF2TX_LRCLK_INV */
3480#define ARIZONA_AIF2TX_LRCLK_INV_MASK 0x0004 /* AIF2TX_LRCLK_INV */
3481#define ARIZONA_AIF2TX_LRCLK_INV_SHIFT 2 /* AIF2TX_LRCLK_INV */
3482#define ARIZONA_AIF2TX_LRCLK_INV_WIDTH 1 /* AIF2TX_LRCLK_INV */
3483#define ARIZONA_AIF2TX_LRCLK_FRC 0x0002 /* AIF2TX_LRCLK_FRC */
3484#define ARIZONA_AIF2TX_LRCLK_FRC_MASK 0x0002 /* AIF2TX_LRCLK_FRC */
3485#define ARIZONA_AIF2TX_LRCLK_FRC_SHIFT 1 /* AIF2TX_LRCLK_FRC */
3486#define ARIZONA_AIF2TX_LRCLK_FRC_WIDTH 1 /* AIF2TX_LRCLK_FRC */
3487#define ARIZONA_AIF2TX_LRCLK_MSTR 0x0001 /* AIF2TX_LRCLK_MSTR */
3488#define ARIZONA_AIF2TX_LRCLK_MSTR_MASK 0x0001 /* AIF2TX_LRCLK_MSTR */
3489#define ARIZONA_AIF2TX_LRCLK_MSTR_SHIFT 0 /* AIF2TX_LRCLK_MSTR */
3490#define ARIZONA_AIF2TX_LRCLK_MSTR_WIDTH 1 /* AIF2TX_LRCLK_MSTR */
3491
3492/*
3493 * R1346 (0x542) - AIF2 Rx Pin Ctrl
3494 */
3495#define ARIZONA_AIF2RX_LRCLK_INV 0x0004 /* AIF2RX_LRCLK_INV */
3496#define ARIZONA_AIF2RX_LRCLK_INV_MASK 0x0004 /* AIF2RX_LRCLK_INV */
3497#define ARIZONA_AIF2RX_LRCLK_INV_SHIFT 2 /* AIF2RX_LRCLK_INV */
3498#define ARIZONA_AIF2RX_LRCLK_INV_WIDTH 1 /* AIF2RX_LRCLK_INV */
3499#define ARIZONA_AIF2RX_LRCLK_FRC 0x0002 /* AIF2RX_LRCLK_FRC */
3500#define ARIZONA_AIF2RX_LRCLK_FRC_MASK 0x0002 /* AIF2RX_LRCLK_FRC */
3501#define ARIZONA_AIF2RX_LRCLK_FRC_SHIFT 1 /* AIF2RX_LRCLK_FRC */
3502#define ARIZONA_AIF2RX_LRCLK_FRC_WIDTH 1 /* AIF2RX_LRCLK_FRC */
3503#define ARIZONA_AIF2RX_LRCLK_MSTR 0x0001 /* AIF2RX_LRCLK_MSTR */
3504#define ARIZONA_AIF2RX_LRCLK_MSTR_MASK 0x0001 /* AIF2RX_LRCLK_MSTR */
3505#define ARIZONA_AIF2RX_LRCLK_MSTR_SHIFT 0 /* AIF2RX_LRCLK_MSTR */
3506#define ARIZONA_AIF2RX_LRCLK_MSTR_WIDTH 1 /* AIF2RX_LRCLK_MSTR */
3507
3508/*
3509 * R1347 (0x543) - AIF2 Rate Ctrl
3510 */
3511#define ARIZONA_AIF2_RATE_MASK 0x7800 /* AIF2_RATE - [14:11] */
3512#define ARIZONA_AIF2_RATE_SHIFT 11 /* AIF2_RATE - [14:11] */
3513#define ARIZONA_AIF2_RATE_WIDTH 4 /* AIF2_RATE - [14:11] */
3514#define ARIZONA_AIF2_TRI 0x0040 /* AIF2_TRI */
3515#define ARIZONA_AIF2_TRI_MASK 0x0040 /* AIF2_TRI */
3516#define ARIZONA_AIF2_TRI_SHIFT 6 /* AIF2_TRI */
3517#define ARIZONA_AIF2_TRI_WIDTH 1 /* AIF2_TRI */
3518
3519/*
3520 * R1348 (0x544) - AIF2 Format
3521 */
3522#define ARIZONA_AIF2_FMT_MASK 0x0007 /* AIF2_FMT - [2:0] */
3523#define ARIZONA_AIF2_FMT_SHIFT 0 /* AIF2_FMT - [2:0] */
3524#define ARIZONA_AIF2_FMT_WIDTH 3 /* AIF2_FMT - [2:0] */
3525
3526/*
3527 * R1349 (0x545) - AIF2 Tx BCLK Rate
3528 */
3529#define ARIZONA_AIF2TX_BCPF_MASK 0x1FFF /* AIF2TX_BCPF - [12:0] */
3530#define ARIZONA_AIF2TX_BCPF_SHIFT 0 /* AIF2TX_BCPF - [12:0] */
3531#define ARIZONA_AIF2TX_BCPF_WIDTH 13 /* AIF2TX_BCPF - [12:0] */
3532
3533/*
3534 * R1350 (0x546) - AIF2 Rx BCLK Rate
3535 */
3536#define ARIZONA_AIF2RX_BCPF_MASK 0x1FFF /* AIF2RX_BCPF - [12:0] */
3537#define ARIZONA_AIF2RX_BCPF_SHIFT 0 /* AIF2RX_BCPF - [12:0] */
3538#define ARIZONA_AIF2RX_BCPF_WIDTH 13 /* AIF2RX_BCPF - [12:0] */
3539
3540/*
3541 * R1351 (0x547) - AIF2 Frame Ctrl 1
3542 */
3543#define ARIZONA_AIF2TX_WL_MASK 0x3F00 /* AIF2TX_WL - [13:8] */
3544#define ARIZONA_AIF2TX_WL_SHIFT 8 /* AIF2TX_WL - [13:8] */
3545#define ARIZONA_AIF2TX_WL_WIDTH 6 /* AIF2TX_WL - [13:8] */
3546#define ARIZONA_AIF2TX_SLOT_LEN_MASK 0x00FF /* AIF2TX_SLOT_LEN - [7:0] */
3547#define ARIZONA_AIF2TX_SLOT_LEN_SHIFT 0 /* AIF2TX_SLOT_LEN - [7:0] */
3548#define ARIZONA_AIF2TX_SLOT_LEN_WIDTH 8 /* AIF2TX_SLOT_LEN - [7:0] */
3549
3550/*
3551 * R1352 (0x548) - AIF2 Frame Ctrl 2
3552 */
3553#define ARIZONA_AIF2RX_WL_MASK 0x3F00 /* AIF2RX_WL - [13:8] */
3554#define ARIZONA_AIF2RX_WL_SHIFT 8 /* AIF2RX_WL - [13:8] */
3555#define ARIZONA_AIF2RX_WL_WIDTH 6 /* AIF2RX_WL - [13:8] */
3556#define ARIZONA_AIF2RX_SLOT_LEN_MASK 0x00FF /* AIF2RX_SLOT_LEN - [7:0] */
3557#define ARIZONA_AIF2RX_SLOT_LEN_SHIFT 0 /* AIF2RX_SLOT_LEN - [7:0] */
3558#define ARIZONA_AIF2RX_SLOT_LEN_WIDTH 8 /* AIF2RX_SLOT_LEN - [7:0] */
3559
3560/*
3561 * R1353 (0x549) - AIF2 Frame Ctrl 3
3562 */
3563#define ARIZONA_AIF2TX1_SLOT_MASK 0x003F /* AIF2TX1_SLOT - [5:0] */
3564#define ARIZONA_AIF2TX1_SLOT_SHIFT 0 /* AIF2TX1_SLOT - [5:0] */
3565#define ARIZONA_AIF2TX1_SLOT_WIDTH 6 /* AIF2TX1_SLOT - [5:0] */
3566
3567/*
3568 * R1354 (0x54A) - AIF2 Frame Ctrl 4
3569 */
3570#define ARIZONA_AIF2TX2_SLOT_MASK 0x003F /* AIF2TX2_SLOT - [5:0] */
3571#define ARIZONA_AIF2TX2_SLOT_SHIFT 0 /* AIF2TX2_SLOT - [5:0] */
3572#define ARIZONA_AIF2TX2_SLOT_WIDTH 6 /* AIF2TX2_SLOT - [5:0] */
3573
3574/*
3575 * R1361 (0x551) - AIF2 Frame Ctrl 11
3576 */
3577#define ARIZONA_AIF2RX1_SLOT_MASK 0x003F /* AIF2RX1_SLOT - [5:0] */
3578#define ARIZONA_AIF2RX1_SLOT_SHIFT 0 /* AIF2RX1_SLOT - [5:0] */
3579#define ARIZONA_AIF2RX1_SLOT_WIDTH 6 /* AIF2RX1_SLOT - [5:0] */
3580
3581/*
3582 * R1362 (0x552) - AIF2 Frame Ctrl 12
3583 */
3584#define ARIZONA_AIF2RX2_SLOT_MASK 0x003F /* AIF2RX2_SLOT - [5:0] */
3585#define ARIZONA_AIF2RX2_SLOT_SHIFT 0 /* AIF2RX2_SLOT - [5:0] */
3586#define ARIZONA_AIF2RX2_SLOT_WIDTH 6 /* AIF2RX2_SLOT - [5:0] */
3587
3588/*
3589 * R1369 (0x559) - AIF2 Tx Enables
3590 */
3591#define ARIZONA_AIF2TX2_ENA 0x0002 /* AIF2TX2_ENA */
3592#define ARIZONA_AIF2TX2_ENA_MASK 0x0002 /* AIF2TX2_ENA */
3593#define ARIZONA_AIF2TX2_ENA_SHIFT 1 /* AIF2TX2_ENA */
3594#define ARIZONA_AIF2TX2_ENA_WIDTH 1 /* AIF2TX2_ENA */
3595#define ARIZONA_AIF2TX1_ENA 0x0001 /* AIF2TX1_ENA */
3596#define ARIZONA_AIF2TX1_ENA_MASK 0x0001 /* AIF2TX1_ENA */
3597#define ARIZONA_AIF2TX1_ENA_SHIFT 0 /* AIF2TX1_ENA */
3598#define ARIZONA_AIF2TX1_ENA_WIDTH 1 /* AIF2TX1_ENA */
3599
3600/*
3601 * R1370 (0x55A) - AIF2 Rx Enables
3602 */
3603#define ARIZONA_AIF2RX2_ENA 0x0002 /* AIF2RX2_ENA */
3604#define ARIZONA_AIF2RX2_ENA_MASK 0x0002 /* AIF2RX2_ENA */
3605#define ARIZONA_AIF2RX2_ENA_SHIFT 1 /* AIF2RX2_ENA */
3606#define ARIZONA_AIF2RX2_ENA_WIDTH 1 /* AIF2RX2_ENA */
3607#define ARIZONA_AIF2RX1_ENA 0x0001 /* AIF2RX1_ENA */
3608#define ARIZONA_AIF2RX1_ENA_MASK 0x0001 /* AIF2RX1_ENA */
3609#define ARIZONA_AIF2RX1_ENA_SHIFT 0 /* AIF2RX1_ENA */
3610#define ARIZONA_AIF2RX1_ENA_WIDTH 1 /* AIF2RX1_ENA */
3611
3612/*
3613 * R1371 (0x55B) - AIF2 Force Write
3614 */
3615#define ARIZONA_AIF2_FRC_WR 0x0001 /* AIF2_FRC_WR */
3616#define ARIZONA_AIF2_FRC_WR_MASK 0x0001 /* AIF2_FRC_WR */
3617#define ARIZONA_AIF2_FRC_WR_SHIFT 0 /* AIF2_FRC_WR */
3618#define ARIZONA_AIF2_FRC_WR_WIDTH 1 /* AIF2_FRC_WR */
3619
3620/*
3621 * R1408 (0x580) - AIF3 BCLK Ctrl
3622 */
3623#define ARIZONA_AIF3_BCLK_INV 0x0080 /* AIF3_BCLK_INV */
3624#define ARIZONA_AIF3_BCLK_INV_MASK 0x0080 /* AIF3_BCLK_INV */
3625#define ARIZONA_AIF3_BCLK_INV_SHIFT 7 /* AIF3_BCLK_INV */
3626#define ARIZONA_AIF3_BCLK_INV_WIDTH 1 /* AIF3_BCLK_INV */
3627#define ARIZONA_AIF3_BCLK_FRC 0x0040 /* AIF3_BCLK_FRC */
3628#define ARIZONA_AIF3_BCLK_FRC_MASK 0x0040 /* AIF3_BCLK_FRC */
3629#define ARIZONA_AIF3_BCLK_FRC_SHIFT 6 /* AIF3_BCLK_FRC */
3630#define ARIZONA_AIF3_BCLK_FRC_WIDTH 1 /* AIF3_BCLK_FRC */
3631#define ARIZONA_AIF3_BCLK_MSTR 0x0020 /* AIF3_BCLK_MSTR */
3632#define ARIZONA_AIF3_BCLK_MSTR_MASK 0x0020 /* AIF3_BCLK_MSTR */
3633#define ARIZONA_AIF3_BCLK_MSTR_SHIFT 5 /* AIF3_BCLK_MSTR */
3634#define ARIZONA_AIF3_BCLK_MSTR_WIDTH 1 /* AIF3_BCLK_MSTR */
3635#define ARIZONA_AIF3_BCLK_FREQ_MASK 0x001F /* AIF3_BCLK_FREQ - [4:0] */
3636#define ARIZONA_AIF3_BCLK_FREQ_SHIFT 0 /* AIF3_BCLK_FREQ - [4:0] */
3637#define ARIZONA_AIF3_BCLK_FREQ_WIDTH 5 /* AIF3_BCLK_FREQ - [4:0] */
3638
3639/*
3640 * R1409 (0x581) - AIF3 Tx Pin Ctrl
3641 */
3642#define ARIZONA_AIF3TX_DAT_TRI 0x0020 /* AIF3TX_DAT_TRI */
3643#define ARIZONA_AIF3TX_DAT_TRI_MASK 0x0020 /* AIF3TX_DAT_TRI */
3644#define ARIZONA_AIF3TX_DAT_TRI_SHIFT 5 /* AIF3TX_DAT_TRI */
3645#define ARIZONA_AIF3TX_DAT_TRI_WIDTH 1 /* AIF3TX_DAT_TRI */
3646#define ARIZONA_AIF3TX_LRCLK_SRC 0x0008 /* AIF3TX_LRCLK_SRC */
3647#define ARIZONA_AIF3TX_LRCLK_SRC_MASK 0x0008 /* AIF3TX_LRCLK_SRC */
3648#define ARIZONA_AIF3TX_LRCLK_SRC_SHIFT 3 /* AIF3TX_LRCLK_SRC */
3649#define ARIZONA_AIF3TX_LRCLK_SRC_WIDTH 1 /* AIF3TX_LRCLK_SRC */
3650#define ARIZONA_AIF3TX_LRCLK_INV 0x0004 /* AIF3TX_LRCLK_INV */
3651#define ARIZONA_AIF3TX_LRCLK_INV_MASK 0x0004 /* AIF3TX_LRCLK_INV */
3652#define ARIZONA_AIF3TX_LRCLK_INV_SHIFT 2 /* AIF3TX_LRCLK_INV */
3653#define ARIZONA_AIF3TX_LRCLK_INV_WIDTH 1 /* AIF3TX_LRCLK_INV */
3654#define ARIZONA_AIF3TX_LRCLK_FRC 0x0002 /* AIF3TX_LRCLK_FRC */
3655#define ARIZONA_AIF3TX_LRCLK_FRC_MASK 0x0002 /* AIF3TX_LRCLK_FRC */
3656#define ARIZONA_AIF3TX_LRCLK_FRC_SHIFT 1 /* AIF3TX_LRCLK_FRC */
3657#define ARIZONA_AIF3TX_LRCLK_FRC_WIDTH 1 /* AIF3TX_LRCLK_FRC */
3658#define ARIZONA_AIF3TX_LRCLK_MSTR 0x0001 /* AIF3TX_LRCLK_MSTR */
3659#define ARIZONA_AIF3TX_LRCLK_MSTR_MASK 0x0001 /* AIF3TX_LRCLK_MSTR */
3660#define ARIZONA_AIF3TX_LRCLK_MSTR_SHIFT 0 /* AIF3TX_LRCLK_MSTR */
3661#define ARIZONA_AIF3TX_LRCLK_MSTR_WIDTH 1 /* AIF3TX_LRCLK_MSTR */
3662
3663/*
3664 * R1410 (0x582) - AIF3 Rx Pin Ctrl
3665 */
3666#define ARIZONA_AIF3RX_LRCLK_INV 0x0004 /* AIF3RX_LRCLK_INV */
3667#define ARIZONA_AIF3RX_LRCLK_INV_MASK 0x0004 /* AIF3RX_LRCLK_INV */
3668#define ARIZONA_AIF3RX_LRCLK_INV_SHIFT 2 /* AIF3RX_LRCLK_INV */
3669#define ARIZONA_AIF3RX_LRCLK_INV_WIDTH 1 /* AIF3RX_LRCLK_INV */
3670#define ARIZONA_AIF3RX_LRCLK_FRC 0x0002 /* AIF3RX_LRCLK_FRC */
3671#define ARIZONA_AIF3RX_LRCLK_FRC_MASK 0x0002 /* AIF3RX_LRCLK_FRC */
3672#define ARIZONA_AIF3RX_LRCLK_FRC_SHIFT 1 /* AIF3RX_LRCLK_FRC */
3673#define ARIZONA_AIF3RX_LRCLK_FRC_WIDTH 1 /* AIF3RX_LRCLK_FRC */
3674#define ARIZONA_AIF3RX_LRCLK_MSTR 0x0001 /* AIF3RX_LRCLK_MSTR */
3675#define ARIZONA_AIF3RX_LRCLK_MSTR_MASK 0x0001 /* AIF3RX_LRCLK_MSTR */
3676#define ARIZONA_AIF3RX_LRCLK_MSTR_SHIFT 0 /* AIF3RX_LRCLK_MSTR */
3677#define ARIZONA_AIF3RX_LRCLK_MSTR_WIDTH 1 /* AIF3RX_LRCLK_MSTR */
3678
3679/*
3680 * R1411 (0x583) - AIF3 Rate Ctrl
3681 */
3682#define ARIZONA_AIF3_RATE_MASK 0x7800 /* AIF3_RATE - [14:11] */
3683#define ARIZONA_AIF3_RATE_SHIFT 11 /* AIF3_RATE - [14:11] */
3684#define ARIZONA_AIF3_RATE_WIDTH 4 /* AIF3_RATE - [14:11] */
3685#define ARIZONA_AIF3_TRI 0x0040 /* AIF3_TRI */
3686#define ARIZONA_AIF3_TRI_MASK 0x0040 /* AIF3_TRI */
3687#define ARIZONA_AIF3_TRI_SHIFT 6 /* AIF3_TRI */
3688#define ARIZONA_AIF3_TRI_WIDTH 1 /* AIF3_TRI */
3689
3690/*
3691 * R1412 (0x584) - AIF3 Format
3692 */
3693#define ARIZONA_AIF3_FMT_MASK 0x0007 /* AIF3_FMT - [2:0] */
3694#define ARIZONA_AIF3_FMT_SHIFT 0 /* AIF3_FMT - [2:0] */
3695#define ARIZONA_AIF3_FMT_WIDTH 3 /* AIF3_FMT - [2:0] */
3696
3697/*
3698 * R1413 (0x585) - AIF3 Tx BCLK Rate
3699 */
3700#define ARIZONA_AIF3TX_BCPF_MASK 0x1FFF /* AIF3TX_BCPF - [12:0] */
3701#define ARIZONA_AIF3TX_BCPF_SHIFT 0 /* AIF3TX_BCPF - [12:0] */
3702#define ARIZONA_AIF3TX_BCPF_WIDTH 13 /* AIF3TX_BCPF - [12:0] */
3703
3704/*
3705 * R1414 (0x586) - AIF3 Rx BCLK Rate
3706 */
3707#define ARIZONA_AIF3RX_BCPF_MASK 0x1FFF /* AIF3RX_BCPF - [12:0] */
3708#define ARIZONA_AIF3RX_BCPF_SHIFT 0 /* AIF3RX_BCPF - [12:0] */
3709#define ARIZONA_AIF3RX_BCPF_WIDTH 13 /* AIF3RX_BCPF - [12:0] */
3710
3711/*
3712 * R1415 (0x587) - AIF3 Frame Ctrl 1
3713 */
3714#define ARIZONA_AIF3TX_WL_MASK 0x3F00 /* AIF3TX_WL - [13:8] */
3715#define ARIZONA_AIF3TX_WL_SHIFT 8 /* AIF3TX_WL - [13:8] */
3716#define ARIZONA_AIF3TX_WL_WIDTH 6 /* AIF3TX_WL - [13:8] */
3717#define ARIZONA_AIF3TX_SLOT_LEN_MASK 0x00FF /* AIF3TX_SLOT_LEN - [7:0] */
3718#define ARIZONA_AIF3TX_SLOT_LEN_SHIFT 0 /* AIF3TX_SLOT_LEN - [7:0] */
3719#define ARIZONA_AIF3TX_SLOT_LEN_WIDTH 8 /* AIF3TX_SLOT_LEN - [7:0] */
3720
3721/*
3722 * R1416 (0x588) - AIF3 Frame Ctrl 2
3723 */
3724#define ARIZONA_AIF3RX_WL_MASK 0x3F00 /* AIF3RX_WL - [13:8] */
3725#define ARIZONA_AIF3RX_WL_SHIFT 8 /* AIF3RX_WL - [13:8] */
3726#define ARIZONA_AIF3RX_WL_WIDTH 6 /* AIF3RX_WL - [13:8] */
3727#define ARIZONA_AIF3RX_SLOT_LEN_MASK 0x00FF /* AIF3RX_SLOT_LEN - [7:0] */
3728#define ARIZONA_AIF3RX_SLOT_LEN_SHIFT 0 /* AIF3RX_SLOT_LEN - [7:0] */
3729#define ARIZONA_AIF3RX_SLOT_LEN_WIDTH 8 /* AIF3RX_SLOT_LEN - [7:0] */
3730
3731/*
3732 * R1417 (0x589) - AIF3 Frame Ctrl 3
3733 */
3734#define ARIZONA_AIF3TX1_SLOT_MASK 0x003F /* AIF3TX1_SLOT - [5:0] */
3735#define ARIZONA_AIF3TX1_SLOT_SHIFT 0 /* AIF3TX1_SLOT - [5:0] */
3736#define ARIZONA_AIF3TX1_SLOT_WIDTH 6 /* AIF3TX1_SLOT - [5:0] */
3737
3738/*
3739 * R1418 (0x58A) - AIF3 Frame Ctrl 4
3740 */
3741#define ARIZONA_AIF3TX2_SLOT_MASK 0x003F /* AIF3TX2_SLOT - [5:0] */
3742#define ARIZONA_AIF3TX2_SLOT_SHIFT 0 /* AIF3TX2_SLOT - [5:0] */
3743#define ARIZONA_AIF3TX2_SLOT_WIDTH 6 /* AIF3TX2_SLOT - [5:0] */
3744
3745/*
3746 * R1425 (0x591) - AIF3 Frame Ctrl 11
3747 */
3748#define ARIZONA_AIF3RX1_SLOT_MASK 0x003F /* AIF3RX1_SLOT - [5:0] */
3749#define ARIZONA_AIF3RX1_SLOT_SHIFT 0 /* AIF3RX1_SLOT - [5:0] */
3750#define ARIZONA_AIF3RX1_SLOT_WIDTH 6 /* AIF3RX1_SLOT - [5:0] */
3751
3752/*
3753 * R1426 (0x592) - AIF3 Frame Ctrl 12
3754 */
3755#define ARIZONA_AIF3RX2_SLOT_MASK 0x003F /* AIF3RX2_SLOT - [5:0] */
3756#define ARIZONA_AIF3RX2_SLOT_SHIFT 0 /* AIF3RX2_SLOT - [5:0] */
3757#define ARIZONA_AIF3RX2_SLOT_WIDTH 6 /* AIF3RX2_SLOT - [5:0] */
3758
3759/*
3760 * R1433 (0x599) - AIF3 Tx Enables
3761 */
3762#define ARIZONA_AIF3TX2_ENA 0x0002 /* AIF3TX2_ENA */
3763#define ARIZONA_AIF3TX2_ENA_MASK 0x0002 /* AIF3TX2_ENA */
3764#define ARIZONA_AIF3TX2_ENA_SHIFT 1 /* AIF3TX2_ENA */
3765#define ARIZONA_AIF3TX2_ENA_WIDTH 1 /* AIF3TX2_ENA */
3766#define ARIZONA_AIF3TX1_ENA 0x0001 /* AIF3TX1_ENA */
3767#define ARIZONA_AIF3TX1_ENA_MASK 0x0001 /* AIF3TX1_ENA */
3768#define ARIZONA_AIF3TX1_ENA_SHIFT 0 /* AIF3TX1_ENA */
3769#define ARIZONA_AIF3TX1_ENA_WIDTH 1 /* AIF3TX1_ENA */
3770
3771/*
3772 * R1434 (0x59A) - AIF3 Rx Enables
3773 */
3774#define ARIZONA_AIF3RX2_ENA 0x0002 /* AIF3RX2_ENA */
3775#define ARIZONA_AIF3RX2_ENA_MASK 0x0002 /* AIF3RX2_ENA */
3776#define ARIZONA_AIF3RX2_ENA_SHIFT 1 /* AIF3RX2_ENA */
3777#define ARIZONA_AIF3RX2_ENA_WIDTH 1 /* AIF3RX2_ENA */
3778#define ARIZONA_AIF3RX1_ENA 0x0001 /* AIF3RX1_ENA */
3779#define ARIZONA_AIF3RX1_ENA_MASK 0x0001 /* AIF3RX1_ENA */
3780#define ARIZONA_AIF3RX1_ENA_SHIFT 0 /* AIF3RX1_ENA */
3781#define ARIZONA_AIF3RX1_ENA_WIDTH 1 /* AIF3RX1_ENA */
3782
3783/*
3784 * R1435 (0x59B) - AIF3 Force Write
3785 */
3786#define ARIZONA_AIF3_FRC_WR 0x0001 /* AIF3_FRC_WR */
3787#define ARIZONA_AIF3_FRC_WR_MASK 0x0001 /* AIF3_FRC_WR */
3788#define ARIZONA_AIF3_FRC_WR_SHIFT 0 /* AIF3_FRC_WR */
3789#define ARIZONA_AIF3_FRC_WR_WIDTH 1 /* AIF3_FRC_WR */
3790
3791/*
3792 * R1507 (0x5E3) - SLIMbus Framer Ref Gear
3793 */
3794#define ARIZONA_SLIMCLK_SRC 0x0010 /* SLIMCLK_SRC */
3795#define ARIZONA_SLIMCLK_SRC_MASK 0x0010 /* SLIMCLK_SRC */
3796#define ARIZONA_SLIMCLK_SRC_SHIFT 4 /* SLIMCLK_SRC */
3797#define ARIZONA_SLIMCLK_SRC_WIDTH 1 /* SLIMCLK_SRC */
3798#define ARIZONA_FRAMER_REF_GEAR_MASK 0x000F /* FRAMER_REF_GEAR - [3:0] */
3799#define ARIZONA_FRAMER_REF_GEAR_SHIFT 0 /* FRAMER_REF_GEAR - [3:0] */
3800#define ARIZONA_FRAMER_REF_GEAR_WIDTH 4 /* FRAMER_REF_GEAR - [3:0] */
3801
3802/*
3803 * R1509 (0x5E5) - SLIMbus Rates 1
3804 */
3805#define ARIZONA_SLIMRX2_RATE_MASK 0x7800 /* SLIMRX2_RATE - [14:11] */
3806#define ARIZONA_SLIMRX2_RATE_SHIFT 11 /* SLIMRX2_RATE - [14:11] */
3807#define ARIZONA_SLIMRX2_RATE_WIDTH 4 /* SLIMRX2_RATE - [14:11] */
3808#define ARIZONA_SLIMRX1_RATE_MASK 0x0078 /* SLIMRX1_RATE - [6:3] */
3809#define ARIZONA_SLIMRX1_RATE_SHIFT 3 /* SLIMRX1_RATE - [6:3] */
3810#define ARIZONA_SLIMRX1_RATE_WIDTH 4 /* SLIMRX1_RATE - [6:3] */
3811
3812/*
3813 * R1510 (0x5E6) - SLIMbus Rates 2
3814 */
3815#define ARIZONA_SLIMRX4_RATE_MASK 0x7800 /* SLIMRX4_RATE - [14:11] */
3816#define ARIZONA_SLIMRX4_RATE_SHIFT 11 /* SLIMRX4_RATE - [14:11] */
3817#define ARIZONA_SLIMRX4_RATE_WIDTH 4 /* SLIMRX4_RATE - [14:11] */
3818#define ARIZONA_SLIMRX3_RATE_MASK 0x0078 /* SLIMRX3_RATE - [6:3] */
3819#define ARIZONA_SLIMRX3_RATE_SHIFT 3 /* SLIMRX3_RATE - [6:3] */
3820#define ARIZONA_SLIMRX3_RATE_WIDTH 4 /* SLIMRX3_RATE - [6:3] */
3821
3822/*
3823 * R1511 (0x5E7) - SLIMbus Rates 3
3824 */
3825#define ARIZONA_SLIMRX6_RATE_MASK 0x7800 /* SLIMRX6_RATE - [14:11] */
3826#define ARIZONA_SLIMRX6_RATE_SHIFT 11 /* SLIMRX6_RATE - [14:11] */
3827#define ARIZONA_SLIMRX6_RATE_WIDTH 4 /* SLIMRX6_RATE - [14:11] */
3828#define ARIZONA_SLIMRX5_RATE_MASK 0x0078 /* SLIMRX5_RATE - [6:3] */
3829#define ARIZONA_SLIMRX5_RATE_SHIFT 3 /* SLIMRX5_RATE - [6:3] */
3830#define ARIZONA_SLIMRX5_RATE_WIDTH 4 /* SLIMRX5_RATE - [6:3] */
3831
3832/*
3833 * R1512 (0x5E8) - SLIMbus Rates 4
3834 */
3835#define ARIZONA_SLIMRX8_RATE_MASK 0x7800 /* SLIMRX8_RATE - [14:11] */
3836#define ARIZONA_SLIMRX8_RATE_SHIFT 11 /* SLIMRX8_RATE - [14:11] */
3837#define ARIZONA_SLIMRX8_RATE_WIDTH 4 /* SLIMRX8_RATE - [14:11] */
3838#define ARIZONA_SLIMRX7_RATE_MASK 0x0078 /* SLIMRX7_RATE - [6:3] */
3839#define ARIZONA_SLIMRX7_RATE_SHIFT 3 /* SLIMRX7_RATE - [6:3] */
3840#define ARIZONA_SLIMRX7_RATE_WIDTH 4 /* SLIMRX7_RATE - [6:3] */
3841
3842/*
3843 * R1513 (0x5E9) - SLIMbus Rates 5
3844 */
3845#define ARIZONA_SLIMTX2_RATE_MASK 0x7800 /* SLIMTX2_RATE - [14:11] */
3846#define ARIZONA_SLIMTX2_RATE_SHIFT 11 /* SLIMTX2_RATE - [14:11] */
3847#define ARIZONA_SLIMTX2_RATE_WIDTH 4 /* SLIMTX2_RATE - [14:11] */
3848#define ARIZONA_SLIMTX1_RATE_MASK 0x0078 /* SLIMTX1_RATE - [6:3] */
3849#define ARIZONA_SLIMTX1_RATE_SHIFT 3 /* SLIMTX1_RATE - [6:3] */
3850#define ARIZONA_SLIMTX1_RATE_WIDTH 4 /* SLIMTX1_RATE - [6:3] */
3851
3852/*
3853 * R1514 (0x5EA) - SLIMbus Rates 6
3854 */
3855#define ARIZONA_SLIMTX4_RATE_MASK 0x7800 /* SLIMTX4_RATE - [14:11] */
3856#define ARIZONA_SLIMTX4_RATE_SHIFT 11 /* SLIMTX4_RATE - [14:11] */
3857#define ARIZONA_SLIMTX4_RATE_WIDTH 4 /* SLIMTX4_RATE - [14:11] */
3858#define ARIZONA_SLIMTX3_RATE_MASK 0x0078 /* SLIMTX3_RATE - [6:3] */
3859#define ARIZONA_SLIMTX3_RATE_SHIFT 3 /* SLIMTX3_RATE - [6:3] */
3860#define ARIZONA_SLIMTX3_RATE_WIDTH 4 /* SLIMTX3_RATE - [6:3] */
3861
3862/*
3863 * R1515 (0x5EB) - SLIMbus Rates 7
3864 */
3865#define ARIZONA_SLIMTX6_RATE_MASK 0x7800 /* SLIMTX6_RATE - [14:11] */
3866#define ARIZONA_SLIMTX6_RATE_SHIFT 11 /* SLIMTX6_RATE - [14:11] */
3867#define ARIZONA_SLIMTX6_RATE_WIDTH 4 /* SLIMTX6_RATE - [14:11] */
3868#define ARIZONA_SLIMTX5_RATE_MASK 0x0078 /* SLIMTX5_RATE - [6:3] */
3869#define ARIZONA_SLIMTX5_RATE_SHIFT 3 /* SLIMTX5_RATE - [6:3] */
3870#define ARIZONA_SLIMTX5_RATE_WIDTH 4 /* SLIMTX5_RATE - [6:3] */
3871
3872/*
3873 * R1516 (0x5EC) - SLIMbus Rates 8
3874 */
3875#define ARIZONA_SLIMTX8_RATE_MASK 0x7800 /* SLIMTX8_RATE - [14:11] */
3876#define ARIZONA_SLIMTX8_RATE_SHIFT 11 /* SLIMTX8_RATE - [14:11] */
3877#define ARIZONA_SLIMTX8_RATE_WIDTH 4 /* SLIMTX8_RATE - [14:11] */
3878#define ARIZONA_SLIMTX7_RATE_MASK 0x0078 /* SLIMTX7_RATE - [6:3] */
3879#define ARIZONA_SLIMTX7_RATE_SHIFT 3 /* SLIMTX7_RATE - [6:3] */
3880#define ARIZONA_SLIMTX7_RATE_WIDTH 4 /* SLIMTX7_RATE - [6:3] */
3881
3882/*
3883 * R1525 (0x5F5) - SLIMbus RX Channel Enable
3884 */
3885#define ARIZONA_SLIMRX8_ENA 0x0080 /* SLIMRX8_ENA */
3886#define ARIZONA_SLIMRX8_ENA_MASK 0x0080 /* SLIMRX8_ENA */
3887#define ARIZONA_SLIMRX8_ENA_SHIFT 7 /* SLIMRX8_ENA */
3888#define ARIZONA_SLIMRX8_ENA_WIDTH 1 /* SLIMRX8_ENA */
3889#define ARIZONA_SLIMRX7_ENA 0x0040 /* SLIMRX7_ENA */
3890#define ARIZONA_SLIMRX7_ENA_MASK 0x0040 /* SLIMRX7_ENA */
3891#define ARIZONA_SLIMRX7_ENA_SHIFT 6 /* SLIMRX7_ENA */
3892#define ARIZONA_SLIMRX7_ENA_WIDTH 1 /* SLIMRX7_ENA */
3893#define ARIZONA_SLIMRX6_ENA 0x0020 /* SLIMRX6_ENA */
3894#define ARIZONA_SLIMRX6_ENA_MASK 0x0020 /* SLIMRX6_ENA */
3895#define ARIZONA_SLIMRX6_ENA_SHIFT 5 /* SLIMRX6_ENA */
3896#define ARIZONA_SLIMRX6_ENA_WIDTH 1 /* SLIMRX6_ENA */
3897#define ARIZONA_SLIMRX5_ENA 0x0010 /* SLIMRX5_ENA */
3898#define ARIZONA_SLIMRX5_ENA_MASK 0x0010 /* SLIMRX5_ENA */
3899#define ARIZONA_SLIMRX5_ENA_SHIFT 4 /* SLIMRX5_ENA */
3900#define ARIZONA_SLIMRX5_ENA_WIDTH 1 /* SLIMRX5_ENA */
3901#define ARIZONA_SLIMRX4_ENA 0x0008 /* SLIMRX4_ENA */
3902#define ARIZONA_SLIMRX4_ENA_MASK 0x0008 /* SLIMRX4_ENA */
3903#define ARIZONA_SLIMRX4_ENA_SHIFT 3 /* SLIMRX4_ENA */
3904#define ARIZONA_SLIMRX4_ENA_WIDTH 1 /* SLIMRX4_ENA */
3905#define ARIZONA_SLIMRX3_ENA 0x0004 /* SLIMRX3_ENA */
3906#define ARIZONA_SLIMRX3_ENA_MASK 0x0004 /* SLIMRX3_ENA */
3907#define ARIZONA_SLIMRX3_ENA_SHIFT 2 /* SLIMRX3_ENA */
3908#define ARIZONA_SLIMRX3_ENA_WIDTH 1 /* SLIMRX3_ENA */
3909#define ARIZONA_SLIMRX2_ENA 0x0002 /* SLIMRX2_ENA */
3910#define ARIZONA_SLIMRX2_ENA_MASK 0x0002 /* SLIMRX2_ENA */
3911#define ARIZONA_SLIMRX2_ENA_SHIFT 1 /* SLIMRX2_ENA */
3912#define ARIZONA_SLIMRX2_ENA_WIDTH 1 /* SLIMRX2_ENA */
3913#define ARIZONA_SLIMRX1_ENA 0x0001 /* SLIMRX1_ENA */
3914#define ARIZONA_SLIMRX1_ENA_MASK 0x0001 /* SLIMRX1_ENA */
3915#define ARIZONA_SLIMRX1_ENA_SHIFT 0 /* SLIMRX1_ENA */
3916#define ARIZONA_SLIMRX1_ENA_WIDTH 1 /* SLIMRX1_ENA */
3917
3918/*
3919 * R1526 (0x5F6) - SLIMbus TX Channel Enable
3920 */
3921#define ARIZONA_SLIMTX8_ENA 0x0080 /* SLIMTX8_ENA */
3922#define ARIZONA_SLIMTX8_ENA_MASK 0x0080 /* SLIMTX8_ENA */
3923#define ARIZONA_SLIMTX8_ENA_SHIFT 7 /* SLIMTX8_ENA */
3924#define ARIZONA_SLIMTX8_ENA_WIDTH 1 /* SLIMTX8_ENA */
3925#define ARIZONA_SLIMTX7_ENA 0x0040 /* SLIMTX7_ENA */
3926#define ARIZONA_SLIMTX7_ENA_MASK 0x0040 /* SLIMTX7_ENA */
3927#define ARIZONA_SLIMTX7_ENA_SHIFT 6 /* SLIMTX7_ENA */
3928#define ARIZONA_SLIMTX7_ENA_WIDTH 1 /* SLIMTX7_ENA */
3929#define ARIZONA_SLIMTX6_ENA 0x0020 /* SLIMTX6_ENA */
3930#define ARIZONA_SLIMTX6_ENA_MASK 0x0020 /* SLIMTX6_ENA */
3931#define ARIZONA_SLIMTX6_ENA_SHIFT 5 /* SLIMTX6_ENA */
3932#define ARIZONA_SLIMTX6_ENA_WIDTH 1 /* SLIMTX6_ENA */
3933#define ARIZONA_SLIMTX5_ENA 0x0010 /* SLIMTX5_ENA */
3934#define ARIZONA_SLIMTX5_ENA_MASK 0x0010 /* SLIMTX5_ENA */
3935#define ARIZONA_SLIMTX5_ENA_SHIFT 4 /* SLIMTX5_ENA */
3936#define ARIZONA_SLIMTX5_ENA_WIDTH 1 /* SLIMTX5_ENA */
3937#define ARIZONA_SLIMTX4_ENA 0x0008 /* SLIMTX4_ENA */
3938#define ARIZONA_SLIMTX4_ENA_MASK 0x0008 /* SLIMTX4_ENA */
3939#define ARIZONA_SLIMTX4_ENA_SHIFT 3 /* SLIMTX4_ENA */
3940#define ARIZONA_SLIMTX4_ENA_WIDTH 1 /* SLIMTX4_ENA */
3941#define ARIZONA_SLIMTX3_ENA 0x0004 /* SLIMTX3_ENA */
3942#define ARIZONA_SLIMTX3_ENA_MASK 0x0004 /* SLIMTX3_ENA */
3943#define ARIZONA_SLIMTX3_ENA_SHIFT 2 /* SLIMTX3_ENA */
3944#define ARIZONA_SLIMTX3_ENA_WIDTH 1 /* SLIMTX3_ENA */
3945#define ARIZONA_SLIMTX2_ENA 0x0002 /* SLIMTX2_ENA */
3946#define ARIZONA_SLIMTX2_ENA_MASK 0x0002 /* SLIMTX2_ENA */
3947#define ARIZONA_SLIMTX2_ENA_SHIFT 1 /* SLIMTX2_ENA */
3948#define ARIZONA_SLIMTX2_ENA_WIDTH 1 /* SLIMTX2_ENA */
3949#define ARIZONA_SLIMTX1_ENA 0x0001 /* SLIMTX1_ENA */
3950#define ARIZONA_SLIMTX1_ENA_MASK 0x0001 /* SLIMTX1_ENA */
3951#define ARIZONA_SLIMTX1_ENA_SHIFT 0 /* SLIMTX1_ENA */
3952#define ARIZONA_SLIMTX1_ENA_WIDTH 1 /* SLIMTX1_ENA */
3953
3954/*
3955 * R1527 (0x5F7) - SLIMbus RX Port Status
3956 */
3957#define ARIZONA_SLIMRX8_PORT_STS 0x0080 /* SLIMRX8_PORT_STS */
3958#define ARIZONA_SLIMRX8_PORT_STS_MASK 0x0080 /* SLIMRX8_PORT_STS */
3959#define ARIZONA_SLIMRX8_PORT_STS_SHIFT 7 /* SLIMRX8_PORT_STS */
3960#define ARIZONA_SLIMRX8_PORT_STS_WIDTH 1 /* SLIMRX8_PORT_STS */
3961#define ARIZONA_SLIMRX7_PORT_STS 0x0040 /* SLIMRX7_PORT_STS */
3962#define ARIZONA_SLIMRX7_PORT_STS_MASK 0x0040 /* SLIMRX7_PORT_STS */
3963#define ARIZONA_SLIMRX7_PORT_STS_SHIFT 6 /* SLIMRX7_PORT_STS */
3964#define ARIZONA_SLIMRX7_PORT_STS_WIDTH 1 /* SLIMRX7_PORT_STS */
3965#define ARIZONA_SLIMRX6_PORT_STS 0x0020 /* SLIMRX6_PORT_STS */
3966#define ARIZONA_SLIMRX6_PORT_STS_MASK 0x0020 /* SLIMRX6_PORT_STS */
3967#define ARIZONA_SLIMRX6_PORT_STS_SHIFT 5 /* SLIMRX6_PORT_STS */
3968#define ARIZONA_SLIMRX6_PORT_STS_WIDTH 1 /* SLIMRX6_PORT_STS */
3969#define ARIZONA_SLIMRX5_PORT_STS 0x0010 /* SLIMRX5_PORT_STS */
3970#define ARIZONA_SLIMRX5_PORT_STS_MASK 0x0010 /* SLIMRX5_PORT_STS */
3971#define ARIZONA_SLIMRX5_PORT_STS_SHIFT 4 /* SLIMRX5_PORT_STS */
3972#define ARIZONA_SLIMRX5_PORT_STS_WIDTH 1 /* SLIMRX5_PORT_STS */
3973#define ARIZONA_SLIMRX4_PORT_STS 0x0008 /* SLIMRX4_PORT_STS */
3974#define ARIZONA_SLIMRX4_PORT_STS_MASK 0x0008 /* SLIMRX4_PORT_STS */
3975#define ARIZONA_SLIMRX4_PORT_STS_SHIFT 3 /* SLIMRX4_PORT_STS */
3976#define ARIZONA_SLIMRX4_PORT_STS_WIDTH 1 /* SLIMRX4_PORT_STS */
3977#define ARIZONA_SLIMRX3_PORT_STS 0x0004 /* SLIMRX3_PORT_STS */
3978#define ARIZONA_SLIMRX3_PORT_STS_MASK 0x0004 /* SLIMRX3_PORT_STS */
3979#define ARIZONA_SLIMRX3_PORT_STS_SHIFT 2 /* SLIMRX3_PORT_STS */
3980#define ARIZONA_SLIMRX3_PORT_STS_WIDTH 1 /* SLIMRX3_PORT_STS */
3981#define ARIZONA_SLIMRX2_PORT_STS 0x0002 /* SLIMRX2_PORT_STS */
3982#define ARIZONA_SLIMRX2_PORT_STS_MASK 0x0002 /* SLIMRX2_PORT_STS */
3983#define ARIZONA_SLIMRX2_PORT_STS_SHIFT 1 /* SLIMRX2_PORT_STS */
3984#define ARIZONA_SLIMRX2_PORT_STS_WIDTH 1 /* SLIMRX2_PORT_STS */
3985#define ARIZONA_SLIMRX1_PORT_STS 0x0001 /* SLIMRX1_PORT_STS */
3986#define ARIZONA_SLIMRX1_PORT_STS_MASK 0x0001 /* SLIMRX1_PORT_STS */
3987#define ARIZONA_SLIMRX1_PORT_STS_SHIFT 0 /* SLIMRX1_PORT_STS */
3988#define ARIZONA_SLIMRX1_PORT_STS_WIDTH 1 /* SLIMRX1_PORT_STS */
3989
3990/*
3991 * R1528 (0x5F8) - SLIMbus TX Port Status
3992 */
3993#define ARIZONA_SLIMTX8_PORT_STS 0x0080 /* SLIMTX8_PORT_STS */
3994#define ARIZONA_SLIMTX8_PORT_STS_MASK 0x0080 /* SLIMTX8_PORT_STS */
3995#define ARIZONA_SLIMTX8_PORT_STS_SHIFT 7 /* SLIMTX8_PORT_STS */
3996#define ARIZONA_SLIMTX8_PORT_STS_WIDTH 1 /* SLIMTX8_PORT_STS */
3997#define ARIZONA_SLIMTX7_PORT_STS 0x0040 /* SLIMTX7_PORT_STS */
3998#define ARIZONA_SLIMTX7_PORT_STS_MASK 0x0040 /* SLIMTX7_PORT_STS */
3999#define ARIZONA_SLIMTX7_PORT_STS_SHIFT 6 /* SLIMTX7_PORT_STS */
4000#define ARIZONA_SLIMTX7_PORT_STS_WIDTH 1 /* SLIMTX7_PORT_STS */
4001#define ARIZONA_SLIMTX6_PORT_STS 0x0020 /* SLIMTX6_PORT_STS */
4002#define ARIZONA_SLIMTX6_PORT_STS_MASK 0x0020 /* SLIMTX6_PORT_STS */
4003#define ARIZONA_SLIMTX6_PORT_STS_SHIFT 5 /* SLIMTX6_PORT_STS */
4004#define ARIZONA_SLIMTX6_PORT_STS_WIDTH 1 /* SLIMTX6_PORT_STS */
4005#define ARIZONA_SLIMTX5_PORT_STS 0x0010 /* SLIMTX5_PORT_STS */
4006#define ARIZONA_SLIMTX5_PORT_STS_MASK 0x0010 /* SLIMTX5_PORT_STS */
4007#define ARIZONA_SLIMTX5_PORT_STS_SHIFT 4 /* SLIMTX5_PORT_STS */
4008#define ARIZONA_SLIMTX5_PORT_STS_WIDTH 1 /* SLIMTX5_PORT_STS */
4009#define ARIZONA_SLIMTX4_PORT_STS 0x0008 /* SLIMTX4_PORT_STS */
4010#define ARIZONA_SLIMTX4_PORT_STS_MASK 0x0008 /* SLIMTX4_PORT_STS */
4011#define ARIZONA_SLIMTX4_PORT_STS_SHIFT 3 /* SLIMTX4_PORT_STS */
4012#define ARIZONA_SLIMTX4_PORT_STS_WIDTH 1 /* SLIMTX4_PORT_STS */
4013#define ARIZONA_SLIMTX3_PORT_STS 0x0004 /* SLIMTX3_PORT_STS */
4014#define ARIZONA_SLIMTX3_PORT_STS_MASK 0x0004 /* SLIMTX3_PORT_STS */
4015#define ARIZONA_SLIMTX3_PORT_STS_SHIFT 2 /* SLIMTX3_PORT_STS */
4016#define ARIZONA_SLIMTX3_PORT_STS_WIDTH 1 /* SLIMTX3_PORT_STS */
4017#define ARIZONA_SLIMTX2_PORT_STS 0x0002 /* SLIMTX2_PORT_STS */
4018#define ARIZONA_SLIMTX2_PORT_STS_MASK 0x0002 /* SLIMTX2_PORT_STS */
4019#define ARIZONA_SLIMTX2_PORT_STS_SHIFT 1 /* SLIMTX2_PORT_STS */
4020#define ARIZONA_SLIMTX2_PORT_STS_WIDTH 1 /* SLIMTX2_PORT_STS */
4021#define ARIZONA_SLIMTX1_PORT_STS 0x0001 /* SLIMTX1_PORT_STS */
4022#define ARIZONA_SLIMTX1_PORT_STS_MASK 0x0001 /* SLIMTX1_PORT_STS */
4023#define ARIZONA_SLIMTX1_PORT_STS_SHIFT 0 /* SLIMTX1_PORT_STS */
4024#define ARIZONA_SLIMTX1_PORT_STS_WIDTH 1 /* SLIMTX1_PORT_STS */
4025
4026/*
4027 * R3087 (0xC0F) - IRQ CTRL 1
4028 */
4029#define ARIZONA_IRQ_POL 0x0400 /* IRQ_POL */
4030#define ARIZONA_IRQ_POL_MASK 0x0400 /* IRQ_POL */
4031#define ARIZONA_IRQ_POL_SHIFT 10 /* IRQ_POL */
4032#define ARIZONA_IRQ_POL_WIDTH 1 /* IRQ_POL */
4033#define ARIZONA_IRQ_OP_CFG 0x0200 /* IRQ_OP_CFG */
4034#define ARIZONA_IRQ_OP_CFG_MASK 0x0200 /* IRQ_OP_CFG */
4035#define ARIZONA_IRQ_OP_CFG_SHIFT 9 /* IRQ_OP_CFG */
4036#define ARIZONA_IRQ_OP_CFG_WIDTH 1 /* IRQ_OP_CFG */
4037
4038/*
4039 * R3088 (0xC10) - GPIO Debounce Config
4040 */
4041#define ARIZONA_GP_DBTIME_MASK 0xF000 /* GP_DBTIME - [15:12] */
4042#define ARIZONA_GP_DBTIME_SHIFT 12 /* GP_DBTIME - [15:12] */
4043#define ARIZONA_GP_DBTIME_WIDTH 4 /* GP_DBTIME - [15:12] */
4044
4045/*
4046 * R3104 (0xC20) - Misc Pad Ctrl 1
4047 */
4048#define ARIZONA_LDO1ENA_PD 0x8000 /* LDO1ENA_PD */
4049#define ARIZONA_LDO1ENA_PD_MASK 0x8000 /* LDO1ENA_PD */
4050#define ARIZONA_LDO1ENA_PD_SHIFT 15 /* LDO1ENA_PD */
4051#define ARIZONA_LDO1ENA_PD_WIDTH 1 /* LDO1ENA_PD */
4052#define ARIZONA_MCLK2_PD 0x2000 /* MCLK2_PD */
4053#define ARIZONA_MCLK2_PD_MASK 0x2000 /* MCLK2_PD */
4054#define ARIZONA_MCLK2_PD_SHIFT 13 /* MCLK2_PD */
4055#define ARIZONA_MCLK2_PD_WIDTH 1 /* MCLK2_PD */
4056#define ARIZONA_RSTB_PU 0x0002 /* RSTB_PU */
4057#define ARIZONA_RSTB_PU_MASK 0x0002 /* RSTB_PU */
4058#define ARIZONA_RSTB_PU_SHIFT 1 /* RSTB_PU */
4059#define ARIZONA_RSTB_PU_WIDTH 1 /* RSTB_PU */
4060
4061/*
4062 * R3105 (0xC21) - Misc Pad Ctrl 2
4063 */
4064#define ARIZONA_MCLK1_PD 0x1000 /* MCLK1_PD */
4065#define ARIZONA_MCLK1_PD_MASK 0x1000 /* MCLK1_PD */
4066#define ARIZONA_MCLK1_PD_SHIFT 12 /* MCLK1_PD */
4067#define ARIZONA_MCLK1_PD_WIDTH 1 /* MCLK1_PD */
4068#define ARIZONA_MICD_PD 0x0100 /* MICD_PD */
4069#define ARIZONA_MICD_PD_MASK 0x0100 /* MICD_PD */
4070#define ARIZONA_MICD_PD_SHIFT 8 /* MICD_PD */
4071#define ARIZONA_MICD_PD_WIDTH 1 /* MICD_PD */
4072#define ARIZONA_ADDR_PD 0x0001 /* ADDR_PD */
4073#define ARIZONA_ADDR_PD_MASK 0x0001 /* ADDR_PD */
4074#define ARIZONA_ADDR_PD_SHIFT 0 /* ADDR_PD */
4075#define ARIZONA_ADDR_PD_WIDTH 1 /* ADDR_PD */
4076
4077/*
4078 * R3106 (0xC22) - Misc Pad Ctrl 3
4079 */
4080#define ARIZONA_DMICDAT4_PD 0x0008 /* DMICDAT4_PD */
4081#define ARIZONA_DMICDAT4_PD_MASK 0x0008 /* DMICDAT4_PD */
4082#define ARIZONA_DMICDAT4_PD_SHIFT 3 /* DMICDAT4_PD */
4083#define ARIZONA_DMICDAT4_PD_WIDTH 1 /* DMICDAT4_PD */
4084#define ARIZONA_DMICDAT3_PD 0x0004 /* DMICDAT3_PD */
4085#define ARIZONA_DMICDAT3_PD_MASK 0x0004 /* DMICDAT3_PD */
4086#define ARIZONA_DMICDAT3_PD_SHIFT 2 /* DMICDAT3_PD */
4087#define ARIZONA_DMICDAT3_PD_WIDTH 1 /* DMICDAT3_PD */
4088#define ARIZONA_DMICDAT2_PD 0x0002 /* DMICDAT2_PD */
4089#define ARIZONA_DMICDAT2_PD_MASK 0x0002 /* DMICDAT2_PD */
4090#define ARIZONA_DMICDAT2_PD_SHIFT 1 /* DMICDAT2_PD */
4091#define ARIZONA_DMICDAT2_PD_WIDTH 1 /* DMICDAT2_PD */
4092#define ARIZONA_DMICDAT1_PD 0x0001 /* DMICDAT1_PD */
4093#define ARIZONA_DMICDAT1_PD_MASK 0x0001 /* DMICDAT1_PD */
4094#define ARIZONA_DMICDAT1_PD_SHIFT 0 /* DMICDAT1_PD */
4095#define ARIZONA_DMICDAT1_PD_WIDTH 1 /* DMICDAT1_PD */
4096
4097/*
4098 * R3107 (0xC23) - Misc Pad Ctrl 4
4099 */
4100#define ARIZONA_AIF1RXLRCLK_PU 0x0020 /* AIF1RXLRCLK_PU */
4101#define ARIZONA_AIF1RXLRCLK_PU_MASK 0x0020 /* AIF1RXLRCLK_PU */
4102#define ARIZONA_AIF1RXLRCLK_PU_SHIFT 5 /* AIF1RXLRCLK_PU */
4103#define ARIZONA_AIF1RXLRCLK_PU_WIDTH 1 /* AIF1RXLRCLK_PU */
4104#define ARIZONA_AIF1RXLRCLK_PD 0x0010 /* AIF1RXLRCLK_PD */
4105#define ARIZONA_AIF1RXLRCLK_PD_MASK 0x0010 /* AIF1RXLRCLK_PD */
4106#define ARIZONA_AIF1RXLRCLK_PD_SHIFT 4 /* AIF1RXLRCLK_PD */
4107#define ARIZONA_AIF1RXLRCLK_PD_WIDTH 1 /* AIF1RXLRCLK_PD */
4108#define ARIZONA_AIF1BCLK_PU 0x0008 /* AIF1BCLK_PU */
4109#define ARIZONA_AIF1BCLK_PU_MASK 0x0008 /* AIF1BCLK_PU */
4110#define ARIZONA_AIF1BCLK_PU_SHIFT 3 /* AIF1BCLK_PU */
4111#define ARIZONA_AIF1BCLK_PU_WIDTH 1 /* AIF1BCLK_PU */
4112#define ARIZONA_AIF1BCLK_PD 0x0004 /* AIF1BCLK_PD */
4113#define ARIZONA_AIF1BCLK_PD_MASK 0x0004 /* AIF1BCLK_PD */
4114#define ARIZONA_AIF1BCLK_PD_SHIFT 2 /* AIF1BCLK_PD */
4115#define ARIZONA_AIF1BCLK_PD_WIDTH 1 /* AIF1BCLK_PD */
4116#define ARIZONA_AIF1RXDAT_PU 0x0002 /* AIF1RXDAT_PU */
4117#define ARIZONA_AIF1RXDAT_PU_MASK 0x0002 /* AIF1RXDAT_PU */
4118#define ARIZONA_AIF1RXDAT_PU_SHIFT 1 /* AIF1RXDAT_PU */
4119#define ARIZONA_AIF1RXDAT_PU_WIDTH 1 /* AIF1RXDAT_PU */
4120#define ARIZONA_AIF1RXDAT_PD 0x0001 /* AIF1RXDAT_PD */
4121#define ARIZONA_AIF1RXDAT_PD_MASK 0x0001 /* AIF1RXDAT_PD */
4122#define ARIZONA_AIF1RXDAT_PD_SHIFT 0 /* AIF1RXDAT_PD */
4123#define ARIZONA_AIF1RXDAT_PD_WIDTH 1 /* AIF1RXDAT_PD */
4124
4125/*
4126 * R3108 (0xC24) - Misc Pad Ctrl 5
4127 */
4128#define ARIZONA_AIF2RXLRCLK_PU 0x0020 /* AIF2RXLRCLK_PU */
4129#define ARIZONA_AIF2RXLRCLK_PU_MASK 0x0020 /* AIF2RXLRCLK_PU */
4130#define ARIZONA_AIF2RXLRCLK_PU_SHIFT 5 /* AIF2RXLRCLK_PU */
4131#define ARIZONA_AIF2RXLRCLK_PU_WIDTH 1 /* AIF2RXLRCLK_PU */
4132#define ARIZONA_AIF2RXLRCLK_PD 0x0010 /* AIF2RXLRCLK_PD */
4133#define ARIZONA_AIF2RXLRCLK_PD_MASK 0x0010 /* AIF2RXLRCLK_PD */
4134#define ARIZONA_AIF2RXLRCLK_PD_SHIFT 4 /* AIF2RXLRCLK_PD */
4135#define ARIZONA_AIF2RXLRCLK_PD_WIDTH 1 /* AIF2RXLRCLK_PD */
4136#define ARIZONA_AIF2BCLK_PU 0x0008 /* AIF2BCLK_PU */
4137#define ARIZONA_AIF2BCLK_PU_MASK 0x0008 /* AIF2BCLK_PU */
4138#define ARIZONA_AIF2BCLK_PU_SHIFT 3 /* AIF2BCLK_PU */
4139#define ARIZONA_AIF2BCLK_PU_WIDTH 1 /* AIF2BCLK_PU */
4140#define ARIZONA_AIF2BCLK_PD 0x0004 /* AIF2BCLK_PD */
4141#define ARIZONA_AIF2BCLK_PD_MASK 0x0004 /* AIF2BCLK_PD */
4142#define ARIZONA_AIF2BCLK_PD_SHIFT 2 /* AIF2BCLK_PD */
4143#define ARIZONA_AIF2BCLK_PD_WIDTH 1 /* AIF2BCLK_PD */
4144#define ARIZONA_AIF2RXDAT_PU 0x0002 /* AIF2RXDAT_PU */
4145#define ARIZONA_AIF2RXDAT_PU_MASK 0x0002 /* AIF2RXDAT_PU */
4146#define ARIZONA_AIF2RXDAT_PU_SHIFT 1 /* AIF2RXDAT_PU */
4147#define ARIZONA_AIF2RXDAT_PU_WIDTH 1 /* AIF2RXDAT_PU */
4148#define ARIZONA_AIF2RXDAT_PD 0x0001 /* AIF2RXDAT_PD */
4149#define ARIZONA_AIF2RXDAT_PD_MASK 0x0001 /* AIF2RXDAT_PD */
4150#define ARIZONA_AIF2RXDAT_PD_SHIFT 0 /* AIF2RXDAT_PD */
4151#define ARIZONA_AIF2RXDAT_PD_WIDTH 1 /* AIF2RXDAT_PD */
4152
4153/*
4154 * R3109 (0xC25) - Misc Pad Ctrl 6
4155 */
4156#define ARIZONA_AIF3RXLRCLK_PU 0x0020 /* AIF3RXLRCLK_PU */
4157#define ARIZONA_AIF3RXLRCLK_PU_MASK 0x0020 /* AIF3RXLRCLK_PU */
4158#define ARIZONA_AIF3RXLRCLK_PU_SHIFT 5 /* AIF3RXLRCLK_PU */
4159#define ARIZONA_AIF3RXLRCLK_PU_WIDTH 1 /* AIF3RXLRCLK_PU */
4160#define ARIZONA_AIF3RXLRCLK_PD 0x0010 /* AIF3RXLRCLK_PD */
4161#define ARIZONA_AIF3RXLRCLK_PD_MASK 0x0010 /* AIF3RXLRCLK_PD */
4162#define ARIZONA_AIF3RXLRCLK_PD_SHIFT 4 /* AIF3RXLRCLK_PD */
4163#define ARIZONA_AIF3RXLRCLK_PD_WIDTH 1 /* AIF3RXLRCLK_PD */
4164#define ARIZONA_AIF3BCLK_PU 0x0008 /* AIF3BCLK_PU */
4165#define ARIZONA_AIF3BCLK_PU_MASK 0x0008 /* AIF3BCLK_PU */
4166#define ARIZONA_AIF3BCLK_PU_SHIFT 3 /* AIF3BCLK_PU */
4167#define ARIZONA_AIF3BCLK_PU_WIDTH 1 /* AIF3BCLK_PU */
4168#define ARIZONA_AIF3BCLK_PD 0x0004 /* AIF3BCLK_PD */
4169#define ARIZONA_AIF3BCLK_PD_MASK 0x0004 /* AIF3BCLK_PD */
4170#define ARIZONA_AIF3BCLK_PD_SHIFT 2 /* AIF3BCLK_PD */
4171#define ARIZONA_AIF3BCLK_PD_WIDTH 1 /* AIF3BCLK_PD */
4172#define ARIZONA_AIF3RXDAT_PU 0x0002 /* AIF3RXDAT_PU */
4173#define ARIZONA_AIF3RXDAT_PU_MASK 0x0002 /* AIF3RXDAT_PU */
4174#define ARIZONA_AIF3RXDAT_PU_SHIFT 1 /* AIF3RXDAT_PU */
4175#define ARIZONA_AIF3RXDAT_PU_WIDTH 1 /* AIF3RXDAT_PU */
4176#define ARIZONA_AIF3RXDAT_PD 0x0001 /* AIF3RXDAT_PD */
4177#define ARIZONA_AIF3RXDAT_PD_MASK 0x0001 /* AIF3RXDAT_PD */
4178#define ARIZONA_AIF3RXDAT_PD_SHIFT 0 /* AIF3RXDAT_PD */
4179#define ARIZONA_AIF3RXDAT_PD_WIDTH 1 /* AIF3RXDAT_PD */
4180
4181/*
4182 * R3328 (0xD00) - Interrupt Status 1
4183 */
4184#define ARIZONA_GP4_EINT1 0x0008 /* GP4_EINT1 */
4185#define ARIZONA_GP4_EINT1_MASK 0x0008 /* GP4_EINT1 */
4186#define ARIZONA_GP4_EINT1_SHIFT 3 /* GP4_EINT1 */
4187#define ARIZONA_GP4_EINT1_WIDTH 1 /* GP4_EINT1 */
4188#define ARIZONA_GP3_EINT1 0x0004 /* GP3_EINT1 */
4189#define ARIZONA_GP3_EINT1_MASK 0x0004 /* GP3_EINT1 */
4190#define ARIZONA_GP3_EINT1_SHIFT 2 /* GP3_EINT1 */
4191#define ARIZONA_GP3_EINT1_WIDTH 1 /* GP3_EINT1 */
4192#define ARIZONA_GP2_EINT1 0x0002 /* GP2_EINT1 */
4193#define ARIZONA_GP2_EINT1_MASK 0x0002 /* GP2_EINT1 */
4194#define ARIZONA_GP2_EINT1_SHIFT 1 /* GP2_EINT1 */
4195#define ARIZONA_GP2_EINT1_WIDTH 1 /* GP2_EINT1 */
4196#define ARIZONA_GP1_EINT1 0x0001 /* GP1_EINT1 */
4197#define ARIZONA_GP1_EINT1_MASK 0x0001 /* GP1_EINT1 */
4198#define ARIZONA_GP1_EINT1_SHIFT 0 /* GP1_EINT1 */
4199#define ARIZONA_GP1_EINT1_WIDTH 1 /* GP1_EINT1 */
4200
4201/*
4202 * R3329 (0xD01) - Interrupt Status 2
4203 */
4204#define ARIZONA_DSP4_RAM_RDY_EINT1 0x0800 /* DSP4_RAM_RDY_EINT1 */
4205#define ARIZONA_DSP4_RAM_RDY_EINT1_MASK 0x0800 /* DSP4_RAM_RDY_EINT1 */
4206#define ARIZONA_DSP4_RAM_RDY_EINT1_SHIFT 11 /* DSP4_RAM_RDY_EINT1 */
4207#define ARIZONA_DSP4_RAM_RDY_EINT1_WIDTH 1 /* DSP4_RAM_RDY_EINT1 */
4208#define ARIZONA_DSP3_RAM_RDY_EINT1 0x0400 /* DSP3_RAM_RDY_EINT1 */
4209#define ARIZONA_DSP3_RAM_RDY_EINT1_MASK 0x0400 /* DSP3_RAM_RDY_EINT1 */
4210#define ARIZONA_DSP3_RAM_RDY_EINT1_SHIFT 10 /* DSP3_RAM_RDY_EINT1 */
4211#define ARIZONA_DSP3_RAM_RDY_EINT1_WIDTH 1 /* DSP3_RAM_RDY_EINT1 */
4212#define ARIZONA_DSP2_RAM_RDY_EINT1 0x0200 /* DSP2_RAM_RDY_EINT1 */
4213#define ARIZONA_DSP2_RAM_RDY_EINT1_MASK 0x0200 /* DSP2_RAM_RDY_EINT1 */
4214#define ARIZONA_DSP2_RAM_RDY_EINT1_SHIFT 9 /* DSP2_RAM_RDY_EINT1 */
4215#define ARIZONA_DSP2_RAM_RDY_EINT1_WIDTH 1 /* DSP2_RAM_RDY_EINT1 */
4216#define ARIZONA_DSP1_RAM_RDY_EINT1 0x0100 /* DSP1_RAM_RDY_EINT1 */
4217#define ARIZONA_DSP1_RAM_RDY_EINT1_MASK 0x0100 /* DSP1_RAM_RDY_EINT1 */
4218#define ARIZONA_DSP1_RAM_RDY_EINT1_SHIFT 8 /* DSP1_RAM_RDY_EINT1 */
4219#define ARIZONA_DSP1_RAM_RDY_EINT1_WIDTH 1 /* DSP1_RAM_RDY_EINT1 */
4220#define ARIZONA_DSP_IRQ8_EINT1 0x0080 /* DSP_IRQ8_EINT1 */
4221#define ARIZONA_DSP_IRQ8_EINT1_MASK 0x0080 /* DSP_IRQ8_EINT1 */
4222#define ARIZONA_DSP_IRQ8_EINT1_SHIFT 7 /* DSP_IRQ8_EINT1 */
4223#define ARIZONA_DSP_IRQ8_EINT1_WIDTH 1 /* DSP_IRQ8_EINT1 */
4224#define ARIZONA_DSP_IRQ7_EINT1 0x0040 /* DSP_IRQ7_EINT1 */
4225#define ARIZONA_DSP_IRQ7_EINT1_MASK 0x0040 /* DSP_IRQ7_EINT1 */
4226#define ARIZONA_DSP_IRQ7_EINT1_SHIFT 6 /* DSP_IRQ7_EINT1 */
4227#define ARIZONA_DSP_IRQ7_EINT1_WIDTH 1 /* DSP_IRQ7_EINT1 */
4228#define ARIZONA_DSP_IRQ6_EINT1 0x0020 /* DSP_IRQ6_EINT1 */
4229#define ARIZONA_DSP_IRQ6_EINT1_MASK 0x0020 /* DSP_IRQ6_EINT1 */
4230#define ARIZONA_DSP_IRQ6_EINT1_SHIFT 5 /* DSP_IRQ6_EINT1 */
4231#define ARIZONA_DSP_IRQ6_EINT1_WIDTH 1 /* DSP_IRQ6_EINT1 */
4232#define ARIZONA_DSP_IRQ5_EINT1 0x0010 /* DSP_IRQ5_EINT1 */
4233#define ARIZONA_DSP_IRQ5_EINT1_MASK 0x0010 /* DSP_IRQ5_EINT1 */
4234#define ARIZONA_DSP_IRQ5_EINT1_SHIFT 4 /* DSP_IRQ5_EINT1 */
4235#define ARIZONA_DSP_IRQ5_EINT1_WIDTH 1 /* DSP_IRQ5_EINT1 */
4236#define ARIZONA_DSP_IRQ4_EINT1 0x0008 /* DSP_IRQ4_EINT1 */
4237#define ARIZONA_DSP_IRQ4_EINT1_MASK 0x0008 /* DSP_IRQ4_EINT1 */
4238#define ARIZONA_DSP_IRQ4_EINT1_SHIFT 3 /* DSP_IRQ4_EINT1 */
4239#define ARIZONA_DSP_IRQ4_EINT1_WIDTH 1 /* DSP_IRQ4_EINT1 */
4240#define ARIZONA_DSP_IRQ3_EINT1 0x0004 /* DSP_IRQ3_EINT1 */
4241#define ARIZONA_DSP_IRQ3_EINT1_MASK 0x0004 /* DSP_IRQ3_EINT1 */
4242#define ARIZONA_DSP_IRQ3_EINT1_SHIFT 2 /* DSP_IRQ3_EINT1 */
4243#define ARIZONA_DSP_IRQ3_EINT1_WIDTH 1 /* DSP_IRQ3_EINT1 */
4244#define ARIZONA_DSP_IRQ2_EINT1 0x0002 /* DSP_IRQ2_EINT1 */
4245#define ARIZONA_DSP_IRQ2_EINT1_MASK 0x0002 /* DSP_IRQ2_EINT1 */
4246#define ARIZONA_DSP_IRQ2_EINT1_SHIFT 1 /* DSP_IRQ2_EINT1 */
4247#define ARIZONA_DSP_IRQ2_EINT1_WIDTH 1 /* DSP_IRQ2_EINT1 */
4248#define ARIZONA_DSP_IRQ1_EINT1 0x0001 /* DSP_IRQ1_EINT1 */
4249#define ARIZONA_DSP_IRQ1_EINT1_MASK 0x0001 /* DSP_IRQ1_EINT1 */
4250#define ARIZONA_DSP_IRQ1_EINT1_SHIFT 0 /* DSP_IRQ1_EINT1 */
4251#define ARIZONA_DSP_IRQ1_EINT1_WIDTH 1 /* DSP_IRQ1_EINT1 */
4252
4253/*
4254 * R3330 (0xD02) - Interrupt Status 3
4255 */
4256#define ARIZONA_SPK_SHUTDOWN_WARN_EINT1 0x8000 /* SPK_SHUTDOWN_WARN_EINT1 */
4257#define ARIZONA_SPK_SHUTDOWN_WARN_EINT1_MASK 0x8000 /* SPK_SHUTDOWN_WARN_EINT1 */
4258#define ARIZONA_SPK_SHUTDOWN_WARN_EINT1_SHIFT 15 /* SPK_SHUTDOWN_WARN_EINT1 */
4259#define ARIZONA_SPK_SHUTDOWN_WARN_EINT1_WIDTH 1 /* SPK_SHUTDOWN_WARN_EINT1 */
4260#define ARIZONA_SPK_SHUTDOWN_EINT1 0x4000 /* SPK_SHUTDOWN_EINT1 */
4261#define ARIZONA_SPK_SHUTDOWN_EINT1_MASK 0x4000 /* SPK_SHUTDOWN_EINT1 */
4262#define ARIZONA_SPK_SHUTDOWN_EINT1_SHIFT 14 /* SPK_SHUTDOWN_EINT1 */
4263#define ARIZONA_SPK_SHUTDOWN_EINT1_WIDTH 1 /* SPK_SHUTDOWN_EINT1 */
4264#define ARIZONA_HPDET_EINT1 0x2000 /* HPDET_EINT1 */
4265#define ARIZONA_HPDET_EINT1_MASK 0x2000 /* HPDET_EINT1 */
4266#define ARIZONA_HPDET_EINT1_SHIFT 13 /* HPDET_EINT1 */
4267#define ARIZONA_HPDET_EINT1_WIDTH 1 /* HPDET_EINT1 */
4268#define ARIZONA_MICDET_EINT1 0x1000 /* MICDET_EINT1 */
4269#define ARIZONA_MICDET_EINT1_MASK 0x1000 /* MICDET_EINT1 */
4270#define ARIZONA_MICDET_EINT1_SHIFT 12 /* MICDET_EINT1 */
4271#define ARIZONA_MICDET_EINT1_WIDTH 1 /* MICDET_EINT1 */
4272#define ARIZONA_WSEQ_DONE_EINT1 0x0800 /* WSEQ_DONE_EINT1 */
4273#define ARIZONA_WSEQ_DONE_EINT1_MASK 0x0800 /* WSEQ_DONE_EINT1 */
4274#define ARIZONA_WSEQ_DONE_EINT1_SHIFT 11 /* WSEQ_DONE_EINT1 */
4275#define ARIZONA_WSEQ_DONE_EINT1_WIDTH 1 /* WSEQ_DONE_EINT1 */
4276#define ARIZONA_DRC2_SIG_DET_EINT1 0x0400 /* DRC2_SIG_DET_EINT1 */
4277#define ARIZONA_DRC2_SIG_DET_EINT1_MASK 0x0400 /* DRC2_SIG_DET_EINT1 */
4278#define ARIZONA_DRC2_SIG_DET_EINT1_SHIFT 10 /* DRC2_SIG_DET_EINT1 */
4279#define ARIZONA_DRC2_SIG_DET_EINT1_WIDTH 1 /* DRC2_SIG_DET_EINT1 */
4280#define ARIZONA_DRC1_SIG_DET_EINT1 0x0200 /* DRC1_SIG_DET_EINT1 */
4281#define ARIZONA_DRC1_SIG_DET_EINT1_MASK 0x0200 /* DRC1_SIG_DET_EINT1 */
4282#define ARIZONA_DRC1_SIG_DET_EINT1_SHIFT 9 /* DRC1_SIG_DET_EINT1 */
4283#define ARIZONA_DRC1_SIG_DET_EINT1_WIDTH 1 /* DRC1_SIG_DET_EINT1 */
4284#define ARIZONA_ASRC2_LOCK_EINT1 0x0100 /* ASRC2_LOCK_EINT1 */
4285#define ARIZONA_ASRC2_LOCK_EINT1_MASK 0x0100 /* ASRC2_LOCK_EINT1 */
4286#define ARIZONA_ASRC2_LOCK_EINT1_SHIFT 8 /* ASRC2_LOCK_EINT1 */
4287#define ARIZONA_ASRC2_LOCK_EINT1_WIDTH 1 /* ASRC2_LOCK_EINT1 */
4288#define ARIZONA_ASRC1_LOCK_EINT1 0x0080 /* ASRC1_LOCK_EINT1 */
4289#define ARIZONA_ASRC1_LOCK_EINT1_MASK 0x0080 /* ASRC1_LOCK_EINT1 */
4290#define ARIZONA_ASRC1_LOCK_EINT1_SHIFT 7 /* ASRC1_LOCK_EINT1 */
4291#define ARIZONA_ASRC1_LOCK_EINT1_WIDTH 1 /* ASRC1_LOCK_EINT1 */
4292#define ARIZONA_UNDERCLOCKED_EINT1 0x0040 /* UNDERCLOCKED_EINT1 */
4293#define ARIZONA_UNDERCLOCKED_EINT1_MASK 0x0040 /* UNDERCLOCKED_EINT1 */
4294#define ARIZONA_UNDERCLOCKED_EINT1_SHIFT 6 /* UNDERCLOCKED_EINT1 */
4295#define ARIZONA_UNDERCLOCKED_EINT1_WIDTH 1 /* UNDERCLOCKED_EINT1 */
4296#define ARIZONA_OVERCLOCKED_EINT1 0x0020 /* OVERCLOCKED_EINT1 */
4297#define ARIZONA_OVERCLOCKED_EINT1_MASK 0x0020 /* OVERCLOCKED_EINT1 */
4298#define ARIZONA_OVERCLOCKED_EINT1_SHIFT 5 /* OVERCLOCKED_EINT1 */
4299#define ARIZONA_OVERCLOCKED_EINT1_WIDTH 1 /* OVERCLOCKED_EINT1 */
4300#define ARIZONA_FLL2_LOCK_EINT1 0x0008 /* FLL2_LOCK_EINT1 */
4301#define ARIZONA_FLL2_LOCK_EINT1_MASK 0x0008 /* FLL2_LOCK_EINT1 */
4302#define ARIZONA_FLL2_LOCK_EINT1_SHIFT 3 /* FLL2_LOCK_EINT1 */
4303#define ARIZONA_FLL2_LOCK_EINT1_WIDTH 1 /* FLL2_LOCK_EINT1 */
4304#define ARIZONA_FLL1_LOCK_EINT1 0x0004 /* FLL1_LOCK_EINT1 */
4305#define ARIZONA_FLL1_LOCK_EINT1_MASK 0x0004 /* FLL1_LOCK_EINT1 */
4306#define ARIZONA_FLL1_LOCK_EINT1_SHIFT 2 /* FLL1_LOCK_EINT1 */
4307#define ARIZONA_FLL1_LOCK_EINT1_WIDTH 1 /* FLL1_LOCK_EINT1 */
4308#define ARIZONA_CLKGEN_ERR_EINT1 0x0002 /* CLKGEN_ERR_EINT1 */
4309#define ARIZONA_CLKGEN_ERR_EINT1_MASK 0x0002 /* CLKGEN_ERR_EINT1 */
4310#define ARIZONA_CLKGEN_ERR_EINT1_SHIFT 1 /* CLKGEN_ERR_EINT1 */
4311#define ARIZONA_CLKGEN_ERR_EINT1_WIDTH 1 /* CLKGEN_ERR_EINT1 */
4312#define ARIZONA_CLKGEN_ERR_ASYNC_EINT1 0x0001 /* CLKGEN_ERR_ASYNC_EINT1 */
4313#define ARIZONA_CLKGEN_ERR_ASYNC_EINT1_MASK 0x0001 /* CLKGEN_ERR_ASYNC_EINT1 */
4314#define ARIZONA_CLKGEN_ERR_ASYNC_EINT1_SHIFT 0 /* CLKGEN_ERR_ASYNC_EINT1 */
4315#define ARIZONA_CLKGEN_ERR_ASYNC_EINT1_WIDTH 1 /* CLKGEN_ERR_ASYNC_EINT1 */
4316
4317/*
4318 * R3331 (0xD03) - Interrupt Status 4
4319 */
4320#define ARIZONA_ASRC_CFG_ERR_EINT1 0x8000 /* ASRC_CFG_ERR_EINT1 */
4321#define ARIZONA_ASRC_CFG_ERR_EINT1_MASK 0x8000 /* ASRC_CFG_ERR_EINT1 */
4322#define ARIZONA_ASRC_CFG_ERR_EINT1_SHIFT 15 /* ASRC_CFG_ERR_EINT1 */
4323#define ARIZONA_ASRC_CFG_ERR_EINT1_WIDTH 1 /* ASRC_CFG_ERR_EINT1 */
4324#define ARIZONA_AIF3_ERR_EINT1 0x4000 /* AIF3_ERR_EINT1 */
4325#define ARIZONA_AIF3_ERR_EINT1_MASK 0x4000 /* AIF3_ERR_EINT1 */
4326#define ARIZONA_AIF3_ERR_EINT1_SHIFT 14 /* AIF3_ERR_EINT1 */
4327#define ARIZONA_AIF3_ERR_EINT1_WIDTH 1 /* AIF3_ERR_EINT1 */
4328#define ARIZONA_AIF2_ERR_EINT1 0x2000 /* AIF2_ERR_EINT1 */
4329#define ARIZONA_AIF2_ERR_EINT1_MASK 0x2000 /* AIF2_ERR_EINT1 */
4330#define ARIZONA_AIF2_ERR_EINT1_SHIFT 13 /* AIF2_ERR_EINT1 */
4331#define ARIZONA_AIF2_ERR_EINT1_WIDTH 1 /* AIF2_ERR_EINT1 */
4332#define ARIZONA_AIF1_ERR_EINT1 0x1000 /* AIF1_ERR_EINT1 */
4333#define ARIZONA_AIF1_ERR_EINT1_MASK 0x1000 /* AIF1_ERR_EINT1 */
4334#define ARIZONA_AIF1_ERR_EINT1_SHIFT 12 /* AIF1_ERR_EINT1 */
4335#define ARIZONA_AIF1_ERR_EINT1_WIDTH 1 /* AIF1_ERR_EINT1 */
4336#define ARIZONA_CTRLIF_ERR_EINT1 0x0800 /* CTRLIF_ERR_EINT1 */
4337#define ARIZONA_CTRLIF_ERR_EINT1_MASK 0x0800 /* CTRLIF_ERR_EINT1 */
4338#define ARIZONA_CTRLIF_ERR_EINT1_SHIFT 11 /* CTRLIF_ERR_EINT1 */
4339#define ARIZONA_CTRLIF_ERR_EINT1_WIDTH 1 /* CTRLIF_ERR_EINT1 */
4340#define ARIZONA_MIXER_DROPPED_SAMPLE_EINT1 0x0400 /* MIXER_DROPPED_SAMPLE_EINT1 */
4341#define ARIZONA_MIXER_DROPPED_SAMPLE_EINT1_MASK 0x0400 /* MIXER_DROPPED_SAMPLE_EINT1 */
4342#define ARIZONA_MIXER_DROPPED_SAMPLE_EINT1_SHIFT 10 /* MIXER_DROPPED_SAMPLE_EINT1 */
4343#define ARIZONA_MIXER_DROPPED_SAMPLE_EINT1_WIDTH 1 /* MIXER_DROPPED_SAMPLE_EINT1 */
4344#define ARIZONA_ASYNC_CLK_ENA_LOW_EINT1 0x0200 /* ASYNC_CLK_ENA_LOW_EINT1 */
4345#define ARIZONA_ASYNC_CLK_ENA_LOW_EINT1_MASK 0x0200 /* ASYNC_CLK_ENA_LOW_EINT1 */
4346#define ARIZONA_ASYNC_CLK_ENA_LOW_EINT1_SHIFT 9 /* ASYNC_CLK_ENA_LOW_EINT1 */
4347#define ARIZONA_ASYNC_CLK_ENA_LOW_EINT1_WIDTH 1 /* ASYNC_CLK_ENA_LOW_EINT1 */
4348#define ARIZONA_SYSCLK_ENA_LOW_EINT1 0x0100 /* SYSCLK_ENA_LOW_EINT1 */
4349#define ARIZONA_SYSCLK_ENA_LOW_EINT1_MASK 0x0100 /* SYSCLK_ENA_LOW_EINT1 */
4350#define ARIZONA_SYSCLK_ENA_LOW_EINT1_SHIFT 8 /* SYSCLK_ENA_LOW_EINT1 */
4351#define ARIZONA_SYSCLK_ENA_LOW_EINT1_WIDTH 1 /* SYSCLK_ENA_LOW_EINT1 */
4352#define ARIZONA_ISRC1_CFG_ERR_EINT1 0x0080 /* ISRC1_CFG_ERR_EINT1 */
4353#define ARIZONA_ISRC1_CFG_ERR_EINT1_MASK 0x0080 /* ISRC1_CFG_ERR_EINT1 */
4354#define ARIZONA_ISRC1_CFG_ERR_EINT1_SHIFT 7 /* ISRC1_CFG_ERR_EINT1 */
4355#define ARIZONA_ISRC1_CFG_ERR_EINT1_WIDTH 1 /* ISRC1_CFG_ERR_EINT1 */
4356#define ARIZONA_ISRC2_CFG_ERR_EINT1 0x0040 /* ISRC2_CFG_ERR_EINT1 */
4357#define ARIZONA_ISRC2_CFG_ERR_EINT1_MASK 0x0040 /* ISRC2_CFG_ERR_EINT1 */
4358#define ARIZONA_ISRC2_CFG_ERR_EINT1_SHIFT 6 /* ISRC2_CFG_ERR_EINT1 */
4359#define ARIZONA_ISRC2_CFG_ERR_EINT1_WIDTH 1 /* ISRC2_CFG_ERR_EINT1 */
4360
4361/*
4362 * R3332 (0xD04) - Interrupt Status 5
4363 */
4364#define ARIZONA_BOOT_DONE_EINT1 0x0100 /* BOOT_DONE_EINT1 */
4365#define ARIZONA_BOOT_DONE_EINT1_MASK 0x0100 /* BOOT_DONE_EINT1 */
4366#define ARIZONA_BOOT_DONE_EINT1_SHIFT 8 /* BOOT_DONE_EINT1 */
4367#define ARIZONA_BOOT_DONE_EINT1_WIDTH 1 /* BOOT_DONE_EINT1 */
4368#define ARIZONA_DCS_DAC_DONE_EINT1 0x0080 /* DCS_DAC_DONE_EINT1 */
4369#define ARIZONA_DCS_DAC_DONE_EINT1_MASK 0x0080 /* DCS_DAC_DONE_EINT1 */
4370#define ARIZONA_DCS_DAC_DONE_EINT1_SHIFT 7 /* DCS_DAC_DONE_EINT1 */
4371#define ARIZONA_DCS_DAC_DONE_EINT1_WIDTH 1 /* DCS_DAC_DONE_EINT1 */
4372#define ARIZONA_DCS_HP_DONE_EINT1 0x0040 /* DCS_HP_DONE_EINT1 */
4373#define ARIZONA_DCS_HP_DONE_EINT1_MASK 0x0040 /* DCS_HP_DONE_EINT1 */
4374#define ARIZONA_DCS_HP_DONE_EINT1_SHIFT 6 /* DCS_HP_DONE_EINT1 */
4375#define ARIZONA_DCS_HP_DONE_EINT1_WIDTH 1 /* DCS_HP_DONE_EINT1 */
4376#define ARIZONA_FLL2_CLOCK_OK_EINT1 0x0002 /* FLL2_CLOCK_OK_EINT1 */
4377#define ARIZONA_FLL2_CLOCK_OK_EINT1_MASK 0x0002 /* FLL2_CLOCK_OK_EINT1 */
4378#define ARIZONA_FLL2_CLOCK_OK_EINT1_SHIFT 1 /* FLL2_CLOCK_OK_EINT1 */
4379#define ARIZONA_FLL2_CLOCK_OK_EINT1_WIDTH 1 /* FLL2_CLOCK_OK_EINT1 */
4380#define ARIZONA_FLL1_CLOCK_OK_EINT1 0x0001 /* FLL1_CLOCK_OK_EINT1 */
4381#define ARIZONA_FLL1_CLOCK_OK_EINT1_MASK 0x0001 /* FLL1_CLOCK_OK_EINT1 */
4382#define ARIZONA_FLL1_CLOCK_OK_EINT1_SHIFT 0 /* FLL1_CLOCK_OK_EINT1 */
4383#define ARIZONA_FLL1_CLOCK_OK_EINT1_WIDTH 1 /* FLL1_CLOCK_OK_EINT1 */
4384
4385/*
4386 * R3336 (0xD08) - Interrupt Status 1 Mask
4387 */
4388#define ARIZONA_IM_GP4_EINT1 0x0008 /* IM_GP4_EINT1 */
4389#define ARIZONA_IM_GP4_EINT1_MASK 0x0008 /* IM_GP4_EINT1 */
4390#define ARIZONA_IM_GP4_EINT1_SHIFT 3 /* IM_GP4_EINT1 */
4391#define ARIZONA_IM_GP4_EINT1_WIDTH 1 /* IM_GP4_EINT1 */
4392#define ARIZONA_IM_GP3_EINT1 0x0004 /* IM_GP3_EINT1 */
4393#define ARIZONA_IM_GP3_EINT1_MASK 0x0004 /* IM_GP3_EINT1 */
4394#define ARIZONA_IM_GP3_EINT1_SHIFT 2 /* IM_GP3_EINT1 */
4395#define ARIZONA_IM_GP3_EINT1_WIDTH 1 /* IM_GP3_EINT1 */
4396#define ARIZONA_IM_GP2_EINT1 0x0002 /* IM_GP2_EINT1 */
4397#define ARIZONA_IM_GP2_EINT1_MASK 0x0002 /* IM_GP2_EINT1 */
4398#define ARIZONA_IM_GP2_EINT1_SHIFT 1 /* IM_GP2_EINT1 */
4399#define ARIZONA_IM_GP2_EINT1_WIDTH 1 /* IM_GP2_EINT1 */
4400#define ARIZONA_IM_GP1_EINT1 0x0001 /* IM_GP1_EINT1 */
4401#define ARIZONA_IM_GP1_EINT1_MASK 0x0001 /* IM_GP1_EINT1 */
4402#define ARIZONA_IM_GP1_EINT1_SHIFT 0 /* IM_GP1_EINT1 */
4403#define ARIZONA_IM_GP1_EINT1_WIDTH 1 /* IM_GP1_EINT1 */
4404
4405/*
4406 * R3337 (0xD09) - Interrupt Status 2 Mask
4407 */
4408#define ARIZONA_IM_DSP1_RAM_RDY_EINT1 0x0100 /* IM_DSP1_RAM_RDY_EINT1 */
4409#define ARIZONA_IM_DSP1_RAM_RDY_EINT1_MASK 0x0100 /* IM_DSP1_RAM_RDY_EINT1 */
4410#define ARIZONA_IM_DSP1_RAM_RDY_EINT1_SHIFT 8 /* IM_DSP1_RAM_RDY_EINT1 */
4411#define ARIZONA_IM_DSP1_RAM_RDY_EINT1_WIDTH 1 /* IM_DSP1_RAM_RDY_EINT1 */
4412#define ARIZONA_IM_DSP_IRQ2_EINT1 0x0002 /* IM_DSP_IRQ2_EINT1 */
4413#define ARIZONA_IM_DSP_IRQ2_EINT1_MASK 0x0002 /* IM_DSP_IRQ2_EINT1 */
4414#define ARIZONA_IM_DSP_IRQ2_EINT1_SHIFT 1 /* IM_DSP_IRQ2_EINT1 */
4415#define ARIZONA_IM_DSP_IRQ2_EINT1_WIDTH 1 /* IM_DSP_IRQ2_EINT1 */
4416#define ARIZONA_IM_DSP_IRQ1_EINT1 0x0001 /* IM_DSP_IRQ1_EINT1 */
4417#define ARIZONA_IM_DSP_IRQ1_EINT1_MASK 0x0001 /* IM_DSP_IRQ1_EINT1 */
4418#define ARIZONA_IM_DSP_IRQ1_EINT1_SHIFT 0 /* IM_DSP_IRQ1_EINT1 */
4419#define ARIZONA_IM_DSP_IRQ1_EINT1_WIDTH 1 /* IM_DSP_IRQ1_EINT1 */
4420
4421/*
4422 * R3338 (0xD0A) - Interrupt Status 3 Mask
4423 */
4424#define ARIZONA_IM_SPK_SHUTDOWN_WARN_EINT1 0x8000 /* IM_SPK_SHUTDOWN_WARN_EINT1 */
4425#define ARIZONA_IM_SPK_SHUTDOWN_WARN_EINT1_MASK 0x8000 /* IM_SPK_SHUTDOWN_WARN_EINT1 */
4426#define ARIZONA_IM_SPK_SHUTDOWN_WARN_EINT1_SHIFT 15 /* IM_SPK_SHUTDOWN_WARN_EINT1 */
4427#define ARIZONA_IM_SPK_SHUTDOWN_WARN_EINT1_WIDTH 1 /* IM_SPK_SHUTDOWN_WARN_EINT1 */
4428#define ARIZONA_IM_SPK_SHUTDOWN_EINT1 0x4000 /* IM_SPK_SHUTDOWN_EINT1 */
4429#define ARIZONA_IM_SPK_SHUTDOWN_EINT1_MASK 0x4000 /* IM_SPK_SHUTDOWN_EINT1 */
4430#define ARIZONA_IM_SPK_SHUTDOWN_EINT1_SHIFT 14 /* IM_SPK_SHUTDOWN_EINT1 */
4431#define ARIZONA_IM_SPK_SHUTDOWN_EINT1_WIDTH 1 /* IM_SPK_SHUTDOWN_EINT1 */
4432#define ARIZONA_IM_HPDET_EINT1 0x2000 /* IM_HPDET_EINT1 */
4433#define ARIZONA_IM_HPDET_EINT1_MASK 0x2000 /* IM_HPDET_EINT1 */
4434#define ARIZONA_IM_HPDET_EINT1_SHIFT 13 /* IM_HPDET_EINT1 */
4435#define ARIZONA_IM_HPDET_EINT1_WIDTH 1 /* IM_HPDET_EINT1 */
4436#define ARIZONA_IM_MICDET_EINT1 0x1000 /* IM_MICDET_EINT1 */
4437#define ARIZONA_IM_MICDET_EINT1_MASK 0x1000 /* IM_MICDET_EINT1 */
4438#define ARIZONA_IM_MICDET_EINT1_SHIFT 12 /* IM_MICDET_EINT1 */
4439#define ARIZONA_IM_MICDET_EINT1_WIDTH 1 /* IM_MICDET_EINT1 */
4440#define ARIZONA_IM_WSEQ_DONE_EINT1 0x0800 /* IM_WSEQ_DONE_EINT1 */
4441#define ARIZONA_IM_WSEQ_DONE_EINT1_MASK 0x0800 /* IM_WSEQ_DONE_EINT1 */
4442#define ARIZONA_IM_WSEQ_DONE_EINT1_SHIFT 11 /* IM_WSEQ_DONE_EINT1 */
4443#define ARIZONA_IM_WSEQ_DONE_EINT1_WIDTH 1 /* IM_WSEQ_DONE_EINT1 */
4444#define ARIZONA_IM_DRC2_SIG_DET_EINT1 0x0400 /* IM_DRC2_SIG_DET_EINT1 */
4445#define ARIZONA_IM_DRC2_SIG_DET_EINT1_MASK 0x0400 /* IM_DRC2_SIG_DET_EINT1 */
4446#define ARIZONA_IM_DRC2_SIG_DET_EINT1_SHIFT 10 /* IM_DRC2_SIG_DET_EINT1 */
4447#define ARIZONA_IM_DRC2_SIG_DET_EINT1_WIDTH 1 /* IM_DRC2_SIG_DET_EINT1 */
4448#define ARIZONA_IM_DRC1_SIG_DET_EINT1 0x0200 /* IM_DRC1_SIG_DET_EINT1 */
4449#define ARIZONA_IM_DRC1_SIG_DET_EINT1_MASK 0x0200 /* IM_DRC1_SIG_DET_EINT1 */
4450#define ARIZONA_IM_DRC1_SIG_DET_EINT1_SHIFT 9 /* IM_DRC1_SIG_DET_EINT1 */
4451#define ARIZONA_IM_DRC1_SIG_DET_EINT1_WIDTH 1 /* IM_DRC1_SIG_DET_EINT1 */
4452#define ARIZONA_IM_ASRC2_LOCK_EINT1 0x0100 /* IM_ASRC2_LOCK_EINT1 */
4453#define ARIZONA_IM_ASRC2_LOCK_EINT1_MASK 0x0100 /* IM_ASRC2_LOCK_EINT1 */
4454#define ARIZONA_IM_ASRC2_LOCK_EINT1_SHIFT 8 /* IM_ASRC2_LOCK_EINT1 */
4455#define ARIZONA_IM_ASRC2_LOCK_EINT1_WIDTH 1 /* IM_ASRC2_LOCK_EINT1 */
4456#define ARIZONA_IM_ASRC1_LOCK_EINT1 0x0080 /* IM_ASRC1_LOCK_EINT1 */
4457#define ARIZONA_IM_ASRC1_LOCK_EINT1_MASK 0x0080 /* IM_ASRC1_LOCK_EINT1 */
4458#define ARIZONA_IM_ASRC1_LOCK_EINT1_SHIFT 7 /* IM_ASRC1_LOCK_EINT1 */
4459#define ARIZONA_IM_ASRC1_LOCK_EINT1_WIDTH 1 /* IM_ASRC1_LOCK_EINT1 */
4460#define ARIZONA_IM_UNDERCLOCKED_EINT1 0x0040 /* IM_UNDERCLOCKED_EINT1 */
4461#define ARIZONA_IM_UNDERCLOCKED_EINT1_MASK 0x0040 /* IM_UNDERCLOCKED_EINT1 */
4462#define ARIZONA_IM_UNDERCLOCKED_EINT1_SHIFT 6 /* IM_UNDERCLOCKED_EINT1 */
4463#define ARIZONA_IM_UNDERCLOCKED_EINT1_WIDTH 1 /* IM_UNDERCLOCKED_EINT1 */
4464#define ARIZONA_IM_OVERCLOCKED_EINT1 0x0020 /* IM_OVERCLOCKED_EINT1 */
4465#define ARIZONA_IM_OVERCLOCKED_EINT1_MASK 0x0020 /* IM_OVERCLOCKED_EINT1 */
4466#define ARIZONA_IM_OVERCLOCKED_EINT1_SHIFT 5 /* IM_OVERCLOCKED_EINT1 */
4467#define ARIZONA_IM_OVERCLOCKED_EINT1_WIDTH 1 /* IM_OVERCLOCKED_EINT1 */
4468#define ARIZONA_IM_FLL2_LOCK_EINT1 0x0008 /* IM_FLL2_LOCK_EINT1 */
4469#define ARIZONA_IM_FLL2_LOCK_EINT1_MASK 0x0008 /* IM_FLL2_LOCK_EINT1 */
4470#define ARIZONA_IM_FLL2_LOCK_EINT1_SHIFT 3 /* IM_FLL2_LOCK_EINT1 */
4471#define ARIZONA_IM_FLL2_LOCK_EINT1_WIDTH 1 /* IM_FLL2_LOCK_EINT1 */
4472#define ARIZONA_IM_FLL1_LOCK_EINT1 0x0004 /* IM_FLL1_LOCK_EINT1 */
4473#define ARIZONA_IM_FLL1_LOCK_EINT1_MASK 0x0004 /* IM_FLL1_LOCK_EINT1 */
4474#define ARIZONA_IM_FLL1_LOCK_EINT1_SHIFT 2 /* IM_FLL1_LOCK_EINT1 */
4475#define ARIZONA_IM_FLL1_LOCK_EINT1_WIDTH 1 /* IM_FLL1_LOCK_EINT1 */
4476#define ARIZONA_IM_CLKGEN_ERR_EINT1 0x0002 /* IM_CLKGEN_ERR_EINT1 */
4477#define ARIZONA_IM_CLKGEN_ERR_EINT1_MASK 0x0002 /* IM_CLKGEN_ERR_EINT1 */
4478#define ARIZONA_IM_CLKGEN_ERR_EINT1_SHIFT 1 /* IM_CLKGEN_ERR_EINT1 */
4479#define ARIZONA_IM_CLKGEN_ERR_EINT1_WIDTH 1 /* IM_CLKGEN_ERR_EINT1 */
4480#define ARIZONA_IM_CLKGEN_ERR_ASYNC_EINT1 0x0001 /* IM_CLKGEN_ERR_ASYNC_EINT1 */
4481#define ARIZONA_IM_CLKGEN_ERR_ASYNC_EINT1_MASK 0x0001 /* IM_CLKGEN_ERR_ASYNC_EINT1 */
4482#define ARIZONA_IM_CLKGEN_ERR_ASYNC_EINT1_SHIFT 0 /* IM_CLKGEN_ERR_ASYNC_EINT1 */
4483#define ARIZONA_IM_CLKGEN_ERR_ASYNC_EINT1_WIDTH 1 /* IM_CLKGEN_ERR_ASYNC_EINT1 */
4484
4485/*
4486 * R3339 (0xD0B) - Interrupt Status 4 Mask
4487 */
4488#define ARIZONA_IM_ASRC_CFG_ERR_EINT1 0x8000 /* IM_ASRC_CFG_ERR_EINT1 */
4489#define ARIZONA_IM_ASRC_CFG_ERR_EINT1_MASK 0x8000 /* IM_ASRC_CFG_ERR_EINT1 */
4490#define ARIZONA_IM_ASRC_CFG_ERR_EINT1_SHIFT 15 /* IM_ASRC_CFG_ERR_EINT1 */
4491#define ARIZONA_IM_ASRC_CFG_ERR_EINT1_WIDTH 1 /* IM_ASRC_CFG_ERR_EINT1 */
4492#define ARIZONA_IM_AIF3_ERR_EINT1 0x4000 /* IM_AIF3_ERR_EINT1 */
4493#define ARIZONA_IM_AIF3_ERR_EINT1_MASK 0x4000 /* IM_AIF3_ERR_EINT1 */
4494#define ARIZONA_IM_AIF3_ERR_EINT1_SHIFT 14 /* IM_AIF3_ERR_EINT1 */
4495#define ARIZONA_IM_AIF3_ERR_EINT1_WIDTH 1 /* IM_AIF3_ERR_EINT1 */
4496#define ARIZONA_IM_AIF2_ERR_EINT1 0x2000 /* IM_AIF2_ERR_EINT1 */
4497#define ARIZONA_IM_AIF2_ERR_EINT1_MASK 0x2000 /* IM_AIF2_ERR_EINT1 */
4498#define ARIZONA_IM_AIF2_ERR_EINT1_SHIFT 13 /* IM_AIF2_ERR_EINT1 */
4499#define ARIZONA_IM_AIF2_ERR_EINT1_WIDTH 1 /* IM_AIF2_ERR_EINT1 */
4500#define ARIZONA_IM_AIF1_ERR_EINT1 0x1000 /* IM_AIF1_ERR_EINT1 */
4501#define ARIZONA_IM_AIF1_ERR_EINT1_MASK 0x1000 /* IM_AIF1_ERR_EINT1 */
4502#define ARIZONA_IM_AIF1_ERR_EINT1_SHIFT 12 /* IM_AIF1_ERR_EINT1 */
4503#define ARIZONA_IM_AIF1_ERR_EINT1_WIDTH 1 /* IM_AIF1_ERR_EINT1 */
4504#define ARIZONA_IM_CTRLIF_ERR_EINT1 0x0800 /* IM_CTRLIF_ERR_EINT1 */
4505#define ARIZONA_IM_CTRLIF_ERR_EINT1_MASK 0x0800 /* IM_CTRLIF_ERR_EINT1 */
4506#define ARIZONA_IM_CTRLIF_ERR_EINT1_SHIFT 11 /* IM_CTRLIF_ERR_EINT1 */
4507#define ARIZONA_IM_CTRLIF_ERR_EINT1_WIDTH 1 /* IM_CTRLIF_ERR_EINT1 */
4508#define ARIZONA_IM_MIXER_DROPPED_SAMPLE_EINT1 0x0400 /* IM_MIXER_DROPPED_SAMPLE_EINT1 */
4509#define ARIZONA_IM_MIXER_DROPPED_SAMPLE_EINT1_MASK 0x0400 /* IM_MIXER_DROPPED_SAMPLE_EINT1 */
4510#define ARIZONA_IM_MIXER_DROPPED_SAMPLE_EINT1_SHIFT 10 /* IM_MIXER_DROPPED_SAMPLE_EINT1 */
4511#define ARIZONA_IM_MIXER_DROPPED_SAMPLE_EINT1_WIDTH 1 /* IM_MIXER_DROPPED_SAMPLE_EINT1 */
4512#define ARIZONA_IM_ASYNC_CLK_ENA_LOW_EINT1 0x0200 /* IM_ASYNC_CLK_ENA_LOW_EINT1 */
4513#define ARIZONA_IM_ASYNC_CLK_ENA_LOW_EINT1_MASK 0x0200 /* IM_ASYNC_CLK_ENA_LOW_EINT1 */
4514#define ARIZONA_IM_ASYNC_CLK_ENA_LOW_EINT1_SHIFT 9 /* IM_ASYNC_CLK_ENA_LOW_EINT1 */
4515#define ARIZONA_IM_ASYNC_CLK_ENA_LOW_EINT1_WIDTH 1 /* IM_ASYNC_CLK_ENA_LOW_EINT1 */
4516#define ARIZONA_IM_SYSCLK_ENA_LOW_EINT1 0x0100 /* IM_SYSCLK_ENA_LOW_EINT1 */
4517#define ARIZONA_IM_SYSCLK_ENA_LOW_EINT1_MASK 0x0100 /* IM_SYSCLK_ENA_LOW_EINT1 */
4518#define ARIZONA_IM_SYSCLK_ENA_LOW_EINT1_SHIFT 8 /* IM_SYSCLK_ENA_LOW_EINT1 */
4519#define ARIZONA_IM_SYSCLK_ENA_LOW_EINT1_WIDTH 1 /* IM_SYSCLK_ENA_LOW_EINT1 */
4520#define ARIZONA_IM_ISRC1_CFG_ERR_EINT1 0x0080 /* IM_ISRC1_CFG_ERR_EINT1 */
4521#define ARIZONA_IM_ISRC1_CFG_ERR_EINT1_MASK 0x0080 /* IM_ISRC1_CFG_ERR_EINT1 */
4522#define ARIZONA_IM_ISRC1_CFG_ERR_EINT1_SHIFT 7 /* IM_ISRC1_CFG_ERR_EINT1 */
4523#define ARIZONA_IM_ISRC1_CFG_ERR_EINT1_WIDTH 1 /* IM_ISRC1_CFG_ERR_EINT1 */
4524#define ARIZONA_IM_ISRC2_CFG_ERR_EINT1 0x0040 /* IM_ISRC2_CFG_ERR_EINT1 */
4525#define ARIZONA_IM_ISRC2_CFG_ERR_EINT1_MASK 0x0040 /* IM_ISRC2_CFG_ERR_EINT1 */
4526#define ARIZONA_IM_ISRC2_CFG_ERR_EINT1_SHIFT 6 /* IM_ISRC2_CFG_ERR_EINT1 */
4527#define ARIZONA_IM_ISRC2_CFG_ERR_EINT1_WIDTH 1 /* IM_ISRC2_CFG_ERR_EINT1 */
4528
4529/*
4530 * R3340 (0xD0C) - Interrupt Status 5 Mask
4531 */
4532#define ARIZONA_IM_BOOT_DONE_EINT1 0x0100 /* IM_BOOT_DONE_EINT1 */
4533#define ARIZONA_IM_BOOT_DONE_EINT1_MASK 0x0100 /* IM_BOOT_DONE_EINT1 */
4534#define ARIZONA_IM_BOOT_DONE_EINT1_SHIFT 8 /* IM_BOOT_DONE_EINT1 */
4535#define ARIZONA_IM_BOOT_DONE_EINT1_WIDTH 1 /* IM_BOOT_DONE_EINT1 */
4536#define ARIZONA_IM_DCS_DAC_DONE_EINT1 0x0080 /* IM_DCS_DAC_DONE_EINT1 */
4537#define ARIZONA_IM_DCS_DAC_DONE_EINT1_MASK 0x0080 /* IM_DCS_DAC_DONE_EINT1 */
4538#define ARIZONA_IM_DCS_DAC_DONE_EINT1_SHIFT 7 /* IM_DCS_DAC_DONE_EINT1 */
4539#define ARIZONA_IM_DCS_DAC_DONE_EINT1_WIDTH 1 /* IM_DCS_DAC_DONE_EINT1 */
4540#define ARIZONA_IM_DCS_HP_DONE_EINT1 0x0040 /* IM_DCS_HP_DONE_EINT1 */
4541#define ARIZONA_IM_DCS_HP_DONE_EINT1_MASK 0x0040 /* IM_DCS_HP_DONE_EINT1 */
4542#define ARIZONA_IM_DCS_HP_DONE_EINT1_SHIFT 6 /* IM_DCS_HP_DONE_EINT1 */
4543#define ARIZONA_IM_DCS_HP_DONE_EINT1_WIDTH 1 /* IM_DCS_HP_DONE_EINT1 */
4544#define ARIZONA_IM_FLL2_CLOCK_OK_EINT1 0x0002 /* IM_FLL2_CLOCK_OK_EINT1 */
4545#define ARIZONA_IM_FLL2_CLOCK_OK_EINT1_MASK 0x0002 /* IM_FLL2_CLOCK_OK_EINT1 */
4546#define ARIZONA_IM_FLL2_CLOCK_OK_EINT1_SHIFT 1 /* IM_FLL2_CLOCK_OK_EINT1 */
4547#define ARIZONA_IM_FLL2_CLOCK_OK_EINT1_WIDTH 1 /* IM_FLL2_CLOCK_OK_EINT1 */
4548#define ARIZONA_IM_FLL1_CLOCK_OK_EINT1 0x0001 /* IM_FLL1_CLOCK_OK_EINT1 */
4549#define ARIZONA_IM_FLL1_CLOCK_OK_EINT1_MASK 0x0001 /* IM_FLL1_CLOCK_OK_EINT1 */
4550#define ARIZONA_IM_FLL1_CLOCK_OK_EINT1_SHIFT 0 /* IM_FLL1_CLOCK_OK_EINT1 */
4551#define ARIZONA_IM_FLL1_CLOCK_OK_EINT1_WIDTH 1 /* IM_FLL1_CLOCK_OK_EINT1 */
4552
4553/*
4554 * R3343 (0xD0F) - Interrupt Control
4555 */
4556#define ARIZONA_IM_IRQ1 0x0001 /* IM_IRQ1 */
4557#define ARIZONA_IM_IRQ1_MASK 0x0001 /* IM_IRQ1 */
4558#define ARIZONA_IM_IRQ1_SHIFT 0 /* IM_IRQ1 */
4559#define ARIZONA_IM_IRQ1_WIDTH 1 /* IM_IRQ1 */
4560
4561/*
4562 * R3344 (0xD10) - IRQ2 Status 1
4563 */
4564#define ARIZONA_GP4_EINT2 0x0008 /* GP4_EINT2 */
4565#define ARIZONA_GP4_EINT2_MASK 0x0008 /* GP4_EINT2 */
4566#define ARIZONA_GP4_EINT2_SHIFT 3 /* GP4_EINT2 */
4567#define ARIZONA_GP4_EINT2_WIDTH 1 /* GP4_EINT2 */
4568#define ARIZONA_GP3_EINT2 0x0004 /* GP3_EINT2 */
4569#define ARIZONA_GP3_EINT2_MASK 0x0004 /* GP3_EINT2 */
4570#define ARIZONA_GP3_EINT2_SHIFT 2 /* GP3_EINT2 */
4571#define ARIZONA_GP3_EINT2_WIDTH 1 /* GP3_EINT2 */
4572#define ARIZONA_GP2_EINT2 0x0002 /* GP2_EINT2 */
4573#define ARIZONA_GP2_EINT2_MASK 0x0002 /* GP2_EINT2 */
4574#define ARIZONA_GP2_EINT2_SHIFT 1 /* GP2_EINT2 */
4575#define ARIZONA_GP2_EINT2_WIDTH 1 /* GP2_EINT2 */
4576#define ARIZONA_GP1_EINT2 0x0001 /* GP1_EINT2 */
4577#define ARIZONA_GP1_EINT2_MASK 0x0001 /* GP1_EINT2 */
4578#define ARIZONA_GP1_EINT2_SHIFT 0 /* GP1_EINT2 */
4579#define ARIZONA_GP1_EINT2_WIDTH 1 /* GP1_EINT2 */
4580
4581/*
4582 * R3345 (0xD11) - IRQ2 Status 2
4583 */
4584#define ARIZONA_DSP1_RAM_RDY_EINT2 0x0100 /* DSP1_RAM_RDY_EINT2 */
4585#define ARIZONA_DSP1_RAM_RDY_EINT2_MASK 0x0100 /* DSP1_RAM_RDY_EINT2 */
4586#define ARIZONA_DSP1_RAM_RDY_EINT2_SHIFT 8 /* DSP1_RAM_RDY_EINT2 */
4587#define ARIZONA_DSP1_RAM_RDY_EINT2_WIDTH 1 /* DSP1_RAM_RDY_EINT2 */
4588#define ARIZONA_DSP_IRQ2_EINT2 0x0002 /* DSP_IRQ2_EINT2 */
4589#define ARIZONA_DSP_IRQ2_EINT2_MASK 0x0002 /* DSP_IRQ2_EINT2 */
4590#define ARIZONA_DSP_IRQ2_EINT2_SHIFT 1 /* DSP_IRQ2_EINT2 */
4591#define ARIZONA_DSP_IRQ2_EINT2_WIDTH 1 /* DSP_IRQ2_EINT2 */
4592#define ARIZONA_DSP_IRQ1_EINT2 0x0001 /* DSP_IRQ1_EINT2 */
4593#define ARIZONA_DSP_IRQ1_EINT2_MASK 0x0001 /* DSP_IRQ1_EINT2 */
4594#define ARIZONA_DSP_IRQ1_EINT2_SHIFT 0 /* DSP_IRQ1_EINT2 */
4595#define ARIZONA_DSP_IRQ1_EINT2_WIDTH 1 /* DSP_IRQ1_EINT2 */
4596
4597/*
4598 * R3346 (0xD12) - IRQ2 Status 3
4599 */
4600#define ARIZONA_SPK_SHUTDOWN_WARN_EINT2 0x8000 /* SPK_SHUTDOWN_WARN_EINT2 */
4601#define ARIZONA_SPK_SHUTDOWN_WARN_EINT2_MASK 0x8000 /* SPK_SHUTDOWN_WARN_EINT2 */
4602#define ARIZONA_SPK_SHUTDOWN_WARN_EINT2_SHIFT 15 /* SPK_SHUTDOWN_WARN_EINT2 */
4603#define ARIZONA_SPK_SHUTDOWN_WARN_EINT2_WIDTH 1 /* SPK_SHUTDOWN_WARN_EINT2 */
4604#define ARIZONA_SPK_SHUTDOWN_EINT2 0x4000 /* SPK_SHUTDOWN_EINT2 */
4605#define ARIZONA_SPK_SHUTDOWN_EINT2_MASK 0x4000 /* SPK_SHUTDOWN_EINT2 */
4606#define ARIZONA_SPK_SHUTDOWN_EINT2_SHIFT 14 /* SPK_SHUTDOWN_EINT2 */
4607#define ARIZONA_SPK_SHUTDOWN_EINT2_WIDTH 1 /* SPK_SHUTDOWN_EINT2 */
4608#define ARIZONA_HPDET_EINT2 0x2000 /* HPDET_EINT2 */
4609#define ARIZONA_HPDET_EINT2_MASK 0x2000 /* HPDET_EINT2 */
4610#define ARIZONA_HPDET_EINT2_SHIFT 13 /* HPDET_EINT2 */
4611#define ARIZONA_HPDET_EINT2_WIDTH 1 /* HPDET_EINT2 */
4612#define ARIZONA_MICDET_EINT2 0x1000 /* MICDET_EINT2 */
4613#define ARIZONA_MICDET_EINT2_MASK 0x1000 /* MICDET_EINT2 */
4614#define ARIZONA_MICDET_EINT2_SHIFT 12 /* MICDET_EINT2 */
4615#define ARIZONA_MICDET_EINT2_WIDTH 1 /* MICDET_EINT2 */
4616#define ARIZONA_WSEQ_DONE_EINT2 0x0800 /* WSEQ_DONE_EINT2 */
4617#define ARIZONA_WSEQ_DONE_EINT2_MASK 0x0800 /* WSEQ_DONE_EINT2 */
4618#define ARIZONA_WSEQ_DONE_EINT2_SHIFT 11 /* WSEQ_DONE_EINT2 */
4619#define ARIZONA_WSEQ_DONE_EINT2_WIDTH 1 /* WSEQ_DONE_EINT2 */
4620#define ARIZONA_DRC2_SIG_DET_EINT2 0x0400 /* DRC2_SIG_DET_EINT2 */
4621#define ARIZONA_DRC2_SIG_DET_EINT2_MASK 0x0400 /* DRC2_SIG_DET_EINT2 */
4622#define ARIZONA_DRC2_SIG_DET_EINT2_SHIFT 10 /* DRC2_SIG_DET_EINT2 */
4623#define ARIZONA_DRC2_SIG_DET_EINT2_WIDTH 1 /* DRC2_SIG_DET_EINT2 */
4624#define ARIZONA_DRC1_SIG_DET_EINT2 0x0200 /* DRC1_SIG_DET_EINT2 */
4625#define ARIZONA_DRC1_SIG_DET_EINT2_MASK 0x0200 /* DRC1_SIG_DET_EINT2 */
4626#define ARIZONA_DRC1_SIG_DET_EINT2_SHIFT 9 /* DRC1_SIG_DET_EINT2 */
4627#define ARIZONA_DRC1_SIG_DET_EINT2_WIDTH 1 /* DRC1_SIG_DET_EINT2 */
4628#define ARIZONA_ASRC2_LOCK_EINT2 0x0100 /* ASRC2_LOCK_EINT2 */
4629#define ARIZONA_ASRC2_LOCK_EINT2_MASK 0x0100 /* ASRC2_LOCK_EINT2 */
4630#define ARIZONA_ASRC2_LOCK_EINT2_SHIFT 8 /* ASRC2_LOCK_EINT2 */
4631#define ARIZONA_ASRC2_LOCK_EINT2_WIDTH 1 /* ASRC2_LOCK_EINT2 */
4632#define ARIZONA_ASRC1_LOCK_EINT2 0x0080 /* ASRC1_LOCK_EINT2 */
4633#define ARIZONA_ASRC1_LOCK_EINT2_MASK 0x0080 /* ASRC1_LOCK_EINT2 */
4634#define ARIZONA_ASRC1_LOCK_EINT2_SHIFT 7 /* ASRC1_LOCK_EINT2 */
4635#define ARIZONA_ASRC1_LOCK_EINT2_WIDTH 1 /* ASRC1_LOCK_EINT2 */
4636#define ARIZONA_UNDERCLOCKED_EINT2 0x0040 /* UNDERCLOCKED_EINT2 */
4637#define ARIZONA_UNDERCLOCKED_EINT2_MASK 0x0040 /* UNDERCLOCKED_EINT2 */
4638#define ARIZONA_UNDERCLOCKED_EINT2_SHIFT 6 /* UNDERCLOCKED_EINT2 */
4639#define ARIZONA_UNDERCLOCKED_EINT2_WIDTH 1 /* UNDERCLOCKED_EINT2 */
4640#define ARIZONA_OVERCLOCKED_EINT2 0x0020 /* OVERCLOCKED_EINT2 */
4641#define ARIZONA_OVERCLOCKED_EINT2_MASK 0x0020 /* OVERCLOCKED_EINT2 */
4642#define ARIZONA_OVERCLOCKED_EINT2_SHIFT 5 /* OVERCLOCKED_EINT2 */
4643#define ARIZONA_OVERCLOCKED_EINT2_WIDTH 1 /* OVERCLOCKED_EINT2 */
4644#define ARIZONA_FLL2_LOCK_EINT2 0x0008 /* FLL2_LOCK_EINT2 */
4645#define ARIZONA_FLL2_LOCK_EINT2_MASK 0x0008 /* FLL2_LOCK_EINT2 */
4646#define ARIZONA_FLL2_LOCK_EINT2_SHIFT 3 /* FLL2_LOCK_EINT2 */
4647#define ARIZONA_FLL2_LOCK_EINT2_WIDTH 1 /* FLL2_LOCK_EINT2 */
4648#define ARIZONA_FLL1_LOCK_EINT2 0x0004 /* FLL1_LOCK_EINT2 */
4649#define ARIZONA_FLL1_LOCK_EINT2_MASK 0x0004 /* FLL1_LOCK_EINT2 */
4650#define ARIZONA_FLL1_LOCK_EINT2_SHIFT 2 /* FLL1_LOCK_EINT2 */
4651#define ARIZONA_FLL1_LOCK_EINT2_WIDTH 1 /* FLL1_LOCK_EINT2 */
4652#define ARIZONA_CLKGEN_ERR_EINT2 0x0002 /* CLKGEN_ERR_EINT2 */
4653#define ARIZONA_CLKGEN_ERR_EINT2_MASK 0x0002 /* CLKGEN_ERR_EINT2 */
4654#define ARIZONA_CLKGEN_ERR_EINT2_SHIFT 1 /* CLKGEN_ERR_EINT2 */
4655#define ARIZONA_CLKGEN_ERR_EINT2_WIDTH 1 /* CLKGEN_ERR_EINT2 */
4656#define ARIZONA_CLKGEN_ERR_ASYNC_EINT2 0x0001 /* CLKGEN_ERR_ASYNC_EINT2 */
4657#define ARIZONA_CLKGEN_ERR_ASYNC_EINT2_MASK 0x0001 /* CLKGEN_ERR_ASYNC_EINT2 */
4658#define ARIZONA_CLKGEN_ERR_ASYNC_EINT2_SHIFT 0 /* CLKGEN_ERR_ASYNC_EINT2 */
4659#define ARIZONA_CLKGEN_ERR_ASYNC_EINT2_WIDTH 1 /* CLKGEN_ERR_ASYNC_EINT2 */
4660
4661/*
4662 * R3347 (0xD13) - IRQ2 Status 4
4663 */
4664#define ARIZONA_ASRC_CFG_ERR_EINT2 0x8000 /* ASRC_CFG_ERR_EINT2 */
4665#define ARIZONA_ASRC_CFG_ERR_EINT2_MASK 0x8000 /* ASRC_CFG_ERR_EINT2 */
4666#define ARIZONA_ASRC_CFG_ERR_EINT2_SHIFT 15 /* ASRC_CFG_ERR_EINT2 */
4667#define ARIZONA_ASRC_CFG_ERR_EINT2_WIDTH 1 /* ASRC_CFG_ERR_EINT2 */
4668#define ARIZONA_AIF3_ERR_EINT2 0x4000 /* AIF3_ERR_EINT2 */
4669#define ARIZONA_AIF3_ERR_EINT2_MASK 0x4000 /* AIF3_ERR_EINT2 */
4670#define ARIZONA_AIF3_ERR_EINT2_SHIFT 14 /* AIF3_ERR_EINT2 */
4671#define ARIZONA_AIF3_ERR_EINT2_WIDTH 1 /* AIF3_ERR_EINT2 */
4672#define ARIZONA_AIF2_ERR_EINT2 0x2000 /* AIF2_ERR_EINT2 */
4673#define ARIZONA_AIF2_ERR_EINT2_MASK 0x2000 /* AIF2_ERR_EINT2 */
4674#define ARIZONA_AIF2_ERR_EINT2_SHIFT 13 /* AIF2_ERR_EINT2 */
4675#define ARIZONA_AIF2_ERR_EINT2_WIDTH 1 /* AIF2_ERR_EINT2 */
4676#define ARIZONA_AIF1_ERR_EINT2 0x1000 /* AIF1_ERR_EINT2 */
4677#define ARIZONA_AIF1_ERR_EINT2_MASK 0x1000 /* AIF1_ERR_EINT2 */
4678#define ARIZONA_AIF1_ERR_EINT2_SHIFT 12 /* AIF1_ERR_EINT2 */
4679#define ARIZONA_AIF1_ERR_EINT2_WIDTH 1 /* AIF1_ERR_EINT2 */
4680#define ARIZONA_CTRLIF_ERR_EINT2 0x0800 /* CTRLIF_ERR_EINT2 */
4681#define ARIZONA_CTRLIF_ERR_EINT2_MASK 0x0800 /* CTRLIF_ERR_EINT2 */
4682#define ARIZONA_CTRLIF_ERR_EINT2_SHIFT 11 /* CTRLIF_ERR_EINT2 */
4683#define ARIZONA_CTRLIF_ERR_EINT2_WIDTH 1 /* CTRLIF_ERR_EINT2 */
4684#define ARIZONA_MIXER_DROPPED_SAMPLE_EINT2 0x0400 /* MIXER_DROPPED_SAMPLE_EINT2 */
4685#define ARIZONA_MIXER_DROPPED_SAMPLE_EINT2_MASK 0x0400 /* MIXER_DROPPED_SAMPLE_EINT2 */
4686#define ARIZONA_MIXER_DROPPED_SAMPLE_EINT2_SHIFT 10 /* MIXER_DROPPED_SAMPLE_EINT2 */
4687#define ARIZONA_MIXER_DROPPED_SAMPLE_EINT2_WIDTH 1 /* MIXER_DROPPED_SAMPLE_EINT2 */
4688#define ARIZONA_ASYNC_CLK_ENA_LOW_EINT2 0x0200 /* ASYNC_CLK_ENA_LOW_EINT2 */
4689#define ARIZONA_ASYNC_CLK_ENA_LOW_EINT2_MASK 0x0200 /* ASYNC_CLK_ENA_LOW_EINT2 */
4690#define ARIZONA_ASYNC_CLK_ENA_LOW_EINT2_SHIFT 9 /* ASYNC_CLK_ENA_LOW_EINT2 */
4691#define ARIZONA_ASYNC_CLK_ENA_LOW_EINT2_WIDTH 1 /* ASYNC_CLK_ENA_LOW_EINT2 */
4692#define ARIZONA_SYSCLK_ENA_LOW_EINT2 0x0100 /* SYSCLK_ENA_LOW_EINT2 */
4693#define ARIZONA_SYSCLK_ENA_LOW_EINT2_MASK 0x0100 /* SYSCLK_ENA_LOW_EINT2 */
4694#define ARIZONA_SYSCLK_ENA_LOW_EINT2_SHIFT 8 /* SYSCLK_ENA_LOW_EINT2 */
4695#define ARIZONA_SYSCLK_ENA_LOW_EINT2_WIDTH 1 /* SYSCLK_ENA_LOW_EINT2 */
4696#define ARIZONA_ISRC1_CFG_ERR_EINT2 0x0080 /* ISRC1_CFG_ERR_EINT2 */
4697#define ARIZONA_ISRC1_CFG_ERR_EINT2_MASK 0x0080 /* ISRC1_CFG_ERR_EINT2 */
4698#define ARIZONA_ISRC1_CFG_ERR_EINT2_SHIFT 7 /* ISRC1_CFG_ERR_EINT2 */
4699#define ARIZONA_ISRC1_CFG_ERR_EINT2_WIDTH 1 /* ISRC1_CFG_ERR_EINT2 */
4700#define ARIZONA_ISRC2_CFG_ERR_EINT2 0x0040 /* ISRC2_CFG_ERR_EINT2 */
4701#define ARIZONA_ISRC2_CFG_ERR_EINT2_MASK 0x0040 /* ISRC2_CFG_ERR_EINT2 */
4702#define ARIZONA_ISRC2_CFG_ERR_EINT2_SHIFT 6 /* ISRC2_CFG_ERR_EINT2 */
4703#define ARIZONA_ISRC2_CFG_ERR_EINT2_WIDTH 1 /* ISRC2_CFG_ERR_EINT2 */
4704
4705/*
4706 * R3348 (0xD14) - IRQ2 Status 5
4707 */
4708#define ARIZONA_BOOT_DONE_EINT2 0x0100 /* BOOT_DONE_EINT2 */
4709#define ARIZONA_BOOT_DONE_EINT2_MASK 0x0100 /* BOOT_DONE_EINT2 */
4710#define ARIZONA_BOOT_DONE_EINT2_SHIFT 8 /* BOOT_DONE_EINT2 */
4711#define ARIZONA_BOOT_DONE_EINT2_WIDTH 1 /* BOOT_DONE_EINT2 */
4712#define ARIZONA_DCS_DAC_DONE_EINT2 0x0080 /* DCS_DAC_DONE_EINT2 */
4713#define ARIZONA_DCS_DAC_DONE_EINT2_MASK 0x0080 /* DCS_DAC_DONE_EINT2 */
4714#define ARIZONA_DCS_DAC_DONE_EINT2_SHIFT 7 /* DCS_DAC_DONE_EINT2 */
4715#define ARIZONA_DCS_DAC_DONE_EINT2_WIDTH 1 /* DCS_DAC_DONE_EINT2 */
4716#define ARIZONA_DCS_HP_DONE_EINT2 0x0040 /* DCS_HP_DONE_EINT2 */
4717#define ARIZONA_DCS_HP_DONE_EINT2_MASK 0x0040 /* DCS_HP_DONE_EINT2 */
4718#define ARIZONA_DCS_HP_DONE_EINT2_SHIFT 6 /* DCS_HP_DONE_EINT2 */
4719#define ARIZONA_DCS_HP_DONE_EINT2_WIDTH 1 /* DCS_HP_DONE_EINT2 */
4720#define ARIZONA_FLL2_CLOCK_OK_EINT2 0x0002 /* FLL2_CLOCK_OK_EINT2 */
4721#define ARIZONA_FLL2_CLOCK_OK_EINT2_MASK 0x0002 /* FLL2_CLOCK_OK_EINT2 */
4722#define ARIZONA_FLL2_CLOCK_OK_EINT2_SHIFT 1 /* FLL2_CLOCK_OK_EINT2 */
4723#define ARIZONA_FLL2_CLOCK_OK_EINT2_WIDTH 1 /* FLL2_CLOCK_OK_EINT2 */
4724#define ARIZONA_FLL1_CLOCK_OK_EINT2 0x0001 /* FLL1_CLOCK_OK_EINT2 */
4725#define ARIZONA_FLL1_CLOCK_OK_EINT2_MASK 0x0001 /* FLL1_CLOCK_OK_EINT2 */
4726#define ARIZONA_FLL1_CLOCK_OK_EINT2_SHIFT 0 /* FLL1_CLOCK_OK_EINT2 */
4727#define ARIZONA_FLL1_CLOCK_OK_EINT2_WIDTH 1 /* FLL1_CLOCK_OK_EINT2 */
4728
4729/*
4730 * R3352 (0xD18) - IRQ2 Status 1 Mask
4731 */
4732#define ARIZONA_IM_GP4_EINT2 0x0008 /* IM_GP4_EINT2 */
4733#define ARIZONA_IM_GP4_EINT2_MASK 0x0008 /* IM_GP4_EINT2 */
4734#define ARIZONA_IM_GP4_EINT2_SHIFT 3 /* IM_GP4_EINT2 */
4735#define ARIZONA_IM_GP4_EINT2_WIDTH 1 /* IM_GP4_EINT2 */
4736#define ARIZONA_IM_GP3_EINT2 0x0004 /* IM_GP3_EINT2 */
4737#define ARIZONA_IM_GP3_EINT2_MASK 0x0004 /* IM_GP3_EINT2 */
4738#define ARIZONA_IM_GP3_EINT2_SHIFT 2 /* IM_GP3_EINT2 */
4739#define ARIZONA_IM_GP3_EINT2_WIDTH 1 /* IM_GP3_EINT2 */
4740#define ARIZONA_IM_GP2_EINT2 0x0002 /* IM_GP2_EINT2 */
4741#define ARIZONA_IM_GP2_EINT2_MASK 0x0002 /* IM_GP2_EINT2 */
4742#define ARIZONA_IM_GP2_EINT2_SHIFT 1 /* IM_GP2_EINT2 */
4743#define ARIZONA_IM_GP2_EINT2_WIDTH 1 /* IM_GP2_EINT2 */
4744#define ARIZONA_IM_GP1_EINT2 0x0001 /* IM_GP1_EINT2 */
4745#define ARIZONA_IM_GP1_EINT2_MASK 0x0001 /* IM_GP1_EINT2 */
4746#define ARIZONA_IM_GP1_EINT2_SHIFT 0 /* IM_GP1_EINT2 */
4747#define ARIZONA_IM_GP1_EINT2_WIDTH 1 /* IM_GP1_EINT2 */
4748
4749/*
4750 * R3353 (0xD19) - IRQ2 Status 2 Mask
4751 */
4752#define ARIZONA_IM_DSP1_RAM_RDY_EINT2 0x0100 /* IM_DSP1_RAM_RDY_EINT2 */
4753#define ARIZONA_IM_DSP1_RAM_RDY_EINT2_MASK 0x0100 /* IM_DSP1_RAM_RDY_EINT2 */
4754#define ARIZONA_IM_DSP1_RAM_RDY_EINT2_SHIFT 8 /* IM_DSP1_RAM_RDY_EINT2 */
4755#define ARIZONA_IM_DSP1_RAM_RDY_EINT2_WIDTH 1 /* IM_DSP1_RAM_RDY_EINT2 */
4756#define ARIZONA_IM_DSP_IRQ2_EINT2 0x0002 /* IM_DSP_IRQ2_EINT2 */
4757#define ARIZONA_IM_DSP_IRQ2_EINT2_MASK 0x0002 /* IM_DSP_IRQ2_EINT2 */
4758#define ARIZONA_IM_DSP_IRQ2_EINT2_SHIFT 1 /* IM_DSP_IRQ2_EINT2 */
4759#define ARIZONA_IM_DSP_IRQ2_EINT2_WIDTH 1 /* IM_DSP_IRQ2_EINT2 */
4760#define ARIZONA_IM_DSP_IRQ1_EINT2 0x0001 /* IM_DSP_IRQ1_EINT2 */
4761#define ARIZONA_IM_DSP_IRQ1_EINT2_MASK 0x0001 /* IM_DSP_IRQ1_EINT2 */
4762#define ARIZONA_IM_DSP_IRQ1_EINT2_SHIFT 0 /* IM_DSP_IRQ1_EINT2 */
4763#define ARIZONA_IM_DSP_IRQ1_EINT2_WIDTH 1 /* IM_DSP_IRQ1_EINT2 */
4764
4765/*
4766 * R3354 (0xD1A) - IRQ2 Status 3 Mask
4767 */
4768#define ARIZONA_IM_SPK_SHUTDOWN_WARN_EINT2 0x8000 /* IM_SPK_SHUTDOWN_WARN_EINT2 */
4769#define ARIZONA_IM_SPK_SHUTDOWN_WARN_EINT2_MASK 0x8000 /* IM_SPK_SHUTDOWN_WARN_EINT2 */
4770#define ARIZONA_IM_SPK_SHUTDOWN_WARN_EINT2_SHIFT 15 /* IM_SPK_SHUTDOWN_WARN_EINT2 */
4771#define ARIZONA_IM_SPK_SHUTDOWN_WARN_EINT2_WIDTH 1 /* IM_SPK_SHUTDOWN_WARN_EINT2 */
4772#define ARIZONA_IM_SPK_SHUTDOWN_EINT2 0x4000 /* IM_SPK_SHUTDOWN_EINT2 */
4773#define ARIZONA_IM_SPK_SHUTDOWN_EINT2_MASK 0x4000 /* IM_SPK_SHUTDOWN_EINT2 */
4774#define ARIZONA_IM_SPK_SHUTDOWN_EINT2_SHIFT 14 /* IM_SPK_SHUTDOWN_EINT2 */
4775#define ARIZONA_IM_SPK_SHUTDOWN_EINT2_WIDTH 1 /* IM_SPK_SHUTDOWN_EINT2 */
4776#define ARIZONA_IM_HPDET_EINT2 0x2000 /* IM_HPDET_EINT2 */
4777#define ARIZONA_IM_HPDET_EINT2_MASK 0x2000 /* IM_HPDET_EINT2 */
4778#define ARIZONA_IM_HPDET_EINT2_SHIFT 13 /* IM_HPDET_EINT2 */
4779#define ARIZONA_IM_HPDET_EINT2_WIDTH 1 /* IM_HPDET_EINT2 */
4780#define ARIZONA_IM_MICDET_EINT2 0x1000 /* IM_MICDET_EINT2 */
4781#define ARIZONA_IM_MICDET_EINT2_MASK 0x1000 /* IM_MICDET_EINT2 */
4782#define ARIZONA_IM_MICDET_EINT2_SHIFT 12 /* IM_MICDET_EINT2 */
4783#define ARIZONA_IM_MICDET_EINT2_WIDTH 1 /* IM_MICDET_EINT2 */
4784#define ARIZONA_IM_WSEQ_DONE_EINT2 0x0800 /* IM_WSEQ_DONE_EINT2 */
4785#define ARIZONA_IM_WSEQ_DONE_EINT2_MASK 0x0800 /* IM_WSEQ_DONE_EINT2 */
4786#define ARIZONA_IM_WSEQ_DONE_EINT2_SHIFT 11 /* IM_WSEQ_DONE_EINT2 */
4787#define ARIZONA_IM_WSEQ_DONE_EINT2_WIDTH 1 /* IM_WSEQ_DONE_EINT2 */
4788#define ARIZONA_IM_DRC2_SIG_DET_EINT2 0x0400 /* IM_DRC2_SIG_DET_EINT2 */
4789#define ARIZONA_IM_DRC2_SIG_DET_EINT2_MASK 0x0400 /* IM_DRC2_SIG_DET_EINT2 */
4790#define ARIZONA_IM_DRC2_SIG_DET_EINT2_SHIFT 10 /* IM_DRC2_SIG_DET_EINT2 */
4791#define ARIZONA_IM_DRC2_SIG_DET_EINT2_WIDTH 1 /* IM_DRC2_SIG_DET_EINT2 */
4792#define ARIZONA_IM_DRC1_SIG_DET_EINT2 0x0200 /* IM_DRC1_SIG_DET_EINT2 */
4793#define ARIZONA_IM_DRC1_SIG_DET_EINT2_MASK 0x0200 /* IM_DRC1_SIG_DET_EINT2 */
4794#define ARIZONA_IM_DRC1_SIG_DET_EINT2_SHIFT 9 /* IM_DRC1_SIG_DET_EINT2 */
4795#define ARIZONA_IM_DRC1_SIG_DET_EINT2_WIDTH 1 /* IM_DRC1_SIG_DET_EINT2 */
4796#define ARIZONA_IM_ASRC2_LOCK_EINT2 0x0100 /* IM_ASRC2_LOCK_EINT2 */
4797#define ARIZONA_IM_ASRC2_LOCK_EINT2_MASK 0x0100 /* IM_ASRC2_LOCK_EINT2 */
4798#define ARIZONA_IM_ASRC2_LOCK_EINT2_SHIFT 8 /* IM_ASRC2_LOCK_EINT2 */
4799#define ARIZONA_IM_ASRC2_LOCK_EINT2_WIDTH 1 /* IM_ASRC2_LOCK_EINT2 */
4800#define ARIZONA_IM_ASRC1_LOCK_EINT2 0x0080 /* IM_ASRC1_LOCK_EINT2 */
4801#define ARIZONA_IM_ASRC1_LOCK_EINT2_MASK 0x0080 /* IM_ASRC1_LOCK_EINT2 */
4802#define ARIZONA_IM_ASRC1_LOCK_EINT2_SHIFT 7 /* IM_ASRC1_LOCK_EINT2 */
4803#define ARIZONA_IM_ASRC1_LOCK_EINT2_WIDTH 1 /* IM_ASRC1_LOCK_EINT2 */
4804#define ARIZONA_IM_UNDERCLOCKED_EINT2 0x0040 /* IM_UNDERCLOCKED_EINT2 */
4805#define ARIZONA_IM_UNDERCLOCKED_EINT2_MASK 0x0040 /* IM_UNDERCLOCKED_EINT2 */
4806#define ARIZONA_IM_UNDERCLOCKED_EINT2_SHIFT 6 /* IM_UNDERCLOCKED_EINT2 */
4807#define ARIZONA_IM_UNDERCLOCKED_EINT2_WIDTH 1 /* IM_UNDERCLOCKED_EINT2 */
4808#define ARIZONA_IM_OVERCLOCKED_EINT2 0x0020 /* IM_OVERCLOCKED_EINT2 */
4809#define ARIZONA_IM_OVERCLOCKED_EINT2_MASK 0x0020 /* IM_OVERCLOCKED_EINT2 */
4810#define ARIZONA_IM_OVERCLOCKED_EINT2_SHIFT 5 /* IM_OVERCLOCKED_EINT2 */
4811#define ARIZONA_IM_OVERCLOCKED_EINT2_WIDTH 1 /* IM_OVERCLOCKED_EINT2 */
4812#define ARIZONA_IM_FLL2_LOCK_EINT2 0x0008 /* IM_FLL2_LOCK_EINT2 */
4813#define ARIZONA_IM_FLL2_LOCK_EINT2_MASK 0x0008 /* IM_FLL2_LOCK_EINT2 */
4814#define ARIZONA_IM_FLL2_LOCK_EINT2_SHIFT 3 /* IM_FLL2_LOCK_EINT2 */
4815#define ARIZONA_IM_FLL2_LOCK_EINT2_WIDTH 1 /* IM_FLL2_LOCK_EINT2 */
4816#define ARIZONA_IM_FLL1_LOCK_EINT2 0x0004 /* IM_FLL1_LOCK_EINT2 */
4817#define ARIZONA_IM_FLL1_LOCK_EINT2_MASK 0x0004 /* IM_FLL1_LOCK_EINT2 */
4818#define ARIZONA_IM_FLL1_LOCK_EINT2_SHIFT 2 /* IM_FLL1_LOCK_EINT2 */
4819#define ARIZONA_IM_FLL1_LOCK_EINT2_WIDTH 1 /* IM_FLL1_LOCK_EINT2 */
4820#define ARIZONA_IM_CLKGEN_ERR_EINT2 0x0002 /* IM_CLKGEN_ERR_EINT2 */
4821#define ARIZONA_IM_CLKGEN_ERR_EINT2_MASK 0x0002 /* IM_CLKGEN_ERR_EINT2 */
4822#define ARIZONA_IM_CLKGEN_ERR_EINT2_SHIFT 1 /* IM_CLKGEN_ERR_EINT2 */
4823#define ARIZONA_IM_CLKGEN_ERR_EINT2_WIDTH 1 /* IM_CLKGEN_ERR_EINT2 */
4824#define ARIZONA_IM_CLKGEN_ERR_ASYNC_EINT2 0x0001 /* IM_CLKGEN_ERR_ASYNC_EINT2 */
4825#define ARIZONA_IM_CLKGEN_ERR_ASYNC_EINT2_MASK 0x0001 /* IM_CLKGEN_ERR_ASYNC_EINT2 */
4826#define ARIZONA_IM_CLKGEN_ERR_ASYNC_EINT2_SHIFT 0 /* IM_CLKGEN_ERR_ASYNC_EINT2 */
4827#define ARIZONA_IM_CLKGEN_ERR_ASYNC_EINT2_WIDTH 1 /* IM_CLKGEN_ERR_ASYNC_EINT2 */
4828
4829/*
4830 * R3355 (0xD1B) - IRQ2 Status 4 Mask
4831 */
4832#define ARIZONA_IM_ASRC_CFG_ERR_EINT2 0x8000 /* IM_ASRC_CFG_ERR_EINT2 */
4833#define ARIZONA_IM_ASRC_CFG_ERR_EINT2_MASK 0x8000 /* IM_ASRC_CFG_ERR_EINT2 */
4834#define ARIZONA_IM_ASRC_CFG_ERR_EINT2_SHIFT 15 /* IM_ASRC_CFG_ERR_EINT2 */
4835#define ARIZONA_IM_ASRC_CFG_ERR_EINT2_WIDTH 1 /* IM_ASRC_CFG_ERR_EINT2 */
4836#define ARIZONA_IM_AIF3_ERR_EINT2 0x4000 /* IM_AIF3_ERR_EINT2 */
4837#define ARIZONA_IM_AIF3_ERR_EINT2_MASK 0x4000 /* IM_AIF3_ERR_EINT2 */
4838#define ARIZONA_IM_AIF3_ERR_EINT2_SHIFT 14 /* IM_AIF3_ERR_EINT2 */
4839#define ARIZONA_IM_AIF3_ERR_EINT2_WIDTH 1 /* IM_AIF3_ERR_EINT2 */
4840#define ARIZONA_IM_AIF2_ERR_EINT2 0x2000 /* IM_AIF2_ERR_EINT2 */
4841#define ARIZONA_IM_AIF2_ERR_EINT2_MASK 0x2000 /* IM_AIF2_ERR_EINT2 */
4842#define ARIZONA_IM_AIF2_ERR_EINT2_SHIFT 13 /* IM_AIF2_ERR_EINT2 */
4843#define ARIZONA_IM_AIF2_ERR_EINT2_WIDTH 1 /* IM_AIF2_ERR_EINT2 */
4844#define ARIZONA_IM_AIF1_ERR_EINT2 0x1000 /* IM_AIF1_ERR_EINT2 */
4845#define ARIZONA_IM_AIF1_ERR_EINT2_MASK 0x1000 /* IM_AIF1_ERR_EINT2 */
4846#define ARIZONA_IM_AIF1_ERR_EINT2_SHIFT 12 /* IM_AIF1_ERR_EINT2 */
4847#define ARIZONA_IM_AIF1_ERR_EINT2_WIDTH 1 /* IM_AIF1_ERR_EINT2 */
4848#define ARIZONA_IM_CTRLIF_ERR_EINT2 0x0800 /* IM_CTRLIF_ERR_EINT2 */
4849#define ARIZONA_IM_CTRLIF_ERR_EINT2_MASK 0x0800 /* IM_CTRLIF_ERR_EINT2 */
4850#define ARIZONA_IM_CTRLIF_ERR_EINT2_SHIFT 11 /* IM_CTRLIF_ERR_EINT2 */
4851#define ARIZONA_IM_CTRLIF_ERR_EINT2_WIDTH 1 /* IM_CTRLIF_ERR_EINT2 */
4852#define ARIZONA_IM_MIXER_DROPPED_SAMPLE_EINT2 0x0400 /* IM_MIXER_DROPPED_SAMPLE_EINT2 */
4853#define ARIZONA_IM_MIXER_DROPPED_SAMPLE_EINT2_MASK 0x0400 /* IM_MIXER_DROPPED_SAMPLE_EINT2 */
4854#define ARIZONA_IM_MIXER_DROPPED_SAMPLE_EINT2_SHIFT 10 /* IM_MIXER_DROPPED_SAMPLE_EINT2 */
4855#define ARIZONA_IM_MIXER_DROPPED_SAMPLE_EINT2_WIDTH 1 /* IM_MIXER_DROPPED_SAMPLE_EINT2 */
4856#define ARIZONA_IM_ASYNC_CLK_ENA_LOW_EINT2 0x0200 /* IM_ASYNC_CLK_ENA_LOW_EINT2 */
4857#define ARIZONA_IM_ASYNC_CLK_ENA_LOW_EINT2_MASK 0x0200 /* IM_ASYNC_CLK_ENA_LOW_EINT2 */
4858#define ARIZONA_IM_ASYNC_CLK_ENA_LOW_EINT2_SHIFT 9 /* IM_ASYNC_CLK_ENA_LOW_EINT2 */
4859#define ARIZONA_IM_ASYNC_CLK_ENA_LOW_EINT2_WIDTH 1 /* IM_ASYNC_CLK_ENA_LOW_EINT2 */
4860#define ARIZONA_IM_SYSCLK_ENA_LOW_EINT2 0x0100 /* IM_SYSCLK_ENA_LOW_EINT2 */
4861#define ARIZONA_IM_SYSCLK_ENA_LOW_EINT2_MASK 0x0100 /* IM_SYSCLK_ENA_LOW_EINT2 */
4862#define ARIZONA_IM_SYSCLK_ENA_LOW_EINT2_SHIFT 8 /* IM_SYSCLK_ENA_LOW_EINT2 */
4863#define ARIZONA_IM_SYSCLK_ENA_LOW_EINT2_WIDTH 1 /* IM_SYSCLK_ENA_LOW_EINT2 */
4864#define ARIZONA_IM_ISRC1_CFG_ERR_EINT2 0x0080 /* IM_ISRC1_CFG_ERR_EINT2 */
4865#define ARIZONA_IM_ISRC1_CFG_ERR_EINT2_MASK 0x0080 /* IM_ISRC1_CFG_ERR_EINT2 */
4866#define ARIZONA_IM_ISRC1_CFG_ERR_EINT2_SHIFT 7 /* IM_ISRC1_CFG_ERR_EINT2 */
4867#define ARIZONA_IM_ISRC1_CFG_ERR_EINT2_WIDTH 1 /* IM_ISRC1_CFG_ERR_EINT2 */
4868#define ARIZONA_IM_ISRC2_CFG_ERR_EINT2 0x0040 /* IM_ISRC2_CFG_ERR_EINT2 */
4869#define ARIZONA_IM_ISRC2_CFG_ERR_EINT2_MASK 0x0040 /* IM_ISRC2_CFG_ERR_EINT2 */
4870#define ARIZONA_IM_ISRC2_CFG_ERR_EINT2_SHIFT 6 /* IM_ISRC2_CFG_ERR_EINT2 */
4871#define ARIZONA_IM_ISRC2_CFG_ERR_EINT2_WIDTH 1 /* IM_ISRC2_CFG_ERR_EINT2 */
4872
4873/*
4874 * R3356 (0xD1C) - IRQ2 Status 5 Mask
4875 */
4876
4877#define ARIZONA_IM_BOOT_DONE_EINT2 0x0100 /* IM_BOOT_DONE_EINT2 */
4878#define ARIZONA_IM_BOOT_DONE_EINT2_MASK 0x0100 /* IM_BOOT_DONE_EINT2 */
4879#define ARIZONA_IM_BOOT_DONE_EINT2_SHIFT 8 /* IM_BOOT_DONE_EINT2 */
4880#define ARIZONA_IM_BOOT_DONE_EINT2_WIDTH 1 /* IM_BOOT_DONE_EINT2 */
4881#define ARIZONA_IM_DCS_DAC_DONE_EINT2 0x0080 /* IM_DCS_DAC_DONE_EINT2 */
4882#define ARIZONA_IM_DCS_DAC_DONE_EINT2_MASK 0x0080 /* IM_DCS_DAC_DONE_EINT2 */
4883#define ARIZONA_IM_DCS_DAC_DONE_EINT2_SHIFT 7 /* IM_DCS_DAC_DONE_EINT2 */
4884#define ARIZONA_IM_DCS_DAC_DONE_EINT2_WIDTH 1 /* IM_DCS_DAC_DONE_EINT2 */
4885#define ARIZONA_IM_DCS_HP_DONE_EINT2 0x0040 /* IM_DCS_HP_DONE_EINT2 */
4886#define ARIZONA_IM_DCS_HP_DONE_EINT2_MASK 0x0040 /* IM_DCS_HP_DONE_EINT2 */
4887#define ARIZONA_IM_DCS_HP_DONE_EINT2_SHIFT 6 /* IM_DCS_HP_DONE_EINT2 */
4888#define ARIZONA_IM_DCS_HP_DONE_EINT2_WIDTH 1 /* IM_DCS_HP_DONE_EINT2 */
4889#define ARIZONA_IM_FLL2_CLOCK_OK_EINT2 0x0002 /* IM_FLL2_CLOCK_OK_EINT2 */
4890#define ARIZONA_IM_FLL2_CLOCK_OK_EINT2_MASK 0x0002 /* IM_FLL2_CLOCK_OK_EINT2 */
4891#define ARIZONA_IM_FLL2_CLOCK_OK_EINT2_SHIFT 1 /* IM_FLL2_CLOCK_OK_EINT2 */
4892#define ARIZONA_IM_FLL2_CLOCK_OK_EINT2_WIDTH 1 /* IM_FLL2_CLOCK_OK_EINT2 */
4893#define ARIZONA_IM_FLL1_CLOCK_OK_EINT2 0x0001 /* IM_FLL1_CLOCK_OK_EINT2 */
4894#define ARIZONA_IM_FLL1_CLOCK_OK_EINT2_MASK 0x0001 /* IM_FLL1_CLOCK_OK_EINT2 */
4895#define ARIZONA_IM_FLL1_CLOCK_OK_EINT2_SHIFT 0 /* IM_FLL1_CLOCK_OK_EINT2 */
4896#define ARIZONA_IM_FLL1_CLOCK_OK_EINT2_WIDTH 1 /* IM_FLL1_CLOCK_OK_EINT2 */
4897
4898/*
4899 * R3359 (0xD1F) - IRQ2 Control
4900 */
4901#define ARIZONA_IM_IRQ2 0x0001 /* IM_IRQ2 */
4902#define ARIZONA_IM_IRQ2_MASK 0x0001 /* IM_IRQ2 */
4903#define ARIZONA_IM_IRQ2_SHIFT 0 /* IM_IRQ2 */
4904#define ARIZONA_IM_IRQ2_WIDTH 1 /* IM_IRQ2 */
4905
4906/*
4907 * R3360 (0xD20) - Interrupt Raw Status 2
4908 */
4909#define ARIZONA_DSP1_RAM_RDY_STS 0x0100 /* DSP1_RAM_RDY_STS */
4910#define ARIZONA_DSP1_RAM_RDY_STS_MASK 0x0100 /* DSP1_RAM_RDY_STS */
4911#define ARIZONA_DSP1_RAM_RDY_STS_SHIFT 8 /* DSP1_RAM_RDY_STS */
4912#define ARIZONA_DSP1_RAM_RDY_STS_WIDTH 1 /* DSP1_RAM_RDY_STS */
4913#define ARIZONA_DSP_IRQ2_STS 0x0002 /* DSP_IRQ2_STS */
4914#define ARIZONA_DSP_IRQ2_STS_MASK 0x0002 /* DSP_IRQ2_STS */
4915#define ARIZONA_DSP_IRQ2_STS_SHIFT 1 /* DSP_IRQ2_STS */
4916#define ARIZONA_DSP_IRQ2_STS_WIDTH 1 /* DSP_IRQ2_STS */
4917#define ARIZONA_DSP_IRQ1_STS 0x0001 /* DSP_IRQ1_STS */
4918#define ARIZONA_DSP_IRQ1_STS_MASK 0x0001 /* DSP_IRQ1_STS */
4919#define ARIZONA_DSP_IRQ1_STS_SHIFT 0 /* DSP_IRQ1_STS */
4920#define ARIZONA_DSP_IRQ1_STS_WIDTH 1 /* DSP_IRQ1_STS */
4921
4922/*
4923 * R3361 (0xD21) - Interrupt Raw Status 3
4924 */
4925#define ARIZONA_SPK_SHUTDOWN_WARN_STS 0x8000 /* SPK_SHUTDOWN_WARN_STS */
4926#define ARIZONA_SPK_SHUTDOWN_WARN_STS_MASK 0x8000 /* SPK_SHUTDOWN_WARN_STS */
4927#define ARIZONA_SPK_SHUTDOWN_WARN_STS_SHIFT 15 /* SPK_SHUTDOWN_WARN_STS */
4928#define ARIZONA_SPK_SHUTDOWN_WARN_STS_WIDTH 1 /* SPK_SHUTDOWN_WARN_STS */
4929#define ARIZONA_SPK_SHUTDOWN_STS 0x4000 /* SPK_SHUTDOWN_STS */
4930#define ARIZONA_SPK_SHUTDOWN_STS_MASK 0x4000 /* SPK_SHUTDOWN_STS */
4931#define ARIZONA_SPK_SHUTDOWN_STS_SHIFT 14 /* SPK_SHUTDOWN_STS */
4932#define ARIZONA_SPK_SHUTDOWN_STS_WIDTH 1 /* SPK_SHUTDOWN_STS */
4933#define ARIZONA_HPDET_STS 0x2000 /* HPDET_STS */
4934#define ARIZONA_HPDET_STS_MASK 0x2000 /* HPDET_STS */
4935#define ARIZONA_HPDET_STS_SHIFT 13 /* HPDET_STS */
4936#define ARIZONA_HPDET_STS_WIDTH 1 /* HPDET_STS */
4937#define ARIZONA_MICDET_STS 0x1000 /* MICDET_STS */
4938#define ARIZONA_MICDET_STS_MASK 0x1000 /* MICDET_STS */
4939#define ARIZONA_MICDET_STS_SHIFT 12 /* MICDET_STS */
4940#define ARIZONA_MICDET_STS_WIDTH 1 /* MICDET_STS */
4941#define ARIZONA_WSEQ_DONE_STS 0x0800 /* WSEQ_DONE_STS */
4942#define ARIZONA_WSEQ_DONE_STS_MASK 0x0800 /* WSEQ_DONE_STS */
4943#define ARIZONA_WSEQ_DONE_STS_SHIFT 11 /* WSEQ_DONE_STS */
4944#define ARIZONA_WSEQ_DONE_STS_WIDTH 1 /* WSEQ_DONE_STS */
4945#define ARIZONA_DRC2_SIG_DET_STS 0x0400 /* DRC2_SIG_DET_STS */
4946#define ARIZONA_DRC2_SIG_DET_STS_MASK 0x0400 /* DRC2_SIG_DET_STS */
4947#define ARIZONA_DRC2_SIG_DET_STS_SHIFT 10 /* DRC2_SIG_DET_STS */
4948#define ARIZONA_DRC2_SIG_DET_STS_WIDTH 1 /* DRC2_SIG_DET_STS */
4949#define ARIZONA_DRC1_SIG_DET_STS 0x0200 /* DRC1_SIG_DET_STS */
4950#define ARIZONA_DRC1_SIG_DET_STS_MASK 0x0200 /* DRC1_SIG_DET_STS */
4951#define ARIZONA_DRC1_SIG_DET_STS_SHIFT 9 /* DRC1_SIG_DET_STS */
4952#define ARIZONA_DRC1_SIG_DET_STS_WIDTH 1 /* DRC1_SIG_DET_STS */
4953#define ARIZONA_ASRC2_LOCK_STS 0x0100 /* ASRC2_LOCK_STS */
4954#define ARIZONA_ASRC2_LOCK_STS_MASK 0x0100 /* ASRC2_LOCK_STS */
4955#define ARIZONA_ASRC2_LOCK_STS_SHIFT 8 /* ASRC2_LOCK_STS */
4956#define ARIZONA_ASRC2_LOCK_STS_WIDTH 1 /* ASRC2_LOCK_STS */
4957#define ARIZONA_ASRC1_LOCK_STS 0x0080 /* ASRC1_LOCK_STS */
4958#define ARIZONA_ASRC1_LOCK_STS_MASK 0x0080 /* ASRC1_LOCK_STS */
4959#define ARIZONA_ASRC1_LOCK_STS_SHIFT 7 /* ASRC1_LOCK_STS */
4960#define ARIZONA_ASRC1_LOCK_STS_WIDTH 1 /* ASRC1_LOCK_STS */
4961#define ARIZONA_UNDERCLOCKED_STS 0x0040 /* UNDERCLOCKED_STS */
4962#define ARIZONA_UNDERCLOCKED_STS_MASK 0x0040 /* UNDERCLOCKED_STS */
4963#define ARIZONA_UNDERCLOCKED_STS_SHIFT 6 /* UNDERCLOCKED_STS */
4964#define ARIZONA_UNDERCLOCKED_STS_WIDTH 1 /* UNDERCLOCKED_STS */
4965#define ARIZONA_OVERCLOCKED_STS 0x0020 /* OVERCLOCKED_STS */
4966#define ARIZONA_OVERCLOCKED_STS_MASK 0x0020 /* OVERCLOCKED_STS */
4967#define ARIZONA_OVERCLOCKED_STS_SHIFT 5 /* OVERCLOCKED_STS */
4968#define ARIZONA_OVERCLOCKED_STS_WIDTH 1 /* OVERCLOCKED_STS */
4969#define ARIZONA_FLL2_LOCK_STS 0x0008 /* FLL2_LOCK_STS */
4970#define ARIZONA_FLL2_LOCK_STS_MASK 0x0008 /* FLL2_LOCK_STS */
4971#define ARIZONA_FLL2_LOCK_STS_SHIFT 3 /* FLL2_LOCK_STS */
4972#define ARIZONA_FLL2_LOCK_STS_WIDTH 1 /* FLL2_LOCK_STS */
4973#define ARIZONA_FLL1_LOCK_STS 0x0004 /* FLL1_LOCK_STS */
4974#define ARIZONA_FLL1_LOCK_STS_MASK 0x0004 /* FLL1_LOCK_STS */
4975#define ARIZONA_FLL1_LOCK_STS_SHIFT 2 /* FLL1_LOCK_STS */
4976#define ARIZONA_FLL1_LOCK_STS_WIDTH 1 /* FLL1_LOCK_STS */
4977#define ARIZONA_CLKGEN_ERR_STS 0x0002 /* CLKGEN_ERR_STS */
4978#define ARIZONA_CLKGEN_ERR_STS_MASK 0x0002 /* CLKGEN_ERR_STS */
4979#define ARIZONA_CLKGEN_ERR_STS_SHIFT 1 /* CLKGEN_ERR_STS */
4980#define ARIZONA_CLKGEN_ERR_STS_WIDTH 1 /* CLKGEN_ERR_STS */
4981#define ARIZONA_CLKGEN_ERR_ASYNC_STS 0x0001 /* CLKGEN_ERR_ASYNC_STS */
4982#define ARIZONA_CLKGEN_ERR_ASYNC_STS_MASK 0x0001 /* CLKGEN_ERR_ASYNC_STS */
4983#define ARIZONA_CLKGEN_ERR_ASYNC_STS_SHIFT 0 /* CLKGEN_ERR_ASYNC_STS */
4984#define ARIZONA_CLKGEN_ERR_ASYNC_STS_WIDTH 1 /* CLKGEN_ERR_ASYNC_STS */
4985
4986/*
4987 * R3362 (0xD22) - Interrupt Raw Status 4
4988 */
4989#define ARIZONA_ASRC_CFG_ERR_STS 0x8000 /* ASRC_CFG_ERR_STS */
4990#define ARIZONA_ASRC_CFG_ERR_STS_MASK 0x8000 /* ASRC_CFG_ERR_STS */
4991#define ARIZONA_ASRC_CFG_ERR_STS_SHIFT 15 /* ASRC_CFG_ERR_STS */
4992#define ARIZONA_ASRC_CFG_ERR_STS_WIDTH 1 /* ASRC_CFG_ERR_STS */
4993#define ARIZONA_AIF3_ERR_STS 0x4000 /* AIF3_ERR_STS */
4994#define ARIZONA_AIF3_ERR_STS_MASK 0x4000 /* AIF3_ERR_STS */
4995#define ARIZONA_AIF3_ERR_STS_SHIFT 14 /* AIF3_ERR_STS */
4996#define ARIZONA_AIF3_ERR_STS_WIDTH 1 /* AIF3_ERR_STS */
4997#define ARIZONA_AIF2_ERR_STS 0x2000 /* AIF2_ERR_STS */
4998#define ARIZONA_AIF2_ERR_STS_MASK 0x2000 /* AIF2_ERR_STS */
4999#define ARIZONA_AIF2_ERR_STS_SHIFT 13 /* AIF2_ERR_STS */
5000#define ARIZONA_AIF2_ERR_STS_WIDTH 1 /* AIF2_ERR_STS */
5001#define ARIZONA_AIF1_ERR_STS 0x1000 /* AIF1_ERR_STS */
5002#define ARIZONA_AIF1_ERR_STS_MASK 0x1000 /* AIF1_ERR_STS */
5003#define ARIZONA_AIF1_ERR_STS_SHIFT 12 /* AIF1_ERR_STS */
5004#define ARIZONA_AIF1_ERR_STS_WIDTH 1 /* AIF1_ERR_STS */
5005#define ARIZONA_CTRLIF_ERR_STS 0x0800 /* CTRLIF_ERR_STS */
5006#define ARIZONA_CTRLIF_ERR_STS_MASK 0x0800 /* CTRLIF_ERR_STS */
5007#define ARIZONA_CTRLIF_ERR_STS_SHIFT 11 /* CTRLIF_ERR_STS */
5008#define ARIZONA_CTRLIF_ERR_STS_WIDTH 1 /* CTRLIF_ERR_STS */
5009#define ARIZONA_MIXER_DROPPED_SAMPLE_STS 0x0400 /* MIXER_DROPPED_SAMPLE_STS */
5010#define ARIZONA_MIXER_DROPPED_SAMPLE_STS_MASK 0x0400 /* MIXER_DROPPED_SAMPLE_STS */
5011#define ARIZONA_MIXER_DROPPED_SAMPLE_STS_SHIFT 10 /* MIXER_DROPPED_SAMPLE_STS */
5012#define ARIZONA_MIXER_DROPPED_SAMPLE_STS_WIDTH 1 /* MIXER_DROPPED_SAMPLE_STS */
5013#define ARIZONA_ASYNC_CLK_ENA_LOW_STS 0x0200 /* ASYNC_CLK_ENA_LOW_STS */
5014#define ARIZONA_ASYNC_CLK_ENA_LOW_STS_MASK 0x0200 /* ASYNC_CLK_ENA_LOW_STS */
5015#define ARIZONA_ASYNC_CLK_ENA_LOW_STS_SHIFT 9 /* ASYNC_CLK_ENA_LOW_STS */
5016#define ARIZONA_ASYNC_CLK_ENA_LOW_STS_WIDTH 1 /* ASYNC_CLK_ENA_LOW_STS */
5017#define ARIZONA_SYSCLK_ENA_LOW_STS 0x0100 /* SYSCLK_ENA_LOW_STS */
5018#define ARIZONA_SYSCLK_ENA_LOW_STS_MASK 0x0100 /* SYSCLK_ENA_LOW_STS */
5019#define ARIZONA_SYSCLK_ENA_LOW_STS_SHIFT 8 /* SYSCLK_ENA_LOW_STS */
5020#define ARIZONA_SYSCLK_ENA_LOW_STS_WIDTH 1 /* SYSCLK_ENA_LOW_STS */
5021#define ARIZONA_ISRC1_CFG_ERR_STS 0x0080 /* ISRC1_CFG_ERR_STS */
5022#define ARIZONA_ISRC1_CFG_ERR_STS_MASK 0x0080 /* ISRC1_CFG_ERR_STS */
5023#define ARIZONA_ISRC1_CFG_ERR_STS_SHIFT 7 /* ISRC1_CFG_ERR_STS */
5024#define ARIZONA_ISRC1_CFG_ERR_STS_WIDTH 1 /* ISRC1_CFG_ERR_STS */
5025#define ARIZONA_ISRC2_CFG_ERR_STS 0x0040 /* ISRC2_CFG_ERR_STS */
5026#define ARIZONA_ISRC2_CFG_ERR_STS_MASK 0x0040 /* ISRC2_CFG_ERR_STS */
5027#define ARIZONA_ISRC2_CFG_ERR_STS_SHIFT 6 /* ISRC2_CFG_ERR_STS */
5028#define ARIZONA_ISRC2_CFG_ERR_STS_WIDTH 1 /* ISRC2_CFG_ERR_STS */
5029
5030/*
5031 * R3363 (0xD23) - Interrupt Raw Status 5
5032 */
5033#define ARIZONA_BOOT_DONE_STS 0x0100 /* BOOT_DONE_STS */
5034#define ARIZONA_BOOT_DONE_STS_MASK 0x0100 /* BOOT_DONE_STS */
5035#define ARIZONA_BOOT_DONE_STS_SHIFT 8 /* BOOT_DONE_STS */
5036#define ARIZONA_BOOT_DONE_STS_WIDTH 1 /* BOOT_DONE_STS */
5037#define ARIZONA_DCS_DAC_DONE_STS 0x0080 /* DCS_DAC_DONE_STS */
5038#define ARIZONA_DCS_DAC_DONE_STS_MASK 0x0080 /* DCS_DAC_DONE_STS */
5039#define ARIZONA_DCS_DAC_DONE_STS_SHIFT 7 /* DCS_DAC_DONE_STS */
5040#define ARIZONA_DCS_DAC_DONE_STS_WIDTH 1 /* DCS_DAC_DONE_STS */
5041#define ARIZONA_DCS_HP_DONE_STS 0x0040 /* DCS_HP_DONE_STS */
5042#define ARIZONA_DCS_HP_DONE_STS_MASK 0x0040 /* DCS_HP_DONE_STS */
5043#define ARIZONA_DCS_HP_DONE_STS_SHIFT 6 /* DCS_HP_DONE_STS */
5044#define ARIZONA_DCS_HP_DONE_STS_WIDTH 1 /* DCS_HP_DONE_STS */
5045#define ARIZONA_FLL2_CLOCK_OK_STS 0x0002 /* FLL2_CLOCK_OK_STS */
5046#define ARIZONA_FLL2_CLOCK_OK_STS_MASK 0x0002 /* FLL2_CLOCK_OK_STS */
5047#define ARIZONA_FLL2_CLOCK_OK_STS_SHIFT 1 /* FLL2_CLOCK_OK_STS */
5048#define ARIZONA_FLL2_CLOCK_OK_STS_WIDTH 1 /* FLL2_CLOCK_OK_STS */
5049#define ARIZONA_FLL1_CLOCK_OK_STS 0x0001 /* FLL1_CLOCK_OK_STS */
5050#define ARIZONA_FLL1_CLOCK_OK_STS_MASK 0x0001 /* FLL1_CLOCK_OK_STS */
5051#define ARIZONA_FLL1_CLOCK_OK_STS_SHIFT 0 /* FLL1_CLOCK_OK_STS */
5052#define ARIZONA_FLL1_CLOCK_OK_STS_WIDTH 1 /* FLL1_CLOCK_OK_STS */
5053
5054/*
5055 * R3364 (0xD24) - Interrupt Raw Status 6
5056 */
5057#define ARIZONA_PWM_OVERCLOCKED_STS 0x2000 /* PWM_OVERCLOCKED_STS */
5058#define ARIZONA_PWM_OVERCLOCKED_STS_MASK 0x2000 /* PWM_OVERCLOCKED_STS */
5059#define ARIZONA_PWM_OVERCLOCKED_STS_SHIFT 13 /* PWM_OVERCLOCKED_STS */
5060#define ARIZONA_PWM_OVERCLOCKED_STS_WIDTH 1 /* PWM_OVERCLOCKED_STS */
5061#define ARIZONA_FX_CORE_OVERCLOCKED_STS 0x1000 /* FX_CORE_OVERCLOCKED_STS */
5062#define ARIZONA_FX_CORE_OVERCLOCKED_STS_MASK 0x1000 /* FX_CORE_OVERCLOCKED_STS */
5063#define ARIZONA_FX_CORE_OVERCLOCKED_STS_SHIFT 12 /* FX_CORE_OVERCLOCKED_STS */
5064#define ARIZONA_FX_CORE_OVERCLOCKED_STS_WIDTH 1 /* FX_CORE_OVERCLOCKED_STS */
5065#define ARIZONA_DAC_SYS_OVERCLOCKED_STS 0x0400 /* DAC_SYS_OVERCLOCKED_STS */
5066#define ARIZONA_DAC_SYS_OVERCLOCKED_STS_MASK 0x0400 /* DAC_SYS_OVERCLOCKED_STS */
5067#define ARIZONA_DAC_SYS_OVERCLOCKED_STS_SHIFT 10 /* DAC_SYS_OVERCLOCKED_STS */
5068#define ARIZONA_DAC_SYS_OVERCLOCKED_STS_WIDTH 1 /* DAC_SYS_OVERCLOCKED_STS */
5069#define ARIZONA_DAC_WARP_OVERCLOCKED_STS 0x0200 /* DAC_WARP_OVERCLOCKED_STS */
5070#define ARIZONA_DAC_WARP_OVERCLOCKED_STS_MASK 0x0200 /* DAC_WARP_OVERCLOCKED_STS */
5071#define ARIZONA_DAC_WARP_OVERCLOCKED_STS_SHIFT 9 /* DAC_WARP_OVERCLOCKED_STS */
5072#define ARIZONA_DAC_WARP_OVERCLOCKED_STS_WIDTH 1 /* DAC_WARP_OVERCLOCKED_STS */
5073#define ARIZONA_ADC_OVERCLOCKED_STS 0x0100 /* ADC_OVERCLOCKED_STS */
5074#define ARIZONA_ADC_OVERCLOCKED_STS_MASK 0x0100 /* ADC_OVERCLOCKED_STS */
5075#define ARIZONA_ADC_OVERCLOCKED_STS_SHIFT 8 /* ADC_OVERCLOCKED_STS */
5076#define ARIZONA_ADC_OVERCLOCKED_STS_WIDTH 1 /* ADC_OVERCLOCKED_STS */
5077#define ARIZONA_MIXER_OVERCLOCKED_STS 0x0080 /* MIXER_OVERCLOCKED_STS */
5078#define ARIZONA_MIXER_OVERCLOCKED_STS_MASK 0x0080 /* MIXER_OVERCLOCKED_STS */
5079#define ARIZONA_MIXER_OVERCLOCKED_STS_SHIFT 7 /* MIXER_OVERCLOCKED_STS */
5080#define ARIZONA_MIXER_OVERCLOCKED_STS_WIDTH 1 /* MIXER_OVERCLOCKED_STS */
5081#define ARIZONA_AIF3_ASYNC_OVERCLOCKED_STS 0x0040 /* AIF3_ASYNC_OVERCLOCKED_STS */
5082#define ARIZONA_AIF3_ASYNC_OVERCLOCKED_STS_MASK 0x0040 /* AIF3_ASYNC_OVERCLOCKED_STS */
5083#define ARIZONA_AIF3_ASYNC_OVERCLOCKED_STS_SHIFT 6 /* AIF3_ASYNC_OVERCLOCKED_STS */
5084#define ARIZONA_AIF3_ASYNC_OVERCLOCKED_STS_WIDTH 1 /* AIF3_ASYNC_OVERCLOCKED_STS */
5085#define ARIZONA_AIF2_ASYNC_OVERCLOCKED_STS 0x0020 /* AIF2_ASYNC_OVERCLOCKED_STS */
5086#define ARIZONA_AIF2_ASYNC_OVERCLOCKED_STS_MASK 0x0020 /* AIF2_ASYNC_OVERCLOCKED_STS */
5087#define ARIZONA_AIF2_ASYNC_OVERCLOCKED_STS_SHIFT 5 /* AIF2_ASYNC_OVERCLOCKED_STS */
5088#define ARIZONA_AIF2_ASYNC_OVERCLOCKED_STS_WIDTH 1 /* AIF2_ASYNC_OVERCLOCKED_STS */
5089#define ARIZONA_AIF1_ASYNC_OVERCLOCKED_STS 0x0010 /* AIF1_ASYNC_OVERCLOCKED_STS */
5090#define ARIZONA_AIF1_ASYNC_OVERCLOCKED_STS_MASK 0x0010 /* AIF1_ASYNC_OVERCLOCKED_STS */
5091#define ARIZONA_AIF1_ASYNC_OVERCLOCKED_STS_SHIFT 4 /* AIF1_ASYNC_OVERCLOCKED_STS */
5092#define ARIZONA_AIF1_ASYNC_OVERCLOCKED_STS_WIDTH 1 /* AIF1_ASYNC_OVERCLOCKED_STS */
5093#define ARIZONA_AIF3_SYNC_OVERCLOCKED_STS 0x0008 /* AIF3_SYNC_OVERCLOCKED_STS */
5094#define ARIZONA_AIF3_SYNC_OVERCLOCKED_STS_MASK 0x0008 /* AIF3_SYNC_OVERCLOCKED_STS */
5095#define ARIZONA_AIF3_SYNC_OVERCLOCKED_STS_SHIFT 3 /* AIF3_SYNC_OVERCLOCKED_STS */
5096#define ARIZONA_AIF3_SYNC_OVERCLOCKED_STS_WIDTH 1 /* AIF3_SYNC_OVERCLOCKED_STS */
5097#define ARIZONA_AIF2_SYNC_OVERCLOCKED_STS 0x0004 /* AIF2_SYNC_OVERCLOCKED_STS */
5098#define ARIZONA_AIF2_SYNC_OVERCLOCKED_STS_MASK 0x0004 /* AIF2_SYNC_OVERCLOCKED_STS */
5099#define ARIZONA_AIF2_SYNC_OVERCLOCKED_STS_SHIFT 2 /* AIF2_SYNC_OVERCLOCKED_STS */
5100#define ARIZONA_AIF2_SYNC_OVERCLOCKED_STS_WIDTH 1 /* AIF2_SYNC_OVERCLOCKED_STS */
5101#define ARIZONA_AIF1_SYNC_OVERCLOCKED_STS 0x0002 /* AIF1_SYNC_OVERCLOCKED_STS */
5102#define ARIZONA_AIF1_SYNC_OVERCLOCKED_STS_MASK 0x0002 /* AIF1_SYNC_OVERCLOCKED_STS */
5103#define ARIZONA_AIF1_SYNC_OVERCLOCKED_STS_SHIFT 1 /* AIF1_SYNC_OVERCLOCKED_STS */
5104#define ARIZONA_AIF1_SYNC_OVERCLOCKED_STS_WIDTH 1 /* AIF1_SYNC_OVERCLOCKED_STS */
5105#define ARIZONA_PAD_CTRL_OVERCLOCKED_STS 0x0001 /* PAD_CTRL_OVERCLOCKED_STS */
5106#define ARIZONA_PAD_CTRL_OVERCLOCKED_STS_MASK 0x0001 /* PAD_CTRL_OVERCLOCKED_STS */
5107#define ARIZONA_PAD_CTRL_OVERCLOCKED_STS_SHIFT 0 /* PAD_CTRL_OVERCLOCKED_STS */
5108#define ARIZONA_PAD_CTRL_OVERCLOCKED_STS_WIDTH 1 /* PAD_CTRL_OVERCLOCKED_STS */
5109
5110/*
5111 * R3365 (0xD25) - Interrupt Raw Status 7
5112 */
5113#define ARIZONA_SLIMBUS_SUBSYS_OVERCLOCKED_STS 0x8000 /* SLIMBUS_SUBSYS_OVERCLOCKED_STS */
5114#define ARIZONA_SLIMBUS_SUBSYS_OVERCLOCKED_STS_MASK 0x8000 /* SLIMBUS_SUBSYS_OVERCLOCKED_STS */
5115#define ARIZONA_SLIMBUS_SUBSYS_OVERCLOCKED_STS_SHIFT 15 /* SLIMBUS_SUBSYS_OVERCLOCKED_STS */
5116#define ARIZONA_SLIMBUS_SUBSYS_OVERCLOCKED_STS_WIDTH 1 /* SLIMBUS_SUBSYS_OVERCLOCKED_STS */
5117#define ARIZONA_SLIMBUS_ASYNC_OVERCLOCKED_STS 0x4000 /* SLIMBUS_ASYNC_OVERCLOCKED_STS */
5118#define ARIZONA_SLIMBUS_ASYNC_OVERCLOCKED_STS_MASK 0x4000 /* SLIMBUS_ASYNC_OVERCLOCKED_STS */
5119#define ARIZONA_SLIMBUS_ASYNC_OVERCLOCKED_STS_SHIFT 14 /* SLIMBUS_ASYNC_OVERCLOCKED_STS */
5120#define ARIZONA_SLIMBUS_ASYNC_OVERCLOCKED_STS_WIDTH 1 /* SLIMBUS_ASYNC_OVERCLOCKED_STS */
5121#define ARIZONA_SLIMBUS_SYNC_OVERCLOCKED_STS 0x2000 /* SLIMBUS_SYNC_OVERCLOCKED_STS */
5122#define ARIZONA_SLIMBUS_SYNC_OVERCLOCKED_STS_MASK 0x2000 /* SLIMBUS_SYNC_OVERCLOCKED_STS */
5123#define ARIZONA_SLIMBUS_SYNC_OVERCLOCKED_STS_SHIFT 13 /* SLIMBUS_SYNC_OVERCLOCKED_STS */
5124#define ARIZONA_SLIMBUS_SYNC_OVERCLOCKED_STS_WIDTH 1 /* SLIMBUS_SYNC_OVERCLOCKED_STS */
5125#define ARIZONA_ASRC_ASYNC_SYS_OVERCLOCKED_STS 0x1000 /* ASRC_ASYNC_SYS_OVERCLOCKED_STS */
5126#define ARIZONA_ASRC_ASYNC_SYS_OVERCLOCKED_STS_MASK 0x1000 /* ASRC_ASYNC_SYS_OVERCLOCKED_STS */
5127#define ARIZONA_ASRC_ASYNC_SYS_OVERCLOCKED_STS_SHIFT 12 /* ASRC_ASYNC_SYS_OVERCLOCKED_STS */
5128#define ARIZONA_ASRC_ASYNC_SYS_OVERCLOCKED_STS_WIDTH 1 /* ASRC_ASYNC_SYS_OVERCLOCKED_STS */
5129#define ARIZONA_ASRC_ASYNC_WARP_OVERCLOCKED_STS 0x0800 /* ASRC_ASYNC_WARP_OVERCLOCKED_STS */
5130#define ARIZONA_ASRC_ASYNC_WARP_OVERCLOCKED_STS_MASK 0x0800 /* ASRC_ASYNC_WARP_OVERCLOCKED_STS */
5131#define ARIZONA_ASRC_ASYNC_WARP_OVERCLOCKED_STS_SHIFT 11 /* ASRC_ASYNC_WARP_OVERCLOCKED_STS */
5132#define ARIZONA_ASRC_ASYNC_WARP_OVERCLOCKED_STS_WIDTH 1 /* ASRC_ASYNC_WARP_OVERCLOCKED_STS */
5133#define ARIZONA_ASRC_SYNC_SYS_OVERCLOCKED_STS 0x0400 /* ASRC_SYNC_SYS_OVERCLOCKED_STS */
5134#define ARIZONA_ASRC_SYNC_SYS_OVERCLOCKED_STS_MASK 0x0400 /* ASRC_SYNC_SYS_OVERCLOCKED_STS */
5135#define ARIZONA_ASRC_SYNC_SYS_OVERCLOCKED_STS_SHIFT 10 /* ASRC_SYNC_SYS_OVERCLOCKED_STS */
5136#define ARIZONA_ASRC_SYNC_SYS_OVERCLOCKED_STS_WIDTH 1 /* ASRC_SYNC_SYS_OVERCLOCKED_STS */
5137#define ARIZONA_ASRC_SYNC_WARP_OVERCLOCKED_STS 0x0200 /* ASRC_SYNC_WARP_OVERCLOCKED_STS */
5138#define ARIZONA_ASRC_SYNC_WARP_OVERCLOCKED_STS_MASK 0x0200 /* ASRC_SYNC_WARP_OVERCLOCKED_STS */
5139#define ARIZONA_ASRC_SYNC_WARP_OVERCLOCKED_STS_SHIFT 9 /* ASRC_SYNC_WARP_OVERCLOCKED_STS */
5140#define ARIZONA_ASRC_SYNC_WARP_OVERCLOCKED_STS_WIDTH 1 /* ASRC_SYNC_WARP_OVERCLOCKED_STS */
5141#define ARIZONA_ADSP2_1_OVERCLOCKED_STS 0x0008 /* ADSP2_1_OVERCLOCKED_STS */
5142#define ARIZONA_ADSP2_1_OVERCLOCKED_STS_MASK 0x0008 /* ADSP2_1_OVERCLOCKED_STS */
5143#define ARIZONA_ADSP2_1_OVERCLOCKED_STS_SHIFT 3 /* ADSP2_1_OVERCLOCKED_STS */
5144#define ARIZONA_ADSP2_1_OVERCLOCKED_STS_WIDTH 1 /* ADSP2_1_OVERCLOCKED_STS */
5145#define ARIZONA_ISRC2_OVERCLOCKED_STS 0x0002 /* ISRC2_OVERCLOCKED_STS */
5146#define ARIZONA_ISRC2_OVERCLOCKED_STS_MASK 0x0002 /* ISRC2_OVERCLOCKED_STS */
5147#define ARIZONA_ISRC2_OVERCLOCKED_STS_SHIFT 1 /* ISRC2_OVERCLOCKED_STS */
5148#define ARIZONA_ISRC2_OVERCLOCKED_STS_WIDTH 1 /* ISRC2_OVERCLOCKED_STS */
5149#define ARIZONA_ISRC1_OVERCLOCKED_STS 0x0001 /* ISRC1_OVERCLOCKED_STS */
5150#define ARIZONA_ISRC1_OVERCLOCKED_STS_MASK 0x0001 /* ISRC1_OVERCLOCKED_STS */
5151#define ARIZONA_ISRC1_OVERCLOCKED_STS_SHIFT 0 /* ISRC1_OVERCLOCKED_STS */
5152#define ARIZONA_ISRC1_OVERCLOCKED_STS_WIDTH 1 /* ISRC1_OVERCLOCKED_STS */
5153
5154/*
5155 * R3366 (0xD26) - Interrupt Raw Status 8
5156 */
5157#define ARIZONA_AIF3_UNDERCLOCKED_STS 0x0400 /* AIF3_UNDERCLOCKED_STS */
5158#define ARIZONA_AIF3_UNDERCLOCKED_STS_MASK 0x0400 /* AIF3_UNDERCLOCKED_STS */
5159#define ARIZONA_AIF3_UNDERCLOCKED_STS_SHIFT 10 /* AIF3_UNDERCLOCKED_STS */
5160#define ARIZONA_AIF3_UNDERCLOCKED_STS_WIDTH 1 /* AIF3_UNDERCLOCKED_STS */
5161#define ARIZONA_AIF2_UNDERCLOCKED_STS 0x0200 /* AIF2_UNDERCLOCKED_STS */
5162#define ARIZONA_AIF2_UNDERCLOCKED_STS_MASK 0x0200 /* AIF2_UNDERCLOCKED_STS */
5163#define ARIZONA_AIF2_UNDERCLOCKED_STS_SHIFT 9 /* AIF2_UNDERCLOCKED_STS */
5164#define ARIZONA_AIF2_UNDERCLOCKED_STS_WIDTH 1 /* AIF2_UNDERCLOCKED_STS */
5165#define ARIZONA_AIF1_UNDERCLOCKED_STS 0x0100 /* AIF1_UNDERCLOCKED_STS */
5166#define ARIZONA_AIF1_UNDERCLOCKED_STS_MASK 0x0100 /* AIF1_UNDERCLOCKED_STS */
5167#define ARIZONA_AIF1_UNDERCLOCKED_STS_SHIFT 8 /* AIF1_UNDERCLOCKED_STS */
5168#define ARIZONA_AIF1_UNDERCLOCKED_STS_WIDTH 1 /* AIF1_UNDERCLOCKED_STS */
5169#define ARIZONA_ISRC2_UNDERCLOCKED_STS 0x0040 /* ISRC2_UNDERCLOCKED_STS */
5170#define ARIZONA_ISRC2_UNDERCLOCKED_STS_MASK 0x0040 /* ISRC2_UNDERCLOCKED_STS */
5171#define ARIZONA_ISRC2_UNDERCLOCKED_STS_SHIFT 6 /* ISRC2_UNDERCLOCKED_STS */
5172#define ARIZONA_ISRC2_UNDERCLOCKED_STS_WIDTH 1 /* ISRC2_UNDERCLOCKED_STS */
5173#define ARIZONA_ISRC1_UNDERCLOCKED_STS 0x0020 /* ISRC1_UNDERCLOCKED_STS */
5174#define ARIZONA_ISRC1_UNDERCLOCKED_STS_MASK 0x0020 /* ISRC1_UNDERCLOCKED_STS */
5175#define ARIZONA_ISRC1_UNDERCLOCKED_STS_SHIFT 5 /* ISRC1_UNDERCLOCKED_STS */
5176#define ARIZONA_ISRC1_UNDERCLOCKED_STS_WIDTH 1 /* ISRC1_UNDERCLOCKED_STS */
5177#define ARIZONA_FX_UNDERCLOCKED_STS 0x0010 /* FX_UNDERCLOCKED_STS */
5178#define ARIZONA_FX_UNDERCLOCKED_STS_MASK 0x0010 /* FX_UNDERCLOCKED_STS */
5179#define ARIZONA_FX_UNDERCLOCKED_STS_SHIFT 4 /* FX_UNDERCLOCKED_STS */
5180#define ARIZONA_FX_UNDERCLOCKED_STS_WIDTH 1 /* FX_UNDERCLOCKED_STS */
5181#define ARIZONA_ASRC_UNDERCLOCKED_STS 0x0008 /* ASRC_UNDERCLOCKED_STS */
5182#define ARIZONA_ASRC_UNDERCLOCKED_STS_MASK 0x0008 /* ASRC_UNDERCLOCKED_STS */
5183#define ARIZONA_ASRC_UNDERCLOCKED_STS_SHIFT 3 /* ASRC_UNDERCLOCKED_STS */
5184#define ARIZONA_ASRC_UNDERCLOCKED_STS_WIDTH 1 /* ASRC_UNDERCLOCKED_STS */
5185#define ARIZONA_DAC_UNDERCLOCKED_STS 0x0004 /* DAC_UNDERCLOCKED_STS */
5186#define ARIZONA_DAC_UNDERCLOCKED_STS_MASK 0x0004 /* DAC_UNDERCLOCKED_STS */
5187#define ARIZONA_DAC_UNDERCLOCKED_STS_SHIFT 2 /* DAC_UNDERCLOCKED_STS */
5188#define ARIZONA_DAC_UNDERCLOCKED_STS_WIDTH 1 /* DAC_UNDERCLOCKED_STS */
5189#define ARIZONA_ADC_UNDERCLOCKED_STS 0x0002 /* ADC_UNDERCLOCKED_STS */
5190#define ARIZONA_ADC_UNDERCLOCKED_STS_MASK 0x0002 /* ADC_UNDERCLOCKED_STS */
5191#define ARIZONA_ADC_UNDERCLOCKED_STS_SHIFT 1 /* ADC_UNDERCLOCKED_STS */
5192#define ARIZONA_ADC_UNDERCLOCKED_STS_WIDTH 1 /* ADC_UNDERCLOCKED_STS */
5193#define ARIZONA_MIXER_UNDERCLOCKED_STS 0x0001 /* MIXER_UNDERCLOCKED_STS */
5194#define ARIZONA_MIXER_UNDERCLOCKED_STS_MASK 0x0001 /* MIXER_UNDERCLOCKED_STS */
5195#define ARIZONA_MIXER_UNDERCLOCKED_STS_SHIFT 0 /* MIXER_UNDERCLOCKED_STS */
5196#define ARIZONA_MIXER_UNDERCLOCKED_STS_WIDTH 1 /* MIXER_UNDERCLOCKED_STS */
5197
5198/*
5199 * R3392 (0xD40) - IRQ Pin Status
5200 */
5201#define ARIZONA_IRQ2_STS 0x0002 /* IRQ2_STS */
5202#define ARIZONA_IRQ2_STS_MASK 0x0002 /* IRQ2_STS */
5203#define ARIZONA_IRQ2_STS_SHIFT 1 /* IRQ2_STS */
5204#define ARIZONA_IRQ2_STS_WIDTH 1 /* IRQ2_STS */
5205#define ARIZONA_IRQ1_STS 0x0001 /* IRQ1_STS */
5206#define ARIZONA_IRQ1_STS_MASK 0x0001 /* IRQ1_STS */
5207#define ARIZONA_IRQ1_STS_SHIFT 0 /* IRQ1_STS */
5208#define ARIZONA_IRQ1_STS_WIDTH 1 /* IRQ1_STS */
5209
5210/*
5211 * R3393 (0xD41) - ADSP2 IRQ0
5212 */
5213#define ARIZONA_DSP_IRQ2 0x0002 /* DSP_IRQ2 */
5214#define ARIZONA_DSP_IRQ2_MASK 0x0002 /* DSP_IRQ2 */
5215#define ARIZONA_DSP_IRQ2_SHIFT 1 /* DSP_IRQ2 */
5216#define ARIZONA_DSP_IRQ2_WIDTH 1 /* DSP_IRQ2 */
5217#define ARIZONA_DSP_IRQ1 0x0001 /* DSP_IRQ1 */
5218#define ARIZONA_DSP_IRQ1_MASK 0x0001 /* DSP_IRQ1 */
5219#define ARIZONA_DSP_IRQ1_SHIFT 0 /* DSP_IRQ1 */
5220#define ARIZONA_DSP_IRQ1_WIDTH 1 /* DSP_IRQ1 */
5221
5222/*
5223 * R3408 (0xD50) - AOD wkup and trig
5224 */
5225#define ARIZONA_GP5_FALL_TRIG_STS 0x0020 /* GP5_FALL_TRIG_STS */
5226#define ARIZONA_GP5_FALL_TRIG_STS_MASK 0x0020 /* GP5_FALL_TRIG_STS */
5227#define ARIZONA_GP5_FALL_TRIG_STS_SHIFT 5 /* GP5_FALL_TRIG_STS */
5228#define ARIZONA_GP5_FALL_TRIG_STS_WIDTH 1 /* GP5_FALL_TRIG_STS */
5229#define ARIZONA_GP5_RISE_TRIG_STS 0x0010 /* GP5_RISE_TRIG_STS */
5230#define ARIZONA_GP5_RISE_TRIG_STS_MASK 0x0010 /* GP5_RISE_TRIG_STS */
5231#define ARIZONA_GP5_RISE_TRIG_STS_SHIFT 4 /* GP5_RISE_TRIG_STS */
5232#define ARIZONA_GP5_RISE_TRIG_STS_WIDTH 1 /* GP5_RISE_TRIG_STS */
5233#define ARIZONA_JD1_FALL_TRIG_STS 0x0008 /* JD1_FALL_TRIG_STS */
5234#define ARIZONA_JD1_FALL_TRIG_STS_MASK 0x0008 /* JD1_FALL_TRIG_STS */
5235#define ARIZONA_JD1_FALL_TRIG_STS_SHIFT 3 /* JD1_FALL_TRIG_STS */
5236#define ARIZONA_JD1_FALL_TRIG_STS_WIDTH 1 /* JD1_FALL_TRIG_STS */
5237#define ARIZONA_JD1_RISE_TRIG_STS 0x0004 /* JD1_RISE_TRIG_STS */
5238#define ARIZONA_JD1_RISE_TRIG_STS_MASK 0x0004 /* JD1_RISE_TRIG_STS */
5239#define ARIZONA_JD1_RISE_TRIG_STS_SHIFT 2 /* JD1_RISE_TRIG_STS */
5240#define ARIZONA_JD1_RISE_TRIG_STS_WIDTH 1 /* JD1_RISE_TRIG_STS */
5241#define ARIZONA_JD2_FALL_TRIG_STS 0x0002 /* JD2_FALL_TRIG_STS */
5242#define ARIZONA_JD2_FALL_TRIG_STS_MASK 0x0002 /* JD2_FALL_TRIG_STS */
5243#define ARIZONA_JD2_FALL_TRIG_STS_SHIFT 1 /* JD2_FALL_TRIG_STS */
5244#define ARIZONA_JD2_FALL_TRIG_STS_WIDTH 1 /* JD2_FALL_TRIG_STS */
5245#define ARIZONA_JD2_RISE_TRIG_STS 0x0001 /* JD2_RISE_TRIG_STS */
5246#define ARIZONA_JD2_RISE_TRIG_STS_MASK 0x0001 /* JD2_RISE_TRIG_STS */
5247#define ARIZONA_JD2_RISE_TRIG_STS_SHIFT 0 /* JD2_RISE_TRIG_STS */
5248#define ARIZONA_JD2_RISE_TRIG_STS_WIDTH 1 /* JD2_RISE_TRIG_STS */
5249
5250/*
5251 * R3409 (0xD51) - AOD IRQ1
5252 */
5253#define ARIZONA_GP5_FALL_EINT1 0x0020 /* GP5_FALL_EINT1 */
5254#define ARIZONA_GP5_FALL_EINT1_MASK 0x0020 /* GP5_FALL_EINT1 */
5255#define ARIZONA_GP5_FALL_EINT1_SHIFT 5 /* GP5_FALL_EINT1 */
5256#define ARIZONA_GP5_FALL_EINT1_WIDTH 1 /* GP5_FALL_EINT1 */
5257#define ARIZONA_GP5_RISE_EINT1 0x0010 /* GP5_RISE_EINT1 */
5258#define ARIZONA_GP5_RISE_EINT1_MASK 0x0010 /* GP5_RISE_EINT1 */
5259#define ARIZONA_GP5_RISE_EINT1_SHIFT 4 /* GP5_RISE_EINT1 */
5260#define ARIZONA_GP5_RISE_EINT1_WIDTH 1 /* GP5_RISE_EINT1 */
5261#define ARIZONA_JD1_FALL_EINT1 0x0008 /* JD1_FALL_EINT1 */
5262#define ARIZONA_JD1_FALL_EINT1_MASK 0x0008 /* JD1_FALL_EINT1 */
5263#define ARIZONA_JD1_FALL_EINT1_SHIFT 3 /* JD1_FALL_EINT1 */
5264#define ARIZONA_JD1_FALL_EINT1_WIDTH 1 /* JD1_FALL_EINT1 */
5265#define ARIZONA_JD1_RISE_EINT1 0x0004 /* JD1_RISE_EINT1 */
5266#define ARIZONA_JD1_RISE_EINT1_MASK 0x0004 /* JD1_RISE_EINT1 */
5267#define ARIZONA_JD1_RISE_EINT1_SHIFT 2 /* JD1_RISE_EINT1 */
5268#define ARIZONA_JD1_RISE_EINT1_WIDTH 1 /* JD1_RISE_EINT1 */
5269#define ARIZONA_JD2_FALL_EINT1 0x0002 /* JD2_FALL_EINT1 */
5270#define ARIZONA_JD2_FALL_EINT1_MASK 0x0002 /* JD2_FALL_EINT1 */
5271#define ARIZONA_JD2_FALL_EINT1_SHIFT 1 /* JD2_FALL_EINT1 */
5272#define ARIZONA_JD2_FALL_EINT1_WIDTH 1 /* JD2_FALL_EINT1 */
5273#define ARIZONA_JD2_RISE_EINT1 0x0001 /* JD2_RISE_EINT1 */
5274#define ARIZONA_JD2_RISE_EINT1_MASK 0x0001 /* JD2_RISE_EINT1 */
5275#define ARIZONA_JD2_RISE_EINT1_SHIFT 0 /* JD2_RISE_EINT1 */
5276#define ARIZONA_JD2_RISE_EINT1_WIDTH 1 /* JD2_RISE_EINT1 */
5277
5278/*
5279 * R3410 (0xD52) - AOD IRQ2
5280 */
5281#define ARIZONA_GP5_FALL_EINT2 0x0020 /* GP5_FALL_EINT2 */
5282#define ARIZONA_GP5_FALL_EINT2_MASK 0x0020 /* GP5_FALL_EINT2 */
5283#define ARIZONA_GP5_FALL_EINT2_SHIFT 5 /* GP5_FALL_EINT2 */
5284#define ARIZONA_GP5_FALL_EINT2_WIDTH 1 /* GP5_FALL_EINT2 */
5285#define ARIZONA_GP5_RISE_EINT2 0x0010 /* GP5_RISE_EINT2 */
5286#define ARIZONA_GP5_RISE_EINT2_MASK 0x0010 /* GP5_RISE_EINT2 */
5287#define ARIZONA_GP5_RISE_EINT2_SHIFT 4 /* GP5_RISE_EINT2 */
5288#define ARIZONA_GP5_RISE_EINT2_WIDTH 1 /* GP5_RISE_EINT2 */
5289#define ARIZONA_JD1_FALL_EINT2 0x0008 /* JD1_FALL_EINT2 */
5290#define ARIZONA_JD1_FALL_EINT2_MASK 0x0008 /* JD1_FALL_EINT2 */
5291#define ARIZONA_JD1_FALL_EINT2_SHIFT 3 /* JD1_FALL_EINT2 */
5292#define ARIZONA_JD1_FALL_EINT2_WIDTH 1 /* JD1_FALL_EINT2 */
5293#define ARIZONA_JD1_RISE_EINT2 0x0004 /* JD1_RISE_EINT2 */
5294#define ARIZONA_JD1_RISE_EINT2_MASK 0x0004 /* JD1_RISE_EINT2 */
5295#define ARIZONA_JD1_RISE_EINT2_SHIFT 2 /* JD1_RISE_EINT2 */
5296#define ARIZONA_JD1_RISE_EINT2_WIDTH 1 /* JD1_RISE_EINT2 */
5297#define ARIZONA_JD2_FALL_EINT2 0x0002 /* JD2_FALL_EINT2 */
5298#define ARIZONA_JD2_FALL_EINT2_MASK 0x0002 /* JD2_FALL_EINT2 */
5299#define ARIZONA_JD2_FALL_EINT2_SHIFT 1 /* JD2_FALL_EINT2 */
5300#define ARIZONA_JD2_FALL_EINT2_WIDTH 1 /* JD2_FALL_EINT2 */
5301#define ARIZONA_JD2_RISE_EINT2 0x0001 /* JD2_RISE_EINT2 */
5302#define ARIZONA_JD2_RISE_EINT2_MASK 0x0001 /* JD2_RISE_EINT2 */
5303#define ARIZONA_JD2_RISE_EINT2_SHIFT 0 /* JD2_RISE_EINT2 */
5304#define ARIZONA_JD2_RISE_EINT2_WIDTH 1 /* JD2_RISE_EINT2 */
5305
5306/*
5307 * R3411 (0xD53) - AOD IRQ Mask IRQ1
5308 */
5309#define ARIZONA_IM_GP5_FALL_EINT1 0x0020 /* IM_GP5_FALL_EINT1 */
5310#define ARIZONA_IM_GP5_FALL_EINT1_MASK 0x0020 /* IM_GP5_FALL_EINT1 */
5311#define ARIZONA_IM_GP5_FALL_EINT1_SHIFT 5 /* IM_GP5_FALL_EINT1 */
5312#define ARIZONA_IM_GP5_FALL_EINT1_WIDTH 1 /* IM_GP5_FALL_EINT1 */
5313#define ARIZONA_IM_GP5_RISE_EINT1 0x0010 /* IM_GP5_RISE_EINT1 */
5314#define ARIZONA_IM_GP5_RISE_EINT1_MASK 0x0010 /* IM_GP5_RISE_EINT1 */
5315#define ARIZONA_IM_GP5_RISE_EINT1_SHIFT 4 /* IM_GP5_RISE_EINT1 */
5316#define ARIZONA_IM_GP5_RISE_EINT1_WIDTH 1 /* IM_GP5_RISE_EINT1 */
5317#define ARIZONA_IM_JD1_FALL_EINT1 0x0008 /* IM_JD1_FALL_EINT1 */
5318#define ARIZONA_IM_JD1_FALL_EINT1_MASK 0x0008 /* IM_JD1_FALL_EINT1 */
5319#define ARIZONA_IM_JD1_FALL_EINT1_SHIFT 3 /* IM_JD1_FALL_EINT1 */
5320#define ARIZONA_IM_JD1_FALL_EINT1_WIDTH 1 /* IM_JD1_FALL_EINT1 */
5321#define ARIZONA_IM_JD1_RISE_EINT1 0x0004 /* IM_JD1_RISE_EINT1 */
5322#define ARIZONA_IM_JD1_RISE_EINT1_MASK 0x0004 /* IM_JD1_RISE_EINT1 */
5323#define ARIZONA_IM_JD1_RISE_EINT1_SHIFT 2 /* IM_JD1_RISE_EINT1 */
5324#define ARIZONA_IM_JD1_RISE_EINT1_WIDTH 1 /* IM_JD1_RISE_EINT1 */
5325#define ARIZONA_IM_JD2_FALL_EINT1 0x0002 /* IM_JD2_FALL_EINT1 */
5326#define ARIZONA_IM_JD2_FALL_EINT1_MASK 0x0002 /* IM_JD2_FALL_EINT1 */
5327#define ARIZONA_IM_JD2_FALL_EINT1_SHIFT 1 /* IM_JD2_FALL_EINT1 */
5328#define ARIZONA_IM_JD2_FALL_EINT1_WIDTH 1 /* IM_JD2_FALL_EINT1 */
5329#define ARIZONA_IM_JD2_RISE_EINT1 0x0001 /* IM_JD2_RISE_EINT1 */
5330#define ARIZONA_IM_JD2_RISE_EINT1_MASK 0x0001 /* IM_JD2_RISE_EINT1 */
5331#define ARIZONA_IM_JD2_RISE_EINT1_SHIFT 0 /* IM_JD2_RISE_EINT1 */
5332#define ARIZONA_IM_JD2_RISE_EINT1_WIDTH 1 /* IM_JD2_RISE_EINT1 */
5333
5334/*
5335 * R3412 (0xD54) - AOD IRQ Mask IRQ2
5336 */
5337#define ARIZONA_IM_GP5_FALL_EINT2 0x0020 /* IM_GP5_FALL_EINT2 */
5338#define ARIZONA_IM_GP5_FALL_EINT2_MASK 0x0020 /* IM_GP5_FALL_EINT2 */
5339#define ARIZONA_IM_GP5_FALL_EINT2_SHIFT 5 /* IM_GP5_FALL_EINT2 */
5340#define ARIZONA_IM_GP5_FALL_EINT2_WIDTH 1 /* IM_GP5_FALL_EINT2 */
5341#define ARIZONA_IM_GP5_RISE_EINT2 0x0010 /* IM_GP5_RISE_EINT2 */
5342#define ARIZONA_IM_GP5_RISE_EINT2_MASK 0x0010 /* IM_GP5_RISE_EINT2 */
5343#define ARIZONA_IM_GP5_RISE_EINT2_SHIFT 4 /* IM_GP5_RISE_EINT2 */
5344#define ARIZONA_IM_GP5_RISE_EINT2_WIDTH 1 /* IM_GP5_RISE_EINT2 */
5345#define ARIZONA_IM_JD1_FALL_EINT2 0x0008 /* IM_JD1_FALL_EINT2 */
5346#define ARIZONA_IM_JD1_FALL_EINT2_MASK 0x0008 /* IM_JD1_FALL_EINT2 */
5347#define ARIZONA_IM_JD1_FALL_EINT2_SHIFT 3 /* IM_JD1_FALL_EINT2 */
5348#define ARIZONA_IM_JD1_FALL_EINT2_WIDTH 1 /* IM_JD1_FALL_EINT2 */
5349#define ARIZONA_IM_JD1_RISE_EINT2 0x0004 /* IM_JD1_RISE_EINT2 */
5350#define ARIZONA_IM_JD1_RISE_EINT2_MASK 0x0004 /* IM_JD1_RISE_EINT2 */
5351#define ARIZONA_IM_JD1_RISE_EINT2_SHIFT 2 /* IM_JD1_RISE_EINT2 */
5352#define ARIZONA_IM_JD1_RISE_EINT2_WIDTH 1 /* IM_JD1_RISE_EINT2 */
5353#define ARIZONA_IM_JD2_FALL_EINT2 0x0002 /* IM_JD2_FALL_EINT2 */
5354#define ARIZONA_IM_JD2_FALL_EINT2_MASK 0x0002 /* IM_JD2_FALL_EINT2 */
5355#define ARIZONA_IM_JD2_FALL_EINT2_SHIFT 1 /* IM_JD2_FALL_EINT2 */
5356#define ARIZONA_IM_JD2_FALL_EINT2_WIDTH 1 /* IM_JD2_FALL_EINT2 */
5357#define ARIZONA_IM_JD2_RISE_EINT2 0x0001 /* IM_JD2_RISE_EINT2 */
5358#define ARIZONA_IM_JD2_RISE_EINT2_MASK 0x0001 /* IM_JD2_RISE_EINT2 */
5359#define ARIZONA_IM_JD2_RISE_EINT2_SHIFT 0 /* IM_JD2_RISE_EINT2 */
5360#define ARIZONA_IM_JD2_RISE_EINT2_WIDTH 1 /* IM_JD2_RISE_EINT2 */
5361
5362/*
5363 * R3413 (0xD55) - AOD IRQ Raw Status
5364 */
5365#define ARIZONA_GP5_STS 0x0004 /* GP5_STS */
5366#define ARIZONA_GP5_STS_MASK 0x0004 /* GP5_STS */
5367#define ARIZONA_GP5_STS_SHIFT 2 /* GP5_STS */
5368#define ARIZONA_GP5_STS_WIDTH 1 /* GP5_STS */
5369#define ARIZONA_JD2_STS 0x0002 /* JD2_STS */
5370#define ARIZONA_JD2_STS_MASK 0x0002 /* JD2_STS */
5371#define ARIZONA_JD2_STS_SHIFT 1 /* JD2_STS */
5372#define ARIZONA_JD2_STS_WIDTH 1 /* JD2_STS */
5373#define ARIZONA_JD1_STS 0x0001 /* JD1_STS */
5374#define ARIZONA_JD1_STS_MASK 0x0001 /* JD1_STS */
5375#define ARIZONA_JD1_STS_SHIFT 0 /* JD1_STS */
5376#define ARIZONA_JD1_STS_WIDTH 1 /* JD1_STS */
5377
5378/*
5379 * R3414 (0xD56) - Jack detect debounce
5380 */
5381#define ARIZONA_JD2_DB 0x0002 /* JD2_DB */
5382#define ARIZONA_JD2_DB_MASK 0x0002 /* JD2_DB */
5383#define ARIZONA_JD2_DB_SHIFT 1 /* JD2_DB */
5384#define ARIZONA_JD2_DB_WIDTH 1 /* JD2_DB */
5385#define ARIZONA_JD1_DB 0x0001 /* JD1_DB */
5386#define ARIZONA_JD1_DB_MASK 0x0001 /* JD1_DB */
5387#define ARIZONA_JD1_DB_SHIFT 0 /* JD1_DB */
5388#define ARIZONA_JD1_DB_WIDTH 1 /* JD1_DB */
5389
5390/*
5391 * R3584 (0xE00) - FX_Ctrl1
5392 */
5393#define ARIZONA_FX_RATE_MASK 0x7800 /* FX_RATE - [14:11] */
5394#define ARIZONA_FX_RATE_SHIFT 11 /* FX_RATE - [14:11] */
5395#define ARIZONA_FX_RATE_WIDTH 4 /* FX_RATE - [14:11] */
5396
5397/*
5398 * R3585 (0xE01) - FX_Ctrl2
5399 */
5400#define ARIZONA_FX_STS_MASK 0xFFF0 /* FX_STS - [15:4] */
5401#define ARIZONA_FX_STS_SHIFT 4 /* FX_STS - [15:4] */
5402#define ARIZONA_FX_STS_WIDTH 12 /* FX_STS - [15:4] */
5403
5404/*
5405 * R3600 (0xE10) - EQ1_1
5406 */
5407#define ARIZONA_EQ1_B1_GAIN_MASK 0xF800 /* EQ1_B1_GAIN - [15:11] */
5408#define ARIZONA_EQ1_B1_GAIN_SHIFT 11 /* EQ1_B1_GAIN - [15:11] */
5409#define ARIZONA_EQ1_B1_GAIN_WIDTH 5 /* EQ1_B1_GAIN - [15:11] */
5410#define ARIZONA_EQ1_B2_GAIN_MASK 0x07C0 /* EQ1_B2_GAIN - [10:6] */
5411#define ARIZONA_EQ1_B2_GAIN_SHIFT 6 /* EQ1_B2_GAIN - [10:6] */
5412#define ARIZONA_EQ1_B2_GAIN_WIDTH 5 /* EQ1_B2_GAIN - [10:6] */
5413#define ARIZONA_EQ1_B3_GAIN_MASK 0x003E /* EQ1_B3_GAIN - [5:1] */
5414#define ARIZONA_EQ1_B3_GAIN_SHIFT 1 /* EQ1_B3_GAIN - [5:1] */
5415#define ARIZONA_EQ1_B3_GAIN_WIDTH 5 /* EQ1_B3_GAIN - [5:1] */
5416#define ARIZONA_EQ1_ENA 0x0001 /* EQ1_ENA */
5417#define ARIZONA_EQ1_ENA_MASK 0x0001 /* EQ1_ENA */
5418#define ARIZONA_EQ1_ENA_SHIFT 0 /* EQ1_ENA */
5419#define ARIZONA_EQ1_ENA_WIDTH 1 /* EQ1_ENA */
5420
5421/*
5422 * R3601 (0xE11) - EQ1_2
5423 */
5424#define ARIZONA_EQ1_B4_GAIN_MASK 0xF800 /* EQ1_B4_GAIN - [15:11] */
5425#define ARIZONA_EQ1_B4_GAIN_SHIFT 11 /* EQ1_B4_GAIN - [15:11] */
5426#define ARIZONA_EQ1_B4_GAIN_WIDTH 5 /* EQ1_B4_GAIN - [15:11] */
5427#define ARIZONA_EQ1_B5_GAIN_MASK 0x07C0 /* EQ1_B5_GAIN - [10:6] */
5428#define ARIZONA_EQ1_B5_GAIN_SHIFT 6 /* EQ1_B5_GAIN - [10:6] */
5429#define ARIZONA_EQ1_B5_GAIN_WIDTH 5 /* EQ1_B5_GAIN - [10:6] */
5430#define ARIZONA_EQ1_B1_MODE 0x0001 /* EQ1_B1_MODE */
5431#define ARIZONA_EQ1_B1_MODE_MASK 0x0001 /* EQ1_B1_MODE */
5432#define ARIZONA_EQ1_B1_MODE_SHIFT 0 /* EQ1_B1_MODE */
5433#define ARIZONA_EQ1_B1_MODE_WIDTH 1 /* EQ1_B1_MODE */
5434
5435/*
5436 * R3602 (0xE12) - EQ1_3
5437 */
5438#define ARIZONA_EQ1_B1_A_MASK 0xFFFF /* EQ1_B1_A - [15:0] */
5439#define ARIZONA_EQ1_B1_A_SHIFT 0 /* EQ1_B1_A - [15:0] */
5440#define ARIZONA_EQ1_B1_A_WIDTH 16 /* EQ1_B1_A - [15:0] */
5441
5442/*
5443 * R3603 (0xE13) - EQ1_4
5444 */
5445#define ARIZONA_EQ1_B1_B_MASK 0xFFFF /* EQ1_B1_B - [15:0] */
5446#define ARIZONA_EQ1_B1_B_SHIFT 0 /* EQ1_B1_B - [15:0] */
5447#define ARIZONA_EQ1_B1_B_WIDTH 16 /* EQ1_B1_B - [15:0] */
5448
5449/*
5450 * R3604 (0xE14) - EQ1_5
5451 */
5452#define ARIZONA_EQ1_B1_PG_MASK 0xFFFF /* EQ1_B1_PG - [15:0] */
5453#define ARIZONA_EQ1_B1_PG_SHIFT 0 /* EQ1_B1_PG - [15:0] */
5454#define ARIZONA_EQ1_B1_PG_WIDTH 16 /* EQ1_B1_PG - [15:0] */
5455
5456/*
5457 * R3605 (0xE15) - EQ1_6
5458 */
5459#define ARIZONA_EQ1_B2_A_MASK 0xFFFF /* EQ1_B2_A - [15:0] */
5460#define ARIZONA_EQ1_B2_A_SHIFT 0 /* EQ1_B2_A - [15:0] */
5461#define ARIZONA_EQ1_B2_A_WIDTH 16 /* EQ1_B2_A - [15:0] */
5462
5463/*
5464 * R3606 (0xE16) - EQ1_7
5465 */
5466#define ARIZONA_EQ1_B2_B_MASK 0xFFFF /* EQ1_B2_B - [15:0] */
5467#define ARIZONA_EQ1_B2_B_SHIFT 0 /* EQ1_B2_B - [15:0] */
5468#define ARIZONA_EQ1_B2_B_WIDTH 16 /* EQ1_B2_B - [15:0] */
5469
5470/*
5471 * R3607 (0xE17) - EQ1_8
5472 */
5473#define ARIZONA_EQ1_B2_C_MASK 0xFFFF /* EQ1_B2_C - [15:0] */
5474#define ARIZONA_EQ1_B2_C_SHIFT 0 /* EQ1_B2_C - [15:0] */
5475#define ARIZONA_EQ1_B2_C_WIDTH 16 /* EQ1_B2_C - [15:0] */
5476
5477/*
5478 * R3608 (0xE18) - EQ1_9
5479 */
5480#define ARIZONA_EQ1_B2_PG_MASK 0xFFFF /* EQ1_B2_PG - [15:0] */
5481#define ARIZONA_EQ1_B2_PG_SHIFT 0 /* EQ1_B2_PG - [15:0] */
5482#define ARIZONA_EQ1_B2_PG_WIDTH 16 /* EQ1_B2_PG - [15:0] */
5483
5484/*
5485 * R3609 (0xE19) - EQ1_10
5486 */
5487#define ARIZONA_EQ1_B3_A_MASK 0xFFFF /* EQ1_B3_A - [15:0] */
5488#define ARIZONA_EQ1_B3_A_SHIFT 0 /* EQ1_B3_A - [15:0] */
5489#define ARIZONA_EQ1_B3_A_WIDTH 16 /* EQ1_B3_A - [15:0] */
5490
5491/*
5492 * R3610 (0xE1A) - EQ1_11
5493 */
5494#define ARIZONA_EQ1_B3_B_MASK 0xFFFF /* EQ1_B3_B - [15:0] */
5495#define ARIZONA_EQ1_B3_B_SHIFT 0 /* EQ1_B3_B - [15:0] */
5496#define ARIZONA_EQ1_B3_B_WIDTH 16 /* EQ1_B3_B - [15:0] */
5497
5498/*
5499 * R3611 (0xE1B) - EQ1_12
5500 */
5501#define ARIZONA_EQ1_B3_C_MASK 0xFFFF /* EQ1_B3_C - [15:0] */
5502#define ARIZONA_EQ1_B3_C_SHIFT 0 /* EQ1_B3_C - [15:0] */
5503#define ARIZONA_EQ1_B3_C_WIDTH 16 /* EQ1_B3_C - [15:0] */
5504
5505/*
5506 * R3612 (0xE1C) - EQ1_13
5507 */
5508#define ARIZONA_EQ1_B3_PG_MASK 0xFFFF /* EQ1_B3_PG - [15:0] */
5509#define ARIZONA_EQ1_B3_PG_SHIFT 0 /* EQ1_B3_PG - [15:0] */
5510#define ARIZONA_EQ1_B3_PG_WIDTH 16 /* EQ1_B3_PG - [15:0] */
5511
5512/*
5513 * R3613 (0xE1D) - EQ1_14
5514 */
5515#define ARIZONA_EQ1_B4_A_MASK 0xFFFF /* EQ1_B4_A - [15:0] */
5516#define ARIZONA_EQ1_B4_A_SHIFT 0 /* EQ1_B4_A - [15:0] */
5517#define ARIZONA_EQ1_B4_A_WIDTH 16 /* EQ1_B4_A - [15:0] */
5518
5519/*
5520 * R3614 (0xE1E) - EQ1_15
5521 */
5522#define ARIZONA_EQ1_B4_B_MASK 0xFFFF /* EQ1_B4_B - [15:0] */
5523#define ARIZONA_EQ1_B4_B_SHIFT 0 /* EQ1_B4_B - [15:0] */
5524#define ARIZONA_EQ1_B4_B_WIDTH 16 /* EQ1_B4_B - [15:0] */
5525
5526/*
5527 * R3615 (0xE1F) - EQ1_16
5528 */
5529#define ARIZONA_EQ1_B4_C_MASK 0xFFFF /* EQ1_B4_C - [15:0] */
5530#define ARIZONA_EQ1_B4_C_SHIFT 0 /* EQ1_B4_C - [15:0] */
5531#define ARIZONA_EQ1_B4_C_WIDTH 16 /* EQ1_B4_C - [15:0] */
5532
5533/*
5534 * R3616 (0xE20) - EQ1_17
5535 */
5536#define ARIZONA_EQ1_B4_PG_MASK 0xFFFF /* EQ1_B4_PG - [15:0] */
5537#define ARIZONA_EQ1_B4_PG_SHIFT 0 /* EQ1_B4_PG - [15:0] */
5538#define ARIZONA_EQ1_B4_PG_WIDTH 16 /* EQ1_B4_PG - [15:0] */
5539
5540/*
5541 * R3617 (0xE21) - EQ1_18
5542 */
5543#define ARIZONA_EQ1_B5_A_MASK 0xFFFF /* EQ1_B5_A - [15:0] */
5544#define ARIZONA_EQ1_B5_A_SHIFT 0 /* EQ1_B5_A - [15:0] */
5545#define ARIZONA_EQ1_B5_A_WIDTH 16 /* EQ1_B5_A - [15:0] */
5546
5547/*
5548 * R3618 (0xE22) - EQ1_19
5549 */
5550#define ARIZONA_EQ1_B5_B_MASK 0xFFFF /* EQ1_B5_B - [15:0] */
5551#define ARIZONA_EQ1_B5_B_SHIFT 0 /* EQ1_B5_B - [15:0] */
5552#define ARIZONA_EQ1_B5_B_WIDTH 16 /* EQ1_B5_B - [15:0] */
5553
5554/*
5555 * R3619 (0xE23) - EQ1_20
5556 */
5557#define ARIZONA_EQ1_B5_PG_MASK 0xFFFF /* EQ1_B5_PG - [15:0] */
5558#define ARIZONA_EQ1_B5_PG_SHIFT 0 /* EQ1_B5_PG - [15:0] */
5559#define ARIZONA_EQ1_B5_PG_WIDTH 16 /* EQ1_B5_PG - [15:0] */
5560
5561/*
5562 * R3620 (0xE24) - EQ1_21
5563 */
5564#define ARIZONA_EQ1_B1_C_MASK 0xFFFF /* EQ1_B1_C - [15:0] */
5565#define ARIZONA_EQ1_B1_C_SHIFT 0 /* EQ1_B1_C - [15:0] */
5566#define ARIZONA_EQ1_B1_C_WIDTH 16 /* EQ1_B1_C - [15:0] */
5567
5568/*
5569 * R3622 (0xE26) - EQ2_1
5570 */
5571#define ARIZONA_EQ2_B1_GAIN_MASK 0xF800 /* EQ2_B1_GAIN - [15:11] */
5572#define ARIZONA_EQ2_B1_GAIN_SHIFT 11 /* EQ2_B1_GAIN - [15:11] */
5573#define ARIZONA_EQ2_B1_GAIN_WIDTH 5 /* EQ2_B1_GAIN - [15:11] */
5574#define ARIZONA_EQ2_B2_GAIN_MASK 0x07C0 /* EQ2_B2_GAIN - [10:6] */
5575#define ARIZONA_EQ2_B2_GAIN_SHIFT 6 /* EQ2_B2_GAIN - [10:6] */
5576#define ARIZONA_EQ2_B2_GAIN_WIDTH 5 /* EQ2_B2_GAIN - [10:6] */
5577#define ARIZONA_EQ2_B3_GAIN_MASK 0x003E /* EQ2_B3_GAIN - [5:1] */
5578#define ARIZONA_EQ2_B3_GAIN_SHIFT 1 /* EQ2_B3_GAIN - [5:1] */
5579#define ARIZONA_EQ2_B3_GAIN_WIDTH 5 /* EQ2_B3_GAIN - [5:1] */
5580#define ARIZONA_EQ2_ENA 0x0001 /* EQ2_ENA */
5581#define ARIZONA_EQ2_ENA_MASK 0x0001 /* EQ2_ENA */
5582#define ARIZONA_EQ2_ENA_SHIFT 0 /* EQ2_ENA */
5583#define ARIZONA_EQ2_ENA_WIDTH 1 /* EQ2_ENA */
5584
5585/*
5586 * R3623 (0xE27) - EQ2_2
5587 */
5588#define ARIZONA_EQ2_B4_GAIN_MASK 0xF800 /* EQ2_B4_GAIN - [15:11] */
5589#define ARIZONA_EQ2_B4_GAIN_SHIFT 11 /* EQ2_B4_GAIN - [15:11] */
5590#define ARIZONA_EQ2_B4_GAIN_WIDTH 5 /* EQ2_B4_GAIN - [15:11] */
5591#define ARIZONA_EQ2_B5_GAIN_MASK 0x07C0 /* EQ2_B5_GAIN - [10:6] */
5592#define ARIZONA_EQ2_B5_GAIN_SHIFT 6 /* EQ2_B5_GAIN - [10:6] */
5593#define ARIZONA_EQ2_B5_GAIN_WIDTH 5 /* EQ2_B5_GAIN - [10:6] */
5594#define ARIZONA_EQ2_B1_MODE 0x0001 /* EQ2_B1_MODE */
5595#define ARIZONA_EQ2_B1_MODE_MASK 0x0001 /* EQ2_B1_MODE */
5596#define ARIZONA_EQ2_B1_MODE_SHIFT 0 /* EQ2_B1_MODE */
5597#define ARIZONA_EQ2_B1_MODE_WIDTH 1 /* EQ2_B1_MODE */
5598
5599/*
5600 * R3624 (0xE28) - EQ2_3
5601 */
5602#define ARIZONA_EQ2_B1_A_MASK 0xFFFF /* EQ2_B1_A - [15:0] */
5603#define ARIZONA_EQ2_B1_A_SHIFT 0 /* EQ2_B1_A - [15:0] */
5604#define ARIZONA_EQ2_B1_A_WIDTH 16 /* EQ2_B1_A - [15:0] */
5605
5606/*
5607 * R3625 (0xE29) - EQ2_4
5608 */
5609#define ARIZONA_EQ2_B1_B_MASK 0xFFFF /* EQ2_B1_B - [15:0] */
5610#define ARIZONA_EQ2_B1_B_SHIFT 0 /* EQ2_B1_B - [15:0] */
5611#define ARIZONA_EQ2_B1_B_WIDTH 16 /* EQ2_B1_B - [15:0] */
5612
5613/*
5614 * R3626 (0xE2A) - EQ2_5
5615 */
5616#define ARIZONA_EQ2_B1_PG_MASK 0xFFFF /* EQ2_B1_PG - [15:0] */
5617#define ARIZONA_EQ2_B1_PG_SHIFT 0 /* EQ2_B1_PG - [15:0] */
5618#define ARIZONA_EQ2_B1_PG_WIDTH 16 /* EQ2_B1_PG - [15:0] */
5619
5620/*
5621 * R3627 (0xE2B) - EQ2_6
5622 */
5623#define ARIZONA_EQ2_B2_A_MASK 0xFFFF /* EQ2_B2_A - [15:0] */
5624#define ARIZONA_EQ2_B2_A_SHIFT 0 /* EQ2_B2_A - [15:0] */
5625#define ARIZONA_EQ2_B2_A_WIDTH 16 /* EQ2_B2_A - [15:0] */
5626
5627/*
5628 * R3628 (0xE2C) - EQ2_7
5629 */
5630#define ARIZONA_EQ2_B2_B_MASK 0xFFFF /* EQ2_B2_B - [15:0] */
5631#define ARIZONA_EQ2_B2_B_SHIFT 0 /* EQ2_B2_B - [15:0] */
5632#define ARIZONA_EQ2_B2_B_WIDTH 16 /* EQ2_B2_B - [15:0] */
5633
5634/*
5635 * R3629 (0xE2D) - EQ2_8
5636 */
5637#define ARIZONA_EQ2_B2_C_MASK 0xFFFF /* EQ2_B2_C - [15:0] */
5638#define ARIZONA_EQ2_B2_C_SHIFT 0 /* EQ2_B2_C - [15:0] */
5639#define ARIZONA_EQ2_B2_C_WIDTH 16 /* EQ2_B2_C - [15:0] */
5640
5641/*
5642 * R3630 (0xE2E) - EQ2_9
5643 */
5644#define ARIZONA_EQ2_B2_PG_MASK 0xFFFF /* EQ2_B2_PG - [15:0] */
5645#define ARIZONA_EQ2_B2_PG_SHIFT 0 /* EQ2_B2_PG - [15:0] */
5646#define ARIZONA_EQ2_B2_PG_WIDTH 16 /* EQ2_B2_PG - [15:0] */
5647
5648/*
5649 * R3631 (0xE2F) - EQ2_10
5650 */
5651#define ARIZONA_EQ2_B3_A_MASK 0xFFFF /* EQ2_B3_A - [15:0] */
5652#define ARIZONA_EQ2_B3_A_SHIFT 0 /* EQ2_B3_A - [15:0] */
5653#define ARIZONA_EQ2_B3_A_WIDTH 16 /* EQ2_B3_A - [15:0] */
5654
5655/*
5656 * R3632 (0xE30) - EQ2_11
5657 */
5658#define ARIZONA_EQ2_B3_B_MASK 0xFFFF /* EQ2_B3_B - [15:0] */
5659#define ARIZONA_EQ2_B3_B_SHIFT 0 /* EQ2_B3_B - [15:0] */
5660#define ARIZONA_EQ2_B3_B_WIDTH 16 /* EQ2_B3_B - [15:0] */
5661
5662/*
5663 * R3633 (0xE31) - EQ2_12
5664 */
5665#define ARIZONA_EQ2_B3_C_MASK 0xFFFF /* EQ2_B3_C - [15:0] */
5666#define ARIZONA_EQ2_B3_C_SHIFT 0 /* EQ2_B3_C - [15:0] */
5667#define ARIZONA_EQ2_B3_C_WIDTH 16 /* EQ2_B3_C - [15:0] */
5668
5669/*
5670 * R3634 (0xE32) - EQ2_13
5671 */
5672#define ARIZONA_EQ2_B3_PG_MASK 0xFFFF /* EQ2_B3_PG - [15:0] */
5673#define ARIZONA_EQ2_B3_PG_SHIFT 0 /* EQ2_B3_PG - [15:0] */
5674#define ARIZONA_EQ2_B3_PG_WIDTH 16 /* EQ2_B3_PG - [15:0] */
5675
5676/*
5677 * R3635 (0xE33) - EQ2_14
5678 */
5679#define ARIZONA_EQ2_B4_A_MASK 0xFFFF /* EQ2_B4_A - [15:0] */
5680#define ARIZONA_EQ2_B4_A_SHIFT 0 /* EQ2_B4_A - [15:0] */
5681#define ARIZONA_EQ2_B4_A_WIDTH 16 /* EQ2_B4_A - [15:0] */
5682
5683/*
5684 * R3636 (0xE34) - EQ2_15
5685 */
5686#define ARIZONA_EQ2_B4_B_MASK 0xFFFF /* EQ2_B4_B - [15:0] */
5687#define ARIZONA_EQ2_B4_B_SHIFT 0 /* EQ2_B4_B - [15:0] */
5688#define ARIZONA_EQ2_B4_B_WIDTH 16 /* EQ2_B4_B - [15:0] */
5689
5690/*
5691 * R3637 (0xE35) - EQ2_16
5692 */
5693#define ARIZONA_EQ2_B4_C_MASK 0xFFFF /* EQ2_B4_C - [15:0] */
5694#define ARIZONA_EQ2_B4_C_SHIFT 0 /* EQ2_B4_C - [15:0] */
5695#define ARIZONA_EQ2_B4_C_WIDTH 16 /* EQ2_B4_C - [15:0] */
5696
5697/*
5698 * R3638 (0xE36) - EQ2_17
5699 */
5700#define ARIZONA_EQ2_B4_PG_MASK 0xFFFF /* EQ2_B4_PG - [15:0] */
5701#define ARIZONA_EQ2_B4_PG_SHIFT 0 /* EQ2_B4_PG - [15:0] */
5702#define ARIZONA_EQ2_B4_PG_WIDTH 16 /* EQ2_B4_PG - [15:0] */
5703
5704/*
5705 * R3639 (0xE37) - EQ2_18
5706 */
5707#define ARIZONA_EQ2_B5_A_MASK 0xFFFF /* EQ2_B5_A - [15:0] */
5708#define ARIZONA_EQ2_B5_A_SHIFT 0 /* EQ2_B5_A - [15:0] */
5709#define ARIZONA_EQ2_B5_A_WIDTH 16 /* EQ2_B5_A - [15:0] */
5710
5711/*
5712 * R3640 (0xE38) - EQ2_19
5713 */
5714#define ARIZONA_EQ2_B5_B_MASK 0xFFFF /* EQ2_B5_B - [15:0] */
5715#define ARIZONA_EQ2_B5_B_SHIFT 0 /* EQ2_B5_B - [15:0] */
5716#define ARIZONA_EQ2_B5_B_WIDTH 16 /* EQ2_B5_B - [15:0] */
5717
5718/*
5719 * R3641 (0xE39) - EQ2_20
5720 */
5721#define ARIZONA_EQ2_B5_PG_MASK 0xFFFF /* EQ2_B5_PG - [15:0] */
5722#define ARIZONA_EQ2_B5_PG_SHIFT 0 /* EQ2_B5_PG - [15:0] */
5723#define ARIZONA_EQ2_B5_PG_WIDTH 16 /* EQ2_B5_PG - [15:0] */
5724
5725/*
5726 * R3642 (0xE3A) - EQ2_21
5727 */
5728#define ARIZONA_EQ2_B1_C_MASK 0xFFFF /* EQ2_B1_C - [15:0] */
5729#define ARIZONA_EQ2_B1_C_SHIFT 0 /* EQ2_B1_C - [15:0] */
5730#define ARIZONA_EQ2_B1_C_WIDTH 16 /* EQ2_B1_C - [15:0] */
5731
5732/*
5733 * R3644 (0xE3C) - EQ3_1
5734 */
5735#define ARIZONA_EQ3_B1_GAIN_MASK 0xF800 /* EQ3_B1_GAIN - [15:11] */
5736#define ARIZONA_EQ3_B1_GAIN_SHIFT 11 /* EQ3_B1_GAIN - [15:11] */
5737#define ARIZONA_EQ3_B1_GAIN_WIDTH 5 /* EQ3_B1_GAIN - [15:11] */
5738#define ARIZONA_EQ3_B2_GAIN_MASK 0x07C0 /* EQ3_B2_GAIN - [10:6] */
5739#define ARIZONA_EQ3_B2_GAIN_SHIFT 6 /* EQ3_B2_GAIN - [10:6] */
5740#define ARIZONA_EQ3_B2_GAIN_WIDTH 5 /* EQ3_B2_GAIN - [10:6] */
5741#define ARIZONA_EQ3_B3_GAIN_MASK 0x003E /* EQ3_B3_GAIN - [5:1] */
5742#define ARIZONA_EQ3_B3_GAIN_SHIFT 1 /* EQ3_B3_GAIN - [5:1] */
5743#define ARIZONA_EQ3_B3_GAIN_WIDTH 5 /* EQ3_B3_GAIN - [5:1] */
5744#define ARIZONA_EQ3_ENA 0x0001 /* EQ3_ENA */
5745#define ARIZONA_EQ3_ENA_MASK 0x0001 /* EQ3_ENA */
5746#define ARIZONA_EQ3_ENA_SHIFT 0 /* EQ3_ENA */
5747#define ARIZONA_EQ3_ENA_WIDTH 1 /* EQ3_ENA */
5748
5749/*
5750 * R3645 (0xE3D) - EQ3_2
5751 */
5752#define ARIZONA_EQ3_B4_GAIN_MASK 0xF800 /* EQ3_B4_GAIN - [15:11] */
5753#define ARIZONA_EQ3_B4_GAIN_SHIFT 11 /* EQ3_B4_GAIN - [15:11] */
5754#define ARIZONA_EQ3_B4_GAIN_WIDTH 5 /* EQ3_B4_GAIN - [15:11] */
5755#define ARIZONA_EQ3_B5_GAIN_MASK 0x07C0 /* EQ3_B5_GAIN - [10:6] */
5756#define ARIZONA_EQ3_B5_GAIN_SHIFT 6 /* EQ3_B5_GAIN - [10:6] */
5757#define ARIZONA_EQ3_B5_GAIN_WIDTH 5 /* EQ3_B5_GAIN - [10:6] */
5758#define ARIZONA_EQ3_B1_MODE 0x0001 /* EQ3_B1_MODE */
5759#define ARIZONA_EQ3_B1_MODE_MASK 0x0001 /* EQ3_B1_MODE */
5760#define ARIZONA_EQ3_B1_MODE_SHIFT 0 /* EQ3_B1_MODE */
5761#define ARIZONA_EQ3_B1_MODE_WIDTH 1 /* EQ3_B1_MODE */
5762
5763/*
5764 * R3646 (0xE3E) - EQ3_3
5765 */
5766#define ARIZONA_EQ3_B1_A_MASK 0xFFFF /* EQ3_B1_A - [15:0] */
5767#define ARIZONA_EQ3_B1_A_SHIFT 0 /* EQ3_B1_A - [15:0] */
5768#define ARIZONA_EQ3_B1_A_WIDTH 16 /* EQ3_B1_A - [15:0] */
5769
5770/*
5771 * R3647 (0xE3F) - EQ3_4
5772 */
5773#define ARIZONA_EQ3_B1_B_MASK 0xFFFF /* EQ3_B1_B - [15:0] */
5774#define ARIZONA_EQ3_B1_B_SHIFT 0 /* EQ3_B1_B - [15:0] */
5775#define ARIZONA_EQ3_B1_B_WIDTH 16 /* EQ3_B1_B - [15:0] */
5776
5777/*
5778 * R3648 (0xE40) - EQ3_5
5779 */
5780#define ARIZONA_EQ3_B1_PG_MASK 0xFFFF /* EQ3_B1_PG - [15:0] */
5781#define ARIZONA_EQ3_B1_PG_SHIFT 0 /* EQ3_B1_PG - [15:0] */
5782#define ARIZONA_EQ3_B1_PG_WIDTH 16 /* EQ3_B1_PG - [15:0] */
5783
5784/*
5785 * R3649 (0xE41) - EQ3_6
5786 */
5787#define ARIZONA_EQ3_B2_A_MASK 0xFFFF /* EQ3_B2_A - [15:0] */
5788#define ARIZONA_EQ3_B2_A_SHIFT 0 /* EQ3_B2_A - [15:0] */
5789#define ARIZONA_EQ3_B2_A_WIDTH 16 /* EQ3_B2_A - [15:0] */
5790
5791/*
5792 * R3650 (0xE42) - EQ3_7
5793 */
5794#define ARIZONA_EQ3_B2_B_MASK 0xFFFF /* EQ3_B2_B - [15:0] */
5795#define ARIZONA_EQ3_B2_B_SHIFT 0 /* EQ3_B2_B - [15:0] */
5796#define ARIZONA_EQ3_B2_B_WIDTH 16 /* EQ3_B2_B - [15:0] */
5797
5798/*
5799 * R3651 (0xE43) - EQ3_8
5800 */
5801#define ARIZONA_EQ3_B2_C_MASK 0xFFFF /* EQ3_B2_C - [15:0] */
5802#define ARIZONA_EQ3_B2_C_SHIFT 0 /* EQ3_B2_C - [15:0] */
5803#define ARIZONA_EQ3_B2_C_WIDTH 16 /* EQ3_B2_C - [15:0] */
5804
5805/*
5806 * R3652 (0xE44) - EQ3_9
5807 */
5808#define ARIZONA_EQ3_B2_PG_MASK 0xFFFF /* EQ3_B2_PG - [15:0] */
5809#define ARIZONA_EQ3_B2_PG_SHIFT 0 /* EQ3_B2_PG - [15:0] */
5810#define ARIZONA_EQ3_B2_PG_WIDTH 16 /* EQ3_B2_PG - [15:0] */
5811
5812/*
5813 * R3653 (0xE45) - EQ3_10
5814 */
5815#define ARIZONA_EQ3_B3_A_MASK 0xFFFF /* EQ3_B3_A - [15:0] */
5816#define ARIZONA_EQ3_B3_A_SHIFT 0 /* EQ3_B3_A - [15:0] */
5817#define ARIZONA_EQ3_B3_A_WIDTH 16 /* EQ3_B3_A - [15:0] */
5818
5819/*
5820 * R3654 (0xE46) - EQ3_11
5821 */
5822#define ARIZONA_EQ3_B3_B_MASK 0xFFFF /* EQ3_B3_B - [15:0] */
5823#define ARIZONA_EQ3_B3_B_SHIFT 0 /* EQ3_B3_B - [15:0] */
5824#define ARIZONA_EQ3_B3_B_WIDTH 16 /* EQ3_B3_B - [15:0] */
5825
5826/*
5827 * R3655 (0xE47) - EQ3_12
5828 */
5829#define ARIZONA_EQ3_B3_C_MASK 0xFFFF /* EQ3_B3_C - [15:0] */
5830#define ARIZONA_EQ3_B3_C_SHIFT 0 /* EQ3_B3_C - [15:0] */
5831#define ARIZONA_EQ3_B3_C_WIDTH 16 /* EQ3_B3_C - [15:0] */
5832
5833/*
5834 * R3656 (0xE48) - EQ3_13
5835 */
5836#define ARIZONA_EQ3_B3_PG_MASK 0xFFFF /* EQ3_B3_PG - [15:0] */
5837#define ARIZONA_EQ3_B3_PG_SHIFT 0 /* EQ3_B3_PG - [15:0] */
5838#define ARIZONA_EQ3_B3_PG_WIDTH 16 /* EQ3_B3_PG - [15:0] */
5839
5840/*
5841 * R3657 (0xE49) - EQ3_14
5842 */
5843#define ARIZONA_EQ3_B4_A_MASK 0xFFFF /* EQ3_B4_A - [15:0] */
5844#define ARIZONA_EQ3_B4_A_SHIFT 0 /* EQ3_B4_A - [15:0] */
5845#define ARIZONA_EQ3_B4_A_WIDTH 16 /* EQ3_B4_A - [15:0] */
5846
5847/*
5848 * R3658 (0xE4A) - EQ3_15
5849 */
5850#define ARIZONA_EQ3_B4_B_MASK 0xFFFF /* EQ3_B4_B - [15:0] */
5851#define ARIZONA_EQ3_B4_B_SHIFT 0 /* EQ3_B4_B - [15:0] */
5852#define ARIZONA_EQ3_B4_B_WIDTH 16 /* EQ3_B4_B - [15:0] */
5853
5854/*
5855 * R3659 (0xE4B) - EQ3_16
5856 */
5857#define ARIZONA_EQ3_B4_C_MASK 0xFFFF /* EQ3_B4_C - [15:0] */
5858#define ARIZONA_EQ3_B4_C_SHIFT 0 /* EQ3_B4_C - [15:0] */
5859#define ARIZONA_EQ3_B4_C_WIDTH 16 /* EQ3_B4_C - [15:0] */
5860
5861/*
5862 * R3660 (0xE4C) - EQ3_17
5863 */
5864#define ARIZONA_EQ3_B4_PG_MASK 0xFFFF /* EQ3_B4_PG - [15:0] */
5865#define ARIZONA_EQ3_B4_PG_SHIFT 0 /* EQ3_B4_PG - [15:0] */
5866#define ARIZONA_EQ3_B4_PG_WIDTH 16 /* EQ3_B4_PG - [15:0] */
5867
5868/*
5869 * R3661 (0xE4D) - EQ3_18
5870 */
5871#define ARIZONA_EQ3_B5_A_MASK 0xFFFF /* EQ3_B5_A - [15:0] */
5872#define ARIZONA_EQ3_B5_A_SHIFT 0 /* EQ3_B5_A - [15:0] */
5873#define ARIZONA_EQ3_B5_A_WIDTH 16 /* EQ3_B5_A - [15:0] */
5874
5875/*
5876 * R3662 (0xE4E) - EQ3_19
5877 */
5878#define ARIZONA_EQ3_B5_B_MASK 0xFFFF /* EQ3_B5_B - [15:0] */
5879#define ARIZONA_EQ3_B5_B_SHIFT 0 /* EQ3_B5_B - [15:0] */
5880#define ARIZONA_EQ3_B5_B_WIDTH 16 /* EQ3_B5_B - [15:0] */
5881
5882/*
5883 * R3663 (0xE4F) - EQ3_20
5884 */
5885#define ARIZONA_EQ3_B5_PG_MASK 0xFFFF /* EQ3_B5_PG - [15:0] */
5886#define ARIZONA_EQ3_B5_PG_SHIFT 0 /* EQ3_B5_PG - [15:0] */
5887#define ARIZONA_EQ3_B5_PG_WIDTH 16 /* EQ3_B5_PG - [15:0] */
5888
5889/*
5890 * R3664 (0xE50) - EQ3_21
5891 */
5892#define ARIZONA_EQ3_B1_C_MASK 0xFFFF /* EQ3_B1_C - [15:0] */
5893#define ARIZONA_EQ3_B1_C_SHIFT 0 /* EQ3_B1_C - [15:0] */
5894#define ARIZONA_EQ3_B1_C_WIDTH 16 /* EQ3_B1_C - [15:0] */
5895
5896/*
5897 * R3666 (0xE52) - EQ4_1
5898 */
5899#define ARIZONA_EQ4_B1_GAIN_MASK 0xF800 /* EQ4_B1_GAIN - [15:11] */
5900#define ARIZONA_EQ4_B1_GAIN_SHIFT 11 /* EQ4_B1_GAIN - [15:11] */
5901#define ARIZONA_EQ4_B1_GAIN_WIDTH 5 /* EQ4_B1_GAIN - [15:11] */
5902#define ARIZONA_EQ4_B2_GAIN_MASK 0x07C0 /* EQ4_B2_GAIN - [10:6] */
5903#define ARIZONA_EQ4_B2_GAIN_SHIFT 6 /* EQ4_B2_GAIN - [10:6] */
5904#define ARIZONA_EQ4_B2_GAIN_WIDTH 5 /* EQ4_B2_GAIN - [10:6] */
5905#define ARIZONA_EQ4_B3_GAIN_MASK 0x003E /* EQ4_B3_GAIN - [5:1] */
5906#define ARIZONA_EQ4_B3_GAIN_SHIFT 1 /* EQ4_B3_GAIN - [5:1] */
5907#define ARIZONA_EQ4_B3_GAIN_WIDTH 5 /* EQ4_B3_GAIN - [5:1] */
5908#define ARIZONA_EQ4_ENA 0x0001 /* EQ4_ENA */
5909#define ARIZONA_EQ4_ENA_MASK 0x0001 /* EQ4_ENA */
5910#define ARIZONA_EQ4_ENA_SHIFT 0 /* EQ4_ENA */
5911#define ARIZONA_EQ4_ENA_WIDTH 1 /* EQ4_ENA */
5912
5913/*
5914 * R3667 (0xE53) - EQ4_2
5915 */
5916#define ARIZONA_EQ4_B4_GAIN_MASK 0xF800 /* EQ4_B4_GAIN - [15:11] */
5917#define ARIZONA_EQ4_B4_GAIN_SHIFT 11 /* EQ4_B4_GAIN - [15:11] */
5918#define ARIZONA_EQ4_B4_GAIN_WIDTH 5 /* EQ4_B4_GAIN - [15:11] */
5919#define ARIZONA_EQ4_B5_GAIN_MASK 0x07C0 /* EQ4_B5_GAIN - [10:6] */
5920#define ARIZONA_EQ4_B5_GAIN_SHIFT 6 /* EQ4_B5_GAIN - [10:6] */
5921#define ARIZONA_EQ4_B5_GAIN_WIDTH 5 /* EQ4_B5_GAIN - [10:6] */
5922#define ARIZONA_EQ4_B1_MODE 0x0001 /* EQ4_B1_MODE */
5923#define ARIZONA_EQ4_B1_MODE_MASK 0x0001 /* EQ4_B1_MODE */
5924#define ARIZONA_EQ4_B1_MODE_SHIFT 0 /* EQ4_B1_MODE */
5925#define ARIZONA_EQ4_B1_MODE_WIDTH 1 /* EQ4_B1_MODE */
5926
5927/*
5928 * R3668 (0xE54) - EQ4_3
5929 */
5930#define ARIZONA_EQ4_B1_A_MASK 0xFFFF /* EQ4_B1_A - [15:0] */
5931#define ARIZONA_EQ4_B1_A_SHIFT 0 /* EQ4_B1_A - [15:0] */
5932#define ARIZONA_EQ4_B1_A_WIDTH 16 /* EQ4_B1_A - [15:0] */
5933
5934/*
5935 * R3669 (0xE55) - EQ4_4
5936 */
5937#define ARIZONA_EQ4_B1_B_MASK 0xFFFF /* EQ4_B1_B - [15:0] */
5938#define ARIZONA_EQ4_B1_B_SHIFT 0 /* EQ4_B1_B - [15:0] */
5939#define ARIZONA_EQ4_B1_B_WIDTH 16 /* EQ4_B1_B - [15:0] */
5940
5941/*
5942 * R3670 (0xE56) - EQ4_5
5943 */
5944#define ARIZONA_EQ4_B1_PG_MASK 0xFFFF /* EQ4_B1_PG - [15:0] */
5945#define ARIZONA_EQ4_B1_PG_SHIFT 0 /* EQ4_B1_PG - [15:0] */
5946#define ARIZONA_EQ4_B1_PG_WIDTH 16 /* EQ4_B1_PG - [15:0] */
5947
5948/*
5949 * R3671 (0xE57) - EQ4_6
5950 */
5951#define ARIZONA_EQ4_B2_A_MASK 0xFFFF /* EQ4_B2_A - [15:0] */
5952#define ARIZONA_EQ4_B2_A_SHIFT 0 /* EQ4_B2_A - [15:0] */
5953#define ARIZONA_EQ4_B2_A_WIDTH 16 /* EQ4_B2_A - [15:0] */
5954
5955/*
5956 * R3672 (0xE58) - EQ4_7
5957 */
5958#define ARIZONA_EQ4_B2_B_MASK 0xFFFF /* EQ4_B2_B - [15:0] */
5959#define ARIZONA_EQ4_B2_B_SHIFT 0 /* EQ4_B2_B - [15:0] */
5960#define ARIZONA_EQ4_B2_B_WIDTH 16 /* EQ4_B2_B - [15:0] */
5961
5962/*
5963 * R3673 (0xE59) - EQ4_8
5964 */
5965#define ARIZONA_EQ4_B2_C_MASK 0xFFFF /* EQ4_B2_C - [15:0] */
5966#define ARIZONA_EQ4_B2_C_SHIFT 0 /* EQ4_B2_C - [15:0] */
5967#define ARIZONA_EQ4_B2_C_WIDTH 16 /* EQ4_B2_C - [15:0] */
5968
5969/*
5970 * R3674 (0xE5A) - EQ4_9
5971 */
5972#define ARIZONA_EQ4_B2_PG_MASK 0xFFFF /* EQ4_B2_PG - [15:0] */
5973#define ARIZONA_EQ4_B2_PG_SHIFT 0 /* EQ4_B2_PG - [15:0] */
5974#define ARIZONA_EQ4_B2_PG_WIDTH 16 /* EQ4_B2_PG - [15:0] */
5975
5976/*
5977 * R3675 (0xE5B) - EQ4_10
5978 */
5979#define ARIZONA_EQ4_B3_A_MASK 0xFFFF /* EQ4_B3_A - [15:0] */
5980#define ARIZONA_EQ4_B3_A_SHIFT 0 /* EQ4_B3_A - [15:0] */
5981#define ARIZONA_EQ4_B3_A_WIDTH 16 /* EQ4_B3_A - [15:0] */
5982
5983/*
5984 * R3676 (0xE5C) - EQ4_11
5985 */
5986#define ARIZONA_EQ4_B3_B_MASK 0xFFFF /* EQ4_B3_B - [15:0] */
5987#define ARIZONA_EQ4_B3_B_SHIFT 0 /* EQ4_B3_B - [15:0] */
5988#define ARIZONA_EQ4_B3_B_WIDTH 16 /* EQ4_B3_B - [15:0] */
5989
5990/*
5991 * R3677 (0xE5D) - EQ4_12
5992 */
5993#define ARIZONA_EQ4_B3_C_MASK 0xFFFF /* EQ4_B3_C - [15:0] */
5994#define ARIZONA_EQ4_B3_C_SHIFT 0 /* EQ4_B3_C - [15:0] */
5995#define ARIZONA_EQ4_B3_C_WIDTH 16 /* EQ4_B3_C - [15:0] */
5996
5997/*
5998 * R3678 (0xE5E) - EQ4_13
5999 */
6000#define ARIZONA_EQ4_B3_PG_MASK 0xFFFF /* EQ4_B3_PG - [15:0] */
6001#define ARIZONA_EQ4_B3_PG_SHIFT 0 /* EQ4_B3_PG - [15:0] */
6002#define ARIZONA_EQ4_B3_PG_WIDTH 16 /* EQ4_B3_PG - [15:0] */
6003
6004/*
6005 * R3679 (0xE5F) - EQ4_14
6006 */
6007#define ARIZONA_EQ4_B4_A_MASK 0xFFFF /* EQ4_B4_A - [15:0] */
6008#define ARIZONA_EQ4_B4_A_SHIFT 0 /* EQ4_B4_A - [15:0] */
6009#define ARIZONA_EQ4_B4_A_WIDTH 16 /* EQ4_B4_A - [15:0] */
6010
6011/*
6012 * R3680 (0xE60) - EQ4_15
6013 */
6014#define ARIZONA_EQ4_B4_B_MASK 0xFFFF /* EQ4_B4_B - [15:0] */
6015#define ARIZONA_EQ4_B4_B_SHIFT 0 /* EQ4_B4_B - [15:0] */
6016#define ARIZONA_EQ4_B4_B_WIDTH 16 /* EQ4_B4_B - [15:0] */
6017
6018/*
6019 * R3681 (0xE61) - EQ4_16
6020 */
6021#define ARIZONA_EQ4_B4_C_MASK 0xFFFF /* EQ4_B4_C - [15:0] */
6022#define ARIZONA_EQ4_B4_C_SHIFT 0 /* EQ4_B4_C - [15:0] */
6023#define ARIZONA_EQ4_B4_C_WIDTH 16 /* EQ4_B4_C - [15:0] */
6024
6025/*
6026 * R3682 (0xE62) - EQ4_17
6027 */
6028#define ARIZONA_EQ4_B4_PG_MASK 0xFFFF /* EQ4_B4_PG - [15:0] */
6029#define ARIZONA_EQ4_B4_PG_SHIFT 0 /* EQ4_B4_PG - [15:0] */
6030#define ARIZONA_EQ4_B4_PG_WIDTH 16 /* EQ4_B4_PG - [15:0] */
6031
6032/*
6033 * R3683 (0xE63) - EQ4_18
6034 */
6035#define ARIZONA_EQ4_B5_A_MASK 0xFFFF /* EQ4_B5_A - [15:0] */
6036#define ARIZONA_EQ4_B5_A_SHIFT 0 /* EQ4_B5_A - [15:0] */
6037#define ARIZONA_EQ4_B5_A_WIDTH 16 /* EQ4_B5_A - [15:0] */
6038
6039/*
6040 * R3684 (0xE64) - EQ4_19
6041 */
6042#define ARIZONA_EQ4_B5_B_MASK 0xFFFF /* EQ4_B5_B - [15:0] */
6043#define ARIZONA_EQ4_B5_B_SHIFT 0 /* EQ4_B5_B - [15:0] */
6044#define ARIZONA_EQ4_B5_B_WIDTH 16 /* EQ4_B5_B - [15:0] */
6045
6046/*
6047 * R3685 (0xE65) - EQ4_20
6048 */
6049#define ARIZONA_EQ4_B5_PG_MASK 0xFFFF /* EQ4_B5_PG - [15:0] */
6050#define ARIZONA_EQ4_B5_PG_SHIFT 0 /* EQ4_B5_PG - [15:0] */
6051#define ARIZONA_EQ4_B5_PG_WIDTH 16 /* EQ4_B5_PG - [15:0] */
6052
6053/*
6054 * R3686 (0xE66) - EQ4_21
6055 */
6056#define ARIZONA_EQ4_B1_C_MASK 0xFFFF /* EQ4_B1_C - [15:0] */
6057#define ARIZONA_EQ4_B1_C_SHIFT 0 /* EQ4_B1_C - [15:0] */
6058#define ARIZONA_EQ4_B1_C_WIDTH 16 /* EQ4_B1_C - [15:0] */
6059
6060/*
6061 * R3712 (0xE80) - DRC1 ctrl1
6062 */
6063#define ARIZONA_DRC1_SIG_DET_RMS_MASK 0xF800 /* DRC1_SIG_DET_RMS - [15:11] */
6064#define ARIZONA_DRC1_SIG_DET_RMS_SHIFT 11 /* DRC1_SIG_DET_RMS - [15:11] */
6065#define ARIZONA_DRC1_SIG_DET_RMS_WIDTH 5 /* DRC1_SIG_DET_RMS - [15:11] */
6066#define ARIZONA_DRC1_SIG_DET_PK_MASK 0x0600 /* DRC1_SIG_DET_PK - [10:9] */
6067#define ARIZONA_DRC1_SIG_DET_PK_SHIFT 9 /* DRC1_SIG_DET_PK - [10:9] */
6068#define ARIZONA_DRC1_SIG_DET_PK_WIDTH 2 /* DRC1_SIG_DET_PK - [10:9] */
6069#define ARIZONA_DRC1_NG_ENA 0x0100 /* DRC1_NG_ENA */
6070#define ARIZONA_DRC1_NG_ENA_MASK 0x0100 /* DRC1_NG_ENA */
6071#define ARIZONA_DRC1_NG_ENA_SHIFT 8 /* DRC1_NG_ENA */
6072#define ARIZONA_DRC1_NG_ENA_WIDTH 1 /* DRC1_NG_ENA */
6073#define ARIZONA_DRC1_SIG_DET_MODE 0x0080 /* DRC1_SIG_DET_MODE */
6074#define ARIZONA_DRC1_SIG_DET_MODE_MASK 0x0080 /* DRC1_SIG_DET_MODE */
6075#define ARIZONA_DRC1_SIG_DET_MODE_SHIFT 7 /* DRC1_SIG_DET_MODE */
6076#define ARIZONA_DRC1_SIG_DET_MODE_WIDTH 1 /* DRC1_SIG_DET_MODE */
6077#define ARIZONA_DRC1_SIG_DET 0x0040 /* DRC1_SIG_DET */
6078#define ARIZONA_DRC1_SIG_DET_MASK 0x0040 /* DRC1_SIG_DET */
6079#define ARIZONA_DRC1_SIG_DET_SHIFT 6 /* DRC1_SIG_DET */
6080#define ARIZONA_DRC1_SIG_DET_WIDTH 1 /* DRC1_SIG_DET */
6081#define ARIZONA_DRC1_KNEE2_OP_ENA 0x0020 /* DRC1_KNEE2_OP_ENA */
6082#define ARIZONA_DRC1_KNEE2_OP_ENA_MASK 0x0020 /* DRC1_KNEE2_OP_ENA */
6083#define ARIZONA_DRC1_KNEE2_OP_ENA_SHIFT 5 /* DRC1_KNEE2_OP_ENA */
6084#define ARIZONA_DRC1_KNEE2_OP_ENA_WIDTH 1 /* DRC1_KNEE2_OP_ENA */
6085#define ARIZONA_DRC1_QR 0x0010 /* DRC1_QR */
6086#define ARIZONA_DRC1_QR_MASK 0x0010 /* DRC1_QR */
6087#define ARIZONA_DRC1_QR_SHIFT 4 /* DRC1_QR */
6088#define ARIZONA_DRC1_QR_WIDTH 1 /* DRC1_QR */
6089#define ARIZONA_DRC1_ANTICLIP 0x0008 /* DRC1_ANTICLIP */
6090#define ARIZONA_DRC1_ANTICLIP_MASK 0x0008 /* DRC1_ANTICLIP */
6091#define ARIZONA_DRC1_ANTICLIP_SHIFT 3 /* DRC1_ANTICLIP */
6092#define ARIZONA_DRC1_ANTICLIP_WIDTH 1 /* DRC1_ANTICLIP */
6093#define ARIZONA_DRC1L_ENA 0x0002 /* DRC1L_ENA */
6094#define ARIZONA_DRC1L_ENA_MASK 0x0002 /* DRC1L_ENA */
6095#define ARIZONA_DRC1L_ENA_SHIFT 1 /* DRC1L_ENA */
6096#define ARIZONA_DRC1L_ENA_WIDTH 1 /* DRC1L_ENA */
6097#define ARIZONA_DRC1R_ENA 0x0001 /* DRC1R_ENA */
6098#define ARIZONA_DRC1R_ENA_MASK 0x0001 /* DRC1R_ENA */
6099#define ARIZONA_DRC1R_ENA_SHIFT 0 /* DRC1R_ENA */
6100#define ARIZONA_DRC1R_ENA_WIDTH 1 /* DRC1R_ENA */
6101
6102/*
6103 * R3713 (0xE81) - DRC1 ctrl2
6104 */
6105#define ARIZONA_DRC1_ATK_MASK 0x1E00 /* DRC1_ATK - [12:9] */
6106#define ARIZONA_DRC1_ATK_SHIFT 9 /* DRC1_ATK - [12:9] */
6107#define ARIZONA_DRC1_ATK_WIDTH 4 /* DRC1_ATK - [12:9] */
6108#define ARIZONA_DRC1_DCY_MASK 0x01E0 /* DRC1_DCY - [8:5] */
6109#define ARIZONA_DRC1_DCY_SHIFT 5 /* DRC1_DCY - [8:5] */
6110#define ARIZONA_DRC1_DCY_WIDTH 4 /* DRC1_DCY - [8:5] */
6111#define ARIZONA_DRC1_MINGAIN_MASK 0x001C /* DRC1_MINGAIN - [4:2] */
6112#define ARIZONA_DRC1_MINGAIN_SHIFT 2 /* DRC1_MINGAIN - [4:2] */
6113#define ARIZONA_DRC1_MINGAIN_WIDTH 3 /* DRC1_MINGAIN - [4:2] */
6114#define ARIZONA_DRC1_MAXGAIN_MASK 0x0003 /* DRC1_MAXGAIN - [1:0] */
6115#define ARIZONA_DRC1_MAXGAIN_SHIFT 0 /* DRC1_MAXGAIN - [1:0] */
6116#define ARIZONA_DRC1_MAXGAIN_WIDTH 2 /* DRC1_MAXGAIN - [1:0] */
6117
6118/*
6119 * R3714 (0xE82) - DRC1 ctrl3
6120 */
6121#define ARIZONA_DRC1_NG_MINGAIN_MASK 0xF000 /* DRC1_NG_MINGAIN - [15:12] */
6122#define ARIZONA_DRC1_NG_MINGAIN_SHIFT 12 /* DRC1_NG_MINGAIN - [15:12] */
6123#define ARIZONA_DRC1_NG_MINGAIN_WIDTH 4 /* DRC1_NG_MINGAIN - [15:12] */
6124#define ARIZONA_DRC1_NG_EXP_MASK 0x0C00 /* DRC1_NG_EXP - [11:10] */
6125#define ARIZONA_DRC1_NG_EXP_SHIFT 10 /* DRC1_NG_EXP - [11:10] */
6126#define ARIZONA_DRC1_NG_EXP_WIDTH 2 /* DRC1_NG_EXP - [11:10] */
6127#define ARIZONA_DRC1_QR_THR_MASK 0x0300 /* DRC1_QR_THR - [9:8] */
6128#define ARIZONA_DRC1_QR_THR_SHIFT 8 /* DRC1_QR_THR - [9:8] */
6129#define ARIZONA_DRC1_QR_THR_WIDTH 2 /* DRC1_QR_THR - [9:8] */
6130#define ARIZONA_DRC1_QR_DCY_MASK 0x00C0 /* DRC1_QR_DCY - [7:6] */
6131#define ARIZONA_DRC1_QR_DCY_SHIFT 6 /* DRC1_QR_DCY - [7:6] */
6132#define ARIZONA_DRC1_QR_DCY_WIDTH 2 /* DRC1_QR_DCY - [7:6] */
6133#define ARIZONA_DRC1_HI_COMP_MASK 0x0038 /* DRC1_HI_COMP - [5:3] */
6134#define ARIZONA_DRC1_HI_COMP_SHIFT 3 /* DRC1_HI_COMP - [5:3] */
6135#define ARIZONA_DRC1_HI_COMP_WIDTH 3 /* DRC1_HI_COMP - [5:3] */
6136#define ARIZONA_DRC1_LO_COMP_MASK 0x0007 /* DRC1_LO_COMP - [2:0] */
6137#define ARIZONA_DRC1_LO_COMP_SHIFT 0 /* DRC1_LO_COMP - [2:0] */
6138#define ARIZONA_DRC1_LO_COMP_WIDTH 3 /* DRC1_LO_COMP - [2:0] */
6139
6140/*
6141 * R3715 (0xE83) - DRC1 ctrl4
6142 */
6143#define ARIZONA_DRC1_KNEE_IP_MASK 0x07E0 /* DRC1_KNEE_IP - [10:5] */
6144#define ARIZONA_DRC1_KNEE_IP_SHIFT 5 /* DRC1_KNEE_IP - [10:5] */
6145#define ARIZONA_DRC1_KNEE_IP_WIDTH 6 /* DRC1_KNEE_IP - [10:5] */
6146#define ARIZONA_DRC1_KNEE_OP_MASK 0x001F /* DRC1_KNEE_OP - [4:0] */
6147#define ARIZONA_DRC1_KNEE_OP_SHIFT 0 /* DRC1_KNEE_OP - [4:0] */
6148#define ARIZONA_DRC1_KNEE_OP_WIDTH 5 /* DRC1_KNEE_OP - [4:0] */
6149
6150/*
6151 * R3716 (0xE84) - DRC1 ctrl5
6152 */
6153#define ARIZONA_DRC1_KNEE2_IP_MASK 0x03E0 /* DRC1_KNEE2_IP - [9:5] */
6154#define ARIZONA_DRC1_KNEE2_IP_SHIFT 5 /* DRC1_KNEE2_IP - [9:5] */
6155#define ARIZONA_DRC1_KNEE2_IP_WIDTH 5 /* DRC1_KNEE2_IP - [9:5] */
6156#define ARIZONA_DRC1_KNEE2_OP_MASK 0x001F /* DRC1_KNEE2_OP - [4:0] */
6157#define ARIZONA_DRC1_KNEE2_OP_SHIFT 0 /* DRC1_KNEE2_OP - [4:0] */
6158#define ARIZONA_DRC1_KNEE2_OP_WIDTH 5 /* DRC1_KNEE2_OP - [4:0] */
6159
6160/*
6161 * R3721 (0xE89) - DRC2 ctrl1
6162 */
6163#define ARIZONA_DRC2_SIG_DET_RMS_MASK 0xF800 /* DRC2_SIG_DET_RMS - [15:11] */
6164#define ARIZONA_DRC2_SIG_DET_RMS_SHIFT 11 /* DRC2_SIG_DET_RMS - [15:11] */
6165#define ARIZONA_DRC2_SIG_DET_RMS_WIDTH 5 /* DRC2_SIG_DET_RMS - [15:11] */
6166#define ARIZONA_DRC2_SIG_DET_PK_MASK 0x0600 /* DRC2_SIG_DET_PK - [10:9] */
6167#define ARIZONA_DRC2_SIG_DET_PK_SHIFT 9 /* DRC2_SIG_DET_PK - [10:9] */
6168#define ARIZONA_DRC2_SIG_DET_PK_WIDTH 2 /* DRC2_SIG_DET_PK - [10:9] */
6169#define ARIZONA_DRC2_NG_ENA 0x0100 /* DRC2_NG_ENA */
6170#define ARIZONA_DRC2_NG_ENA_MASK 0x0100 /* DRC2_NG_ENA */
6171#define ARIZONA_DRC2_NG_ENA_SHIFT 8 /* DRC2_NG_ENA */
6172#define ARIZONA_DRC2_NG_ENA_WIDTH 1 /* DRC2_NG_ENA */
6173#define ARIZONA_DRC2_SIG_DET_MODE 0x0080 /* DRC2_SIG_DET_MODE */
6174#define ARIZONA_DRC2_SIG_DET_MODE_MASK 0x0080 /* DRC2_SIG_DET_MODE */
6175#define ARIZONA_DRC2_SIG_DET_MODE_SHIFT 7 /* DRC2_SIG_DET_MODE */
6176#define ARIZONA_DRC2_SIG_DET_MODE_WIDTH 1 /* DRC2_SIG_DET_MODE */
6177#define ARIZONA_DRC2_SIG_DET 0x0040 /* DRC2_SIG_DET */
6178#define ARIZONA_DRC2_SIG_DET_MASK 0x0040 /* DRC2_SIG_DET */
6179#define ARIZONA_DRC2_SIG_DET_SHIFT 6 /* DRC2_SIG_DET */
6180#define ARIZONA_DRC2_SIG_DET_WIDTH 1 /* DRC2_SIG_DET */
6181#define ARIZONA_DRC2_KNEE2_OP_ENA 0x0020 /* DRC2_KNEE2_OP_ENA */
6182#define ARIZONA_DRC2_KNEE2_OP_ENA_MASK 0x0020 /* DRC2_KNEE2_OP_ENA */
6183#define ARIZONA_DRC2_KNEE2_OP_ENA_SHIFT 5 /* DRC2_KNEE2_OP_ENA */
6184#define ARIZONA_DRC2_KNEE2_OP_ENA_WIDTH 1 /* DRC2_KNEE2_OP_ENA */
6185#define ARIZONA_DRC2_QR 0x0010 /* DRC2_QR */
6186#define ARIZONA_DRC2_QR_MASK 0x0010 /* DRC2_QR */
6187#define ARIZONA_DRC2_QR_SHIFT 4 /* DRC2_QR */
6188#define ARIZONA_DRC2_QR_WIDTH 1 /* DRC2_QR */
6189#define ARIZONA_DRC2_ANTICLIP 0x0008 /* DRC2_ANTICLIP */
6190#define ARIZONA_DRC2_ANTICLIP_MASK 0x0008 /* DRC2_ANTICLIP */
6191#define ARIZONA_DRC2_ANTICLIP_SHIFT 3 /* DRC2_ANTICLIP */
6192#define ARIZONA_DRC2_ANTICLIP_WIDTH 1 /* DRC2_ANTICLIP */
6193#define ARIZONA_DRC2L_ENA 0x0002 /* DRC2L_ENA */
6194#define ARIZONA_DRC2L_ENA_MASK 0x0002 /* DRC2L_ENA */
6195#define ARIZONA_DRC2L_ENA_SHIFT 1 /* DRC2L_ENA */
6196#define ARIZONA_DRC2L_ENA_WIDTH 1 /* DRC2L_ENA */
6197#define ARIZONA_DRC2R_ENA 0x0001 /* DRC2R_ENA */
6198#define ARIZONA_DRC2R_ENA_MASK 0x0001 /* DRC2R_ENA */
6199#define ARIZONA_DRC2R_ENA_SHIFT 0 /* DRC2R_ENA */
6200#define ARIZONA_DRC2R_ENA_WIDTH 1 /* DRC2R_ENA */
6201
6202/*
6203 * R3722 (0xE8A) - DRC2 ctrl2
6204 */
6205#define ARIZONA_DRC2_ATK_MASK 0x1E00 /* DRC2_ATK - [12:9] */
6206#define ARIZONA_DRC2_ATK_SHIFT 9 /* DRC2_ATK - [12:9] */
6207#define ARIZONA_DRC2_ATK_WIDTH 4 /* DRC2_ATK - [12:9] */
6208#define ARIZONA_DRC2_DCY_MASK 0x01E0 /* DRC2_DCY - [8:5] */
6209#define ARIZONA_DRC2_DCY_SHIFT 5 /* DRC2_DCY - [8:5] */
6210#define ARIZONA_DRC2_DCY_WIDTH 4 /* DRC2_DCY - [8:5] */
6211#define ARIZONA_DRC2_MINGAIN_MASK 0x001C /* DRC2_MINGAIN - [4:2] */
6212#define ARIZONA_DRC2_MINGAIN_SHIFT 2 /* DRC2_MINGAIN - [4:2] */
6213#define ARIZONA_DRC2_MINGAIN_WIDTH 3 /* DRC2_MINGAIN - [4:2] */
6214#define ARIZONA_DRC2_MAXGAIN_MASK 0x0003 /* DRC2_MAXGAIN - [1:0] */
6215#define ARIZONA_DRC2_MAXGAIN_SHIFT 0 /* DRC2_MAXGAIN - [1:0] */
6216#define ARIZONA_DRC2_MAXGAIN_WIDTH 2 /* DRC2_MAXGAIN - [1:0] */
6217
6218/*
6219 * R3723 (0xE8B) - DRC2 ctrl3
6220 */
6221#define ARIZONA_DRC2_NG_MINGAIN_MASK 0xF000 /* DRC2_NG_MINGAIN - [15:12] */
6222#define ARIZONA_DRC2_NG_MINGAIN_SHIFT 12 /* DRC2_NG_MINGAIN - [15:12] */
6223#define ARIZONA_DRC2_NG_MINGAIN_WIDTH 4 /* DRC2_NG_MINGAIN - [15:12] */
6224#define ARIZONA_DRC2_NG_EXP_MASK 0x0C00 /* DRC2_NG_EXP - [11:10] */
6225#define ARIZONA_DRC2_NG_EXP_SHIFT 10 /* DRC2_NG_EXP - [11:10] */
6226#define ARIZONA_DRC2_NG_EXP_WIDTH 2 /* DRC2_NG_EXP - [11:10] */
6227#define ARIZONA_DRC2_QR_THR_MASK 0x0300 /* DRC2_QR_THR - [9:8] */
6228#define ARIZONA_DRC2_QR_THR_SHIFT 8 /* DRC2_QR_THR - [9:8] */
6229#define ARIZONA_DRC2_QR_THR_WIDTH 2 /* DRC2_QR_THR - [9:8] */
6230#define ARIZONA_DRC2_QR_DCY_MASK 0x00C0 /* DRC2_QR_DCY - [7:6] */
6231#define ARIZONA_DRC2_QR_DCY_SHIFT 6 /* DRC2_QR_DCY - [7:6] */
6232#define ARIZONA_DRC2_QR_DCY_WIDTH 2 /* DRC2_QR_DCY - [7:6] */
6233#define ARIZONA_DRC2_HI_COMP_MASK 0x0038 /* DRC2_HI_COMP - [5:3] */
6234#define ARIZONA_DRC2_HI_COMP_SHIFT 3 /* DRC2_HI_COMP - [5:3] */
6235#define ARIZONA_DRC2_HI_COMP_WIDTH 3 /* DRC2_HI_COMP - [5:3] */
6236#define ARIZONA_DRC2_LO_COMP_MASK 0x0007 /* DRC2_LO_COMP - [2:0] */
6237#define ARIZONA_DRC2_LO_COMP_SHIFT 0 /* DRC2_LO_COMP - [2:0] */
6238#define ARIZONA_DRC2_LO_COMP_WIDTH 3 /* DRC2_LO_COMP - [2:0] */
6239
6240/*
6241 * R3724 (0xE8C) - DRC2 ctrl4
6242 */
6243#define ARIZONA_DRC2_KNEE_IP_MASK 0x07E0 /* DRC2_KNEE_IP - [10:5] */
6244#define ARIZONA_DRC2_KNEE_IP_SHIFT 5 /* DRC2_KNEE_IP - [10:5] */
6245#define ARIZONA_DRC2_KNEE_IP_WIDTH 6 /* DRC2_KNEE_IP - [10:5] */
6246#define ARIZONA_DRC2_KNEE_OP_MASK 0x001F /* DRC2_KNEE_OP - [4:0] */
6247#define ARIZONA_DRC2_KNEE_OP_SHIFT 0 /* DRC2_KNEE_OP - [4:0] */
6248#define ARIZONA_DRC2_KNEE_OP_WIDTH 5 /* DRC2_KNEE_OP - [4:0] */
6249
6250/*
6251 * R3725 (0xE8D) - DRC2 ctrl5
6252 */
6253#define ARIZONA_DRC2_KNEE2_IP_MASK 0x03E0 /* DRC2_KNEE2_IP - [9:5] */
6254#define ARIZONA_DRC2_KNEE2_IP_SHIFT 5 /* DRC2_KNEE2_IP - [9:5] */
6255#define ARIZONA_DRC2_KNEE2_IP_WIDTH 5 /* DRC2_KNEE2_IP - [9:5] */
6256#define ARIZONA_DRC2_KNEE2_OP_MASK 0x001F /* DRC2_KNEE2_OP - [4:0] */
6257#define ARIZONA_DRC2_KNEE2_OP_SHIFT 0 /* DRC2_KNEE2_OP - [4:0] */
6258#define ARIZONA_DRC2_KNEE2_OP_WIDTH 5 /* DRC2_KNEE2_OP - [4:0] */
6259
6260/*
6261 * R3776 (0xEC0) - HPLPF1_1
6262 */
6263#define ARIZONA_LHPF1_MODE 0x0002 /* LHPF1_MODE */
6264#define ARIZONA_LHPF1_MODE_MASK 0x0002 /* LHPF1_MODE */
6265#define ARIZONA_LHPF1_MODE_SHIFT 1 /* LHPF1_MODE */
6266#define ARIZONA_LHPF1_MODE_WIDTH 1 /* LHPF1_MODE */
6267#define ARIZONA_LHPF1_ENA 0x0001 /* LHPF1_ENA */
6268#define ARIZONA_LHPF1_ENA_MASK 0x0001 /* LHPF1_ENA */
6269#define ARIZONA_LHPF1_ENA_SHIFT 0 /* LHPF1_ENA */
6270#define ARIZONA_LHPF1_ENA_WIDTH 1 /* LHPF1_ENA */
6271
6272/*
6273 * R3777 (0xEC1) - HPLPF1_2
6274 */
6275#define ARIZONA_LHPF1_COEFF_MASK 0xFFFF /* LHPF1_COEFF - [15:0] */
6276#define ARIZONA_LHPF1_COEFF_SHIFT 0 /* LHPF1_COEFF - [15:0] */
6277#define ARIZONA_LHPF1_COEFF_WIDTH 16 /* LHPF1_COEFF - [15:0] */
6278
6279/*
6280 * R3780 (0xEC4) - HPLPF2_1
6281 */
6282#define ARIZONA_LHPF2_MODE 0x0002 /* LHPF2_MODE */
6283#define ARIZONA_LHPF2_MODE_MASK 0x0002 /* LHPF2_MODE */
6284#define ARIZONA_LHPF2_MODE_SHIFT 1 /* LHPF2_MODE */
6285#define ARIZONA_LHPF2_MODE_WIDTH 1 /* LHPF2_MODE */
6286#define ARIZONA_LHPF2_ENA 0x0001 /* LHPF2_ENA */
6287#define ARIZONA_LHPF2_ENA_MASK 0x0001 /* LHPF2_ENA */
6288#define ARIZONA_LHPF2_ENA_SHIFT 0 /* LHPF2_ENA */
6289#define ARIZONA_LHPF2_ENA_WIDTH 1 /* LHPF2_ENA */
6290
6291/*
6292 * R3781 (0xEC5) - HPLPF2_2
6293 */
6294#define ARIZONA_LHPF2_COEFF_MASK 0xFFFF /* LHPF2_COEFF - [15:0] */
6295#define ARIZONA_LHPF2_COEFF_SHIFT 0 /* LHPF2_COEFF - [15:0] */
6296#define ARIZONA_LHPF2_COEFF_WIDTH 16 /* LHPF2_COEFF - [15:0] */
6297
6298/*
6299 * R3784 (0xEC8) - HPLPF3_1
6300 */
6301#define ARIZONA_LHPF3_MODE 0x0002 /* LHPF3_MODE */
6302#define ARIZONA_LHPF3_MODE_MASK 0x0002 /* LHPF3_MODE */
6303#define ARIZONA_LHPF3_MODE_SHIFT 1 /* LHPF3_MODE */
6304#define ARIZONA_LHPF3_MODE_WIDTH 1 /* LHPF3_MODE */
6305#define ARIZONA_LHPF3_ENA 0x0001 /* LHPF3_ENA */
6306#define ARIZONA_LHPF3_ENA_MASK 0x0001 /* LHPF3_ENA */
6307#define ARIZONA_LHPF3_ENA_SHIFT 0 /* LHPF3_ENA */
6308#define ARIZONA_LHPF3_ENA_WIDTH 1 /* LHPF3_ENA */
6309
6310/*
6311 * R3785 (0xEC9) - HPLPF3_2
6312 */
6313#define ARIZONA_LHPF3_COEFF_MASK 0xFFFF /* LHPF3_COEFF - [15:0] */
6314#define ARIZONA_LHPF3_COEFF_SHIFT 0 /* LHPF3_COEFF - [15:0] */
6315#define ARIZONA_LHPF3_COEFF_WIDTH 16 /* LHPF3_COEFF - [15:0] */
6316
6317/*
6318 * R3788 (0xECC) - HPLPF4_1
6319 */
6320#define ARIZONA_LHPF4_MODE 0x0002 /* LHPF4_MODE */
6321#define ARIZONA_LHPF4_MODE_MASK 0x0002 /* LHPF4_MODE */
6322#define ARIZONA_LHPF4_MODE_SHIFT 1 /* LHPF4_MODE */
6323#define ARIZONA_LHPF4_MODE_WIDTH 1 /* LHPF4_MODE */
6324#define ARIZONA_LHPF4_ENA 0x0001 /* LHPF4_ENA */
6325#define ARIZONA_LHPF4_ENA_MASK 0x0001 /* LHPF4_ENA */
6326#define ARIZONA_LHPF4_ENA_SHIFT 0 /* LHPF4_ENA */
6327#define ARIZONA_LHPF4_ENA_WIDTH 1 /* LHPF4_ENA */
6328
6329/*
6330 * R3789 (0xECD) - HPLPF4_2
6331 */
6332#define ARIZONA_LHPF4_COEFF_MASK 0xFFFF /* LHPF4_COEFF - [15:0] */
6333#define ARIZONA_LHPF4_COEFF_SHIFT 0 /* LHPF4_COEFF - [15:0] */
6334#define ARIZONA_LHPF4_COEFF_WIDTH 16 /* LHPF4_COEFF - [15:0] */
6335
6336/*
6337 * R3808 (0xEE0) - ASRC_ENABLE
6338 */
6339#define ARIZONA_ASRC2L_ENA 0x0008 /* ASRC2L_ENA */
6340#define ARIZONA_ASRC2L_ENA_MASK 0x0008 /* ASRC2L_ENA */
6341#define ARIZONA_ASRC2L_ENA_SHIFT 3 /* ASRC2L_ENA */
6342#define ARIZONA_ASRC2L_ENA_WIDTH 1 /* ASRC2L_ENA */
6343#define ARIZONA_ASRC2R_ENA 0x0004 /* ASRC2R_ENA */
6344#define ARIZONA_ASRC2R_ENA_MASK 0x0004 /* ASRC2R_ENA */
6345#define ARIZONA_ASRC2R_ENA_SHIFT 2 /* ASRC2R_ENA */
6346#define ARIZONA_ASRC2R_ENA_WIDTH 1 /* ASRC2R_ENA */
6347#define ARIZONA_ASRC1L_ENA 0x0002 /* ASRC1L_ENA */
6348#define ARIZONA_ASRC1L_ENA_MASK 0x0002 /* ASRC1L_ENA */
6349#define ARIZONA_ASRC1L_ENA_SHIFT 1 /* ASRC1L_ENA */
6350#define ARIZONA_ASRC1L_ENA_WIDTH 1 /* ASRC1L_ENA */
6351#define ARIZONA_ASRC1R_ENA 0x0001 /* ASRC1R_ENA */
6352#define ARIZONA_ASRC1R_ENA_MASK 0x0001 /* ASRC1R_ENA */
6353#define ARIZONA_ASRC1R_ENA_SHIFT 0 /* ASRC1R_ENA */
6354#define ARIZONA_ASRC1R_ENA_WIDTH 1 /* ASRC1R_ENA */
6355
6356/*
6357 * R3810 (0xEE2) - ASRC_RATE1
6358 */
6359#define ARIZONA_ASRC_RATE1_MASK 0x7800 /* ASRC_RATE1 - [14:11] */
6360#define ARIZONA_ASRC_RATE1_SHIFT 11 /* ASRC_RATE1 - [14:11] */
6361#define ARIZONA_ASRC_RATE1_WIDTH 4 /* ASRC_RATE1 - [14:11] */
6362
6363/*
6364 * R3811 (0xEE3) - ASRC_RATE2
6365 */
6366#define ARIZONA_ASRC_RATE2_MASK 0x7800 /* ASRC_RATE2 - [14:11] */
6367#define ARIZONA_ASRC_RATE2_SHIFT 11 /* ASRC_RATE2 - [14:11] */
6368#define ARIZONA_ASRC_RATE2_WIDTH 4 /* ASRC_RATE2 - [14:11] */
6369
6370/*
6371 * R3824 (0xEF0) - ISRC 1 CTRL 1
6372 */
6373#define ARIZONA_ISRC1_FSH_MASK 0x7800 /* ISRC1_FSH - [14:11] */
6374#define ARIZONA_ISRC1_FSH_SHIFT 11 /* ISRC1_FSH - [14:11] */
6375#define ARIZONA_ISRC1_FSH_WIDTH 4 /* ISRC1_FSH - [14:11] */
6376#define ARIZONA_ISRC1_CLK_SEL_MASK 0x0700 /* ISRC1_CLK_SEL - [10:8] */
6377#define ARIZONA_ISRC1_CLK_SEL_SHIFT 8 /* ISRC1_CLK_SEL - [10:8] */
6378#define ARIZONA_ISRC1_CLK_SEL_WIDTH 3 /* ISRC1_CLK_SEL - [10:8] */
6379
6380/*
6381 * R3825 (0xEF1) - ISRC 1 CTRL 2
6382 */
6383#define ARIZONA_ISRC1_FSL_MASK 0x7800 /* ISRC1_FSL - [14:11] */
6384#define ARIZONA_ISRC1_FSL_SHIFT 11 /* ISRC1_FSL - [14:11] */
6385#define ARIZONA_ISRC1_FSL_WIDTH 4 /* ISRC1_FSL - [14:11] */
6386
6387/*
6388 * R3826 (0xEF2) - ISRC 1 CTRL 3
6389 */
6390#define ARIZONA_ISRC1_INT0_ENA 0x8000 /* ISRC1_INT0_ENA */
6391#define ARIZONA_ISRC1_INT0_ENA_MASK 0x8000 /* ISRC1_INT0_ENA */
6392#define ARIZONA_ISRC1_INT0_ENA_SHIFT 15 /* ISRC1_INT0_ENA */
6393#define ARIZONA_ISRC1_INT0_ENA_WIDTH 1 /* ISRC1_INT0_ENA */
6394#define ARIZONA_ISRC1_INT1_ENA 0x4000 /* ISRC1_INT1_ENA */
6395#define ARIZONA_ISRC1_INT1_ENA_MASK 0x4000 /* ISRC1_INT1_ENA */
6396#define ARIZONA_ISRC1_INT1_ENA_SHIFT 14 /* ISRC1_INT1_ENA */
6397#define ARIZONA_ISRC1_INT1_ENA_WIDTH 1 /* ISRC1_INT1_ENA */
6398#define ARIZONA_ISRC1_INT2_ENA 0x2000 /* ISRC1_INT2_ENA */
6399#define ARIZONA_ISRC1_INT2_ENA_MASK 0x2000 /* ISRC1_INT2_ENA */
6400#define ARIZONA_ISRC1_INT2_ENA_SHIFT 13 /* ISRC1_INT2_ENA */
6401#define ARIZONA_ISRC1_INT2_ENA_WIDTH 1 /* ISRC1_INT2_ENA */
6402#define ARIZONA_ISRC1_INT3_ENA 0x1000 /* ISRC1_INT3_ENA */
6403#define ARIZONA_ISRC1_INT3_ENA_MASK 0x1000 /* ISRC1_INT3_ENA */
6404#define ARIZONA_ISRC1_INT3_ENA_SHIFT 12 /* ISRC1_INT3_ENA */
6405#define ARIZONA_ISRC1_INT3_ENA_WIDTH 1 /* ISRC1_INT3_ENA */
6406#define ARIZONA_ISRC1_DEC0_ENA 0x0200 /* ISRC1_DEC0_ENA */
6407#define ARIZONA_ISRC1_DEC0_ENA_MASK 0x0200 /* ISRC1_DEC0_ENA */
6408#define ARIZONA_ISRC1_DEC0_ENA_SHIFT 9 /* ISRC1_DEC0_ENA */
6409#define ARIZONA_ISRC1_DEC0_ENA_WIDTH 1 /* ISRC1_DEC0_ENA */
6410#define ARIZONA_ISRC1_DEC1_ENA 0x0100 /* ISRC1_DEC1_ENA */
6411#define ARIZONA_ISRC1_DEC1_ENA_MASK 0x0100 /* ISRC1_DEC1_ENA */
6412#define ARIZONA_ISRC1_DEC1_ENA_SHIFT 8 /* ISRC1_DEC1_ENA */
6413#define ARIZONA_ISRC1_DEC1_ENA_WIDTH 1 /* ISRC1_DEC1_ENA */
6414#define ARIZONA_ISRC1_DEC2_ENA 0x0080 /* ISRC1_DEC2_ENA */
6415#define ARIZONA_ISRC1_DEC2_ENA_MASK 0x0080 /* ISRC1_DEC2_ENA */
6416#define ARIZONA_ISRC1_DEC2_ENA_SHIFT 7 /* ISRC1_DEC2_ENA */
6417#define ARIZONA_ISRC1_DEC2_ENA_WIDTH 1 /* ISRC1_DEC2_ENA */
6418#define ARIZONA_ISRC1_DEC3_ENA 0x0040 /* ISRC1_DEC3_ENA */
6419#define ARIZONA_ISRC1_DEC3_ENA_MASK 0x0040 /* ISRC1_DEC3_ENA */
6420#define ARIZONA_ISRC1_DEC3_ENA_SHIFT 6 /* ISRC1_DEC3_ENA */
6421#define ARIZONA_ISRC1_DEC3_ENA_WIDTH 1 /* ISRC1_DEC3_ENA */
6422#define ARIZONA_ISRC1_NOTCH_ENA 0x0001 /* ISRC1_NOTCH_ENA */
6423#define ARIZONA_ISRC1_NOTCH_ENA_MASK 0x0001 /* ISRC1_NOTCH_ENA */
6424#define ARIZONA_ISRC1_NOTCH_ENA_SHIFT 0 /* ISRC1_NOTCH_ENA */
6425#define ARIZONA_ISRC1_NOTCH_ENA_WIDTH 1 /* ISRC1_NOTCH_ENA */
6426
6427/*
6428 * R3827 (0xEF3) - ISRC 2 CTRL 1
6429 */
6430#define ARIZONA_ISRC2_FSH_MASK 0x7800 /* ISRC2_FSH - [14:11] */
6431#define ARIZONA_ISRC2_FSH_SHIFT 11 /* ISRC2_FSH - [14:11] */
6432#define ARIZONA_ISRC2_FSH_WIDTH 4 /* ISRC2_FSH - [14:11] */
6433#define ARIZONA_ISRC2_CLK_SEL_MASK 0x0700 /* ISRC2_CLK_SEL - [10:8] */
6434#define ARIZONA_ISRC2_CLK_SEL_SHIFT 8 /* ISRC2_CLK_SEL - [10:8] */
6435#define ARIZONA_ISRC2_CLK_SEL_WIDTH 3 /* ISRC2_CLK_SEL - [10:8] */
6436
6437/*
6438 * R3828 (0xEF4) - ISRC 2 CTRL 2
6439 */
6440#define ARIZONA_ISRC2_FSL_MASK 0x7800 /* ISRC2_FSL - [14:11] */
6441#define ARIZONA_ISRC2_FSL_SHIFT 11 /* ISRC2_FSL - [14:11] */
6442#define ARIZONA_ISRC2_FSL_WIDTH 4 /* ISRC2_FSL - [14:11] */
6443
6444/*
6445 * R3829 (0xEF5) - ISRC 2 CTRL 3
6446 */
6447#define ARIZONA_ISRC2_INT0_ENA 0x8000 /* ISRC2_INT0_ENA */
6448#define ARIZONA_ISRC2_INT0_ENA_MASK 0x8000 /* ISRC2_INT0_ENA */
6449#define ARIZONA_ISRC2_INT0_ENA_SHIFT 15 /* ISRC2_INT0_ENA */
6450#define ARIZONA_ISRC2_INT0_ENA_WIDTH 1 /* ISRC2_INT0_ENA */
6451#define ARIZONA_ISRC2_INT1_ENA 0x4000 /* ISRC2_INT1_ENA */
6452#define ARIZONA_ISRC2_INT1_ENA_MASK 0x4000 /* ISRC2_INT1_ENA */
6453#define ARIZONA_ISRC2_INT1_ENA_SHIFT 14 /* ISRC2_INT1_ENA */
6454#define ARIZONA_ISRC2_INT1_ENA_WIDTH 1 /* ISRC2_INT1_ENA */
6455#define ARIZONA_ISRC2_INT2_ENA 0x2000 /* ISRC2_INT2_ENA */
6456#define ARIZONA_ISRC2_INT2_ENA_MASK 0x2000 /* ISRC2_INT2_ENA */
6457#define ARIZONA_ISRC2_INT2_ENA_SHIFT 13 /* ISRC2_INT2_ENA */
6458#define ARIZONA_ISRC2_INT2_ENA_WIDTH 1 /* ISRC2_INT2_ENA */
6459#define ARIZONA_ISRC2_INT3_ENA 0x1000 /* ISRC2_INT3_ENA */
6460#define ARIZONA_ISRC2_INT3_ENA_MASK 0x1000 /* ISRC2_INT3_ENA */
6461#define ARIZONA_ISRC2_INT3_ENA_SHIFT 12 /* ISRC2_INT3_ENA */
6462#define ARIZONA_ISRC2_INT3_ENA_WIDTH 1 /* ISRC2_INT3_ENA */
6463#define ARIZONA_ISRC2_DEC0_ENA 0x0200 /* ISRC2_DEC0_ENA */
6464#define ARIZONA_ISRC2_DEC0_ENA_MASK 0x0200 /* ISRC2_DEC0_ENA */
6465#define ARIZONA_ISRC2_DEC0_ENA_SHIFT 9 /* ISRC2_DEC0_ENA */
6466#define ARIZONA_ISRC2_DEC0_ENA_WIDTH 1 /* ISRC2_DEC0_ENA */
6467#define ARIZONA_ISRC2_DEC1_ENA 0x0100 /* ISRC2_DEC1_ENA */
6468#define ARIZONA_ISRC2_DEC1_ENA_MASK 0x0100 /* ISRC2_DEC1_ENA */
6469#define ARIZONA_ISRC2_DEC1_ENA_SHIFT 8 /* ISRC2_DEC1_ENA */
6470#define ARIZONA_ISRC2_DEC1_ENA_WIDTH 1 /* ISRC2_DEC1_ENA */
6471#define ARIZONA_ISRC2_DEC2_ENA 0x0080 /* ISRC2_DEC2_ENA */
6472#define ARIZONA_ISRC2_DEC2_ENA_MASK 0x0080 /* ISRC2_DEC2_ENA */
6473#define ARIZONA_ISRC2_DEC2_ENA_SHIFT 7 /* ISRC2_DEC2_ENA */
6474#define ARIZONA_ISRC2_DEC2_ENA_WIDTH 1 /* ISRC2_DEC2_ENA */
6475#define ARIZONA_ISRC2_DEC3_ENA 0x0040 /* ISRC2_DEC3_ENA */
6476#define ARIZONA_ISRC2_DEC3_ENA_MASK 0x0040 /* ISRC2_DEC3_ENA */
6477#define ARIZONA_ISRC2_DEC3_ENA_SHIFT 6 /* ISRC2_DEC3_ENA */
6478#define ARIZONA_ISRC2_DEC3_ENA_WIDTH 1 /* ISRC2_DEC3_ENA */
6479#define ARIZONA_ISRC2_NOTCH_ENA 0x0001 /* ISRC2_NOTCH_ENA */
6480#define ARIZONA_ISRC2_NOTCH_ENA_MASK 0x0001 /* ISRC2_NOTCH_ENA */
6481#define ARIZONA_ISRC2_NOTCH_ENA_SHIFT 0 /* ISRC2_NOTCH_ENA */
6482#define ARIZONA_ISRC2_NOTCH_ENA_WIDTH 1 /* ISRC2_NOTCH_ENA */
6483
6484/*
6485 * R3830 (0xEF6) - ISRC 3 CTRL 1
6486 */
6487#define ARIZONA_ISRC3_FSH_MASK 0x7800 /* ISRC3_FSH - [14:11] */
6488#define ARIZONA_ISRC3_FSH_SHIFT 11 /* ISRC3_FSH - [14:11] */
6489#define ARIZONA_ISRC3_FSH_WIDTH 4 /* ISRC3_FSH - [14:11] */
6490#define ARIZONA_ISRC3_CLK_SEL_MASK 0x0700 /* ISRC3_CLK_SEL - [10:8] */
6491#define ARIZONA_ISRC3_CLK_SEL_SHIFT 8 /* ISRC3_CLK_SEL - [10:8] */
6492#define ARIZONA_ISRC3_CLK_SEL_WIDTH 3 /* ISRC3_CLK_SEL - [10:8] */
6493
6494/*
6495 * R3831 (0xEF7) - ISRC 3 CTRL 2
6496 */
6497#define ARIZONA_ISRC3_FSL_MASK 0x7800 /* ISRC3_FSL - [14:11] */
6498#define ARIZONA_ISRC3_FSL_SHIFT 11 /* ISRC3_FSL - [14:11] */
6499#define ARIZONA_ISRC3_FSL_WIDTH 4 /* ISRC3_FSL - [14:11] */
6500
6501/*
6502 * R3832 (0xEF8) - ISRC 3 CTRL 3
6503 */
6504#define ARIZONA_ISRC3_INT0_ENA 0x8000 /* ISRC3_INT0_ENA */
6505#define ARIZONA_ISRC3_INT0_ENA_MASK 0x8000 /* ISRC3_INT0_ENA */
6506#define ARIZONA_ISRC3_INT0_ENA_SHIFT 15 /* ISRC3_INT0_ENA */
6507#define ARIZONA_ISRC3_INT0_ENA_WIDTH 1 /* ISRC3_INT0_ENA */
6508#define ARIZONA_ISRC3_INT1_ENA 0x4000 /* ISRC3_INT1_ENA */
6509#define ARIZONA_ISRC3_INT1_ENA_MASK 0x4000 /* ISRC3_INT1_ENA */
6510#define ARIZONA_ISRC3_INT1_ENA_SHIFT 14 /* ISRC3_INT1_ENA */
6511#define ARIZONA_ISRC3_INT1_ENA_WIDTH 1 /* ISRC3_INT1_ENA */
6512#define ARIZONA_ISRC3_INT2_ENA 0x2000 /* ISRC3_INT2_ENA */
6513#define ARIZONA_ISRC3_INT2_ENA_MASK 0x2000 /* ISRC3_INT2_ENA */
6514#define ARIZONA_ISRC3_INT2_ENA_SHIFT 13 /* ISRC3_INT2_ENA */
6515#define ARIZONA_ISRC3_INT2_ENA_WIDTH 1 /* ISRC3_INT2_ENA */
6516#define ARIZONA_ISRC3_INT3_ENA 0x1000 /* ISRC3_INT3_ENA */
6517#define ARIZONA_ISRC3_INT3_ENA_MASK 0x1000 /* ISRC3_INT3_ENA */
6518#define ARIZONA_ISRC3_INT3_ENA_SHIFT 12 /* ISRC3_INT3_ENA */
6519#define ARIZONA_ISRC3_INT3_ENA_WIDTH 1 /* ISRC3_INT3_ENA */
6520#define ARIZONA_ISRC3_DEC0_ENA 0x0200 /* ISRC3_DEC0_ENA */
6521#define ARIZONA_ISRC3_DEC0_ENA_MASK 0x0200 /* ISRC3_DEC0_ENA */
6522#define ARIZONA_ISRC3_DEC0_ENA_SHIFT 9 /* ISRC3_DEC0_ENA */
6523#define ARIZONA_ISRC3_DEC0_ENA_WIDTH 1 /* ISRC3_DEC0_ENA */
6524#define ARIZONA_ISRC3_DEC1_ENA 0x0100 /* ISRC3_DEC1_ENA */
6525#define ARIZONA_ISRC3_DEC1_ENA_MASK 0x0100 /* ISRC3_DEC1_ENA */
6526#define ARIZONA_ISRC3_DEC1_ENA_SHIFT 8 /* ISRC3_DEC1_ENA */
6527#define ARIZONA_ISRC3_DEC1_ENA_WIDTH 1 /* ISRC3_DEC1_ENA */
6528#define ARIZONA_ISRC3_DEC2_ENA 0x0080 /* ISRC3_DEC2_ENA */
6529#define ARIZONA_ISRC3_DEC2_ENA_MASK 0x0080 /* ISRC3_DEC2_ENA */
6530#define ARIZONA_ISRC3_DEC2_ENA_SHIFT 7 /* ISRC3_DEC2_ENA */
6531#define ARIZONA_ISRC3_DEC2_ENA_WIDTH 1 /* ISRC3_DEC2_ENA */
6532#define ARIZONA_ISRC3_DEC3_ENA 0x0040 /* ISRC3_DEC3_ENA */
6533#define ARIZONA_ISRC3_DEC3_ENA_MASK 0x0040 /* ISRC3_DEC3_ENA */
6534#define ARIZONA_ISRC3_DEC3_ENA_SHIFT 6 /* ISRC3_DEC3_ENA */
6535#define ARIZONA_ISRC3_DEC3_ENA_WIDTH 1 /* ISRC3_DEC3_ENA */
6536#define ARIZONA_ISRC3_NOTCH_ENA 0x0001 /* ISRC3_NOTCH_ENA */
6537#define ARIZONA_ISRC3_NOTCH_ENA_MASK 0x0001 /* ISRC3_NOTCH_ENA */
6538#define ARIZONA_ISRC3_NOTCH_ENA_SHIFT 0 /* ISRC3_NOTCH_ENA */
6539#define ARIZONA_ISRC3_NOTCH_ENA_WIDTH 1 /* ISRC3_NOTCH_ENA */
6540
6541/*
6542 * R4352 (0x1100) - DSP1 Control 1
6543 */
6544#define ARIZONA_DSP1_RATE_MASK 0x7800 /* DSP1_RATE - [14:11] */
6545#define ARIZONA_DSP1_RATE_SHIFT 11 /* DSP1_RATE - [14:11] */
6546#define ARIZONA_DSP1_RATE_WIDTH 4 /* DSP1_RATE - [14:11] */
6547#define ARIZONA_DSP1_MEM_ENA 0x0010 /* DSP1_MEM_ENA */
6548#define ARIZONA_DSP1_MEM_ENA_MASK 0x0010 /* DSP1_MEM_ENA */
6549#define ARIZONA_DSP1_MEM_ENA_SHIFT 4 /* DSP1_MEM_ENA */
6550#define ARIZONA_DSP1_MEM_ENA_WIDTH 1 /* DSP1_MEM_ENA */
6551#define ARIZONA_DSP1_SYS_ENA 0x0004 /* DSP1_SYS_ENA */
6552#define ARIZONA_DSP1_SYS_ENA_MASK 0x0004 /* DSP1_SYS_ENA */
6553#define ARIZONA_DSP1_SYS_ENA_SHIFT 2 /* DSP1_SYS_ENA */
6554#define ARIZONA_DSP1_SYS_ENA_WIDTH 1 /* DSP1_SYS_ENA */
6555#define ARIZONA_DSP1_CORE_ENA 0x0002 /* DSP1_CORE_ENA */
6556#define ARIZONA_DSP1_CORE_ENA_MASK 0x0002 /* DSP1_CORE_ENA */
6557#define ARIZONA_DSP1_CORE_ENA_SHIFT 1 /* DSP1_CORE_ENA */
6558#define ARIZONA_DSP1_CORE_ENA_WIDTH 1 /* DSP1_CORE_ENA */
6559#define ARIZONA_DSP1_START 0x0001 /* DSP1_START */
6560#define ARIZONA_DSP1_START_MASK 0x0001 /* DSP1_START */
6561#define ARIZONA_DSP1_START_SHIFT 0 /* DSP1_START */
6562#define ARIZONA_DSP1_START_WIDTH 1 /* DSP1_START */
6563
6564/*
6565 * R4353 (0x1101) - DSP1 Clocking 1
6566 */
6567#define ARIZONA_DSP1_CLK_SEL_MASK 0x0007 /* DSP1_CLK_SEL - [2:0] */
6568#define ARIZONA_DSP1_CLK_SEL_SHIFT 0 /* DSP1_CLK_SEL - [2:0] */
6569#define ARIZONA_DSP1_CLK_SEL_WIDTH 3 /* DSP1_CLK_SEL - [2:0] */
6570
6571/*
6572 * R4356 (0x1104) - DSP1 Status 1
6573 */
6574#define ARIZONA_DSP1_RAM_RDY 0x0001 /* DSP1_RAM_RDY */
6575#define ARIZONA_DSP1_RAM_RDY_MASK 0x0001 /* DSP1_RAM_RDY */
6576#define ARIZONA_DSP1_RAM_RDY_SHIFT 0 /* DSP1_RAM_RDY */
6577#define ARIZONA_DSP1_RAM_RDY_WIDTH 1 /* DSP1_RAM_RDY */
6578
6579/*
6580 * R4357 (0x1105) - DSP1 Status 2
6581 */
6582#define ARIZONA_DSP1_PING_FULL 0x8000 /* DSP1_PING_FULL */
6583#define ARIZONA_DSP1_PING_FULL_MASK 0x8000 /* DSP1_PING_FULL */
6584#define ARIZONA_DSP1_PING_FULL_SHIFT 15 /* DSP1_PING_FULL */
6585#define ARIZONA_DSP1_PING_FULL_WIDTH 1 /* DSP1_PING_FULL */
6586#define ARIZONA_DSP1_PONG_FULL 0x4000 /* DSP1_PONG_FULL */
6587#define ARIZONA_DSP1_PONG_FULL_MASK 0x4000 /* DSP1_PONG_FULL */
6588#define ARIZONA_DSP1_PONG_FULL_SHIFT 14 /* DSP1_PONG_FULL */
6589#define ARIZONA_DSP1_PONG_FULL_WIDTH 1 /* DSP1_PONG_FULL */
6590#define ARIZONA_DSP1_WDMA_ACTIVE_CHANNELS_MASK 0x00FF /* DSP1_WDMA_ACTIVE_CHANNELS - [7:0] */
6591#define ARIZONA_DSP1_WDMA_ACTIVE_CHANNELS_SHIFT 0 /* DSP1_WDMA_ACTIVE_CHANNELS - [7:0] */
6592#define ARIZONA_DSP1_WDMA_ACTIVE_CHANNELS_WIDTH 8 /* DSP1_WDMA_ACTIVE_CHANNELS - [7:0] */
6593
6594#endif
diff --git a/include/linux/mfd/core.h b/include/linux/mfd/core.h
index 4e76163dd862..3a8435a8058f 100644
--- a/include/linux/mfd/core.h
+++ b/include/linux/mfd/core.h
@@ -36,6 +36,11 @@ struct mfd_cell {
36 /* platform data passed to the sub devices drivers */ 36 /* platform data passed to the sub devices drivers */
37 void *platform_data; 37 void *platform_data;
38 size_t pdata_size; 38 size_t pdata_size;
39 /*
40 * Device Tree compatible string
41 * See: Documentation/devicetree/usage-model.txt Chapter 2.2 for details
42 */
43 const char *of_compatible;
39 44
40 /* 45 /*
41 * These resources can be specified relative to the parent device. 46 * These resources can be specified relative to the parent device.
diff --git a/include/linux/mfd/db8500-prcmu.h b/include/linux/mfd/db8500-prcmu.h
index b3a43b1263fe..b82f6ee66a0b 100644
--- a/include/linux/mfd/db8500-prcmu.h
+++ b/include/linux/mfd/db8500-prcmu.h
@@ -530,7 +530,7 @@ int db8500_prcmu_stop_temp_sense(void);
530int prcmu_abb_read(u8 slave, u8 reg, u8 *value, u8 size); 530int prcmu_abb_read(u8 slave, u8 reg, u8 *value, u8 size);
531int prcmu_abb_write(u8 slave, u8 reg, u8 *value, u8 size); 531int prcmu_abb_write(u8 slave, u8 reg, u8 *value, u8 size);
532 532
533void prcmu_ac_wake_req(void); 533int prcmu_ac_wake_req(void);
534void prcmu_ac_sleep_req(void); 534void prcmu_ac_sleep_req(void);
535void db8500_prcmu_modem_reset(void); 535void db8500_prcmu_modem_reset(void);
536 536
@@ -680,7 +680,10 @@ static inline int prcmu_abb_write(u8 slave, u8 reg, u8 *value, u8 size)
680 return -ENOSYS; 680 return -ENOSYS;
681} 681}
682 682
683static inline void prcmu_ac_wake_req(void) {} 683static inline int prcmu_ac_wake_req(void)
684{
685 return 0;
686}
684 687
685static inline void prcmu_ac_sleep_req(void) {} 688static inline void prcmu_ac_sleep_req(void) {}
686 689
diff --git a/include/linux/mfd/dbx500-prcmu.h b/include/linux/mfd/dbx500-prcmu.h
index 5a13f93d8f1c..5b90e94399e1 100644
--- a/include/linux/mfd/dbx500-prcmu.h
+++ b/include/linux/mfd/dbx500-prcmu.h
@@ -345,7 +345,7 @@ static inline u16 prcmu_get_reset_code(void)
345 return db8500_prcmu_get_reset_code(); 345 return db8500_prcmu_get_reset_code();
346} 346}
347 347
348void prcmu_ac_wake_req(void); 348int prcmu_ac_wake_req(void);
349void prcmu_ac_sleep_req(void); 349void prcmu_ac_sleep_req(void);
350static inline void prcmu_modem_reset(void) 350static inline void prcmu_modem_reset(void)
351{ 351{
@@ -533,7 +533,10 @@ static inline u16 prcmu_get_reset_code(void)
533 return 0; 533 return 0;
534} 534}
535 535
536static inline void prcmu_ac_wake_req(void) {} 536static inline int prcmu_ac_wake_req(void)
537{
538 return 0;
539}
537 540
538static inline void prcmu_ac_sleep_req(void) {} 541static inline void prcmu_ac_sleep_req(void) {}
539 542
diff --git a/include/linux/mfd/max77686-private.h b/include/linux/mfd/max77686-private.h
new file mode 100644
index 000000000000..d327d4971e4f
--- /dev/null
+++ b/include/linux/mfd/max77686-private.h
@@ -0,0 +1,246 @@
1/*
2 * max77686.h - Voltage regulator driver for the Maxim 77686
3 *
4 * Copyright (C) 2012 Samsung Electrnoics
5 * Chiwoong Byun <woong.byun@samsung.com>
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 */
21
22#ifndef __LINUX_MFD_MAX77686_PRIV_H
23#define __LINUX_MFD_MAX77686_PRIV_H
24
25#include <linux/i2c.h>
26#include <linux/regmap.h>
27#include <linux/module.h>
28
29#define MAX77686_REG_INVALID (0xff)
30
31enum max77686_pmic_reg {
32 MAX77686_REG_DEVICE_ID = 0x00,
33 MAX77686_REG_INTSRC = 0x01,
34 MAX77686_REG_INT1 = 0x02,
35 MAX77686_REG_INT2 = 0x03,
36
37 MAX77686_REG_INT1MSK = 0x04,
38 MAX77686_REG_INT2MSK = 0x05,
39
40 MAX77686_REG_STATUS1 = 0x06,
41 MAX77686_REG_STATUS2 = 0x07,
42
43 MAX77686_REG_PWRON = 0x08,
44 MAX77686_REG_ONOFF_DELAY = 0x09,
45 MAX77686_REG_MRSTB = 0x0A,
46 /* Reserved: 0x0B-0x0F */
47
48 MAX77686_REG_BUCK1CTRL = 0x10,
49 MAX77686_REG_BUCK1OUT = 0x11,
50 MAX77686_REG_BUCK2CTRL1 = 0x12,
51 MAX77686_REG_BUCK234FREQ = 0x13,
52 MAX77686_REG_BUCK2DVS1 = 0x14,
53 MAX77686_REG_BUCK2DVS2 = 0x15,
54 MAX77686_REG_BUCK2DVS3 = 0x16,
55 MAX77686_REG_BUCK2DVS4 = 0x17,
56 MAX77686_REG_BUCK2DVS5 = 0x18,
57 MAX77686_REG_BUCK2DVS6 = 0x19,
58 MAX77686_REG_BUCK2DVS7 = 0x1A,
59 MAX77686_REG_BUCK2DVS8 = 0x1B,
60 MAX77686_REG_BUCK3CTRL1 = 0x1C,
61 /* Reserved: 0x1D */
62 MAX77686_REG_BUCK3DVS1 = 0x1E,
63 MAX77686_REG_BUCK3DVS2 = 0x1F,
64 MAX77686_REG_BUCK3DVS3 = 0x20,
65 MAX77686_REG_BUCK3DVS4 = 0x21,
66 MAX77686_REG_BUCK3DVS5 = 0x22,
67 MAX77686_REG_BUCK3DVS6 = 0x23,
68 MAX77686_REG_BUCK3DVS7 = 0x24,
69 MAX77686_REG_BUCK3DVS8 = 0x25,
70 MAX77686_REG_BUCK4CTRL1 = 0x26,
71 /* Reserved: 0x27 */
72 MAX77686_REG_BUCK4DVS1 = 0x28,
73 MAX77686_REG_BUCK4DVS2 = 0x29,
74 MAX77686_REG_BUCK4DVS3 = 0x2A,
75 MAX77686_REG_BUCK4DVS4 = 0x2B,
76 MAX77686_REG_BUCK4DVS5 = 0x2C,
77 MAX77686_REG_BUCK4DVS6 = 0x2D,
78 MAX77686_REG_BUCK4DVS7 = 0x2E,
79 MAX77686_REG_BUCK4DVS8 = 0x2F,
80 MAX77686_REG_BUCK5CTRL = 0x30,
81 MAX77686_REG_BUCK5OUT = 0x31,
82 MAX77686_REG_BUCK6CTRL = 0x32,
83 MAX77686_REG_BUCK6OUT = 0x33,
84 MAX77686_REG_BUCK7CTRL = 0x34,
85 MAX77686_REG_BUCK7OUT = 0x35,
86 MAX77686_REG_BUCK8CTRL = 0x36,
87 MAX77686_REG_BUCK8OUT = 0x37,
88 MAX77686_REG_BUCK9CTRL = 0x38,
89 MAX77686_REG_BUCK9OUT = 0x39,
90 /* Reserved: 0x3A-0x3F */
91
92 MAX77686_REG_LDO1CTRL1 = 0x40,
93 MAX77686_REG_LDO2CTRL1 = 0x41,
94 MAX77686_REG_LDO3CTRL1 = 0x42,
95 MAX77686_REG_LDO4CTRL1 = 0x43,
96 MAX77686_REG_LDO5CTRL1 = 0x44,
97 MAX77686_REG_LDO6CTRL1 = 0x45,
98 MAX77686_REG_LDO7CTRL1 = 0x46,
99 MAX77686_REG_LDO8CTRL1 = 0x47,
100 MAX77686_REG_LDO9CTRL1 = 0x48,
101 MAX77686_REG_LDO10CTRL1 = 0x49,
102 MAX77686_REG_LDO11CTRL1 = 0x4A,
103 MAX77686_REG_LDO12CTRL1 = 0x4B,
104 MAX77686_REG_LDO13CTRL1 = 0x4C,
105 MAX77686_REG_LDO14CTRL1 = 0x4D,
106 MAX77686_REG_LDO15CTRL1 = 0x4E,
107 MAX77686_REG_LDO16CTRL1 = 0x4F,
108 MAX77686_REG_LDO17CTRL1 = 0x50,
109 MAX77686_REG_LDO18CTRL1 = 0x51,
110 MAX77686_REG_LDO19CTRL1 = 0x52,
111 MAX77686_REG_LDO20CTRL1 = 0x53,
112 MAX77686_REG_LDO21CTRL1 = 0x54,
113 MAX77686_REG_LDO22CTRL1 = 0x55,
114 MAX77686_REG_LDO23CTRL1 = 0x56,
115 MAX77686_REG_LDO24CTRL1 = 0x57,
116 MAX77686_REG_LDO25CTRL1 = 0x58,
117 MAX77686_REG_LDO26CTRL1 = 0x59,
118 /* Reserved: 0x5A-0x5F */
119 MAX77686_REG_LDO1CTRL2 = 0x60,
120 MAX77686_REG_LDO2CTRL2 = 0x61,
121 MAX77686_REG_LDO3CTRL2 = 0x62,
122 MAX77686_REG_LDO4CTRL2 = 0x63,
123 MAX77686_REG_LDO5CTRL2 = 0x64,
124 MAX77686_REG_LDO6CTRL2 = 0x65,
125 MAX77686_REG_LDO7CTRL2 = 0x66,
126 MAX77686_REG_LDO8CTRL2 = 0x67,
127 MAX77686_REG_LDO9CTRL2 = 0x68,
128 MAX77686_REG_LDO10CTRL2 = 0x69,
129 MAX77686_REG_LDO11CTRL2 = 0x6A,
130 MAX77686_REG_LDO12CTRL2 = 0x6B,
131 MAX77686_REG_LDO13CTRL2 = 0x6C,
132 MAX77686_REG_LDO14CTRL2 = 0x6D,
133 MAX77686_REG_LDO15CTRL2 = 0x6E,
134 MAX77686_REG_LDO16CTRL2 = 0x6F,
135 MAX77686_REG_LDO17CTRL2 = 0x70,
136 MAX77686_REG_LDO18CTRL2 = 0x71,
137 MAX77686_REG_LDO19CTRL2 = 0x72,
138 MAX77686_REG_LDO20CTRL2 = 0x73,
139 MAX77686_REG_LDO21CTRL2 = 0x74,
140 MAX77686_REG_LDO22CTRL2 = 0x75,
141 MAX77686_REG_LDO23CTRL2 = 0x76,
142 MAX77686_REG_LDO24CTRL2 = 0x77,
143 MAX77686_REG_LDO25CTRL2 = 0x78,
144 MAX77686_REG_LDO26CTRL2 = 0x79,
145 /* Reserved: 0x7A-0x7D */
146
147 MAX77686_REG_BBAT_CHG = 0x7E,
148 MAX77686_REG_32KHZ = 0x7F,
149
150 MAX77686_REG_PMIC_END = 0x80,
151};
152
153enum max77686_rtc_reg {
154 MAX77686_RTC_INT = 0x00,
155 MAX77686_RTC_INTM = 0x01,
156 MAX77686_RTC_CONTROLM = 0x02,
157 MAX77686_RTC_CONTROL = 0x03,
158 MAX77686_RTC_UPDATE0 = 0x04,
159 /* Reserved: 0x5 */
160 MAX77686_WTSR_SMPL_CNTL = 0x06,
161 MAX77686_RTC_SEC = 0x07,
162 MAX77686_RTC_MIN = 0x08,
163 MAX77686_RTC_HOUR = 0x09,
164 MAX77686_RTC_WEEKDAY = 0x0A,
165 MAX77686_RTC_MONTH = 0x0B,
166 MAX77686_RTC_YEAR = 0x0C,
167 MAX77686_RTC_DATE = 0x0D,
168 MAX77686_ALARM1_SEC = 0x0E,
169 MAX77686_ALARM1_MIN = 0x0F,
170 MAX77686_ALARM1_HOUR = 0x10,
171 MAX77686_ALARM1_WEEKDAY = 0x11,
172 MAX77686_ALARM1_MONTH = 0x12,
173 MAX77686_ALARM1_YEAR = 0x13,
174 MAX77686_ALARM1_DATE = 0x14,
175 MAX77686_ALARM2_SEC = 0x15,
176 MAX77686_ALARM2_MIN = 0x16,
177 MAX77686_ALARM2_HOUR = 0x17,
178 MAX77686_ALARM2_WEEKDAY = 0x18,
179 MAX77686_ALARM2_MONTH = 0x19,
180 MAX77686_ALARM2_YEAR = 0x1A,
181 MAX77686_ALARM2_DATE = 0x1B,
182};
183
184#define MAX77686_IRQSRC_PMIC (0)
185#define MAX77686_IRQSRC_RTC (1 << 0)
186
187enum max77686_irq_source {
188 PMIC_INT1 = 0,
189 PMIC_INT2,
190 RTC_INT,
191
192 MAX77686_IRQ_GROUP_NR,
193};
194
195enum max77686_irq {
196 MAX77686_PMICIRQ_PWRONF,
197 MAX77686_PMICIRQ_PWRONR,
198 MAX77686_PMICIRQ_JIGONBF,
199 MAX77686_PMICIRQ_JIGONBR,
200 MAX77686_PMICIRQ_ACOKBF,
201 MAX77686_PMICIRQ_ACOKBR,
202 MAX77686_PMICIRQ_ONKEY1S,
203 MAX77686_PMICIRQ_MRSTB,
204
205 MAX77686_PMICIRQ_140C,
206 MAX77686_PMICIRQ_120C,
207
208 MAX77686_RTCIRQ_RTC60S,
209 MAX77686_RTCIRQ_RTCA1,
210 MAX77686_RTCIRQ_RTCA2,
211 MAX77686_RTCIRQ_SMPL,
212 MAX77686_RTCIRQ_RTC1S,
213 MAX77686_RTCIRQ_WTSR,
214
215 MAX77686_IRQ_NR,
216};
217
218struct max77686_dev {
219 struct device *dev;
220 struct i2c_client *i2c; /* 0xcc / PMIC, Battery Control, and FLASH */
221 struct i2c_client *rtc; /* slave addr 0x0c */
222
223 int type;
224
225 struct regmap *regmap; /* regmap for mfd */
226 struct regmap *rtc_regmap; /* regmap for rtc */
227
228 struct irq_domain *irq_domain;
229
230 int irq;
231 int irq_gpio;
232 bool wakeup;
233 struct mutex irqlock;
234 int irq_masks_cur[MAX77686_IRQ_GROUP_NR];
235 int irq_masks_cache[MAX77686_IRQ_GROUP_NR];
236};
237
238enum max77686_types {
239 TYPE_MAX77686,
240};
241
242extern int max77686_irq_init(struct max77686_dev *max77686);
243extern void max77686_irq_exit(struct max77686_dev *max77686);
244extern int max77686_irq_resume(struct max77686_dev *max77686);
245
246#endif /* __LINUX_MFD_MAX77686_PRIV_H */
diff --git a/include/linux/mfd/max77686.h b/include/linux/mfd/max77686.h
new file mode 100644
index 000000000000..3d7ae4d7fd36
--- /dev/null
+++ b/include/linux/mfd/max77686.h
@@ -0,0 +1,114 @@
1/*
2 * max77686.h - Driver for the Maxim 77686
3 *
4 * Copyright (C) 2012 Samsung Electrnoics
5 * Chiwoong Byun <woong.byun@samsung.com>
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 *
21 * This driver is based on max8997.h
22 *
23 * MAX77686 has PMIC, RTC devices.
24 * The devices share the same I2C bus and included in
25 * this mfd driver.
26 */
27
28#ifndef __LINUX_MFD_MAX77686_H
29#define __LINUX_MFD_MAX77686_H
30
31#include <linux/regulator/consumer.h>
32
33/* MAX77686 regulator IDs */
34enum max77686_regulators {
35 MAX77686_LDO1 = 0,
36 MAX77686_LDO2,
37 MAX77686_LDO3,
38 MAX77686_LDO4,
39 MAX77686_LDO5,
40 MAX77686_LDO6,
41 MAX77686_LDO7,
42 MAX77686_LDO8,
43 MAX77686_LDO9,
44 MAX77686_LDO10,
45 MAX77686_LDO11,
46 MAX77686_LDO12,
47 MAX77686_LDO13,
48 MAX77686_LDO14,
49 MAX77686_LDO15,
50 MAX77686_LDO16,
51 MAX77686_LDO17,
52 MAX77686_LDO18,
53 MAX77686_LDO19,
54 MAX77686_LDO20,
55 MAX77686_LDO21,
56 MAX77686_LDO22,
57 MAX77686_LDO23,
58 MAX77686_LDO24,
59 MAX77686_LDO25,
60 MAX77686_LDO26,
61 MAX77686_BUCK1,
62 MAX77686_BUCK2,
63 MAX77686_BUCK3,
64 MAX77686_BUCK4,
65 MAX77686_BUCK5,
66 MAX77686_BUCK6,
67 MAX77686_BUCK7,
68 MAX77686_BUCK8,
69 MAX77686_BUCK9,
70
71 MAX77686_REG_MAX,
72};
73
74struct max77686_regulator_data {
75 int id;
76 struct regulator_init_data *initdata;
77};
78
79enum max77686_opmode {
80 MAX77686_OPMODE_NORMAL,
81 MAX77686_OPMODE_LP,
82 MAX77686_OPMODE_STANDBY,
83};
84
85struct max77686_opmode_data {
86 int id;
87 int mode;
88};
89
90struct max77686_platform_data {
91 /* IRQ */
92 int irq_gpio;
93 int ono;
94 int wakeup;
95
96 /* ---- PMIC ---- */
97 struct max77686_regulator_data *regulators;
98 int num_regulators;
99
100 struct max77686_opmode_data *opmode_data;
101
102 /*
103 * GPIO-DVS feature is not enabled with the current version of
104 * MAX77686 driver. Buck2/3/4_voltages[0] is used as the default
105 * voltage at probe. DVS/SELB gpios are set as OUTPUT-LOW.
106 */
107 int buck234_gpio_dvs[3]; /* GPIO of [0]DVS1, [1]DVS2, [2]DVS3 */
108 int buck234_gpio_selb[3]; /* [0]SELB2, [1]SELB3, [2]SELB4 */
109 unsigned int buck2_voltage[8]; /* buckx_voltage in uV */
110 unsigned int buck3_voltage[8];
111 unsigned int buck4_voltage[8];
112};
113
114#endif /* __LINUX_MFD_MAX77686_H */
diff --git a/include/linux/mfd/max77693-private.h b/include/linux/mfd/max77693-private.h
index 68263c5fa53c..1eeae5c07915 100644
--- a/include/linux/mfd/max77693-private.h
+++ b/include/linux/mfd/max77693-private.h
@@ -190,7 +190,6 @@ struct max77693_dev {
190 struct i2c_client *i2c; /* 0xCC , PMIC, Charger, Flash LED */ 190 struct i2c_client *i2c; /* 0xCC , PMIC, Charger, Flash LED */
191 struct i2c_client *muic; /* 0x4A , MUIC */ 191 struct i2c_client *muic; /* 0x4A , MUIC */
192 struct i2c_client *haptic; /* 0x90 , Haptic */ 192 struct i2c_client *haptic; /* 0x90 , Haptic */
193 struct mutex iolock;
194 193
195 int type; 194 int type;
196 195
diff --git a/include/linux/mfd/max8997-private.h b/include/linux/mfd/max8997-private.h
index 3f4deb62d6b0..830152cfae33 100644
--- a/include/linux/mfd/max8997-private.h
+++ b/include/linux/mfd/max8997-private.h
@@ -23,6 +23,8 @@
23#define __LINUX_MFD_MAX8997_PRIV_H 23#define __LINUX_MFD_MAX8997_PRIV_H
24 24
25#include <linux/i2c.h> 25#include <linux/i2c.h>
26#include <linux/export.h>
27#include <linux/irqdomain.h>
26 28
27#define MAX8997_REG_INVALID (0xff) 29#define MAX8997_REG_INVALID (0xff)
28 30
@@ -325,7 +327,7 @@ struct max8997_dev {
325 327
326 int irq; 328 int irq;
327 int ono; 329 int ono;
328 int irq_base; 330 struct irq_domain *irq_domain;
329 struct mutex irqlock; 331 struct mutex irqlock;
330 int irq_masks_cur[MAX8997_IRQ_GROUP_NR]; 332 int irq_masks_cur[MAX8997_IRQ_GROUP_NR];
331 int irq_masks_cache[MAX8997_IRQ_GROUP_NR]; 333 int irq_masks_cache[MAX8997_IRQ_GROUP_NR];
diff --git a/include/linux/mfd/max8997.h b/include/linux/mfd/max8997.h
index b40c08cd30bc..328d8e24b533 100644
--- a/include/linux/mfd/max8997.h
+++ b/include/linux/mfd/max8997.h
@@ -181,7 +181,6 @@ struct max8997_led_platform_data {
181 181
182struct max8997_platform_data { 182struct max8997_platform_data {
183 /* IRQ */ 183 /* IRQ */
184 int irq_base;
185 int ono; 184 int ono;
186 int wakeup; 185 int wakeup;
187 186
diff --git a/include/linux/mfd/s5m87xx/s5m-core.h b/include/linux/mfd/s5m87xx/s5m-core.h
deleted file mode 100644
index 0b2e0ed309f5..000000000000
--- a/include/linux/mfd/s5m87xx/s5m-core.h
+++ /dev/null
@@ -1,379 +0,0 @@
1/*
2 * s5m-core.h
3 *
4 * Copyright (c) 2011 Samsung Electronics Co., Ltd
5 * http://www.samsung.com
6 *
7 * This program is free software; you can redistribute it and/or modify it
8 * under the terms of the GNU General Public License as published by the
9 * Free Software Foundation; either version 2 of the License, or (at your
10 * option) any later version.
11 *
12 */
13
14#ifndef __LINUX_MFD_S5M_CORE_H
15#define __LINUX_MFD_S5M_CORE_H
16
17#define NUM_IRQ_REGS 4
18
19enum s5m_device_type {
20 S5M8751X,
21 S5M8763X,
22 S5M8767X,
23};
24
25/* S5M8767 registers */
26enum s5m8767_reg {
27 S5M8767_REG_ID,
28 S5M8767_REG_INT1,
29 S5M8767_REG_INT2,
30 S5M8767_REG_INT3,
31 S5M8767_REG_INT1M,
32 S5M8767_REG_INT2M,
33 S5M8767_REG_INT3M,
34 S5M8767_REG_STATUS1,
35 S5M8767_REG_STATUS2,
36 S5M8767_REG_STATUS3,
37 S5M8767_REG_CTRL1,
38 S5M8767_REG_CTRL2,
39 S5M8767_REG_LOWBAT1,
40 S5M8767_REG_LOWBAT2,
41 S5M8767_REG_BUCHG,
42 S5M8767_REG_DVSRAMP,
43 S5M8767_REG_DVSTIMER2 = 0x10,
44 S5M8767_REG_DVSTIMER3,
45 S5M8767_REG_DVSTIMER4,
46 S5M8767_REG_LDO1,
47 S5M8767_REG_LDO2,
48 S5M8767_REG_LDO3,
49 S5M8767_REG_LDO4,
50 S5M8767_REG_LDO5,
51 S5M8767_REG_LDO6,
52 S5M8767_REG_LDO7,
53 S5M8767_REG_LDO8,
54 S5M8767_REG_LDO9,
55 S5M8767_REG_LDO10,
56 S5M8767_REG_LDO11,
57 S5M8767_REG_LDO12,
58 S5M8767_REG_LDO13,
59 S5M8767_REG_LDO14 = 0x20,
60 S5M8767_REG_LDO15,
61 S5M8767_REG_LDO16,
62 S5M8767_REG_LDO17,
63 S5M8767_REG_LDO18,
64 S5M8767_REG_LDO19,
65 S5M8767_REG_LDO20,
66 S5M8767_REG_LDO21,
67 S5M8767_REG_LDO22,
68 S5M8767_REG_LDO23,
69 S5M8767_REG_LDO24,
70 S5M8767_REG_LDO25,
71 S5M8767_REG_LDO26,
72 S5M8767_REG_LDO27,
73 S5M8767_REG_LDO28,
74 S5M8767_REG_UVLO = 0x31,
75 S5M8767_REG_BUCK1CTRL1,
76 S5M8767_REG_BUCK1CTRL2,
77 S5M8767_REG_BUCK2CTRL,
78 S5M8767_REG_BUCK2DVS1,
79 S5M8767_REG_BUCK2DVS2,
80 S5M8767_REG_BUCK2DVS3,
81 S5M8767_REG_BUCK2DVS4,
82 S5M8767_REG_BUCK2DVS5,
83 S5M8767_REG_BUCK2DVS6,
84 S5M8767_REG_BUCK2DVS7,
85 S5M8767_REG_BUCK2DVS8,
86 S5M8767_REG_BUCK3CTRL,
87 S5M8767_REG_BUCK3DVS1,
88 S5M8767_REG_BUCK3DVS2,
89 S5M8767_REG_BUCK3DVS3,
90 S5M8767_REG_BUCK3DVS4,
91 S5M8767_REG_BUCK3DVS5,
92 S5M8767_REG_BUCK3DVS6,
93 S5M8767_REG_BUCK3DVS7,
94 S5M8767_REG_BUCK3DVS8,
95 S5M8767_REG_BUCK4CTRL,
96 S5M8767_REG_BUCK4DVS1,
97 S5M8767_REG_BUCK4DVS2,
98 S5M8767_REG_BUCK4DVS3,
99 S5M8767_REG_BUCK4DVS4,
100 S5M8767_REG_BUCK4DVS5,
101 S5M8767_REG_BUCK4DVS6,
102 S5M8767_REG_BUCK4DVS7,
103 S5M8767_REG_BUCK4DVS8,
104 S5M8767_REG_BUCK5CTRL1,
105 S5M8767_REG_BUCK5CTRL2,
106 S5M8767_REG_BUCK5CTRL3,
107 S5M8767_REG_BUCK5CTRL4,
108 S5M8767_REG_BUCK5CTRL5,
109 S5M8767_REG_BUCK6CTRL1,
110 S5M8767_REG_BUCK6CTRL2,
111 S5M8767_REG_BUCK7CTRL1,
112 S5M8767_REG_BUCK7CTRL2,
113 S5M8767_REG_BUCK8CTRL1,
114 S5M8767_REG_BUCK8CTRL2,
115 S5M8767_REG_BUCK9CTRL1,
116 S5M8767_REG_BUCK9CTRL2,
117 S5M8767_REG_LDO1CTRL,
118 S5M8767_REG_LDO2_1CTRL,
119 S5M8767_REG_LDO2_2CTRL,
120 S5M8767_REG_LDO2_3CTRL,
121 S5M8767_REG_LDO2_4CTRL,
122 S5M8767_REG_LDO3CTRL,
123 S5M8767_REG_LDO4CTRL,
124 S5M8767_REG_LDO5CTRL,
125 S5M8767_REG_LDO6CTRL,
126 S5M8767_REG_LDO7CTRL,
127 S5M8767_REG_LDO8CTRL,
128 S5M8767_REG_LDO9CTRL,
129 S5M8767_REG_LDO10CTRL,
130 S5M8767_REG_LDO11CTRL,
131 S5M8767_REG_LDO12CTRL,
132 S5M8767_REG_LDO13CTRL,
133 S5M8767_REG_LDO14CTRL,
134 S5M8767_REG_LDO15CTRL,
135 S5M8767_REG_LDO16CTRL,
136 S5M8767_REG_LDO17CTRL,
137 S5M8767_REG_LDO18CTRL,
138 S5M8767_REG_LDO19CTRL,
139 S5M8767_REG_LDO20CTRL,
140 S5M8767_REG_LDO21CTRL,
141 S5M8767_REG_LDO22CTRL,
142 S5M8767_REG_LDO23CTRL,
143 S5M8767_REG_LDO24CTRL,
144 S5M8767_REG_LDO25CTRL,
145 S5M8767_REG_LDO26CTRL,
146 S5M8767_REG_LDO27CTRL,
147 S5M8767_REG_LDO28CTRL,
148};
149
150/* S5M8763 registers */
151enum s5m8763_reg {
152 S5M8763_REG_IRQ1,
153 S5M8763_REG_IRQ2,
154 S5M8763_REG_IRQ3,
155 S5M8763_REG_IRQ4,
156 S5M8763_REG_IRQM1,
157 S5M8763_REG_IRQM2,
158 S5M8763_REG_IRQM3,
159 S5M8763_REG_IRQM4,
160 S5M8763_REG_STATUS1,
161 S5M8763_REG_STATUS2,
162 S5M8763_REG_STATUSM1,
163 S5M8763_REG_STATUSM2,
164 S5M8763_REG_CHGR1,
165 S5M8763_REG_CHGR2,
166 S5M8763_REG_LDO_ACTIVE_DISCHARGE1,
167 S5M8763_REG_LDO_ACTIVE_DISCHARGE2,
168 S5M8763_REG_BUCK_ACTIVE_DISCHARGE3,
169 S5M8763_REG_ONOFF1,
170 S5M8763_REG_ONOFF2,
171 S5M8763_REG_ONOFF3,
172 S5M8763_REG_ONOFF4,
173 S5M8763_REG_BUCK1_VOLTAGE1,
174 S5M8763_REG_BUCK1_VOLTAGE2,
175 S5M8763_REG_BUCK1_VOLTAGE3,
176 S5M8763_REG_BUCK1_VOLTAGE4,
177 S5M8763_REG_BUCK2_VOLTAGE1,
178 S5M8763_REG_BUCK2_VOLTAGE2,
179 S5M8763_REG_BUCK3,
180 S5M8763_REG_BUCK4,
181 S5M8763_REG_LDO1_LDO2,
182 S5M8763_REG_LDO3,
183 S5M8763_REG_LDO4,
184 S5M8763_REG_LDO5,
185 S5M8763_REG_LDO6,
186 S5M8763_REG_LDO7,
187 S5M8763_REG_LDO7_LDO8,
188 S5M8763_REG_LDO9_LDO10,
189 S5M8763_REG_LDO11,
190 S5M8763_REG_LDO12,
191 S5M8763_REG_LDO13,
192 S5M8763_REG_LDO14,
193 S5M8763_REG_LDO15,
194 S5M8763_REG_LDO16,
195 S5M8763_REG_BKCHR,
196 S5M8763_REG_LBCNFG1,
197 S5M8763_REG_LBCNFG2,
198};
199
200enum s5m8767_irq {
201 S5M8767_IRQ_PWRR,
202 S5M8767_IRQ_PWRF,
203 S5M8767_IRQ_PWR1S,
204 S5M8767_IRQ_JIGR,
205 S5M8767_IRQ_JIGF,
206 S5M8767_IRQ_LOWBAT2,
207 S5M8767_IRQ_LOWBAT1,
208
209 S5M8767_IRQ_MRB,
210 S5M8767_IRQ_DVSOK2,
211 S5M8767_IRQ_DVSOK3,
212 S5M8767_IRQ_DVSOK4,
213
214 S5M8767_IRQ_RTC60S,
215 S5M8767_IRQ_RTCA1,
216 S5M8767_IRQ_RTCA2,
217 S5M8767_IRQ_SMPL,
218 S5M8767_IRQ_RTC1S,
219 S5M8767_IRQ_WTSR,
220
221 S5M8767_IRQ_NR,
222};
223
224#define S5M8767_IRQ_PWRR_MASK (1 << 0)
225#define S5M8767_IRQ_PWRF_MASK (1 << 1)
226#define S5M8767_IRQ_PWR1S_MASK (1 << 3)
227#define S5M8767_IRQ_JIGR_MASK (1 << 4)
228#define S5M8767_IRQ_JIGF_MASK (1 << 5)
229#define S5M8767_IRQ_LOWBAT2_MASK (1 << 6)
230#define S5M8767_IRQ_LOWBAT1_MASK (1 << 7)
231
232#define S5M8767_IRQ_MRB_MASK (1 << 2)
233#define S5M8767_IRQ_DVSOK2_MASK (1 << 3)
234#define S5M8767_IRQ_DVSOK3_MASK (1 << 4)
235#define S5M8767_IRQ_DVSOK4_MASK (1 << 5)
236
237#define S5M8767_IRQ_RTC60S_MASK (1 << 0)
238#define S5M8767_IRQ_RTCA1_MASK (1 << 1)
239#define S5M8767_IRQ_RTCA2_MASK (1 << 2)
240#define S5M8767_IRQ_SMPL_MASK (1 << 3)
241#define S5M8767_IRQ_RTC1S_MASK (1 << 4)
242#define S5M8767_IRQ_WTSR_MASK (1 << 5)
243
244enum s5m8763_irq {
245 S5M8763_IRQ_DCINF,
246 S5M8763_IRQ_DCINR,
247 S5M8763_IRQ_JIGF,
248 S5M8763_IRQ_JIGR,
249 S5M8763_IRQ_PWRONF,
250 S5M8763_IRQ_PWRONR,
251
252 S5M8763_IRQ_WTSREVNT,
253 S5M8763_IRQ_SMPLEVNT,
254 S5M8763_IRQ_ALARM1,
255 S5M8763_IRQ_ALARM0,
256
257 S5M8763_IRQ_ONKEY1S,
258 S5M8763_IRQ_TOPOFFR,
259 S5M8763_IRQ_DCINOVPR,
260 S5M8763_IRQ_CHGRSTF,
261 S5M8763_IRQ_DONER,
262 S5M8763_IRQ_CHGFAULT,
263
264 S5M8763_IRQ_LOBAT1,
265 S5M8763_IRQ_LOBAT2,
266
267 S5M8763_IRQ_NR,
268};
269
270#define S5M8763_IRQ_DCINF_MASK (1 << 2)
271#define S5M8763_IRQ_DCINR_MASK (1 << 3)
272#define S5M8763_IRQ_JIGF_MASK (1 << 4)
273#define S5M8763_IRQ_JIGR_MASK (1 << 5)
274#define S5M8763_IRQ_PWRONF_MASK (1 << 6)
275#define S5M8763_IRQ_PWRONR_MASK (1 << 7)
276
277#define S5M8763_IRQ_WTSREVNT_MASK (1 << 0)
278#define S5M8763_IRQ_SMPLEVNT_MASK (1 << 1)
279#define S5M8763_IRQ_ALARM1_MASK (1 << 2)
280#define S5M8763_IRQ_ALARM0_MASK (1 << 3)
281
282#define S5M8763_IRQ_ONKEY1S_MASK (1 << 0)
283#define S5M8763_IRQ_TOPOFFR_MASK (1 << 2)
284#define S5M8763_IRQ_DCINOVPR_MASK (1 << 3)
285#define S5M8763_IRQ_CHGRSTF_MASK (1 << 4)
286#define S5M8763_IRQ_DONER_MASK (1 << 5)
287#define S5M8763_IRQ_CHGFAULT_MASK (1 << 7)
288
289#define S5M8763_IRQ_LOBAT1_MASK (1 << 0)
290#define S5M8763_IRQ_LOBAT2_MASK (1 << 1)
291
292#define S5M8763_ENRAMP (1 << 4)
293
294/**
295 * struct s5m87xx_dev - s5m87xx master device for sub-drivers
296 * @dev: master device of the chip (can be used to access platform data)
297 * @i2c: i2c client private data for regulator
298 * @rtc: i2c client private data for rtc
299 * @iolock: mutex for serializing io access
300 * @irqlock: mutex for buslock
301 * @irq_base: base IRQ number for s5m87xx, required for IRQs
302 * @irq: generic IRQ number for s5m87xx
303 * @ono: power onoff IRQ number for s5m87xx
304 * @irq_masks_cur: currently active value
305 * @irq_masks_cache: cached hardware value
306 * @type: indicate which s5m87xx "variant" is used
307 */
308struct s5m87xx_dev {
309 struct device *dev;
310 struct regmap *regmap;
311 struct i2c_client *i2c;
312 struct i2c_client *rtc;
313 struct mutex iolock;
314 struct mutex irqlock;
315
316 int device_type;
317 int irq_base;
318 int irq;
319 int ono;
320 u8 irq_masks_cur[NUM_IRQ_REGS];
321 u8 irq_masks_cache[NUM_IRQ_REGS];
322 int type;
323 bool wakeup;
324};
325
326int s5m_irq_init(struct s5m87xx_dev *s5m87xx);
327void s5m_irq_exit(struct s5m87xx_dev *s5m87xx);
328int s5m_irq_resume(struct s5m87xx_dev *s5m87xx);
329
330extern int s5m_reg_read(struct s5m87xx_dev *s5m87xx, u8 reg, void *dest);
331extern int s5m_bulk_read(struct s5m87xx_dev *s5m87xx, u8 reg, int count, u8 *buf);
332extern int s5m_reg_write(struct s5m87xx_dev *s5m87xx, u8 reg, u8 value);
333extern int s5m_bulk_write(struct s5m87xx_dev *s5m87xx, u8 reg, int count, u8 *buf);
334extern int s5m_reg_update(struct s5m87xx_dev *s5m87xx, u8 reg, u8 val, u8 mask);
335
336struct s5m_platform_data {
337 struct s5m_regulator_data *regulators;
338 struct s5m_opmode_data *opmode;
339 int device_type;
340 int num_regulators;
341
342 int irq_base;
343 int (*cfg_pmic_irq)(void);
344
345 int ono;
346 bool wakeup;
347 bool buck_voltage_lock;
348
349 int buck_gpios[3];
350 int buck_ds[3];
351 int buck2_voltage[8];
352 bool buck2_gpiodvs;
353 int buck3_voltage[8];
354 bool buck3_gpiodvs;
355 int buck4_voltage[8];
356 bool buck4_gpiodvs;
357
358 int buck_set1;
359 int buck_set2;
360 int buck_set3;
361 int buck2_enable;
362 int buck3_enable;
363 int buck4_enable;
364 int buck_default_idx;
365 int buck2_default_idx;
366 int buck3_default_idx;
367 int buck4_default_idx;
368
369 int buck_ramp_delay;
370 bool buck2_ramp_enable;
371 bool buck3_ramp_enable;
372 bool buck4_ramp_enable;
373
374 int buck2_init;
375 int buck3_init;
376 int buck4_init;
377};
378
379#endif /* __LINUX_MFD_S5M_CORE_H */
diff --git a/include/linux/mfd/s5m87xx/s5m-pmic.h b/include/linux/mfd/s5m87xx/s5m-pmic.h
deleted file mode 100644
index 7c719f20f58a..000000000000
--- a/include/linux/mfd/s5m87xx/s5m-pmic.h
+++ /dev/null
@@ -1,129 +0,0 @@
1/* s5m87xx.h
2 *
3 * Copyright (c) 2010-2011 Samsung Electronics Co., Ltd.
4 * http://www.samsung.com
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.
9*/
10
11#ifndef __LINUX_MFD_S5M_PMIC_H
12#define __LINUX_MFD_S5M_PMIC_H
13
14#include <linux/regulator/machine.h>
15
16/* S5M8767 regulator ids */
17enum s5m8767_regulators {
18 S5M8767_LDO1,
19 S5M8767_LDO2,
20 S5M8767_LDO3,
21 S5M8767_LDO4,
22 S5M8767_LDO5,
23 S5M8767_LDO6,
24 S5M8767_LDO7,
25 S5M8767_LDO8,
26 S5M8767_LDO9,
27 S5M8767_LDO10,
28 S5M8767_LDO11,
29 S5M8767_LDO12,
30 S5M8767_LDO13,
31 S5M8767_LDO14,
32 S5M8767_LDO15,
33 S5M8767_LDO16,
34 S5M8767_LDO17,
35 S5M8767_LDO18,
36 S5M8767_LDO19,
37 S5M8767_LDO20,
38 S5M8767_LDO21,
39 S5M8767_LDO22,
40 S5M8767_LDO23,
41 S5M8767_LDO24,
42 S5M8767_LDO25,
43 S5M8767_LDO26,
44 S5M8767_LDO27,
45 S5M8767_LDO28,
46 S5M8767_BUCK1,
47 S5M8767_BUCK2,
48 S5M8767_BUCK3,
49 S5M8767_BUCK4,
50 S5M8767_BUCK5,
51 S5M8767_BUCK6,
52 S5M8767_BUCK7,
53 S5M8767_BUCK8,
54 S5M8767_BUCK9,
55 S5M8767_AP_EN32KHZ,
56 S5M8767_CP_EN32KHZ,
57
58 S5M8767_REG_MAX,
59};
60
61#define S5M8767_ENCTRL_SHIFT 6
62
63/* S5M8763 regulator ids */
64enum s5m8763_regulators {
65 S5M8763_LDO1,
66 S5M8763_LDO2,
67 S5M8763_LDO3,
68 S5M8763_LDO4,
69 S5M8763_LDO5,
70 S5M8763_LDO6,
71 S5M8763_LDO7,
72 S5M8763_LDO8,
73 S5M8763_LDO9,
74 S5M8763_LDO10,
75 S5M8763_LDO11,
76 S5M8763_LDO12,
77 S5M8763_LDO13,
78 S5M8763_LDO14,
79 S5M8763_LDO15,
80 S5M8763_LDO16,
81 S5M8763_BUCK1,
82 S5M8763_BUCK2,
83 S5M8763_BUCK3,
84 S5M8763_BUCK4,
85 S5M8763_AP_EN32KHZ,
86 S5M8763_CP_EN32KHZ,
87 S5M8763_ENCHGVI,
88 S5M8763_ESAFEUSB1,
89 S5M8763_ESAFEUSB2,
90};
91
92/**
93 * s5m87xx_regulator_data - regulator data
94 * @id: regulator id
95 * @initdata: regulator init data (contraints, supplies, ...)
96 */
97struct s5m_regulator_data {
98 int id;
99 struct regulator_init_data *initdata;
100};
101
102/*
103 * s5m_opmode_data - regulator operation mode data
104 * @id: regulator id
105 * @mode: regulator operation mode
106 */
107struct s5m_opmode_data {
108 int id;
109 int mode;
110};
111
112/*
113 * s5m regulator operation mode
114 * S5M_OPMODE_OFF Regulator always OFF
115 * S5M_OPMODE_ON Regulator always ON
116 * S5M_OPMODE_LOWPOWER Regulator is on in low-power mode
117 * S5M_OPMODE_SUSPEND Regulator is changed by PWREN pin
118 * If PWREN is high, regulator is on
119 * If PWREN is low, regulator is off
120 */
121
122enum s5m_opmode {
123 S5M_OPMODE_OFF,
124 S5M_OPMODE_ON,
125 S5M_OPMODE_LOWPOWER,
126 S5M_OPMODE_SUSPEND,
127};
128
129#endif /* __LINUX_MFD_S5M_PMIC_H */
diff --git a/include/linux/mfd/samsung/core.h b/include/linux/mfd/samsung/core.h
new file mode 100644
index 000000000000..b50c38f8bc48
--- /dev/null
+++ b/include/linux/mfd/samsung/core.h
@@ -0,0 +1,159 @@
1/*
2 * core.h
3 *
4 * copyright (c) 2011 Samsung Electronics Co., Ltd
5 * http://www.samsung.com
6 *
7 * This program is free software; you can redistribute it and/or modify it
8 * under the terms of the GNU General Public License as published by the
9 * Free Software Foundation; either version 2 of the License, or (at your
10 * option) any later version.
11 *
12 */
13
14#ifndef __LINUX_MFD_SEC_CORE_H
15#define __LINUX_MFD_SEC_CORE_H
16
17#define NUM_IRQ_REGS 4
18
19enum sec_device_type {
20 S5M8751X,
21 S5M8763X,
22 S5M8767X,
23 S2MPS11X,
24};
25
26/**
27 * struct sec_pmic_dev - s5m87xx master device for sub-drivers
28 * @dev: master device of the chip (can be used to access platform data)
29 * @i2c: i2c client private data for regulator
30 * @rtc: i2c client private data for rtc
31 * @iolock: mutex for serializing io access
32 * @irqlock: mutex for buslock
33 * @irq_base: base IRQ number for sec-pmic, required for IRQs
34 * @irq: generic IRQ number for s5m87xx
35 * @ono: power onoff IRQ number for s5m87xx
36 * @irq_masks_cur: currently active value
37 * @irq_masks_cache: cached hardware value
38 * @type: indicate which s5m87xx "variant" is used
39 */
40struct sec_pmic_dev {
41 struct device *dev;
42 struct regmap *regmap;
43 struct i2c_client *i2c;
44 struct i2c_client *rtc;
45 struct mutex iolock;
46 struct mutex irqlock;
47
48 int device_type;
49 int irq_base;
50 int irq;
51 struct regmap_irq_chip_data *irq_data;
52
53 int ono;
54 u8 irq_masks_cur[NUM_IRQ_REGS];
55 u8 irq_masks_cache[NUM_IRQ_REGS];
56 int type;
57 bool wakeup;
58};
59
60int sec_irq_init(struct sec_pmic_dev *sec_pmic);
61void sec_irq_exit(struct sec_pmic_dev *sec_pmic);
62int sec_irq_resume(struct sec_pmic_dev *sec_pmic);
63
64extern int sec_reg_read(struct sec_pmic_dev *sec_pmic, u8 reg, void *dest);
65extern int sec_bulk_read(struct sec_pmic_dev *sec_pmic, u8 reg, int count, u8 *buf);
66extern int sec_reg_write(struct sec_pmic_dev *sec_pmic, u8 reg, u8 value);
67extern int sec_bulk_write(struct sec_pmic_dev *sec_pmic, u8 reg, int count, u8 *buf);
68extern int sec_reg_update(struct sec_pmic_dev *sec_pmic, u8 reg, u8 val, u8 mask);
69
70struct sec_platform_data {
71 struct sec_regulator_data *regulators;
72 struct sec_opmode_data *opmode;
73 int device_type;
74 int num_regulators;
75
76 int irq_base;
77 int (*cfg_pmic_irq)(void);
78
79 int ono;
80 bool wakeup;
81 bool buck_voltage_lock;
82
83 int buck_gpios[3];
84 int buck_ds[3];
85 int buck2_voltage[8];
86 bool buck2_gpiodvs;
87 int buck3_voltage[8];
88 bool buck3_gpiodvs;
89 int buck4_voltage[8];
90 bool buck4_gpiodvs;
91
92 int buck_set1;
93 int buck_set2;
94 int buck_set3;
95 int buck2_enable;
96 int buck3_enable;
97 int buck4_enable;
98 int buck_default_idx;
99 int buck2_default_idx;
100 int buck3_default_idx;
101 int buck4_default_idx;
102
103 int buck_ramp_delay;
104
105 int buck2_ramp_delay;
106 int buck34_ramp_delay;
107 int buck5_ramp_delay;
108 int buck16_ramp_delay;
109 int buck7810_ramp_delay;
110 int buck9_ramp_delay;
111
112 bool buck2_ramp_enable;
113 bool buck3_ramp_enable;
114 bool buck4_ramp_enable;
115 bool buck6_ramp_enable;
116
117 int buck2_init;
118 int buck3_init;
119 int buck4_init;
120};
121
122/**
123 * sec_regulator_data - regulator data
124 * @id: regulator id
125 * @initdata: regulator init data (contraints, supplies, ...)
126 */
127struct sec_regulator_data {
128 int id;
129 struct regulator_init_data *initdata;
130};
131
132/*
133 * sec_opmode_data - regulator operation mode data
134 * @id: regulator id
135 * @mode: regulator operation mode
136 */
137struct sec_opmode_data {
138 int id;
139 int mode;
140};
141
142/*
143 * samsung regulator operation mode
144 * SEC_OPMODE_OFF Regulator always OFF
145 * SEC_OPMODE_ON Regulator always ON
146 * SEC_OPMODE_LOWPOWER Regulator is on in low-power mode
147 * SEC_OPMODE_SUSPEND Regulator is changed by PWREN pin
148 * If PWREN is high, regulator is on
149 * If PWREN is low, regulator is off
150 */
151
152enum sec_opmode {
153 SEC_OPMODE_OFF,
154 SEC_OPMODE_ON,
155 SEC_OPMODE_LOWPOWER,
156 SEC_OPMODE_SUSPEND,
157};
158
159#endif /* __LINUX_MFD_SEC_CORE_H */
diff --git a/include/linux/mfd/samsung/irq.h b/include/linux/mfd/samsung/irq.h
new file mode 100644
index 000000000000..d43b4f9e7fb2
--- /dev/null
+++ b/include/linux/mfd/samsung/irq.h
@@ -0,0 +1,152 @@
1/* irq.h
2 *
3 * Copyright (c) 2012 Samsung Electronics Co., Ltd
4 * http://www.samsung.com
5 *
6 * This program is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License as published by the
8 * Free Software Foundation; either version 2 of the License, or (at your
9 * option) any later version.
10 *
11 */
12
13#ifndef __LINUX_MFD_SEC_IRQ_H
14#define __LINUX_MFD_SEC_IRQ_H
15
16enum s2mps11_irq {
17 S2MPS11_IRQ_PWRONF,
18 S2MPS11_IRQ_PWRONR,
19 S2MPS11_IRQ_JIGONBF,
20 S2MPS11_IRQ_JIGONBR,
21 S2MPS11_IRQ_ACOKBF,
22 S2MPS11_IRQ_ACOKBR,
23 S2MPS11_IRQ_PWRON1S,
24 S2MPS11_IRQ_MRB,
25
26 S2MPS11_IRQ_RTC60S,
27 S2MPS11_IRQ_RTCA1,
28 S2MPS11_IRQ_RTCA2,
29 S2MPS11_IRQ_SMPL,
30 S2MPS11_IRQ_RTC1S,
31 S2MPS11_IRQ_WTSR,
32
33 S2MPS11_IRQ_INT120C,
34 S2MPS11_IRQ_INT140C,
35
36 S2MPS11_IRQ_NR,
37};
38
39#define S2MPS11_IRQ_PWRONF_MASK (1 << 0)
40#define S2MPS11_IRQ_PWRONR_MASK (1 << 1)
41#define S2MPS11_IRQ_JIGONBF_MASK (1 << 2)
42#define S2MPS11_IRQ_JIGONBR_MASK (1 << 3)
43#define S2MPS11_IRQ_ACOKBF_MASK (1 << 4)
44#define S2MPS11_IRQ_ACOKBR_MASK (1 << 5)
45#define S2MPS11_IRQ_PWRON1S_MASK (1 << 6)
46#define S2MPS11_IRQ_MRB_MASK (1 << 7)
47
48#define S2MPS11_IRQ_RTC60S_MASK (1 << 0)
49#define S2MPS11_IRQ_RTCA1_MASK (1 << 1)
50#define S2MPS11_IRQ_RTCA2_MASK (1 << 2)
51#define S2MPS11_IRQ_SMPL_MASK (1 << 3)
52#define S2MPS11_IRQ_RTC1S_MASK (1 << 4)
53#define S2MPS11_IRQ_WTSR_MASK (1 << 5)
54
55#define S2MPS11_IRQ_INT120C_MASK (1 << 0)
56#define S2MPS11_IRQ_INT140C_MASK (1 << 1)
57
58enum s5m8767_irq {
59 S5M8767_IRQ_PWRR,
60 S5M8767_IRQ_PWRF,
61 S5M8767_IRQ_PWR1S,
62 S5M8767_IRQ_JIGR,
63 S5M8767_IRQ_JIGF,
64 S5M8767_IRQ_LOWBAT2,
65 S5M8767_IRQ_LOWBAT1,
66
67 S5M8767_IRQ_MRB,
68 S5M8767_IRQ_DVSOK2,
69 S5M8767_IRQ_DVSOK3,
70 S5M8767_IRQ_DVSOK4,
71
72 S5M8767_IRQ_RTC60S,
73 S5M8767_IRQ_RTCA1,
74 S5M8767_IRQ_RTCA2,
75 S5M8767_IRQ_SMPL,
76 S5M8767_IRQ_RTC1S,
77 S5M8767_IRQ_WTSR,
78
79 S5M8767_IRQ_NR,
80};
81
82#define S5M8767_IRQ_PWRR_MASK (1 << 0)
83#define S5M8767_IRQ_PWRF_MASK (1 << 1)
84#define S5M8767_IRQ_PWR1S_MASK (1 << 3)
85#define S5M8767_IRQ_JIGR_MASK (1 << 4)
86#define S5M8767_IRQ_JIGF_MASK (1 << 5)
87#define S5M8767_IRQ_LOWBAT2_MASK (1 << 6)
88#define S5M8767_IRQ_LOWBAT1_MASK (1 << 7)
89
90#define S5M8767_IRQ_MRB_MASK (1 << 2)
91#define S5M8767_IRQ_DVSOK2_MASK (1 << 3)
92#define S5M8767_IRQ_DVSOK3_MASK (1 << 4)
93#define S5M8767_IRQ_DVSOK4_MASK (1 << 5)
94
95#define S5M8767_IRQ_RTC60S_MASK (1 << 0)
96#define S5M8767_IRQ_RTCA1_MASK (1 << 1)
97#define S5M8767_IRQ_RTCA2_MASK (1 << 2)
98#define S5M8767_IRQ_SMPL_MASK (1 << 3)
99#define S5M8767_IRQ_RTC1S_MASK (1 << 4)
100#define S5M8767_IRQ_WTSR_MASK (1 << 5)
101
102enum s5m8763_irq {
103 S5M8763_IRQ_DCINF,
104 S5M8763_IRQ_DCINR,
105 S5M8763_IRQ_JIGF,
106 S5M8763_IRQ_JIGR,
107 S5M8763_IRQ_PWRONF,
108 S5M8763_IRQ_PWRONR,
109
110 S5M8763_IRQ_WTSREVNT,
111 S5M8763_IRQ_SMPLEVNT,
112 S5M8763_IRQ_ALARM1,
113 S5M8763_IRQ_ALARM0,
114
115 S5M8763_IRQ_ONKEY1S,
116 S5M8763_IRQ_TOPOFFR,
117 S5M8763_IRQ_DCINOVPR,
118 S5M8763_IRQ_CHGRSTF,
119 S5M8763_IRQ_DONER,
120 S5M8763_IRQ_CHGFAULT,
121
122 S5M8763_IRQ_LOBAT1,
123 S5M8763_IRQ_LOBAT2,
124
125 S5M8763_IRQ_NR,
126};
127
128#define S5M8763_IRQ_DCINF_MASK (1 << 2)
129#define S5M8763_IRQ_DCINR_MASK (1 << 3)
130#define S5M8763_IRQ_JIGF_MASK (1 << 4)
131#define S5M8763_IRQ_JIGR_MASK (1 << 5)
132#define S5M8763_IRQ_PWRONF_MASK (1 << 6)
133#define S5M8763_IRQ_PWRONR_MASK (1 << 7)
134
135#define S5M8763_IRQ_WTSREVNT_MASK (1 << 0)
136#define S5M8763_IRQ_SMPLEVNT_MASK (1 << 1)
137#define S5M8763_IRQ_ALARM1_MASK (1 << 2)
138#define S5M8763_IRQ_ALARM0_MASK (1 << 3)
139
140#define S5M8763_IRQ_ONKEY1S_MASK (1 << 0)
141#define S5M8763_IRQ_TOPOFFR_MASK (1 << 2)
142#define S5M8763_IRQ_DCINOVPR_MASK (1 << 3)
143#define S5M8763_IRQ_CHGRSTF_MASK (1 << 4)
144#define S5M8763_IRQ_DONER_MASK (1 << 5)
145#define S5M8763_IRQ_CHGFAULT_MASK (1 << 7)
146
147#define S5M8763_IRQ_LOBAT1_MASK (1 << 0)
148#define S5M8763_IRQ_LOBAT2_MASK (1 << 1)
149
150#define S5M8763_ENRAMP (1 << 4)
151
152#endif /* __LINUX_MFD_SEC_IRQ_H */
diff --git a/include/linux/mfd/s5m87xx/s5m-rtc.h b/include/linux/mfd/samsung/rtc.h
index 6ce8da264cec..71597e20cddb 100644
--- a/include/linux/mfd/s5m87xx/s5m-rtc.h
+++ b/include/linux/mfd/samsung/rtc.h
@@ -1,5 +1,4 @@
1/* 1/* rtc.h
2 * s5m-rtc.h
3 * 2 *
4 * Copyright (c) 2011 Samsung Electronics Co., Ltd 3 * Copyright (c) 2011 Samsung Electronics Co., Ltd
5 * http://www.samsung.com 4 * http://www.samsung.com
@@ -11,39 +10,39 @@
11 * 10 *
12 */ 11 */
13 12
14#ifndef __LINUX_MFD_S5M_RTC_H 13#ifndef __LINUX_MFD_SEC_RTC_H
15#define __LINUX_MFD_S5M_RTC_H 14#define __LINUX_MFD_SEC_RTC_H
16 15
17enum s5m87xx_rtc_reg { 16enum sec_rtc_reg {
18 S5M87XX_RTC_SEC, 17 SEC_RTC_SEC,
19 S5M87XX_RTC_MIN, 18 SEC_RTC_MIN,
20 S5M87XX_RTC_HOUR, 19 SEC_RTC_HOUR,
21 S5M87XX_RTC_WEEKDAY, 20 SEC_RTC_WEEKDAY,
22 S5M87XX_RTC_DATE, 21 SEC_RTC_DATE,
23 S5M87XX_RTC_MONTH, 22 SEC_RTC_MONTH,
24 S5M87XX_RTC_YEAR1, 23 SEC_RTC_YEAR1,
25 S5M87XX_RTC_YEAR2, 24 SEC_RTC_YEAR2,
26 S5M87XX_ALARM0_SEC, 25 SEC_ALARM0_SEC,
27 S5M87XX_ALARM0_MIN, 26 SEC_ALARM0_MIN,
28 S5M87XX_ALARM0_HOUR, 27 SEC_ALARM0_HOUR,
29 S5M87XX_ALARM0_WEEKDAY, 28 SEC_ALARM0_WEEKDAY,
30 S5M87XX_ALARM0_DATE, 29 SEC_ALARM0_DATE,
31 S5M87XX_ALARM0_MONTH, 30 SEC_ALARM0_MONTH,
32 S5M87XX_ALARM0_YEAR1, 31 SEC_ALARM0_YEAR1,
33 S5M87XX_ALARM0_YEAR2, 32 SEC_ALARM0_YEAR2,
34 S5M87XX_ALARM1_SEC, 33 SEC_ALARM1_SEC,
35 S5M87XX_ALARM1_MIN, 34 SEC_ALARM1_MIN,
36 S5M87XX_ALARM1_HOUR, 35 SEC_ALARM1_HOUR,
37 S5M87XX_ALARM1_WEEKDAY, 36 SEC_ALARM1_WEEKDAY,
38 S5M87XX_ALARM1_DATE, 37 SEC_ALARM1_DATE,
39 S5M87XX_ALARM1_MONTH, 38 SEC_ALARM1_MONTH,
40 S5M87XX_ALARM1_YEAR1, 39 SEC_ALARM1_YEAR1,
41 S5M87XX_ALARM1_YEAR2, 40 SEC_ALARM1_YEAR2,
42 S5M87XX_ALARM0_CONF, 41 SEC_ALARM0_CONF,
43 S5M87XX_ALARM1_CONF, 42 SEC_ALARM1_CONF,
44 S5M87XX_RTC_STATUS, 43 SEC_RTC_STATUS,
45 S5M87XX_WTSR_SMPL_CNTL, 44 SEC_WTSR_SMPL_CNTL,
46 S5M87XX_RTC_UDR_CON, 45 SEC_RTC_UDR_CON,
47}; 46};
48 47
49#define RTC_I2C_ADDR (0x0C >> 1) 48#define RTC_I2C_ADDR (0x0C >> 1)
@@ -81,4 +80,4 @@ enum {
81 RTC_YEAR2, 80 RTC_YEAR2,
82}; 81};
83 82
84#endif /* __LINUX_MFD_S5M_RTC_H */ 83#endif /* __LINUX_MFD_SEC_RTC_H */
diff --git a/include/linux/mfd/samsung/s2mps11.h b/include/linux/mfd/samsung/s2mps11.h
new file mode 100644
index 000000000000..ad2252f239d7
--- /dev/null
+++ b/include/linux/mfd/samsung/s2mps11.h
@@ -0,0 +1,196 @@
1/*
2 * s2mps11.h
3 *
4 * Copyright (c) 2012 Samsung Electronics Co., Ltd
5 * http://www.samsung.com
6 *
7 * This program is free software; you can redistribute it and/or modify it
8 * under the terms of the GNU General Public License as published by the
9 * Free Software Foundation; either version 2 of the License, or (at your
10 * option) any later version.
11 *
12 */
13
14#ifndef __LINUX_MFD_S2MPS11_H
15#define __LINUX_MFD_S2MPS11_H
16
17/* S2MPS11 registers */
18enum s2mps11_reg {
19 S2MPS11_REG_ID,
20 S2MPS11_REG_INT1,
21 S2MPS11_REG_INT2,
22 S2MPS11_REG_INT3,
23 S2MPS11_REG_INT1M,
24 S2MPS11_REG_INT2M,
25 S2MPS11_REG_INT3M,
26 S2MPS11_REG_ST1,
27 S2MPS11_REG_ST2,
28 S2MPS11_REG_OFFSRC,
29 S2MPS11_REG_PWRONSRC,
30 S2MPS11_REG_RTC_CTRL,
31 S2MPS11_REG_CTRL1,
32 S2MPS11_REG_ETC_TEST,
33 S2MPS11_REG_RSVD3,
34 S2MPS11_REG_BU_CHG,
35 S2MPS11_REG_RAMP,
36 S2MPS11_REG_RAMP_BUCK,
37 S2MPS11_REG_LDO1_8,
38 S2MPS11_REG_LDO9_16,
39 S2MPS11_REG_LDO17_24,
40 S2MPS11_REG_LDO25_32,
41 S2MPS11_REG_LDO33_38,
42 S2MPS11_REG_LDO1_8_1,
43 S2MPS11_REG_LDO9_16_1,
44 S2MPS11_REG_LDO17_24_1,
45 S2MPS11_REG_LDO25_32_1,
46 S2MPS11_REG_LDO33_38_1,
47 S2MPS11_REG_OTP_ADRL,
48 S2MPS11_REG_OTP_ADRH,
49 S2MPS11_REG_OTP_DATA,
50 S2MPS11_REG_MON1SEL,
51 S2MPS11_REG_MON2SEL,
52 S2MPS11_REG_LEE,
53 S2MPS11_REG_RSVD_NO,
54 S2MPS11_REG_UVLO,
55 S2MPS11_REG_LEE_NO,
56 S2MPS11_REG_B1CTRL1,
57 S2MPS11_REG_B1CTRL2,
58 S2MPS11_REG_B2CTRL1,
59 S2MPS11_REG_B2CTRL2,
60 S2MPS11_REG_B3CTRL1,
61 S2MPS11_REG_B3CTRL2,
62 S2MPS11_REG_B4CTRL1,
63 S2MPS11_REG_B4CTRL2,
64 S2MPS11_REG_B5CTRL1,
65 S2MPS11_REG_BUCK5_SW,
66 S2MPS11_REG_B5CTRL2,
67 S2MPS11_REG_B5CTRL3,
68 S2MPS11_REG_B5CTRL4,
69 S2MPS11_REG_B5CTRL5,
70 S2MPS11_REG_B6CTRL1,
71 S2MPS11_REG_B6CTRL2,
72 S2MPS11_REG_B7CTRL1,
73 S2MPS11_REG_B7CTRL2,
74 S2MPS11_REG_B8CTRL1,
75 S2MPS11_REG_B8CTRL2,
76 S2MPS11_REG_B9CTRL1,
77 S2MPS11_REG_B9CTRL2,
78 S2MPS11_REG_B10CTRL1,
79 S2MPS11_REG_B10CTRL2,
80 S2MPS11_REG_L1CTRL,
81 S2MPS11_REG_L2CTRL,
82 S2MPS11_REG_L3CTRL,
83 S2MPS11_REG_L4CTRL,
84 S2MPS11_REG_L5CTRL,
85 S2MPS11_REG_L6CTRL,
86 S2MPS11_REG_L7CTRL,
87 S2MPS11_REG_L8CTRL,
88 S2MPS11_REG_L9CTRL,
89 S2MPS11_REG_L10CTRL,
90 S2MPS11_REG_L11CTRL,
91 S2MPS11_REG_L12CTRL,
92 S2MPS11_REG_L13CTRL,
93 S2MPS11_REG_L14CTRL,
94 S2MPS11_REG_L15CTRL,
95 S2MPS11_REG_L16CTRL,
96 S2MPS11_REG_L17CTRL,
97 S2MPS11_REG_L18CTRL,
98 S2MPS11_REG_L19CTRL,
99 S2MPS11_REG_L20CTRL,
100 S2MPS11_REG_L21CTRL,
101 S2MPS11_REG_L22CTRL,
102 S2MPS11_REG_L23CTRL,
103 S2MPS11_REG_L24CTRL,
104 S2MPS11_REG_L25CTRL,
105 S2MPS11_REG_L26CTRL,
106 S2MPS11_REG_L27CTRL,
107 S2MPS11_REG_L28CTRL,
108 S2MPS11_REG_L29CTRL,
109 S2MPS11_REG_L30CTRL,
110 S2MPS11_REG_L31CTRL,
111 S2MPS11_REG_L32CTRL,
112 S2MPS11_REG_L33CTRL,
113 S2MPS11_REG_L34CTRL,
114 S2MPS11_REG_L35CTRL,
115 S2MPS11_REG_L36CTRL,
116 S2MPS11_REG_L37CTRL,
117 S2MPS11_REG_L38CTRL,
118};
119
120/* S2MPS11 regulator ids */
121enum s2mps11_regulators {
122 S2MPS11_LDO1,
123 S2MPS11_LDO2,
124 S2MPS11_LDO3,
125 S2MPS11_LDO4,
126 S2MPS11_LDO5,
127 S2MPS11_LDO6,
128 S2MPS11_LDO7,
129 S2MPS11_LDO8,
130 S2MPS11_LDO9,
131 S2MPS11_LDO10,
132 S2MPS11_LDO11,
133 S2MPS11_LDO12,
134 S2MPS11_LDO13,
135 S2MPS11_LDO14,
136 S2MPS11_LDO15,
137 S2MPS11_LDO16,
138 S2MPS11_LDO17,
139 S2MPS11_LDO18,
140 S2MPS11_LDO19,
141 S2MPS11_LDO20,
142 S2MPS11_LDO21,
143 S2MPS11_LDO22,
144 S2MPS11_LDO23,
145 S2MPS11_LDO24,
146 S2MPS11_LDO25,
147 S2MPS11_LDO26,
148 S2MPS11_LDO27,
149 S2MPS11_LDO28,
150 S2MPS11_LDO29,
151 S2MPS11_LDO30,
152 S2MPS11_LDO31,
153 S2MPS11_LDO32,
154 S2MPS11_LDO33,
155 S2MPS11_LDO34,
156 S2MPS11_LDO35,
157 S2MPS11_LDO36,
158 S2MPS11_LDO37,
159 S2MPS11_LDO38,
160 S2MPS11_BUCK1,
161 S2MPS11_BUCK2,
162 S2MPS11_BUCK3,
163 S2MPS11_BUCK4,
164 S2MPS11_BUCK5,
165 S2MPS11_BUCK6,
166 S2MPS11_BUCK7,
167 S2MPS11_BUCK8,
168 S2MPS11_BUCK9,
169 S2MPS11_BUCK10,
170 S2MPS11_AP_EN32KHZ,
171 S2MPS11_CP_EN32KHZ,
172 S2MPS11_BT_EN32KHZ,
173
174 S2MPS11_REG_MAX,
175};
176
177#define S2MPS11_BUCK_MIN1 600000
178#define S2MPS11_BUCK_MIN2 750000
179#define S2MPS11_BUCK_MIN3 3000000
180#define S2MPS11_LDO_MIN 800000
181#define S2MPS11_BUCK_STEP1 6250
182#define S2MPS11_BUCK_STEP2 12500
183#define S2MPS11_BUCK_STEP3 25000
184#define S2MPS11_LDO_STEP1 50000
185#define S2MPS11_LDO_STEP2 25000
186#define S2MPS11_LDO_VSEL_MASK 0x3F
187#define S2MPS11_BUCK_VSEL_MASK 0xFF
188#define S2MPS11_ENABLE_MASK (0x03 << S2MPS11_ENABLE_SHIFT)
189#define S2MPS11_ENABLE_SHIFT 0x06
190#define S2MPS11_LDO_N_VOLTAGES (S2MPS11_LDO_VSEL_MASK + 1)
191#define S2MPS11_BUCK_N_VOLTAGES (S2MPS11_BUCK_VSEL_MASK + 1)
192
193#define S2MPS11_PMIC_EN_SHIFT 6
194#define S2MPS11_REGULATOR_MAX (S2MPS11_REG_MAX - 3)
195
196#endif /* __LINUX_MFD_S2MPS11_H */
diff --git a/include/linux/mfd/samsung/s5m8763.h b/include/linux/mfd/samsung/s5m8763.h
new file mode 100644
index 000000000000..e025418e5589
--- /dev/null
+++ b/include/linux/mfd/samsung/s5m8763.h
@@ -0,0 +1,96 @@
1/* s5m8763.h
2 *
3 * Copyright (c) 2011 Samsung Electronics Co., Ltd
4 * http://www.samsung.com
5 *
6 * This program is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License as published by the
8 * Free Software Foundation; either version 2 of the License, or (at your
9 * option) any later version.
10 *
11 */
12
13#ifndef __LINUX_MFD_S5M8763_H
14#define __LINUX_MFD_S5M8763_H
15
16/* S5M8763 registers */
17enum s5m8763_reg {
18 S5M8763_REG_IRQ1,
19 S5M8763_REG_IRQ2,
20 S5M8763_REG_IRQ3,
21 S5M8763_REG_IRQ4,
22 S5M8763_REG_IRQM1,
23 S5M8763_REG_IRQM2,
24 S5M8763_REG_IRQM3,
25 S5M8763_REG_IRQM4,
26 S5M8763_REG_STATUS1,
27 S5M8763_REG_STATUS2,
28 S5M8763_REG_STATUSM1,
29 S5M8763_REG_STATUSM2,
30 S5M8763_REG_CHGR1,
31 S5M8763_REG_CHGR2,
32 S5M8763_REG_LDO_ACTIVE_DISCHARGE1,
33 S5M8763_REG_LDO_ACTIVE_DISCHARGE2,
34 S5M8763_REG_BUCK_ACTIVE_DISCHARGE3,
35 S5M8763_REG_ONOFF1,
36 S5M8763_REG_ONOFF2,
37 S5M8763_REG_ONOFF3,
38 S5M8763_REG_ONOFF4,
39 S5M8763_REG_BUCK1_VOLTAGE1,
40 S5M8763_REG_BUCK1_VOLTAGE2,
41 S5M8763_REG_BUCK1_VOLTAGE3,
42 S5M8763_REG_BUCK1_VOLTAGE4,
43 S5M8763_REG_BUCK2_VOLTAGE1,
44 S5M8763_REG_BUCK2_VOLTAGE2,
45 S5M8763_REG_BUCK3,
46 S5M8763_REG_BUCK4,
47 S5M8763_REG_LDO1_LDO2,
48 S5M8763_REG_LDO3,
49 S5M8763_REG_LDO4,
50 S5M8763_REG_LDO5,
51 S5M8763_REG_LDO6,
52 S5M8763_REG_LDO7,
53 S5M8763_REG_LDO7_LDO8,
54 S5M8763_REG_LDO9_LDO10,
55 S5M8763_REG_LDO11,
56 S5M8763_REG_LDO12,
57 S5M8763_REG_LDO13,
58 S5M8763_REG_LDO14,
59 S5M8763_REG_LDO15,
60 S5M8763_REG_LDO16,
61 S5M8763_REG_BKCHR,
62 S5M8763_REG_LBCNFG1,
63 S5M8763_REG_LBCNFG2,
64};
65
66/* S5M8763 regulator ids */
67enum s5m8763_regulators {
68 S5M8763_LDO1,
69 S5M8763_LDO2,
70 S5M8763_LDO3,
71 S5M8763_LDO4,
72 S5M8763_LDO5,
73 S5M8763_LDO6,
74 S5M8763_LDO7,
75 S5M8763_LDO8,
76 S5M8763_LDO9,
77 S5M8763_LDO10,
78 S5M8763_LDO11,
79 S5M8763_LDO12,
80 S5M8763_LDO13,
81 S5M8763_LDO14,
82 S5M8763_LDO15,
83 S5M8763_LDO16,
84 S5M8763_BUCK1,
85 S5M8763_BUCK2,
86 S5M8763_BUCK3,
87 S5M8763_BUCK4,
88 S5M8763_AP_EN32KHZ,
89 S5M8763_CP_EN32KHZ,
90 S5M8763_ENCHGVI,
91 S5M8763_ESAFEUSB1,
92 S5M8763_ESAFEUSB2,
93};
94
95#define S5M8763_ENRAMP (1 << 4)
96#endif /* __LINUX_MFD_S5M8763_H */
diff --git a/include/linux/mfd/samsung/s5m8767.h b/include/linux/mfd/samsung/s5m8767.h
new file mode 100644
index 000000000000..306a95fc558c
--- /dev/null
+++ b/include/linux/mfd/samsung/s5m8767.h
@@ -0,0 +1,188 @@
1/* s5m8767.h
2 *
3 * Copyright (c) 2011 Samsung Electronics Co., Ltd
4 * http://www.samsung.com
5 *
6 * This program is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License as published by the
8 * Free Software Foundation; either version 2 of the License, or (at your
9 * option) any later version.
10 *
11 */
12
13#ifndef __LINUX_MFD_S5M8767_H
14#define __LINUX_MFD_S5M8767_H
15
16/* S5M8767 registers */
17enum s5m8767_reg {
18 S5M8767_REG_ID,
19 S5M8767_REG_INT1,
20 S5M8767_REG_INT2,
21 S5M8767_REG_INT3,
22 S5M8767_REG_INT1M,
23 S5M8767_REG_INT2M,
24 S5M8767_REG_INT3M,
25 S5M8767_REG_STATUS1,
26 S5M8767_REG_STATUS2,
27 S5M8767_REG_STATUS3,
28 S5M8767_REG_CTRL1,
29 S5M8767_REG_CTRL2,
30 S5M8767_REG_LOWBAT1,
31 S5M8767_REG_LOWBAT2,
32 S5M8767_REG_BUCHG,
33 S5M8767_REG_DVSRAMP,
34 S5M8767_REG_DVSTIMER2 = 0x10,
35 S5M8767_REG_DVSTIMER3,
36 S5M8767_REG_DVSTIMER4,
37 S5M8767_REG_LDO1,
38 S5M8767_REG_LDO2,
39 S5M8767_REG_LDO3,
40 S5M8767_REG_LDO4,
41 S5M8767_REG_LDO5,
42 S5M8767_REG_LDO6,
43 S5M8767_REG_LDO7,
44 S5M8767_REG_LDO8,
45 S5M8767_REG_LDO9,
46 S5M8767_REG_LDO10,
47 S5M8767_REG_LDO11,
48 S5M8767_REG_LDO12,
49 S5M8767_REG_LDO13,
50 S5M8767_REG_LDO14 = 0x20,
51 S5M8767_REG_LDO15,
52 S5M8767_REG_LDO16,
53 S5M8767_REG_LDO17,
54 S5M8767_REG_LDO18,
55 S5M8767_REG_LDO19,
56 S5M8767_REG_LDO20,
57 S5M8767_REG_LDO21,
58 S5M8767_REG_LDO22,
59 S5M8767_REG_LDO23,
60 S5M8767_REG_LDO24,
61 S5M8767_REG_LDO25,
62 S5M8767_REG_LDO26,
63 S5M8767_REG_LDO27,
64 S5M8767_REG_LDO28,
65 S5M8767_REG_UVLO = 0x31,
66 S5M8767_REG_BUCK1CTRL1,
67 S5M8767_REG_BUCK1CTRL2,
68 S5M8767_REG_BUCK2CTRL,
69 S5M8767_REG_BUCK2DVS1,
70 S5M8767_REG_BUCK2DVS2,
71 S5M8767_REG_BUCK2DVS3,
72 S5M8767_REG_BUCK2DVS4,
73 S5M8767_REG_BUCK2DVS5,
74 S5M8767_REG_BUCK2DVS6,
75 S5M8767_REG_BUCK2DVS7,
76 S5M8767_REG_BUCK2DVS8,
77 S5M8767_REG_BUCK3CTRL,
78 S5M8767_REG_BUCK3DVS1,
79 S5M8767_REG_BUCK3DVS2,
80 S5M8767_REG_BUCK3DVS3,
81 S5M8767_REG_BUCK3DVS4,
82 S5M8767_REG_BUCK3DVS5,
83 S5M8767_REG_BUCK3DVS6,
84 S5M8767_REG_BUCK3DVS7,
85 S5M8767_REG_BUCK3DVS8,
86 S5M8767_REG_BUCK4CTRL,
87 S5M8767_REG_BUCK4DVS1,
88 S5M8767_REG_BUCK4DVS2,
89 S5M8767_REG_BUCK4DVS3,
90 S5M8767_REG_BUCK4DVS4,
91 S5M8767_REG_BUCK4DVS5,
92 S5M8767_REG_BUCK4DVS6,
93 S5M8767_REG_BUCK4DVS7,
94 S5M8767_REG_BUCK4DVS8,
95 S5M8767_REG_BUCK5CTRL1,
96 S5M8767_REG_BUCK5CTRL2,
97 S5M8767_REG_BUCK5CTRL3,
98 S5M8767_REG_BUCK5CTRL4,
99 S5M8767_REG_BUCK5CTRL5,
100 S5M8767_REG_BUCK6CTRL1,
101 S5M8767_REG_BUCK6CTRL2,
102 S5M8767_REG_BUCK7CTRL1,
103 S5M8767_REG_BUCK7CTRL2,
104 S5M8767_REG_BUCK8CTRL1,
105 S5M8767_REG_BUCK8CTRL2,
106 S5M8767_REG_BUCK9CTRL1,
107 S5M8767_REG_BUCK9CTRL2,
108 S5M8767_REG_LDO1CTRL,
109 S5M8767_REG_LDO2_1CTRL,
110 S5M8767_REG_LDO2_2CTRL,
111 S5M8767_REG_LDO2_3CTRL,
112 S5M8767_REG_LDO2_4CTRL,
113 S5M8767_REG_LDO3CTRL,
114 S5M8767_REG_LDO4CTRL,
115 S5M8767_REG_LDO5CTRL,
116 S5M8767_REG_LDO6CTRL,
117 S5M8767_REG_LDO7CTRL,
118 S5M8767_REG_LDO8CTRL,
119 S5M8767_REG_LDO9CTRL,
120 S5M8767_REG_LDO10CTRL,
121 S5M8767_REG_LDO11CTRL,
122 S5M8767_REG_LDO12CTRL,
123 S5M8767_REG_LDO13CTRL,
124 S5M8767_REG_LDO14CTRL,
125 S5M8767_REG_LDO15CTRL,
126 S5M8767_REG_LDO16CTRL,
127 S5M8767_REG_LDO17CTRL,
128 S5M8767_REG_LDO18CTRL,
129 S5M8767_REG_LDO19CTRL,
130 S5M8767_REG_LDO20CTRL,
131 S5M8767_REG_LDO21CTRL,
132 S5M8767_REG_LDO22CTRL,
133 S5M8767_REG_LDO23CTRL,
134 S5M8767_REG_LDO24CTRL,
135 S5M8767_REG_LDO25CTRL,
136 S5M8767_REG_LDO26CTRL,
137 S5M8767_REG_LDO27CTRL,
138 S5M8767_REG_LDO28CTRL,
139};
140
141/* S5M8767 regulator ids */
142enum s5m8767_regulators {
143 S5M8767_LDO1,
144 S5M8767_LDO2,
145 S5M8767_LDO3,
146 S5M8767_LDO4,
147 S5M8767_LDO5,
148 S5M8767_LDO6,
149 S5M8767_LDO7,
150 S5M8767_LDO8,
151 S5M8767_LDO9,
152 S5M8767_LDO10,
153 S5M8767_LDO11,
154 S5M8767_LDO12,
155 S5M8767_LDO13,
156 S5M8767_LDO14,
157 S5M8767_LDO15,
158 S5M8767_LDO16,
159 S5M8767_LDO17,
160 S5M8767_LDO18,
161 S5M8767_LDO19,
162 S5M8767_LDO20,
163 S5M8767_LDO21,
164 S5M8767_LDO22,
165 S5M8767_LDO23,
166 S5M8767_LDO24,
167 S5M8767_LDO25,
168 S5M8767_LDO26,
169 S5M8767_LDO27,
170 S5M8767_LDO28,
171 S5M8767_BUCK1,
172 S5M8767_BUCK2,
173 S5M8767_BUCK3,
174 S5M8767_BUCK4,
175 S5M8767_BUCK5,
176 S5M8767_BUCK6,
177 S5M8767_BUCK7,
178 S5M8767_BUCK8,
179 S5M8767_BUCK9,
180 S5M8767_AP_EN32KHZ,
181 S5M8767_CP_EN32KHZ,
182
183 S5M8767_REG_MAX,
184};
185
186#define S5M8767_ENCTRL_SHIFT 6
187
188#endif /* __LINUX_MFD_S5M8767_H */
diff --git a/include/linux/mfd/tps65910.h b/include/linux/mfd/tps65910.h
index 6c4c478e21a4..9bf8767818b4 100644
--- a/include/linux/mfd/tps65910.h
+++ b/include/linux/mfd/tps65910.h
@@ -807,6 +807,7 @@ struct tps65910_board {
807 int irq_base; 807 int irq_base;
808 int vmbch_threshold; 808 int vmbch_threshold;
809 int vmbch2_threshold; 809 int vmbch2_threshold;
810 bool en_ck32k_xtal;
810 bool en_dev_slp; 811 bool en_dev_slp;
811 struct tps65910_sleep_keepon_data *slp_keepon; 812 struct tps65910_sleep_keepon_data *slp_keepon;
812 bool en_gpio_sleep[TPS6591X_MAX_NUM_GPIO]; 813 bool en_gpio_sleep[TPS6591X_MAX_NUM_GPIO];
diff --git a/include/linux/mfd/twl6040.h b/include/linux/mfd/twl6040.h
index 6659487c31e7..eaad49f7c130 100644
--- a/include/linux/mfd/twl6040.h
+++ b/include/linux/mfd/twl6040.h
@@ -161,8 +161,9 @@
161#define TWL6040_CELLS 2 161#define TWL6040_CELLS 2
162 162
163#define TWL6040_REV_ES1_0 0x00 163#define TWL6040_REV_ES1_0 0x00
164#define TWL6040_REV_ES1_1 0x01 164#define TWL6040_REV_ES1_1 0x01 /* Rev ES1.1 and ES1.2 */
165#define TWL6040_REV_ES1_2 0x02 165#define TWL6040_REV_ES1_3 0x02
166#define TWL6041_REV_ES2_0 0x10
166 167
167#define TWL6040_IRQ_TH 0 168#define TWL6040_IRQ_TH 0
168#define TWL6040_IRQ_PLUG 1 169#define TWL6040_IRQ_PLUG 1
@@ -206,7 +207,6 @@ struct twl6040 {
206 struct regmap *regmap; 207 struct regmap *regmap;
207 struct regulator_bulk_data supplies[2]; /* supplies for vio, v2v1 */ 208 struct regulator_bulk_data supplies[2]; /* supplies for vio, v2v1 */
208 struct mutex mutex; 209 struct mutex mutex;
209 struct mutex io_mutex;
210 struct mutex irq_mutex; 210 struct mutex irq_mutex;
211 struct mfd_cell cells[TWL6040_CELLS]; 211 struct mfd_cell cells[TWL6040_CELLS];
212 struct completion ready; 212 struct completion ready;
diff --git a/include/linux/mfd/wm8350/core.h b/include/linux/mfd/wm8350/core.h
index 9192b6404a73..509481d9cf19 100644
--- a/include/linux/mfd/wm8350/core.h
+++ b/include/linux/mfd/wm8350/core.h
@@ -17,6 +17,7 @@
17#include <linux/mutex.h> 17#include <linux/mutex.h>
18#include <linux/interrupt.h> 18#include <linux/interrupt.h>
19#include <linux/completion.h> 19#include <linux/completion.h>
20#include <linux/regmap.h>
20 21
21#include <linux/mfd/wm8350/audio.h> 22#include <linux/mfd/wm8350/audio.h>
22#include <linux/mfd/wm8350/gpio.h> 23#include <linux/mfd/wm8350/gpio.h>
@@ -66,6 +67,9 @@
66 67
67#define WM8350_MAX_REGISTER 0xFF 68#define WM8350_MAX_REGISTER 0xFF
68 69
70#define WM8350_UNLOCK_KEY 0x0013
71#define WM8350_LOCK_KEY 0x0000
72
69/* 73/*
70 * Field Definitions. 74 * Field Definitions.
71 */ 75 */
@@ -582,27 +586,9 @@
582 586
583#define WM8350_NUM_IRQ_REGS 7 587#define WM8350_NUM_IRQ_REGS 7
584 588
585struct wm8350_reg_access { 589extern const struct regmap_config wm8350_regmap;
586 u16 readable; /* Mask of readable bits */
587 u16 writable; /* Mask of writable bits */
588 u16 vol; /* Mask of volatile bits */
589};
590extern const struct wm8350_reg_access wm8350_reg_io_map[];
591extern const u16 wm8350_mode0_defaults[];
592extern const u16 wm8350_mode1_defaults[];
593extern const u16 wm8350_mode2_defaults[];
594extern const u16 wm8350_mode3_defaults[];
595extern const u16 wm8351_mode0_defaults[];
596extern const u16 wm8351_mode1_defaults[];
597extern const u16 wm8351_mode2_defaults[];
598extern const u16 wm8351_mode3_defaults[];
599extern const u16 wm8352_mode0_defaults[];
600extern const u16 wm8352_mode1_defaults[];
601extern const u16 wm8352_mode2_defaults[];
602extern const u16 wm8352_mode3_defaults[];
603 590
604struct wm8350; 591struct wm8350;
605struct regmap;
606 592
607struct wm8350_hwmon { 593struct wm8350_hwmon {
608 struct platform_device *pdev; 594 struct platform_device *pdev;
@@ -614,7 +600,7 @@ struct wm8350 {
614 600
615 /* device IO */ 601 /* device IO */
616 struct regmap *regmap; 602 struct regmap *regmap;
617 u16 *reg_cache; 603 bool unlocked;
618 604
619 struct mutex auxadc_mutex; 605 struct mutex auxadc_mutex;
620 struct completion auxadc_done; 606 struct completion auxadc_done;
diff --git a/include/linux/mfd/wm8994/pdata.h b/include/linux/mfd/wm8994/pdata.h
index 893267bb6229..f0361c031927 100644
--- a/include/linux/mfd/wm8994/pdata.h
+++ b/include/linux/mfd/wm8994/pdata.h
@@ -141,6 +141,7 @@ struct wm8994_pdata {
141 struct wm8994_ldo_pdata ldo[WM8994_NUM_LDO]; 141 struct wm8994_ldo_pdata ldo[WM8994_NUM_LDO];
142 142
143 int irq_base; /** Base IRQ number for WM8994, required for IRQs */ 143 int irq_base; /** Base IRQ number for WM8994, required for IRQs */
144 unsigned long irq_flags; /** user irq flags */
144 145
145 int num_drc_cfgs; 146 int num_drc_cfgs;
146 struct wm8994_drc_cfg *drc_cfgs; 147 struct wm8994_drc_cfg *drc_cfgs;
diff --git a/sound/soc/codecs/twl6040.c b/sound/soc/codecs/twl6040.c
index 0ff1e70b7770..c084c549942e 100644
--- a/sound/soc/codecs/twl6040.c
+++ b/sound/soc/codecs/twl6040.c
@@ -653,7 +653,7 @@ int twl6040_get_hs_step_size(struct snd_soc_codec *codec)
653{ 653{
654 struct twl6040 *twl6040 = codec->control_data; 654 struct twl6040 *twl6040 = codec->control_data;
655 655
656 if (twl6040_get_revid(twl6040) < TWL6040_REV_ES1_2) 656 if (twl6040_get_revid(twl6040) < TWL6040_REV_ES1_3)
657 /* For ES under ES_1.3 HS step is 2 mV */ 657 /* For ES under ES_1.3 HS step is 2 mV */
658 return 2; 658 return 2;
659 else 659 else