summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2015-09-04 14:35:03 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2015-09-04 14:35:03 -0400
commit8bd8fd0a29bfd5ad8e1976edd8c4c40cdb39aa4f (patch)
tree1d7b2e30083194cc4223d9b150583fc2924bd032
parent352712274507645b6f82b8763977ad87321919a3 (diff)
parent5a688c455066c21c133bc8ffa7b11f8c66b7fe0b (diff)
Merge tag 'mfd-for-linus-4.3' of git://git.kernel.org/pub/scm/linux/kernel/git/lee/mfd
Pull MFD updates from Lee Jones: "New Device Support: - New Clocksource driver from ST - New MFD/ACPI/DMA drivers for Intel's Sunrisepoint PCH based platforms - Add support for Arizona WM8998 and WM1814 - Add support for Dialog Semi DA9062 and DA9063 - Add support for Kontron COMe-bBL6 and COMe-cBW6 - Add support for X-Powers AXP152 - Add support for Atmel, many - Add support for STMPE, many - Add support for USB in X-Powers AXP22X Core Frameworks: - New Base API to traverse devices and their children in reverse order Bug Fixes: - Fix race between runtime-suspend and IRQs - Obtain platform data form more reliable source Fix-ups: - Constifying things - Variable signage changes - Kconfig depends|selects changes - Make use of BIT() macro - Do not supply .owner attribute in *_driver structures - MAINTAINERS entries - Stop using set_irq_flags() - Start using irq_set_chained_handler_and_data() - Export DT device ID structures" * tag 'mfd-for-linus-4.3' of git://git.kernel.org/pub/scm/linux/kernel/git/lee/mfd: (69 commits) mfd: jz4740-adc: Init mask cache in generic IRQ chip mfd: cros_ec: spi: Add OF match table mfd: stmpe: Add OF match table mfd: max77686: Split out regulator part from the DT binding mfd: Add DT binding for Maxim MAX77802 IC mfd: max77686: Use a generic name for the PMIC node in the example mfd: max77686: Don't suggest in binding to use a deprecated property mfd: Add MFD_CROS_EC dependencies mfd: cros_ec: Remove CROS_EC_PROTO dependency for SPI and I2C drivers mfd: axp20x: Add a cell for the usb power_supply part of the axp20x PMICs mfd: axp20x: Add missing registers, and mark more registers volatile mfd: arizona: Fixup some formatting/white space errors mfd: wm8994: Fix NULL pointer exception on missing pdata of: Add vendor prefix for Nuvoton mfd: mt6397: Implement wake handler and suspend/resume to handle wake up event mfd: atmel-hlcdc: Add support for new SoCs mfd: Export OF module alias information in missing drivers mfd: stw481x: Export I2C module alias information mfd: da9062: Support for the DA9063 OnKey in the DA9062 core mfd: max899x: Avoid redundant irq_data lookup ...
-rw-r--r--Documentation/devicetree/bindings/mfd/atmel-hlcdc.txt4
-rw-r--r--Documentation/devicetree/bindings/mfd/axp20x.txt4
-rw-r--r--Documentation/devicetree/bindings/mfd/da9062.txt88
-rw-r--r--Documentation/devicetree/bindings/mfd/max77686.txt65
-rw-r--r--Documentation/devicetree/bindings/mfd/max77802.txt26
-rw-r--r--Documentation/devicetree/bindings/regulator/max77686.txt71
-rw-r--r--Documentation/devicetree/bindings/rtc/rtc-st-lpc.txt15
-rw-r--r--Documentation/devicetree/bindings/timer/st,stih407-lpc28
-rw-r--r--Documentation/devicetree/bindings/vendor-prefixes.txt1
-rw-r--r--Documentation/devicetree/bindings/watchdog/st_lpc_wdt.txt12
-rw-r--r--MAINTAINERS11
-rw-r--r--drivers/clocksource/Kconfig8
-rw-r--r--drivers/clocksource/Makefile1
-rw-r--r--drivers/clocksource/clksrc_st_lpc.c131
-rw-r--r--drivers/i2c/busses/i2c-i801.c120
-rw-r--r--drivers/mfd/88pm800.c1
-rw-r--r--drivers/mfd/88pm805.c1
-rw-r--r--drivers/mfd/88pm860x-core.c5
-rw-r--r--drivers/mfd/Kconfig25
-rw-r--r--drivers/mfd/Makefile6
-rw-r--r--drivers/mfd/aat2870-core.c1
-rw-r--r--drivers/mfd/ab3100-core.c1
-rw-r--r--drivers/mfd/ab8500-core.c4
-rw-r--r--drivers/mfd/adp5520.c1
-rw-r--r--drivers/mfd/arizona-core.c138
-rw-r--r--drivers/mfd/arizona-i2c.c9
-rw-r--r--drivers/mfd/arizona-irq.c16
-rw-r--r--drivers/mfd/arizona.h5
-rw-r--r--drivers/mfd/as3711.c1
-rw-r--r--drivers/mfd/as3722.c1
-rw-r--r--drivers/mfd/asic3.c4
-rw-r--r--drivers/mfd/atmel-hlcdc.c55
-rw-r--r--drivers/mfd/axp20x.c112
-rw-r--r--drivers/mfd/bcm590xx.c1
-rw-r--r--drivers/mfd/cros_ec_i2c.c1
-rw-r--r--drivers/mfd/cros_ec_spi.c7
-rw-r--r--drivers/mfd/da903x.c1
-rw-r--r--drivers/mfd/da9052-i2c.c1
-rw-r--r--drivers/mfd/da9055-i2c.c1
-rw-r--r--drivers/mfd/da9062-core.c533
-rw-r--r--drivers/mfd/da9063-i2c.c1
-rw-r--r--drivers/mfd/da9063-irq.c4
-rw-r--r--drivers/mfd/db8500-prcmu.c1
-rw-r--r--drivers/mfd/ezx-pcap.c11
-rw-r--r--drivers/mfd/htc-egpio.c8
-rw-r--r--drivers/mfd/htc-i2cpld.c6
-rw-r--r--drivers/mfd/intel_soc_pmic_core.c3
-rw-r--r--drivers/mfd/ipaq-micro.c38
-rw-r--r--drivers/mfd/jz4740-adc.c9
-rw-r--r--drivers/mfd/kempld-core.c16
-rw-r--r--drivers/mfd/lm3533-core.c1
-rw-r--r--drivers/mfd/lp3943.c1
-rw-r--r--drivers/mfd/lp8788-irq.c5
-rw-r--r--drivers/mfd/lp8788.c1
-rw-r--r--drivers/mfd/lpc_ich.c32
-rw-r--r--drivers/mfd/max14577.c1
-rw-r--r--drivers/mfd/max77686.c1
-rw-r--r--drivers/mfd/max77693.c1
-rw-r--r--drivers/mfd/max8907.c1
-rw-r--r--drivers/mfd/max8925-core.c5
-rw-r--r--drivers/mfd/max8925-i2c.c1
-rw-r--r--drivers/mfd/max8997-irq.c20
-rw-r--r--drivers/mfd/max8997.c1
-rw-r--r--drivers/mfd/max8998-irq.c14
-rw-r--r--drivers/mfd/max8998.c1
-rw-r--r--drivers/mfd/mc13xxx-i2c.c1
-rw-r--r--drivers/mfd/mt6397-core.c61
-rw-r--r--drivers/mfd/palmas.c1
-rw-r--r--drivers/mfd/pm8921-core.c52
-rw-r--r--drivers/mfd/qcom_rpm.c1
-rw-r--r--drivers/mfd/rc5t583-irq.c4
-rw-r--r--drivers/mfd/rc5t583.c1
-rw-r--r--drivers/mfd/retu-mfd.c1
-rw-r--r--drivers/mfd/rt5033.c1
-rw-r--r--drivers/mfd/sec-core.c1
-rw-r--r--drivers/mfd/si476x-i2c.c1
-rw-r--r--drivers/mfd/smsc-ece1099.c1
-rw-r--r--drivers/mfd/stmpe-i2c.c1
-rw-r--r--drivers/mfd/stmpe-spi.c13
-rw-r--r--drivers/mfd/stmpe.c7
-rw-r--r--drivers/mfd/stw481x.c1
-rw-r--r--drivers/mfd/t7l66xb.c18
-rw-r--r--drivers/mfd/tc3589x.c8
-rw-r--r--drivers/mfd/tc6393xb.c13
-rw-r--r--drivers/mfd/tps6507x.c1
-rw-r--r--drivers/mfd/tps65090.c1
-rw-r--r--drivers/mfd/tps65217.c2
-rw-r--r--drivers/mfd/tps65218.c2
-rw-r--r--drivers/mfd/tps6586x.c12
-rw-r--r--drivers/mfd/tps65910.c1
-rw-r--r--drivers/mfd/tps65912-i2c.c1
-rw-r--r--drivers/mfd/tps65912-irq.c8
-rw-r--r--drivers/mfd/tps80031.c1
-rw-r--r--drivers/mfd/twl4030-irq.c11
-rw-r--r--drivers/mfd/twl6030-irq.c15
-rw-r--r--drivers/mfd/twl6040.c1
-rw-r--r--drivers/mfd/ucb1x00-core.c6
-rw-r--r--drivers/mfd/wm5102-tables.c51
-rw-r--r--drivers/mfd/wm5110-tables.c14
-rw-r--r--drivers/mfd/wm831x-i2c.c1
-rw-r--r--drivers/mfd/wm831x-irq.c7
-rw-r--r--drivers/mfd/wm8350-i2c.c1
-rw-r--r--drivers/mfd/wm8350-irq.c8
-rw-r--r--drivers/mfd/wm8400-core.c1
-rw-r--r--drivers/mfd/wm8994-core.c1
-rw-r--r--drivers/mfd/wm8994-irq.c9
-rw-r--r--drivers/mfd/wm8994-regmap.c6
-rw-r--r--drivers/mfd/wm8997-tables.c8
-rw-r--r--drivers/mfd/wm8998-tables.c1594
-rw-r--r--drivers/platform/x86/intel_pmc_ipc.c9
-rw-r--r--drivers/rtc/rtc-st-lpc.c2
-rw-r--r--drivers/watchdog/Kconfig3
-rw-r--r--drivers/watchdog/iTCO_wdt.c82
-rw-r--r--include/dt-bindings/mfd/st-lpc.h1
-rw-r--r--include/linux/mfd/88pm80x.h162
-rw-r--r--include/linux/mfd/arizona/core.h3
-rw-r--r--include/linux/mfd/arizona/pdata.h14
-rw-r--r--include/linux/mfd/arizona/registers.h220
-rw-r--r--include/linux/mfd/axp20x.h67
-rw-r--r--include/linux/mfd/da9062/core.h50
-rw-r--r--include/linux/mfd/da9062/registers.h1108
-rw-r--r--include/linux/mfd/da9063/core.h1
-rw-r--r--include/linux/mfd/lpc_ich.h6
-rw-r--r--include/linux/mfd/mt6397/core.h1
-rw-r--r--include/linux/platform_data/itco_wdt.h19
125 files changed, 4816 insertions, 581 deletions
diff --git a/Documentation/devicetree/bindings/mfd/atmel-hlcdc.txt b/Documentation/devicetree/bindings/mfd/atmel-hlcdc.txt
index f64de95a8e8b..ad5d90482a0e 100644
--- a/Documentation/devicetree/bindings/mfd/atmel-hlcdc.txt
+++ b/Documentation/devicetree/bindings/mfd/atmel-hlcdc.txt
@@ -2,7 +2,11 @@ Device-Tree bindings for Atmel's HLCDC (High LCD Controller) MFD driver
2 2
3Required properties: 3Required properties:
4 - compatible: value should be one of the following: 4 - compatible: value should be one of the following:
5 "atmel,at91sam9n12-hlcdc"
6 "atmel,at91sam9x5-hlcdc"
7 "atmel,sama5d2-hlcdc"
5 "atmel,sama5d3-hlcdc" 8 "atmel,sama5d3-hlcdc"
9 "atmel,sama5d4-hlcdc"
6 - reg: base address and size of the HLCDC device registers. 10 - reg: base address and size of the HLCDC device registers.
7 - clock-names: the name of the 3 clocks requested by the HLCDC device. 11 - clock-names: the name of the 3 clocks requested by the HLCDC device.
8 Should contain "periph_clk", "sys_clk" and "slow_clk". 12 Should contain "periph_clk", "sys_clk" and "slow_clk".
diff --git a/Documentation/devicetree/bindings/mfd/axp20x.txt b/Documentation/devicetree/bindings/mfd/axp20x.txt
index 753f14f46e85..41811223e5be 100644
--- a/Documentation/devicetree/bindings/mfd/axp20x.txt
+++ b/Documentation/devicetree/bindings/mfd/axp20x.txt
@@ -1,12 +1,14 @@
1AXP family PMIC device tree bindings 1AXP family PMIC device tree bindings
2 2
3The axp20x family current members : 3The axp20x family current members :
4axp152 (X-Powers)
4axp202 (X-Powers) 5axp202 (X-Powers)
5axp209 (X-Powers) 6axp209 (X-Powers)
6axp221 (X-Powers) 7axp221 (X-Powers)
7 8
8Required properties: 9Required properties:
9- compatible: "x-powers,axp202", "x-powers,axp209", "x-powers,axp221" 10- compatible: "x-powers,axp152", "x-powers,axp202", "x-powers,axp209",
11 "x-powers,axp221"
10- reg: The I2C slave address for the AXP chip 12- reg: The I2C slave address for the AXP chip
11- interrupt-parent: The parent interrupt controller 13- interrupt-parent: The parent interrupt controller
12- interrupts: SoC NMI / GPIO interrupt connected to the PMIC's IRQ pin 14- interrupts: SoC NMI / GPIO interrupt connected to the PMIC's IRQ pin
diff --git a/Documentation/devicetree/bindings/mfd/da9062.txt b/Documentation/devicetree/bindings/mfd/da9062.txt
new file mode 100644
index 000000000000..38802b54d48a
--- /dev/null
+++ b/Documentation/devicetree/bindings/mfd/da9062.txt
@@ -0,0 +1,88 @@
1* Dialog DA9062 Power Management Integrated Circuit (PMIC)
2
3DA9062 consists of a large and varied group of sub-devices:
4
5Device Supply Names Description
6------ ------------ -----------
7da9062-regulator : : LDOs & BUCKs
8da9062-rtc : : Real-Time Clock
9da9062-watchdog : : Watchdog Timer
10
11======
12
13Required properties:
14
15- compatible : Should be "dlg,da9062".
16- reg : Specifies the I2C slave address (this defaults to 0x58 but it can be
17 modified to match the chip's OTP settings).
18- interrupt-parent : Specifies the reference to the interrupt controller for
19 the DA9062.
20- interrupts : IRQ line information.
21- interrupt-controller
22
23See Documentation/devicetree/bindings/interrupt-controller/interrupts.txt for
24further information on IRQ bindings.
25
26Sub-nodes:
27
28- regulators : This node defines the settings for the LDOs and BUCKs. The
29 DA9062 regulators are bound using their names listed below:
30
31 buck1 : BUCK_1
32 buck2 : BUCK_2
33 buck3 : BUCK_3
34 buck4 : BUCK_4
35 ldo1 : LDO_1
36 ldo2 : LDO_2
37 ldo3 : LDO_3
38 ldo4 : LDO_4
39
40 The component follows the standard regulator framework and the bindings
41 details of individual regulator device can be found in:
42 Documentation/devicetree/bindings/regulator/regulator.txt
43
44
45- rtc : This node defines settings required for the Real-Time Clock associated
46 with the DA9062. There are currently no entries in this binding, however
47 compatible = "dlg,da9062-rtc" should be added if a node is created.
48
49- watchdog: This node defines the settings for the watchdog driver associated
50 with the DA9062 PMIC. The compatible = "dlg,da9062-watchdog" should be added
51 if a node is created.
52
53
54Example:
55
56 pmic0: da9062@58 {
57 compatible = "dlg,da9062";
58 reg = <0x58>;
59 interrupt-parent = <&gpio6>;
60 interrupts = <11 IRQ_TYPE_LEVEL_LOW>;
61 interrupt-controller;
62
63 rtc {
64 compatible = "dlg,da9062-rtc";
65 };
66
67 watchdog {
68 compatible = "dlg,da9062-watchdog";
69 };
70
71 regulators {
72 DA9062_BUCK1: buck1 {
73 regulator-name = "BUCK1";
74 regulator-min-microvolt = <300000>;
75 regulator-max-microvolt = <1570000>;
76 regulator-min-microamp = <500000>;
77 regulator-max-microamp = <2000000>;
78 regulator-boot-on;
79 };
80 DA9062_LDO1: ldo1 {
81 regulator-name = "LDO_1";
82 regulator-min-microvolt = <900000>;
83 regulator-max-microvolt = <3600000>;
84 regulator-boot-on;
85 };
86 };
87 };
88
diff --git a/Documentation/devicetree/bindings/mfd/max77686.txt b/Documentation/devicetree/bindings/mfd/max77686.txt
index 163bd81a4607..741e76688cf2 100644
--- a/Documentation/devicetree/bindings/mfd/max77686.txt
+++ b/Documentation/devicetree/bindings/mfd/max77686.txt
@@ -7,8 +7,9 @@ different i2c slave address,presently for which we are statically creating i2c
7client while probing.This document describes the binding for mfd device and 7client while probing.This document describes the binding for mfd device and
8PMIC submodule. 8PMIC submodule.
9 9
10Binding for the built-in 32k clock generator block is defined separately 10Bindings for the built-in 32k clock generator block and
11in bindings/clk/maxim,max77686.txt file. 11regulators are defined in ../clk/maxim,max77686.txt and
12../regulator/max77686.txt respectively.
12 13
13Required properties: 14Required properties:
14- compatible : Must be "maxim,max77686"; 15- compatible : Must be "maxim,max77686";
@@ -16,67 +17,11 @@ Required properties:
16- interrupts : This i2c device has an IRQ line connected to the main SoC. 17- interrupts : This i2c device has an IRQ line connected to the main SoC.
17- interrupt-parent : The parent interrupt controller. 18- interrupt-parent : The parent interrupt controller.
18 19
19Optional node:
20- voltage-regulators : The regulators of max77686 have to be instantiated
21 under subnode named "voltage-regulators" using the following format.
22
23 regulator_name {
24 regulator-compatible = LDOn/BUCKn
25 standard regulator constraints....
26 };
27 refer Documentation/devicetree/bindings/regulator/regulator.txt
28
29 The regulator-compatible property of regulator should initialized with string
30to get matched with their hardware counterparts as follow:
31
32 -LDOn : for LDOs, where n can lie in range 1 to 26.
33 example: LDO1, LDO2, LDO26.
34 -BUCKn : for BUCKs, where n can lie in range 1 to 9.
35 example: BUCK1, BUCK5, BUCK9.
36
37 Regulators which can be turned off during system suspend:
38 -LDOn : 2, 6-8, 10-12, 14-16,
39 -BUCKn : 1-4.
40 Use standard regulator bindings for it ('regulator-off-in-suspend').
41
42 LDO20, LDO21, LDO22, BUCK8 and BUCK9 can be configured to GPIO enable
43 control. To turn this feature on this property must be added to the regulator
44 sub-node:
45 - maxim,ena-gpios : one GPIO specifier enable control (the gpio
46 flags are actually ignored and always
47 ACTIVE_HIGH is used)
48
49Example: 20Example:
50 21
51 max77686@09 { 22 max77686: pmic@09 {
52 compatible = "maxim,max77686"; 23 compatible = "maxim,max77686";
53 interrupt-parent = <&wakeup_eint>; 24 interrupt-parent = <&wakeup_eint>;
54 interrupts = <26 0>; 25 interrupts = <26 0>;
55 reg = <0x09>; 26 reg = <0x09>;
56 27 };
57 voltage-regulators {
58 ldo11_reg {
59 regulator-compatible = "LDO11";
60 regulator-name = "vdd_ldo11";
61 regulator-min-microvolt = <1900000>;
62 regulator-max-microvolt = <1900000>;
63 regulator-always-on;
64 };
65
66 buck1_reg {
67 regulator-compatible = "BUCK1";
68 regulator-name = "vdd_mif";
69 regulator-min-microvolt = <950000>;
70 regulator-max-microvolt = <1300000>;
71 regulator-always-on;
72 regulator-boot-on;
73 };
74
75 buck9_reg {
76 regulator-compatible = "BUCK9";
77 regulator-name = "CAM_ISP_CORE_1.2V";
78 regulator-min-microvolt = <1000000>;
79 regulator-max-microvolt = <1200000>;
80 maxim,ena-gpios = <&gpm0 3 GPIO_ACTIVE_HIGH>;
81 };
82 }
diff --git a/Documentation/devicetree/bindings/mfd/max77802.txt b/Documentation/devicetree/bindings/mfd/max77802.txt
new file mode 100644
index 000000000000..51fc1a60caa5
--- /dev/null
+++ b/Documentation/devicetree/bindings/mfd/max77802.txt
@@ -0,0 +1,26 @@
1Maxim MAX77802 multi-function device
2
3The Maxim MAX77802 is a Power Management IC (PMIC) that contains 10 high
4efficiency Buck regulators, 32 Low-DropOut (LDO) regulators used to power
5up application processors and peripherals, a 2-channel 32kHz clock outputs,
6a Real-Time-Clock (RTC) and a I2C interface to program the individual
7regulators, clocks outputs and the RTC.
8
9Bindings for the built-in 32k clock generator block and
10regulators are defined in ../clk/maxim,max77802.txt and
11../regulator/max77802.txt respectively.
12
13Required properties:
14- compatible : Must be "maxim,max77802"
15- reg : Specifies the I2C slave address of PMIC block.
16- interrupts : I2C device IRQ line connected to the main SoC.
17- interrupt-parent : The parent interrupt controller.
18
19Example:
20
21 max77802: pmic@09 {
22 compatible = "maxim,max77802";
23 interrupt-parent = <&intc>;
24 interrupts = <26 IRQ_TYPE_NONE>;
25 reg = <0x09>;
26 };
diff --git a/Documentation/devicetree/bindings/regulator/max77686.txt b/Documentation/devicetree/bindings/regulator/max77686.txt
new file mode 100644
index 000000000000..0dded64d89d3
--- /dev/null
+++ b/Documentation/devicetree/bindings/regulator/max77686.txt
@@ -0,0 +1,71 @@
1Binding for Maxim MAX77686 regulators
2
3This is a part of the device tree bindings of MAX77686 multi-function device.
4More information can be found in ../mfd/max77686.txt file.
5
6The MAX77686 PMIC has 9 high-efficiency Buck and 26 Low-DropOut (LDO)
7regulators that can be controlled over I2C.
8
9Following properties should be present in main device node of the MFD chip.
10
11Optional node:
12- voltage-regulators : The regulators of max77686 have to be instantiated
13 under subnode named "voltage-regulators" using the following format.
14
15 regulator_name {
16 regulator-compatible = LDOn/BUCKn
17 standard regulator constraints....
18 };
19 refer Documentation/devicetree/bindings/regulator/regulator.txt
20
21 The regulator node's name should be initialized with a string
22to get matched with their hardware counterparts as follow:
23
24 -LDOn : for LDOs, where n can lie in range 1 to 26.
25 example: LDO1, LDO2, LDO26.
26 -BUCKn : for BUCKs, where n can lie in range 1 to 9.
27 example: BUCK1, BUCK5, BUCK9.
28
29 Regulators which can be turned off during system suspend:
30 -LDOn : 2, 6-8, 10-12, 14-16,
31 -BUCKn : 1-4.
32 Use standard regulator bindings for it ('regulator-off-in-suspend').
33
34 LDO20, LDO21, LDO22, BUCK8 and BUCK9 can be configured to GPIO enable
35 control. To turn this feature on this property must be added to the regulator
36 sub-node:
37 - maxim,ena-gpios : one GPIO specifier enable control (the gpio
38 flags are actually ignored and always
39 ACTIVE_HIGH is used)
40
41Example:
42
43 max77686: pmic@09 {
44 compatible = "maxim,max77686";
45 interrupt-parent = <&wakeup_eint>;
46 interrupts = <26 IRQ_TYPE_NONE>;
47 reg = <0x09>;
48
49 voltage-regulators {
50 ldo11_reg: LDO11 {
51 regulator-name = "vdd_ldo11";
52 regulator-min-microvolt = <1900000>;
53 regulator-max-microvolt = <1900000>;
54 regulator-always-on;
55 };
56
57 buck1_reg: BUCK1 {
58 regulator-name = "vdd_mif";
59 regulator-min-microvolt = <950000>;
60 regulator-max-microvolt = <1300000>;
61 regulator-always-on;
62 regulator-boot-on;
63 };
64
65 buck9_reg: BUCK9 {
66 regulator-name = "CAM_ISP_CORE_1.2V";
67 regulator-min-microvolt = <1000000>;
68 regulator-max-microvolt = <1200000>;
69 maxim,ena-gpios = <&gpm0 3 GPIO_ACTIVE_HIGH>;
70 };
71 };
diff --git a/Documentation/devicetree/bindings/rtc/rtc-st-lpc.txt b/Documentation/devicetree/bindings/rtc/rtc-st-lpc.txt
index 73407f502e4e..daf88265df32 100644
--- a/Documentation/devicetree/bindings/rtc/rtc-st-lpc.txt
+++ b/Documentation/devicetree/bindings/rtc/rtc-st-lpc.txt
@@ -1,20 +1,23 @@
1STMicroelectronics Low Power Controller (LPC) - RTC 1STMicroelectronics Low Power Controller (LPC) - RTC
2=================================================== 2===================================================
3 3
4LPC currently supports Watchdog OR Real Time Clock functionality. 4LPC currently supports Watchdog OR Real Time Clock OR Clocksource
5functionality.
5 6
6[See: ../watchdog/st_lpc_wdt.txt for Watchdog options] 7[See: ../watchdog/st_lpc_wdt.txt for Watchdog options]
8[See: ../timer/st,stih407-lpc for Clocksource options]
7 9
8Required properties 10Required properties
9 11
10- compatible : Must be one of: "st,stih407-lpc" "st,stih416-lpc" 12- compatible : Must be: "st,stih407-lpc"
11 "st,stih415-lpc" "st,stid127-lpc"
12- reg : LPC registers base address + size 13- reg : LPC registers base address + size
13- interrupts : LPC interrupt line number and associated flags 14- interrupts : LPC interrupt line number and associated flags
14- clocks : Clock used by LPC device (See: ../clock/clock-bindings.txt) 15- clocks : Clock used by LPC device (See: ../clock/clock-bindings.txt)
15- st,lpc-mode : The LPC can run either one of two modes ST_LPC_MODE_RTC [0] or 16- st,lpc-mode : The LPC can run either one of three modes:
16 ST_LPC_MODE_WDT [1]. One (and only one) mode must be 17 ST_LPC_MODE_RTC [0]
17 selected. 18 ST_LPC_MODE_WDT [1]
19 ST_LPC_MODE_CLKSRC [2]
20 One (and only one) mode must be selected.
18 21
19Example: 22Example:
20 lpc@fde05000 { 23 lpc@fde05000 {
diff --git a/Documentation/devicetree/bindings/timer/st,stih407-lpc b/Documentation/devicetree/bindings/timer/st,stih407-lpc
new file mode 100644
index 000000000000..72acb487b856
--- /dev/null
+++ b/Documentation/devicetree/bindings/timer/st,stih407-lpc
@@ -0,0 +1,28 @@
1STMicroelectronics Low Power Controller (LPC) - Clocksource
2===========================================================
3
4LPC currently supports Watchdog OR Real Time Clock OR Clocksource
5functionality.
6
7[See: ../watchdog/st_lpc_wdt.txt for Watchdog options]
8[See: ../rtc/rtc-st-lpc.txt for RTC options]
9
10Required properties
11
12- compatible : Must be: "st,stih407-lpc"
13- reg : LPC registers base address + size
14- interrupts : LPC interrupt line number and associated flags
15- clocks : Clock used by LPC device (See: ../clock/clock-bindings.txt)
16- st,lpc-mode : The LPC can run either one of three modes:
17 ST_LPC_MODE_RTC [0]
18 ST_LPC_MODE_WDT [1]
19 ST_LPC_MODE_CLKSRC [2]
20 One (and only one) mode must be selected.
21
22Example:
23 lpc@fde05000 {
24 compatible = "st,stih407-lpc";
25 reg = <0xfde05000 0x1000>;
26 clocks = <&clk_s_d3_flexgen CLK_LPC_0>;
27 st,lpc-mode = <ST_LPC_MODE_CLKSRC>;
28 };
diff --git a/Documentation/devicetree/bindings/vendor-prefixes.txt b/Documentation/devicetree/bindings/vendor-prefixes.txt
index 56a6d4e79383..80a72099ed76 100644
--- a/Documentation/devicetree/bindings/vendor-prefixes.txt
+++ b/Documentation/devicetree/bindings/vendor-prefixes.txt
@@ -150,6 +150,7 @@ netxeon Shenzhen Netxeon Technology CO., LTD
150newhaven Newhaven Display International 150newhaven Newhaven Display International
151nintendo Nintendo 151nintendo Nintendo
152nokia Nokia 152nokia Nokia
153nuvoton Nuvoton Technology Corporation
153nvidia NVIDIA 154nvidia NVIDIA
154nxp NXP Semiconductors 155nxp NXP Semiconductors
155onnn ON Semiconductor Corp. 156onnn ON Semiconductor Corp.
diff --git a/Documentation/devicetree/bindings/watchdog/st_lpc_wdt.txt b/Documentation/devicetree/bindings/watchdog/st_lpc_wdt.txt
index 388c88a01222..039c5ca45577 100644
--- a/Documentation/devicetree/bindings/watchdog/st_lpc_wdt.txt
+++ b/Documentation/devicetree/bindings/watchdog/st_lpc_wdt.txt
@@ -1,9 +1,11 @@
1STMicroelectronics Low Power Controller (LPC) - Watchdog 1STMicroelectronics Low Power Controller (LPC) - Watchdog
2======================================================== 2========================================================
3 3
4LPC currently supports Watchdog OR Real Time Clock functionality. 4LPC currently supports Watchdog OR Real Time Clock OR Clocksource
5functionality.
5 6
6[See: ../rtc/rtc-st-lpc.txt for RTC options] 7[See: ../rtc/rtc-st-lpc.txt for RTC options]
8[See: ../timer/st,stih407-lpc for Clocksource options]
7 9
8Required properties 10Required properties
9 11
@@ -12,9 +14,11 @@ Required properties
12- reg : LPC registers base address + size 14- reg : LPC registers base address + size
13- interrupts : LPC interrupt line number and associated flags 15- interrupts : LPC interrupt line number and associated flags
14- clocks : Clock used by LPC device (See: ../clock/clock-bindings.txt) 16- clocks : Clock used by LPC device (See: ../clock/clock-bindings.txt)
15- st,lpc-mode : The LPC can run either one of two modes ST_LPC_MODE_RTC [0] or 17- st,lpc-mode : The LPC can run either one of three modes:
16 ST_LPC_MODE_WDT [1]. One (and only one) mode must be 18 ST_LPC_MODE_RTC [0]
17 selected. 19 ST_LPC_MODE_WDT [1]
20 ST_LPC_MODE_CLKSRC [2]
21 One (and only one) mode must be selected.
18 22
19Required properties [watchdog mode] 23Required properties [watchdog mode]
20 24
diff --git a/MAINTAINERS b/MAINTAINERS
index 29a0576e87f1..6592bdc6c1f2 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -1517,6 +1517,7 @@ S: Maintained
1517F: arch/arm/mach-sti/ 1517F: arch/arm/mach-sti/
1518F: arch/arm/boot/dts/sti* 1518F: arch/arm/boot/dts/sti*
1519F: drivers/clocksource/arm_global_timer.c 1519F: drivers/clocksource/arm_global_timer.c
1520F: drivers/clocksource/clksrc_st_lpc.c
1520F: drivers/i2c/busses/i2c-st.c 1521F: drivers/i2c/busses/i2c-st.c
1521F: drivers/media/rc/st_rc.c 1522F: drivers/media/rc/st_rc.c
1522F: drivers/mmc/host/sdhci-st.c 1523F: drivers/mmc/host/sdhci-st.c
@@ -6594,6 +6595,14 @@ S: Supported
6594F: drivers/power/max14577_charger.c 6595F: drivers/power/max14577_charger.c
6595F: drivers/power/max77693_charger.c 6596F: drivers/power/max77693_charger.c
6596 6597
6598MAXIM MAX77802 MULTIFUNCTION PMIC DEVICE DRIVERS
6599M: Javier Martinez Canillas <javier@osg.samsung.com>
6600L: linux-kernel@vger.kernel.org
6601S: Supported
6602F: drivers/*/*max77802.c
6603F: Documentation/devicetree/bindings/*/*max77802.txt
6604F: include/dt-bindings/*/*max77802.h
6605
6597MAXIM PMIC AND MUIC DRIVERS FOR EXYNOS BASED BOARDS 6606MAXIM PMIC AND MUIC DRIVERS FOR EXYNOS BASED BOARDS
6598M: Chanwoo Choi <cw00.choi@samsung.com> 6607M: Chanwoo Choi <cw00.choi@samsung.com>
6599M: Krzysztof Kozlowski <k.kozlowski@samsung.com> 6608M: Krzysztof Kozlowski <k.kozlowski@samsung.com>
@@ -6607,7 +6616,7 @@ F: drivers/extcon/extcon-max77693.c
6607F: drivers/rtc/rtc-max77686.c 6616F: drivers/rtc/rtc-max77686.c
6608F: drivers/clk/clk-max77686.c 6617F: drivers/clk/clk-max77686.c
6609F: Documentation/devicetree/bindings/mfd/max14577.txt 6618F: Documentation/devicetree/bindings/mfd/max14577.txt
6610F: Documentation/devicetree/bindings/mfd/max77686.txt 6619F: Documentation/devicetree/bindings/*/max77686.txt
6611F: Documentation/devicetree/bindings/mfd/max77693.txt 6620F: Documentation/devicetree/bindings/mfd/max77693.txt
6612F: Documentation/devicetree/bindings/clock/maxim,max77686.txt 6621F: Documentation/devicetree/bindings/clock/maxim,max77686.txt
6613F: include/linux/mfd/max14577*.h 6622F: include/linux/mfd/max14577*.h
diff --git a/drivers/clocksource/Kconfig b/drivers/clocksource/Kconfig
index 552c9b134cc5..a7726db13abb 100644
--- a/drivers/clocksource/Kconfig
+++ b/drivers/clocksource/Kconfig
@@ -297,4 +297,12 @@ config CLKSRC_IMX_GPT
297 depends on ARM && CLKDEV_LOOKUP 297 depends on ARM && CLKDEV_LOOKUP
298 select CLKSRC_MMIO 298 select CLKSRC_MMIO
299 299
300config CLKSRC_ST_LPC
301 bool
302 depends on ARCH_STI
303 select CLKSRC_OF if OF
304 help
305 Enable this option to use the Low Power controller timer
306 as clocksource.
307
300endmenu 308endmenu
diff --git a/drivers/clocksource/Makefile b/drivers/clocksource/Makefile
index 066337e24737..5c00863c3e33 100644
--- a/drivers/clocksource/Makefile
+++ b/drivers/clocksource/Makefile
@@ -61,3 +61,4 @@ obj-$(CONFIG_ASM9260_TIMER) += asm9260_timer.o
61obj-$(CONFIG_H8300) += h8300_timer8.o 61obj-$(CONFIG_H8300) += h8300_timer8.o
62obj-$(CONFIG_H8300_TMR16) += h8300_timer16.o 62obj-$(CONFIG_H8300_TMR16) += h8300_timer16.o
63obj-$(CONFIG_H8300_TPU) += h8300_tpu.o 63obj-$(CONFIG_H8300_TPU) += h8300_tpu.o
64obj-$(CONFIG_CLKSRC_ST_LPC) += clksrc_st_lpc.o
diff --git a/drivers/clocksource/clksrc_st_lpc.c b/drivers/clocksource/clksrc_st_lpc.c
new file mode 100644
index 000000000000..65ec4674416d
--- /dev/null
+++ b/drivers/clocksource/clksrc_st_lpc.c
@@ -0,0 +1,131 @@
1/*
2 * Clocksource using the Low Power Timer found in the Low Power Controller (LPC)
3 *
4 * Copyright (C) 2015 STMicroelectronics – All Rights Reserved
5 *
6 * Author(s): Francesco Virlinzi <francesco.virlinzi@st.com>
7 * Ajit Pal Singh <ajitpal.singh@st.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 as published by
11 * the Free Software Foundation; either version 2 of the License, or
12 * (at your option) any later version.
13 */
14
15#include <linux/clk.h>
16#include <linux/clocksource.h>
17#include <linux/init.h>
18#include <linux/of_address.h>
19#include <linux/sched_clock.h>
20#include <linux/slab.h>
21
22#include <dt-bindings/mfd/st-lpc.h>
23
24/* Low Power Timer */
25#define LPC_LPT_LSB_OFF 0x400
26#define LPC_LPT_MSB_OFF 0x404
27#define LPC_LPT_START_OFF 0x408
28
29static struct st_clksrc_ddata {
30 struct clk *clk;
31 void __iomem *base;
32} ddata;
33
34static void __init st_clksrc_reset(void)
35{
36 writel_relaxed(0, ddata.base + LPC_LPT_START_OFF);
37 writel_relaxed(0, ddata.base + LPC_LPT_MSB_OFF);
38 writel_relaxed(0, ddata.base + LPC_LPT_LSB_OFF);
39 writel_relaxed(1, ddata.base + LPC_LPT_START_OFF);
40}
41
42static u64 notrace st_clksrc_sched_clock_read(void)
43{
44 return (u64)readl_relaxed(ddata.base + LPC_LPT_LSB_OFF);
45}
46
47static int __init st_clksrc_init(void)
48{
49 unsigned long rate;
50 int ret;
51
52 st_clksrc_reset();
53
54 rate = clk_get_rate(ddata.clk);
55
56 sched_clock_register(st_clksrc_sched_clock_read, 32, rate);
57
58 ret = clocksource_mmio_init(ddata.base + LPC_LPT_LSB_OFF,
59 "clksrc-st-lpc", rate, 300, 32,
60 clocksource_mmio_readl_up);
61 if (ret) {
62 pr_err("clksrc-st-lpc: Failed to register clocksource\n");
63 return ret;
64 }
65
66 return 0;
67}
68
69static int __init st_clksrc_setup_clk(struct device_node *np)
70{
71 struct clk *clk;
72
73 clk = of_clk_get(np, 0);
74 if (IS_ERR(clk)) {
75 pr_err("clksrc-st-lpc: Failed to get LPC clock\n");
76 return PTR_ERR(clk);
77 }
78
79 if (clk_prepare_enable(clk)) {
80 pr_err("clksrc-st-lpc: Failed to enable LPC clock\n");
81 return -EINVAL;
82 }
83
84 if (!clk_get_rate(clk)) {
85 pr_err("clksrc-st-lpc: Failed to get LPC clock rate\n");
86 clk_disable_unprepare(clk);
87 return -EINVAL;
88 }
89
90 ddata.clk = clk;
91
92 return 0;
93}
94
95static void __init st_clksrc_of_register(struct device_node *np)
96{
97 int ret;
98 uint32_t mode;
99
100 ret = of_property_read_u32(np, "st,lpc-mode", &mode);
101 if (ret) {
102 pr_err("clksrc-st-lpc: An LPC mode must be provided\n");
103 return;
104 }
105
106 /* LPC can either run as a Clocksource or in RTC or WDT mode */
107 if (mode != ST_LPC_MODE_CLKSRC)
108 return;
109
110 ddata.base = of_iomap(np, 0);
111 if (!ddata.base) {
112 pr_err("clksrc-st-lpc: Unable to map iomem\n");
113 return;
114 }
115
116 if (st_clksrc_setup_clk(np)) {
117 iounmap(ddata.base);
118 return;
119 }
120
121 if (st_clksrc_init()) {
122 clk_disable_unprepare(ddata.clk);
123 clk_put(ddata.clk);
124 iounmap(ddata.base);
125 return;
126 }
127
128 pr_info("clksrc-st-lpc: clocksource initialised - running @ %luHz\n",
129 clk_get_rate(ddata.clk));
130}
131CLOCKSOURCE_OF_DECLARE(ddata, "st,stih407-lpc", st_clksrc_of_register);
diff --git a/drivers/i2c/busses/i2c-i801.c b/drivers/i2c/busses/i2c-i801.c
index 5ecbb3fdc27e..eaef9bc9d88c 100644
--- a/drivers/i2c/busses/i2c-i801.c
+++ b/drivers/i2c/busses/i2c-i801.c
@@ -88,12 +88,13 @@
88#include <linux/slab.h> 88#include <linux/slab.h>
89#include <linux/wait.h> 89#include <linux/wait.h>
90#include <linux/err.h> 90#include <linux/err.h>
91#include <linux/platform_device.h>
92#include <linux/platform_data/itco_wdt.h>
91 93
92#if (defined CONFIG_I2C_MUX_GPIO || defined CONFIG_I2C_MUX_GPIO_MODULE) && \ 94#if (defined CONFIG_I2C_MUX_GPIO || defined CONFIG_I2C_MUX_GPIO_MODULE) && \
93 defined CONFIG_DMI 95 defined CONFIG_DMI
94#include <linux/gpio.h> 96#include <linux/gpio.h>
95#include <linux/i2c-mux-gpio.h> 97#include <linux/i2c-mux-gpio.h>
96#include <linux/platform_device.h>
97#endif 98#endif
98 99
99/* I801 SMBus address offsets */ 100/* I801 SMBus address offsets */
@@ -113,6 +114,16 @@
113#define SMBPCICTL 0x004 114#define SMBPCICTL 0x004
114#define SMBPCISTS 0x006 115#define SMBPCISTS 0x006
115#define SMBHSTCFG 0x040 116#define SMBHSTCFG 0x040
117#define TCOBASE 0x050
118#define TCOCTL 0x054
119
120#define ACPIBASE 0x040
121#define ACPIBASE_SMI_OFF 0x030
122#define ACPICTRL 0x044
123#define ACPICTRL_EN 0x080
124
125#define SBREG_BAR 0x10
126#define SBREG_SMBCTRL 0xc6000c
116 127
117/* Host status bits for SMBPCISTS */ 128/* Host status bits for SMBPCISTS */
118#define SMBPCISTS_INTS 0x08 129#define SMBPCISTS_INTS 0x08
@@ -125,6 +136,9 @@
125#define SMBHSTCFG_SMB_SMI_EN 2 136#define SMBHSTCFG_SMB_SMI_EN 2
126#define SMBHSTCFG_I2C_EN 4 137#define SMBHSTCFG_I2C_EN 4
127 138
139/* TCO configuration bits for TCOCTL */
140#define TCOCTL_EN 0x0100
141
128/* Auxiliary control register bits, ICH4+ only */ 142/* Auxiliary control register bits, ICH4+ only */
129#define SMBAUXCTL_CRC 1 143#define SMBAUXCTL_CRC 1
130#define SMBAUXCTL_E32B 2 144#define SMBAUXCTL_E32B 2
@@ -221,6 +235,7 @@ struct i801_priv {
221 const struct i801_mux_config *mux_drvdata; 235 const struct i801_mux_config *mux_drvdata;
222 struct platform_device *mux_pdev; 236 struct platform_device *mux_pdev;
223#endif 237#endif
238 struct platform_device *tco_pdev;
224}; 239};
225 240
226#define FEATURE_SMBUS_PEC (1 << 0) 241#define FEATURE_SMBUS_PEC (1 << 0)
@@ -230,6 +245,7 @@ struct i801_priv {
230#define FEATURE_IRQ (1 << 4) 245#define FEATURE_IRQ (1 << 4)
231/* Not really a feature, but it's convenient to handle it as such */ 246/* Not really a feature, but it's convenient to handle it as such */
232#define FEATURE_IDF (1 << 15) 247#define FEATURE_IDF (1 << 15)
248#define FEATURE_TCO (1 << 16)
233 249
234static const char *i801_feature_names[] = { 250static const char *i801_feature_names[] = {
235 "SMBus PEC", 251 "SMBus PEC",
@@ -1132,6 +1148,95 @@ static inline unsigned int i801_get_adapter_class(struct i801_priv *priv)
1132} 1148}
1133#endif 1149#endif
1134 1150
1151static const struct itco_wdt_platform_data tco_platform_data = {
1152 .name = "Intel PCH",
1153 .version = 4,
1154};
1155
1156static DEFINE_SPINLOCK(p2sb_spinlock);
1157
1158static void i801_add_tco(struct i801_priv *priv)
1159{
1160 struct pci_dev *pci_dev = priv->pci_dev;
1161 struct resource tco_res[3], *res;
1162 struct platform_device *pdev;
1163 unsigned int devfn;
1164 u32 tco_base, tco_ctl;
1165 u32 base_addr, ctrl_val;
1166 u64 base64_addr;
1167
1168 if (!(priv->features & FEATURE_TCO))
1169 return;
1170
1171 pci_read_config_dword(pci_dev, TCOBASE, &tco_base);
1172 pci_read_config_dword(pci_dev, TCOCTL, &tco_ctl);
1173 if (!(tco_ctl & TCOCTL_EN))
1174 return;
1175
1176 memset(tco_res, 0, sizeof(tco_res));
1177
1178 res = &tco_res[ICH_RES_IO_TCO];
1179 res->start = tco_base & ~1;
1180 res->end = res->start + 32 - 1;
1181 res->flags = IORESOURCE_IO;
1182
1183 /*
1184 * Power Management registers.
1185 */
1186 devfn = PCI_DEVFN(PCI_SLOT(pci_dev->devfn), 2);
1187 pci_bus_read_config_dword(pci_dev->bus, devfn, ACPIBASE, &base_addr);
1188
1189 res = &tco_res[ICH_RES_IO_SMI];
1190 res->start = (base_addr & ~1) + ACPIBASE_SMI_OFF;
1191 res->end = res->start + 3;
1192 res->flags = IORESOURCE_IO;
1193
1194 /*
1195 * Enable the ACPI I/O space.
1196 */
1197 pci_bus_read_config_dword(pci_dev->bus, devfn, ACPICTRL, &ctrl_val);
1198 ctrl_val |= ACPICTRL_EN;
1199 pci_bus_write_config_dword(pci_dev->bus, devfn, ACPICTRL, ctrl_val);
1200
1201 /*
1202 * We must access the NO_REBOOT bit over the Primary to Sideband
1203 * bridge (P2SB). The BIOS prevents the P2SB device from being
1204 * enumerated by the PCI subsystem, so we need to unhide/hide it
1205 * to lookup the P2SB BAR.
1206 */
1207 spin_lock(&p2sb_spinlock);
1208
1209 devfn = PCI_DEVFN(PCI_SLOT(pci_dev->devfn), 1);
1210
1211 /* Unhide the P2SB device */
1212 pci_bus_write_config_byte(pci_dev->bus, devfn, 0xe1, 0x0);
1213
1214 pci_bus_read_config_dword(pci_dev->bus, devfn, SBREG_BAR, &base_addr);
1215 base64_addr = base_addr & 0xfffffff0;
1216
1217 pci_bus_read_config_dword(pci_dev->bus, devfn, SBREG_BAR + 0x4, &base_addr);
1218 base64_addr |= (u64)base_addr << 32;
1219
1220 /* Hide the P2SB device */
1221 pci_bus_write_config_byte(pci_dev->bus, devfn, 0xe1, 0x1);
1222 spin_unlock(&p2sb_spinlock);
1223
1224 res = &tco_res[ICH_RES_MEM_OFF];
1225 res->start = (resource_size_t)base64_addr + SBREG_SMBCTRL;
1226 res->end = res->start + 3;
1227 res->flags = IORESOURCE_MEM;
1228
1229 pdev = platform_device_register_resndata(&pci_dev->dev, "iTCO_wdt", -1,
1230 tco_res, 3, &tco_platform_data,
1231 sizeof(tco_platform_data));
1232 if (IS_ERR(pdev)) {
1233 dev_warn(&pci_dev->dev, "failed to create iTCO device\n");
1234 return;
1235 }
1236
1237 priv->tco_pdev = pdev;
1238}
1239
1135static int i801_probe(struct pci_dev *dev, const struct pci_device_id *id) 1240static int i801_probe(struct pci_dev *dev, const struct pci_device_id *id)
1136{ 1241{
1137 unsigned char temp; 1242 unsigned char temp;
@@ -1149,6 +1254,15 @@ static int i801_probe(struct pci_dev *dev, const struct pci_device_id *id)
1149 1254
1150 priv->pci_dev = dev; 1255 priv->pci_dev = dev;
1151 switch (dev->device) { 1256 switch (dev->device) {
1257 case PCI_DEVICE_ID_INTEL_SUNRISEPOINT_H_SMBUS:
1258 case PCI_DEVICE_ID_INTEL_SUNRISEPOINT_LP_SMBUS:
1259 priv->features |= FEATURE_I2C_BLOCK_READ;
1260 priv->features |= FEATURE_IRQ;
1261 priv->features |= FEATURE_SMBUS_PEC;
1262 priv->features |= FEATURE_BLOCK_BUFFER;
1263 priv->features |= FEATURE_TCO;
1264 break;
1265
1152 case PCI_DEVICE_ID_INTEL_PATSBURG_SMBUS_IDF0: 1266 case PCI_DEVICE_ID_INTEL_PATSBURG_SMBUS_IDF0:
1153 case PCI_DEVICE_ID_INTEL_PATSBURG_SMBUS_IDF1: 1267 case PCI_DEVICE_ID_INTEL_PATSBURG_SMBUS_IDF1:
1154 case PCI_DEVICE_ID_INTEL_PATSBURG_SMBUS_IDF2: 1268 case PCI_DEVICE_ID_INTEL_PATSBURG_SMBUS_IDF2:
@@ -1265,6 +1379,8 @@ static int i801_probe(struct pci_dev *dev, const struct pci_device_id *id)
1265 dev_info(&dev->dev, "SMBus using %s\n", 1379 dev_info(&dev->dev, "SMBus using %s\n",
1266 priv->features & FEATURE_IRQ ? "PCI interrupt" : "polling"); 1380 priv->features & FEATURE_IRQ ? "PCI interrupt" : "polling");
1267 1381
1382 i801_add_tco(priv);
1383
1268 /* set up the sysfs linkage to our parent device */ 1384 /* set up the sysfs linkage to our parent device */
1269 priv->adapter.dev.parent = &dev->dev; 1385 priv->adapter.dev.parent = &dev->dev;
1270 1386
@@ -1296,6 +1412,8 @@ static void i801_remove(struct pci_dev *dev)
1296 i2c_del_adapter(&priv->adapter); 1412 i2c_del_adapter(&priv->adapter);
1297 pci_write_config_byte(dev, SMBHSTCFG, priv->original_hstcfg); 1413 pci_write_config_byte(dev, SMBHSTCFG, priv->original_hstcfg);
1298 1414
1415 platform_device_unregister(priv->tco_pdev);
1416
1299 /* 1417 /*
1300 * do not call pci_disable_device(dev) since it can cause hard hangs on 1418 * do not call pci_disable_device(dev) since it can cause hard hangs on
1301 * some systems during power-off (eg. Fujitsu-Siemens Lifebook E8010) 1419 * some systems during power-off (eg. Fujitsu-Siemens Lifebook E8010)
diff --git a/drivers/mfd/88pm800.c b/drivers/mfd/88pm800.c
index 841717a2842c..f2d9fb4c4e8e 100644
--- a/drivers/mfd/88pm800.c
+++ b/drivers/mfd/88pm800.c
@@ -609,7 +609,6 @@ static int pm800_remove(struct i2c_client *client)
609static struct i2c_driver pm800_driver = { 609static struct i2c_driver pm800_driver = {
610 .driver = { 610 .driver = {
611 .name = "88PM800", 611 .name = "88PM800",
612 .owner = THIS_MODULE,
613 .pm = &pm80x_pm_ops, 612 .pm = &pm80x_pm_ops,
614 }, 613 },
615 .probe = pm800_probe, 614 .probe = pm800_probe,
diff --git a/drivers/mfd/88pm805.c b/drivers/mfd/88pm805.c
index e9d50644660c..39f2302e137b 100644
--- a/drivers/mfd/88pm805.c
+++ b/drivers/mfd/88pm805.c
@@ -267,7 +267,6 @@ static int pm805_remove(struct i2c_client *client)
267static struct i2c_driver pm805_driver = { 267static struct i2c_driver pm805_driver = {
268 .driver = { 268 .driver = {
269 .name = "88PM805", 269 .name = "88PM805",
270 .owner = THIS_MODULE,
271 .pm = &pm80x_pm_ops, 270 .pm = &pm80x_pm_ops,
272 }, 271 },
273 .probe = pm805_probe, 272 .probe = pm805_probe,
diff --git a/drivers/mfd/88pm860x-core.c b/drivers/mfd/88pm860x-core.c
index e03b7f45b8f7..3269a9990b24 100644
--- a/drivers/mfd/88pm860x-core.c
+++ b/drivers/mfd/88pm860x-core.c
@@ -558,11 +558,7 @@ static int pm860x_irq_domain_map(struct irq_domain *d, unsigned int virq,
558 irq_set_chip_data(virq, d->host_data); 558 irq_set_chip_data(virq, d->host_data);
559 irq_set_chip_and_handler(virq, &pm860x_irq_chip, handle_edge_irq); 559 irq_set_chip_and_handler(virq, &pm860x_irq_chip, handle_edge_irq);
560 irq_set_nested_thread(virq, 1); 560 irq_set_nested_thread(virq, 1);
561#ifdef CONFIG_ARM
562 set_irq_flags(virq, IRQF_VALID);
563#else
564 irq_set_noprobe(virq); 561 irq_set_noprobe(virq);
565#endif
566 return 0; 562 return 0;
567} 563}
568 564
@@ -1258,7 +1254,6 @@ MODULE_DEVICE_TABLE(of, pm860x_dt_ids);
1258static struct i2c_driver pm860x_driver = { 1254static struct i2c_driver pm860x_driver = {
1259 .driver = { 1255 .driver = {
1260 .name = "88PM860x", 1256 .name = "88PM860x",
1261 .owner = THIS_MODULE,
1262 .pm = &pm860x_pm_ops, 1257 .pm = &pm860x_pm_ops,
1263 .of_match_table = pm860x_dt_ids, 1258 .of_match_table = pm860x_dt_ids,
1264 }, 1259 },
diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig
index 076f593f90d3..5fa21739c54f 100644
--- a/drivers/mfd/Kconfig
+++ b/drivers/mfd/Kconfig
@@ -97,6 +97,7 @@ config MFD_CROS_EC
97 select MFD_CORE 97 select MFD_CORE
98 select CHROME_PLATFORMS 98 select CHROME_PLATFORMS
99 select CROS_EC_PROTO 99 select CROS_EC_PROTO
100 depends on X86 || ARM || COMPILE_TEST
100 help 101 help
101 If you say Y here you get support for the ChromeOS Embedded 102 If you say Y here you get support for the ChromeOS Embedded
102 Controller (EC) providing keyboard, battery and power services. 103 Controller (EC) providing keyboard, battery and power services.
@@ -105,7 +106,7 @@ config MFD_CROS_EC
105 106
106config MFD_CROS_EC_I2C 107config MFD_CROS_EC_I2C
107 tristate "ChromeOS Embedded Controller (I2C)" 108 tristate "ChromeOS Embedded Controller (I2C)"
108 depends on MFD_CROS_EC && CROS_EC_PROTO && I2C 109 depends on MFD_CROS_EC && I2C
109 110
110 help 111 help
111 If you say Y here, you get support for talking to the ChromeOS 112 If you say Y here, you get support for talking to the ChromeOS
@@ -115,7 +116,7 @@ config MFD_CROS_EC_I2C
115 116
116config MFD_CROS_EC_SPI 117config MFD_CROS_EC_SPI
117 tristate "ChromeOS Embedded Controller (SPI)" 118 tristate "ChromeOS Embedded Controller (SPI)"
118 depends on MFD_CROS_EC && CROS_EC_PROTO && SPI 119 depends on MFD_CROS_EC && SPI
119 120
120 ---help--- 121 ---help---
121 If you say Y here, you get support for talking to the ChromeOS EC 122 If you say Y here, you get support for talking to the ChromeOS EC
@@ -186,6 +187,18 @@ config MFD_DA9055
186 This driver can be built as a module. If built as a module it will be 187 This driver can be built as a module. If built as a module it will be
187 called "da9055" 188 called "da9055"
188 189
190config MFD_DA9062
191 tristate "Dialog Semiconductor DA9062 PMIC Support"
192 select MFD_CORE
193 select REGMAP_I2C
194 select REGMAP_IRQ
195 depends on I2C=y
196 help
197 Say yes here for support for the Dialog Semiconductor DA9062 PMIC.
198 This includes the I2C driver and core APIs.
199 Additional drivers must be enabled in order to use the functionality
200 of the device.
201
189config MFD_DA9063 202config MFD_DA9063
190 bool "Dialog Semiconductor DA9063 PMIC Support" 203 bool "Dialog Semiconductor DA9063 PMIC Support"
191 select MFD_CORE 204 select MFD_CORE
@@ -398,12 +411,14 @@ config MFD_KEMPLD
398 device may provide functions like watchdog, GPIO, UART and I2C bus. 411 device may provide functions like watchdog, GPIO, UART and I2C bus.
399 412
400 The following modules are supported: 413 The following modules are supported:
414 * COMe-bBL6
401 * COMe-bHL6 415 * COMe-bHL6
402 * COMe-bIP# 416 * COMe-bIP#
403 * COMe-bPC2 (ETXexpress-PC) 417 * COMe-bPC2 (ETXexpress-PC)
404 * COMe-bSC# (ETXexpress-SC T#) 418 * COMe-bSC# (ETXexpress-SC T#)
405 * COMe-cBL6 419 * COMe-cBL6
406 * COMe-cBT6 420 * COMe-cBT6
421 * COMe-cBW6
407 * COMe-cCT6 422 * COMe-cCT6
408 * COMe-cDC2 (microETXexpress-DC) 423 * COMe-cDC2 (microETXexpress-DC)
409 * COMe-cHL6 424 * COMe-cHL6
@@ -1379,6 +1394,12 @@ config MFD_WM8997
1379 help 1394 help
1380 Support for Wolfson Microelectronics WM8997 low power audio SoC 1395 Support for Wolfson Microelectronics WM8997 low power audio SoC
1381 1396
1397config MFD_WM8998
1398 bool "Wolfson Microelectronics WM8998"
1399 depends on MFD_ARIZONA
1400 help
1401 Support for Wolfson Microelectronics WM8998 low power audio SoC
1402
1382config MFD_WM8400 1403config MFD_WM8400
1383 bool "Wolfson Microelectronics WM8400" 1404 bool "Wolfson Microelectronics WM8400"
1384 select MFD_CORE 1405 select MFD_CORE
diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile
index 9d730a2d1878..a59e3fcc8626 100644
--- a/drivers/mfd/Makefile
+++ b/drivers/mfd/Makefile
@@ -48,6 +48,9 @@ endif
48ifeq ($(CONFIG_MFD_WM8997),y) 48ifeq ($(CONFIG_MFD_WM8997),y)
49obj-$(CONFIG_MFD_ARIZONA) += wm8997-tables.o 49obj-$(CONFIG_MFD_ARIZONA) += wm8997-tables.o
50endif 50endif
51ifeq ($(CONFIG_MFD_WM8998),y)
52obj-$(CONFIG_MFD_ARIZONA) += wm8998-tables.o
53endif
51obj-$(CONFIG_MFD_WM8400) += wm8400-core.o 54obj-$(CONFIG_MFD_WM8400) += wm8400-core.o
52wm831x-objs := wm831x-core.o wm831x-irq.o wm831x-otp.o 55wm831x-objs := wm831x-core.o wm831x-irq.o wm831x-otp.o
53wm831x-objs += wm831x-auxadc.o 56wm831x-objs += wm831x-auxadc.o
@@ -110,10 +113,11 @@ obj-$(CONFIG_MFD_LP8788) += lp8788.o lp8788-irq.o
110 113
111da9055-objs := da9055-core.o da9055-i2c.o 114da9055-objs := da9055-core.o da9055-i2c.o
112obj-$(CONFIG_MFD_DA9055) += da9055.o 115obj-$(CONFIG_MFD_DA9055) += da9055.o
113 116obj-$(CONFIG_MFD_DA9062) += da9062-core.o
114da9063-objs := da9063-core.o da9063-irq.o da9063-i2c.o 117da9063-objs := da9063-core.o da9063-irq.o da9063-i2c.o
115obj-$(CONFIG_MFD_DA9063) += da9063.o 118obj-$(CONFIG_MFD_DA9063) += da9063.o
116obj-$(CONFIG_MFD_DA9150) += da9150-core.o 119obj-$(CONFIG_MFD_DA9150) += da9150-core.o
120
117obj-$(CONFIG_MFD_MAX14577) += max14577.o 121obj-$(CONFIG_MFD_MAX14577) += max14577.o
118obj-$(CONFIG_MFD_MAX77686) += max77686.o 122obj-$(CONFIG_MFD_MAX77686) += max77686.o
119obj-$(CONFIG_MFD_MAX77693) += max77693.o 123obj-$(CONFIG_MFD_MAX77693) += max77693.o
diff --git a/drivers/mfd/aat2870-core.c b/drivers/mfd/aat2870-core.c
index 4e6e03d63e12..29b6a2d4ac72 100644
--- a/drivers/mfd/aat2870-core.c
+++ b/drivers/mfd/aat2870-core.c
@@ -500,7 +500,6 @@ MODULE_DEVICE_TABLE(i2c, aat2870_i2c_id_table);
500static struct i2c_driver aat2870_i2c_driver = { 500static struct i2c_driver aat2870_i2c_driver = {
501 .driver = { 501 .driver = {
502 .name = "aat2870", 502 .name = "aat2870",
503 .owner = THIS_MODULE,
504 .pm = &aat2870_pm_ops, 503 .pm = &aat2870_pm_ops,
505 }, 504 },
506 .probe = aat2870_i2c_probe, 505 .probe = aat2870_i2c_probe,
diff --git a/drivers/mfd/ab3100-core.c b/drivers/mfd/ab3100-core.c
index 4659ac1db039..f0afb44271f8 100644
--- a/drivers/mfd/ab3100-core.c
+++ b/drivers/mfd/ab3100-core.c
@@ -972,7 +972,6 @@ MODULE_DEVICE_TABLE(i2c, ab3100_id);
972static struct i2c_driver ab3100_driver = { 972static struct i2c_driver ab3100_driver = {
973 .driver = { 973 .driver = {
974 .name = "ab3100", 974 .name = "ab3100",
975 .owner = THIS_MODULE,
976 }, 975 },
977 .id_table = ab3100_id, 976 .id_table = ab3100_id,
978 .probe = ab3100_probe, 977 .probe = ab3100_probe,
diff --git a/drivers/mfd/ab8500-core.c b/drivers/mfd/ab8500-core.c
index 000da72a0ae9..fefbe4cfa61d 100644
--- a/drivers/mfd/ab8500-core.c
+++ b/drivers/mfd/ab8500-core.c
@@ -565,11 +565,7 @@ static int ab8500_irq_map(struct irq_domain *d, unsigned int virq,
565 irq_set_chip_and_handler(virq, &ab8500_irq_chip, 565 irq_set_chip_and_handler(virq, &ab8500_irq_chip,
566 handle_simple_irq); 566 handle_simple_irq);
567 irq_set_nested_thread(virq, 1); 567 irq_set_nested_thread(virq, 1);
568#ifdef CONFIG_ARM
569 set_irq_flags(virq, IRQF_VALID);
570#else
571 irq_set_noprobe(virq); 568 irq_set_noprobe(virq);
572#endif
573 569
574 return 0; 570 return 0;
575} 571}
diff --git a/drivers/mfd/adp5520.c b/drivers/mfd/adp5520.c
index f495b8b57dd7..ae88654595dc 100644
--- a/drivers/mfd/adp5520.c
+++ b/drivers/mfd/adp5520.c
@@ -351,7 +351,6 @@ MODULE_DEVICE_TABLE(i2c, adp5520_id);
351static struct i2c_driver adp5520_driver = { 351static struct i2c_driver adp5520_driver = {
352 .driver = { 352 .driver = {
353 .name = "adp5520", 353 .name = "adp5520",
354 .owner = THIS_MODULE,
355 .pm = &adp5520_pm, 354 .pm = &adp5520_pm,
356 }, 355 },
357 .probe = adp5520_probe, 356 .probe = adp5520_probe,
diff --git a/drivers/mfd/arizona-core.c b/drivers/mfd/arizona-core.c
index a72ddb295078..08b36fa5b0c5 100644
--- a/drivers/mfd/arizona-core.c
+++ b/drivers/mfd/arizona-core.c
@@ -30,7 +30,7 @@
30 30
31#include "arizona.h" 31#include "arizona.h"
32 32
33static const char *wm5102_core_supplies[] = { 33static const char * const wm5102_core_supplies[] = {
34 "AVDD", 34 "AVDD",
35 "DBVDD1", 35 "DBVDD1",
36}; 36};
@@ -146,17 +146,31 @@ static irqreturn_t arizona_underclocked(int irq, void *data)
146static irqreturn_t arizona_overclocked(int irq, void *data) 146static irqreturn_t arizona_overclocked(int irq, void *data)
147{ 147{
148 struct arizona *arizona = data; 148 struct arizona *arizona = data;
149 unsigned int val[2]; 149 unsigned int val[3];
150 int ret; 150 int ret;
151 151
152 ret = regmap_bulk_read(arizona->regmap, ARIZONA_INTERRUPT_RAW_STATUS_6, 152 ret = regmap_bulk_read(arizona->regmap, ARIZONA_INTERRUPT_RAW_STATUS_6,
153 &val[0], 2); 153 &val[0], 3);
154 if (ret != 0) { 154 if (ret != 0) {
155 dev_err(arizona->dev, "Failed to read overclock status: %d\n", 155 dev_err(arizona->dev, "Failed to read overclock status: %d\n",
156 ret); 156 ret);
157 return IRQ_NONE; 157 return IRQ_NONE;
158 } 158 }
159 159
160 switch (arizona->type) {
161 case WM8998:
162 case WM1814:
163 /* Some bits are shifted on WM8998,
164 * rearrange to match the standard bit layout
165 */
166 val[0] = ((val[0] & 0x60e0) >> 1) |
167 ((val[0] & 0x1e00) >> 2) |
168 (val[0] & 0x000f);
169 break;
170 default:
171 break;
172 }
173
160 if (val[0] & ARIZONA_PWM_OVERCLOCKED_STS) 174 if (val[0] & ARIZONA_PWM_OVERCLOCKED_STS)
161 dev_err(arizona->dev, "PWM overclocked\n"); 175 dev_err(arizona->dev, "PWM overclocked\n");
162 if (val[0] & ARIZONA_FX_CORE_OVERCLOCKED_STS) 176 if (val[0] & ARIZONA_FX_CORE_OVERCLOCKED_STS)
@@ -201,6 +215,9 @@ static irqreturn_t arizona_overclocked(int irq, void *data)
201 if (val[1] & ARIZONA_ISRC1_OVERCLOCKED_STS) 215 if (val[1] & ARIZONA_ISRC1_OVERCLOCKED_STS)
202 dev_err(arizona->dev, "ISRC1 overclocked\n"); 216 dev_err(arizona->dev, "ISRC1 overclocked\n");
203 217
218 if (val[2] & ARIZONA_SPDIF_OVERCLOCKED_STS)
219 dev_err(arizona->dev, "SPDIF overclocked\n");
220
204 return IRQ_HANDLED; 221 return IRQ_HANDLED;
205} 222}
206 223
@@ -550,9 +567,8 @@ static int arizona_runtime_resume(struct device *dev)
550 break; 567 break;
551 default: 568 default:
552 ret = arizona_wait_for_boot(arizona); 569 ret = arizona_wait_for_boot(arizona);
553 if (ret != 0) { 570 if (ret != 0)
554 goto err; 571 goto err;
555 }
556 572
557 if (arizona->external_dcvdd) { 573 if (arizona->external_dcvdd) {
558 ret = regmap_update_bits(arizona->regmap, 574 ret = regmap_update_bits(arizona->regmap,
@@ -759,8 +775,8 @@ static int arizona_of_get_core_pdata(struct arizona *arizona)
759 775
760 ret = of_property_read_u32_array(arizona->dev->of_node, 776 ret = of_property_read_u32_array(arizona->dev->of_node,
761 "wlf,gpio-defaults", 777 "wlf,gpio-defaults",
762 arizona->pdata.gpio_defaults, 778 pdata->gpio_defaults,
763 ARRAY_SIZE(arizona->pdata.gpio_defaults)); 779 ARRAY_SIZE(pdata->gpio_defaults));
764 if (ret >= 0) { 780 if (ret >= 0) {
765 /* 781 /*
766 * All values are literal except out of range values 782 * All values are literal except out of range values
@@ -768,11 +784,11 @@ static int arizona_of_get_core_pdata(struct arizona *arizona)
768 * data which uses 0 as chip default and out of range 784 * data which uses 0 as chip default and out of range
769 * as zero. 785 * as zero.
770 */ 786 */
771 for (i = 0; i < ARRAY_SIZE(arizona->pdata.gpio_defaults); i++) { 787 for (i = 0; i < ARRAY_SIZE(pdata->gpio_defaults); i++) {
772 if (arizona->pdata.gpio_defaults[i] > 0xffff) 788 if (pdata->gpio_defaults[i] > 0xffff)
773 arizona->pdata.gpio_defaults[i] = 0; 789 pdata->gpio_defaults[i] = 0;
774 else if (arizona->pdata.gpio_defaults[i] == 0) 790 else if (pdata->gpio_defaults[i] == 0)
775 arizona->pdata.gpio_defaults[i] = 0x10000; 791 pdata->gpio_defaults[i] = 0x10000;
776 } 792 }
777 } else { 793 } else {
778 dev_err(arizona->dev, "Failed to parse GPIO defaults: %d\n", 794 dev_err(arizona->dev, "Failed to parse GPIO defaults: %d\n",
@@ -781,20 +797,20 @@ static int arizona_of_get_core_pdata(struct arizona *arizona)
781 797
782 of_property_for_each_u32(arizona->dev->of_node, "wlf,inmode", prop, 798 of_property_for_each_u32(arizona->dev->of_node, "wlf,inmode", prop,
783 cur, val) { 799 cur, val) {
784 if (count == ARRAY_SIZE(arizona->pdata.inmode)) 800 if (count == ARRAY_SIZE(pdata->inmode))
785 break; 801 break;
786 802
787 arizona->pdata.inmode[count] = val; 803 pdata->inmode[count] = val;
788 count++; 804 count++;
789 } 805 }
790 806
791 count = 0; 807 count = 0;
792 of_property_for_each_u32(arizona->dev->of_node, "wlf,dmic-ref", prop, 808 of_property_for_each_u32(arizona->dev->of_node, "wlf,dmic-ref", prop,
793 cur, val) { 809 cur, val) {
794 if (count == ARRAY_SIZE(arizona->pdata.dmic_ref)) 810 if (count == ARRAY_SIZE(pdata->dmic_ref))
795 break; 811 break;
796 812
797 arizona->pdata.dmic_ref[count] = val; 813 pdata->dmic_ref[count] = val;
798 count++; 814 count++;
799 } 815 }
800 816
@@ -806,6 +822,8 @@ const struct of_device_id arizona_of_match[] = {
806 { .compatible = "wlf,wm5110", .data = (void *)WM5110 }, 822 { .compatible = "wlf,wm5110", .data = (void *)WM5110 },
807 { .compatible = "wlf,wm8280", .data = (void *)WM8280 }, 823 { .compatible = "wlf,wm8280", .data = (void *)WM8280 },
808 { .compatible = "wlf,wm8997", .data = (void *)WM8997 }, 824 { .compatible = "wlf,wm8997", .data = (void *)WM8997 },
825 { .compatible = "wlf,wm8998", .data = (void *)WM8998 },
826 { .compatible = "wlf,wm1814", .data = (void *)WM1814 },
809 {}, 827 {},
810}; 828};
811EXPORT_SYMBOL_GPL(arizona_of_match); 829EXPORT_SYMBOL_GPL(arizona_of_match);
@@ -820,7 +838,7 @@ static const struct mfd_cell early_devs[] = {
820 { .name = "arizona-ldo1" }, 838 { .name = "arizona-ldo1" },
821}; 839};
822 840
823static const char *wm5102_supplies[] = { 841static const char * const wm5102_supplies[] = {
824 "MICVDD", 842 "MICVDD",
825 "DBVDD2", 843 "DBVDD2",
826 "DBVDD3", 844 "DBVDD3",
@@ -863,7 +881,7 @@ static const struct mfd_cell wm5110_devs[] = {
863 }, 881 },
864}; 882};
865 883
866static const char *wm8997_supplies[] = { 884static const char * const wm8997_supplies[] = {
867 "MICVDD", 885 "MICVDD",
868 "DBVDD2", 886 "DBVDD2",
869 "CPVDD", 887 "CPVDD",
@@ -887,11 +905,28 @@ static const struct mfd_cell wm8997_devs[] = {
887 }, 905 },
888}; 906};
889 907
908static const struct mfd_cell wm8998_devs[] = {
909 {
910 .name = "arizona-extcon",
911 .parent_supplies = wm5102_supplies,
912 .num_parent_supplies = 1, /* We only need MICVDD */
913 },
914 { .name = "arizona-gpio" },
915 { .name = "arizona-haptics" },
916 { .name = "arizona-pwm" },
917 {
918 .name = "wm8998-codec",
919 .parent_supplies = wm5102_supplies,
920 .num_parent_supplies = ARRAY_SIZE(wm5102_supplies),
921 },
922 { .name = "arizona-micsupp" },
923};
924
890int arizona_dev_init(struct arizona *arizona) 925int arizona_dev_init(struct arizona *arizona)
891{ 926{
892 struct device *dev = arizona->dev; 927 struct device *dev = arizona->dev;
893 const char *type_name; 928 const char *type_name;
894 unsigned int reg, val; 929 unsigned int reg, val, mask;
895 int (*apply_patch)(struct arizona *) = NULL; 930 int (*apply_patch)(struct arizona *) = NULL;
896 int ret, i; 931 int ret, i;
897 932
@@ -911,6 +946,8 @@ int arizona_dev_init(struct arizona *arizona)
911 case WM5110: 946 case WM5110:
912 case WM8280: 947 case WM8280:
913 case WM8997: 948 case WM8997:
949 case WM8998:
950 case WM1814:
914 for (i = 0; i < ARRAY_SIZE(wm5102_core_supplies); i++) 951 for (i = 0; i < ARRAY_SIZE(wm5102_core_supplies); i++)
915 arizona->core_supplies[i].supply 952 arizona->core_supplies[i].supply
916 = wm5102_core_supplies[i]; 953 = wm5102_core_supplies[i];
@@ -992,6 +1029,7 @@ int arizona_dev_init(struct arizona *arizona)
992 switch (reg) { 1029 switch (reg) {
993 case 0x5102: 1030 case 0x5102:
994 case 0x5110: 1031 case 0x5110:
1032 case 0x6349:
995 case 0x8997: 1033 case 0x8997:
996 break; 1034 break;
997 default: 1035 default:
@@ -1093,6 +1131,27 @@ int arizona_dev_init(struct arizona *arizona)
1093 apply_patch = wm8997_patch; 1131 apply_patch = wm8997_patch;
1094 break; 1132 break;
1095#endif 1133#endif
1134#ifdef CONFIG_MFD_WM8998
1135 case 0x6349:
1136 switch (arizona->type) {
1137 case WM8998:
1138 type_name = "WM8998";
1139 break;
1140
1141 case WM1814:
1142 type_name = "WM1814";
1143 break;
1144
1145 default:
1146 type_name = "WM8998";
1147 dev_err(arizona->dev, "WM8998 registered as %d\n",
1148 arizona->type);
1149 arizona->type = WM8998;
1150 }
1151
1152 apply_patch = wm8998_patch;
1153 break;
1154#endif
1096 default: 1155 default:
1097 dev_err(arizona->dev, "Unknown device ID %x\n", reg); 1156 dev_err(arizona->dev, "Unknown device ID %x\n", reg);
1098 goto err_reset; 1157 goto err_reset;
@@ -1204,14 +1263,38 @@ int arizona_dev_init(struct arizona *arizona)
1204 << ARIZONA_IN1_DMIC_SUP_SHIFT; 1263 << ARIZONA_IN1_DMIC_SUP_SHIFT;
1205 if (arizona->pdata.inmode[i] & ARIZONA_INMODE_DMIC) 1264 if (arizona->pdata.inmode[i] & ARIZONA_INMODE_DMIC)
1206 val |= 1 << ARIZONA_IN1_MODE_SHIFT; 1265 val |= 1 << ARIZONA_IN1_MODE_SHIFT;
1207 if (arizona->pdata.inmode[i] & ARIZONA_INMODE_SE) 1266
1208 val |= 1 << ARIZONA_IN1_SINGLE_ENDED_SHIFT; 1267 switch (arizona->type) {
1268 case WM8998:
1269 case WM1814:
1270 regmap_update_bits(arizona->regmap,
1271 ARIZONA_ADC_DIGITAL_VOLUME_1L + (i * 8),
1272 ARIZONA_IN1L_SRC_SE_MASK,
1273 (arizona->pdata.inmode[i] & ARIZONA_INMODE_SE)
1274 << ARIZONA_IN1L_SRC_SE_SHIFT);
1275
1276 regmap_update_bits(arizona->regmap,
1277 ARIZONA_ADC_DIGITAL_VOLUME_1R + (i * 8),
1278 ARIZONA_IN1R_SRC_SE_MASK,
1279 (arizona->pdata.inmode[i] & ARIZONA_INMODE_SE)
1280 << ARIZONA_IN1R_SRC_SE_SHIFT);
1281
1282 mask = ARIZONA_IN1_DMIC_SUP_MASK |
1283 ARIZONA_IN1_MODE_MASK;
1284 break;
1285 default:
1286 if (arizona->pdata.inmode[i] & ARIZONA_INMODE_SE)
1287 val |= 1 << ARIZONA_IN1_SINGLE_ENDED_SHIFT;
1288
1289 mask = ARIZONA_IN1_DMIC_SUP_MASK |
1290 ARIZONA_IN1_MODE_MASK |
1291 ARIZONA_IN1_SINGLE_ENDED_MASK;
1292 break;
1293 }
1209 1294
1210 regmap_update_bits(arizona->regmap, 1295 regmap_update_bits(arizona->regmap,
1211 ARIZONA_IN1L_CONTROL + (i * 8), 1296 ARIZONA_IN1L_CONTROL + (i * 8),
1212 ARIZONA_IN1_DMIC_SUP_MASK | 1297 mask, val);
1213 ARIZONA_IN1_MODE_MASK |
1214 ARIZONA_IN1_SINGLE_ENDED_MASK, val);
1215 } 1298 }
1216 1299
1217 for (i = 0; i < ARIZONA_MAX_OUTPUT; i++) { 1300 for (i = 0; i < ARIZONA_MAX_OUTPUT; i++) {
@@ -1273,6 +1356,11 @@ int arizona_dev_init(struct arizona *arizona)
1273 ret = mfd_add_devices(arizona->dev, -1, wm8997_devs, 1356 ret = mfd_add_devices(arizona->dev, -1, wm8997_devs,
1274 ARRAY_SIZE(wm8997_devs), NULL, 0, NULL); 1357 ARRAY_SIZE(wm8997_devs), NULL, 0, NULL);
1275 break; 1358 break;
1359 case WM8998:
1360 case WM1814:
1361 ret = mfd_add_devices(arizona->dev, -1, wm8998_devs,
1362 ARRAY_SIZE(wm8998_devs), NULL, 0, NULL);
1363 break;
1276 } 1364 }
1277 1365
1278 if (ret != 0) { 1366 if (ret != 0) {
diff --git a/drivers/mfd/arizona-i2c.c b/drivers/mfd/arizona-i2c.c
index ff782a5de235..cea1b409fa27 100644
--- a/drivers/mfd/arizona-i2c.c
+++ b/drivers/mfd/arizona-i2c.c
@@ -53,6 +53,12 @@ static int arizona_i2c_probe(struct i2c_client *i2c,
53 regmap_config = &wm8997_i2c_regmap; 53 regmap_config = &wm8997_i2c_regmap;
54 break; 54 break;
55#endif 55#endif
56#ifdef CONFIG_MFD_WM8998
57 case WM8998:
58 case WM1814:
59 regmap_config = &wm8998_i2c_regmap;
60 break;
61#endif
56 default: 62 default:
57 dev_err(&i2c->dev, "Unknown device type %ld\n", 63 dev_err(&i2c->dev, "Unknown device type %ld\n",
58 id->driver_data); 64 id->driver_data);
@@ -90,6 +96,8 @@ static const struct i2c_device_id arizona_i2c_id[] = {
90 { "wm5110", WM5110 }, 96 { "wm5110", WM5110 },
91 { "wm8280", WM8280 }, 97 { "wm8280", WM8280 },
92 { "wm8997", WM8997 }, 98 { "wm8997", WM8997 },
99 { "wm8998", WM8998 },
100 { "wm1814", WM1814 },
93 { } 101 { }
94}; 102};
95MODULE_DEVICE_TABLE(i2c, arizona_i2c_id); 103MODULE_DEVICE_TABLE(i2c, arizona_i2c_id);
@@ -97,7 +105,6 @@ MODULE_DEVICE_TABLE(i2c, arizona_i2c_id);
97static struct i2c_driver arizona_i2c_driver = { 105static struct i2c_driver arizona_i2c_driver = {
98 .driver = { 106 .driver = {
99 .name = "arizona", 107 .name = "arizona",
100 .owner = THIS_MODULE,
101 .pm = &arizona_pm_ops, 108 .pm = &arizona_pm_ops,
102 .of_match_table = of_match_ptr(arizona_of_match), 109 .of_match_table = of_match_ptr(arizona_of_match),
103 }, 110 },
diff --git a/drivers/mfd/arizona-irq.c b/drivers/mfd/arizona-irq.c
index 2b9965d53e4e..2cac4f463f1e 100644
--- a/drivers/mfd/arizona-irq.c
+++ b/drivers/mfd/arizona-irq.c
@@ -174,14 +174,7 @@ static int arizona_irq_map(struct irq_domain *h, unsigned int virq,
174 irq_set_chip_data(virq, data); 174 irq_set_chip_data(virq, data);
175 irq_set_chip_and_handler(virq, &arizona_irq_chip, handle_simple_irq); 175 irq_set_chip_and_handler(virq, &arizona_irq_chip, handle_simple_irq);
176 irq_set_nested_thread(virq, 1); 176 irq_set_nested_thread(virq, 1);
177
178 /* ARM needs us to explicitly flag the IRQ as valid
179 * and will set them noprobe when we do so. */
180#ifdef CONFIG_ARM
181 set_irq_flags(virq, IRQF_VALID);
182#else
183 irq_set_noprobe(virq); 177 irq_set_noprobe(virq);
184#endif
185 178
186 return 0; 179 return 0;
187} 180}
@@ -234,6 +227,15 @@ int arizona_irq_init(struct arizona *arizona)
234 arizona->ctrlif_error = false; 227 arizona->ctrlif_error = false;
235 break; 228 break;
236#endif 229#endif
230#ifdef CONFIG_MFD_WM8998
231 case WM8998:
232 case WM1814:
233 aod = &wm8998_aod;
234 irq = &wm8998_irq;
235
236 arizona->ctrlif_error = false;
237 break;
238#endif
237 default: 239 default:
238 BUG_ON("Unknown Arizona class device" == NULL); 240 BUG_ON("Unknown Arizona class device" == NULL);
239 return -EINVAL; 241 return -EINVAL;
diff --git a/drivers/mfd/arizona.h b/drivers/mfd/arizona.h
index fbe2843271c5..3af12e938f57 100644
--- a/drivers/mfd/arizona.h
+++ b/drivers/mfd/arizona.h
@@ -27,6 +27,8 @@ extern const struct regmap_config wm5110_spi_regmap;
27 27
28extern const struct regmap_config wm8997_i2c_regmap; 28extern const struct regmap_config wm8997_i2c_regmap;
29 29
30extern const struct regmap_config wm8998_i2c_regmap;
31
30extern const struct dev_pm_ops arizona_pm_ops; 32extern const struct dev_pm_ops arizona_pm_ops;
31 33
32extern const struct of_device_id arizona_of_match[]; 34extern const struct of_device_id arizona_of_match[];
@@ -41,6 +43,9 @@ extern const struct regmap_irq_chip wm5110_revd_irq;
41extern const struct regmap_irq_chip wm8997_aod; 43extern const struct regmap_irq_chip wm8997_aod;
42extern const struct regmap_irq_chip wm8997_irq; 44extern const struct regmap_irq_chip wm8997_irq;
43 45
46extern struct regmap_irq_chip wm8998_aod;
47extern struct regmap_irq_chip wm8998_irq;
48
44int arizona_dev_init(struct arizona *arizona); 49int arizona_dev_init(struct arizona *arizona);
45int arizona_dev_exit(struct arizona *arizona); 50int arizona_dev_exit(struct arizona *arizona);
46int arizona_irq_init(struct arizona *arizona); 51int arizona_irq_init(struct arizona *arizona);
diff --git a/drivers/mfd/as3711.c b/drivers/mfd/as3711.c
index d9706ede8d39..d001f7e238f5 100644
--- a/drivers/mfd/as3711.c
+++ b/drivers/mfd/as3711.c
@@ -211,7 +211,6 @@ MODULE_DEVICE_TABLE(i2c, as3711_i2c_id);
211static struct i2c_driver as3711_i2c_driver = { 211static struct i2c_driver as3711_i2c_driver = {
212 .driver = { 212 .driver = {
213 .name = "as3711", 213 .name = "as3711",
214 .owner = THIS_MODULE,
215 .of_match_table = of_match_ptr(as3711_of_match), 214 .of_match_table = of_match_ptr(as3711_of_match),
216 }, 215 },
217 .probe = as3711_i2c_probe, 216 .probe = as3711_i2c_probe,
diff --git a/drivers/mfd/as3722.c b/drivers/mfd/as3722.c
index 39fa554f13bb..924ea90494ae 100644
--- a/drivers/mfd/as3722.c
+++ b/drivers/mfd/as3722.c
@@ -437,7 +437,6 @@ MODULE_DEVICE_TABLE(i2c, as3722_i2c_id);
437static struct i2c_driver as3722_i2c_driver = { 437static struct i2c_driver as3722_i2c_driver = {
438 .driver = { 438 .driver = {
439 .name = "as3722", 439 .name = "as3722",
440 .owner = THIS_MODULE,
441 .of_match_table = as3722_of_match, 440 .of_match_table = as3722_of_match,
442 }, 441 },
443 .probe = as3722_i2c_probe, 442 .probe = as3722_i2c_probe,
diff --git a/drivers/mfd/asic3.c b/drivers/mfd/asic3.c
index 120df5c08741..4b54128bc78e 100644
--- a/drivers/mfd/asic3.c
+++ b/drivers/mfd/asic3.c
@@ -411,7 +411,7 @@ static int __init asic3_irq_probe(struct platform_device *pdev)
411 411
412 irq_set_chip_data(irq, asic); 412 irq_set_chip_data(irq, asic);
413 irq_set_handler(irq, handle_level_irq); 413 irq_set_handler(irq, handle_level_irq);
414 set_irq_flags(irq, IRQF_VALID | IRQF_PROBE); 414 irq_clear_status_flags(irq, IRQ_NOREQUEST | IRQ_NOPROBE);
415 } 415 }
416 416
417 asic3_write_register(asic, ASIC3_OFFSET(INTR, INT_MASK), 417 asic3_write_register(asic, ASIC3_OFFSET(INTR, INT_MASK),
@@ -431,7 +431,7 @@ static void asic3_irq_remove(struct platform_device *pdev)
431 irq_base = asic->irq_base; 431 irq_base = asic->irq_base;
432 432
433 for (irq = irq_base; irq < irq_base + ASIC3_NR_IRQS; irq++) { 433 for (irq = irq_base; irq < irq_base + ASIC3_NR_IRQS; irq++) {
434 set_irq_flags(irq, 0); 434 irq_set_status_flags(irq, IRQ_NOREQUEST | IRQ_NOPROBE);
435 irq_set_chip_and_handler(irq, NULL, NULL); 435 irq_set_chip_and_handler(irq, NULL, NULL);
436 irq_set_chip_data(irq, NULL); 436 irq_set_chip_data(irq, NULL);
437 } 437 }
diff --git a/drivers/mfd/atmel-hlcdc.c b/drivers/mfd/atmel-hlcdc.c
index cfd58f4cc5c3..3fff6b5d0426 100644
--- a/drivers/mfd/atmel-hlcdc.c
+++ b/drivers/mfd/atmel-hlcdc.c
@@ -18,6 +18,7 @@
18 */ 18 */
19 19
20#include <linux/clk.h> 20#include <linux/clk.h>
21#include <linux/iopoll.h>
21#include <linux/mfd/atmel-hlcdc.h> 22#include <linux/mfd/atmel-hlcdc.h>
22#include <linux/mfd/core.h> 23#include <linux/mfd/core.h>
23#include <linux/module.h> 24#include <linux/module.h>
@@ -26,6 +27,10 @@
26 27
27#define ATMEL_HLCDC_REG_MAX (0x4000 - 0x4) 28#define ATMEL_HLCDC_REG_MAX (0x4000 - 0x4)
28 29
30struct atmel_hlcdc_regmap {
31 void __iomem *regs;
32};
33
29static const struct mfd_cell atmel_hlcdc_cells[] = { 34static const struct mfd_cell atmel_hlcdc_cells[] = {
30 { 35 {
31 .name = "atmel-hlcdc-pwm", 36 .name = "atmel-hlcdc-pwm",
@@ -37,28 +42,62 @@ static const struct mfd_cell atmel_hlcdc_cells[] = {
37 }, 42 },
38}; 43};
39 44
45static int regmap_atmel_hlcdc_reg_write(void *context, unsigned int reg,
46 unsigned int val)
47{
48 struct atmel_hlcdc_regmap *hregmap = context;
49
50 if (reg <= ATMEL_HLCDC_DIS) {
51 u32 status;
52
53 readl_poll_timeout(hregmap->regs + ATMEL_HLCDC_SR, status,
54 !(status & ATMEL_HLCDC_SIP), 1, 100);
55 }
56
57 writel(val, hregmap->regs + reg);
58
59 return 0;
60}
61
62static int regmap_atmel_hlcdc_reg_read(void *context, unsigned int reg,
63 unsigned int *val)
64{
65 struct atmel_hlcdc_regmap *hregmap = context;
66
67 *val = readl(hregmap->regs + reg);
68
69 return 0;
70}
71
40static const struct regmap_config atmel_hlcdc_regmap_config = { 72static const struct regmap_config atmel_hlcdc_regmap_config = {
41 .reg_bits = 32, 73 .reg_bits = 32,
42 .val_bits = 32, 74 .val_bits = 32,
43 .reg_stride = 4, 75 .reg_stride = 4,
44 .max_register = ATMEL_HLCDC_REG_MAX, 76 .max_register = ATMEL_HLCDC_REG_MAX,
77 .reg_write = regmap_atmel_hlcdc_reg_write,
78 .reg_read = regmap_atmel_hlcdc_reg_read,
79 .fast_io = true,
45}; 80};
46 81
47static int atmel_hlcdc_probe(struct platform_device *pdev) 82static int atmel_hlcdc_probe(struct platform_device *pdev)
48{ 83{
84 struct atmel_hlcdc_regmap *hregmap;
49 struct device *dev = &pdev->dev; 85 struct device *dev = &pdev->dev;
50 struct atmel_hlcdc *hlcdc; 86 struct atmel_hlcdc *hlcdc;
51 struct resource *res; 87 struct resource *res;
52 void __iomem *regs; 88
89 hregmap = devm_kzalloc(dev, sizeof(*hregmap), GFP_KERNEL);
90 if (!hregmap)
91 return -ENOMEM;
53 92
54 hlcdc = devm_kzalloc(dev, sizeof(*hlcdc), GFP_KERNEL); 93 hlcdc = devm_kzalloc(dev, sizeof(*hlcdc), GFP_KERNEL);
55 if (!hlcdc) 94 if (!hlcdc)
56 return -ENOMEM; 95 return -ENOMEM;
57 96
58 res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 97 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
59 regs = devm_ioremap_resource(dev, res); 98 hregmap->regs = devm_ioremap_resource(dev, res);
60 if (IS_ERR(regs)) 99 if (IS_ERR(hregmap->regs))
61 return PTR_ERR(regs); 100 return PTR_ERR(hregmap->regs);
62 101
63 hlcdc->irq = platform_get_irq(pdev, 0); 102 hlcdc->irq = platform_get_irq(pdev, 0);
64 if (hlcdc->irq < 0) 103 if (hlcdc->irq < 0)
@@ -82,8 +121,8 @@ static int atmel_hlcdc_probe(struct platform_device *pdev)
82 return PTR_ERR(hlcdc->slow_clk); 121 return PTR_ERR(hlcdc->slow_clk);
83 } 122 }
84 123
85 hlcdc->regmap = devm_regmap_init_mmio(dev, regs, 124 hlcdc->regmap = devm_regmap_init(dev, NULL, hregmap,
86 &atmel_hlcdc_regmap_config); 125 &atmel_hlcdc_regmap_config);
87 if (IS_ERR(hlcdc->regmap)) 126 if (IS_ERR(hlcdc->regmap))
88 return PTR_ERR(hlcdc->regmap); 127 return PTR_ERR(hlcdc->regmap);
89 128
@@ -102,7 +141,11 @@ static int atmel_hlcdc_remove(struct platform_device *pdev)
102} 141}
103 142
104static const struct of_device_id atmel_hlcdc_match[] = { 143static const struct of_device_id atmel_hlcdc_match[] = {
144 { .compatible = "atmel,at91sam9n12-hlcdc" },
145 { .compatible = "atmel,at91sam9x5-hlcdc" },
146 { .compatible = "atmel,sama5d2-hlcdc" },
105 { .compatible = "atmel,sama5d3-hlcdc" }, 147 { .compatible = "atmel,sama5d3-hlcdc" },
148 { .compatible = "atmel,sama5d4-hlcdc" },
106 { /* sentinel */ }, 149 { /* sentinel */ },
107}; 150};
108 151
diff --git a/drivers/mfd/axp20x.c b/drivers/mfd/axp20x.c
index 6df91556faf3..3f576b76c322 100644
--- a/drivers/mfd/axp20x.c
+++ b/drivers/mfd/axp20x.c
@@ -30,19 +30,47 @@
30#define AXP20X_OFF 0x80 30#define AXP20X_OFF 0x80
31 31
32static const char * const axp20x_model_names[] = { 32static const char * const axp20x_model_names[] = {
33 "AXP152",
33 "AXP202", 34 "AXP202",
34 "AXP209", 35 "AXP209",
35 "AXP221", 36 "AXP221",
36 "AXP288", 37 "AXP288",
37}; 38};
38 39
40static const struct regmap_range axp152_writeable_ranges[] = {
41 regmap_reg_range(AXP152_LDO3456_DC1234_CTRL, AXP152_IRQ3_STATE),
42 regmap_reg_range(AXP152_DCDC_MODE, AXP152_PWM1_DUTY_CYCLE),
43};
44
45static const struct regmap_range axp152_volatile_ranges[] = {
46 regmap_reg_range(AXP152_PWR_OP_MODE, AXP152_PWR_OP_MODE),
47 regmap_reg_range(AXP152_IRQ1_EN, AXP152_IRQ3_STATE),
48 regmap_reg_range(AXP152_GPIO_INPUT, AXP152_GPIO_INPUT),
49};
50
51static const struct regmap_access_table axp152_writeable_table = {
52 .yes_ranges = axp152_writeable_ranges,
53 .n_yes_ranges = ARRAY_SIZE(axp152_writeable_ranges),
54};
55
56static const struct regmap_access_table axp152_volatile_table = {
57 .yes_ranges = axp152_volatile_ranges,
58 .n_yes_ranges = ARRAY_SIZE(axp152_volatile_ranges),
59};
60
39static const struct regmap_range axp20x_writeable_ranges[] = { 61static const struct regmap_range axp20x_writeable_ranges[] = {
40 regmap_reg_range(AXP20X_DATACACHE(0), AXP20X_IRQ5_STATE), 62 regmap_reg_range(AXP20X_DATACACHE(0), AXP20X_IRQ5_STATE),
41 regmap_reg_range(AXP20X_DCDC_MODE, AXP20X_FG_RES), 63 regmap_reg_range(AXP20X_DCDC_MODE, AXP20X_FG_RES),
64 regmap_reg_range(AXP20X_RDC_H, AXP20X_OCV(AXP20X_OCV_MAX)),
42}; 65};
43 66
44static const struct regmap_range axp20x_volatile_ranges[] = { 67static const struct regmap_range axp20x_volatile_ranges[] = {
68 regmap_reg_range(AXP20X_PWR_INPUT_STATUS, AXP20X_USB_OTG_STATUS),
69 regmap_reg_range(AXP20X_CHRG_CTRL1, AXP20X_CHRG_CTRL2),
45 regmap_reg_range(AXP20X_IRQ1_EN, AXP20X_IRQ5_STATE), 70 regmap_reg_range(AXP20X_IRQ1_EN, AXP20X_IRQ5_STATE),
71 regmap_reg_range(AXP20X_ACIN_V_ADC_H, AXP20X_IPSOUT_V_HIGH_L),
72 regmap_reg_range(AXP20X_GPIO20_SS, AXP20X_GPIO3_CTRL),
73 regmap_reg_range(AXP20X_FG_RES, AXP20X_RDC_L),
46}; 74};
47 75
48static const struct regmap_access_table axp20x_writeable_table = { 76static const struct regmap_access_table axp20x_writeable_table = {
@@ -93,6 +121,11 @@ static const struct regmap_access_table axp288_volatile_table = {
93 .n_yes_ranges = ARRAY_SIZE(axp288_volatile_ranges), 121 .n_yes_ranges = ARRAY_SIZE(axp288_volatile_ranges),
94}; 122};
95 123
124static struct resource axp152_pek_resources[] = {
125 DEFINE_RES_IRQ_NAMED(AXP152_IRQ_PEK_RIS_EDGE, "PEK_DBR"),
126 DEFINE_RES_IRQ_NAMED(AXP152_IRQ_PEK_FAL_EDGE, "PEK_DBF"),
127};
128
96static struct resource axp20x_pek_resources[] = { 129static struct resource axp20x_pek_resources[] = {
97 { 130 {
98 .name = "PEK_DBR", 131 .name = "PEK_DBR",
@@ -107,6 +140,13 @@ static struct resource axp20x_pek_resources[] = {
107 }, 140 },
108}; 141};
109 142
143static struct resource axp20x_usb_power_supply_resources[] = {
144 DEFINE_RES_IRQ_NAMED(AXP20X_IRQ_VBUS_PLUGIN, "VBUS_PLUGIN"),
145 DEFINE_RES_IRQ_NAMED(AXP20X_IRQ_VBUS_REMOVAL, "VBUS_REMOVAL"),
146 DEFINE_RES_IRQ_NAMED(AXP20X_IRQ_VBUS_VALID, "VBUS_VALID"),
147 DEFINE_RES_IRQ_NAMED(AXP20X_IRQ_VBUS_NOT_VALID, "VBUS_NOT_VALID"),
148};
149
110static struct resource axp22x_pek_resources[] = { 150static struct resource axp22x_pek_resources[] = {
111 { 151 {
112 .name = "PEK_DBR", 152 .name = "PEK_DBR",
@@ -154,12 +194,21 @@ static struct resource axp288_fuel_gauge_resources[] = {
154 }, 194 },
155}; 195};
156 196
197static const struct regmap_config axp152_regmap_config = {
198 .reg_bits = 8,
199 .val_bits = 8,
200 .wr_table = &axp152_writeable_table,
201 .volatile_table = &axp152_volatile_table,
202 .max_register = AXP152_PWM1_DUTY_CYCLE,
203 .cache_type = REGCACHE_RBTREE,
204};
205
157static const struct regmap_config axp20x_regmap_config = { 206static const struct regmap_config axp20x_regmap_config = {
158 .reg_bits = 8, 207 .reg_bits = 8,
159 .val_bits = 8, 208 .val_bits = 8,
160 .wr_table = &axp20x_writeable_table, 209 .wr_table = &axp20x_writeable_table,
161 .volatile_table = &axp20x_volatile_table, 210 .volatile_table = &axp20x_volatile_table,
162 .max_register = AXP20X_FG_RES, 211 .max_register = AXP20X_OCV(AXP20X_OCV_MAX),
163 .cache_type = REGCACHE_RBTREE, 212 .cache_type = REGCACHE_RBTREE,
164}; 213};
165 214
@@ -184,6 +233,26 @@ static const struct regmap_config axp288_regmap_config = {
184#define INIT_REGMAP_IRQ(_variant, _irq, _off, _mask) \ 233#define INIT_REGMAP_IRQ(_variant, _irq, _off, _mask) \
185 [_variant##_IRQ_##_irq] = { .reg_offset = (_off), .mask = BIT(_mask) } 234 [_variant##_IRQ_##_irq] = { .reg_offset = (_off), .mask = BIT(_mask) }
186 235
236static const struct regmap_irq axp152_regmap_irqs[] = {
237 INIT_REGMAP_IRQ(AXP152, LDO0IN_CONNECT, 0, 6),
238 INIT_REGMAP_IRQ(AXP152, LDO0IN_REMOVAL, 0, 5),
239 INIT_REGMAP_IRQ(AXP152, ALDO0IN_CONNECT, 0, 3),
240 INIT_REGMAP_IRQ(AXP152, ALDO0IN_REMOVAL, 0, 2),
241 INIT_REGMAP_IRQ(AXP152, DCDC1_V_LOW, 1, 5),
242 INIT_REGMAP_IRQ(AXP152, DCDC2_V_LOW, 1, 4),
243 INIT_REGMAP_IRQ(AXP152, DCDC3_V_LOW, 1, 3),
244 INIT_REGMAP_IRQ(AXP152, DCDC4_V_LOW, 1, 2),
245 INIT_REGMAP_IRQ(AXP152, PEK_SHORT, 1, 1),
246 INIT_REGMAP_IRQ(AXP152, PEK_LONG, 1, 0),
247 INIT_REGMAP_IRQ(AXP152, TIMER, 2, 7),
248 INIT_REGMAP_IRQ(AXP152, PEK_RIS_EDGE, 2, 6),
249 INIT_REGMAP_IRQ(AXP152, PEK_FAL_EDGE, 2, 5),
250 INIT_REGMAP_IRQ(AXP152, GPIO3_INPUT, 2, 3),
251 INIT_REGMAP_IRQ(AXP152, GPIO2_INPUT, 2, 2),
252 INIT_REGMAP_IRQ(AXP152, GPIO1_INPUT, 2, 1),
253 INIT_REGMAP_IRQ(AXP152, GPIO0_INPUT, 2, 0),
254};
255
187static const struct regmap_irq axp20x_regmap_irqs[] = { 256static const struct regmap_irq axp20x_regmap_irqs[] = {
188 INIT_REGMAP_IRQ(AXP20X, ACIN_OVER_V, 0, 7), 257 INIT_REGMAP_IRQ(AXP20X, ACIN_OVER_V, 0, 7),
189 INIT_REGMAP_IRQ(AXP20X, ACIN_PLUGIN, 0, 6), 258 INIT_REGMAP_IRQ(AXP20X, ACIN_PLUGIN, 0, 6),
@@ -293,6 +362,7 @@ static const struct regmap_irq axp288_regmap_irqs[] = {
293}; 362};
294 363
295static const struct of_device_id axp20x_of_match[] = { 364static const struct of_device_id axp20x_of_match[] = {
365 { .compatible = "x-powers,axp152", .data = (void *) AXP152_ID },
296 { .compatible = "x-powers,axp202", .data = (void *) AXP202_ID }, 366 { .compatible = "x-powers,axp202", .data = (void *) AXP202_ID },
297 { .compatible = "x-powers,axp209", .data = (void *) AXP209_ID }, 367 { .compatible = "x-powers,axp209", .data = (void *) AXP209_ID },
298 { .compatible = "x-powers,axp221", .data = (void *) AXP221_ID }, 368 { .compatible = "x-powers,axp221", .data = (void *) AXP221_ID },
@@ -317,6 +387,18 @@ static const struct acpi_device_id axp20x_acpi_match[] = {
317}; 387};
318MODULE_DEVICE_TABLE(acpi, axp20x_acpi_match); 388MODULE_DEVICE_TABLE(acpi, axp20x_acpi_match);
319 389
390static const struct regmap_irq_chip axp152_regmap_irq_chip = {
391 .name = "axp152_irq_chip",
392 .status_base = AXP152_IRQ1_STATE,
393 .ack_base = AXP152_IRQ1_STATE,
394 .mask_base = AXP152_IRQ1_EN,
395 .mask_invert = true,
396 .init_ack_masked = true,
397 .irqs = axp152_regmap_irqs,
398 .num_irqs = ARRAY_SIZE(axp152_regmap_irqs),
399 .num_regs = 3,
400};
401
320static const struct regmap_irq_chip axp20x_regmap_irq_chip = { 402static const struct regmap_irq_chip axp20x_regmap_irq_chip = {
321 .name = "axp20x_irq_chip", 403 .name = "axp20x_irq_chip",
322 .status_base = AXP20X_IRQ1_STATE, 404 .status_base = AXP20X_IRQ1_STATE,
@@ -357,11 +439,16 @@ static const struct regmap_irq_chip axp288_regmap_irq_chip = {
357 439
358static struct mfd_cell axp20x_cells[] = { 440static struct mfd_cell axp20x_cells[] = {
359 { 441 {
360 .name = "axp20x-pek", 442 .name = "axp20x-pek",
361 .num_resources = ARRAY_SIZE(axp20x_pek_resources), 443 .num_resources = ARRAY_SIZE(axp20x_pek_resources),
362 .resources = axp20x_pek_resources, 444 .resources = axp20x_pek_resources,
363 }, { 445 }, {
364 .name = "axp20x-regulator", 446 .name = "axp20x-regulator",
447 }, {
448 .name = "axp20x-usb-power-supply",
449 .of_compatible = "x-powers,axp202-usb-power-supply",
450 .num_resources = ARRAY_SIZE(axp20x_usb_power_supply_resources),
451 .resources = axp20x_usb_power_supply_resources,
365 }, 452 },
366}; 453};
367 454
@@ -375,6 +462,14 @@ static struct mfd_cell axp22x_cells[] = {
375 }, 462 },
376}; 463};
377 464
465static struct mfd_cell axp152_cells[] = {
466 {
467 .name = "axp20x-pek",
468 .num_resources = ARRAY_SIZE(axp152_pek_resources),
469 .resources = axp152_pek_resources,
470 },
471};
472
378static struct resource axp288_adc_resources[] = { 473static struct resource axp288_adc_resources[] = {
379 { 474 {
380 .name = "GPADC", 475 .name = "GPADC",
@@ -513,6 +608,12 @@ static int axp20x_match_device(struct axp20x_dev *axp20x, struct device *dev)
513 } 608 }
514 609
515 switch (axp20x->variant) { 610 switch (axp20x->variant) {
611 case AXP152_ID:
612 axp20x->nr_cells = ARRAY_SIZE(axp152_cells);
613 axp20x->cells = axp152_cells;
614 axp20x->regmap_cfg = &axp152_regmap_config;
615 axp20x->regmap_irq_chip = &axp152_regmap_irq_chip;
616 break;
516 case AXP202_ID: 617 case AXP202_ID:
517 case AXP209_ID: 618 case AXP209_ID:
518 axp20x->nr_cells = ARRAY_SIZE(axp20x_cells); 619 axp20x->nr_cells = ARRAY_SIZE(axp20x_cells);
@@ -613,7 +714,6 @@ static int axp20x_i2c_remove(struct i2c_client *i2c)
613static struct i2c_driver axp20x_i2c_driver = { 714static struct i2c_driver axp20x_i2c_driver = {
614 .driver = { 715 .driver = {
615 .name = "axp20x", 716 .name = "axp20x",
616 .owner = THIS_MODULE,
617 .of_match_table = of_match_ptr(axp20x_of_match), 717 .of_match_table = of_match_ptr(axp20x_of_match),
618 .acpi_match_table = ACPI_PTR(axp20x_acpi_match), 718 .acpi_match_table = ACPI_PTR(axp20x_acpi_match),
619 }, 719 },
diff --git a/drivers/mfd/bcm590xx.c b/drivers/mfd/bcm590xx.c
index e334de000e8c..da2af5b4f855 100644
--- a/drivers/mfd/bcm590xx.c
+++ b/drivers/mfd/bcm590xx.c
@@ -117,7 +117,6 @@ MODULE_DEVICE_TABLE(i2c, bcm590xx_i2c_id);
117static struct i2c_driver bcm590xx_i2c_driver = { 117static struct i2c_driver bcm590xx_i2c_driver = {
118 .driver = { 118 .driver = {
119 .name = "bcm590xx", 119 .name = "bcm590xx",
120 .owner = THIS_MODULE,
121 .of_match_table = of_match_ptr(bcm590xx_of_match), 120 .of_match_table = of_match_ptr(bcm590xx_of_match),
122 }, 121 },
123 .probe = bcm590xx_i2c_probe, 122 .probe = bcm590xx_i2c_probe,
diff --git a/drivers/mfd/cros_ec_i2c.c b/drivers/mfd/cros_ec_i2c.c
index b9a0963ca5c3..d06e4b46db80 100644
--- a/drivers/mfd/cros_ec_i2c.c
+++ b/drivers/mfd/cros_ec_i2c.c
@@ -353,7 +353,6 @@ MODULE_DEVICE_TABLE(i2c, cros_ec_i2c_id);
353static struct i2c_driver cros_ec_driver = { 353static struct i2c_driver cros_ec_driver = {
354 .driver = { 354 .driver = {
355 .name = "cros-ec-i2c", 355 .name = "cros-ec-i2c",
356 .owner = THIS_MODULE,
357 .pm = &cros_ec_i2c_pm_ops, 356 .pm = &cros_ec_i2c_pm_ops,
358 }, 357 },
359 .probe = cros_ec_i2c_probe, 358 .probe = cros_ec_i2c_probe,
diff --git a/drivers/mfd/cros_ec_spi.c b/drivers/mfd/cros_ec_spi.c
index 16f228dc243f..30a296b4e748 100644
--- a/drivers/mfd/cros_ec_spi.c
+++ b/drivers/mfd/cros_ec_spi.c
@@ -701,6 +701,12 @@ static int cros_ec_spi_resume(struct device *dev)
701static SIMPLE_DEV_PM_OPS(cros_ec_spi_pm_ops, cros_ec_spi_suspend, 701static SIMPLE_DEV_PM_OPS(cros_ec_spi_pm_ops, cros_ec_spi_suspend,
702 cros_ec_spi_resume); 702 cros_ec_spi_resume);
703 703
704static const struct of_device_id cros_ec_spi_of_match[] = {
705 { .compatible = "google,cros-ec-spi", },
706 { /* sentinel */ },
707};
708MODULE_DEVICE_TABLE(of, cros_ec_spi_of_match);
709
704static const struct spi_device_id cros_ec_spi_id[] = { 710static const struct spi_device_id cros_ec_spi_id[] = {
705 { "cros-ec-spi", 0 }, 711 { "cros-ec-spi", 0 },
706 { } 712 { }
@@ -710,6 +716,7 @@ MODULE_DEVICE_TABLE(spi, cros_ec_spi_id);
710static struct spi_driver cros_ec_driver_spi = { 716static struct spi_driver cros_ec_driver_spi = {
711 .driver = { 717 .driver = {
712 .name = "cros-ec-spi", 718 .name = "cros-ec-spi",
719 .of_match_table = of_match_ptr(cros_ec_spi_of_match),
713 .owner = THIS_MODULE, 720 .owner = THIS_MODULE,
714 .pm = &cros_ec_spi_pm_ops, 721 .pm = &cros_ec_spi_pm_ops,
715 }, 722 },
diff --git a/drivers/mfd/da903x.c b/drivers/mfd/da903x.c
index e0a2e0ee603b..ef7fe2ae2fa4 100644
--- a/drivers/mfd/da903x.c
+++ b/drivers/mfd/da903x.c
@@ -550,7 +550,6 @@ static int da903x_remove(struct i2c_client *client)
550static struct i2c_driver da903x_driver = { 550static struct i2c_driver da903x_driver = {
551 .driver = { 551 .driver = {
552 .name = "da903x", 552 .name = "da903x",
553 .owner = THIS_MODULE,
554 }, 553 },
555 .probe = da903x_probe, 554 .probe = da903x_probe,
556 .remove = da903x_remove, 555 .remove = da903x_remove,
diff --git a/drivers/mfd/da9052-i2c.c b/drivers/mfd/da9052-i2c.c
index ec39287a245b..02887001e800 100644
--- a/drivers/mfd/da9052-i2c.c
+++ b/drivers/mfd/da9052-i2c.c
@@ -195,7 +195,6 @@ static struct i2c_driver da9052_i2c_driver = {
195 .id_table = da9052_i2c_id, 195 .id_table = da9052_i2c_id,
196 .driver = { 196 .driver = {
197 .name = "da9052", 197 .name = "da9052",
198 .owner = THIS_MODULE,
199#ifdef CONFIG_OF 198#ifdef CONFIG_OF
200 .of_match_table = dialog_dt_ids, 199 .of_match_table = dialog_dt_ids,
201#endif 200#endif
diff --git a/drivers/mfd/da9055-i2c.c b/drivers/mfd/da9055-i2c.c
index d4d4c165eb95..b53e100f577c 100644
--- a/drivers/mfd/da9055-i2c.c
+++ b/drivers/mfd/da9055-i2c.c
@@ -79,7 +79,6 @@ static struct i2c_driver da9055_i2c_driver = {
79 .id_table = da9055_i2c_id, 79 .id_table = da9055_i2c_id,
80 .driver = { 80 .driver = {
81 .name = "da9055-pmic", 81 .name = "da9055-pmic",
82 .owner = THIS_MODULE,
83 .of_match_table = of_match_ptr(da9055_of_match), 82 .of_match_table = of_match_ptr(da9055_of_match),
84 }, 83 },
85}; 84};
diff --git a/drivers/mfd/da9062-core.c b/drivers/mfd/da9062-core.c
new file mode 100644
index 000000000000..f80d9471f2e7
--- /dev/null
+++ b/drivers/mfd/da9062-core.c
@@ -0,0 +1,533 @@
1/*
2 * Core, IRQ and I2C device driver for DA9062 PMIC
3 * Copyright (C) 2015 Dialog Semiconductor Ltd.
4 *
5 * This program is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU General Public License
7 * as published by the Free Software Foundation; either version 2
8 * of the License, or (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 */
15
16#include <linux/kernel.h>
17#include <linux/module.h>
18#include <linux/init.h>
19#include <linux/device.h>
20#include <linux/interrupt.h>
21#include <linux/regmap.h>
22#include <linux/irq.h>
23#include <linux/mfd/core.h>
24#include <linux/i2c.h>
25#include <linux/mfd/da9062/core.h>
26#include <linux/mfd/da9062/registers.h>
27#include <linux/regulator/of_regulator.h>
28
29#define DA9062_REG_EVENT_A_OFFSET 0
30#define DA9062_REG_EVENT_B_OFFSET 1
31#define DA9062_REG_EVENT_C_OFFSET 2
32
33static struct regmap_irq da9062_irqs[] = {
34 /* EVENT A */
35 [DA9062_IRQ_ONKEY] = {
36 .reg_offset = DA9062_REG_EVENT_A_OFFSET,
37 .mask = DA9062AA_M_NONKEY_MASK,
38 },
39 [DA9062_IRQ_ALARM] = {
40 .reg_offset = DA9062_REG_EVENT_A_OFFSET,
41 .mask = DA9062AA_M_ALARM_MASK,
42 },
43 [DA9062_IRQ_TICK] = {
44 .reg_offset = DA9062_REG_EVENT_A_OFFSET,
45 .mask = DA9062AA_M_TICK_MASK,
46 },
47 [DA9062_IRQ_WDG_WARN] = {
48 .reg_offset = DA9062_REG_EVENT_A_OFFSET,
49 .mask = DA9062AA_M_WDG_WARN_MASK,
50 },
51 [DA9062_IRQ_SEQ_RDY] = {
52 .reg_offset = DA9062_REG_EVENT_A_OFFSET,
53 .mask = DA9062AA_M_SEQ_RDY_MASK,
54 },
55 /* EVENT B */
56 [DA9062_IRQ_TEMP] = {
57 .reg_offset = DA9062_REG_EVENT_B_OFFSET,
58 .mask = DA9062AA_M_TEMP_MASK,
59 },
60 [DA9062_IRQ_LDO_LIM] = {
61 .reg_offset = DA9062_REG_EVENT_B_OFFSET,
62 .mask = DA9062AA_M_LDO_LIM_MASK,
63 },
64 [DA9062_IRQ_DVC_RDY] = {
65 .reg_offset = DA9062_REG_EVENT_B_OFFSET,
66 .mask = DA9062AA_M_DVC_RDY_MASK,
67 },
68 [DA9062_IRQ_VDD_WARN] = {
69 .reg_offset = DA9062_REG_EVENT_B_OFFSET,
70 .mask = DA9062AA_M_VDD_WARN_MASK,
71 },
72 /* EVENT C */
73 [DA9062_IRQ_GPI0] = {
74 .reg_offset = DA9062_REG_EVENT_C_OFFSET,
75 .mask = DA9062AA_M_GPI0_MASK,
76 },
77 [DA9062_IRQ_GPI1] = {
78 .reg_offset = DA9062_REG_EVENT_C_OFFSET,
79 .mask = DA9062AA_M_GPI1_MASK,
80 },
81 [DA9062_IRQ_GPI2] = {
82 .reg_offset = DA9062_REG_EVENT_C_OFFSET,
83 .mask = DA9062AA_M_GPI2_MASK,
84 },
85 [DA9062_IRQ_GPI3] = {
86 .reg_offset = DA9062_REG_EVENT_C_OFFSET,
87 .mask = DA9062AA_M_GPI3_MASK,
88 },
89 [DA9062_IRQ_GPI4] = {
90 .reg_offset = DA9062_REG_EVENT_C_OFFSET,
91 .mask = DA9062AA_M_GPI4_MASK,
92 },
93};
94
95static struct regmap_irq_chip da9062_irq_chip = {
96 .name = "da9062-irq",
97 .irqs = da9062_irqs,
98 .num_irqs = DA9062_NUM_IRQ,
99 .num_regs = 3,
100 .status_base = DA9062AA_EVENT_A,
101 .mask_base = DA9062AA_IRQ_MASK_A,
102 .ack_base = DA9062AA_EVENT_A,
103};
104
105static struct resource da9062_core_resources[] = {
106 DEFINE_RES_NAMED(DA9062_IRQ_VDD_WARN, 1, "VDD_WARN", IORESOURCE_IRQ),
107};
108
109static struct resource da9062_regulators_resources[] = {
110 DEFINE_RES_NAMED(DA9062_IRQ_LDO_LIM, 1, "LDO_LIM", IORESOURCE_IRQ),
111};
112
113static struct resource da9062_thermal_resources[] = {
114 DEFINE_RES_NAMED(DA9062_IRQ_TEMP, 1, "THERMAL", IORESOURCE_IRQ),
115};
116
117static struct resource da9062_wdt_resources[] = {
118 DEFINE_RES_NAMED(DA9062_IRQ_WDG_WARN, 1, "WD_WARN", IORESOURCE_IRQ),
119};
120
121static struct resource da9062_rtc_resources[] = {
122 DEFINE_RES_NAMED(DA9062_IRQ_ALARM, 1, "ALARM", IORESOURCE_IRQ),
123 DEFINE_RES_NAMED(DA9062_IRQ_TICK, 1, "TICK", IORESOURCE_IRQ),
124};
125
126static struct resource da9062_onkey_resources[] = {
127 DEFINE_RES_NAMED(DA9062_IRQ_ONKEY, 1, "ONKEY", IORESOURCE_IRQ),
128};
129
130static const struct mfd_cell da9062_devs[] = {
131 {
132 .name = "da9062-core",
133 .num_resources = ARRAY_SIZE(da9062_core_resources),
134 .resources = da9062_core_resources,
135 },
136 {
137 .name = "da9062-regulators",
138 .num_resources = ARRAY_SIZE(da9062_regulators_resources),
139 .resources = da9062_regulators_resources,
140 },
141 {
142 .name = "da9062-watchdog",
143 .num_resources = ARRAY_SIZE(da9062_wdt_resources),
144 .resources = da9062_wdt_resources,
145 .of_compatible = "dlg,da9062-wdt",
146 },
147 {
148 .name = "da9062-thermal",
149 .num_resources = ARRAY_SIZE(da9062_thermal_resources),
150 .resources = da9062_thermal_resources,
151 .of_compatible = "dlg,da9062-thermal",
152 },
153 {
154 .name = "da9062-rtc",
155 .num_resources = ARRAY_SIZE(da9062_rtc_resources),
156 .resources = da9062_rtc_resources,
157 .of_compatible = "dlg,da9062-rtc",
158 },
159 {
160 .name = "da9062-onkey",
161 .num_resources = ARRAY_SIZE(da9062_onkey_resources),
162 .resources = da9062_onkey_resources,
163 .of_compatible = "dlg,da9062-onkey",
164 },
165};
166
167static int da9062_clear_fault_log(struct da9062 *chip)
168{
169 int ret;
170 int fault_log;
171
172 ret = regmap_read(chip->regmap, DA9062AA_FAULT_LOG, &fault_log);
173 if (ret < 0)
174 return ret;
175
176 if (fault_log) {
177 if (fault_log & DA9062AA_TWD_ERROR_MASK)
178 dev_dbg(chip->dev, "Fault log entry detected: TWD_ERROR\n");
179 if (fault_log & DA9062AA_POR_MASK)
180 dev_dbg(chip->dev, "Fault log entry detected: POR\n");
181 if (fault_log & DA9062AA_VDD_FAULT_MASK)
182 dev_dbg(chip->dev, "Fault log entry detected: VDD_FAULT\n");
183 if (fault_log & DA9062AA_VDD_START_MASK)
184 dev_dbg(chip->dev, "Fault log entry detected: VDD_START\n");
185 if (fault_log & DA9062AA_TEMP_CRIT_MASK)
186 dev_dbg(chip->dev, "Fault log entry detected: TEMP_CRIT\n");
187 if (fault_log & DA9062AA_KEY_RESET_MASK)
188 dev_dbg(chip->dev, "Fault log entry detected: KEY_RESET\n");
189 if (fault_log & DA9062AA_NSHUTDOWN_MASK)
190 dev_dbg(chip->dev, "Fault log entry detected: NSHUTDOWN\n");
191 if (fault_log & DA9062AA_WAIT_SHUT_MASK)
192 dev_dbg(chip->dev, "Fault log entry detected: WAIT_SHUT\n");
193
194 ret = regmap_write(chip->regmap, DA9062AA_FAULT_LOG,
195 fault_log);
196 }
197
198 return ret;
199}
200
201int get_device_type(struct da9062 *chip)
202{
203 int device_id, variant_id, variant_mrc;
204 int ret;
205
206 ret = regmap_read(chip->regmap, DA9062AA_DEVICE_ID, &device_id);
207 if (ret < 0) {
208 dev_err(chip->dev, "Cannot read chip ID.\n");
209 return -EIO;
210 }
211 if (device_id != DA9062_PMIC_DEVICE_ID) {
212 dev_err(chip->dev, "Invalid device ID: 0x%02x\n", device_id);
213 return -ENODEV;
214 }
215
216 ret = regmap_read(chip->regmap, DA9062AA_VARIANT_ID, &variant_id);
217 if (ret < 0) {
218 dev_err(chip->dev, "Cannot read chip variant id.\n");
219 return -EIO;
220 }
221
222 dev_info(chip->dev,
223 "Device detected (device-ID: 0x%02X, var-ID: 0x%02X)\n",
224 device_id, variant_id);
225
226 variant_mrc = (variant_id & DA9062AA_MRC_MASK) >> DA9062AA_MRC_SHIFT;
227
228 if (variant_mrc < DA9062_PMIC_VARIANT_MRC_AA) {
229 dev_err(chip->dev,
230 "Cannot support variant MRC: 0x%02X\n", variant_mrc);
231 return -ENODEV;
232 }
233
234 return ret;
235}
236
237static const struct regmap_range da9062_aa_readable_ranges[] = {
238 {
239 .range_min = DA9062AA_PAGE_CON,
240 .range_max = DA9062AA_STATUS_B,
241 }, {
242 .range_min = DA9062AA_STATUS_D,
243 .range_max = DA9062AA_EVENT_C,
244 }, {
245 .range_min = DA9062AA_IRQ_MASK_A,
246 .range_max = DA9062AA_IRQ_MASK_C,
247 }, {
248 .range_min = DA9062AA_CONTROL_A,
249 .range_max = DA9062AA_GPIO_4,
250 }, {
251 .range_min = DA9062AA_GPIO_WKUP_MODE,
252 .range_max = DA9062AA_BUCK4_CONT,
253 }, {
254 .range_min = DA9062AA_BUCK3_CONT,
255 .range_max = DA9062AA_BUCK3_CONT,
256 }, {
257 .range_min = DA9062AA_LDO1_CONT,
258 .range_max = DA9062AA_LDO4_CONT,
259 }, {
260 .range_min = DA9062AA_DVC_1,
261 .range_max = DA9062AA_DVC_1,
262 }, {
263 .range_min = DA9062AA_COUNT_S,
264 .range_max = DA9062AA_SECOND_D,
265 }, {
266 .range_min = DA9062AA_SEQ,
267 .range_max = DA9062AA_ID_4_3,
268 }, {
269 .range_min = DA9062AA_ID_12_11,
270 .range_max = DA9062AA_ID_16_15,
271 }, {
272 .range_min = DA9062AA_ID_22_21,
273 .range_max = DA9062AA_ID_32_31,
274 }, {
275 .range_min = DA9062AA_SEQ_A,
276 .range_max = DA9062AA_BUCK3_CFG,
277 }, {
278 .range_min = DA9062AA_VBUCK2_A,
279 .range_max = DA9062AA_VBUCK4_A,
280 }, {
281 .range_min = DA9062AA_VBUCK3_A,
282 .range_max = DA9062AA_VBUCK3_A,
283 }, {
284 .range_min = DA9062AA_VLDO1_A,
285 .range_max = DA9062AA_VLDO4_A,
286 }, {
287 .range_min = DA9062AA_VBUCK2_B,
288 .range_max = DA9062AA_VBUCK4_B,
289 }, {
290 .range_min = DA9062AA_VBUCK3_B,
291 .range_max = DA9062AA_VBUCK3_B,
292 }, {
293 .range_min = DA9062AA_VLDO1_B,
294 .range_max = DA9062AA_VLDO4_B,
295 }, {
296 .range_min = DA9062AA_BBAT_CONT,
297 .range_max = DA9062AA_BBAT_CONT,
298 }, {
299 .range_min = DA9062AA_INTERFACE,
300 .range_max = DA9062AA_CONFIG_E,
301 }, {
302 .range_min = DA9062AA_CONFIG_G,
303 .range_max = DA9062AA_CONFIG_K,
304 }, {
305 .range_min = DA9062AA_CONFIG_M,
306 .range_max = DA9062AA_CONFIG_M,
307 }, {
308 .range_min = DA9062AA_TRIM_CLDR,
309 .range_max = DA9062AA_GP_ID_19,
310 }, {
311 .range_min = DA9062AA_DEVICE_ID,
312 .range_max = DA9062AA_CONFIG_ID,
313 },
314};
315
316static const struct regmap_range da9062_aa_writeable_ranges[] = {
317 {
318 .range_min = DA9062AA_PAGE_CON,
319 .range_max = DA9062AA_PAGE_CON,
320 }, {
321 .range_min = DA9062AA_FAULT_LOG,
322 .range_max = DA9062AA_EVENT_C,
323 }, {
324 .range_min = DA9062AA_IRQ_MASK_A,
325 .range_max = DA9062AA_IRQ_MASK_C,
326 }, {
327 .range_min = DA9062AA_CONTROL_A,
328 .range_max = DA9062AA_GPIO_4,
329 }, {
330 .range_min = DA9062AA_GPIO_WKUP_MODE,
331 .range_max = DA9062AA_BUCK4_CONT,
332 }, {
333 .range_min = DA9062AA_BUCK3_CONT,
334 .range_max = DA9062AA_BUCK3_CONT,
335 }, {
336 .range_min = DA9062AA_LDO1_CONT,
337 .range_max = DA9062AA_LDO4_CONT,
338 }, {
339 .range_min = DA9062AA_DVC_1,
340 .range_max = DA9062AA_DVC_1,
341 }, {
342 .range_min = DA9062AA_COUNT_S,
343 .range_max = DA9062AA_ALARM_Y,
344 }, {
345 .range_min = DA9062AA_SEQ,
346 .range_max = DA9062AA_ID_4_3,
347 }, {
348 .range_min = DA9062AA_ID_12_11,
349 .range_max = DA9062AA_ID_16_15,
350 }, {
351 .range_min = DA9062AA_ID_22_21,
352 .range_max = DA9062AA_ID_32_31,
353 }, {
354 .range_min = DA9062AA_SEQ_A,
355 .range_max = DA9062AA_BUCK3_CFG,
356 }, {
357 .range_min = DA9062AA_VBUCK2_A,
358 .range_max = DA9062AA_VBUCK4_A,
359 }, {
360 .range_min = DA9062AA_VBUCK3_A,
361 .range_max = DA9062AA_VBUCK3_A,
362 }, {
363 .range_min = DA9062AA_VLDO1_A,
364 .range_max = DA9062AA_VLDO4_A,
365 }, {
366 .range_min = DA9062AA_VBUCK2_B,
367 .range_max = DA9062AA_VBUCK4_B,
368 }, {
369 .range_min = DA9062AA_VBUCK3_B,
370 .range_max = DA9062AA_VBUCK3_B,
371 }, {
372 .range_min = DA9062AA_VLDO1_B,
373 .range_max = DA9062AA_VLDO4_B,
374 }, {
375 .range_min = DA9062AA_BBAT_CONT,
376 .range_max = DA9062AA_BBAT_CONT,
377 }, {
378 .range_min = DA9062AA_GP_ID_0,
379 .range_max = DA9062AA_GP_ID_19,
380 },
381};
382
383static const struct regmap_range da9062_aa_volatile_ranges[] = {
384 {
385 .range_min = DA9062AA_PAGE_CON,
386 .range_max = DA9062AA_STATUS_B,
387 }, {
388 .range_min = DA9062AA_STATUS_D,
389 .range_max = DA9062AA_EVENT_C,
390 }, {
391 .range_min = DA9062AA_CONTROL_F,
392 .range_max = DA9062AA_CONTROL_F,
393 }, {
394 .range_min = DA9062AA_COUNT_S,
395 .range_max = DA9062AA_SECOND_D,
396 },
397};
398
399static const struct regmap_access_table da9062_aa_readable_table = {
400 .yes_ranges = da9062_aa_readable_ranges,
401 .n_yes_ranges = ARRAY_SIZE(da9062_aa_readable_ranges),
402};
403
404static const struct regmap_access_table da9062_aa_writeable_table = {
405 .yes_ranges = da9062_aa_writeable_ranges,
406 .n_yes_ranges = ARRAY_SIZE(da9062_aa_writeable_ranges),
407};
408
409static const struct regmap_access_table da9062_aa_volatile_table = {
410 .yes_ranges = da9062_aa_volatile_ranges,
411 .n_yes_ranges = ARRAY_SIZE(da9062_aa_volatile_ranges),
412};
413
414static const struct regmap_range_cfg da9062_range_cfg[] = {
415 {
416 .range_min = DA9062AA_PAGE_CON,
417 .range_max = DA9062AA_CONFIG_ID,
418 .selector_reg = DA9062AA_PAGE_CON,
419 .selector_mask = 1 << DA9062_I2C_PAGE_SEL_SHIFT,
420 .selector_shift = DA9062_I2C_PAGE_SEL_SHIFT,
421 .window_start = 0,
422 .window_len = 256,
423 }
424};
425
426static struct regmap_config da9062_regmap_config = {
427 .reg_bits = 8,
428 .val_bits = 8,
429 .ranges = da9062_range_cfg,
430 .num_ranges = ARRAY_SIZE(da9062_range_cfg),
431 .max_register = DA9062AA_CONFIG_ID,
432 .cache_type = REGCACHE_RBTREE,
433 .rd_table = &da9062_aa_readable_table,
434 .wr_table = &da9062_aa_writeable_table,
435 .volatile_table = &da9062_aa_volatile_table,
436};
437
438static int da9062_i2c_probe(struct i2c_client *i2c,
439 const struct i2c_device_id *id)
440{
441 struct da9062 *chip;
442 unsigned int irq_base;
443 int ret;
444
445 chip = devm_kzalloc(&i2c->dev, sizeof(*chip), GFP_KERNEL);
446 if (!chip)
447 return -ENOMEM;
448
449 i2c_set_clientdata(i2c, chip);
450 chip->dev = &i2c->dev;
451
452 if (!i2c->irq) {
453 dev_err(chip->dev, "No IRQ configured\n");
454 return -EINVAL;
455 }
456
457 chip->regmap = devm_regmap_init_i2c(i2c, &da9062_regmap_config);
458 if (IS_ERR(chip->regmap)) {
459 ret = PTR_ERR(chip->regmap);
460 dev_err(chip->dev, "Failed to allocate register map: %d\n",
461 ret);
462 return ret;
463 }
464
465 ret = da9062_clear_fault_log(chip);
466 if (ret < 0)
467 dev_warn(chip->dev, "Cannot clear fault log\n");
468
469 ret = get_device_type(chip);
470 if (ret)
471 return ret;
472
473 ret = regmap_add_irq_chip(chip->regmap, i2c->irq,
474 IRQF_TRIGGER_LOW | IRQF_ONESHOT | IRQF_SHARED,
475 -1, &da9062_irq_chip,
476 &chip->regmap_irq);
477 if (ret) {
478 dev_err(chip->dev, "Failed to request IRQ %d: %d\n",
479 i2c->irq, ret);
480 return ret;
481 }
482
483 irq_base = regmap_irq_chip_get_base(chip->regmap_irq);
484
485 ret = mfd_add_devices(chip->dev, PLATFORM_DEVID_NONE, da9062_devs,
486 ARRAY_SIZE(da9062_devs), NULL, irq_base,
487 NULL);
488 if (ret) {
489 dev_err(chip->dev, "Cannot register child devices\n");
490 regmap_del_irq_chip(i2c->irq, chip->regmap_irq);
491 return ret;
492 }
493
494 return ret;
495}
496
497static int da9062_i2c_remove(struct i2c_client *i2c)
498{
499 struct da9062 *chip = i2c_get_clientdata(i2c);
500
501 mfd_remove_devices(chip->dev);
502 regmap_del_irq_chip(i2c->irq, chip->regmap_irq);
503
504 return 0;
505}
506
507static const struct i2c_device_id da9062_i2c_id[] = {
508 { "da9062", 0 },
509 { },
510};
511MODULE_DEVICE_TABLE(i2c, da9062_i2c_id);
512
513static const struct of_device_id da9062_dt_ids[] = {
514 { .compatible = "dlg,da9062", },
515 { }
516};
517MODULE_DEVICE_TABLE(of, da9062_dt_ids);
518
519static struct i2c_driver da9062_i2c_driver = {
520 .driver = {
521 .name = "da9062",
522 .of_match_table = of_match_ptr(da9062_dt_ids),
523 },
524 .probe = da9062_i2c_probe,
525 .remove = da9062_i2c_remove,
526 .id_table = da9062_i2c_id,
527};
528
529module_i2c_driver(da9062_i2c_driver);
530
531MODULE_DESCRIPTION("Core device driver for Dialog DA9062");
532MODULE_AUTHOR("Steve Twiss <stwiss.opensource@diasemi.com>");
533MODULE_LICENSE("GPL");
diff --git a/drivers/mfd/da9063-i2c.c b/drivers/mfd/da9063-i2c.c
index 6f3a7c0001f9..2d4e3e0f4e94 100644
--- a/drivers/mfd/da9063-i2c.c
+++ b/drivers/mfd/da9063-i2c.c
@@ -264,7 +264,6 @@ MODULE_DEVICE_TABLE(i2c, da9063_i2c_id);
264static struct i2c_driver da9063_i2c_driver = { 264static struct i2c_driver da9063_i2c_driver = {
265 .driver = { 265 .driver = {
266 .name = "da9063", 266 .name = "da9063",
267 .owner = THIS_MODULE,
268 .of_match_table = of_match_ptr(da9063_dt_ids), 267 .of_match_table = of_match_ptr(da9063_dt_ids),
269 }, 268 },
270 .probe = da9063_i2c_probe, 269 .probe = da9063_i2c_probe,
diff --git a/drivers/mfd/da9063-irq.c b/drivers/mfd/da9063-irq.c
index eaf1ec9208b2..26302634633c 100644
--- a/drivers/mfd/da9063-irq.c
+++ b/drivers/mfd/da9063-irq.c
@@ -77,6 +77,10 @@ static const struct regmap_irq da9063_irqs[] = {
77 .reg_offset = DA9063_REG_EVENT_B_OFFSET, 77 .reg_offset = DA9063_REG_EVENT_B_OFFSET,
78 .mask = DA9063_M_UVOV, 78 .mask = DA9063_M_UVOV,
79 }, 79 },
80 [DA9063_IRQ_DVC_RDY] = {
81 .reg_offset = DA9063_REG_EVENT_B_OFFSET,
82 .mask = DA9063_M_DVC_RDY,
83 },
80 [DA9063_IRQ_VDD_MON] = { 84 [DA9063_IRQ_VDD_MON] = {
81 .reg_offset = DA9063_REG_EVENT_B_OFFSET, 85 .reg_offset = DA9063_REG_EVENT_B_OFFSET,
82 .mask = DA9063_M_VDD_MON, 86 .mask = DA9063_M_VDD_MON,
diff --git a/drivers/mfd/db8500-prcmu.c b/drivers/mfd/db8500-prcmu.c
index 8b14740f9fca..e6e4bacb09ee 100644
--- a/drivers/mfd/db8500-prcmu.c
+++ b/drivers/mfd/db8500-prcmu.c
@@ -2654,7 +2654,6 @@ static int db8500_irq_map(struct irq_domain *d, unsigned int virq,
2654{ 2654{
2655 irq_set_chip_and_handler(virq, &prcmu_irq_chip, 2655 irq_set_chip_and_handler(virq, &prcmu_irq_chip,
2656 handle_simple_irq); 2656 handle_simple_irq);
2657 set_irq_flags(virq, IRQF_VALID);
2658 2657
2659 return 0; 2658 return 0;
2660} 2659}
diff --git a/drivers/mfd/ezx-pcap.c b/drivers/mfd/ezx-pcap.c
index 5991faddd3c6..a76eb6ef47a0 100644
--- a/drivers/mfd/ezx-pcap.c
+++ b/drivers/mfd/ezx-pcap.c
@@ -207,7 +207,7 @@ static void pcap_isr_work(struct work_struct *work)
207 207
208static void pcap_irq_handler(unsigned int irq, struct irq_desc *desc) 208static void pcap_irq_handler(unsigned int irq, struct irq_desc *desc)
209{ 209{
210 struct pcap_chip *pcap = irq_get_handler_data(irq); 210 struct pcap_chip *pcap = irq_desc_get_handler_data(desc);
211 211
212 desc->irq_data.chip->irq_ack(&desc->irq_data); 212 desc->irq_data.chip->irq_ack(&desc->irq_data);
213 queue_work(pcap->workqueue, &pcap->isr_work); 213 queue_work(pcap->workqueue, &pcap->isr_work);
@@ -463,11 +463,7 @@ static int ezx_pcap_probe(struct spi_device *spi)
463 for (i = pcap->irq_base; i < (pcap->irq_base + PCAP_NIRQS); i++) { 463 for (i = pcap->irq_base; i < (pcap->irq_base + PCAP_NIRQS); i++) {
464 irq_set_chip_and_handler(i, &pcap_irq_chip, handle_simple_irq); 464 irq_set_chip_and_handler(i, &pcap_irq_chip, handle_simple_irq);
465 irq_set_chip_data(i, pcap); 465 irq_set_chip_data(i, pcap);
466#ifdef CONFIG_ARM 466 irq_clear_status_flags(i, IRQ_NOREQUEST | IRQ_NOPROBE);
467 set_irq_flags(i, IRQF_VALID);
468#else
469 irq_set_noprobe(i);
470#endif
471 } 467 }
472 468
473 /* mask/ack all PCAP interrupts */ 469 /* mask/ack all PCAP interrupts */
@@ -476,8 +472,7 @@ static int ezx_pcap_probe(struct spi_device *spi)
476 pcap->msr = PCAP_MASK_ALL_INTERRUPT; 472 pcap->msr = PCAP_MASK_ALL_INTERRUPT;
477 473
478 irq_set_irq_type(spi->irq, IRQ_TYPE_EDGE_RISING); 474 irq_set_irq_type(spi->irq, IRQ_TYPE_EDGE_RISING);
479 irq_set_handler_data(spi->irq, pcap); 475 irq_set_chained_handler_and_data(spi->irq, pcap_irq_handler, pcap);
480 irq_set_chained_handler(spi->irq, pcap_irq_handler);
481 irq_set_irq_wake(spi->irq, 1); 476 irq_set_irq_wake(spi->irq, 1);
482 477
483 /* ADC */ 478 /* ADC */
diff --git a/drivers/mfd/htc-egpio.c b/drivers/mfd/htc-egpio.c
index 49f39feca784..9131cdcdc64a 100644
--- a/drivers/mfd/htc-egpio.c
+++ b/drivers/mfd/htc-egpio.c
@@ -350,11 +350,11 @@ static int __init egpio_probe(struct platform_device *pdev)
350 irq_set_chip_and_handler(irq, &egpio_muxed_chip, 350 irq_set_chip_and_handler(irq, &egpio_muxed_chip,
351 handle_simple_irq); 351 handle_simple_irq);
352 irq_set_chip_data(irq, ei); 352 irq_set_chip_data(irq, ei);
353 set_irq_flags(irq, IRQF_VALID | IRQF_PROBE); 353 irq_clear_status_flags(irq, IRQ_NOREQUEST | IRQ_NOPROBE);
354 } 354 }
355 irq_set_irq_type(ei->chained_irq, IRQ_TYPE_EDGE_RISING); 355 irq_set_irq_type(ei->chained_irq, IRQ_TYPE_EDGE_RISING);
356 irq_set_handler_data(ei->chained_irq, ei); 356 irq_set_chained_handler_and_data(ei->chained_irq,
357 irq_set_chained_handler(ei->chained_irq, egpio_handler); 357 egpio_handler, ei);
358 ack_irqs(ei); 358 ack_irqs(ei);
359 359
360 device_init_wakeup(&pdev->dev, 1); 360 device_init_wakeup(&pdev->dev, 1);
@@ -376,7 +376,7 @@ static int __exit egpio_remove(struct platform_device *pdev)
376 irq_end = ei->irq_start + ei->nirqs; 376 irq_end = ei->irq_start + ei->nirqs;
377 for (irq = ei->irq_start; irq < irq_end; irq++) { 377 for (irq = ei->irq_start; irq < irq_end; irq++) {
378 irq_set_chip_and_handler(irq, NULL, NULL); 378 irq_set_chip_and_handler(irq, NULL, NULL);
379 set_irq_flags(irq, 0); 379 irq_set_status_flags(irq, IRQ_NOREQUEST | IRQ_NOPROBE);
380 } 380 }
381 irq_set_chained_handler(ei->chained_irq, NULL); 381 irq_set_chained_handler(ei->chained_irq, NULL);
382 device_init_wakeup(&pdev->dev, 0); 382 device_init_wakeup(&pdev->dev, 0);
diff --git a/drivers/mfd/htc-i2cpld.c b/drivers/mfd/htc-i2cpld.c
index b54baad30164..1bd5b042c8b3 100644
--- a/drivers/mfd/htc-i2cpld.c
+++ b/drivers/mfd/htc-i2cpld.c
@@ -330,11 +330,7 @@ static int htcpld_setup_chip_irq(
330 irq_set_chip_and_handler(irq, &htcpld_muxed_chip, 330 irq_set_chip_and_handler(irq, &htcpld_muxed_chip,
331 handle_simple_irq); 331 handle_simple_irq);
332 irq_set_chip_data(irq, chip); 332 irq_set_chip_data(irq, chip);
333#ifdef CONFIG_ARM 333 irq_clear_status_flags(irq, IRQ_NOREQUEST | IRQ_NOPROBE);
334 set_irq_flags(irq, IRQF_VALID | IRQF_PROBE);
335#else
336 irq_set_probe(irq);
337#endif
338 } 334 }
339 335
340 return ret; 336 return ret;
diff --git a/drivers/mfd/intel_soc_pmic_core.c b/drivers/mfd/intel_soc_pmic_core.c
index 7b50b6b208a5..ffbf6f6680b0 100644
--- a/drivers/mfd/intel_soc_pmic_core.c
+++ b/drivers/mfd/intel_soc_pmic_core.c
@@ -147,7 +147,7 @@ static const struct i2c_device_id intel_soc_pmic_i2c_id[] = {
147MODULE_DEVICE_TABLE(i2c, intel_soc_pmic_i2c_id); 147MODULE_DEVICE_TABLE(i2c, intel_soc_pmic_i2c_id);
148 148
149#if defined(CONFIG_ACPI) 149#if defined(CONFIG_ACPI)
150static struct acpi_device_id intel_soc_pmic_acpi_match[] = { 150static const struct acpi_device_id intel_soc_pmic_acpi_match[] = {
151 {"INT33FD", (kernel_ulong_t)&intel_soc_pmic_config_crc}, 151 {"INT33FD", (kernel_ulong_t)&intel_soc_pmic_config_crc},
152 { }, 152 { },
153}; 153};
@@ -157,7 +157,6 @@ MODULE_DEVICE_TABLE(acpi, intel_soc_pmic_acpi_match);
157static struct i2c_driver intel_soc_pmic_i2c_driver = { 157static struct i2c_driver intel_soc_pmic_i2c_driver = {
158 .driver = { 158 .driver = {
159 .name = "intel_soc_pmic_i2c", 159 .name = "intel_soc_pmic_i2c",
160 .owner = THIS_MODULE,
161 .pm = &intel_soc_pmic_pm_ops, 160 .pm = &intel_soc_pmic_pm_ops,
162 .acpi_match_table = ACPI_PTR(intel_soc_pmic_acpi_match), 161 .acpi_match_table = ACPI_PTR(intel_soc_pmic_acpi_match),
163 }, 162 },
diff --git a/drivers/mfd/ipaq-micro.c b/drivers/mfd/ipaq-micro.c
index 8df3266064e4..a41859c55bda 100644
--- a/drivers/mfd/ipaq-micro.c
+++ b/drivers/mfd/ipaq-micro.c
@@ -53,8 +53,8 @@ static void ipaq_micro_trigger_tx(struct ipaq_micro *micro)
53 tx->buf[bp++] = checksum; 53 tx->buf[bp++] = checksum;
54 tx->len = bp; 54 tx->len = bp;
55 tx->index = 0; 55 tx->index = 0;
56 print_hex_dump(KERN_DEBUG, "data: ", DUMP_PREFIX_OFFSET, 16, 1, 56 print_hex_dump_debug("data: ", DUMP_PREFIX_OFFSET, 16, 1,
57 tx->buf, tx->len, true); 57 tx->buf, tx->len, true);
58 58
59 /* Enable interrupt */ 59 /* Enable interrupt */
60 val = readl(micro->base + UTCR3); 60 val = readl(micro->base + UTCR3);
@@ -242,7 +242,7 @@ static u16 ipaq_micro_to_u16(u8 *data)
242 return data[1] << 8 | data[0]; 242 return data[1] << 8 | data[0];
243} 243}
244 244
245static void ipaq_micro_eeprom_dump(struct ipaq_micro *micro) 245static void __init ipaq_micro_eeprom_dump(struct ipaq_micro *micro)
246{ 246{
247 u8 dump[256]; 247 u8 dump[256];
248 char *str; 248 char *str;
@@ -250,7 +250,7 @@ static void ipaq_micro_eeprom_dump(struct ipaq_micro *micro)
250 ipaq_micro_eeprom_read(micro, 0, 128, dump); 250 ipaq_micro_eeprom_read(micro, 0, 128, dump);
251 str = ipaq_micro_str(dump, 10); 251 str = ipaq_micro_str(dump, 10);
252 if (str) { 252 if (str) {
253 dev_info(micro->dev, "HM version %s\n", str); 253 dev_info(micro->dev, "HW version %s\n", str);
254 kfree(str); 254 kfree(str);
255 } 255 }
256 str = ipaq_micro_str(dump+10, 40); 256 str = ipaq_micro_str(dump+10, 40);
@@ -281,8 +281,8 @@ static void ipaq_micro_eeprom_dump(struct ipaq_micro *micro)
281 dev_info(micro->dev, "RAM size: %u KiB\n", ipaq_micro_to_u16(dump+92)); 281 dev_info(micro->dev, "RAM size: %u KiB\n", ipaq_micro_to_u16(dump+92));
282 dev_info(micro->dev, "screen: %u x %u\n", 282 dev_info(micro->dev, "screen: %u x %u\n",
283 ipaq_micro_to_u16(dump+94), ipaq_micro_to_u16(dump+96)); 283 ipaq_micro_to_u16(dump+94), ipaq_micro_to_u16(dump+96));
284 print_hex_dump(KERN_DEBUG, "eeprom: ", DUMP_PREFIX_OFFSET, 16, 1, 284 print_hex_dump_debug("eeprom: ", DUMP_PREFIX_OFFSET, 16, 1,
285 dump, 256, true); 285 dump, 256, true);
286 286
287} 287}
288 288
@@ -386,7 +386,7 @@ static int micro_resume(struct device *dev)
386 return 0; 386 return 0;
387} 387}
388 388
389static int micro_probe(struct platform_device *pdev) 389static int __init micro_probe(struct platform_device *pdev)
390{ 390{
391 struct ipaq_micro *micro; 391 struct ipaq_micro *micro;
392 struct resource *res; 392 struct resource *res;
@@ -448,21 +448,6 @@ static int micro_probe(struct platform_device *pdev)
448 return 0; 448 return 0;
449} 449}
450 450
451static int micro_remove(struct platform_device *pdev)
452{
453 struct ipaq_micro *micro = platform_get_drvdata(pdev);
454 u32 val;
455
456 mfd_remove_devices(&pdev->dev);
457
458 val = readl(micro->base + UTCR3);
459 val &= ~(UTCR3_RXE | UTCR3_RIE); /* disable receive interrupt */
460 val &= ~(UTCR3_TXE | UTCR3_TIE); /* disable transmit interrupt */
461 writel(val, micro->base + UTCR3);
462
463 return 0;
464}
465
466static const struct dev_pm_ops micro_dev_pm_ops = { 451static const struct dev_pm_ops micro_dev_pm_ops = {
467 SET_SYSTEM_SLEEP_PM_OPS(NULL, micro_resume) 452 SET_SYSTEM_SLEEP_PM_OPS(NULL, micro_resume)
468}; 453};
@@ -471,12 +456,7 @@ static struct platform_driver micro_device_driver = {
471 .driver = { 456 .driver = {
472 .name = "ipaq-h3xxx-micro", 457 .name = "ipaq-h3xxx-micro",
473 .pm = &micro_dev_pm_ops, 458 .pm = &micro_dev_pm_ops,
459 .suppress_bind_attrs = true,
474 }, 460 },
475 .probe = micro_probe,
476 .remove = micro_remove,
477 /* .shutdown = micro_suspend, // FIXME */
478}; 461};
479module_platform_driver(micro_device_driver); 462builtin_platform_driver_probe(micro_device_driver, micro_probe);
480
481MODULE_LICENSE("GPL");
482MODULE_DESCRIPTION("driver for iPAQ Atmel micro core and backlight");
diff --git a/drivers/mfd/jz4740-adc.c b/drivers/mfd/jz4740-adc.c
index b31c54e4ecb2..5bb49f08955d 100644
--- a/drivers/mfd/jz4740-adc.c
+++ b/drivers/mfd/jz4740-adc.c
@@ -273,12 +273,12 @@ static int jz4740_adc_probe(struct platform_device *pdev)
273 ct->chip.irq_unmask = irq_gc_mask_clr_bit; 273 ct->chip.irq_unmask = irq_gc_mask_clr_bit;
274 ct->chip.irq_ack = irq_gc_ack_set_bit; 274 ct->chip.irq_ack = irq_gc_ack_set_bit;
275 275
276 irq_setup_generic_chip(gc, IRQ_MSK(5), 0, 0, IRQ_NOPROBE | IRQ_LEVEL); 276 irq_setup_generic_chip(gc, IRQ_MSK(5), IRQ_GC_INIT_MASK_CACHE, 0,
277 IRQ_NOPROBE | IRQ_LEVEL);
277 278
278 adc->gc = gc; 279 adc->gc = gc;
279 280
280 irq_set_handler_data(adc->irq, gc); 281 irq_set_chained_handler_and_data(adc->irq, jz4740_adc_irq_demux, gc);
281 irq_set_chained_handler(adc->irq, jz4740_adc_irq_demux);
282 282
283 writeb(0x00, adc->base + JZ_REG_ADC_ENABLE); 283 writeb(0x00, adc->base + JZ_REG_ADC_ENABLE);
284 writeb(0xff, adc->base + JZ_REG_ADC_CTRL); 284 writeb(0xff, adc->base + JZ_REG_ADC_CTRL);
@@ -308,8 +308,7 @@ static int jz4740_adc_remove(struct platform_device *pdev)
308 308
309 irq_remove_generic_chip(adc->gc, IRQ_MSK(5), IRQ_NOPROBE | IRQ_LEVEL, 0); 309 irq_remove_generic_chip(adc->gc, IRQ_MSK(5), IRQ_NOPROBE | IRQ_LEVEL, 0);
310 kfree(adc->gc); 310 kfree(adc->gc);
311 irq_set_handler_data(adc->irq, NULL); 311 irq_set_chained_handler_and_data(adc->irq, NULL, NULL);
312 irq_set_chained_handler(adc->irq, NULL);
313 312
314 iounmap(adc->base); 313 iounmap(adc->base);
315 release_mem_region(adc->mem->start, resource_size(adc->mem)); 314 release_mem_region(adc->mem->start, resource_size(adc->mem));
diff --git a/drivers/mfd/kempld-core.c b/drivers/mfd/kempld-core.c
index 8057849d51ac..463f4eae20c1 100644
--- a/drivers/mfd/kempld-core.c
+++ b/drivers/mfd/kempld-core.c
@@ -501,6 +501,14 @@ static struct platform_driver kempld_driver = {
501 501
502static struct dmi_system_id kempld_dmi_table[] __initdata = { 502static struct dmi_system_id kempld_dmi_table[] __initdata = {
503 { 503 {
504 .ident = "BBL6",
505 .matches = {
506 DMI_MATCH(DMI_BOARD_VENDOR, "Kontron"),
507 DMI_MATCH(DMI_BOARD_NAME, "COMe-bBL6"),
508 },
509 .driver_data = (void *)&kempld_platform_data_generic,
510 .callback = kempld_create_platform_device,
511 }, {
504 .ident = "BHL6", 512 .ident = "BHL6",
505 .matches = { 513 .matches = {
506 DMI_MATCH(DMI_BOARD_VENDOR, "Kontron"), 514 DMI_MATCH(DMI_BOARD_VENDOR, "Kontron"),
@@ -517,6 +525,14 @@ static struct dmi_system_id kempld_dmi_table[] __initdata = {
517 .driver_data = (void *)&kempld_platform_data_generic, 525 .driver_data = (void *)&kempld_platform_data_generic,
518 .callback = kempld_create_platform_device, 526 .callback = kempld_create_platform_device,
519 }, { 527 }, {
528 .ident = "CBW6",
529 .matches = {
530 DMI_MATCH(DMI_BOARD_VENDOR, "Kontron"),
531 DMI_MATCH(DMI_BOARD_NAME, "COMe-cBW6"),
532 },
533 .driver_data = (void *)&kempld_platform_data_generic,
534 .callback = kempld_create_platform_device,
535 }, {
520 .ident = "CCR2", 536 .ident = "CCR2",
521 .matches = { 537 .matches = {
522 DMI_MATCH(DMI_BOARD_VENDOR, "Kontron"), 538 DMI_MATCH(DMI_BOARD_VENDOR, "Kontron"),
diff --git a/drivers/mfd/lm3533-core.c b/drivers/mfd/lm3533-core.c
index d42fbb667d8c..643f3750e830 100644
--- a/drivers/mfd/lm3533-core.c
+++ b/drivers/mfd/lm3533-core.c
@@ -640,7 +640,6 @@ MODULE_DEVICE_TABLE(i2c, lm3533_i2c_ids);
640static struct i2c_driver lm3533_i2c_driver = { 640static struct i2c_driver lm3533_i2c_driver = {
641 .driver = { 641 .driver = {
642 .name = "lm3533", 642 .name = "lm3533",
643 .owner = THIS_MODULE,
644 }, 643 },
645 .id_table = lm3533_i2c_ids, 644 .id_table = lm3533_i2c_ids,
646 .probe = lm3533_i2c_probe, 645 .probe = lm3533_i2c_probe,
diff --git a/drivers/mfd/lp3943.c b/drivers/mfd/lp3943.c
index 335b930112b2..eecbb13de1bd 100644
--- a/drivers/mfd/lp3943.c
+++ b/drivers/mfd/lp3943.c
@@ -154,7 +154,6 @@ static struct i2c_driver lp3943_driver = {
154 .remove = lp3943_remove, 154 .remove = lp3943_remove,
155 .driver = { 155 .driver = {
156 .name = "lp3943", 156 .name = "lp3943",
157 .owner = THIS_MODULE,
158 .of_match_table = of_match_ptr(lp3943_of_match), 157 .of_match_table = of_match_ptr(lp3943_of_match),
159 }, 158 },
160 .id_table = lp3943_ids, 159 .id_table = lp3943_ids,
diff --git a/drivers/mfd/lp8788-irq.c b/drivers/mfd/lp8788-irq.c
index a87f2b548f71..c7a9825aa4ce 100644
--- a/drivers/mfd/lp8788-irq.c
+++ b/drivers/mfd/lp8788-irq.c
@@ -141,12 +141,7 @@ static int lp8788_irq_map(struct irq_domain *d, unsigned int virq,
141 irq_set_chip_data(virq, irqd); 141 irq_set_chip_data(virq, irqd);
142 irq_set_chip_and_handler(virq, chip, handle_edge_irq); 142 irq_set_chip_and_handler(virq, chip, handle_edge_irq);
143 irq_set_nested_thread(virq, 1); 143 irq_set_nested_thread(virq, 1);
144
145#ifdef CONFIG_ARM
146 set_irq_flags(virq, IRQF_VALID);
147#else
148 irq_set_noprobe(virq); 144 irq_set_noprobe(virq);
149#endif
150 145
151 return 0; 146 return 0;
152} 147}
diff --git a/drivers/mfd/lp8788.c b/drivers/mfd/lp8788.c
index a30bc15fe5ba..acf616559512 100644
--- a/drivers/mfd/lp8788.c
+++ b/drivers/mfd/lp8788.c
@@ -221,7 +221,6 @@ MODULE_DEVICE_TABLE(i2c, lp8788_ids);
221static struct i2c_driver lp8788_driver = { 221static struct i2c_driver lp8788_driver = {
222 .driver = { 222 .driver = {
223 .name = "lp8788", 223 .name = "lp8788",
224 .owner = THIS_MODULE,
225 }, 224 },
226 .probe = lp8788_probe, 225 .probe = lp8788_probe,
227 .remove = lp8788_remove, 226 .remove = lp8788_remove,
diff --git a/drivers/mfd/lpc_ich.c b/drivers/mfd/lpc_ich.c
index 8de34398abc0..c5a9a08b5dfb 100644
--- a/drivers/mfd/lpc_ich.c
+++ b/drivers/mfd/lpc_ich.c
@@ -66,6 +66,7 @@
66#include <linux/pci.h> 66#include <linux/pci.h>
67#include <linux/mfd/core.h> 67#include <linux/mfd/core.h>
68#include <linux/mfd/lpc_ich.h> 68#include <linux/mfd/lpc_ich.h>
69#include <linux/platform_data/itco_wdt.h>
69 70
70#define ACPIBASE 0x40 71#define ACPIBASE 0x40
71#define ACPIBASE_GPE_OFF 0x28 72#define ACPIBASE_GPE_OFF 0x28
@@ -835,9 +836,31 @@ static void lpc_ich_enable_pmc_space(struct pci_dev *dev)
835 priv->actrl_pbase_save = reg_save; 836 priv->actrl_pbase_save = reg_save;
836} 837}
837 838
838static void lpc_ich_finalize_cell(struct pci_dev *dev, struct mfd_cell *cell) 839static int lpc_ich_finalize_wdt_cell(struct pci_dev *dev)
839{ 840{
841 struct itco_wdt_platform_data *pdata;
840 struct lpc_ich_priv *priv = pci_get_drvdata(dev); 842 struct lpc_ich_priv *priv = pci_get_drvdata(dev);
843 struct lpc_ich_info *info;
844 struct mfd_cell *cell = &lpc_ich_cells[LPC_WDT];
845
846 pdata = devm_kzalloc(&dev->dev, sizeof(*pdata), GFP_KERNEL);
847 if (!pdata)
848 return -ENOMEM;
849
850 info = &lpc_chipset_info[priv->chipset];
851
852 pdata->version = info->iTCO_version;
853 strlcpy(pdata->name, info->name, sizeof(pdata->name));
854
855 cell->platform_data = pdata;
856 cell->pdata_size = sizeof(*pdata);
857 return 0;
858}
859
860static void lpc_ich_finalize_gpio_cell(struct pci_dev *dev)
861{
862 struct lpc_ich_priv *priv = pci_get_drvdata(dev);
863 struct mfd_cell *cell = &lpc_ich_cells[LPC_GPIO];
841 864
842 cell->platform_data = &lpc_chipset_info[priv->chipset]; 865 cell->platform_data = &lpc_chipset_info[priv->chipset];
843 cell->pdata_size = sizeof(struct lpc_ich_info); 866 cell->pdata_size = sizeof(struct lpc_ich_info);
@@ -933,7 +956,7 @@ gpe0_done:
933 lpc_chipset_info[priv->chipset].use_gpio = ret; 956 lpc_chipset_info[priv->chipset].use_gpio = ret;
934 lpc_ich_enable_gpio_space(dev); 957 lpc_ich_enable_gpio_space(dev);
935 958
936 lpc_ich_finalize_cell(dev, &lpc_ich_cells[LPC_GPIO]); 959 lpc_ich_finalize_gpio_cell(dev);
937 ret = mfd_add_devices(&dev->dev, PLATFORM_DEVID_AUTO, 960 ret = mfd_add_devices(&dev->dev, PLATFORM_DEVID_AUTO,
938 &lpc_ich_cells[LPC_GPIO], 1, NULL, 0, NULL); 961 &lpc_ich_cells[LPC_GPIO], 1, NULL, 0, NULL);
939 962
@@ -1007,7 +1030,10 @@ static int lpc_ich_init_wdt(struct pci_dev *dev)
1007 res->end = base_addr + ACPIBASE_PMC_END; 1030 res->end = base_addr + ACPIBASE_PMC_END;
1008 } 1031 }
1009 1032
1010 lpc_ich_finalize_cell(dev, &lpc_ich_cells[LPC_WDT]); 1033 ret = lpc_ich_finalize_wdt_cell(dev);
1034 if (ret)
1035 goto wdt_done;
1036
1011 ret = mfd_add_devices(&dev->dev, PLATFORM_DEVID_AUTO, 1037 ret = mfd_add_devices(&dev->dev, PLATFORM_DEVID_AUTO,
1012 &lpc_ich_cells[LPC_WDT], 1, NULL, 0, NULL); 1038 &lpc_ich_cells[LPC_WDT], 1, NULL, 0, NULL);
1013 1039
diff --git a/drivers/mfd/max14577.c b/drivers/mfd/max14577.c
index 3bf8def82f1e..56e216dedc91 100644
--- a/drivers/mfd/max14577.c
+++ b/drivers/mfd/max14577.c
@@ -532,7 +532,6 @@ static SIMPLE_DEV_PM_OPS(max14577_pm, max14577_suspend, max14577_resume);
532static struct i2c_driver max14577_i2c_driver = { 532static struct i2c_driver max14577_i2c_driver = {
533 .driver = { 533 .driver = {
534 .name = "max14577", 534 .name = "max14577",
535 .owner = THIS_MODULE,
536 .pm = &max14577_pm, 535 .pm = &max14577_pm,
537 .of_match_table = max14577_dt_match, 536 .of_match_table = max14577_dt_match,
538 }, 537 },
diff --git a/drivers/mfd/max77686.c b/drivers/mfd/max77686.c
index 760d08d7923d..d19be64cd32b 100644
--- a/drivers/mfd/max77686.c
+++ b/drivers/mfd/max77686.c
@@ -391,7 +391,6 @@ static SIMPLE_DEV_PM_OPS(max77686_pm, max77686_suspend, max77686_resume);
391static struct i2c_driver max77686_i2c_driver = { 391static struct i2c_driver max77686_i2c_driver = {
392 .driver = { 392 .driver = {
393 .name = "max77686", 393 .name = "max77686",
394 .owner = THIS_MODULE,
395 .pm = &max77686_pm, 394 .pm = &max77686_pm,
396 .of_match_table = of_match_ptr(max77686_pmic_dt_match), 395 .of_match_table = of_match_ptr(max77686_pmic_dt_match),
397 }, 396 },
diff --git a/drivers/mfd/max77693.c b/drivers/mfd/max77693.c
index 67bc53fdc389..007f729e150b 100644
--- a/drivers/mfd/max77693.c
+++ b/drivers/mfd/max77693.c
@@ -373,7 +373,6 @@ static const struct of_device_id max77693_dt_match[] = {
373static struct i2c_driver max77693_i2c_driver = { 373static struct i2c_driver max77693_i2c_driver = {
374 .driver = { 374 .driver = {
375 .name = "max77693", 375 .name = "max77693",
376 .owner = THIS_MODULE,
377 .pm = &max77693_pm, 376 .pm = &max77693_pm,
378 .of_match_table = of_match_ptr(max77693_dt_match), 377 .of_match_table = of_match_ptr(max77693_dt_match),
379 }, 378 },
diff --git a/drivers/mfd/max8907.c b/drivers/mfd/max8907.c
index 232749c8813d..2974c8b1273b 100644
--- a/drivers/mfd/max8907.c
+++ b/drivers/mfd/max8907.c
@@ -321,7 +321,6 @@ MODULE_DEVICE_TABLE(i2c, max8907_i2c_id);
321static struct i2c_driver max8907_i2c_driver = { 321static struct i2c_driver max8907_i2c_driver = {
322 .driver = { 322 .driver = {
323 .name = "max8907", 323 .name = "max8907",
324 .owner = THIS_MODULE,
325 .of_match_table = of_match_ptr(max8907_of_match), 324 .of_match_table = of_match_ptr(max8907_of_match),
326 }, 325 },
327 .probe = max8907_i2c_probe, 326 .probe = max8907_i2c_probe,
diff --git a/drivers/mfd/max8925-core.c b/drivers/mfd/max8925-core.c
index 8520bd68c1ff..fd8b15cd84fd 100644
--- a/drivers/mfd/max8925-core.c
+++ b/drivers/mfd/max8925-core.c
@@ -650,11 +650,8 @@ static int max8925_irq_domain_map(struct irq_domain *d, unsigned int virq,
650 irq_set_chip_data(virq, d->host_data); 650 irq_set_chip_data(virq, d->host_data);
651 irq_set_chip_and_handler(virq, &max8925_irq_chip, handle_edge_irq); 651 irq_set_chip_and_handler(virq, &max8925_irq_chip, handle_edge_irq);
652 irq_set_nested_thread(virq, 1); 652 irq_set_nested_thread(virq, 1);
653#ifdef CONFIG_ARM
654 set_irq_flags(virq, IRQF_VALID);
655#else
656 irq_set_noprobe(virq); 653 irq_set_noprobe(virq);
657#endif 654
658 return 0; 655 return 0;
659} 656}
660 657
diff --git a/drivers/mfd/max8925-i2c.c b/drivers/mfd/max8925-i2c.c
index c880c895c5a6..b0fe8103e401 100644
--- a/drivers/mfd/max8925-i2c.c
+++ b/drivers/mfd/max8925-i2c.c
@@ -245,7 +245,6 @@ MODULE_DEVICE_TABLE(of, max8925_dt_ids);
245static struct i2c_driver max8925_driver = { 245static struct i2c_driver max8925_driver = {
246 .driver = { 246 .driver = {
247 .name = "max8925", 247 .name = "max8925",
248 .owner = THIS_MODULE,
249 .pm = &max8925_pm_ops, 248 .pm = &max8925_pm_ops,
250 .of_match_table = max8925_dt_ids, 249 .of_match_table = max8925_dt_ids,
251 }, 250 },
diff --git a/drivers/mfd/max8997-irq.c b/drivers/mfd/max8997-irq.c
index d3025be57f39..b95a46d79b9d 100644
--- a/drivers/mfd/max8997-irq.c
+++ b/drivers/mfd/max8997-irq.c
@@ -113,14 +113,14 @@ static const struct max8997_irq_data max8997_irqs[] = {
113 113
114static void max8997_irq_lock(struct irq_data *data) 114static void max8997_irq_lock(struct irq_data *data)
115{ 115{
116 struct max8997_dev *max8997 = irq_get_chip_data(data->irq); 116 struct max8997_dev *max8997 = irq_data_get_irq_chip_data(data);
117 117
118 mutex_lock(&max8997->irqlock); 118 mutex_lock(&max8997->irqlock);
119} 119}
120 120
121static void max8997_irq_sync_unlock(struct irq_data *data) 121static void max8997_irq_sync_unlock(struct irq_data *data)
122{ 122{
123 struct max8997_dev *max8997 = irq_get_chip_data(data->irq); 123 struct max8997_dev *max8997 = irq_data_get_irq_chip_data(data);
124 int i; 124 int i;
125 125
126 for (i = 0; i < MAX8997_IRQ_GROUP_NR; i++) { 126 for (i = 0; i < MAX8997_IRQ_GROUP_NR; i++) {
@@ -140,26 +140,25 @@ static void max8997_irq_sync_unlock(struct irq_data *data)
140} 140}
141 141
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, struct irq_data *data)
144{ 144{
145 struct irq_data *data = irq_get_irq_data(irq);
146 return &max8997_irqs[data->hwirq]; 145 return &max8997_irqs[data->hwirq];
147} 146}
148 147
149static void max8997_irq_mask(struct irq_data *data) 148static void max8997_irq_mask(struct irq_data *data)
150{ 149{
151 struct max8997_dev *max8997 = irq_get_chip_data(data->irq); 150 struct max8997_dev *max8997 = irq_data_get_irq_chip_data(data);
152 const struct max8997_irq_data *irq_data = irq_to_max8997_irq(max8997, 151 const struct max8997_irq_data *irq_data = irq_to_max8997_irq(max8997,
153 data->irq); 152 data);
154 153
155 max8997->irq_masks_cur[irq_data->group] |= irq_data->mask; 154 max8997->irq_masks_cur[irq_data->group] |= irq_data->mask;
156} 155}
157 156
158static void max8997_irq_unmask(struct irq_data *data) 157static void max8997_irq_unmask(struct irq_data *data)
159{ 158{
160 struct max8997_dev *max8997 = irq_get_chip_data(data->irq); 159 struct max8997_dev *max8997 = irq_data_get_irq_chip_data(data);
161 const struct max8997_irq_data *irq_data = irq_to_max8997_irq(max8997, 160 const struct max8997_irq_data *irq_data = irq_to_max8997_irq(max8997,
162 data->irq); 161 data);
163 162
164 max8997->irq_masks_cur[irq_data->group] &= ~irq_data->mask; 163 max8997->irq_masks_cur[irq_data->group] &= ~irq_data->mask;
165} 164}
@@ -295,11 +294,8 @@ static int max8997_irq_domain_map(struct irq_domain *d, unsigned int irq,
295 irq_set_chip_data(irq, max8997); 294 irq_set_chip_data(irq, max8997);
296 irq_set_chip_and_handler(irq, &max8997_irq_chip, handle_edge_irq); 295 irq_set_chip_and_handler(irq, &max8997_irq_chip, handle_edge_irq);
297 irq_set_nested_thread(irq, 1); 296 irq_set_nested_thread(irq, 1);
298#ifdef CONFIG_ARM
299 set_irq_flags(irq, IRQF_VALID);
300#else
301 irq_set_noprobe(irq); 297 irq_set_noprobe(irq);
302#endif 298
303 return 0; 299 return 0;
304} 300}
305 301
diff --git a/drivers/mfd/max8997.c b/drivers/mfd/max8997.c
index 595364ee178a..d3cfa9cf5c8f 100644
--- a/drivers/mfd/max8997.c
+++ b/drivers/mfd/max8997.c
@@ -508,7 +508,6 @@ static const struct dev_pm_ops max8997_pm = {
508static struct i2c_driver max8997_i2c_driver = { 508static struct i2c_driver max8997_i2c_driver = {
509 .driver = { 509 .driver = {
510 .name = "max8997", 510 .name = "max8997",
511 .owner = THIS_MODULE,
512 .pm = &max8997_pm, 511 .pm = &max8997_pm,
513 .of_match_table = of_match_ptr(max8997_pmic_dt_match), 512 .of_match_table = of_match_ptr(max8997_pmic_dt_match),
514 }, 513 },
diff --git a/drivers/mfd/max8998-irq.c b/drivers/mfd/max8998-irq.c
index 3702056628a8..90bad9ffa7e2 100644
--- a/drivers/mfd/max8998-irq.c
+++ b/drivers/mfd/max8998-irq.c
@@ -98,9 +98,8 @@ static struct max8998_irq_data max8998_irqs[] = {
98}; 98};
99 99
100static inline struct max8998_irq_data * 100static inline struct max8998_irq_data *
101irq_to_max8998_irq(struct max8998_dev *max8998, int irq) 101irq_to_max8998_irq(struct max8998_dev *max8998, struct irq_data *data)
102{ 102{
103 struct irq_data *data = irq_get_irq_data(irq);
104 return &max8998_irqs[data->hwirq]; 103 return &max8998_irqs[data->hwirq];
105} 104}
106 105
@@ -134,8 +133,7 @@ static void max8998_irq_sync_unlock(struct irq_data *data)
134static void max8998_irq_unmask(struct irq_data *data) 133static void max8998_irq_unmask(struct irq_data *data)
135{ 134{
136 struct max8998_dev *max8998 = irq_data_get_irq_chip_data(data); 135 struct max8998_dev *max8998 = irq_data_get_irq_chip_data(data);
137 struct max8998_irq_data *irq_data = irq_to_max8998_irq(max8998, 136 struct max8998_irq_data *irq_data = irq_to_max8998_irq(max8998, data);
138 data->irq);
139 137
140 max8998->irq_masks_cur[irq_data->reg - 1] &= ~irq_data->mask; 138 max8998->irq_masks_cur[irq_data->reg - 1] &= ~irq_data->mask;
141} 139}
@@ -143,8 +141,7 @@ static void max8998_irq_unmask(struct irq_data *data)
143static void max8998_irq_mask(struct irq_data *data) 141static void max8998_irq_mask(struct irq_data *data)
144{ 142{
145 struct max8998_dev *max8998 = irq_data_get_irq_chip_data(data); 143 struct max8998_dev *max8998 = irq_data_get_irq_chip_data(data);
146 struct max8998_irq_data *irq_data = irq_to_max8998_irq(max8998, 144 struct max8998_irq_data *irq_data = irq_to_max8998_irq(max8998, data);
147 data->irq);
148 145
149 max8998->irq_masks_cur[irq_data->reg - 1] |= irq_data->mask; 146 max8998->irq_masks_cur[irq_data->reg - 1] |= irq_data->mask;
150} 147}
@@ -206,11 +203,8 @@ static int max8998_irq_domain_map(struct irq_domain *d, unsigned int irq,
206 irq_set_chip_data(irq, max8998); 203 irq_set_chip_data(irq, max8998);
207 irq_set_chip_and_handler(irq, &max8998_irq_chip, handle_edge_irq); 204 irq_set_chip_and_handler(irq, &max8998_irq_chip, handle_edge_irq);
208 irq_set_nested_thread(irq, 1); 205 irq_set_nested_thread(irq, 1);
209#ifdef CONFIG_ARM
210 set_irq_flags(irq, IRQF_VALID);
211#else
212 irq_set_noprobe(irq); 206 irq_set_noprobe(irq);
213#endif 207
214 return 0; 208 return 0;
215} 209}
216 210
diff --git a/drivers/mfd/max8998.c b/drivers/mfd/max8998.c
index a37cb7444b6e..a7afe3bf27fc 100644
--- a/drivers/mfd/max8998.c
+++ b/drivers/mfd/max8998.c
@@ -377,7 +377,6 @@ static const struct dev_pm_ops max8998_pm = {
377static struct i2c_driver max8998_i2c_driver = { 377static struct i2c_driver max8998_i2c_driver = {
378 .driver = { 378 .driver = {
379 .name = "max8998", 379 .name = "max8998",
380 .owner = THIS_MODULE,
381 .pm = &max8998_pm, 380 .pm = &max8998_pm,
382 .of_match_table = of_match_ptr(max8998_dt_match), 381 .of_match_table = of_match_ptr(max8998_dt_match),
383 }, 382 },
diff --git a/drivers/mfd/mc13xxx-i2c.c b/drivers/mfd/mc13xxx-i2c.c
index 68b844811566..67e4c9aa7d18 100644
--- a/drivers/mfd/mc13xxx-i2c.c
+++ b/drivers/mfd/mc13xxx-i2c.c
@@ -96,7 +96,6 @@ static int mc13xxx_i2c_remove(struct i2c_client *client)
96static struct i2c_driver mc13xxx_i2c_driver = { 96static struct i2c_driver mc13xxx_i2c_driver = {
97 .id_table = mc13xxx_i2c_device_id, 97 .id_table = mc13xxx_i2c_device_id,
98 .driver = { 98 .driver = {
99 .owner = THIS_MODULE,
100 .name = "mc13xxx", 99 .name = "mc13xxx",
101 .of_match_table = mc13xxx_dt_ids, 100 .of_match_table = mc13xxx_dt_ids,
102 }, 101 },
diff --git a/drivers/mfd/mt6397-core.c b/drivers/mfd/mt6397-core.c
index 03929a6c6fc4..1749c1c9f405 100644
--- a/drivers/mfd/mt6397-core.c
+++ b/drivers/mfd/mt6397-core.c
@@ -60,14 +60,14 @@ static const struct mfd_cell mt6397_devs[] = {
60 60
61static void mt6397_irq_lock(struct irq_data *data) 61static void mt6397_irq_lock(struct irq_data *data)
62{ 62{
63 struct mt6397_chip *mt6397 = irq_get_chip_data(data->irq); 63 struct mt6397_chip *mt6397 = irq_data_get_irq_chip_data(data);
64 64
65 mutex_lock(&mt6397->irqlock); 65 mutex_lock(&mt6397->irqlock);
66} 66}
67 67
68static void mt6397_irq_sync_unlock(struct irq_data *data) 68static void mt6397_irq_sync_unlock(struct irq_data *data)
69{ 69{
70 struct mt6397_chip *mt6397 = irq_get_chip_data(data->irq); 70 struct mt6397_chip *mt6397 = irq_data_get_irq_chip_data(data);
71 71
72 regmap_write(mt6397->regmap, MT6397_INT_CON0, mt6397->irq_masks_cur[0]); 72 regmap_write(mt6397->regmap, MT6397_INT_CON0, mt6397->irq_masks_cur[0]);
73 regmap_write(mt6397->regmap, MT6397_INT_CON1, mt6397->irq_masks_cur[1]); 73 regmap_write(mt6397->regmap, MT6397_INT_CON1, mt6397->irq_masks_cur[1]);
@@ -77,7 +77,7 @@ static void mt6397_irq_sync_unlock(struct irq_data *data)
77 77
78static void mt6397_irq_disable(struct irq_data *data) 78static void mt6397_irq_disable(struct irq_data *data)
79{ 79{
80 struct mt6397_chip *mt6397 = irq_get_chip_data(data->irq); 80 struct mt6397_chip *mt6397 = irq_data_get_irq_chip_data(data);
81 int shift = data->hwirq & 0xf; 81 int shift = data->hwirq & 0xf;
82 int reg = data->hwirq >> 4; 82 int reg = data->hwirq >> 4;
83 83
@@ -86,19 +86,38 @@ static void mt6397_irq_disable(struct irq_data *data)
86 86
87static void mt6397_irq_enable(struct irq_data *data) 87static void mt6397_irq_enable(struct irq_data *data)
88{ 88{
89 struct mt6397_chip *mt6397 = irq_get_chip_data(data->irq); 89 struct mt6397_chip *mt6397 = irq_data_get_irq_chip_data(data);
90 int shift = data->hwirq & 0xf; 90 int shift = data->hwirq & 0xf;
91 int reg = data->hwirq >> 4; 91 int reg = data->hwirq >> 4;
92 92
93 mt6397->irq_masks_cur[reg] |= BIT(shift); 93 mt6397->irq_masks_cur[reg] |= BIT(shift);
94} 94}
95 95
96#ifdef CONFIG_PM_SLEEP
97static int mt6397_irq_set_wake(struct irq_data *irq_data, unsigned int on)
98{
99 struct mt6397_chip *mt6397 = irq_data_get_irq_chip_data(irq_data);
100 int shift = irq_data->hwirq & 0xf;
101 int reg = irq_data->hwirq >> 4;
102
103 if (on)
104 mt6397->wake_mask[reg] |= BIT(shift);
105 else
106 mt6397->wake_mask[reg] &= ~BIT(shift);
107
108 return 0;
109}
110#else
111#define mt6397_irq_set_wake NULL
112#endif
113
96static struct irq_chip mt6397_irq_chip = { 114static struct irq_chip mt6397_irq_chip = {
97 .name = "mt6397-irq", 115 .name = "mt6397-irq",
98 .irq_bus_lock = mt6397_irq_lock, 116 .irq_bus_lock = mt6397_irq_lock,
99 .irq_bus_sync_unlock = mt6397_irq_sync_unlock, 117 .irq_bus_sync_unlock = mt6397_irq_sync_unlock,
100 .irq_enable = mt6397_irq_enable, 118 .irq_enable = mt6397_irq_enable,
101 .irq_disable = mt6397_irq_disable, 119 .irq_disable = mt6397_irq_disable,
120 .irq_set_wake = mt6397_irq_set_wake,
102}; 121};
103 122
104static void mt6397_irq_handle_reg(struct mt6397_chip *mt6397, int reg, 123static void mt6397_irq_handle_reg(struct mt6397_chip *mt6397, int reg,
@@ -142,11 +161,7 @@ static int mt6397_irq_domain_map(struct irq_domain *d, unsigned int irq,
142 irq_set_chip_data(irq, mt6397); 161 irq_set_chip_data(irq, mt6397);
143 irq_set_chip_and_handler(irq, &mt6397_irq_chip, handle_level_irq); 162 irq_set_chip_and_handler(irq, &mt6397_irq_chip, handle_level_irq);
144 irq_set_nested_thread(irq, 1); 163 irq_set_nested_thread(irq, 1);
145#ifdef CONFIG_ARM
146 set_irq_flags(irq, IRQF_VALID);
147#else
148 irq_set_noprobe(irq); 164 irq_set_noprobe(irq);
149#endif
150 165
151 return 0; 166 return 0;
152} 167}
@@ -183,6 +198,35 @@ static int mt6397_irq_init(struct mt6397_chip *mt6397)
183 return 0; 198 return 0;
184} 199}
185 200
201#ifdef CONFIG_PM_SLEEP
202static int mt6397_irq_suspend(struct device *dev)
203{
204 struct mt6397_chip *chip = dev_get_drvdata(dev);
205
206 regmap_write(chip->regmap, MT6397_INT_CON0, chip->wake_mask[0]);
207 regmap_write(chip->regmap, MT6397_INT_CON1, chip->wake_mask[1]);
208
209 enable_irq_wake(chip->irq);
210
211 return 0;
212}
213
214static int mt6397_irq_resume(struct device *dev)
215{
216 struct mt6397_chip *chip = dev_get_drvdata(dev);
217
218 regmap_write(chip->regmap, MT6397_INT_CON0, chip->irq_masks_cur[0]);
219 regmap_write(chip->regmap, MT6397_INT_CON1, chip->irq_masks_cur[1]);
220
221 disable_irq_wake(chip->irq);
222
223 return 0;
224}
225#endif
226
227static SIMPLE_DEV_PM_OPS(mt6397_pm_ops, mt6397_irq_suspend,
228 mt6397_irq_resume);
229
186static int mt6397_probe(struct platform_device *pdev) 230static int mt6397_probe(struct platform_device *pdev)
187{ 231{
188 int ret; 232 int ret;
@@ -237,6 +281,7 @@ static struct platform_driver mt6397_driver = {
237 .driver = { 281 .driver = {
238 .name = "mt6397", 282 .name = "mt6397",
239 .of_match_table = of_match_ptr(mt6397_of_match), 283 .of_match_table = of_match_ptr(mt6397_of_match),
284 .pm = &mt6397_pm_ops,
240 }, 285 },
241}; 286};
242 287
diff --git a/drivers/mfd/palmas.c b/drivers/mfd/palmas.c
index 28cb048f4760..8f8bacb67a15 100644
--- a/drivers/mfd/palmas.c
+++ b/drivers/mfd/palmas.c
@@ -719,7 +719,6 @@ static struct i2c_driver palmas_i2c_driver = {
719 .driver = { 719 .driver = {
720 .name = "palmas", 720 .name = "palmas",
721 .of_match_table = of_palmas_match_tbl, 721 .of_match_table = of_palmas_match_tbl,
722 .owner = THIS_MODULE,
723 }, 722 },
724 .probe = palmas_i2c_probe, 723 .probe = palmas_i2c_probe,
725 .remove = palmas_i2c_remove, 724 .remove = palmas_i2c_remove,
diff --git a/drivers/mfd/pm8921-core.c b/drivers/mfd/pm8921-core.c
index 5a92646a2ccb..59502d02cd15 100644
--- a/drivers/mfd/pm8921-core.c
+++ b/drivers/mfd/pm8921-core.c
@@ -236,11 +236,49 @@ static int pm8xxx_irq_set_type(struct irq_data *d, unsigned int flow_type)
236 return pm8xxx_config_irq(chip, block, config); 236 return pm8xxx_config_irq(chip, block, config);
237} 237}
238 238
239static int pm8xxx_irq_get_irqchip_state(struct irq_data *d,
240 enum irqchip_irq_state which,
241 bool *state)
242{
243 struct pm_irq_chip *chip = irq_data_get_irq_chip_data(d);
244 unsigned int pmirq = irqd_to_hwirq(d);
245 unsigned int bits;
246 int irq_bit;
247 u8 block;
248 int rc;
249
250 if (which != IRQCHIP_STATE_LINE_LEVEL)
251 return -EINVAL;
252
253 block = pmirq / 8;
254 irq_bit = pmirq % 8;
255
256 spin_lock(&chip->pm_irq_lock);
257 rc = regmap_write(chip->regmap, SSBI_REG_ADDR_IRQ_BLK_SEL, block);
258 if (rc) {
259 pr_err("Failed Selecting Block %d rc=%d\n", block, rc);
260 goto bail;
261 }
262
263 rc = regmap_read(chip->regmap, SSBI_REG_ADDR_IRQ_RT_STATUS, &bits);
264 if (rc) {
265 pr_err("Failed Reading Status rc=%d\n", rc);
266 goto bail;
267 }
268
269 *state = !!(bits & BIT(irq_bit));
270bail:
271 spin_unlock(&chip->pm_irq_lock);
272
273 return rc;
274}
275
239static struct irq_chip pm8xxx_irq_chip = { 276static struct irq_chip pm8xxx_irq_chip = {
240 .name = "pm8xxx", 277 .name = "pm8xxx",
241 .irq_mask_ack = pm8xxx_irq_mask_ack, 278 .irq_mask_ack = pm8xxx_irq_mask_ack,
242 .irq_unmask = pm8xxx_irq_unmask, 279 .irq_unmask = pm8xxx_irq_unmask,
243 .irq_set_type = pm8xxx_irq_set_type, 280 .irq_set_type = pm8xxx_irq_set_type,
281 .irq_get_irqchip_state = pm8xxx_irq_get_irqchip_state,
244 .flags = IRQCHIP_MASK_ON_SUSPEND | IRQCHIP_SKIP_SET_WAKE, 282 .flags = IRQCHIP_MASK_ON_SUSPEND | IRQCHIP_SKIP_SET_WAKE,
245}; 283};
246 284
@@ -251,11 +289,8 @@ static int pm8xxx_irq_domain_map(struct irq_domain *d, unsigned int irq,
251 289
252 irq_set_chip_and_handler(irq, &pm8xxx_irq_chip, handle_level_irq); 290 irq_set_chip_and_handler(irq, &pm8xxx_irq_chip, handle_level_irq);
253 irq_set_chip_data(irq, chip); 291 irq_set_chip_data(irq, chip);
254#ifdef CONFIG_ARM
255 set_irq_flags(irq, IRQF_VALID);
256#else
257 irq_set_noprobe(irq); 292 irq_set_noprobe(irq);
258#endif 293
259 return 0; 294 return 0;
260} 295}
261 296
@@ -336,14 +371,12 @@ static int pm8921_probe(struct platform_device *pdev)
336 if (!chip->irqdomain) 371 if (!chip->irqdomain)
337 return -ENODEV; 372 return -ENODEV;
338 373
339 irq_set_handler_data(irq, chip); 374 irq_set_chained_handler_and_data(irq, pm8xxx_irq_handler, chip);
340 irq_set_chained_handler(irq, pm8xxx_irq_handler);
341 irq_set_irq_wake(irq, 1); 375 irq_set_irq_wake(irq, 1);
342 376
343 rc = of_platform_populate(pdev->dev.of_node, NULL, NULL, &pdev->dev); 377 rc = of_platform_populate(pdev->dev.of_node, NULL, NULL, &pdev->dev);
344 if (rc) { 378 if (rc) {
345 irq_set_chained_handler(irq, NULL); 379 irq_set_chained_handler_and_data(irq, NULL, NULL);
346 irq_set_handler_data(irq, NULL);
347 irq_domain_remove(chip->irqdomain); 380 irq_domain_remove(chip->irqdomain);
348 } 381 }
349 382
@@ -362,8 +395,7 @@ static int pm8921_remove(struct platform_device *pdev)
362 struct pm_irq_chip *chip = platform_get_drvdata(pdev); 395 struct pm_irq_chip *chip = platform_get_drvdata(pdev);
363 396
364 device_for_each_child(&pdev->dev, NULL, pm8921_remove_child); 397 device_for_each_child(&pdev->dev, NULL, pm8921_remove_child);
365 irq_set_chained_handler(irq, NULL); 398 irq_set_chained_handler_and_data(irq, NULL, NULL);
366 irq_set_handler_data(irq, NULL);
367 irq_domain_remove(chip->irqdomain); 399 irq_domain_remove(chip->irqdomain);
368 400
369 return 0; 401 return 0;
diff --git a/drivers/mfd/qcom_rpm.c b/drivers/mfd/qcom_rpm.c
index 12e324319573..6afc9fabd94c 100644
--- a/drivers/mfd/qcom_rpm.c
+++ b/drivers/mfd/qcom_rpm.c
@@ -149,6 +149,7 @@ static const struct qcom_rpm_resource apq8064_rpm_resource_table[] = {
149 [QCOM_RPM_USB_OTG_SWITCH] = { 210, 125, 82, 1 }, 149 [QCOM_RPM_USB_OTG_SWITCH] = { 210, 125, 82, 1 },
150 [QCOM_RPM_HDMI_SWITCH] = { 211, 126, 83, 1 }, 150 [QCOM_RPM_HDMI_SWITCH] = { 211, 126, 83, 1 },
151 [QCOM_RPM_DDR_DMM] = { 212, 127, 84, 2 }, 151 [QCOM_RPM_DDR_DMM] = { 212, 127, 84, 2 },
152 [QCOM_RPM_QDSS_CLK] = { 214, ~0, 7, 1 },
152 [QCOM_RPM_VDDMIN_GPIO] = { 215, 131, 89, 1 }, 153 [QCOM_RPM_VDDMIN_GPIO] = { 215, 131, 89, 1 },
153}; 154};
154 155
diff --git a/drivers/mfd/rc5t583-irq.c b/drivers/mfd/rc5t583-irq.c
index bb8502020274..3f8812daa304 100644
--- a/drivers/mfd/rc5t583-irq.c
+++ b/drivers/mfd/rc5t583-irq.c
@@ -386,9 +386,7 @@ int rc5t583_irq_init(struct rc5t583 *rc5t583, int irq, int irq_base)
386 irq_set_chip_and_handler(__irq, &rc5t583_irq_chip, 386 irq_set_chip_and_handler(__irq, &rc5t583_irq_chip,
387 handle_simple_irq); 387 handle_simple_irq);
388 irq_set_nested_thread(__irq, 1); 388 irq_set_nested_thread(__irq, 1);
389#ifdef CONFIG_ARM 389 irq_clear_status_flags(__irq, IRQ_NOREQUEST);
390 set_irq_flags(__irq, IRQF_VALID);
391#endif
392 } 390 }
393 391
394 ret = request_threaded_irq(irq, NULL, rc5t583_irq, IRQF_ONESHOT, 392 ret = request_threaded_irq(irq, NULL, rc5t583_irq, IRQF_ONESHOT,
diff --git a/drivers/mfd/rc5t583.c b/drivers/mfd/rc5t583.c
index df276ad9f40b..e10f02f5d551 100644
--- a/drivers/mfd/rc5t583.c
+++ b/drivers/mfd/rc5t583.c
@@ -322,7 +322,6 @@ MODULE_DEVICE_TABLE(i2c, rc5t583_i2c_id);
322static struct i2c_driver rc5t583_i2c_driver = { 322static struct i2c_driver rc5t583_i2c_driver = {
323 .driver = { 323 .driver = {
324 .name = "rc5t583", 324 .name = "rc5t583",
325 .owner = THIS_MODULE,
326 }, 325 },
327 .probe = rc5t583_i2c_probe, 326 .probe = rc5t583_i2c_probe,
328 .remove = rc5t583_i2c_remove, 327 .remove = rc5t583_i2c_remove,
diff --git a/drivers/mfd/retu-mfd.c b/drivers/mfd/retu-mfd.c
index 2d64430c719b..d4c114abeb75 100644
--- a/drivers/mfd/retu-mfd.c
+++ b/drivers/mfd/retu-mfd.c
@@ -311,7 +311,6 @@ MODULE_DEVICE_TABLE(i2c, retu_id);
311static struct i2c_driver retu_driver = { 311static struct i2c_driver retu_driver = {
312 .driver = { 312 .driver = {
313 .name = "retu-mfd", 313 .name = "retu-mfd",
314 .owner = THIS_MODULE,
315 }, 314 },
316 .probe = retu_probe, 315 .probe = retu_probe,
317 .remove = retu_remove, 316 .remove = retu_remove,
diff --git a/drivers/mfd/rt5033.c b/drivers/mfd/rt5033.c
index db395a6c52bc..d60f91619c4a 100644
--- a/drivers/mfd/rt5033.c
+++ b/drivers/mfd/rt5033.c
@@ -124,6 +124,7 @@ static const struct of_device_id rt5033_dt_match[] = {
124 { .compatible = "richtek,rt5033", }, 124 { .compatible = "richtek,rt5033", },
125 { } 125 { }
126}; 126};
127MODULE_DEVICE_TABLE(of, rt5033_dt_match);
127 128
128static struct i2c_driver rt5033_driver = { 129static struct i2c_driver rt5033_driver = {
129 .driver = { 130 .driver = {
diff --git a/drivers/mfd/sec-core.c b/drivers/mfd/sec-core.c
index 4a69afb425ad..d206a3e8fe87 100644
--- a/drivers/mfd/sec-core.c
+++ b/drivers/mfd/sec-core.c
@@ -486,7 +486,6 @@ MODULE_DEVICE_TABLE(i2c, sec_pmic_id);
486static struct i2c_driver sec_pmic_driver = { 486static struct i2c_driver sec_pmic_driver = {
487 .driver = { 487 .driver = {
488 .name = "sec_pmic", 488 .name = "sec_pmic",
489 .owner = THIS_MODULE,
490 .pm = &sec_pmic_pm_ops, 489 .pm = &sec_pmic_pm_ops,
491 .of_match_table = of_match_ptr(sec_dt_match), 490 .of_match_table = of_match_ptr(sec_dt_match),
492 }, 491 },
diff --git a/drivers/mfd/si476x-i2c.c b/drivers/mfd/si476x-i2c.c
index e3deb466628b..fb4ce6d04c30 100644
--- a/drivers/mfd/si476x-i2c.c
+++ b/drivers/mfd/si476x-i2c.c
@@ -873,7 +873,6 @@ MODULE_DEVICE_TABLE(i2c, si476x_id);
873static struct i2c_driver si476x_core_driver = { 873static struct i2c_driver si476x_core_driver = {
874 .driver = { 874 .driver = {
875 .name = "si476x-core", 875 .name = "si476x-core",
876 .owner = THIS_MODULE,
877 }, 876 },
878 .probe = si476x_core_probe, 877 .probe = si476x_core_probe,
879 .remove = si476x_core_remove, 878 .remove = si476x_core_remove,
diff --git a/drivers/mfd/smsc-ece1099.c b/drivers/mfd/smsc-ece1099.c
index 03246880d484..a4c0df71c8b3 100644
--- a/drivers/mfd/smsc-ece1099.c
+++ b/drivers/mfd/smsc-ece1099.c
@@ -98,7 +98,6 @@ MODULE_DEVICE_TABLE(i2c, smsc_i2c_id);
98static struct i2c_driver smsc_i2c_driver = { 98static struct i2c_driver smsc_i2c_driver = {
99 .driver = { 99 .driver = {
100 .name = "smsc", 100 .name = "smsc",
101 .owner = THIS_MODULE,
102 }, 101 },
103 .probe = smsc_i2c_probe, 102 .probe = smsc_i2c_probe,
104 .remove = smsc_i2c_remove, 103 .remove = smsc_i2c_remove,
diff --git a/drivers/mfd/stmpe-i2c.c b/drivers/mfd/stmpe-i2c.c
index e14c8c9d189b..c3f4aab53b07 100644
--- a/drivers/mfd/stmpe-i2c.c
+++ b/drivers/mfd/stmpe-i2c.c
@@ -112,7 +112,6 @@ MODULE_DEVICE_TABLE(i2c, stmpe_id);
112static struct i2c_driver stmpe_i2c_driver = { 112static struct i2c_driver stmpe_i2c_driver = {
113 .driver = { 113 .driver = {
114 .name = "stmpe-i2c", 114 .name = "stmpe-i2c",
115 .owner = THIS_MODULE,
116#ifdef CONFIG_PM 115#ifdef CONFIG_PM
117 .pm = &stmpe_dev_pm_ops, 116 .pm = &stmpe_dev_pm_ops,
118#endif 117#endif
diff --git a/drivers/mfd/stmpe-spi.c b/drivers/mfd/stmpe-spi.c
index 6fdb30e84a2b..618ba244d98a 100644
--- a/drivers/mfd/stmpe-spi.c
+++ b/drivers/mfd/stmpe-spi.c
@@ -11,6 +11,7 @@
11#include <linux/interrupt.h> 11#include <linux/interrupt.h>
12#include <linux/kernel.h> 12#include <linux/kernel.h>
13#include <linux/module.h> 13#include <linux/module.h>
14#include <linux/of.h>
14#include <linux/types.h> 15#include <linux/types.h>
15#include "stmpe.h" 16#include "stmpe.h"
16 17
@@ -108,6 +109,17 @@ static int stmpe_spi_remove(struct spi_device *spi)
108 return stmpe_remove(stmpe); 109 return stmpe_remove(stmpe);
109} 110}
110 111
112static const struct of_device_id stmpe_spi_of_match[] = {
113 { .compatible = "st,stmpe610", },
114 { .compatible = "st,stmpe801", },
115 { .compatible = "st,stmpe811", },
116 { .compatible = "st,stmpe1601", },
117 { .compatible = "st,stmpe2401", },
118 { .compatible = "st,stmpe2403", },
119 { /* sentinel */ },
120};
121MODULE_DEVICE_TABLE(of, stmpe_spi_of_match);
122
111static const struct spi_device_id stmpe_spi_id[] = { 123static const struct spi_device_id stmpe_spi_id[] = {
112 { "stmpe610", STMPE610 }, 124 { "stmpe610", STMPE610 },
113 { "stmpe801", STMPE801 }, 125 { "stmpe801", STMPE801 },
@@ -122,6 +134,7 @@ MODULE_DEVICE_TABLE(spi, stmpe_id);
122static struct spi_driver stmpe_spi_driver = { 134static struct spi_driver stmpe_spi_driver = {
123 .driver = { 135 .driver = {
124 .name = "stmpe-spi", 136 .name = "stmpe-spi",
137 .of_match_table = of_match_ptr(stmpe_spi_of_match),
125 .owner = THIS_MODULE, 138 .owner = THIS_MODULE,
126#ifdef CONFIG_PM 139#ifdef CONFIG_PM
127 .pm = &stmpe_dev_pm_ops, 140 .pm = &stmpe_dev_pm_ops,
diff --git a/drivers/mfd/stmpe.c b/drivers/mfd/stmpe.c
index 18c4d72d1d2a..e971af86ce1e 100644
--- a/drivers/mfd/stmpe.c
+++ b/drivers/mfd/stmpe.c
@@ -971,20 +971,13 @@ static int stmpe_irq_map(struct irq_domain *d, unsigned int virq,
971 irq_set_chip_data(virq, stmpe); 971 irq_set_chip_data(virq, stmpe);
972 irq_set_chip_and_handler(virq, chip, handle_edge_irq); 972 irq_set_chip_and_handler(virq, chip, handle_edge_irq);
973 irq_set_nested_thread(virq, 1); 973 irq_set_nested_thread(virq, 1);
974#ifdef CONFIG_ARM
975 set_irq_flags(virq, IRQF_VALID);
976#else
977 irq_set_noprobe(virq); 974 irq_set_noprobe(virq);
978#endif
979 975
980 return 0; 976 return 0;
981} 977}
982 978
983static void stmpe_irq_unmap(struct irq_domain *d, unsigned int virq) 979static void stmpe_irq_unmap(struct irq_domain *d, unsigned int virq)
984{ 980{
985#ifdef CONFIG_ARM
986 set_irq_flags(virq, 0);
987#endif
988 irq_set_chip_and_handler(virq, NULL, NULL); 981 irq_set_chip_and_handler(virq, NULL, NULL);
989 irq_set_chip_data(virq, NULL); 982 irq_set_chip_data(virq, NULL);
990} 983}
diff --git a/drivers/mfd/stw481x.c b/drivers/mfd/stw481x.c
index 7ceb3df09e25..ca613df36143 100644
--- a/drivers/mfd/stw481x.c
+++ b/drivers/mfd/stw481x.c
@@ -231,6 +231,7 @@ static const struct i2c_device_id stw481x_id[] = {
231 { "stw481x", 0 }, 231 { "stw481x", 0 },
232 { }, 232 { },
233}; 233};
234MODULE_DEVICE_TABLE(i2c, stw481x_id);
234 235
235static const struct of_device_id stw481x_match[] = { 236static const struct of_device_id stw481x_match[] = {
236 { .compatible = "st,stw4810", }, 237 { .compatible = "st,stw4810", },
diff --git a/drivers/mfd/t7l66xb.c b/drivers/mfd/t7l66xb.c
index c09fb5dccd50..16fc1adc4fa3 100644
--- a/drivers/mfd/t7l66xb.c
+++ b/drivers/mfd/t7l66xb.c
@@ -187,7 +187,7 @@ static struct mfd_cell t7l66xb_cells[] = {
187/* Handle the T7L66XB interrupt mux */ 187/* Handle the T7L66XB interrupt mux */
188static void t7l66xb_irq(unsigned int irq, struct irq_desc *desc) 188static void t7l66xb_irq(unsigned int irq, struct irq_desc *desc)
189{ 189{
190 struct t7l66xb *t7l66xb = irq_get_handler_data(irq); 190 struct t7l66xb *t7l66xb = irq_desc_get_handler_data(desc);
191 unsigned int isr; 191 unsigned int isr;
192 unsigned int i, irq_base; 192 unsigned int i, irq_base;
193 193
@@ -246,14 +246,10 @@ static void t7l66xb_attach_irq(struct platform_device *dev)
246 for (irq = irq_base; irq < irq_base + T7L66XB_NR_IRQS; irq++) { 246 for (irq = irq_base; irq < irq_base + T7L66XB_NR_IRQS; irq++) {
247 irq_set_chip_and_handler(irq, &t7l66xb_chip, handle_level_irq); 247 irq_set_chip_and_handler(irq, &t7l66xb_chip, handle_level_irq);
248 irq_set_chip_data(irq, t7l66xb); 248 irq_set_chip_data(irq, t7l66xb);
249#ifdef CONFIG_ARM
250 set_irq_flags(irq, IRQF_VALID | IRQF_PROBE);
251#endif
252 } 249 }
253 250
254 irq_set_irq_type(t7l66xb->irq, IRQ_TYPE_EDGE_FALLING); 251 irq_set_irq_type(t7l66xb->irq, IRQ_TYPE_EDGE_FALLING);
255 irq_set_handler_data(t7l66xb->irq, t7l66xb); 252 irq_set_chained_handler_and_data(t7l66xb->irq, t7l66xb_irq, t7l66xb);
256 irq_set_chained_handler(t7l66xb->irq, t7l66xb_irq);
257} 253}
258 254
259static void t7l66xb_detach_irq(struct platform_device *dev) 255static void t7l66xb_detach_irq(struct platform_device *dev)
@@ -263,13 +259,9 @@ static void t7l66xb_detach_irq(struct platform_device *dev)
263 259
264 irq_base = t7l66xb->irq_base; 260 irq_base = t7l66xb->irq_base;
265 261
266 irq_set_chained_handler(t7l66xb->irq, NULL); 262 irq_set_chained_handler_and_data(t7l66xb->irq, NULL, NULL);
267 irq_set_handler_data(t7l66xb->irq, NULL);
268 263
269 for (irq = irq_base; irq < irq_base + T7L66XB_NR_IRQS; irq++) { 264 for (irq = irq_base; irq < irq_base + T7L66XB_NR_IRQS; irq++) {
270#ifdef CONFIG_ARM
271 set_irq_flags(irq, 0);
272#endif
273 irq_set_chip(irq, NULL); 265 irq_set_chip(irq, NULL);
274 irq_set_chip_data(irq, NULL); 266 irq_set_chip_data(irq, NULL);
275 } 267 }
@@ -318,7 +310,7 @@ static int t7l66xb_probe(struct platform_device *dev)
318 struct resource *iomem, *rscr; 310 struct resource *iomem, *rscr;
319 int ret; 311 int ret;
320 312
321 if (pdata == NULL) 313 if (!pdata)
322 return -EINVAL; 314 return -EINVAL;
323 315
324 iomem = platform_get_resource(dev, IORESOURCE_MEM, 0); 316 iomem = platform_get_resource(dev, IORESOURCE_MEM, 0);
@@ -371,7 +363,7 @@ static int t7l66xb_probe(struct platform_device *dev)
371 363
372 clk_prepare_enable(t7l66xb->clk48m); 364 clk_prepare_enable(t7l66xb->clk48m);
373 365
374 if (pdata && pdata->enable) 366 if (pdata->enable)
375 pdata->enable(dev); 367 pdata->enable(dev);
376 368
377 /* Mask all interrupts */ 369 /* Mask all interrupts */
diff --git a/drivers/mfd/tc3589x.c b/drivers/mfd/tc3589x.c
index 96d420dfc15d..274bf39968aa 100644
--- a/drivers/mfd/tc3589x.c
+++ b/drivers/mfd/tc3589x.c
@@ -215,20 +215,13 @@ static int tc3589x_irq_map(struct irq_domain *d, unsigned int virq,
215 irq_set_chip_and_handler(virq, &dummy_irq_chip, 215 irq_set_chip_and_handler(virq, &dummy_irq_chip,
216 handle_edge_irq); 216 handle_edge_irq);
217 irq_set_nested_thread(virq, 1); 217 irq_set_nested_thread(virq, 1);
218#ifdef CONFIG_ARM
219 set_irq_flags(virq, IRQF_VALID);
220#else
221 irq_set_noprobe(virq); 218 irq_set_noprobe(virq);
222#endif
223 219
224 return 0; 220 return 0;
225} 221}
226 222
227static void tc3589x_irq_unmap(struct irq_domain *d, unsigned int virq) 223static void tc3589x_irq_unmap(struct irq_domain *d, unsigned int virq)
228{ 224{
229#ifdef CONFIG_ARM
230 set_irq_flags(virq, 0);
231#endif
232 irq_set_chip_and_handler(virq, NULL, NULL); 225 irq_set_chip_and_handler(virq, NULL, NULL);
233 irq_set_chip_data(virq, NULL); 226 irq_set_chip_data(virq, NULL);
234} 227}
@@ -492,7 +485,6 @@ MODULE_DEVICE_TABLE(i2c, tc3589x_id);
492static struct i2c_driver tc3589x_driver = { 485static struct i2c_driver tc3589x_driver = {
493 .driver = { 486 .driver = {
494 .name = "tc3589x", 487 .name = "tc3589x",
495 .owner = THIS_MODULE,
496 .pm = &tc3589x_dev_pm_ops, 488 .pm = &tc3589x_dev_pm_ops,
497 .of_match_table = of_match_ptr(tc3589x_match), 489 .of_match_table = of_match_ptr(tc3589x_match),
498 }, 490 },
diff --git a/drivers/mfd/tc6393xb.c b/drivers/mfd/tc6393xb.c
index 63458b39a97d..775b9aca871a 100644
--- a/drivers/mfd/tc6393xb.c
+++ b/drivers/mfd/tc6393xb.c
@@ -525,7 +525,7 @@ static int tc6393xb_register_gpio(struct tc6393xb *tc6393xb, int gpio_base)
525static void 525static void
526tc6393xb_irq(unsigned int irq, struct irq_desc *desc) 526tc6393xb_irq(unsigned int irq, struct irq_desc *desc)
527{ 527{
528 struct tc6393xb *tc6393xb = irq_get_handler_data(irq); 528 struct tc6393xb *tc6393xb = irq_desc_get_handler_data(desc);
529 unsigned int isr; 529 unsigned int isr;
530 unsigned int i, irq_base; 530 unsigned int i, irq_base;
531 531
@@ -586,12 +586,12 @@ static void tc6393xb_attach_irq(struct platform_device *dev)
586 for (irq = irq_base; irq < irq_base + TC6393XB_NR_IRQS; irq++) { 586 for (irq = irq_base; irq < irq_base + TC6393XB_NR_IRQS; irq++) {
587 irq_set_chip_and_handler(irq, &tc6393xb_chip, handle_edge_irq); 587 irq_set_chip_and_handler(irq, &tc6393xb_chip, handle_edge_irq);
588 irq_set_chip_data(irq, tc6393xb); 588 irq_set_chip_data(irq, tc6393xb);
589 set_irq_flags(irq, IRQF_VALID | IRQF_PROBE); 589 irq_clear_status_flags(irq, IRQ_NOREQUEST | IRQ_NOPROBE);
590 } 590 }
591 591
592 irq_set_irq_type(tc6393xb->irq, IRQ_TYPE_EDGE_FALLING); 592 irq_set_irq_type(tc6393xb->irq, IRQ_TYPE_EDGE_FALLING);
593 irq_set_handler_data(tc6393xb->irq, tc6393xb); 593 irq_set_chained_handler_and_data(tc6393xb->irq, tc6393xb_irq,
594 irq_set_chained_handler(tc6393xb->irq, tc6393xb_irq); 594 tc6393xb);
595} 595}
596 596
597static void tc6393xb_detach_irq(struct platform_device *dev) 597static void tc6393xb_detach_irq(struct platform_device *dev)
@@ -599,13 +599,12 @@ static void tc6393xb_detach_irq(struct platform_device *dev)
599 struct tc6393xb *tc6393xb = platform_get_drvdata(dev); 599 struct tc6393xb *tc6393xb = platform_get_drvdata(dev);
600 unsigned int irq, irq_base; 600 unsigned int irq, irq_base;
601 601
602 irq_set_chained_handler(tc6393xb->irq, NULL); 602 irq_set_chained_handler_and_data(tc6393xb->irq, NULL, NULL);
603 irq_set_handler_data(tc6393xb->irq, NULL);
604 603
605 irq_base = tc6393xb->irq_base; 604 irq_base = tc6393xb->irq_base;
606 605
607 for (irq = irq_base; irq < irq_base + TC6393XB_NR_IRQS; irq++) { 606 for (irq = irq_base; irq < irq_base + TC6393XB_NR_IRQS; irq++) {
608 set_irq_flags(irq, 0); 607 irq_set_status_flags(irq, IRQ_NOREQUEST | IRQ_NOPROBE);
609 irq_set_chip(irq, NULL); 608 irq_set_chip(irq, NULL);
610 irq_set_chip_data(irq, NULL); 609 irq_set_chip_data(irq, NULL);
611 } 610 }
diff --git a/drivers/mfd/tps6507x.c b/drivers/mfd/tps6507x.c
index a2e1990c9de7..1ab3dd6c8adf 100644
--- a/drivers/mfd/tps6507x.c
+++ b/drivers/mfd/tps6507x.c
@@ -129,7 +129,6 @@ MODULE_DEVICE_TABLE(of, tps6507x_of_match);
129static struct i2c_driver tps6507x_i2c_driver = { 129static struct i2c_driver tps6507x_i2c_driver = {
130 .driver = { 130 .driver = {
131 .name = "tps6507x", 131 .name = "tps6507x",
132 .owner = THIS_MODULE,
133 .of_match_table = of_match_ptr(tps6507x_of_match), 132 .of_match_table = of_match_ptr(tps6507x_of_match),
134 }, 133 },
135 .probe = tps6507x_i2c_probe, 134 .probe = tps6507x_i2c_probe,
diff --git a/drivers/mfd/tps65090.c b/drivers/mfd/tps65090.c
index 14b62e11aff4..f88085ad9772 100644
--- a/drivers/mfd/tps65090.c
+++ b/drivers/mfd/tps65090.c
@@ -259,7 +259,6 @@ MODULE_DEVICE_TABLE(i2c, tps65090_id_table);
259static struct i2c_driver tps65090_driver = { 259static struct i2c_driver tps65090_driver = {
260 .driver = { 260 .driver = {
261 .name = "tps65090", 261 .name = "tps65090",
262 .owner = THIS_MODULE,
263 .of_match_table = of_match_ptr(tps65090_of_match), 262 .of_match_table = of_match_ptr(tps65090_of_match),
264 }, 263 },
265 .probe = tps65090_i2c_probe, 264 .probe = tps65090_i2c_probe,
diff --git a/drivers/mfd/tps65217.c b/drivers/mfd/tps65217.c
index 7d1cfc1d3ce0..55add0453ae9 100644
--- a/drivers/mfd/tps65217.c
+++ b/drivers/mfd/tps65217.c
@@ -156,6 +156,7 @@ static const struct of_device_id tps65217_of_match[] = {
156 { .compatible = "ti,tps65217", .data = (void *)TPS65217 }, 156 { .compatible = "ti,tps65217", .data = (void *)TPS65217 },
157 { /* sentinel */ }, 157 { /* sentinel */ },
158}; 158};
159MODULE_DEVICE_TABLE(of, tps65217_of_match);
159 160
160static int tps65217_probe(struct i2c_client *client, 161static int tps65217_probe(struct i2c_client *client,
161 const struct i2c_device_id *ids) 162 const struct i2c_device_id *ids)
@@ -248,7 +249,6 @@ MODULE_DEVICE_TABLE(i2c, tps65217_id_table);
248static struct i2c_driver tps65217_driver = { 249static struct i2c_driver tps65217_driver = {
249 .driver = { 250 .driver = {
250 .name = "tps65217", 251 .name = "tps65217",
251 .owner = THIS_MODULE,
252 .of_match_table = tps65217_of_match, 252 .of_match_table = tps65217_of_match,
253 }, 253 },
254 .id_table = tps65217_id_table, 254 .id_table = tps65217_id_table,
diff --git a/drivers/mfd/tps65218.c b/drivers/mfd/tps65218.c
index 7af11a8b9753..80b9dc363cd8 100644
--- a/drivers/mfd/tps65218.c
+++ b/drivers/mfd/tps65218.c
@@ -211,6 +211,7 @@ static const struct of_device_id of_tps65218_match_table[] = {
211 { .compatible = "ti,tps65218", }, 211 { .compatible = "ti,tps65218", },
212 {} 212 {}
213}; 213};
214MODULE_DEVICE_TABLE(of, of_tps65218_match_table);
214 215
215static int tps65218_probe(struct i2c_client *client, 216static int tps65218_probe(struct i2c_client *client,
216 const struct i2c_device_id *ids) 217 const struct i2c_device_id *ids)
@@ -280,7 +281,6 @@ MODULE_DEVICE_TABLE(i2c, tps65218_id_table);
280static struct i2c_driver tps65218_driver = { 281static struct i2c_driver tps65218_driver = {
281 .driver = { 282 .driver = {
282 .name = "tps65218", 283 .name = "tps65218",
283 .owner = THIS_MODULE,
284 .of_match_table = of_tps65218_match_table, 284 .of_match_table = of_tps65218_match_table,
285 }, 285 },
286 .probe = tps65218_probe, 286 .probe = tps65218_probe,
diff --git a/drivers/mfd/tps6586x.c b/drivers/mfd/tps6586x.c
index e0a2583916ce..5628a6b5b19b 100644
--- a/drivers/mfd/tps6586x.c
+++ b/drivers/mfd/tps6586x.c
@@ -52,7 +52,7 @@
52#define TPS6586X_VERSIONCRC 0xcd 52#define TPS6586X_VERSIONCRC 0xcd
53 53
54/* Maximum register */ 54/* Maximum register */
55#define TPS6586X_MAX_REGISTER (TPS6586X_VERSIONCRC + 1) 55#define TPS6586X_MAX_REGISTER TPS6586X_VERSIONCRC
56 56
57struct tps6586x_irq_data { 57struct tps6586x_irq_data {
58 u8 mask_reg; 58 u8 mask_reg;
@@ -299,14 +299,7 @@ static int tps6586x_irq_map(struct irq_domain *h, unsigned int virq,
299 irq_set_chip_data(virq, tps6586x); 299 irq_set_chip_data(virq, tps6586x);
300 irq_set_chip_and_handler(virq, &tps6586x_irq_chip, handle_simple_irq); 300 irq_set_chip_and_handler(virq, &tps6586x_irq_chip, handle_simple_irq);
301 irq_set_nested_thread(virq, 1); 301 irq_set_nested_thread(virq, 1);
302
303 /* ARM needs us to explicitly flag the IRQ as valid
304 * and will set them noprobe when we do so. */
305#ifdef CONFIG_ARM
306 set_irq_flags(virq, IRQF_VALID);
307#else
308 irq_set_noprobe(virq); 302 irq_set_noprobe(virq);
309#endif
310 303
311 return 0; 304 return 0;
312} 305}
@@ -467,7 +460,7 @@ static bool is_volatile_reg(struct device *dev, unsigned int reg)
467static const struct regmap_config tps6586x_regmap_config = { 460static const struct regmap_config tps6586x_regmap_config = {
468 .reg_bits = 8, 461 .reg_bits = 8,
469 .val_bits = 8, 462 .val_bits = 8,
470 .max_register = TPS6586X_MAX_REGISTER - 1, 463 .max_register = TPS6586X_MAX_REGISTER,
471 .volatile_reg = is_volatile_reg, 464 .volatile_reg = is_volatile_reg,
472 .cache_type = REGCACHE_RBTREE, 465 .cache_type = REGCACHE_RBTREE,
473}; 466};
@@ -610,7 +603,6 @@ MODULE_DEVICE_TABLE(i2c, tps6586x_id_table);
610static struct i2c_driver tps6586x_driver = { 603static struct i2c_driver tps6586x_driver = {
611 .driver = { 604 .driver = {
612 .name = "tps6586x", 605 .name = "tps6586x",
613 .owner = THIS_MODULE,
614 .of_match_table = of_match_ptr(tps6586x_of_match), 606 .of_match_table = of_match_ptr(tps6586x_of_match),
615 }, 607 },
616 .probe = tps6586x_i2c_probe, 608 .probe = tps6586x_i2c_probe,
diff --git a/drivers/mfd/tps65910.c b/drivers/mfd/tps65910.c
index 7612d89850dd..f7ab115483a9 100644
--- a/drivers/mfd/tps65910.c
+++ b/drivers/mfd/tps65910.c
@@ -544,7 +544,6 @@ MODULE_DEVICE_TABLE(i2c, tps65910_i2c_id);
544static struct i2c_driver tps65910_i2c_driver = { 544static struct i2c_driver tps65910_i2c_driver = {
545 .driver = { 545 .driver = {
546 .name = "tps65910", 546 .name = "tps65910",
547 .owner = THIS_MODULE,
548 .of_match_table = of_match_ptr(tps65910_of_match), 547 .of_match_table = of_match_ptr(tps65910_of_match),
549 }, 548 },
550 .probe = tps65910_i2c_probe, 549 .probe = tps65910_i2c_probe,
diff --git a/drivers/mfd/tps65912-i2c.c b/drivers/mfd/tps65912-i2c.c
index 6a6343ee95fe..7e55640b3ed5 100644
--- a/drivers/mfd/tps65912-i2c.c
+++ b/drivers/mfd/tps65912-i2c.c
@@ -109,7 +109,6 @@ MODULE_DEVICE_TABLE(i2c, tps65912_i2c_id);
109static struct i2c_driver tps65912_i2c_driver = { 109static struct i2c_driver tps65912_i2c_driver = {
110 .driver = { 110 .driver = {
111 .name = "tps65912", 111 .name = "tps65912",
112 .owner = THIS_MODULE,
113 }, 112 },
114 .probe = tps65912_i2c_probe, 113 .probe = tps65912_i2c_probe,
115 .remove = tps65912_i2c_remove, 114 .remove = tps65912_i2c_remove,
diff --git a/drivers/mfd/tps65912-irq.c b/drivers/mfd/tps65912-irq.c
index fbecec7f1e3d..db2c29cb709b 100644
--- a/drivers/mfd/tps65912-irq.c
+++ b/drivers/mfd/tps65912-irq.c
@@ -197,13 +197,7 @@ int tps65912_irq_init(struct tps65912 *tps65912, int irq,
197 irq_set_chip_and_handler(cur_irq, &tps65912_irq_chip, 197 irq_set_chip_and_handler(cur_irq, &tps65912_irq_chip,
198 handle_edge_irq); 198 handle_edge_irq);
199 irq_set_nested_thread(cur_irq, 1); 199 irq_set_nested_thread(cur_irq, 1);
200 /* ARM needs us to explicitly flag the IRQ as valid 200 irq_clear_status_flags(cur_irq, IRQ_NOREQUEST | IRQ_NOPROBE);
201 * and will set them noprobe when we do so. */
202#ifdef CONFIG_ARM
203 set_irq_flags(cur_irq, IRQF_VALID);
204#else
205 irq_set_noprobe(cur_irq);
206#endif
207 } 201 }
208 202
209 ret = request_threaded_irq(irq, NULL, tps65912_irq, flags, 203 ret = request_threaded_irq(irq, NULL, tps65912_irq, flags,
diff --git a/drivers/mfd/tps80031.c b/drivers/mfd/tps80031.c
index ed6c5b0956e2..0812df3b0d47 100644
--- a/drivers/mfd/tps80031.c
+++ b/drivers/mfd/tps80031.c
@@ -549,7 +549,6 @@ MODULE_DEVICE_TABLE(i2c, tps80031_id_table);
549static struct i2c_driver tps80031_driver = { 549static struct i2c_driver tps80031_driver = {
550 .driver = { 550 .driver = {
551 .name = "tps80031", 551 .name = "tps80031",
552 .owner = THIS_MODULE,
553 }, 552 },
554 .probe = tps80031_probe, 553 .probe = tps80031_probe,
555 .remove = tps80031_remove, 554 .remove = tps80031_remove,
diff --git a/drivers/mfd/twl4030-irq.c b/drivers/mfd/twl4030-irq.c
index a3fa7f4f1fb4..40e51b0baa46 100644
--- a/drivers/mfd/twl4030-irq.c
+++ b/drivers/mfd/twl4030-irq.c
@@ -419,16 +419,7 @@ static int twl4030_init_sih_modules(unsigned line)
419 419
420static inline void activate_irq(int irq) 420static inline void activate_irq(int irq)
421{ 421{
422#ifdef CONFIG_ARM 422 irq_clear_status_flags(irq, IRQ_NOREQUEST | IRQ_NOPROBE);
423 /*
424 * ARM requires an extra step to clear IRQ_NOREQUEST, which it
425 * sets on behalf of every irq_chip. Also sets IRQ_NOPROBE.
426 */
427 set_irq_flags(irq, IRQF_VALID);
428#else
429 /* same effect on other architectures */
430 irq_set_noprobe(irq);
431#endif
432} 423}
433 424
434/*----------------------------------------------------------------------*/ 425/*----------------------------------------------------------------------*/
diff --git a/drivers/mfd/twl6030-irq.c b/drivers/mfd/twl6030-irq.c
index 20fb58179ada..53574508a613 100644
--- a/drivers/mfd/twl6030-irq.c
+++ b/drivers/mfd/twl6030-irq.c
@@ -231,7 +231,7 @@ static irqreturn_t twl6030_irq_thread(int irq, void *data)
231 231
232static int twl6030_irq_set_wake(struct irq_data *d, unsigned int on) 232static int twl6030_irq_set_wake(struct irq_data *d, unsigned int on)
233{ 233{
234 struct twl6030_irq *pdata = irq_get_chip_data(d->irq); 234 struct twl6030_irq *pdata = irq_data_get_irq_chip_data(d);
235 235
236 if (on) 236 if (on)
237 atomic_inc(&pdata->wakeirqs); 237 atomic_inc(&pdata->wakeirqs);
@@ -352,26 +352,13 @@ static int twl6030_irq_map(struct irq_domain *d, unsigned int virq,
352 irq_set_chip_and_handler(virq, &pdata->irq_chip, handle_simple_irq); 352 irq_set_chip_and_handler(virq, &pdata->irq_chip, handle_simple_irq);
353 irq_set_nested_thread(virq, true); 353 irq_set_nested_thread(virq, true);
354 irq_set_parent(virq, pdata->twl_irq); 354 irq_set_parent(virq, pdata->twl_irq);
355
356#ifdef CONFIG_ARM
357 /*
358 * ARM requires an extra step to clear IRQ_NOREQUEST, which it
359 * sets on behalf of every irq_chip. Also sets IRQ_NOPROBE.
360 */
361 set_irq_flags(virq, IRQF_VALID);
362#else
363 /* same effect on other architectures */
364 irq_set_noprobe(virq); 355 irq_set_noprobe(virq);
365#endif
366 356
367 return 0; 357 return 0;
368} 358}
369 359
370static void twl6030_irq_unmap(struct irq_domain *d, unsigned int virq) 360static void twl6030_irq_unmap(struct irq_domain *d, unsigned int virq)
371{ 361{
372#ifdef CONFIG_ARM
373 set_irq_flags(virq, 0);
374#endif
375 irq_set_chip_and_handler(virq, NULL, NULL); 362 irq_set_chip_and_handler(virq, NULL, NULL);
376 irq_set_chip_data(virq, NULL); 363 irq_set_chip_data(virq, NULL);
377} 364}
diff --git a/drivers/mfd/twl6040.c b/drivers/mfd/twl6040.c
index c5265c1262c5..fbc9b6eb20a2 100644
--- a/drivers/mfd/twl6040.c
+++ b/drivers/mfd/twl6040.c
@@ -801,7 +801,6 @@ MODULE_DEVICE_TABLE(i2c, twl6040_i2c_id);
801static struct i2c_driver twl6040_driver = { 801static struct i2c_driver twl6040_driver = {
802 .driver = { 802 .driver = {
803 .name = "twl6040", 803 .name = "twl6040",
804 .owner = THIS_MODULE,
805 }, 804 },
806 .probe = twl6040_probe, 805 .probe = twl6040_probe,
807 .remove = twl6040_remove, 806 .remove = twl6040_remove,
diff --git a/drivers/mfd/ucb1x00-core.c b/drivers/mfd/ucb1x00-core.c
index 3591550598ad..9a2302129711 100644
--- a/drivers/mfd/ucb1x00-core.c
+++ b/drivers/mfd/ucb1x00-core.c
@@ -282,7 +282,7 @@ void ucb1x00_adc_disable(struct ucb1x00 *ucb)
282 * SIBCLK to talk to the chip. We leave the clock running until 282 * SIBCLK to talk to the chip. We leave the clock running until
283 * we have finished processing all interrupts from the chip. 283 * we have finished processing all interrupts from the chip.
284 */ 284 */
285static void ucb1x00_irq(unsigned int irq, struct irq_desc *desc) 285static void ucb1x00_irq(unsigned int __irq, struct irq_desc *desc)
286{ 286{
287 struct ucb1x00 *ucb = irq_desc_get_handler_data(desc); 287 struct ucb1x00 *ucb = irq_desc_get_handler_data(desc);
288 unsigned int isr, i; 288 unsigned int isr, i;
@@ -292,7 +292,7 @@ static void ucb1x00_irq(unsigned int irq, struct irq_desc *desc)
292 ucb1x00_reg_write(ucb, UCB_IE_CLEAR, isr); 292 ucb1x00_reg_write(ucb, UCB_IE_CLEAR, isr);
293 ucb1x00_reg_write(ucb, UCB_IE_CLEAR, 0); 293 ucb1x00_reg_write(ucb, UCB_IE_CLEAR, 0);
294 294
295 for (i = 0; i < 16 && isr; i++, isr >>= 1, irq++) 295 for (i = 0; i < 16 && isr; i++, isr >>= 1)
296 if (isr & 1) 296 if (isr & 1)
297 generic_handle_irq(ucb->irq_base + i); 297 generic_handle_irq(ucb->irq_base + i);
298 ucb1x00_disable(ucb); 298 ucb1x00_disable(ucb);
@@ -562,7 +562,7 @@ static int ucb1x00_probe(struct mcp *mcp)
562 562
563 irq_set_chip_and_handler(irq, &ucb1x00_irqchip, handle_edge_irq); 563 irq_set_chip_and_handler(irq, &ucb1x00_irqchip, handle_edge_irq);
564 irq_set_chip_data(irq, ucb); 564 irq_set_chip_data(irq, ucb);
565 set_irq_flags(irq, IRQF_VALID | IRQ_NOREQUEST); 565 irq_clear_status_flags(irq, IRQ_NOREQUEST);
566 } 566 }
567 567
568 irq_set_irq_type(ucb->irq, IRQ_TYPE_EDGE_RISING); 568 irq_set_irq_type(ucb->irq, IRQ_TYPE_EDGE_RISING);
diff --git a/drivers/mfd/wm5102-tables.c b/drivers/mfd/wm5102-tables.c
index aeae6ec123b3..a4997a5c02ce 100644
--- a/drivers/mfd/wm5102-tables.c
+++ b/drivers/mfd/wm5102-tables.c
@@ -266,8 +266,6 @@ static const struct reg_default wm5102_reg_default[] = {
266 { 0x00000069, 0x01FF }, /* R105 - Always On Triggers Sequence Select 4 */ 266 { 0x00000069, 0x01FF }, /* R105 - Always On Triggers Sequence Select 4 */
267 { 0x0000006A, 0x01FF }, /* R106 - Always On Triggers Sequence Select 5 */ 267 { 0x0000006A, 0x01FF }, /* R106 - Always On Triggers Sequence Select 5 */
268 { 0x0000006B, 0x01FF }, /* R107 - Always On Triggers Sequence Select 6 */ 268 { 0x0000006B, 0x01FF }, /* R107 - Always On Triggers Sequence Select 6 */
269 { 0x0000006E, 0x01FF }, /* R110 - Trigger Sequence Select 32 */
270 { 0x0000006F, 0x01FF }, /* R111 - Trigger Sequence Select 33 */
271 { 0x00000070, 0x0000 }, /* R112 - Comfort Noise Generator */ 269 { 0x00000070, 0x0000 }, /* R112 - Comfort Noise Generator */
272 { 0x00000090, 0x0000 }, /* R144 - Haptics Control 1 */ 270 { 0x00000090, 0x0000 }, /* R144 - Haptics Control 1 */
273 { 0x00000091, 0x7FFF }, /* R145 - Haptics Control 2 */ 271 { 0x00000091, 0x7FFF }, /* R145 - Haptics Control 2 */
@@ -300,7 +298,6 @@ static const struct reg_default wm5102_reg_default[] = {
300 { 0x00000175, 0x0004 }, /* R373 - FLL1 Control 5 */ 298 { 0x00000175, 0x0004 }, /* R373 - FLL1 Control 5 */
301 { 0x00000176, 0x0000 }, /* R374 - FLL1 Control 6 */ 299 { 0x00000176, 0x0000 }, /* R374 - FLL1 Control 6 */
302 { 0x00000177, 0x0181 }, /* R375 - FLL1 Loop Filter Test 1 */ 300 { 0x00000177, 0x0181 }, /* R375 - FLL1 Loop Filter Test 1 */
303 { 0x00000178, 0x0000 }, /* R376 - FLL1 NCO Test 0 */
304 { 0x00000179, 0x0000 }, /* R377 - FLL1 Control 7 */ 301 { 0x00000179, 0x0000 }, /* R377 - FLL1 Control 7 */
305 { 0x00000181, 0x0000 }, /* R385 - FLL1 Synchroniser 1 */ 302 { 0x00000181, 0x0000 }, /* R385 - FLL1 Synchroniser 1 */
306 { 0x00000182, 0x0000 }, /* R386 - FLL1 Synchroniser 2 */ 303 { 0x00000182, 0x0000 }, /* R386 - FLL1 Synchroniser 2 */
@@ -318,7 +315,6 @@ static const struct reg_default wm5102_reg_default[] = {
318 { 0x00000195, 0x0004 }, /* R405 - FLL2 Control 5 */ 315 { 0x00000195, 0x0004 }, /* R405 - FLL2 Control 5 */
319 { 0x00000196, 0x0000 }, /* R406 - FLL2 Control 6 */ 316 { 0x00000196, 0x0000 }, /* R406 - FLL2 Control 6 */
320 { 0x00000197, 0x0000 }, /* R407 - FLL2 Loop Filter Test 1 */ 317 { 0x00000197, 0x0000 }, /* R407 - FLL2 Loop Filter Test 1 */
321 { 0x00000198, 0x0000 }, /* R408 - FLL2 NCO Test 0 */
322 { 0x00000199, 0x0000 }, /* R409 - FLL2 Control 7 */ 318 { 0x00000199, 0x0000 }, /* R409 - FLL2 Control 7 */
323 { 0x000001A1, 0x0000 }, /* R417 - FLL2 Synchroniser 1 */ 319 { 0x000001A1, 0x0000 }, /* R417 - FLL2 Synchroniser 1 */
324 { 0x000001A2, 0x0000 }, /* R418 - FLL2 Synchroniser 2 */ 320 { 0x000001A2, 0x0000 }, /* R418 - FLL2 Synchroniser 2 */
@@ -338,12 +334,9 @@ static const struct reg_default wm5102_reg_default[] = {
338 { 0x0000021A, 0x01A6 }, /* R538 - Mic Bias Ctrl 3 */ 334 { 0x0000021A, 0x01A6 }, /* R538 - Mic Bias Ctrl 3 */
339 { 0x00000293, 0x0000 }, /* R659 - Accessory Detect Mode 1 */ 335 { 0x00000293, 0x0000 }, /* R659 - Accessory Detect Mode 1 */
340 { 0x0000029B, 0x0020 }, /* R667 - Headphone Detect 1 */ 336 { 0x0000029B, 0x0020 }, /* R667 - Headphone Detect 1 */
341 { 0x0000029C, 0x0000 }, /* R668 - Headphone Detect 2 */
342 { 0x0000029F, 0x0000 }, /* R671 - Headphone Detect Test */
343 { 0x000002A2, 0x0000 }, /* R674 - Micd clamp control */ 337 { 0x000002A2, 0x0000 }, /* R674 - Micd clamp control */
344 { 0x000002A3, 0x1102 }, /* R675 - Mic Detect 1 */ 338 { 0x000002A3, 0x1102 }, /* R675 - Mic Detect 1 */
345 { 0x000002A4, 0x009F }, /* R676 - Mic Detect 2 */ 339 { 0x000002A4, 0x009F }, /* R676 - Mic Detect 2 */
346 { 0x000002A5, 0x0000 }, /* R677 - Mic Detect 3 */
347 { 0x000002A6, 0x3737 }, /* R678 - Mic Detect Level 1 */ 340 { 0x000002A6, 0x3737 }, /* R678 - Mic Detect Level 1 */
348 { 0x000002A7, 0x372C }, /* R679 - Mic Detect Level 2 */ 341 { 0x000002A7, 0x372C }, /* R679 - Mic Detect Level 2 */
349 { 0x000002A8, 0x1422 }, /* R680 - Mic Detect Level 3 */ 342 { 0x000002A8, 0x1422 }, /* R680 - Mic Detect Level 3 */
@@ -887,11 +880,11 @@ static const struct reg_default wm5102_reg_default[] = {
887 { 0x00000D1B, 0xFFFF }, /* R3355 - IRQ2 Status 4 Mask */ 880 { 0x00000D1B, 0xFFFF }, /* R3355 - IRQ2 Status 4 Mask */
888 { 0x00000D1C, 0xFFFF }, /* R3356 - IRQ2 Status 5 Mask */ 881 { 0x00000D1C, 0xFFFF }, /* R3356 - IRQ2 Status 5 Mask */
889 { 0x00000D1F, 0x0000 }, /* R3359 - IRQ2 Control */ 882 { 0x00000D1F, 0x0000 }, /* R3359 - IRQ2 Control */
883 { 0x00000D41, 0x0000 }, /* R3393 - ADSP2 IRQ0 */
890 { 0x00000D53, 0xFFFF }, /* R3411 - AOD IRQ Mask IRQ1 */ 884 { 0x00000D53, 0xFFFF }, /* R3411 - AOD IRQ Mask IRQ1 */
891 { 0x00000D54, 0xFFFF }, /* R3412 - AOD IRQ Mask IRQ2 */ 885 { 0x00000D54, 0xFFFF }, /* R3412 - AOD IRQ Mask IRQ2 */
892 { 0x00000D56, 0x0000 }, /* R3414 - Jack detect debounce */ 886 { 0x00000D56, 0x0000 }, /* R3414 - Jack detect debounce */
893 { 0x00000E00, 0x0000 }, /* R3584 - FX_Ctrl1 */ 887 { 0x00000E00, 0x0000 }, /* R3584 - FX_Ctrl1 */
894 { 0x00000E01, 0x0000 }, /* R3585 - FX_Ctrl2 */
895 { 0x00000E10, 0x6318 }, /* R3600 - EQ1_1 */ 888 { 0x00000E10, 0x6318 }, /* R3600 - EQ1_1 */
896 { 0x00000E11, 0x6300 }, /* R3601 - EQ1_2 */ 889 { 0x00000E11, 0x6300 }, /* R3601 - EQ1_2 */
897 { 0x00000E12, 0x0FC8 }, /* R3602 - EQ1_3 */ 890 { 0x00000E12, 0x0FC8 }, /* R3602 - EQ1_3 */
@@ -991,6 +984,7 @@ static const struct reg_default wm5102_reg_default[] = {
991 { 0x00000ECD, 0x0000 }, /* R3789 - HPLPF4_2 */ 984 { 0x00000ECD, 0x0000 }, /* R3789 - HPLPF4_2 */
992 { 0x00000EE0, 0x0000 }, /* R3808 - ASRC_ENABLE */ 985 { 0x00000EE0, 0x0000 }, /* R3808 - ASRC_ENABLE */
993 { 0x00000EE2, 0x0000 }, /* R3810 - ASRC_RATE1 */ 986 { 0x00000EE2, 0x0000 }, /* R3810 - ASRC_RATE1 */
987 { 0x00000EE3, 0x0400 }, /* R3811 - ASRC_RATE2 */
994 { 0x00000EF0, 0x0000 }, /* R3824 - ISRC 1 CTRL 1 */ 988 { 0x00000EF0, 0x0000 }, /* R3824 - ISRC 1 CTRL 1 */
995 { 0x00000EF1, 0x0000 }, /* R3825 - ISRC 1 CTRL 2 */ 989 { 0x00000EF1, 0x0000 }, /* R3825 - ISRC 1 CTRL 2 */
996 { 0x00000EF2, 0x0000 }, /* R3826 - ISRC 1 CTRL 3 */ 990 { 0x00000EF2, 0x0000 }, /* R3826 - ISRC 1 CTRL 3 */
@@ -998,7 +992,6 @@ static const struct reg_default wm5102_reg_default[] = {
998 { 0x00000EF4, 0x0000 }, /* R3828 - ISRC 2 CTRL 2 */ 992 { 0x00000EF4, 0x0000 }, /* R3828 - ISRC 2 CTRL 2 */
999 { 0x00000EF5, 0x0000 }, /* R3829 - ISRC 2 CTRL 3 */ 993 { 0x00000EF5, 0x0000 }, /* R3829 - ISRC 2 CTRL 3 */
1000 { 0x00001100, 0x0010 }, /* R4352 - DSP1 Control 1 */ 994 { 0x00001100, 0x0010 }, /* R4352 - DSP1 Control 1 */
1001 { 0x00001101, 0x0000 }, /* R4353 - DSP1 Clocking 1 */
1002}; 995};
1003 996
1004static bool wm5102_readable_register(struct device *dev, unsigned int reg) 997static bool wm5102_readable_register(struct device *dev, unsigned int reg)
@@ -1008,12 +1001,10 @@ static bool wm5102_readable_register(struct device *dev, unsigned int reg)
1008 case ARIZONA_DEVICE_REVISION: 1001 case ARIZONA_DEVICE_REVISION:
1009 case ARIZONA_CTRL_IF_SPI_CFG_1: 1002 case ARIZONA_CTRL_IF_SPI_CFG_1:
1010 case ARIZONA_CTRL_IF_I2C1_CFG_1: 1003 case ARIZONA_CTRL_IF_I2C1_CFG_1:
1011 case ARIZONA_CTRL_IF_STATUS_1:
1012 case ARIZONA_WRITE_SEQUENCER_CTRL_0: 1004 case ARIZONA_WRITE_SEQUENCER_CTRL_0:
1013 case ARIZONA_WRITE_SEQUENCER_CTRL_1: 1005 case ARIZONA_WRITE_SEQUENCER_CTRL_1:
1014 case ARIZONA_WRITE_SEQUENCER_CTRL_2: 1006 case ARIZONA_WRITE_SEQUENCER_CTRL_2:
1015 case ARIZONA_WRITE_SEQUENCER_CTRL_3: 1007 case ARIZONA_WRITE_SEQUENCER_CTRL_3:
1016 case ARIZONA_WRITE_SEQUENCER_PROM:
1017 case ARIZONA_TONE_GENERATOR_1: 1008 case ARIZONA_TONE_GENERATOR_1:
1018 case ARIZONA_TONE_GENERATOR_2: 1009 case ARIZONA_TONE_GENERATOR_2:
1019 case ARIZONA_TONE_GENERATOR_3: 1010 case ARIZONA_TONE_GENERATOR_3:
@@ -1034,8 +1025,6 @@ static bool wm5102_readable_register(struct device *dev, unsigned int reg)
1034 case ARIZONA_ALWAYS_ON_TRIGGERS_SEQUENCE_SELECT_4: 1025 case ARIZONA_ALWAYS_ON_TRIGGERS_SEQUENCE_SELECT_4:
1035 case ARIZONA_ALWAYS_ON_TRIGGERS_SEQUENCE_SELECT_5: 1026 case ARIZONA_ALWAYS_ON_TRIGGERS_SEQUENCE_SELECT_5:
1036 case ARIZONA_ALWAYS_ON_TRIGGERS_SEQUENCE_SELECT_6: 1027 case ARIZONA_ALWAYS_ON_TRIGGERS_SEQUENCE_SELECT_6:
1037 case ARIZONA_ALWAYS_ON_TRIGGERS_SEQUENCE_SELECT_7:
1038 case ARIZONA_ALWAYS_ON_TRIGGERS_SEQUENCE_SELECT_8:
1039 case ARIZONA_COMFORT_NOISE_GENERATOR: 1028 case ARIZONA_COMFORT_NOISE_GENERATOR:
1040 case ARIZONA_HAPTICS_CONTROL_1: 1029 case ARIZONA_HAPTICS_CONTROL_1:
1041 case ARIZONA_HAPTICS_CONTROL_2: 1030 case ARIZONA_HAPTICS_CONTROL_2:
@@ -1176,7 +1165,6 @@ static bool wm5102_readable_register(struct device *dev, unsigned int reg)
1176 case ARIZONA_DAC_DIGITAL_VOLUME_4L: 1165 case ARIZONA_DAC_DIGITAL_VOLUME_4L:
1177 case ARIZONA_OUT_VOLUME_4L: 1166 case ARIZONA_OUT_VOLUME_4L:
1178 case ARIZONA_NOISE_GATE_SELECT_4L: 1167 case ARIZONA_NOISE_GATE_SELECT_4L:
1179 case ARIZONA_OUTPUT_PATH_CONFIG_4R:
1180 case ARIZONA_DAC_DIGITAL_VOLUME_4R: 1168 case ARIZONA_DAC_DIGITAL_VOLUME_4R:
1181 case ARIZONA_OUT_VOLUME_4R: 1169 case ARIZONA_OUT_VOLUME_4R:
1182 case ARIZONA_NOISE_GATE_SELECT_4R: 1170 case ARIZONA_NOISE_GATE_SELECT_4R:
@@ -1184,7 +1172,6 @@ static bool wm5102_readable_register(struct device *dev, unsigned int reg)
1184 case ARIZONA_DAC_DIGITAL_VOLUME_5L: 1172 case ARIZONA_DAC_DIGITAL_VOLUME_5L:
1185 case ARIZONA_DAC_VOLUME_LIMIT_5L: 1173 case ARIZONA_DAC_VOLUME_LIMIT_5L:
1186 case ARIZONA_NOISE_GATE_SELECT_5L: 1174 case ARIZONA_NOISE_GATE_SELECT_5L:
1187 case ARIZONA_OUTPUT_PATH_CONFIG_5R:
1188 case ARIZONA_DAC_DIGITAL_VOLUME_5R: 1175 case ARIZONA_DAC_DIGITAL_VOLUME_5R:
1189 case ARIZONA_DAC_VOLUME_LIMIT_5R: 1176 case ARIZONA_DAC_VOLUME_LIMIT_5R:
1190 case ARIZONA_NOISE_GATE_SELECT_5R: 1177 case ARIZONA_NOISE_GATE_SELECT_5R:
@@ -1195,8 +1182,6 @@ static bool wm5102_readable_register(struct device *dev, unsigned int reg)
1195 case ARIZONA_NOISE_GATE_CONTROL: 1182 case ARIZONA_NOISE_GATE_CONTROL:
1196 case ARIZONA_PDM_SPK1_CTRL_1: 1183 case ARIZONA_PDM_SPK1_CTRL_1:
1197 case ARIZONA_PDM_SPK1_CTRL_2: 1184 case ARIZONA_PDM_SPK1_CTRL_2:
1198 case ARIZONA_SPK_CTRL_2:
1199 case ARIZONA_SPK_CTRL_3:
1200 case ARIZONA_DAC_COMP_1: 1185 case ARIZONA_DAC_COMP_1:
1201 case ARIZONA_DAC_COMP_2: 1186 case ARIZONA_DAC_COMP_2:
1202 case ARIZONA_DAC_COMP_3: 1187 case ARIZONA_DAC_COMP_3:
@@ -1228,7 +1213,6 @@ static bool wm5102_readable_register(struct device *dev, unsigned int reg)
1228 case ARIZONA_AIF1_FRAME_CTRL_18: 1213 case ARIZONA_AIF1_FRAME_CTRL_18:
1229 case ARIZONA_AIF1_TX_ENABLES: 1214 case ARIZONA_AIF1_TX_ENABLES:
1230 case ARIZONA_AIF1_RX_ENABLES: 1215 case ARIZONA_AIF1_RX_ENABLES:
1231 case ARIZONA_AIF1_FORCE_WRITE:
1232 case ARIZONA_AIF2_BCLK_CTRL: 1216 case ARIZONA_AIF2_BCLK_CTRL:
1233 case ARIZONA_AIF2_TX_PIN_CTRL: 1217 case ARIZONA_AIF2_TX_PIN_CTRL:
1234 case ARIZONA_AIF2_RX_PIN_CTRL: 1218 case ARIZONA_AIF2_RX_PIN_CTRL:
@@ -1244,7 +1228,6 @@ static bool wm5102_readable_register(struct device *dev, unsigned int reg)
1244 case ARIZONA_AIF2_FRAME_CTRL_12: 1228 case ARIZONA_AIF2_FRAME_CTRL_12:
1245 case ARIZONA_AIF2_TX_ENABLES: 1229 case ARIZONA_AIF2_TX_ENABLES:
1246 case ARIZONA_AIF2_RX_ENABLES: 1230 case ARIZONA_AIF2_RX_ENABLES:
1247 case ARIZONA_AIF2_FORCE_WRITE:
1248 case ARIZONA_AIF3_BCLK_CTRL: 1231 case ARIZONA_AIF3_BCLK_CTRL:
1249 case ARIZONA_AIF3_TX_PIN_CTRL: 1232 case ARIZONA_AIF3_TX_PIN_CTRL:
1250 case ARIZONA_AIF3_RX_PIN_CTRL: 1233 case ARIZONA_AIF3_RX_PIN_CTRL:
@@ -1260,7 +1243,6 @@ static bool wm5102_readable_register(struct device *dev, unsigned int reg)
1260 case ARIZONA_AIF3_FRAME_CTRL_12: 1243 case ARIZONA_AIF3_FRAME_CTRL_12:
1261 case ARIZONA_AIF3_TX_ENABLES: 1244 case ARIZONA_AIF3_TX_ENABLES:
1262 case ARIZONA_AIF3_RX_ENABLES: 1245 case ARIZONA_AIF3_RX_ENABLES:
1263 case ARIZONA_AIF3_FORCE_WRITE:
1264 case ARIZONA_SLIMBUS_FRAMER_REF_GEAR: 1246 case ARIZONA_SLIMBUS_FRAMER_REF_GEAR:
1265 case ARIZONA_SLIMBUS_RATES_1: 1247 case ARIZONA_SLIMBUS_RATES_1:
1266 case ARIZONA_SLIMBUS_RATES_2: 1248 case ARIZONA_SLIMBUS_RATES_2:
@@ -1586,22 +1568,6 @@ static bool wm5102_readable_register(struct device *dev, unsigned int reg)
1586 case ARIZONA_DRC1RMIX_INPUT_3_VOLUME: 1568 case ARIZONA_DRC1RMIX_INPUT_3_VOLUME:
1587 case ARIZONA_DRC1RMIX_INPUT_4_SOURCE: 1569 case ARIZONA_DRC1RMIX_INPUT_4_SOURCE:
1588 case ARIZONA_DRC1RMIX_INPUT_4_VOLUME: 1570 case ARIZONA_DRC1RMIX_INPUT_4_VOLUME:
1589 case ARIZONA_DRC2LMIX_INPUT_1_SOURCE:
1590 case ARIZONA_DRC2LMIX_INPUT_1_VOLUME:
1591 case ARIZONA_DRC2LMIX_INPUT_2_SOURCE:
1592 case ARIZONA_DRC2LMIX_INPUT_2_VOLUME:
1593 case ARIZONA_DRC2LMIX_INPUT_3_SOURCE:
1594 case ARIZONA_DRC2LMIX_INPUT_3_VOLUME:
1595 case ARIZONA_DRC2LMIX_INPUT_4_SOURCE:
1596 case ARIZONA_DRC2LMIX_INPUT_4_VOLUME:
1597 case ARIZONA_DRC2RMIX_INPUT_1_SOURCE:
1598 case ARIZONA_DRC2RMIX_INPUT_1_VOLUME:
1599 case ARIZONA_DRC2RMIX_INPUT_2_SOURCE:
1600 case ARIZONA_DRC2RMIX_INPUT_2_VOLUME:
1601 case ARIZONA_DRC2RMIX_INPUT_3_SOURCE:
1602 case ARIZONA_DRC2RMIX_INPUT_3_VOLUME:
1603 case ARIZONA_DRC2RMIX_INPUT_4_SOURCE:
1604 case ARIZONA_DRC2RMIX_INPUT_4_VOLUME:
1605 case ARIZONA_HPLP1MIX_INPUT_1_SOURCE: 1571 case ARIZONA_HPLP1MIX_INPUT_1_SOURCE:
1606 case ARIZONA_HPLP1MIX_INPUT_1_VOLUME: 1572 case ARIZONA_HPLP1MIX_INPUT_1_VOLUME:
1607 case ARIZONA_HPLP1MIX_INPUT_2_SOURCE: 1573 case ARIZONA_HPLP1MIX_INPUT_2_SOURCE:
@@ -1810,11 +1776,6 @@ static bool wm5102_readable_register(struct device *dev, unsigned int reg)
1810 case ARIZONA_DRC1_CTRL3: 1776 case ARIZONA_DRC1_CTRL3:
1811 case ARIZONA_DRC1_CTRL4: 1777 case ARIZONA_DRC1_CTRL4:
1812 case ARIZONA_DRC1_CTRL5: 1778 case ARIZONA_DRC1_CTRL5:
1813 case ARIZONA_DRC2_CTRL1:
1814 case ARIZONA_DRC2_CTRL2:
1815 case ARIZONA_DRC2_CTRL3:
1816 case ARIZONA_DRC2_CTRL4:
1817 case ARIZONA_DRC2_CTRL5:
1818 case ARIZONA_HPLPF1_1: 1779 case ARIZONA_HPLPF1_1:
1819 case ARIZONA_HPLPF1_2: 1780 case ARIZONA_HPLPF1_2:
1820 case ARIZONA_HPLPF2_1: 1781 case ARIZONA_HPLPF2_1:
@@ -1832,9 +1793,6 @@ static bool wm5102_readable_register(struct device *dev, unsigned int reg)
1832 case ARIZONA_ISRC_2_CTRL_1: 1793 case ARIZONA_ISRC_2_CTRL_1:
1833 case ARIZONA_ISRC_2_CTRL_2: 1794 case ARIZONA_ISRC_2_CTRL_2:
1834 case ARIZONA_ISRC_2_CTRL_3: 1795 case ARIZONA_ISRC_2_CTRL_3:
1835 case ARIZONA_ISRC_3_CTRL_1:
1836 case ARIZONA_ISRC_3_CTRL_2:
1837 case ARIZONA_ISRC_3_CTRL_3:
1838 case ARIZONA_DSP1_CONTROL_1: 1796 case ARIZONA_DSP1_CONTROL_1:
1839 case ARIZONA_DSP1_CLOCKING_1: 1797 case ARIZONA_DSP1_CLOCKING_1:
1840 case ARIZONA_DSP1_STATUS_1: 1798 case ARIZONA_DSP1_STATUS_1:
@@ -1883,7 +1841,6 @@ static bool wm5102_volatile_register(struct device *dev, unsigned int reg)
1883 case ARIZONA_WRITE_SEQUENCER_CTRL_2: 1841 case ARIZONA_WRITE_SEQUENCER_CTRL_2:
1884 case ARIZONA_WRITE_SEQUENCER_CTRL_3: 1842 case ARIZONA_WRITE_SEQUENCER_CTRL_3:
1885 case ARIZONA_OUTPUT_STATUS_1: 1843 case ARIZONA_OUTPUT_STATUS_1:
1886 case ARIZONA_RAW_OUTPUT_STATUS_1:
1887 case ARIZONA_SLIMBUS_RX_PORT_STATUS: 1844 case ARIZONA_SLIMBUS_RX_PORT_STATUS:
1888 case ARIZONA_SLIMBUS_TX_PORT_STATUS: 1845 case ARIZONA_SLIMBUS_TX_PORT_STATUS:
1889 case ARIZONA_SAMPLE_RATE_1_STATUS: 1846 case ARIZONA_SAMPLE_RATE_1_STATUS:
@@ -1969,6 +1926,8 @@ const struct regmap_config wm5102_spi_regmap = {
1969 .reg_bits = 32, 1926 .reg_bits = 32,
1970 .pad_bits = 16, 1927 .pad_bits = 16,
1971 .val_bits = 16, 1928 .val_bits = 16,
1929 .reg_format_endian = REGMAP_ENDIAN_BIG,
1930 .val_format_endian = REGMAP_ENDIAN_BIG,
1972 1931
1973 .max_register = WM5102_MAX_REGISTER, 1932 .max_register = WM5102_MAX_REGISTER,
1974 .readable_reg = wm5102_readable_register, 1933 .readable_reg = wm5102_readable_register,
@@ -1983,6 +1942,8 @@ EXPORT_SYMBOL_GPL(wm5102_spi_regmap);
1983const struct regmap_config wm5102_i2c_regmap = { 1942const struct regmap_config wm5102_i2c_regmap = {
1984 .reg_bits = 32, 1943 .reg_bits = 32,
1985 .val_bits = 16, 1944 .val_bits = 16,
1945 .reg_format_endian = REGMAP_ENDIAN_BIG,
1946 .val_format_endian = REGMAP_ENDIAN_BIG,
1986 1947
1987 .max_register = WM5102_MAX_REGISTER, 1948 .max_register = WM5102_MAX_REGISTER,
1988 .readable_reg = wm5102_readable_register, 1949 .readable_reg = wm5102_readable_register,
diff --git a/drivers/mfd/wm5110-tables.c b/drivers/mfd/wm5110-tables.c
index 12cad94b4035..19785a6bcac6 100644
--- a/drivers/mfd/wm5110-tables.c
+++ b/drivers/mfd/wm5110-tables.c
@@ -754,11 +754,9 @@ static const struct reg_default wm5110_reg_default[] = {
754 { 0x0000021A, 0x01A6 }, /* R538 - Mic Bias Ctrl 3 */ 754 { 0x0000021A, 0x01A6 }, /* R538 - Mic Bias Ctrl 3 */
755 { 0x00000293, 0x0000 }, /* R659 - Accessory Detect Mode 1 */ 755 { 0x00000293, 0x0000 }, /* R659 - Accessory Detect Mode 1 */
756 { 0x0000029B, 0x0028 }, /* R667 - Headphone Detect 1 */ 756 { 0x0000029B, 0x0028 }, /* R667 - Headphone Detect 1 */
757 { 0x0000029C, 0x0000 }, /* R668 - Headphone Detect 2 */
758 { 0x000002A2, 0x0000 }, /* R674 - Micd clamp control */ 757 { 0x000002A2, 0x0000 }, /* R674 - Micd clamp control */
759 { 0x000002A3, 0x1102 }, /* R675 - Mic Detect 1 */ 758 { 0x000002A3, 0x1102 }, /* R675 - Mic Detect 1 */
760 { 0x000002A4, 0x009F }, /* R676 - Mic Detect 2 */ 759 { 0x000002A4, 0x009F }, /* R676 - Mic Detect 2 */
761 { 0x000002A5, 0x0000 }, /* R677 - Mic Detect 3 */
762 { 0x000002A6, 0x3737 }, /* R678 - Mic Detect Level 1 */ 760 { 0x000002A6, 0x3737 }, /* R678 - Mic Detect Level 1 */
763 { 0x000002A7, 0x372C }, /* R679 - Mic Detect Level 2 */ 761 { 0x000002A7, 0x372C }, /* R679 - Mic Detect Level 2 */
764 { 0x000002A8, 0x1422 }, /* R680 - Mic Detect Level 3 */ 762 { 0x000002A8, 0x1422 }, /* R680 - Mic Detect Level 3 */
@@ -848,8 +846,6 @@ static const struct reg_default wm5110_reg_default[] = {
848 { 0x00000440, 0x8FFF }, /* R1088 - DRE Enable */ 846 { 0x00000440, 0x8FFF }, /* R1088 - DRE Enable */
849 { 0x00000450, 0x0000 }, /* R1104 - DAC AEC Control 1 */ 847 { 0x00000450, 0x0000 }, /* R1104 - DAC AEC Control 1 */
850 { 0x00000458, 0x0000 }, /* R1112 - Noise Gate Control */ 848 { 0x00000458, 0x0000 }, /* R1112 - Noise Gate Control */
851 { 0x00000480, 0x0040 }, /* R1152 - Class W ANC Threshold 1 */
852 { 0x00000481, 0x0040 }, /* R1153 - Class W ANC Threshold 2 */
853 { 0x00000490, 0x0069 }, /* R1168 - PDM SPK1 CTRL 1 */ 849 { 0x00000490, 0x0069 }, /* R1168 - PDM SPK1 CTRL 1 */
854 { 0x00000491, 0x0000 }, /* R1169 - PDM SPK1 CTRL 2 */ 850 { 0x00000491, 0x0000 }, /* R1169 - PDM SPK1 CTRL 2 */
855 { 0x00000492, 0x0069 }, /* R1170 - PDM SPK2 CTRL 1 */ 851 { 0x00000492, 0x0069 }, /* R1170 - PDM SPK2 CTRL 1 */
@@ -1508,7 +1504,6 @@ static const struct reg_default wm5110_reg_default[] = {
1508 { 0x00000D54, 0xFFFF }, /* R3412 - AOD IRQ Mask IRQ2 */ 1504 { 0x00000D54, 0xFFFF }, /* R3412 - AOD IRQ Mask IRQ2 */
1509 { 0x00000D56, 0x0000 }, /* R3414 - Jack detect debounce */ 1505 { 0x00000D56, 0x0000 }, /* R3414 - Jack detect debounce */
1510 { 0x00000E00, 0x0000 }, /* R3584 - FX_Ctrl1 */ 1506 { 0x00000E00, 0x0000 }, /* R3584 - FX_Ctrl1 */
1511 { 0x00000E01, 0x0000 }, /* R3585 - FX_Ctrl2 */
1512 { 0x00000E10, 0x6318 }, /* R3600 - EQ1_1 */ 1507 { 0x00000E10, 0x6318 }, /* R3600 - EQ1_1 */
1513 { 0x00000E11, 0x6300 }, /* R3601 - EQ1_2 */ 1508 { 0x00000E11, 0x6300 }, /* R3601 - EQ1_2 */
1514 { 0x00000E12, 0x0FC8 }, /* R3602 - EQ1_3 */ 1509 { 0x00000E12, 0x0FC8 }, /* R3602 - EQ1_3 */
@@ -1625,14 +1620,9 @@ static const struct reg_default wm5110_reg_default[] = {
1625 { 0x00000F00, 0x0000 }, /* R3840 - Clock Control */ 1620 { 0x00000F00, 0x0000 }, /* R3840 - Clock Control */
1626 { 0x00000F01, 0x0000 }, /* R3841 - ANC_SRC */ 1621 { 0x00000F01, 0x0000 }, /* R3841 - ANC_SRC */
1627 { 0x00001100, 0x0010 }, /* R4352 - DSP1 Control 1 */ 1622 { 0x00001100, 0x0010 }, /* R4352 - DSP1 Control 1 */
1628 { 0x00001101, 0x0000 }, /* R4353 - DSP1 Clocking 1 */
1629 { 0x00001200, 0x0010 }, /* R4608 - DSP2 Control 1 */ 1623 { 0x00001200, 0x0010 }, /* R4608 - DSP2 Control 1 */
1630 { 0x00001201, 0x0000 }, /* R4609 - DSP2 Clocking 1 */
1631 { 0x00001300, 0x0010 }, /* R4864 - DSP3 Control 1 */ 1624 { 0x00001300, 0x0010 }, /* R4864 - DSP3 Control 1 */
1632 { 0x00001301, 0x0000 }, /* R4865 - DSP3 Clocking 1 */
1633 { 0x00001400, 0x0010 }, /* R5120 - DSP4 Control 1 */ 1625 { 0x00001400, 0x0010 }, /* R5120 - DSP4 Control 1 */
1634 { 0x00001401, 0x0000 }, /* R5121 - DSP4 Clocking 1 */
1635 { 0x00001404, 0x0000 }, /* R5124 - DSP4 Status 1 */
1636}; 1626};
1637 1627
1638static bool wm5110_is_rev_b_adsp_memory(unsigned int reg) 1628static bool wm5110_is_rev_b_adsp_memory(unsigned int reg)
@@ -3007,6 +2997,8 @@ const struct regmap_config wm5110_spi_regmap = {
3007 .reg_bits = 32, 2997 .reg_bits = 32,
3008 .pad_bits = 16, 2998 .pad_bits = 16,
3009 .val_bits = 16, 2999 .val_bits = 16,
3000 .reg_format_endian = REGMAP_ENDIAN_BIG,
3001 .val_format_endian = REGMAP_ENDIAN_BIG,
3010 3002
3011 .max_register = WM5110_MAX_REGISTER, 3003 .max_register = WM5110_MAX_REGISTER,
3012 .readable_reg = wm5110_readable_register, 3004 .readable_reg = wm5110_readable_register,
@@ -3021,6 +3013,8 @@ EXPORT_SYMBOL_GPL(wm5110_spi_regmap);
3021const struct regmap_config wm5110_i2c_regmap = { 3013const struct regmap_config wm5110_i2c_regmap = {
3022 .reg_bits = 32, 3014 .reg_bits = 32,
3023 .val_bits = 16, 3015 .val_bits = 16,
3016 .reg_format_endian = REGMAP_ENDIAN_BIG,
3017 .val_format_endian = REGMAP_ENDIAN_BIG,
3024 3018
3025 .max_register = WM5110_MAX_REGISTER, 3019 .max_register = WM5110_MAX_REGISTER,
3026 .readable_reg = wm5110_readable_register, 3020 .readable_reg = wm5110_readable_register,
diff --git a/drivers/mfd/wm831x-i2c.c b/drivers/mfd/wm831x-i2c.c
index a4cbefe5430f..824bcbaa9624 100644
--- a/drivers/mfd/wm831x-i2c.c
+++ b/drivers/mfd/wm831x-i2c.c
@@ -93,7 +93,6 @@ static const struct dev_pm_ops wm831x_pm_ops = {
93static struct i2c_driver wm831x_i2c_driver = { 93static struct i2c_driver wm831x_i2c_driver = {
94 .driver = { 94 .driver = {
95 .name = "wm831x", 95 .name = "wm831x",
96 .owner = THIS_MODULE,
97 .pm = &wm831x_pm_ops, 96 .pm = &wm831x_pm_ops,
98 }, 97 },
99 .probe = wm831x_i2c_probe, 98 .probe = wm831x_i2c_probe,
diff --git a/drivers/mfd/wm831x-irq.c b/drivers/mfd/wm831x-irq.c
index 3da81263c764..dfea8b9c2fe6 100644
--- a/drivers/mfd/wm831x-irq.c
+++ b/drivers/mfd/wm831x-irq.c
@@ -552,14 +552,7 @@ static int wm831x_irq_map(struct irq_domain *h, unsigned int virq,
552 irq_set_chip_data(virq, h->host_data); 552 irq_set_chip_data(virq, h->host_data);
553 irq_set_chip_and_handler(virq, &wm831x_irq_chip, handle_edge_irq); 553 irq_set_chip_and_handler(virq, &wm831x_irq_chip, handle_edge_irq);
554 irq_set_nested_thread(virq, 1); 554 irq_set_nested_thread(virq, 1);
555
556 /* ARM needs us to explicitly flag the IRQ as valid
557 * and will set them noprobe when we do so. */
558#ifdef CONFIG_ARM
559 set_irq_flags(virq, IRQF_VALID);
560#else
561 irq_set_noprobe(virq); 555 irq_set_noprobe(virq);
562#endif
563 556
564 return 0; 557 return 0;
565} 558}
diff --git a/drivers/mfd/wm8350-i2c.c b/drivers/mfd/wm8350-i2c.c
index 6a16a8a6f9fa..9358f03b7938 100644
--- a/drivers/mfd/wm8350-i2c.c
+++ b/drivers/mfd/wm8350-i2c.c
@@ -69,7 +69,6 @@ MODULE_DEVICE_TABLE(i2c, wm8350_i2c_id);
69static struct i2c_driver wm8350_i2c_driver = { 69static struct i2c_driver wm8350_i2c_driver = {
70 .driver = { 70 .driver = {
71 .name = "wm8350", 71 .name = "wm8350",
72 .owner = THIS_MODULE,
73 }, 72 },
74 .probe = wm8350_i2c_probe, 73 .probe = wm8350_i2c_probe,
75 .remove = wm8350_i2c_remove, 74 .remove = wm8350_i2c_remove,
diff --git a/drivers/mfd/wm8350-irq.c b/drivers/mfd/wm8350-irq.c
index 813ff50f95b6..27054f357b8e 100644
--- a/drivers/mfd/wm8350-irq.c
+++ b/drivers/mfd/wm8350-irq.c
@@ -526,13 +526,7 @@ int wm8350_irq_init(struct wm8350 *wm8350, int irq,
526 handle_edge_irq); 526 handle_edge_irq);
527 irq_set_nested_thread(cur_irq, 1); 527 irq_set_nested_thread(cur_irq, 1);
528 528
529 /* ARM needs us to explicitly flag the IRQ as valid 529 irq_clear_status_flags(cur_irq, IRQ_NOREQUEST | IRQ_NOPROBE);
530 * and will set them noprobe when we do so. */
531#ifdef CONFIG_ARM
532 set_irq_flags(cur_irq, IRQF_VALID);
533#else
534 irq_set_noprobe(cur_irq);
535#endif
536 } 530 }
537 531
538 ret = request_threaded_irq(irq, NULL, wm8350_irq, flags, 532 ret = request_threaded_irq(irq, NULL, wm8350_irq, flags,
diff --git a/drivers/mfd/wm8400-core.c b/drivers/mfd/wm8400-core.c
index c6fb5d16ca09..3bd44a45c378 100644
--- a/drivers/mfd/wm8400-core.c
+++ b/drivers/mfd/wm8400-core.c
@@ -194,7 +194,6 @@ MODULE_DEVICE_TABLE(i2c, wm8400_i2c_id);
194static struct i2c_driver wm8400_i2c_driver = { 194static struct i2c_driver wm8400_i2c_driver = {
195 .driver = { 195 .driver = {
196 .name = "WM8400", 196 .name = "WM8400",
197 .owner = THIS_MODULE,
198 }, 197 },
199 .probe = wm8400_i2c_probe, 198 .probe = wm8400_i2c_probe,
200 .remove = wm8400_i2c_remove, 199 .remove = wm8400_i2c_remove,
diff --git a/drivers/mfd/wm8994-core.c b/drivers/mfd/wm8994-core.c
index 53ae5af5d6e4..213da3416778 100644
--- a/drivers/mfd/wm8994-core.c
+++ b/drivers/mfd/wm8994-core.c
@@ -677,7 +677,6 @@ static const struct dev_pm_ops wm8994_pm_ops = {
677static struct i2c_driver wm8994_i2c_driver = { 677static struct i2c_driver wm8994_i2c_driver = {
678 .driver = { 678 .driver = {
679 .name = "wm8994", 679 .name = "wm8994",
680 .owner = THIS_MODULE,
681 .pm = &wm8994_pm_ops, 680 .pm = &wm8994_pm_ops,
682 .of_match_table = of_match_ptr(wm8994_of_match), 681 .of_match_table = of_match_ptr(wm8994_of_match),
683 }, 682 },
diff --git a/drivers/mfd/wm8994-irq.c b/drivers/mfd/wm8994-irq.c
index 55c380a67686..18710f3b5c53 100644
--- a/drivers/mfd/wm8994-irq.c
+++ b/drivers/mfd/wm8994-irq.c
@@ -172,14 +172,7 @@ static int wm8994_edge_irq_map(struct irq_domain *h, unsigned int virq,
172 irq_set_chip_data(virq, wm8994); 172 irq_set_chip_data(virq, wm8994);
173 irq_set_chip_and_handler(virq, &wm8994_edge_irq_chip, handle_edge_irq); 173 irq_set_chip_and_handler(virq, &wm8994_edge_irq_chip, handle_edge_irq);
174 irq_set_nested_thread(virq, 1); 174 irq_set_nested_thread(virq, 1);
175
176 /* ARM needs us to explicitly flag the IRQ as valid
177 * and will set them noprobe when we do so. */
178#ifdef CONFIG_ARM
179 set_irq_flags(virq, IRQF_VALID);
180#else
181 irq_set_noprobe(virq); 175 irq_set_noprobe(virq);
182#endif
183 176
184 return 0; 177 return 0;
185} 178}
@@ -193,7 +186,7 @@ int wm8994_irq_init(struct wm8994 *wm8994)
193{ 186{
194 int ret; 187 int ret;
195 unsigned long irqflags; 188 unsigned long irqflags;
196 struct wm8994_pdata *pdata = dev_get_platdata(wm8994->dev); 189 struct wm8994_pdata *pdata = &wm8994->pdata;
197 190
198 if (!wm8994->irq) { 191 if (!wm8994->irq) {
199 dev_warn(wm8994->dev, 192 dev_warn(wm8994->dev,
diff --git a/drivers/mfd/wm8994-regmap.c b/drivers/mfd/wm8994-regmap.c
index 300e9b6a2e96..c56b1600ef3e 100644
--- a/drivers/mfd/wm8994-regmap.c
+++ b/drivers/mfd/wm8994-regmap.c
@@ -19,7 +19,7 @@
19 19
20#include "wm8994.h" 20#include "wm8994.h"
21 21
22static struct reg_default wm1811_defaults[] = { 22static const struct reg_default wm1811_defaults[] = {
23 { 0x0001, 0x0000 }, /* R1 - Power Management (1) */ 23 { 0x0001, 0x0000 }, /* R1 - Power Management (1) */
24 { 0x0002, 0x6000 }, /* R2 - Power Management (2) */ 24 { 0x0002, 0x6000 }, /* R2 - Power Management (2) */
25 { 0x0003, 0x0000 }, /* R3 - Power Management (3) */ 25 { 0x0003, 0x0000 }, /* R3 - Power Management (3) */
@@ -251,7 +251,7 @@ static struct reg_default wm1811_defaults[] = {
251 { 0x0748, 0x003F }, /* R1864 - IRQ Debounce */ 251 { 0x0748, 0x003F }, /* R1864 - IRQ Debounce */
252}; 252};
253 253
254static struct reg_default wm8994_defaults[] = { 254static const struct reg_default wm8994_defaults[] = {
255 { 0x0001, 0x0000 }, /* R1 - Power Management (1) */ 255 { 0x0001, 0x0000 }, /* R1 - Power Management (1) */
256 { 0x0002, 0x6000 }, /* R2 - Power Management (2) */ 256 { 0x0002, 0x6000 }, /* R2 - Power Management (2) */
257 { 0x0003, 0x0000 }, /* R3 - Power Management (3) */ 257 { 0x0003, 0x0000 }, /* R3 - Power Management (3) */
@@ -470,7 +470,7 @@ static struct reg_default wm8994_defaults[] = {
470 { 0x0748, 0x003F }, /* R1864 - IRQ Debounce */ 470 { 0x0748, 0x003F }, /* R1864 - IRQ Debounce */
471}; 471};
472 472
473static struct reg_default wm8958_defaults[] = { 473static const struct reg_default wm8958_defaults[] = {
474 { 0x0001, 0x0000 }, /* R1 - Power Management (1) */ 474 { 0x0001, 0x0000 }, /* R1 - Power Management (1) */
475 { 0x0002, 0x6000 }, /* R2 - Power Management (2) */ 475 { 0x0002, 0x6000 }, /* R2 - Power Management (2) */
476 { 0x0003, 0x0000 }, /* R3 - Power Management (3) */ 476 { 0x0003, 0x0000 }, /* R3 - Power Management (3) */
diff --git a/drivers/mfd/wm8997-tables.c b/drivers/mfd/wm8997-tables.c
index c0c25d75aacc..2a91473dc1ee 100644
--- a/drivers/mfd/wm8997-tables.c
+++ b/drivers/mfd/wm8997-tables.c
@@ -243,7 +243,6 @@ static const struct reg_default wm8997_reg_default[] = {
243 { 0x0000029B, 0x0020 }, /* R667 - Headphone Detect 1 */ 243 { 0x0000029B, 0x0020 }, /* R667 - Headphone Detect 1 */
244 { 0x000002A3, 0x1102 }, /* R675 - Mic Detect 1 */ 244 { 0x000002A3, 0x1102 }, /* R675 - Mic Detect 1 */
245 { 0x000002A4, 0x009F }, /* R676 - Mic Detect 2 */ 245 { 0x000002A4, 0x009F }, /* R676 - Mic Detect 2 */
246 { 0x000002A5, 0x0000 }, /* R677 - Mic Detect 3 */
247 { 0x000002C3, 0x0000 }, /* R707 - Mic noise mix control 1 */ 246 { 0x000002C3, 0x0000 }, /* R707 - Mic noise mix control 1 */
248 { 0x000002CB, 0x0000 }, /* R715 - Isolation control */ 247 { 0x000002CB, 0x0000 }, /* R715 - Isolation control */
249 { 0x000002D3, 0x0000 }, /* R723 - Jack detect analogue */ 248 { 0x000002D3, 0x0000 }, /* R723 - Jack detect analogue */
@@ -684,7 +683,6 @@ static const struct reg_default wm8997_reg_default[] = {
684 { 0x00000D54, 0xFFFF }, /* R3412 - AOD IRQ Mask IRQ2 */ 683 { 0x00000D54, 0xFFFF }, /* R3412 - AOD IRQ Mask IRQ2 */
685 { 0x00000D56, 0x0000 }, /* R3414 - Jack detect debounce */ 684 { 0x00000D56, 0x0000 }, /* R3414 - Jack detect debounce */
686 { 0x00000E00, 0x0000 }, /* R3584 - FX_Ctrl1 */ 685 { 0x00000E00, 0x0000 }, /* R3584 - FX_Ctrl1 */
687 { 0x00000E01, 0x0000 }, /* R3585 - FX_Ctrl2 */
688 { 0x00000E10, 0x6318 }, /* R3600 - EQ1_1 */ 686 { 0x00000E10, 0x6318 }, /* R3600 - EQ1_1 */
689 { 0x00000E11, 0x6300 }, /* R3601 - EQ1_2 */ 687 { 0x00000E11, 0x6300 }, /* R3601 - EQ1_2 */
690 { 0x00000E12, 0x0FC8 }, /* R3602 - EQ1_3 */ 688 { 0x00000E12, 0x0FC8 }, /* R3602 - EQ1_3 */
@@ -788,8 +786,6 @@ static const struct reg_default wm8997_reg_default[] = {
788 { 0x00000EF3, 0x0000 }, /* R3827 - ISRC 2 CTRL 1 */ 786 { 0x00000EF3, 0x0000 }, /* R3827 - ISRC 2 CTRL 1 */
789 { 0x00000EF4, 0x0000 }, /* R3828 - ISRC 2 CTRL 2 */ 787 { 0x00000EF4, 0x0000 }, /* R3828 - ISRC 2 CTRL 2 */
790 { 0x00000EF5, 0x0000 }, /* R3829 - ISRC 2 CTRL 3 */ 788 { 0x00000EF5, 0x0000 }, /* R3829 - ISRC 2 CTRL 3 */
791 { 0x00001100, 0x0010 }, /* R4352 - DSP1 Control 1 */
792 { 0x00001101, 0x0000 }, /* R4353 - DSP1 Clocking 1 */
793}; 789};
794 790
795static bool wm8997_readable_register(struct device *dev, unsigned int reg) 791static bool wm8997_readable_register(struct device *dev, unsigned int reg)
@@ -1480,6 +1476,8 @@ static bool wm8997_volatile_register(struct device *dev, unsigned int reg)
1480 case ARIZONA_SAMPLE_RATE_2_STATUS: 1476 case ARIZONA_SAMPLE_RATE_2_STATUS:
1481 case ARIZONA_SAMPLE_RATE_3_STATUS: 1477 case ARIZONA_SAMPLE_RATE_3_STATUS:
1482 case ARIZONA_ASYNC_SAMPLE_RATE_1_STATUS: 1478 case ARIZONA_ASYNC_SAMPLE_RATE_1_STATUS:
1479 case ARIZONA_FLL1_NCO_TEST_0:
1480 case ARIZONA_FLL2_NCO_TEST_0:
1483 case ARIZONA_MIC_DETECT_3: 1481 case ARIZONA_MIC_DETECT_3:
1484 case ARIZONA_HP_CTRL_1L: 1482 case ARIZONA_HP_CTRL_1L:
1485 case ARIZONA_HP_CTRL_1R: 1483 case ARIZONA_HP_CTRL_1R:
@@ -1521,6 +1519,8 @@ static bool wm8997_volatile_register(struct device *dev, unsigned int reg)
1521const struct regmap_config wm8997_i2c_regmap = { 1519const struct regmap_config wm8997_i2c_regmap = {
1522 .reg_bits = 32, 1520 .reg_bits = 32,
1523 .val_bits = 16, 1521 .val_bits = 16,
1522 .reg_format_endian = REGMAP_ENDIAN_BIG,
1523 .val_format_endian = REGMAP_ENDIAN_BIG,
1524 1524
1525 .max_register = WM8997_MAX_REGISTER, 1525 .max_register = WM8997_MAX_REGISTER,
1526 .readable_reg = wm8997_readable_register, 1526 .readable_reg = wm8997_readable_register,
diff --git a/drivers/mfd/wm8998-tables.c b/drivers/mfd/wm8998-tables.c
new file mode 100644
index 000000000000..e6de3cd8a9aa
--- /dev/null
+++ b/drivers/mfd/wm8998-tables.c
@@ -0,0 +1,1594 @@
1/*
2 * wm8998-tables.c -- data tables for wm8998-class codecs
3 *
4 * Copyright 2014 Wolfson Microelectronics plc
5 *
6 * Author: Richard Fitzgerald <rf@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#include <linux/device.h>
18
19#include "arizona.h"
20
21#define WM8998_NUM_AOD_ISR 2
22#define WM8998_NUM_ISR 5
23
24static const struct reg_default wm8998_rev_a_patch[] = {
25 { 0x0212, 0x0000 },
26 { 0x0211, 0x0014 },
27 { 0x04E4, 0x0E0D },
28 { 0x04E5, 0x0E0D },
29 { 0x04E6, 0x0E0D },
30 { 0x04EB, 0x060E },
31 { 0x0441, 0xC759 },
32 { 0x0442, 0x2A08 },
33 { 0x0443, 0x5CFA },
34 { 0x026E, 0x0064 },
35 { 0x026F, 0x00EA },
36 { 0x0270, 0x1F16 },
37 { 0x0410, 0x2080 },
38 { 0x0418, 0x2080 },
39 { 0x0420, 0x2080 },
40 { 0x04B8, 0x1120 },
41 { 0x047E, 0x080E },
42 { 0x0448, 0x03EF },
43};
44
45/* We use a function so we can use ARRAY_SIZE() */
46int wm8998_patch(struct arizona *arizona)
47{
48 return regmap_register_patch(arizona->regmap,
49 wm8998_rev_a_patch,
50 ARRAY_SIZE(wm8998_rev_a_patch));
51}
52
53static const struct regmap_irq wm8998_aod_irqs[ARIZONA_NUM_IRQ] = {
54 [ARIZONA_IRQ_MICD_CLAMP_FALL] = {
55 .mask = ARIZONA_MICD_CLAMP_FALL_EINT1
56 },
57 [ARIZONA_IRQ_MICD_CLAMP_RISE] = {
58 .mask = ARIZONA_MICD_CLAMP_RISE_EINT1
59 },
60 [ARIZONA_IRQ_GP5_FALL] = { .mask = ARIZONA_GP5_FALL_EINT1 },
61 [ARIZONA_IRQ_GP5_RISE] = { .mask = ARIZONA_GP5_RISE_EINT1 },
62 [ARIZONA_IRQ_JD_FALL] = { .mask = ARIZONA_JD1_FALL_EINT1 },
63 [ARIZONA_IRQ_JD_RISE] = { .mask = ARIZONA_JD1_RISE_EINT1 },
64};
65
66struct regmap_irq_chip wm8998_aod = {
67 .name = "wm8998 AOD",
68 .status_base = ARIZONA_AOD_IRQ1,
69 .mask_base = ARIZONA_AOD_IRQ_MASK_IRQ1,
70 .ack_base = ARIZONA_AOD_IRQ1,
71 .wake_base = ARIZONA_WAKE_CONTROL,
72 .wake_invert = 1,
73 .num_regs = 1,
74 .irqs = wm8998_aod_irqs,
75 .num_irqs = ARRAY_SIZE(wm8998_aod_irqs),
76};
77
78static const struct regmap_irq wm8998_irqs[ARIZONA_NUM_IRQ] = {
79 [ARIZONA_IRQ_GP4] = { .reg_offset = 0, .mask = ARIZONA_GP4_EINT1 },
80 [ARIZONA_IRQ_GP3] = { .reg_offset = 0, .mask = ARIZONA_GP3_EINT1 },
81 [ARIZONA_IRQ_GP2] = { .reg_offset = 0, .mask = ARIZONA_GP2_EINT1 },
82 [ARIZONA_IRQ_GP1] = { .reg_offset = 0, .mask = ARIZONA_GP1_EINT1 },
83
84 [ARIZONA_IRQ_SPK_OVERHEAT_WARN] = {
85 .reg_offset = 2, .mask = ARIZONA_SPK_OVERHEAT_WARN_EINT1
86 },
87 [ARIZONA_IRQ_SPK_OVERHEAT] = {
88 .reg_offset = 2, .mask = ARIZONA_SPK_OVERHEAT_EINT1
89 },
90 [ARIZONA_IRQ_HPDET] = {
91 .reg_offset = 2, .mask = ARIZONA_HPDET_EINT1
92 },
93 [ARIZONA_IRQ_MICDET] = {
94 .reg_offset = 2, .mask = ARIZONA_MICDET_EINT1
95 },
96 [ARIZONA_IRQ_WSEQ_DONE] = {
97 .reg_offset = 2, .mask = ARIZONA_WSEQ_DONE_EINT1
98 },
99 [ARIZONA_IRQ_DRC1_SIG_DET] = {
100 .reg_offset = 2, .mask = ARIZONA_DRC1_SIG_DET_EINT1
101 },
102 [ARIZONA_IRQ_ASRC2_LOCK] = {
103 .reg_offset = 2, .mask = ARIZONA_ASRC2_LOCK_EINT1
104 },
105 [ARIZONA_IRQ_ASRC1_LOCK] = {
106 .reg_offset = 2, .mask = ARIZONA_ASRC1_LOCK_EINT1
107 },
108 [ARIZONA_IRQ_UNDERCLOCKED] = {
109 .reg_offset = 2, .mask = ARIZONA_UNDERCLOCKED_EINT1
110 },
111 [ARIZONA_IRQ_OVERCLOCKED] = {
112 .reg_offset = 2, .mask = ARIZONA_OVERCLOCKED_EINT1
113 },
114 [ARIZONA_IRQ_FLL2_LOCK] = {
115 .reg_offset = 2, .mask = ARIZONA_FLL2_LOCK_EINT1
116 },
117 [ARIZONA_IRQ_FLL1_LOCK] = {
118 .reg_offset = 2, .mask = ARIZONA_FLL1_LOCK_EINT1
119 },
120 [ARIZONA_IRQ_CLKGEN_ERR] = {
121 .reg_offset = 2, .mask = ARIZONA_CLKGEN_ERR_EINT1
122 },
123 [ARIZONA_IRQ_CLKGEN_ERR_ASYNC] = {
124 .reg_offset = 2, .mask = ARIZONA_CLKGEN_ERR_ASYNC_EINT1
125 },
126
127 [ARIZONA_IRQ_ASRC_CFG_ERR] = {
128 .reg_offset = 3, .mask = ARIZONA_ASRC_CFG_ERR_EINT1
129 },
130 [ARIZONA_IRQ_AIF3_ERR] = {
131 .reg_offset = 3, .mask = ARIZONA_AIF3_ERR_EINT1
132 },
133 [ARIZONA_IRQ_AIF2_ERR] = {
134 .reg_offset = 3, .mask = ARIZONA_AIF2_ERR_EINT1
135 },
136 [ARIZONA_IRQ_AIF1_ERR] = {
137 .reg_offset = 3, .mask = ARIZONA_AIF1_ERR_EINT1
138 },
139 [ARIZONA_IRQ_CTRLIF_ERR] = {
140 .reg_offset = 3, .mask = ARIZONA_CTRLIF_ERR_EINT1
141 },
142 [ARIZONA_IRQ_MIXER_DROPPED_SAMPLES] = {
143 .reg_offset = 3, .mask = ARIZONA_MIXER_DROPPED_SAMPLE_EINT1
144 },
145 [ARIZONA_IRQ_ASYNC_CLK_ENA_LOW] = {
146 .reg_offset = 3, .mask = ARIZONA_ASYNC_CLK_ENA_LOW_EINT1
147 },
148 [ARIZONA_IRQ_SYSCLK_ENA_LOW] = {
149 .reg_offset = 3, .mask = ARIZONA_SYSCLK_ENA_LOW_EINT1
150 },
151 [ARIZONA_IRQ_ISRC1_CFG_ERR] = {
152 .reg_offset = 3, .mask = ARIZONA_ISRC1_CFG_ERR_EINT1
153 },
154 [ARIZONA_IRQ_ISRC2_CFG_ERR] = {
155 .reg_offset = 3, .mask = ARIZONA_ISRC2_CFG_ERR_EINT1
156 },
157
158 [ARIZONA_IRQ_BOOT_DONE] = {
159 .reg_offset = 4, .mask = ARIZONA_BOOT_DONE_EINT1
160 },
161 [ARIZONA_IRQ_FLL2_CLOCK_OK] = {
162 .reg_offset = 4, .mask = ARIZONA_FLL2_CLOCK_OK_EINT1
163 },
164 [ARIZONA_IRQ_FLL1_CLOCK_OK] = {
165 .reg_offset = 4, .mask = ARIZONA_FLL1_CLOCK_OK_EINT1
166 },
167};
168
169struct regmap_irq_chip wm8998_irq = {
170 .name = "wm8998 IRQ",
171 .status_base = ARIZONA_INTERRUPT_STATUS_1,
172 .mask_base = ARIZONA_INTERRUPT_STATUS_1_MASK,
173 .ack_base = ARIZONA_INTERRUPT_STATUS_1,
174 .num_regs = 5,
175 .irqs = wm8998_irqs,
176 .num_irqs = ARRAY_SIZE(wm8998_irqs),
177};
178
179static const struct reg_default wm8998_reg_default[] = {
180 { 0x00000009, 0x0001 }, /* R9 - Ctrl IF I2C1 CFG 1 */
181 { 0x0000000B, 0x001A }, /* R11 - Ctrl IF I2C1 CFG 2 */
182 { 0x00000020, 0x0000 }, /* R32 - Tone Generator 1 */
183 { 0x00000021, 0x1000 }, /* R33 - Tone Generator 2 */
184 { 0x00000022, 0x0000 }, /* R34 - Tone Generator 3 */
185 { 0x00000023, 0x1000 }, /* R35 - Tone Generator 4 */
186 { 0x00000024, 0x0000 }, /* R36 - Tone Generator 5 */
187 { 0x00000030, 0x0000 }, /* R48 - PWM Drive 1 */
188 { 0x00000031, 0x0100 }, /* R49 - PWM Drive 2 */
189 { 0x00000032, 0x0100 }, /* R50 - PWM Drive 3 */
190 { 0x00000040, 0x0000 }, /* R64 - Wake control */
191 { 0x00000041, 0x0000 }, /* R65 - Sequence control */
192 { 0x00000061, 0x01FF }, /* R97 - Sample Rate Sequence Select 1 */
193 { 0x00000062, 0x01FF }, /* R98 - Sample Rate Sequence Select 2 */
194 { 0x00000063, 0x01FF }, /* R99 - Sample Rate Sequence Select 3 */
195 { 0x00000064, 0x01FF }, /* R100 - Sample Rate Sequence Select 4 */
196 { 0x00000066, 0x01FF }, /* R102 - Always On Triggers Sequence Select 1 */
197 { 0x00000067, 0x01FF }, /* R103 - Always On Triggers Sequence Select 2 */
198 { 0x00000068, 0x01FF }, /* R104 - Always On Triggers Sequence Select 3 */
199 { 0x00000069, 0x01FF }, /* R105 - Always On Triggers Sequence Select 4 */
200 { 0x0000006A, 0x01FF }, /* R106 - Always On Triggers Sequence Select 5 */
201 { 0x0000006B, 0x01FF }, /* R107 - Always On Triggers Sequence Select 6 */
202 { 0x0000006E, 0x01FF }, /* R110 - Trigger Sequence Select 32 */
203 { 0x0000006F, 0x01FF }, /* R111 - Trigger Sequence Select 33 */
204 { 0x00000090, 0x0000 }, /* R144 - Haptics Control 1 */
205 { 0x00000091, 0x7FFF }, /* R145 - Haptics Control 2 */
206 { 0x00000092, 0x0000 }, /* R146 - Haptics phase 1 intensity */
207 { 0x00000093, 0x0000 }, /* R147 - Haptics phase 1 duration */
208 { 0x00000094, 0x0000 }, /* R148 - Haptics phase 2 intensity */
209 { 0x00000095, 0x0000 }, /* R149 - Haptics phase 2 duration */
210 { 0x00000096, 0x0000 }, /* R150 - Haptics phase 3 intensity */
211 { 0x00000097, 0x0000 }, /* R151 - Haptics phase 3 duration */
212 { 0x00000100, 0x0002 }, /* R256 - Clock 32k 1 */
213 { 0x00000101, 0x0304 }, /* R257 - System Clock 1 */
214 { 0x00000102, 0x0011 }, /* R258 - Sample rate 1 */
215 { 0x00000103, 0x0011 }, /* R259 - Sample rate 2 */
216 { 0x00000104, 0x0011 }, /* R260 - Sample rate 3 */
217 { 0x00000112, 0x0305 }, /* R274 - Async clock 1 */
218 { 0x00000113, 0x0011 }, /* R275 - Async sample rate 1 */
219 { 0x00000114, 0x0011 }, /* R276 - Async sample rate 2 */
220 { 0x00000149, 0x0000 }, /* R329 - Output system clock */
221 { 0x0000014A, 0x0000 }, /* R330 - Output async clock */
222 { 0x00000152, 0x0000 }, /* R338 - Rate Estimator 1 */
223 { 0x00000153, 0x0000 }, /* R339 - Rate Estimator 2 */
224 { 0x00000154, 0x0000 }, /* R340 - Rate Estimator 3 */
225 { 0x00000155, 0x0000 }, /* R341 - Rate Estimator 4 */
226 { 0x00000156, 0x0000 }, /* R342 - Rate Estimator 5 */
227 { 0x00000161, 0x0000 }, /* R353 - Dynamic Frequency Scaling 1 */
228 { 0x00000171, 0x0002 }, /* R369 - FLL1 Control 1 */
229 { 0x00000172, 0x0008 }, /* R370 - FLL1 Control 2 */
230 { 0x00000173, 0x0018 }, /* R371 - FLL1 Control 3 */
231 { 0x00000174, 0x007D }, /* R372 - FLL1 Control 4 */
232 { 0x00000175, 0x0004 }, /* R373 - FLL1 Control 5 */
233 { 0x00000176, 0x0000 }, /* R374 - FLL1 Control 6 */
234 { 0x00000177, 0x0181 }, /* R375 - FLL1 Loop Filter Test 1 */
235 { 0x00000178, 0x0000 }, /* R376 - FLL1 NCO Test 0 */
236 { 0x00000179, 0x0000 }, /* R377 - FLL1 Control 7 */
237 { 0x00000181, 0x0000 }, /* R385 - FLL1 Synchroniser 1 */
238 { 0x00000182, 0x0000 }, /* R386 - FLL1 Synchroniser 2 */
239 { 0x00000183, 0x0000 }, /* R387 - FLL1 Synchroniser 3 */
240 { 0x00000184, 0x0000 }, /* R388 - FLL1 Synchroniser 4 */
241 { 0x00000185, 0x0000 }, /* R389 - FLL1 Synchroniser 5 */
242 { 0x00000186, 0x0000 }, /* R390 - FLL1 Synchroniser 6 */
243 { 0x00000187, 0x0001 }, /* R391 - FLL1 Synchroniser 7 */
244 { 0x00000189, 0x0000 }, /* R393 - FLL1 Spread Spectrum */
245 { 0x0000018A, 0x0004 }, /* R394 - FLL1 GPIO Clock */
246 { 0x00000191, 0x0000 }, /* R401 - FLL2 Control 1 */
247 { 0x00000192, 0x0008 }, /* R402 - FLL2 Control 2 */
248 { 0x00000193, 0x0018 }, /* R403 - FLL2 Control 3 */
249 { 0x00000194, 0x007D }, /* R404 - FLL2 Control 4 */
250 { 0x00000195, 0x0004 }, /* R405 - FLL2 Control 5 */
251 { 0x00000196, 0x0000 }, /* R406 - FLL2 Control 6 */
252 { 0x00000197, 0x0000 }, /* R407 - FLL2 Loop Filter Test 1 */
253 { 0x00000198, 0x0000 }, /* R408 - FLL2 NCO Test 0 */
254 { 0x00000199, 0x0000 }, /* R409 - FLL2 Control 7 */
255 { 0x000001A1, 0x0000 }, /* R417 - FLL2 Synchroniser 1 */
256 { 0x000001A2, 0x0000 }, /* R418 - FLL2 Synchroniser 2 */
257 { 0x000001A3, 0x0000 }, /* R419 - FLL2 Synchroniser 3 */
258 { 0x000001A4, 0x0000 }, /* R420 - FLL2 Synchroniser 4 */
259 { 0x000001A5, 0x0000 }, /* R421 - FLL2 Synchroniser 5 */
260 { 0x000001A6, 0x0000 }, /* R422 - FLL2 Synchroniser 6 */
261 { 0x000001A7, 0x0001 }, /* R423 - FLL2 Synchroniser 7 */
262 { 0x000001A9, 0x0000 }, /* R425 - FLL2 Spread Spectrum */
263 { 0x000001AA, 0x0004 }, /* R426 - FLL2 GPIO Clock */
264 { 0x00000200, 0x0006 }, /* R512 - Mic Charge Pump 1 */
265 { 0x00000210, 0x00D4 }, /* R528 - LDO1 Control 1 */
266 { 0x00000212, 0x0000 }, /* R530 - LDO1 Control 2 */
267 { 0x00000213, 0x0344 }, /* R531 - LDO2 Control 1 */
268 { 0x00000218, 0x01A6 }, /* R536 - Mic Bias Ctrl 1 */
269 { 0x00000219, 0x01A6 }, /* R537 - Mic Bias Ctrl 2 */
270 { 0x0000021A, 0x01A6 }, /* R538 - Mic Bias Ctrl 3 */
271 { 0x00000293, 0x0080 }, /* R659 - Accessory Detect Mode 1 */
272 { 0x0000029B, 0x0000 }, /* R667 - Headphone Detect 1 */
273 { 0x0000029C, 0x0000 }, /* R668 - Headphone Detect 2 */
274 { 0x000002A2, 0x0000 }, /* R674 - Micd Clamp control */
275 { 0x000002A3, 0x1102 }, /* R675 - Mic Detect 1 */
276 { 0x000002A4, 0x009F }, /* R676 - Mic Detect 2 */
277 { 0x000002A5, 0x0000 }, /* R677 - Mic Detect 3 */
278 { 0x000002A6, 0x3737 }, /* R678 - Mic Detect Level 1 */
279 { 0x000002A7, 0x2C37 }, /* R679 - Mic Detect Level 2 */
280 { 0x000002A8, 0x1422 }, /* R680 - Mic Detect Level 3 */
281 { 0x000002A9, 0x030A }, /* R681 - Mic Detect Level 4 */
282 { 0x000002AB, 0x0000 }, /* R683 - Mic Detect 4 */
283 { 0x000002CB, 0x0000 }, /* R715 - Isolation control */
284 { 0x000002D3, 0x0000 }, /* R723 - Jack detect analogue */
285 { 0x00000300, 0x0000 }, /* R768 - Input Enables */
286 { 0x00000308, 0x0000 }, /* R776 - Input Rate */
287 { 0x00000309, 0x0022 }, /* R777 - Input Volume Ramp */
288 { 0x0000030C, 0x0002 }, /* R780 - HPF Control */
289 { 0x00000310, 0x2080 }, /* R784 - IN1L Control */
290 { 0x00000311, 0x0180 }, /* R785 - ADC Digital Volume 1L */
291 { 0x00000312, 0x0000 }, /* R786 - DMIC1L Control */
292 { 0x00000314, 0x0080 }, /* R788 - IN1R Control */
293 { 0x00000315, 0x0180 }, /* R789 - ADC Digital Volume 1R */
294 { 0x00000316, 0x0000 }, /* R790 - DMIC1R Control */
295 { 0x00000318, 0x2080 }, /* R792 - IN2L Control */
296 { 0x00000319, 0x0180 }, /* R793 - ADC Digital Volume 2L */
297 { 0x0000031A, 0x0000 }, /* R794 - DMIC2L Control */
298 { 0x00000400, 0x0000 }, /* R1024 - Output Enables 1 */
299 { 0x00000408, 0x0000 }, /* R1032 - Output Rate 1 */
300 { 0x00000409, 0x0022 }, /* R1033 - Output Volume Ramp */
301 { 0x00000410, 0x2080 }, /* R1040 - Output Path Config 1L */
302 { 0x00000411, 0x0180 }, /* R1041 - DAC Digital Volume 1L */
303 { 0x00000413, 0x0001 }, /* R1043 - Noise Gate Select 1L */
304 { 0x00000414, 0x0080 }, /* R1044 - Output Path Config 1R */
305 { 0x00000415, 0x0180 }, /* R1045 - DAC Digital Volume 1R */
306 { 0x00000417, 0x0002 }, /* R1047 - Noise Gate Select 1R */
307 { 0x00000418, 0x2080 }, /* R1048 - Output Path Config 2L */
308 { 0x00000419, 0x0180 }, /* R1049 - DAC Digital Volume 2L */
309 { 0x0000041B, 0x0004 }, /* R1051 - Noise Gate Select 2L */
310 { 0x0000041C, 0x0080 }, /* R1052 - Output Path Config 2R */
311 { 0x0000041D, 0x0180 }, /* R1053 - DAC Digital Volume 2R */
312 { 0x0000041F, 0x0008 }, /* R1055 - Noise Gate Select 2R */
313 { 0x00000420, 0x2080 }, /* R1056 - Output Path Config 3L */
314 { 0x00000421, 0x0180 }, /* R1057 - DAC Digital Volume 3L */
315 { 0x00000423, 0x0010 }, /* R1059 - Noise Gate Select 3L */
316 { 0x00000428, 0x0000 }, /* R1064 - Output Path Config 4L */
317 { 0x00000429, 0x0180 }, /* R1065 - DAC Digital Volume 4L */
318 { 0x0000042B, 0x0040 }, /* R1067 - Noise Gate Select 4L */
319 { 0x0000042C, 0x0000 }, /* R1068 - Output Path Config 4R */
320 { 0x0000042D, 0x0180 }, /* R1069 - DAC Digital Volume 4R */
321 { 0x0000042F, 0x0080 }, /* R1071 - Noise Gate Select 4R */
322 { 0x00000430, 0x0000 }, /* R1072 - Output Path Config 5L */
323 { 0x00000431, 0x0180 }, /* R1073 - DAC Digital Volume 5L */
324 { 0x00000433, 0x0100 }, /* R1075 - Noise Gate Select 5L */
325 { 0x00000434, 0x0000 }, /* R1076 - Output Path Config 5R */
326 { 0x00000435, 0x0180 }, /* R1077 - DAC Digital Volume 5R */
327 { 0x00000437, 0x0200 }, /* R1079 - Noise Gate Select 5R */
328 { 0x00000440, 0x8FFF }, /* R1088 - DRE Enable */
329 { 0x00000441, 0xC759 }, /* R1089 - DRE Control 1 */
330 { 0x00000442, 0x2A08 }, /* R1089 - DRE Control 2 */
331 { 0x00000443, 0x5CFA }, /* R1089 - DRE Control 3 */
332 { 0x00000448, 0x03EF }, /* R1096 - EDRE Enable */
333 { 0x00000450, 0x0000 }, /* R1104 - DAC AEC Control 1 */
334 { 0x00000451, 0x0000 }, /* R1105 - DAC AEC Control 2 */
335 { 0x00000458, 0x0000 }, /* R1112 - Noise Gate Control */
336 { 0x00000490, 0x0069 }, /* R1168 - PDM SPK1 CTRL 1 */
337 { 0x00000491, 0x0000 }, /* R1169 - PDM SPK1 CTRL 2 */
338 { 0x0000049A, 0x0000 }, /* R1178 - HP_TEST_CTRL_13 */
339 { 0x00000500, 0x000C }, /* R1280 - AIF1 BCLK Ctrl */
340 { 0x00000501, 0x0008 }, /* R1281 - AIF1 Tx Pin Ctrl */
341 { 0x00000502, 0x0000 }, /* R1282 - AIF1 Rx Pin Ctrl */
342 { 0x00000503, 0x0000 }, /* R1283 - AIF1 Rate Ctrl */
343 { 0x00000504, 0x0000 }, /* R1284 - AIF1 Format */
344 { 0x00000506, 0x0040 }, /* R1286 - AIF1 Rx BCLK Rate */
345 { 0x00000507, 0x1818 }, /* R1287 - AIF1 Frame Ctrl 1 */
346 { 0x00000508, 0x1818 }, /* R1288 - AIF1 Frame Ctrl 2 */
347 { 0x00000509, 0x0000 }, /* R1289 - AIF1 Frame Ctrl 3 */
348 { 0x0000050A, 0x0001 }, /* R1290 - AIF1 Frame Ctrl 4 */
349 { 0x0000050B, 0x0002 }, /* R1291 - AIF1 Frame Ctrl 5 */
350 { 0x0000050C, 0x0003 }, /* R1292 - AIF1 Frame Ctrl 6 */
351 { 0x0000050D, 0x0004 }, /* R1293 - AIF1 Frame Ctrl 7 */
352 { 0x0000050E, 0x0005 }, /* R1294 - AIF1 Frame Ctrl 8 */
353 { 0x00000511, 0x0000 }, /* R1297 - AIF1 Frame Ctrl 11 */
354 { 0x00000512, 0x0001 }, /* R1298 - AIF1 Frame Ctrl 12 */
355 { 0x00000513, 0x0002 }, /* R1299 - AIF1 Frame Ctrl 13 */
356 { 0x00000514, 0x0003 }, /* R1300 - AIF1 Frame Ctrl 14 */
357 { 0x00000515, 0x0004 }, /* R1301 - AIF1 Frame Ctrl 15 */
358 { 0x00000516, 0x0005 }, /* R1302 - AIF1 Frame Ctrl 16 */
359 { 0x00000519, 0x0000 }, /* R1305 - AIF1 Tx Enables */
360 { 0x0000051A, 0x0000 }, /* R1306 - AIF1 Rx Enables */
361 { 0x00000540, 0x000C }, /* R1344 - AIF2 BCLK Ctrl */
362 { 0x00000541, 0x0008 }, /* R1345 - AIF2 Tx Pin Ctrl */
363 { 0x00000542, 0x0000 }, /* R1346 - AIF2 Rx Pin Ctrl */
364 { 0x00000543, 0x0000 }, /* R1347 - AIF2 Rate Ctrl */
365 { 0x00000544, 0x0000 }, /* R1348 - AIF2 Format */
366 { 0x00000546, 0x0040 }, /* R1350 - AIF2 Rx BCLK Rate */
367 { 0x00000547, 0x1818 }, /* R1351 - AIF2 Frame Ctrl 1 */
368 { 0x00000548, 0x1818 }, /* R1352 - AIF2 Frame Ctrl 2 */
369 { 0x00000549, 0x0000 }, /* R1353 - AIF2 Frame Ctrl 3 */
370 { 0x0000054A, 0x0001 }, /* R1354 - AIF2 Frame Ctrl 4 */
371 { 0x0000054B, 0x0002 }, /* R1355 - AIF2 Frame Ctrl 5 */
372 { 0x0000054C, 0x0003 }, /* R1356 - AIF2 Frame Ctrl 6 */
373 { 0x0000054D, 0x0004 }, /* R1357 - AIF2 Frame Ctrl 7 */
374 { 0x0000054E, 0x0005 }, /* R1358 - AIF2 Frame Ctrl 8 */
375 { 0x00000551, 0x0000 }, /* R1361 - AIF2 Frame Ctrl 11 */
376 { 0x00000552, 0x0001 }, /* R1362 - AIF2 Frame Ctrl 12 */
377 { 0x00000553, 0x0002 }, /* R1363 - AIF2 Frame Ctrl 13 */
378 { 0x00000554, 0x0003 }, /* R1364 - AIF2 Frame Ctrl 14 */
379 { 0x00000555, 0x0004 }, /* R1365 - AIF2 Frame Ctrl 15 */
380 { 0x00000556, 0x0005 }, /* R1366 - AIF2 Frame Ctrl 16 */
381 { 0x00000559, 0x0000 }, /* R1369 - AIF2 Tx Enables */
382 { 0x0000055A, 0x0000 }, /* R1370 - AIF2 Rx Enables */
383 { 0x00000580, 0x000C }, /* R1408 - AIF3 BCLK Ctrl */
384 { 0x00000581, 0x0008 }, /* R1409 - AIF3 Tx Pin Ctrl */
385 { 0x00000582, 0x0000 }, /* R1410 - AIF3 Rx Pin Ctrl */
386 { 0x00000583, 0x0000 }, /* R1411 - AIF3 Rate Ctrl */
387 { 0x00000584, 0x0000 }, /* R1412 - AIF3 Format */
388 { 0x00000586, 0x0040 }, /* R1414 - AIF3 Rx BCLK Rate */
389 { 0x00000587, 0x1818 }, /* R1415 - AIF3 Frame Ctrl 1 */
390 { 0x00000588, 0x1818 }, /* R1416 - AIF3 Frame Ctrl 2 */
391 { 0x00000589, 0x0000 }, /* R1417 - AIF3 Frame Ctrl 3 */
392 { 0x0000058A, 0x0001 }, /* R1418 - AIF3 Frame Ctrl 4 */
393 { 0x00000591, 0x0000 }, /* R1425 - AIF3 Frame Ctrl 11 */
394 { 0x00000592, 0x0001 }, /* R1426 - AIF3 Frame Ctrl 12 */
395 { 0x00000599, 0x0000 }, /* R1433 - AIF3 Tx Enables */
396 { 0x0000059A, 0x0000 }, /* R1434 - AIF3 Rx Enables */
397 { 0x000005C2, 0x0000 }, /* R1474 - SPD1 TX Control */
398 { 0x000005C3, 0x0000 }, /* R1475 - SPD1 TX Channel Status 1 */
399 { 0x000005C4, 0x0B01 }, /* R1476 - SPD1 TX Channel Status 2 */
400 { 0x000005C5, 0x0000 }, /* R1477 - SPD1 TX Channel Status 3 */
401 { 0x000005E3, 0x0004 }, /* R1507 - SLIMbus Framer Ref Gear */
402 { 0x000005E5, 0x0000 }, /* R1509 - SLIMbus Rates 1 */
403 { 0x000005E6, 0x0000 }, /* R1510 - SLIMbus Rates 2 */
404 { 0x000005E9, 0x0000 }, /* R1513 - SLIMbus Rates 5 */
405 { 0x000005EA, 0x0000 }, /* R1514 - SLIMbus Rates 6 */
406 { 0x000005EB, 0x0000 }, /* R1515 - SLIMbus Rates 7 */
407 { 0x000005F5, 0x0000 }, /* R1525 - SLIMbus RX Channel Enable */
408 { 0x000005F6, 0x0000 }, /* R1526 - SLIMbus TX Channel Enable */
409 { 0x00000640, 0x0000 }, /* R1600 - PWM1MIX Input 1 Source */
410 { 0x00000641, 0x0080 }, /* R1601 - PWM1MIX Input 1 Volume */
411 { 0x00000642, 0x0000 }, /* R1602 - PWM1MIX Input 2 Source */
412 { 0x00000643, 0x0080 }, /* R1603 - PWM1MIX Input 2 Volume */
413 { 0x00000644, 0x0000 }, /* R1604 - PWM1MIX Input 3 Source */
414 { 0x00000645, 0x0080 }, /* R1605 - PWM1MIX Input 3 Volume */
415 { 0x00000646, 0x0000 }, /* R1606 - PWM1MIX Input 4 Source */
416 { 0x00000647, 0x0080 }, /* R1607 - PWM1MIX Input 4 Volume */
417 { 0x00000648, 0x0000 }, /* R1608 - PWM2MIX Input 1 Source */
418 { 0x00000649, 0x0080 }, /* R1609 - PWM2MIX Input 1 Volume */
419 { 0x0000064A, 0x0000 }, /* R1610 - PWM2MIX Input 2 Source */
420 { 0x0000064B, 0x0080 }, /* R1611 - PWM2MIX Input 2 Volume */
421 { 0x0000064C, 0x0000 }, /* R1612 - PWM2MIX Input 3 Source */
422 { 0x0000064D, 0x0080 }, /* R1613 - PWM2MIX Input 3 Volume */
423 { 0x0000064E, 0x0000 }, /* R1614 - PWM2MIX Input 4 Source */
424 { 0x0000064F, 0x0080 }, /* R1615 - PWM2MIX Input 4 Volume */
425 { 0x00000680, 0x0000 }, /* R1664 - OUT1LMIX Input 1 Source */
426 { 0x00000681, 0x0080 }, /* R1665 - OUT1LMIX Input 1 Volume */
427 { 0x00000682, 0x0000 }, /* R1666 - OUT1LMIX Input 2 Source */
428 { 0x00000683, 0x0080 }, /* R1667 - OUT1LMIX Input 2 Volume */
429 { 0x00000684, 0x0000 }, /* R1668 - OUT1LMIX Input 3 Source */
430 { 0x00000685, 0x0080 }, /* R1669 - OUT1LMIX Input 3 Volume */
431 { 0x00000686, 0x0000 }, /* R1670 - OUT1LMIX Input 4 Source */
432 { 0x00000687, 0x0080 }, /* R1671 - OUT1LMIX Input 4 Volume */
433 { 0x00000688, 0x0000 }, /* R1672 - OUT1RMIX Input 1 Source */
434 { 0x00000689, 0x0080 }, /* R1673 - OUT1RMIX Input 1 Volume */
435 { 0x0000068A, 0x0000 }, /* R1674 - OUT1RMIX Input 2 Source */
436 { 0x0000068B, 0x0080 }, /* R1675 - OUT1RMIX Input 2 Volume */
437 { 0x0000068C, 0x0000 }, /* R1676 - OUT1RMIX Input 3 Source */
438 { 0x0000068D, 0x0080 }, /* R1677 - OUT1RMIX Input 3 Volume */
439 { 0x0000068E, 0x0000 }, /* R1678 - OUT1RMIX Input 4 Source */
440 { 0x0000068F, 0x0080 }, /* R1679 - OUT1RMIX Input 4 Volume */
441 { 0x00000690, 0x0000 }, /* R1680 - OUT2LMIX Input 1 Source */
442 { 0x00000691, 0x0080 }, /* R1681 - OUT2LMIX Input 1 Volume */
443 { 0x00000692, 0x0000 }, /* R1682 - OUT2LMIX Input 2 Source */
444 { 0x00000693, 0x0080 }, /* R1683 - OUT2LMIX Input 2 Volume */
445 { 0x00000694, 0x0000 }, /* R1684 - OUT2LMIX Input 3 Source */
446 { 0x00000695, 0x0080 }, /* R1685 - OUT2LMIX Input 3 Volume */
447 { 0x00000696, 0x0000 }, /* R1686 - OUT2LMIX Input 4 Source */
448 { 0x00000697, 0x0080 }, /* R1687 - OUT2LMIX Input 4 Volume */
449 { 0x00000698, 0x0000 }, /* R1688 - OUT2RMIX Input 1 Source */
450 { 0x00000699, 0x0080 }, /* R1689 - OUT2RMIX Input 1 Volume */
451 { 0x0000069A, 0x0000 }, /* R1690 - OUT2RMIX Input 2 Source */
452 { 0x0000069B, 0x0080 }, /* R1691 - OUT2RMIX Input 2 Volume */
453 { 0x0000069C, 0x0000 }, /* R1692 - OUT2RMIX Input 3 Source */
454 { 0x0000069D, 0x0080 }, /* R1693 - OUT2RMIX Input 3 Volume */
455 { 0x0000069E, 0x0000 }, /* R1694 - OUT2RMIX Input 4 Source */
456 { 0x0000069F, 0x0080 }, /* R1695 - OUT2RMIX Input 4 Volume */
457 { 0x000006A0, 0x0000 }, /* R1696 - OUT3LMIX Input 1 Source */
458 { 0x000006A1, 0x0080 }, /* R1697 - OUT3LMIX Input 1 Volume */
459 { 0x000006A2, 0x0000 }, /* R1698 - OUT3LMIX Input 2 Source */
460 { 0x000006A3, 0x0080 }, /* R1699 - OUT3LMIX Input 2 Volume */
461 { 0x000006A4, 0x0000 }, /* R1700 - OUT3LMIX Input 3 Source */
462 { 0x000006A5, 0x0080 }, /* R1701 - OUT3LMIX Input 3 Volume */
463 { 0x000006A6, 0x0000 }, /* R1702 - OUT3LMIX Input 4 Source */
464 { 0x000006A7, 0x0080 }, /* R1703 - OUT3LMIX Input 4 Volume */
465 { 0x000006B0, 0x0000 }, /* R1712 - OUT4LMIX Input 1 Source */
466 { 0x000006B1, 0x0080 }, /* R1713 - OUT4LMIX Input 1 Volume */
467 { 0x000006B2, 0x0000 }, /* R1714 - OUT4LMIX Input 2 Source */
468 { 0x000006B3, 0x0080 }, /* R1715 - OUT4LMIX Input 2 Volume */
469 { 0x000006B4, 0x0000 }, /* R1716 - OUT4LMIX Input 3 Source */
470 { 0x000006B5, 0x0080 }, /* R1717 - OUT4LMIX Input 3 Volume */
471 { 0x000006B6, 0x0000 }, /* R1718 - OUT4LMIX Input 4 Source */
472 { 0x000006B7, 0x0080 }, /* R1719 - OUT4LMIX Input 4 Volume */
473 { 0x000006B8, 0x0000 }, /* R1720 - OUT4RMIX Input 1 Source */
474 { 0x000006B9, 0x0080 }, /* R1721 - OUT4RMIX Input 1 Volume */
475 { 0x000006BA, 0x0000 }, /* R1722 - OUT4RMIX Input 2 Source */
476 { 0x000006BB, 0x0080 }, /* R1723 - OUT4RMIX Input 2 Volume */
477 { 0x000006BC, 0x0000 }, /* R1724 - OUT4RMIX Input 3 Source */
478 { 0x000006BD, 0x0080 }, /* R1725 - OUT4RMIX Input 3 Volume */
479 { 0x000006BE, 0x0000 }, /* R1726 - OUT4RMIX Input 4 Source */
480 { 0x000006BF, 0x0080 }, /* R1727 - OUT4RMIX Input 4 Volume */
481 { 0x000006C0, 0x0000 }, /* R1728 - OUT5LMIX Input 1 Source */
482 { 0x000006C1, 0x0080 }, /* R1729 - OUT5LMIX Input 1 Volume */
483 { 0x000006C2, 0x0000 }, /* R1730 - OUT5LMIX Input 2 Source */
484 { 0x000006C3, 0x0080 }, /* R1731 - OUT5LMIX Input 2 Volume */
485 { 0x000006C4, 0x0000 }, /* R1732 - OUT5LMIX Input 3 Source */
486 { 0x000006C5, 0x0080 }, /* R1733 - OUT5LMIX Input 3 Volume */
487 { 0x000006C6, 0x0000 }, /* R1734 - OUT5LMIX Input 4 Source */
488 { 0x000006C7, 0x0080 }, /* R1735 - OUT5LMIX Input 4 Volume */
489 { 0x000006C8, 0x0000 }, /* R1736 - OUT5RMIX Input 1 Source */
490 { 0x000006C9, 0x0080 }, /* R1737 - OUT5RMIX Input 1 Volume */
491 { 0x000006CA, 0x0000 }, /* R1738 - OUT5RMIX Input 2 Source */
492 { 0x000006CB, 0x0080 }, /* R1739 - OUT5RMIX Input 2 Volume */
493 { 0x000006CC, 0x0000 }, /* R1740 - OUT5RMIX Input 3 Source */
494 { 0x000006CD, 0x0080 }, /* R1741 - OUT5RMIX Input 3 Volume */
495 { 0x000006CE, 0x0000 }, /* R1742 - OUT5RMIX Input 4 Source */
496 { 0x000006CF, 0x0080 }, /* R1743 - OUT5RMIX Input 4 Volume */
497 { 0x00000700, 0x0000 }, /* R1792 - AIF1TX1MIX Input 1 Source */
498 { 0x00000701, 0x0080 }, /* R1793 - AIF1TX1MIX Input 1 Volume */
499 { 0x00000702, 0x0000 }, /* R1794 - AIF1TX1MIX Input 2 Source */
500 { 0x00000703, 0x0080 }, /* R1795 - AIF1TX1MIX Input 2 Volume */
501 { 0x00000704, 0x0000 }, /* R1796 - AIF1TX1MIX Input 3 Source */
502 { 0x00000705, 0x0080 }, /* R1797 - AIF1TX1MIX Input 3 Volume */
503 { 0x00000706, 0x0000 }, /* R1798 - AIF1TX1MIX Input 4 Source */
504 { 0x00000707, 0x0080 }, /* R1799 - AIF1TX1MIX Input 4 Volume */
505 { 0x00000708, 0x0000 }, /* R1800 - AIF1TX2MIX Input 1 Source */
506 { 0x00000709, 0x0080 }, /* R1801 - AIF1TX2MIX Input 1 Volume */
507 { 0x0000070A, 0x0000 }, /* R1802 - AIF1TX2MIX Input 2 Source */
508 { 0x0000070B, 0x0080 }, /* R1803 - AIF1TX2MIX Input 2 Volume */
509 { 0x0000070C, 0x0000 }, /* R1804 - AIF1TX2MIX Input 3 Source */
510 { 0x0000070D, 0x0080 }, /* R1805 - AIF1TX2MIX Input 3 Volume */
511 { 0x0000070E, 0x0000 }, /* R1806 - AIF1TX2MIX Input 4 Source */
512 { 0x0000070F, 0x0080 }, /* R1807 - AIF1TX2MIX Input 4 Volume */
513 { 0x00000710, 0x0000 }, /* R1808 - AIF1TX3MIX Input 1 Source */
514 { 0x00000711, 0x0080 }, /* R1809 - AIF1TX3MIX Input 1 Volume */
515 { 0x00000712, 0x0000 }, /* R1810 - AIF1TX3MIX Input 2 Source */
516 { 0x00000713, 0x0080 }, /* R1811 - AIF1TX3MIX Input 2 Volume */
517 { 0x00000714, 0x0000 }, /* R1812 - AIF1TX3MIX Input 3 Source */
518 { 0x00000715, 0x0080 }, /* R1813 - AIF1TX3MIX Input 3 Volume */
519 { 0x00000716, 0x0000 }, /* R1814 - AIF1TX3MIX Input 4 Source */
520 { 0x00000717, 0x0080 }, /* R1815 - AIF1TX3MIX Input 4 Volume */
521 { 0x00000718, 0x0000 }, /* R1816 - AIF1TX4MIX Input 1 Source */
522 { 0x00000719, 0x0080 }, /* R1817 - AIF1TX4MIX Input 1 Volume */
523 { 0x0000071A, 0x0000 }, /* R1818 - AIF1TX4MIX Input 2 Source */
524 { 0x0000071B, 0x0080 }, /* R1819 - AIF1TX4MIX Input 2 Volume */
525 { 0x0000071C, 0x0000 }, /* R1820 - AIF1TX4MIX Input 3 Source */
526 { 0x0000071D, 0x0080 }, /* R1821 - AIF1TX4MIX Input 3 Volume */
527 { 0x0000071E, 0x0000 }, /* R1822 - AIF1TX4MIX Input 4 Source */
528 { 0x0000071F, 0x0080 }, /* R1823 - AIF1TX4MIX Input 4 Volume */
529 { 0x00000720, 0x0000 }, /* R1824 - AIF1TX5MIX Input 1 Source */
530 { 0x00000721, 0x0080 }, /* R1825 - AIF1TX5MIX Input 1 Volume */
531 { 0x00000722, 0x0000 }, /* R1826 - AIF1TX5MIX Input 2 Source */
532 { 0x00000723, 0x0080 }, /* R1827 - AIF1TX5MIX Input 2 Volume */
533 { 0x00000724, 0x0000 }, /* R1828 - AIF1TX5MIX Input 3 Source */
534 { 0x00000725, 0x0080 }, /* R1829 - AIF1TX5MIX Input 3 Volume */
535 { 0x00000726, 0x0000 }, /* R1830 - AIF1TX5MIX Input 4 Source */
536 { 0x00000727, 0x0080 }, /* R1831 - AIF1TX5MIX Input 4 Volume */
537 { 0x00000728, 0x0000 }, /* R1832 - AIF1TX6MIX Input 1 Source */
538 { 0x00000729, 0x0080 }, /* R1833 - AIF1TX6MIX Input 1 Volume */
539 { 0x0000072A, 0x0000 }, /* R1834 - AIF1TX6MIX Input 2 Source */
540 { 0x0000072B, 0x0080 }, /* R1835 - AIF1TX6MIX Input 2 Volume */
541 { 0x0000072C, 0x0000 }, /* R1836 - AIF1TX6MIX Input 3 Source */
542 { 0x0000072D, 0x0080 }, /* R1837 - AIF1TX6MIX Input 3 Volume */
543 { 0x0000072E, 0x0000 }, /* R1838 - AIF1TX6MIX Input 4 Source */
544 { 0x0000072F, 0x0080 }, /* R1839 - AIF1TX6MIX Input 4 Volume */
545 { 0x00000740, 0x0000 }, /* R1856 - AIF2TX1MIX Input 1 Source */
546 { 0x00000741, 0x0080 }, /* R1857 - AIF2TX1MIX Input 1 Volume */
547 { 0x00000742, 0x0000 }, /* R1858 - AIF2TX1MIX Input 2 Source */
548 { 0x00000743, 0x0080 }, /* R1859 - AIF2TX1MIX Input 2 Volume */
549 { 0x00000744, 0x0000 }, /* R1860 - AIF2TX1MIX Input 3 Source */
550 { 0x00000745, 0x0080 }, /* R1861 - AIF2TX1MIX Input 3 Volume */
551 { 0x00000746, 0x0000 }, /* R1862 - AIF2TX1MIX Input 4 Source */
552 { 0x00000747, 0x0080 }, /* R1863 - AIF2TX1MIX Input 4 Volume */
553 { 0x00000748, 0x0000 }, /* R1864 - AIF2TX2MIX Input 1 Source */
554 { 0x00000749, 0x0080 }, /* R1865 - AIF2TX2MIX Input 1 Volume */
555 { 0x0000074A, 0x0000 }, /* R1866 - AIF2TX2MIX Input 2 Source */
556 { 0x0000074B, 0x0080 }, /* R1867 - AIF2TX2MIX Input 2 Volume */
557 { 0x0000074C, 0x0000 }, /* R1868 - AIF2TX2MIX Input 3 Source */
558 { 0x0000074D, 0x0080 }, /* R1869 - AIF2TX2MIX Input 3 Volume */
559 { 0x0000074E, 0x0000 }, /* R1870 - AIF2TX2MIX Input 4 Source */
560 { 0x0000074F, 0x0080 }, /* R1871 - AIF2TX2MIX Input 4 Volume */
561 { 0x00000750, 0x0000 }, /* R1872 - AIF2TX3MIX Input 1 Source */
562 { 0x00000751, 0x0080 }, /* R1873 - AIF2TX3MIX Input 1 Volume */
563 { 0x00000752, 0x0000 }, /* R1874 - AIF2TX3MIX Input 2 Source */
564 { 0x00000753, 0x0080 }, /* R1875 - AIF2TX3MIX Input 2 Volume */
565 { 0x00000754, 0x0000 }, /* R1876 - AIF2TX3MIX Input 3 Source */
566 { 0x00000755, 0x0080 }, /* R1877 - AIF2TX3MIX Input 3 Volume */
567 { 0x00000756, 0x0000 }, /* R1878 - AIF2TX3MIX Input 4 Source */
568 { 0x00000757, 0x0080 }, /* R1879 - AIF2TX3MIX Input 4 Volume */
569 { 0x00000758, 0x0000 }, /* R1880 - AIF2TX4MIX Input 1 Source */
570 { 0x00000759, 0x0080 }, /* R1881 - AIF2TX4MIX Input 1 Volume */
571 { 0x0000075A, 0x0000 }, /* R1882 - AIF2TX4MIX Input 2 Source */
572 { 0x0000075B, 0x0080 }, /* R1883 - AIF2TX4MIX Input 2 Volume */
573 { 0x0000075C, 0x0000 }, /* R1884 - AIF2TX4MIX Input 3 Source */
574 { 0x0000075D, 0x0080 }, /* R1885 - AIF2TX4MIX Input 3 Volume */
575 { 0x0000075E, 0x0000 }, /* R1886 - AIF2TX4MIX Input 4 Source */
576 { 0x0000075F, 0x0080 }, /* R1887 - AIF2TX4MIX Input 4 Volume */
577 { 0x00000760, 0x0000 }, /* R1888 - AIF2TX5MIX Input 1 Source */
578 { 0x00000761, 0x0080 }, /* R1889 - AIF2TX5MIX Input 1 Volume */
579 { 0x00000762, 0x0000 }, /* R1890 - AIF2TX5MIX Input 2 Source */
580 { 0x00000763, 0x0080 }, /* R1891 - AIF2TX5MIX Input 2 Volume */
581 { 0x00000764, 0x0000 }, /* R1892 - AIF2TX5MIX Input 3 Source */
582 { 0x00000765, 0x0080 }, /* R1893 - AIF2TX5MIX Input 3 Volume */
583 { 0x00000766, 0x0000 }, /* R1894 - AIF2TX5MIX Input 4 Source */
584 { 0x00000767, 0x0080 }, /* R1895 - AIF2TX5MIX Input 4 Volume */
585 { 0x00000768, 0x0000 }, /* R1896 - AIF2TX6MIX Input 1 Source */
586 { 0x00000769, 0x0080 }, /* R1897 - AIF2TX6MIX Input 1 Volume */
587 { 0x0000076A, 0x0000 }, /* R1898 - AIF2TX6MIX Input 2 Source */
588 { 0x0000076B, 0x0080 }, /* R1899 - AIF2TX6MIX Input 2 Volume */
589 { 0x0000076C, 0x0000 }, /* R1900 - AIF2TX6MIX Input 3 Source */
590 { 0x0000076D, 0x0080 }, /* R1901 - AIF2TX6MIX Input 3 Volume */
591 { 0x0000076E, 0x0000 }, /* R1902 - AIF2TX6MIX Input 4 Source */
592 { 0x0000076F, 0x0080 }, /* R1903 - AIF2TX6MIX Input 4 Volume */
593 { 0x00000780, 0x0000 }, /* R1920 - AIF3TX1MIX Input 1 Source */
594 { 0x00000781, 0x0080 }, /* R1921 - AIF3TX1MIX Input 1 Volume */
595 { 0x00000782, 0x0000 }, /* R1922 - AIF3TX1MIX Input 2 Source */
596 { 0x00000783, 0x0080 }, /* R1923 - AIF3TX1MIX Input 2 Volume */
597 { 0x00000784, 0x0000 }, /* R1924 - AIF3TX1MIX Input 3 Source */
598 { 0x00000785, 0x0080 }, /* R1925 - AIF3TX1MIX Input 3 Volume */
599 { 0x00000786, 0x0000 }, /* R1926 - AIF3TX1MIX Input 4 Source */
600 { 0x00000787, 0x0080 }, /* R1927 - AIF3TX1MIX Input 4 Volume */
601 { 0x00000788, 0x0000 }, /* R1928 - AIF3TX2MIX Input 1 Source */
602 { 0x00000789, 0x0080 }, /* R1929 - AIF3TX2MIX Input 1 Volume */
603 { 0x0000078A, 0x0000 }, /* R1930 - AIF3TX2MIX Input 2 Source */
604 { 0x0000078B, 0x0080 }, /* R1931 - AIF3TX2MIX Input 2 Volume */
605 { 0x0000078C, 0x0000 }, /* R1932 - AIF3TX2MIX Input 3 Source */
606 { 0x0000078D, 0x0080 }, /* R1933 - AIF3TX2MIX Input 3 Volume */
607 { 0x0000078E, 0x0000 }, /* R1934 - AIF3TX2MIX Input 4 Source */
608 { 0x0000078F, 0x0080 }, /* R1935 - AIF3TX2MIX Input 4 Volume */
609 { 0x000007C0, 0x0000 }, /* R1984 - SLIMTX1MIX Input 1 Source */
610 { 0x000007C1, 0x0080 }, /* R1985 - SLIMTX1MIX Input 1 Volume */
611 { 0x000007C8, 0x0000 }, /* R1992 - SLIMTX2MIX Input 1 Source */
612 { 0x000007C9, 0x0080 }, /* R1993 - SLIMTX2MIX Input 1 Volume */
613 { 0x000007D0, 0x0000 }, /* R2000 - SLIMTX3MIX Input 1 Source */
614 { 0x000007D1, 0x0080 }, /* R2001 - SLIMTX3MIX Input 1 Volume */
615 { 0x000007D8, 0x0000 }, /* R2008 - SLIMTX4MIX Input 1 Source */
616 { 0x000007D9, 0x0080 }, /* R2009 - SLIMTX4MIX Input 1 Volume */
617 { 0x000007E0, 0x0000 }, /* R2016 - SLIMTX5MIX Input 1 Source */
618 { 0x000007E1, 0x0080 }, /* R2017 - SLIMTX5MIX Input 1 Volume */
619 { 0x000007E8, 0x0000 }, /* R2024 - SLIMTX6MIX Input 1 Source */
620 { 0x000007E9, 0x0080 }, /* R2025 - SLIMTX6MIX Input 1 Volume */
621 { 0x00000800, 0x0000 }, /* R2048 - SPDIF1TX1MIX Input 1 Source */
622 { 0x00000801, 0x0080 }, /* R2049 - SPDIF1TX1MIX Input 1 Volume */
623 { 0x00000808, 0x0000 }, /* R2056 - SPDIF1TX2MIX Input 1 Source */
624 { 0x00000809, 0x0080 }, /* R2057 - SPDIF1TX2MIX Input 1 Volume */
625 { 0x00000880, 0x0000 }, /* R2176 - EQ1MIX Input 1 Source */
626 { 0x00000881, 0x0080 }, /* R2177 - EQ1MIX Input 1 Volume */
627 { 0x00000888, 0x0000 }, /* R2184 - EQ2MIX Input 1 Source */
628 { 0x00000889, 0x0080 }, /* R2185 - EQ2MIX Input 1 Volume */
629 { 0x00000890, 0x0000 }, /* R2192 - EQ3MIX Input 1 Source */
630 { 0x00000891, 0x0080 }, /* R2193 - EQ3MIX Input 1 Volume */
631 { 0x00000898, 0x0000 }, /* R2200 - EQ4MIX Input 1 Source */
632 { 0x00000899, 0x0080 }, /* R2201 - EQ4MIX Input 1 Volume */
633 { 0x000008C0, 0x0000 }, /* R2240 - DRC1LMIX Input 1 Source */
634 { 0x000008C1, 0x0080 }, /* R2241 - DRC1LMIX Input 1 Volume */
635 { 0x000008C8, 0x0000 }, /* R2248 - DRC1RMIX Input 1 Source */
636 { 0x000008C9, 0x0080 }, /* R2249 - DRC1RMIX Input 1 Volume */
637 { 0x00000900, 0x0000 }, /* R2304 - HPLP1MIX Input 1 Source */
638 { 0x00000901, 0x0080 }, /* R2305 - HPLP1MIX Input 1 Volume */
639 { 0x00000902, 0x0000 }, /* R2306 - HPLP1MIX Input 2 Source */
640 { 0x00000903, 0x0080 }, /* R2307 - HPLP1MIX Input 2 Volume */
641 { 0x00000904, 0x0000 }, /* R2308 - HPLP1MIX Input 3 Source */
642 { 0x00000905, 0x0080 }, /* R2309 - HPLP1MIX Input 3 Volume */
643 { 0x00000906, 0x0000 }, /* R2310 - HPLP1MIX Input 4 Source */
644 { 0x00000907, 0x0080 }, /* R2311 - HPLP1MIX Input 4 Volume */
645 { 0x00000908, 0x0000 }, /* R2312 - HPLP2MIX Input 1 Source */
646 { 0x00000909, 0x0080 }, /* R2313 - HPLP2MIX Input 1 Volume */
647 { 0x0000090A, 0x0000 }, /* R2314 - HPLP2MIX Input 2 Source */
648 { 0x0000090B, 0x0080 }, /* R2315 - HPLP2MIX Input 2 Volume */
649 { 0x0000090C, 0x0000 }, /* R2316 - HPLP2MIX Input 3 Source */
650 { 0x0000090D, 0x0080 }, /* R2317 - HPLP2MIX Input 3 Volume */
651 { 0x0000090E, 0x0000 }, /* R2318 - HPLP2MIX Input 4 Source */
652 { 0x0000090F, 0x0080 }, /* R2319 - HPLP2MIX Input 4 Volume */
653 { 0x00000910, 0x0000 }, /* R2320 - HPLP3MIX Input 1 Source */
654 { 0x00000911, 0x0080 }, /* R2321 - HPLP3MIX Input 1 Volume */
655 { 0x00000912, 0x0000 }, /* R2322 - HPLP3MIX Input 2 Source */
656 { 0x00000913, 0x0080 }, /* R2323 - HPLP3MIX Input 2 Volume */
657 { 0x00000914, 0x0000 }, /* R2324 - HPLP3MIX Input 3 Source */
658 { 0x00000915, 0x0080 }, /* R2325 - HPLP3MIX Input 3 Volume */
659 { 0x00000916, 0x0000 }, /* R2326 - HPLP3MIX Input 4 Source */
660 { 0x00000917, 0x0080 }, /* R2327 - HPLP3MIX Input 4 Volume */
661 { 0x00000918, 0x0000 }, /* R2328 - HPLP4MIX Input 1 Source */
662 { 0x00000919, 0x0080 }, /* R2329 - HPLP4MIX Input 1 Volume */
663 { 0x0000091A, 0x0000 }, /* R2330 - HPLP4MIX Input 2 Source */
664 { 0x0000091B, 0x0080 }, /* R2331 - HPLP4MIX Input 2 Volume */
665 { 0x0000091C, 0x0000 }, /* R2332 - HPLP4MIX Input 3 Source */
666 { 0x0000091D, 0x0080 }, /* R2333 - HPLP4MIX Input 3 Volume */
667 { 0x0000091E, 0x0000 }, /* R2334 - HPLP4MIX Input 4 Source */
668 { 0x0000091F, 0x0080 }, /* R2335 - HPLP4MIX Input 4 Volume */
669 { 0x00000A80, 0x0000 }, /* R2688 - ASRC1LMIX Input 1 Source */
670 { 0x00000A88, 0x0000 }, /* R2696 - ASRC1RMIX Input 1 Source */
671 { 0x00000A90, 0x0000 }, /* R2704 - ASRC2LMIX Input 1 Source */
672 { 0x00000A98, 0x0000 }, /* R2712 - ASRC2RMIX Input 1 Source */
673 { 0x00000B00, 0x0000 }, /* R2816 - ISRC1DEC1MIX Input 1 Source */
674 { 0x00000B08, 0x0000 }, /* R2824 - ISRC1DEC2MIX Input 1 Source */
675 { 0x00000B10, 0x0000 }, /* R2832 - ISRC1DEC3MIX Input 1 Source */
676 { 0x00000B18, 0x0000 }, /* R2840 - ISRC1DEC4MIX Input 1 Source */
677 { 0x00000B20, 0x0000 }, /* R2848 - ISRC1INT1MIX Input 1 Source */
678 { 0x00000B28, 0x0000 }, /* R2856 - ISRC1INT2MIX Input 1 Source */
679 { 0x00000B30, 0x0000 }, /* R2864 - ISRC1INT3MIX Input 1 Source */
680 { 0x00000B38, 0x0000 }, /* R2872 - ISRC1INT4MIX Input 1 Source */
681 { 0x00000B40, 0x0000 }, /* R2880 - ISRC2DEC1MIX Input 1 Source */
682 { 0x00000B48, 0x0000 }, /* R2888 - ISRC2DEC2MIX Input 1 Source */
683 { 0x00000B60, 0x0000 }, /* R2912 - ISRC2INT1MIX Input 1 Source */
684 { 0x00000B68, 0x0000 }, /* R2920 - ISRC2INT2MIX Input 1 Source */
685 { 0x00000C00, 0xA101 }, /* R3072 - GPIO1 CTRL */
686 { 0x00000C01, 0xA101 }, /* R3073 - GPIO2 CTRL */
687 { 0x00000C02, 0xA101 }, /* R3074 - GPIO3 CTRL */
688 { 0x00000C03, 0xA101 }, /* R3075 - GPIO4 CTRL */
689 { 0x00000C04, 0xA101 }, /* R3076 - GPIO5 CTRL */
690 { 0x00000C0F, 0x0400 }, /* R3087 - IRQ CTRL 1 */
691 { 0x00000C10, 0x1000 }, /* R3088 - GPIO Debounce Config */
692 { 0x00000C18, 0x0000 }, /* R3096 - GP Switch 1 */
693 { 0x00000C20, 0x8002 }, /* R3104 - Misc Pad Ctrl 1 */
694 { 0x00000C21, 0x8001 }, /* R3105 - Misc Pad Ctrl 2 */
695 { 0x00000C22, 0x0000 }, /* R3106 - Misc Pad Ctrl 3 */
696 { 0x00000C23, 0x0000 }, /* R3107 - Misc Pad Ctrl 4 */
697 { 0x00000C24, 0x0000 }, /* R3108 - Misc Pad Ctrl 5 */
698 { 0x00000C25, 0x0000 }, /* R3109 - Misc Pad Ctrl 6 */
699 { 0x00000D08, 0xFFFF }, /* R3336 - Interrupt Status 1 Mask */
700 { 0x00000D09, 0xFFFF }, /* R3337 - Interrupt Status 2 Mask */
701 { 0x00000D0A, 0xFFFF }, /* R3338 - Interrupt Status 3 Mask */
702 { 0x00000D0B, 0xFFFF }, /* R3339 - Interrupt Status 4 Mask */
703 { 0x00000D0C, 0xFEFF }, /* R3340 - Interrupt Status 5 Mask */
704 { 0x00000D0F, 0x0000 }, /* R3343 - Interrupt Control */
705 { 0x00000D18, 0xFFFF }, /* R3352 - IRQ2 Status 1 Mask */
706 { 0x00000D19, 0xFFFF }, /* R3353 - IRQ2 Status 2 Mask */
707 { 0x00000D1A, 0xFFFF }, /* R3354 - IRQ2 Status 3 Mask */
708 { 0x00000D1B, 0xFFFF }, /* R3355 - IRQ2 Status 4 Mask */
709 { 0x00000D1C, 0xFEFF }, /* R3356 - IRQ2 Status 5 Mask */
710 { 0x00000D1D, 0xFFFF }, /* R3357 - IRQ2 Status 6 Mask */
711 { 0x00000D1F, 0x0000 }, /* R3359 - IRQ2 Control */
712 { 0x00000D53, 0xFFFF }, /* R3411 - AOD IRQ Mask IRQ1 */
713 { 0x00000D54, 0xFFFF }, /* R3412 - AOD IRQ Mask IRQ2 */
714 { 0x00000D56, 0x0000 }, /* R3414 - Jack detect debounce */
715 { 0x00000E00, 0x0000 }, /* R3584 - FX_Ctrl1 */
716 { 0x00000E01, 0x0000 }, /* R3585 - FX_Ctrl2 */
717 { 0x00000E10, 0x6318 }, /* R3600 - EQ1_1 */
718 { 0x00000E11, 0x6300 }, /* R3601 - EQ1_2 */
719 { 0x00000E12, 0x0FC8 }, /* R3602 - EQ1_3 */
720 { 0x00000E13, 0x03FE }, /* R3603 - EQ1_4 */
721 { 0x00000E14, 0x00E0 }, /* R3604 - EQ1_5 */
722 { 0x00000E15, 0x1EC4 }, /* R3605 - EQ1_6 */
723 { 0x00000E16, 0xF136 }, /* R3606 - EQ1_7 */
724 { 0x00000E17, 0x0409 }, /* R3607 - EQ1_8 */
725 { 0x00000E18, 0x04CC }, /* R3608 - EQ1_9 */
726 { 0x00000E19, 0x1C9B }, /* R3609 - EQ1_10 */
727 { 0x00000E1A, 0xF337 }, /* R3610 - EQ1_11 */
728 { 0x00000E1B, 0x040B }, /* R3611 - EQ1_12 */
729 { 0x00000E1C, 0x0CBB }, /* R3612 - EQ1_13 */
730 { 0x00000E1D, 0x16F8 }, /* R3613 - EQ1_14 */
731 { 0x00000E1E, 0xF7D9 }, /* R3614 - EQ1_15 */
732 { 0x00000E1F, 0x040A }, /* R3615 - EQ1_16 */
733 { 0x00000E20, 0x1F14 }, /* R3616 - EQ1_17 */
734 { 0x00000E21, 0x058C }, /* R3617 - EQ1_18 */
735 { 0x00000E22, 0x0563 }, /* R3618 - EQ1_19 */
736 { 0x00000E23, 0x4000 }, /* R3619 - EQ1_20 */
737 { 0x00000E24, 0x0B75 }, /* R3620 - EQ1_21 */
738 { 0x00000E26, 0x6318 }, /* R3622 - EQ2_1 */
739 { 0x00000E27, 0x6300 }, /* R3623 - EQ2_2 */
740 { 0x00000E28, 0x0FC8 }, /* R3624 - EQ2_3 */
741 { 0x00000E29, 0x03FE }, /* R3625 - EQ2_4 */
742 { 0x00000E2A, 0x00E0 }, /* R3626 - EQ2_5 */
743 { 0x00000E2B, 0x1EC4 }, /* R3627 - EQ2_6 */
744 { 0x00000E2C, 0xF136 }, /* R3628 - EQ2_7 */
745 { 0x00000E2D, 0x0409 }, /* R3629 - EQ2_8 */
746 { 0x00000E2E, 0x04CC }, /* R3630 - EQ2_9 */
747 { 0x00000E2F, 0x1C9B }, /* R3631 - EQ2_10 */
748 { 0x00000E30, 0xF337 }, /* R3632 - EQ2_11 */
749 { 0x00000E31, 0x040B }, /* R3633 - EQ2_12 */
750 { 0x00000E32, 0x0CBB }, /* R3634 - EQ2_13 */
751 { 0x00000E33, 0x16F8 }, /* R3635 - EQ2_14 */
752 { 0x00000E34, 0xF7D9 }, /* R3636 - EQ2_15 */
753 { 0x00000E35, 0x040A }, /* R3637 - EQ2_16 */
754 { 0x00000E36, 0x1F14 }, /* R3638 - EQ2_17 */
755 { 0x00000E37, 0x058C }, /* R3639 - EQ2_18 */
756 { 0x00000E38, 0x0563 }, /* R3640 - EQ2_19 */
757 { 0x00000E39, 0x4000 }, /* R3641 - EQ2_20 */
758 { 0x00000E3A, 0x0B75 }, /* R3642 - EQ2_21 */
759 { 0x00000E3C, 0x6318 }, /* R3644 - EQ3_1 */
760 { 0x00000E3D, 0x6300 }, /* R3645 - EQ3_2 */
761 { 0x00000E3E, 0x0FC8 }, /* R3646 - EQ3_3 */
762 { 0x00000E3F, 0x03FE }, /* R3647 - EQ3_4 */
763 { 0x00000E40, 0x00E0 }, /* R3648 - EQ3_5 */
764 { 0x00000E41, 0x1EC4 }, /* R3649 - EQ3_6 */
765 { 0x00000E42, 0xF136 }, /* R3650 - EQ3_7 */
766 { 0x00000E43, 0x0409 }, /* R3651 - EQ3_8 */
767 { 0x00000E44, 0x04CC }, /* R3652 - EQ3_9 */
768 { 0x00000E45, 0x1C9B }, /* R3653 - EQ3_10 */
769 { 0x00000E46, 0xF337 }, /* R3654 - EQ3_11 */
770 { 0x00000E47, 0x040B }, /* R3655 - EQ3_12 */
771 { 0x00000E48, 0x0CBB }, /* R3656 - EQ3_13 */
772 { 0x00000E49, 0x16F8 }, /* R3657 - EQ3_14 */
773 { 0x00000E4A, 0xF7D9 }, /* R3658 - EQ3_15 */
774 { 0x00000E4B, 0x040A }, /* R3659 - EQ3_16 */
775 { 0x00000E4C, 0x1F14 }, /* R3660 - EQ3_17 */
776 { 0x00000E4D, 0x058C }, /* R3661 - EQ3_18 */
777 { 0x00000E4E, 0x0563 }, /* R3662 - EQ3_19 */
778 { 0x00000E4F, 0x4000 }, /* R3663 - EQ3_20 */
779 { 0x00000E50, 0x0B75 }, /* R3664 - EQ3_21 */
780 { 0x00000E52, 0x6318 }, /* R3666 - EQ4_1 */
781 { 0x00000E53, 0x6300 }, /* R3667 - EQ4_2 */
782 { 0x00000E54, 0x0FC8 }, /* R3668 - EQ4_3 */
783 { 0x00000E55, 0x03FE }, /* R3669 - EQ4_4 */
784 { 0x00000E56, 0x00E0 }, /* R3670 - EQ4_5 */
785 { 0x00000E57, 0x1EC4 }, /* R3671 - EQ4_6 */
786 { 0x00000E58, 0xF136 }, /* R3672 - EQ4_7 */
787 { 0x00000E59, 0x0409 }, /* R3673 - EQ4_8 */
788 { 0x00000E5A, 0x04CC }, /* R3674 - EQ4_9 */
789 { 0x00000E5B, 0x1C9B }, /* R3675 - EQ4_10 */
790 { 0x00000E5C, 0xF337 }, /* R3676 - EQ4_11 */
791 { 0x00000E5D, 0x040B }, /* R3677 - EQ4_12 */
792 { 0x00000E5E, 0x0CBB }, /* R3678 - EQ4_13 */
793 { 0x00000E5F, 0x16F8 }, /* R3679 - EQ4_14 */
794 { 0x00000E60, 0xF7D9 }, /* R3680 - EQ4_15 */
795 { 0x00000E61, 0x040A }, /* R3681 - EQ4_16 */
796 { 0x00000E62, 0x1F14 }, /* R3682 - EQ4_17 */
797 { 0x00000E63, 0x058C }, /* R3683 - EQ4_18 */
798 { 0x00000E64, 0x0563 }, /* R3684 - EQ4_19 */
799 { 0x00000E65, 0x4000 }, /* R3685 - EQ4_20 */
800 { 0x00000E66, 0x0B75 }, /* R3686 - EQ4_21 */
801 { 0x00000E80, 0x0018 }, /* R3712 - DRC1 ctrl1 */
802 { 0x00000E81, 0x0933 }, /* R3713 - DRC1 ctrl2 */
803 { 0x00000E82, 0x0018 }, /* R3714 - DRC1 ctrl3 */
804 { 0x00000E83, 0x0000 }, /* R3715 - DRC1 ctrl4 */
805 { 0x00000E84, 0x0000 }, /* R3716 - DRC1 ctrl5 */
806 { 0x00000EC0, 0x0000 }, /* R3776 - HPLPF1_1 */
807 { 0x00000EC1, 0x0000 }, /* R3777 - HPLPF1_2 */
808 { 0x00000EC4, 0x0000 }, /* R3780 - HPLPF2_1 */
809 { 0x00000EC5, 0x0000 }, /* R3781 - HPLPF2_2 */
810 { 0x00000EC8, 0x0000 }, /* R3784 - HPLPF3_1 */
811 { 0x00000EC9, 0x0000 }, /* R3785 - HPLPF3_2 */
812 { 0x00000ECC, 0x0000 }, /* R3788 - HPLPF4_1 */
813 { 0x00000ECD, 0x0000 }, /* R3789 - HPLPF4_2 */
814 { 0x00000EE0, 0x0000 }, /* R3808 - ASRC_ENABLE */
815 { 0x00000EE2, 0x0000 }, /* R3810 - ASRC_RATE1 */
816 { 0x00000EE3, 0x4000 }, /* R3811 - ASRC_RATE2 */
817 { 0x00000EF0, 0x0000 }, /* R3824 - ISRC 1 CTRL 1 */
818 { 0x00000EF1, 0x0001 }, /* R3825 - ISRC 1 CTRL 2 */
819 { 0x00000EF2, 0x0000 }, /* R3826 - ISRC 1 CTRL 3 */
820 { 0x00000EF3, 0x0000 }, /* R3827 - ISRC 2 CTRL 1 */
821 { 0x00000EF4, 0x0001 }, /* R3828 - ISRC 2 CTRL 2 */
822 { 0x00000EF5, 0x0000 }, /* R3829 - ISRC 2 CTRL 3 */
823 { 0x00001700, 0x0000 }, /* R5888 - FRF_COEFF_1 */
824 { 0x00001701, 0x0000 }, /* R5889 - FRF_COEFF_2 */
825 { 0x00001702, 0x0000 }, /* R5890 - FRF_COEFF_3 */
826 { 0x00001703, 0x0000 }, /* R5891 - FRF_COEFF_4 */
827 { 0x00001704, 0x0000 }, /* R5892 - DAC_COMP_1 */
828 { 0x00001705, 0x0000 }, /* R5893 - DAC_COMP_2 */
829};
830
831static bool wm8998_readable_register(struct device *dev, unsigned int reg)
832{
833 switch (reg) {
834 case ARIZONA_SOFTWARE_RESET:
835 case ARIZONA_DEVICE_REVISION:
836 case ARIZONA_CTRL_IF_SPI_CFG_1:
837 case ARIZONA_CTRL_IF_I2C1_CFG_1:
838 case ARIZONA_CTRL_IF_I2C1_CFG_2:
839 case ARIZONA_WRITE_SEQUENCER_CTRL_0:
840 case ARIZONA_WRITE_SEQUENCER_CTRL_1:
841 case ARIZONA_WRITE_SEQUENCER_CTRL_2:
842 case ARIZONA_TONE_GENERATOR_1:
843 case ARIZONA_TONE_GENERATOR_2:
844 case ARIZONA_TONE_GENERATOR_3:
845 case ARIZONA_TONE_GENERATOR_4:
846 case ARIZONA_TONE_GENERATOR_5:
847 case ARIZONA_PWM_DRIVE_1:
848 case ARIZONA_PWM_DRIVE_2:
849 case ARIZONA_PWM_DRIVE_3:
850 case ARIZONA_WAKE_CONTROL:
851 case ARIZONA_SEQUENCE_CONTROL:
852 case ARIZONA_SAMPLE_RATE_SEQUENCE_SELECT_1:
853 case ARIZONA_SAMPLE_RATE_SEQUENCE_SELECT_2:
854 case ARIZONA_SAMPLE_RATE_SEQUENCE_SELECT_3:
855 case ARIZONA_SAMPLE_RATE_SEQUENCE_SELECT_4:
856 case ARIZONA_ALWAYS_ON_TRIGGERS_SEQUENCE_SELECT_1:
857 case ARIZONA_ALWAYS_ON_TRIGGERS_SEQUENCE_SELECT_2:
858 case ARIZONA_ALWAYS_ON_TRIGGERS_SEQUENCE_SELECT_3:
859 case ARIZONA_ALWAYS_ON_TRIGGERS_SEQUENCE_SELECT_4:
860 case ARIZONA_ALWAYS_ON_TRIGGERS_SEQUENCE_SELECT_5:
861 case ARIZONA_ALWAYS_ON_TRIGGERS_SEQUENCE_SELECT_6:
862 case ARIZONA_HAPTICS_CONTROL_1:
863 case ARIZONA_HAPTICS_CONTROL_2:
864 case ARIZONA_HAPTICS_PHASE_1_INTENSITY:
865 case ARIZONA_HAPTICS_PHASE_1_DURATION:
866 case ARIZONA_HAPTICS_PHASE_2_INTENSITY:
867 case ARIZONA_HAPTICS_PHASE_2_DURATION:
868 case ARIZONA_HAPTICS_PHASE_3_INTENSITY:
869 case ARIZONA_HAPTICS_PHASE_3_DURATION:
870 case ARIZONA_HAPTICS_STATUS:
871 case ARIZONA_CLOCK_32K_1:
872 case ARIZONA_SYSTEM_CLOCK_1:
873 case ARIZONA_SAMPLE_RATE_1:
874 case ARIZONA_SAMPLE_RATE_2:
875 case ARIZONA_SAMPLE_RATE_3:
876 case ARIZONA_SAMPLE_RATE_1_STATUS:
877 case ARIZONA_SAMPLE_RATE_2_STATUS:
878 case ARIZONA_SAMPLE_RATE_3_STATUS:
879 case ARIZONA_ASYNC_CLOCK_1:
880 case ARIZONA_ASYNC_SAMPLE_RATE_1:
881 case ARIZONA_ASYNC_SAMPLE_RATE_1_STATUS:
882 case ARIZONA_ASYNC_SAMPLE_RATE_2:
883 case ARIZONA_ASYNC_SAMPLE_RATE_2_STATUS:
884 case ARIZONA_OUTPUT_SYSTEM_CLOCK:
885 case ARIZONA_OUTPUT_ASYNC_CLOCK:
886 case ARIZONA_RATE_ESTIMATOR_1:
887 case ARIZONA_RATE_ESTIMATOR_2:
888 case ARIZONA_RATE_ESTIMATOR_3:
889 case ARIZONA_RATE_ESTIMATOR_4:
890 case ARIZONA_RATE_ESTIMATOR_5:
891 case ARIZONA_DYNAMIC_FREQUENCY_SCALING_1:
892 case ARIZONA_FLL1_CONTROL_1:
893 case ARIZONA_FLL1_CONTROL_2:
894 case ARIZONA_FLL1_CONTROL_3:
895 case ARIZONA_FLL1_CONTROL_4:
896 case ARIZONA_FLL1_CONTROL_5:
897 case ARIZONA_FLL1_CONTROL_6:
898 case ARIZONA_FLL1_CONTROL_7:
899 case ARIZONA_FLL1_LOOP_FILTER_TEST_1:
900 case ARIZONA_FLL1_NCO_TEST_0:
901 case ARIZONA_FLL1_SYNCHRONISER_1:
902 case ARIZONA_FLL1_SYNCHRONISER_2:
903 case ARIZONA_FLL1_SYNCHRONISER_3:
904 case ARIZONA_FLL1_SYNCHRONISER_4:
905 case ARIZONA_FLL1_SYNCHRONISER_5:
906 case ARIZONA_FLL1_SYNCHRONISER_6:
907 case ARIZONA_FLL1_SYNCHRONISER_7:
908 case ARIZONA_FLL1_SPREAD_SPECTRUM:
909 case ARIZONA_FLL1_GPIO_CLOCK:
910 case ARIZONA_FLL2_CONTROL_1:
911 case ARIZONA_FLL2_CONTROL_2:
912 case ARIZONA_FLL2_CONTROL_3:
913 case ARIZONA_FLL2_CONTROL_4:
914 case ARIZONA_FLL2_CONTROL_5:
915 case ARIZONA_FLL2_CONTROL_6:
916 case ARIZONA_FLL2_CONTROL_7:
917 case ARIZONA_FLL2_LOOP_FILTER_TEST_1:
918 case ARIZONA_FLL2_NCO_TEST_0:
919 case ARIZONA_FLL2_SYNCHRONISER_1:
920 case ARIZONA_FLL2_SYNCHRONISER_2:
921 case ARIZONA_FLL2_SYNCHRONISER_3:
922 case ARIZONA_FLL2_SYNCHRONISER_4:
923 case ARIZONA_FLL2_SYNCHRONISER_5:
924 case ARIZONA_FLL2_SYNCHRONISER_6:
925 case ARIZONA_FLL2_SYNCHRONISER_7:
926 case ARIZONA_FLL2_SPREAD_SPECTRUM:
927 case ARIZONA_FLL2_GPIO_CLOCK:
928 case ARIZONA_MIC_CHARGE_PUMP_1:
929 case ARIZONA_LDO1_CONTROL_1:
930 case ARIZONA_LDO1_CONTROL_2:
931 case ARIZONA_LDO2_CONTROL_1:
932 case ARIZONA_MIC_BIAS_CTRL_1:
933 case ARIZONA_MIC_BIAS_CTRL_2:
934 case ARIZONA_MIC_BIAS_CTRL_3:
935 case ARIZONA_ACCESSORY_DETECT_MODE_1:
936 case ARIZONA_HEADPHONE_DETECT_1:
937 case ARIZONA_HEADPHONE_DETECT_2:
938 case ARIZONA_MICD_CLAMP_CONTROL:
939 case ARIZONA_MIC_DETECT_1:
940 case ARIZONA_MIC_DETECT_2:
941 case ARIZONA_MIC_DETECT_3:
942 case ARIZONA_MIC_DETECT_4:
943 case ARIZONA_MIC_DETECT_LEVEL_1:
944 case ARIZONA_MIC_DETECT_LEVEL_2:
945 case ARIZONA_MIC_DETECT_LEVEL_3:
946 case ARIZONA_MIC_DETECT_LEVEL_4:
947 case ARIZONA_ISOLATION_CONTROL:
948 case ARIZONA_JACK_DETECT_ANALOGUE:
949 case ARIZONA_INPUT_ENABLES:
950 case ARIZONA_INPUT_ENABLES_STATUS:
951 case ARIZONA_INPUT_RATE:
952 case ARIZONA_INPUT_VOLUME_RAMP:
953 case ARIZONA_HPF_CONTROL:
954 case ARIZONA_IN1L_CONTROL:
955 case ARIZONA_ADC_DIGITAL_VOLUME_1L:
956 case ARIZONA_DMIC1L_CONTROL:
957 case ARIZONA_IN1R_CONTROL:
958 case ARIZONA_ADC_DIGITAL_VOLUME_1R:
959 case ARIZONA_DMIC1R_CONTROL:
960 case ARIZONA_IN2L_CONTROL:
961 case ARIZONA_ADC_DIGITAL_VOLUME_2L:
962 case ARIZONA_DMIC2L_CONTROL:
963 case ARIZONA_OUTPUT_ENABLES_1:
964 case ARIZONA_OUTPUT_STATUS_1:
965 case ARIZONA_RAW_OUTPUT_STATUS_1:
966 case ARIZONA_OUTPUT_RATE_1:
967 case ARIZONA_OUTPUT_VOLUME_RAMP:
968 case ARIZONA_OUTPUT_PATH_CONFIG_1L:
969 case ARIZONA_DAC_DIGITAL_VOLUME_1L:
970 case ARIZONA_NOISE_GATE_SELECT_1L:
971 case ARIZONA_OUTPUT_PATH_CONFIG_1R:
972 case ARIZONA_DAC_DIGITAL_VOLUME_1R:
973 case ARIZONA_NOISE_GATE_SELECT_1R:
974 case ARIZONA_OUTPUT_PATH_CONFIG_2L:
975 case ARIZONA_DAC_DIGITAL_VOLUME_2L:
976 case ARIZONA_NOISE_GATE_SELECT_2L:
977 case ARIZONA_OUTPUT_PATH_CONFIG_2R:
978 case ARIZONA_DAC_DIGITAL_VOLUME_2R:
979 case ARIZONA_NOISE_GATE_SELECT_2R:
980 case ARIZONA_OUTPUT_PATH_CONFIG_3L:
981 case ARIZONA_DAC_DIGITAL_VOLUME_3L:
982 case ARIZONA_NOISE_GATE_SELECT_3L:
983 case ARIZONA_OUTPUT_PATH_CONFIG_4L:
984 case ARIZONA_DAC_DIGITAL_VOLUME_4L:
985 case ARIZONA_NOISE_GATE_SELECT_4L:
986 case ARIZONA_OUTPUT_PATH_CONFIG_4R:
987 case ARIZONA_DAC_DIGITAL_VOLUME_4R:
988 case ARIZONA_NOISE_GATE_SELECT_4R:
989 case ARIZONA_OUTPUT_PATH_CONFIG_5L:
990 case ARIZONA_DAC_DIGITAL_VOLUME_5L:
991 case ARIZONA_NOISE_GATE_SELECT_5L:
992 case ARIZONA_OUTPUT_PATH_CONFIG_5R:
993 case ARIZONA_DAC_DIGITAL_VOLUME_5R:
994 case ARIZONA_NOISE_GATE_SELECT_5R:
995 case ARIZONA_DRE_ENABLE:
996 case ARIZONA_DRE_CONTROL_1:
997 case ARIZONA_DRE_CONTROL_2:
998 case ARIZONA_DRE_CONTROL_3:
999 case ARIZONA_EDRE_ENABLE:
1000 case ARIZONA_DAC_AEC_CONTROL_1:
1001 case ARIZONA_DAC_AEC_CONTROL_2:
1002 case ARIZONA_NOISE_GATE_CONTROL:
1003 case ARIZONA_PDM_SPK1_CTRL_1:
1004 case ARIZONA_PDM_SPK1_CTRL_2:
1005 case ARIZONA_HP_TEST_CTRL_13:
1006 case ARIZONA_AIF1_BCLK_CTRL:
1007 case ARIZONA_AIF1_TX_PIN_CTRL:
1008 case ARIZONA_AIF1_RX_PIN_CTRL:
1009 case ARIZONA_AIF1_RATE_CTRL:
1010 case ARIZONA_AIF1_FORMAT:
1011 case ARIZONA_AIF1_RX_BCLK_RATE:
1012 case ARIZONA_AIF1_FRAME_CTRL_1:
1013 case ARIZONA_AIF1_FRAME_CTRL_2:
1014 case ARIZONA_AIF1_FRAME_CTRL_3:
1015 case ARIZONA_AIF1_FRAME_CTRL_4:
1016 case ARIZONA_AIF1_FRAME_CTRL_5:
1017 case ARIZONA_AIF1_FRAME_CTRL_6:
1018 case ARIZONA_AIF1_FRAME_CTRL_7:
1019 case ARIZONA_AIF1_FRAME_CTRL_8:
1020 case ARIZONA_AIF1_FRAME_CTRL_11:
1021 case ARIZONA_AIF1_FRAME_CTRL_12:
1022 case ARIZONA_AIF1_FRAME_CTRL_13:
1023 case ARIZONA_AIF1_FRAME_CTRL_14:
1024 case ARIZONA_AIF1_FRAME_CTRL_15:
1025 case ARIZONA_AIF1_FRAME_CTRL_16:
1026 case ARIZONA_AIF1_TX_ENABLES:
1027 case ARIZONA_AIF1_RX_ENABLES:
1028 case ARIZONA_AIF2_BCLK_CTRL:
1029 case ARIZONA_AIF2_TX_PIN_CTRL:
1030 case ARIZONA_AIF2_RX_PIN_CTRL:
1031 case ARIZONA_AIF2_RATE_CTRL:
1032 case ARIZONA_AIF2_FORMAT:
1033 case ARIZONA_AIF2_RX_BCLK_RATE:
1034 case ARIZONA_AIF2_FRAME_CTRL_1:
1035 case ARIZONA_AIF2_FRAME_CTRL_2:
1036 case ARIZONA_AIF2_FRAME_CTRL_3:
1037 case ARIZONA_AIF2_FRAME_CTRL_4:
1038 case ARIZONA_AIF2_FRAME_CTRL_5:
1039 case ARIZONA_AIF2_FRAME_CTRL_6:
1040 case ARIZONA_AIF2_FRAME_CTRL_7:
1041 case ARIZONA_AIF2_FRAME_CTRL_8:
1042 case ARIZONA_AIF2_FRAME_CTRL_11:
1043 case ARIZONA_AIF2_FRAME_CTRL_12:
1044 case ARIZONA_AIF2_FRAME_CTRL_13:
1045 case ARIZONA_AIF2_FRAME_CTRL_14:
1046 case ARIZONA_AIF2_FRAME_CTRL_15:
1047 case ARIZONA_AIF2_FRAME_CTRL_16:
1048 case ARIZONA_AIF2_TX_ENABLES:
1049 case ARIZONA_AIF2_RX_ENABLES:
1050 case ARIZONA_AIF3_BCLK_CTRL:
1051 case ARIZONA_AIF3_TX_PIN_CTRL:
1052 case ARIZONA_AIF3_RX_PIN_CTRL:
1053 case ARIZONA_AIF3_RATE_CTRL:
1054 case ARIZONA_AIF3_FORMAT:
1055 case ARIZONA_AIF3_RX_BCLK_RATE:
1056 case ARIZONA_AIF3_FRAME_CTRL_1:
1057 case ARIZONA_AIF3_FRAME_CTRL_2:
1058 case ARIZONA_AIF3_FRAME_CTRL_3:
1059 case ARIZONA_AIF3_FRAME_CTRL_4:
1060 case ARIZONA_AIF3_FRAME_CTRL_11:
1061 case ARIZONA_AIF3_FRAME_CTRL_12:
1062 case ARIZONA_AIF3_TX_ENABLES:
1063 case ARIZONA_AIF3_RX_ENABLES:
1064 case ARIZONA_SPD1_TX_CONTROL:
1065 case ARIZONA_SPD1_TX_CHANNEL_STATUS_1:
1066 case ARIZONA_SPD1_TX_CHANNEL_STATUS_2:
1067 case ARIZONA_SPD1_TX_CHANNEL_STATUS_3:
1068 case ARIZONA_SLIMBUS_FRAMER_REF_GEAR:
1069 case ARIZONA_SLIMBUS_RATES_1:
1070 case ARIZONA_SLIMBUS_RATES_2:
1071 case ARIZONA_SLIMBUS_RATES_5:
1072 case ARIZONA_SLIMBUS_RATES_6:
1073 case ARIZONA_SLIMBUS_RATES_7:
1074 case ARIZONA_SLIMBUS_RX_CHANNEL_ENABLE:
1075 case ARIZONA_SLIMBUS_TX_CHANNEL_ENABLE:
1076 case ARIZONA_SLIMBUS_RX_PORT_STATUS:
1077 case ARIZONA_SLIMBUS_TX_PORT_STATUS:
1078 case ARIZONA_PWM1MIX_INPUT_1_SOURCE:
1079 case ARIZONA_PWM1MIX_INPUT_1_VOLUME:
1080 case ARIZONA_PWM1MIX_INPUT_2_SOURCE:
1081 case ARIZONA_PWM1MIX_INPUT_2_VOLUME:
1082 case ARIZONA_PWM1MIX_INPUT_3_SOURCE:
1083 case ARIZONA_PWM1MIX_INPUT_3_VOLUME:
1084 case ARIZONA_PWM1MIX_INPUT_4_SOURCE:
1085 case ARIZONA_PWM1MIX_INPUT_4_VOLUME:
1086 case ARIZONA_PWM2MIX_INPUT_1_SOURCE:
1087 case ARIZONA_PWM2MIX_INPUT_1_VOLUME:
1088 case ARIZONA_PWM2MIX_INPUT_2_SOURCE:
1089 case ARIZONA_PWM2MIX_INPUT_2_VOLUME:
1090 case ARIZONA_PWM2MIX_INPUT_3_SOURCE:
1091 case ARIZONA_PWM2MIX_INPUT_3_VOLUME:
1092 case ARIZONA_PWM2MIX_INPUT_4_SOURCE:
1093 case ARIZONA_PWM2MIX_INPUT_4_VOLUME:
1094 case ARIZONA_OUT1LMIX_INPUT_1_SOURCE:
1095 case ARIZONA_OUT1LMIX_INPUT_1_VOLUME:
1096 case ARIZONA_OUT1LMIX_INPUT_2_SOURCE:
1097 case ARIZONA_OUT1LMIX_INPUT_2_VOLUME:
1098 case ARIZONA_OUT1LMIX_INPUT_3_SOURCE:
1099 case ARIZONA_OUT1LMIX_INPUT_3_VOLUME:
1100 case ARIZONA_OUT1LMIX_INPUT_4_SOURCE:
1101 case ARIZONA_OUT1LMIX_INPUT_4_VOLUME:
1102 case ARIZONA_OUT1RMIX_INPUT_1_SOURCE:
1103 case ARIZONA_OUT1RMIX_INPUT_1_VOLUME:
1104 case ARIZONA_OUT1RMIX_INPUT_2_SOURCE:
1105 case ARIZONA_OUT1RMIX_INPUT_2_VOLUME:
1106 case ARIZONA_OUT1RMIX_INPUT_3_SOURCE:
1107 case ARIZONA_OUT1RMIX_INPUT_3_VOLUME:
1108 case ARIZONA_OUT1RMIX_INPUT_4_SOURCE:
1109 case ARIZONA_OUT1RMIX_INPUT_4_VOLUME:
1110 case ARIZONA_OUT2LMIX_INPUT_1_SOURCE:
1111 case ARIZONA_OUT2LMIX_INPUT_1_VOLUME:
1112 case ARIZONA_OUT2LMIX_INPUT_2_SOURCE:
1113 case ARIZONA_OUT2LMIX_INPUT_2_VOLUME:
1114 case ARIZONA_OUT2LMIX_INPUT_3_SOURCE:
1115 case ARIZONA_OUT2LMIX_INPUT_3_VOLUME:
1116 case ARIZONA_OUT2LMIX_INPUT_4_SOURCE:
1117 case ARIZONA_OUT2LMIX_INPUT_4_VOLUME:
1118 case ARIZONA_OUT2RMIX_INPUT_1_SOURCE:
1119 case ARIZONA_OUT2RMIX_INPUT_1_VOLUME:
1120 case ARIZONA_OUT2RMIX_INPUT_2_SOURCE:
1121 case ARIZONA_OUT2RMIX_INPUT_2_VOLUME:
1122 case ARIZONA_OUT2RMIX_INPUT_3_SOURCE:
1123 case ARIZONA_OUT2RMIX_INPUT_3_VOLUME:
1124 case ARIZONA_OUT2RMIX_INPUT_4_SOURCE:
1125 case ARIZONA_OUT2RMIX_INPUT_4_VOLUME:
1126 case ARIZONA_OUT3LMIX_INPUT_1_SOURCE:
1127 case ARIZONA_OUT3LMIX_INPUT_1_VOLUME:
1128 case ARIZONA_OUT3LMIX_INPUT_2_SOURCE:
1129 case ARIZONA_OUT3LMIX_INPUT_2_VOLUME:
1130 case ARIZONA_OUT3LMIX_INPUT_3_SOURCE:
1131 case ARIZONA_OUT3LMIX_INPUT_3_VOLUME:
1132 case ARIZONA_OUT3LMIX_INPUT_4_SOURCE:
1133 case ARIZONA_OUT3LMIX_INPUT_4_VOLUME:
1134 case ARIZONA_OUT4LMIX_INPUT_1_SOURCE:
1135 case ARIZONA_OUT4LMIX_INPUT_1_VOLUME:
1136 case ARIZONA_OUT4LMIX_INPUT_2_SOURCE:
1137 case ARIZONA_OUT4LMIX_INPUT_2_VOLUME:
1138 case ARIZONA_OUT4LMIX_INPUT_3_SOURCE:
1139 case ARIZONA_OUT4LMIX_INPUT_3_VOLUME:
1140 case ARIZONA_OUT4LMIX_INPUT_4_SOURCE:
1141 case ARIZONA_OUT4LMIX_INPUT_4_VOLUME:
1142 case ARIZONA_OUT4RMIX_INPUT_1_SOURCE:
1143 case ARIZONA_OUT4RMIX_INPUT_1_VOLUME:
1144 case ARIZONA_OUT4RMIX_INPUT_2_SOURCE:
1145 case ARIZONA_OUT4RMIX_INPUT_2_VOLUME:
1146 case ARIZONA_OUT4RMIX_INPUT_3_SOURCE:
1147 case ARIZONA_OUT4RMIX_INPUT_3_VOLUME:
1148 case ARIZONA_OUT4RMIX_INPUT_4_SOURCE:
1149 case ARIZONA_OUT4RMIX_INPUT_4_VOLUME:
1150 case ARIZONA_OUT5LMIX_INPUT_1_SOURCE:
1151 case ARIZONA_OUT5LMIX_INPUT_1_VOLUME:
1152 case ARIZONA_OUT5LMIX_INPUT_2_SOURCE:
1153 case ARIZONA_OUT5LMIX_INPUT_2_VOLUME:
1154 case ARIZONA_OUT5LMIX_INPUT_3_SOURCE:
1155 case ARIZONA_OUT5LMIX_INPUT_3_VOLUME:
1156 case ARIZONA_OUT5LMIX_INPUT_4_SOURCE:
1157 case ARIZONA_OUT5LMIX_INPUT_4_VOLUME:
1158 case ARIZONA_OUT5RMIX_INPUT_1_SOURCE:
1159 case ARIZONA_OUT5RMIX_INPUT_1_VOLUME:
1160 case ARIZONA_OUT5RMIX_INPUT_2_SOURCE:
1161 case ARIZONA_OUT5RMIX_INPUT_2_VOLUME:
1162 case ARIZONA_OUT5RMIX_INPUT_3_SOURCE:
1163 case ARIZONA_OUT5RMIX_INPUT_3_VOLUME:
1164 case ARIZONA_OUT5RMIX_INPUT_4_SOURCE:
1165 case ARIZONA_OUT5RMIX_INPUT_4_VOLUME:
1166 case ARIZONA_AIF1TX1MIX_INPUT_1_SOURCE:
1167 case ARIZONA_AIF1TX1MIX_INPUT_1_VOLUME:
1168 case ARIZONA_AIF1TX1MIX_INPUT_2_SOURCE:
1169 case ARIZONA_AIF1TX1MIX_INPUT_2_VOLUME:
1170 case ARIZONA_AIF1TX1MIX_INPUT_3_SOURCE:
1171 case ARIZONA_AIF1TX1MIX_INPUT_3_VOLUME:
1172 case ARIZONA_AIF1TX1MIX_INPUT_4_SOURCE:
1173 case ARIZONA_AIF1TX1MIX_INPUT_4_VOLUME:
1174 case ARIZONA_AIF1TX2MIX_INPUT_1_SOURCE:
1175 case ARIZONA_AIF1TX2MIX_INPUT_1_VOLUME:
1176 case ARIZONA_AIF1TX2MIX_INPUT_2_SOURCE:
1177 case ARIZONA_AIF1TX2MIX_INPUT_2_VOLUME:
1178 case ARIZONA_AIF1TX2MIX_INPUT_3_SOURCE:
1179 case ARIZONA_AIF1TX2MIX_INPUT_3_VOLUME:
1180 case ARIZONA_AIF1TX2MIX_INPUT_4_SOURCE:
1181 case ARIZONA_AIF1TX2MIX_INPUT_4_VOLUME:
1182 case ARIZONA_AIF1TX3MIX_INPUT_1_SOURCE:
1183 case ARIZONA_AIF1TX3MIX_INPUT_1_VOLUME:
1184 case ARIZONA_AIF1TX3MIX_INPUT_2_SOURCE:
1185 case ARIZONA_AIF1TX3MIX_INPUT_2_VOLUME:
1186 case ARIZONA_AIF1TX3MIX_INPUT_3_SOURCE:
1187 case ARIZONA_AIF1TX3MIX_INPUT_3_VOLUME:
1188 case ARIZONA_AIF1TX3MIX_INPUT_4_SOURCE:
1189 case ARIZONA_AIF1TX3MIX_INPUT_4_VOLUME:
1190 case ARIZONA_AIF1TX4MIX_INPUT_1_SOURCE:
1191 case ARIZONA_AIF1TX4MIX_INPUT_1_VOLUME:
1192 case ARIZONA_AIF1TX4MIX_INPUT_2_SOURCE:
1193 case ARIZONA_AIF1TX4MIX_INPUT_2_VOLUME:
1194 case ARIZONA_AIF1TX4MIX_INPUT_3_SOURCE:
1195 case ARIZONA_AIF1TX4MIX_INPUT_3_VOLUME:
1196 case ARIZONA_AIF1TX4MIX_INPUT_4_SOURCE:
1197 case ARIZONA_AIF1TX4MIX_INPUT_4_VOLUME:
1198 case ARIZONA_AIF1TX5MIX_INPUT_1_SOURCE:
1199 case ARIZONA_AIF1TX5MIX_INPUT_1_VOLUME:
1200 case ARIZONA_AIF1TX5MIX_INPUT_2_SOURCE:
1201 case ARIZONA_AIF1TX5MIX_INPUT_2_VOLUME:
1202 case ARIZONA_AIF1TX5MIX_INPUT_3_SOURCE:
1203 case ARIZONA_AIF1TX5MIX_INPUT_3_VOLUME:
1204 case ARIZONA_AIF1TX5MIX_INPUT_4_SOURCE:
1205 case ARIZONA_AIF1TX5MIX_INPUT_4_VOLUME:
1206 case ARIZONA_AIF1TX6MIX_INPUT_1_SOURCE:
1207 case ARIZONA_AIF1TX6MIX_INPUT_1_VOLUME:
1208 case ARIZONA_AIF1TX6MIX_INPUT_2_SOURCE:
1209 case ARIZONA_AIF1TX6MIX_INPUT_2_VOLUME:
1210 case ARIZONA_AIF1TX6MIX_INPUT_3_SOURCE:
1211 case ARIZONA_AIF1TX6MIX_INPUT_3_VOLUME:
1212 case ARIZONA_AIF1TX6MIX_INPUT_4_SOURCE:
1213 case ARIZONA_AIF1TX6MIX_INPUT_4_VOLUME:
1214 case ARIZONA_AIF2TX1MIX_INPUT_1_SOURCE:
1215 case ARIZONA_AIF2TX1MIX_INPUT_1_VOLUME:
1216 case ARIZONA_AIF2TX1MIX_INPUT_2_SOURCE:
1217 case ARIZONA_AIF2TX1MIX_INPUT_2_VOLUME:
1218 case ARIZONA_AIF2TX1MIX_INPUT_3_SOURCE:
1219 case ARIZONA_AIF2TX1MIX_INPUT_3_VOLUME:
1220 case ARIZONA_AIF2TX1MIX_INPUT_4_SOURCE:
1221 case ARIZONA_AIF2TX1MIX_INPUT_4_VOLUME:
1222 case ARIZONA_AIF2TX2MIX_INPUT_1_SOURCE:
1223 case ARIZONA_AIF2TX2MIX_INPUT_1_VOLUME:
1224 case ARIZONA_AIF2TX2MIX_INPUT_2_SOURCE:
1225 case ARIZONA_AIF2TX2MIX_INPUT_2_VOLUME:
1226 case ARIZONA_AIF2TX2MIX_INPUT_3_SOURCE:
1227 case ARIZONA_AIF2TX2MIX_INPUT_3_VOLUME:
1228 case ARIZONA_AIF2TX2MIX_INPUT_4_SOURCE:
1229 case ARIZONA_AIF2TX2MIX_INPUT_4_VOLUME:
1230 case ARIZONA_AIF2TX3MIX_INPUT_1_SOURCE:
1231 case ARIZONA_AIF2TX3MIX_INPUT_1_VOLUME:
1232 case ARIZONA_AIF2TX3MIX_INPUT_2_SOURCE:
1233 case ARIZONA_AIF2TX3MIX_INPUT_2_VOLUME:
1234 case ARIZONA_AIF2TX3MIX_INPUT_3_SOURCE:
1235 case ARIZONA_AIF2TX3MIX_INPUT_3_VOLUME:
1236 case ARIZONA_AIF2TX3MIX_INPUT_4_SOURCE:
1237 case ARIZONA_AIF2TX3MIX_INPUT_4_VOLUME:
1238 case ARIZONA_AIF2TX4MIX_INPUT_1_SOURCE:
1239 case ARIZONA_AIF2TX4MIX_INPUT_1_VOLUME:
1240 case ARIZONA_AIF2TX4MIX_INPUT_2_SOURCE:
1241 case ARIZONA_AIF2TX4MIX_INPUT_2_VOLUME:
1242 case ARIZONA_AIF2TX4MIX_INPUT_3_SOURCE:
1243 case ARIZONA_AIF2TX4MIX_INPUT_3_VOLUME:
1244 case ARIZONA_AIF2TX4MIX_INPUT_4_SOURCE:
1245 case ARIZONA_AIF2TX4MIX_INPUT_4_VOLUME:
1246 case ARIZONA_AIF2TX5MIX_INPUT_1_SOURCE:
1247 case ARIZONA_AIF2TX5MIX_INPUT_1_VOLUME:
1248 case ARIZONA_AIF2TX5MIX_INPUT_2_SOURCE:
1249 case ARIZONA_AIF2TX5MIX_INPUT_2_VOLUME:
1250 case ARIZONA_AIF2TX5MIX_INPUT_3_SOURCE:
1251 case ARIZONA_AIF2TX5MIX_INPUT_3_VOLUME:
1252 case ARIZONA_AIF2TX5MIX_INPUT_4_SOURCE:
1253 case ARIZONA_AIF2TX5MIX_INPUT_4_VOLUME:
1254 case ARIZONA_AIF2TX6MIX_INPUT_1_SOURCE:
1255 case ARIZONA_AIF2TX6MIX_INPUT_1_VOLUME:
1256 case ARIZONA_AIF2TX6MIX_INPUT_2_SOURCE:
1257 case ARIZONA_AIF2TX6MIX_INPUT_2_VOLUME:
1258 case ARIZONA_AIF2TX6MIX_INPUT_3_SOURCE:
1259 case ARIZONA_AIF2TX6MIX_INPUT_3_VOLUME:
1260 case ARIZONA_AIF2TX6MIX_INPUT_4_SOURCE:
1261 case ARIZONA_AIF2TX6MIX_INPUT_4_VOLUME:
1262 case ARIZONA_AIF3TX1MIX_INPUT_1_SOURCE:
1263 case ARIZONA_AIF3TX1MIX_INPUT_1_VOLUME:
1264 case ARIZONA_AIF3TX1MIX_INPUT_2_SOURCE:
1265 case ARIZONA_AIF3TX1MIX_INPUT_2_VOLUME:
1266 case ARIZONA_AIF3TX1MIX_INPUT_3_SOURCE:
1267 case ARIZONA_AIF3TX1MIX_INPUT_3_VOLUME:
1268 case ARIZONA_AIF3TX1MIX_INPUT_4_SOURCE:
1269 case ARIZONA_AIF3TX1MIX_INPUT_4_VOLUME:
1270 case ARIZONA_AIF3TX2MIX_INPUT_1_SOURCE:
1271 case ARIZONA_AIF3TX2MIX_INPUT_1_VOLUME:
1272 case ARIZONA_AIF3TX2MIX_INPUT_2_SOURCE:
1273 case ARIZONA_AIF3TX2MIX_INPUT_2_VOLUME:
1274 case ARIZONA_AIF3TX2MIX_INPUT_3_SOURCE:
1275 case ARIZONA_AIF3TX2MIX_INPUT_3_VOLUME:
1276 case ARIZONA_AIF3TX2MIX_INPUT_4_SOURCE:
1277 case ARIZONA_AIF3TX2MIX_INPUT_4_VOLUME:
1278 case ARIZONA_SLIMTX1MIX_INPUT_1_SOURCE:
1279 case ARIZONA_SLIMTX1MIX_INPUT_1_VOLUME:
1280 case ARIZONA_SLIMTX2MIX_INPUT_1_SOURCE:
1281 case ARIZONA_SLIMTX2MIX_INPUT_1_VOLUME:
1282 case ARIZONA_SLIMTX3MIX_INPUT_1_SOURCE:
1283 case ARIZONA_SLIMTX3MIX_INPUT_1_VOLUME:
1284 case ARIZONA_SLIMTX4MIX_INPUT_1_SOURCE:
1285 case ARIZONA_SLIMTX4MIX_INPUT_1_VOLUME:
1286 case ARIZONA_SLIMTX5MIX_INPUT_1_SOURCE:
1287 case ARIZONA_SLIMTX5MIX_INPUT_1_VOLUME:
1288 case ARIZONA_SLIMTX6MIX_INPUT_1_SOURCE:
1289 case ARIZONA_SLIMTX6MIX_INPUT_1_VOLUME:
1290 case ARIZONA_SPDIFTX1MIX_INPUT_1_SOURCE:
1291 case ARIZONA_SPDIFTX1MIX_INPUT_1_VOLUME:
1292 case ARIZONA_SPDIFTX2MIX_INPUT_1_SOURCE:
1293 case ARIZONA_SPDIFTX2MIX_INPUT_1_VOLUME:
1294 case ARIZONA_EQ1MIX_INPUT_1_SOURCE:
1295 case ARIZONA_EQ1MIX_INPUT_1_VOLUME:
1296 case ARIZONA_EQ2MIX_INPUT_1_SOURCE:
1297 case ARIZONA_EQ2MIX_INPUT_1_VOLUME:
1298 case ARIZONA_EQ3MIX_INPUT_1_SOURCE:
1299 case ARIZONA_EQ3MIX_INPUT_1_VOLUME:
1300 case ARIZONA_EQ4MIX_INPUT_1_SOURCE:
1301 case ARIZONA_EQ4MIX_INPUT_1_VOLUME:
1302 case ARIZONA_DRC1LMIX_INPUT_1_SOURCE:
1303 case ARIZONA_DRC1LMIX_INPUT_1_VOLUME:
1304 case ARIZONA_DRC1RMIX_INPUT_1_SOURCE:
1305 case ARIZONA_DRC1RMIX_INPUT_1_VOLUME:
1306 case ARIZONA_HPLP1MIX_INPUT_1_SOURCE:
1307 case ARIZONA_HPLP1MIX_INPUT_1_VOLUME:
1308 case ARIZONA_HPLP1MIX_INPUT_2_SOURCE:
1309 case ARIZONA_HPLP1MIX_INPUT_2_VOLUME:
1310 case ARIZONA_HPLP1MIX_INPUT_3_SOURCE:
1311 case ARIZONA_HPLP1MIX_INPUT_3_VOLUME:
1312 case ARIZONA_HPLP1MIX_INPUT_4_SOURCE:
1313 case ARIZONA_HPLP1MIX_INPUT_4_VOLUME:
1314 case ARIZONA_HPLP2MIX_INPUT_1_SOURCE:
1315 case ARIZONA_HPLP2MIX_INPUT_1_VOLUME:
1316 case ARIZONA_HPLP2MIX_INPUT_2_SOURCE:
1317 case ARIZONA_HPLP2MIX_INPUT_2_VOLUME:
1318 case ARIZONA_HPLP2MIX_INPUT_3_SOURCE:
1319 case ARIZONA_HPLP2MIX_INPUT_3_VOLUME:
1320 case ARIZONA_HPLP2MIX_INPUT_4_SOURCE:
1321 case ARIZONA_HPLP2MIX_INPUT_4_VOLUME:
1322 case ARIZONA_HPLP3MIX_INPUT_1_SOURCE:
1323 case ARIZONA_HPLP3MIX_INPUT_1_VOLUME:
1324 case ARIZONA_HPLP3MIX_INPUT_2_SOURCE:
1325 case ARIZONA_HPLP3MIX_INPUT_2_VOLUME:
1326 case ARIZONA_HPLP3MIX_INPUT_3_SOURCE:
1327 case ARIZONA_HPLP3MIX_INPUT_3_VOLUME:
1328 case ARIZONA_HPLP3MIX_INPUT_4_SOURCE:
1329 case ARIZONA_HPLP3MIX_INPUT_4_VOLUME:
1330 case ARIZONA_HPLP4MIX_INPUT_1_SOURCE:
1331 case ARIZONA_HPLP4MIX_INPUT_1_VOLUME:
1332 case ARIZONA_HPLP4MIX_INPUT_2_SOURCE:
1333 case ARIZONA_HPLP4MIX_INPUT_2_VOLUME:
1334 case ARIZONA_HPLP4MIX_INPUT_3_SOURCE:
1335 case ARIZONA_HPLP4MIX_INPUT_3_VOLUME:
1336 case ARIZONA_HPLP4MIX_INPUT_4_SOURCE:
1337 case ARIZONA_HPLP4MIX_INPUT_4_VOLUME:
1338 case ARIZONA_ASRC1LMIX_INPUT_1_SOURCE:
1339 case ARIZONA_ASRC1RMIX_INPUT_1_SOURCE:
1340 case ARIZONA_ASRC2LMIX_INPUT_1_SOURCE:
1341 case ARIZONA_ASRC2RMIX_INPUT_1_SOURCE:
1342 case ARIZONA_ISRC1DEC1MIX_INPUT_1_SOURCE:
1343 case ARIZONA_ISRC1DEC2MIX_INPUT_1_SOURCE:
1344 case ARIZONA_ISRC1DEC3MIX_INPUT_1_SOURCE:
1345 case ARIZONA_ISRC1DEC4MIX_INPUT_1_SOURCE:
1346 case ARIZONA_ISRC1INT1MIX_INPUT_1_SOURCE:
1347 case ARIZONA_ISRC1INT2MIX_INPUT_1_SOURCE:
1348 case ARIZONA_ISRC1INT3MIX_INPUT_1_SOURCE:
1349 case ARIZONA_ISRC1INT4MIX_INPUT_1_SOURCE:
1350 case ARIZONA_ISRC2DEC1MIX_INPUT_1_SOURCE:
1351 case ARIZONA_ISRC2DEC2MIX_INPUT_1_SOURCE:
1352 case ARIZONA_ISRC2INT1MIX_INPUT_1_SOURCE:
1353 case ARIZONA_ISRC2INT2MIX_INPUT_1_SOURCE:
1354 case ARIZONA_GPIO1_CTRL:
1355 case ARIZONA_GPIO2_CTRL:
1356 case ARIZONA_GPIO3_CTRL:
1357 case ARIZONA_GPIO4_CTRL:
1358 case ARIZONA_GPIO5_CTRL:
1359 case ARIZONA_IRQ_CTRL_1:
1360 case ARIZONA_GPIO_DEBOUNCE_CONFIG:
1361 case ARIZONA_GP_SWITCH_1:
1362 case ARIZONA_MISC_PAD_CTRL_1:
1363 case ARIZONA_MISC_PAD_CTRL_2:
1364 case ARIZONA_MISC_PAD_CTRL_3:
1365 case ARIZONA_MISC_PAD_CTRL_4:
1366 case ARIZONA_MISC_PAD_CTRL_5:
1367 case ARIZONA_MISC_PAD_CTRL_6:
1368 case ARIZONA_INTERRUPT_STATUS_1:
1369 case ARIZONA_INTERRUPT_STATUS_2:
1370 case ARIZONA_INTERRUPT_STATUS_3:
1371 case ARIZONA_INTERRUPT_STATUS_4:
1372 case ARIZONA_INTERRUPT_STATUS_5:
1373 case ARIZONA_INTERRUPT_STATUS_1_MASK:
1374 case ARIZONA_INTERRUPT_STATUS_2_MASK:
1375 case ARIZONA_INTERRUPT_STATUS_3_MASK:
1376 case ARIZONA_INTERRUPT_STATUS_4_MASK:
1377 case ARIZONA_INTERRUPT_STATUS_5_MASK:
1378 case ARIZONA_INTERRUPT_CONTROL:
1379 case ARIZONA_IRQ2_STATUS_1:
1380 case ARIZONA_IRQ2_STATUS_2:
1381 case ARIZONA_IRQ2_STATUS_3:
1382 case ARIZONA_IRQ2_STATUS_4:
1383 case ARIZONA_IRQ2_STATUS_5:
1384 case ARIZONA_IRQ2_STATUS_1_MASK:
1385 case ARIZONA_IRQ2_STATUS_2_MASK:
1386 case ARIZONA_IRQ2_STATUS_3_MASK:
1387 case ARIZONA_IRQ2_STATUS_4_MASK:
1388 case ARIZONA_IRQ2_STATUS_5_MASK:
1389 case ARIZONA_IRQ2_CONTROL:
1390 case ARIZONA_INTERRUPT_RAW_STATUS_2:
1391 case ARIZONA_INTERRUPT_RAW_STATUS_3:
1392 case ARIZONA_INTERRUPT_RAW_STATUS_4:
1393 case ARIZONA_INTERRUPT_RAW_STATUS_5:
1394 case ARIZONA_INTERRUPT_RAW_STATUS_6:
1395 case ARIZONA_INTERRUPT_RAW_STATUS_7:
1396 case ARIZONA_INTERRUPT_RAW_STATUS_8:
1397 case ARIZONA_IRQ_PIN_STATUS:
1398 case ARIZONA_AOD_WKUP_AND_TRIG:
1399 case ARIZONA_AOD_IRQ1:
1400 case ARIZONA_AOD_IRQ2:
1401 case ARIZONA_AOD_IRQ_MASK_IRQ1:
1402 case ARIZONA_AOD_IRQ_MASK_IRQ2:
1403 case ARIZONA_AOD_IRQ_RAW_STATUS:
1404 case ARIZONA_JACK_DETECT_DEBOUNCE:
1405 case ARIZONA_FX_CTRL1:
1406 case ARIZONA_FX_CTRL2:
1407 case ARIZONA_EQ1_1:
1408 case ARIZONA_EQ1_2:
1409 case ARIZONA_EQ1_3:
1410 case ARIZONA_EQ1_4:
1411 case ARIZONA_EQ1_5:
1412 case ARIZONA_EQ1_6:
1413 case ARIZONA_EQ1_7:
1414 case ARIZONA_EQ1_8:
1415 case ARIZONA_EQ1_9:
1416 case ARIZONA_EQ1_10:
1417 case ARIZONA_EQ1_11:
1418 case ARIZONA_EQ1_12:
1419 case ARIZONA_EQ1_13:
1420 case ARIZONA_EQ1_14:
1421 case ARIZONA_EQ1_15:
1422 case ARIZONA_EQ1_16:
1423 case ARIZONA_EQ1_17:
1424 case ARIZONA_EQ1_18:
1425 case ARIZONA_EQ1_19:
1426 case ARIZONA_EQ1_20:
1427 case ARIZONA_EQ1_21:
1428 case ARIZONA_EQ2_1:
1429 case ARIZONA_EQ2_2:
1430 case ARIZONA_EQ2_3:
1431 case ARIZONA_EQ2_4:
1432 case ARIZONA_EQ2_5:
1433 case ARIZONA_EQ2_6:
1434 case ARIZONA_EQ2_7:
1435 case ARIZONA_EQ2_8:
1436 case ARIZONA_EQ2_9:
1437 case ARIZONA_EQ2_10:
1438 case ARIZONA_EQ2_11:
1439 case ARIZONA_EQ2_12:
1440 case ARIZONA_EQ2_13:
1441 case ARIZONA_EQ2_14:
1442 case ARIZONA_EQ2_15:
1443 case ARIZONA_EQ2_16:
1444 case ARIZONA_EQ2_17:
1445 case ARIZONA_EQ2_18:
1446 case ARIZONA_EQ2_19:
1447 case ARIZONA_EQ2_20:
1448 case ARIZONA_EQ2_21:
1449 case ARIZONA_EQ3_1:
1450 case ARIZONA_EQ3_2:
1451 case ARIZONA_EQ3_3:
1452 case ARIZONA_EQ3_4:
1453 case ARIZONA_EQ3_5:
1454 case ARIZONA_EQ3_6:
1455 case ARIZONA_EQ3_7:
1456 case ARIZONA_EQ3_8:
1457 case ARIZONA_EQ3_9:
1458 case ARIZONA_EQ3_10:
1459 case ARIZONA_EQ3_11:
1460 case ARIZONA_EQ3_12:
1461 case ARIZONA_EQ3_13:
1462 case ARIZONA_EQ3_14:
1463 case ARIZONA_EQ3_15:
1464 case ARIZONA_EQ3_16:
1465 case ARIZONA_EQ3_17:
1466 case ARIZONA_EQ3_18:
1467 case ARIZONA_EQ3_19:
1468 case ARIZONA_EQ3_20:
1469 case ARIZONA_EQ3_21:
1470 case ARIZONA_EQ4_1:
1471 case ARIZONA_EQ4_2:
1472 case ARIZONA_EQ4_3:
1473 case ARIZONA_EQ4_4:
1474 case ARIZONA_EQ4_5:
1475 case ARIZONA_EQ4_6:
1476 case ARIZONA_EQ4_7:
1477 case ARIZONA_EQ4_8:
1478 case ARIZONA_EQ4_9:
1479 case ARIZONA_EQ4_10:
1480 case ARIZONA_EQ4_11:
1481 case ARIZONA_EQ4_12:
1482 case ARIZONA_EQ4_13:
1483 case ARIZONA_EQ4_14:
1484 case ARIZONA_EQ4_15:
1485 case ARIZONA_EQ4_16:
1486 case ARIZONA_EQ4_17:
1487 case ARIZONA_EQ4_18:
1488 case ARIZONA_EQ4_19:
1489 case ARIZONA_EQ4_20:
1490 case ARIZONA_EQ4_21:
1491 case ARIZONA_DRC1_CTRL1:
1492 case ARIZONA_DRC1_CTRL2:
1493 case ARIZONA_DRC1_CTRL3:
1494 case ARIZONA_DRC1_CTRL4:
1495 case ARIZONA_DRC1_CTRL5:
1496 case ARIZONA_HPLPF1_1:
1497 case ARIZONA_HPLPF1_2:
1498 case ARIZONA_HPLPF2_1:
1499 case ARIZONA_HPLPF2_2:
1500 case ARIZONA_HPLPF3_1:
1501 case ARIZONA_HPLPF3_2:
1502 case ARIZONA_HPLPF4_1:
1503 case ARIZONA_HPLPF4_2:
1504 case ARIZONA_ASRC_ENABLE:
1505 case ARIZONA_ASRC_STATUS:
1506 case ARIZONA_ASRC_RATE1:
1507 case ARIZONA_ASRC_RATE2:
1508 case ARIZONA_ISRC_1_CTRL_1:
1509 case ARIZONA_ISRC_1_CTRL_2:
1510 case ARIZONA_ISRC_1_CTRL_3:
1511 case ARIZONA_ISRC_2_CTRL_1:
1512 case ARIZONA_ISRC_2_CTRL_2:
1513 case ARIZONA_ISRC_2_CTRL_3:
1514 case ARIZONA_FRF_COEFF_1:
1515 case ARIZONA_FRF_COEFF_2:
1516 case ARIZONA_FRF_COEFF_3:
1517 case ARIZONA_FRF_COEFF_4:
1518 case ARIZONA_V2_DAC_COMP_1:
1519 case ARIZONA_V2_DAC_COMP_2:
1520 return true;
1521 default:
1522 return false;
1523 }
1524}
1525
1526static bool wm8998_volatile_register(struct device *dev, unsigned int reg)
1527{
1528 switch (reg) {
1529 case ARIZONA_SOFTWARE_RESET:
1530 case ARIZONA_DEVICE_REVISION:
1531 case ARIZONA_WRITE_SEQUENCER_CTRL_0:
1532 case ARIZONA_WRITE_SEQUENCER_CTRL_1:
1533 case ARIZONA_WRITE_SEQUENCER_CTRL_2:
1534 case ARIZONA_HAPTICS_STATUS:
1535 case ARIZONA_SAMPLE_RATE_1_STATUS:
1536 case ARIZONA_SAMPLE_RATE_2_STATUS:
1537 case ARIZONA_SAMPLE_RATE_3_STATUS:
1538 case ARIZONA_ASYNC_SAMPLE_RATE_1_STATUS:
1539 case ARIZONA_ASYNC_SAMPLE_RATE_2_STATUS:
1540 case ARIZONA_MIC_DETECT_3:
1541 case ARIZONA_MIC_DETECT_4:
1542 case ARIZONA_HEADPHONE_DETECT_2:
1543 case ARIZONA_INPUT_ENABLES_STATUS:
1544 case ARIZONA_OUTPUT_STATUS_1:
1545 case ARIZONA_RAW_OUTPUT_STATUS_1:
1546 case ARIZONA_SLIMBUS_RX_PORT_STATUS:
1547 case ARIZONA_SLIMBUS_TX_PORT_STATUS:
1548 case ARIZONA_INTERRUPT_STATUS_1:
1549 case ARIZONA_INTERRUPT_STATUS_2:
1550 case ARIZONA_INTERRUPT_STATUS_3:
1551 case ARIZONA_INTERRUPT_STATUS_4:
1552 case ARIZONA_INTERRUPT_STATUS_5:
1553 case ARIZONA_IRQ2_STATUS_1:
1554 case ARIZONA_IRQ2_STATUS_2:
1555 case ARIZONA_IRQ2_STATUS_3:
1556 case ARIZONA_IRQ2_STATUS_4:
1557 case ARIZONA_IRQ2_STATUS_5:
1558 case ARIZONA_INTERRUPT_RAW_STATUS_2:
1559 case ARIZONA_INTERRUPT_RAW_STATUS_3:
1560 case ARIZONA_INTERRUPT_RAW_STATUS_4:
1561 case ARIZONA_INTERRUPT_RAW_STATUS_5:
1562 case ARIZONA_INTERRUPT_RAW_STATUS_6:
1563 case ARIZONA_INTERRUPT_RAW_STATUS_7:
1564 case ARIZONA_INTERRUPT_RAW_STATUS_8:
1565 case ARIZONA_IRQ_PIN_STATUS:
1566 case ARIZONA_AOD_WKUP_AND_TRIG:
1567 case ARIZONA_AOD_IRQ1:
1568 case ARIZONA_AOD_IRQ2:
1569 case ARIZONA_AOD_IRQ_RAW_STATUS:
1570 case ARIZONA_FX_CTRL2:
1571 case ARIZONA_ASRC_STATUS:
1572 return true;
1573 default:
1574 return false;
1575 }
1576}
1577
1578#define WM8998_MAX_REGISTER 0x31ff
1579
1580const struct regmap_config wm8998_i2c_regmap = {
1581 .reg_bits = 32,
1582 .val_bits = 16,
1583 .reg_format_endian = REGMAP_ENDIAN_BIG,
1584 .val_format_endian = REGMAP_ENDIAN_BIG,
1585
1586 .max_register = WM8998_MAX_REGISTER,
1587 .readable_reg = wm8998_readable_register,
1588 .volatile_reg = wm8998_volatile_register,
1589
1590 .cache_type = REGCACHE_RBTREE,
1591 .reg_defaults = wm8998_reg_default,
1592 .num_reg_defaults = ARRAY_SIZE(wm8998_reg_default),
1593};
1594EXPORT_SYMBOL_GPL(wm8998_i2c_regmap);
diff --git a/drivers/platform/x86/intel_pmc_ipc.c b/drivers/platform/x86/intel_pmc_ipc.c
index 105cfffe82c6..28b2a12bb26d 100644
--- a/drivers/platform/x86/intel_pmc_ipc.c
+++ b/drivers/platform/x86/intel_pmc_ipc.c
@@ -33,7 +33,7 @@
33#include <linux/suspend.h> 33#include <linux/suspend.h>
34#include <linux/acpi.h> 34#include <linux/acpi.h>
35#include <asm/intel_pmc_ipc.h> 35#include <asm/intel_pmc_ipc.h>
36#include <linux/mfd/lpc_ich.h> 36#include <linux/platform_data/itco_wdt.h>
37 37
38/* 38/*
39 * IPC registers 39 * IPC registers
@@ -473,9 +473,9 @@ static struct resource tco_res[] = {
473 }, 473 },
474}; 474};
475 475
476static struct lpc_ich_info tco_info = { 476static struct itco_wdt_platform_data tco_info = {
477 .name = "Apollo Lake SoC", 477 .name = "Apollo Lake SoC",
478 .iTCO_version = 3, 478 .version = 3,
479}; 479};
480 480
481static int ipc_create_punit_device(void) 481static int ipc_create_punit_device(void)
@@ -552,8 +552,7 @@ static int ipc_create_tco_device(void)
552 goto err; 552 goto err;
553 } 553 }
554 554
555 ret = platform_device_add_data(pdev, &tco_info, 555 ret = platform_device_add_data(pdev, &tco_info, sizeof(tco_info));
556 sizeof(struct lpc_ich_info));
557 if (ret) { 556 if (ret) {
558 dev_err(ipcdev.dev, "Failed to add tco platform data\n"); 557 dev_err(ipcdev.dev, "Failed to add tco platform data\n");
559 goto err; 558 goto err;
diff --git a/drivers/rtc/rtc-st-lpc.c b/drivers/rtc/rtc-st-lpc.c
index 3f9d0acb81c7..74c0a336ceea 100644
--- a/drivers/rtc/rtc-st-lpc.c
+++ b/drivers/rtc/rtc-st-lpc.c
@@ -208,7 +208,7 @@ static int st_rtc_probe(struct platform_device *pdev)
208 return -EINVAL; 208 return -EINVAL;
209 } 209 }
210 210
211 /* LPC can either run in RTC or WDT mode */ 211 /* LPC can either run as a Clocksource or in RTC or WDT mode */
212 if (mode != ST_LPC_MODE_RTC) 212 if (mode != ST_LPC_MODE_RTC)
213 return -ENODEV; 213 return -ENODEV;
214 214
diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig
index 241fafde42cb..55c4b5b0a317 100644
--- a/drivers/watchdog/Kconfig
+++ b/drivers/watchdog/Kconfig
@@ -797,7 +797,8 @@ config ITCO_WDT
797 tristate "Intel TCO Timer/Watchdog" 797 tristate "Intel TCO Timer/Watchdog"
798 depends on (X86 || IA64) && PCI 798 depends on (X86 || IA64) && PCI
799 select WATCHDOG_CORE 799 select WATCHDOG_CORE
800 select LPC_ICH 800 select LPC_ICH if !EXPERT
801 select I2C_I801 if !EXPERT
801 ---help--- 802 ---help---
802 Hardware driver for the intel TCO timer based watchdog devices. 803 Hardware driver for the intel TCO timer based watchdog devices.
803 These drivers are included in the Intel 82801 I/O Controller 804 These drivers are included in the Intel 82801 I/O Controller
diff --git a/drivers/watchdog/iTCO_wdt.c b/drivers/watchdog/iTCO_wdt.c
index 3c3fd417ddeb..0acc6c5f729d 100644
--- a/drivers/watchdog/iTCO_wdt.c
+++ b/drivers/watchdog/iTCO_wdt.c
@@ -66,8 +66,7 @@
66#include <linux/spinlock.h> /* For spin_lock/spin_unlock/... */ 66#include <linux/spinlock.h> /* For spin_lock/spin_unlock/... */
67#include <linux/uaccess.h> /* For copy_to_user/put_user/... */ 67#include <linux/uaccess.h> /* For copy_to_user/put_user/... */
68#include <linux/io.h> /* For inb/outb/... */ 68#include <linux/io.h> /* For inb/outb/... */
69#include <linux/mfd/core.h> 69#include <linux/platform_data/itco_wdt.h>
70#include <linux/mfd/lpc_ich.h>
71 70
72#include "iTCO_vendor.h" 71#include "iTCO_vendor.h"
73 72
@@ -146,59 +145,67 @@ static inline unsigned int ticks_to_seconds(int ticks)
146 return iTCO_wdt_private.iTCO_version == 3 ? ticks : (ticks * 6) / 10; 145 return iTCO_wdt_private.iTCO_version == 3 ? ticks : (ticks * 6) / 10;
147} 146}
148 147
148static inline u32 no_reboot_bit(void)
149{
150 u32 enable_bit;
151
152 switch (iTCO_wdt_private.iTCO_version) {
153 case 3:
154 enable_bit = 0x00000010;
155 break;
156 case 2:
157 enable_bit = 0x00000020;
158 break;
159 case 4:
160 case 1:
161 default:
162 enable_bit = 0x00000002;
163 break;
164 }
165
166 return enable_bit;
167}
168
149static void iTCO_wdt_set_NO_REBOOT_bit(void) 169static void iTCO_wdt_set_NO_REBOOT_bit(void)
150{ 170{
151 u32 val32; 171 u32 val32;
152 172
153 /* Set the NO_REBOOT bit: this disables reboots */ 173 /* Set the NO_REBOOT bit: this disables reboots */
154 if (iTCO_wdt_private.iTCO_version == 3) { 174 if (iTCO_wdt_private.iTCO_version >= 2) {
155 val32 = readl(iTCO_wdt_private.gcs_pmc);
156 val32 |= 0x00000010;
157 writel(val32, iTCO_wdt_private.gcs_pmc);
158 } else if (iTCO_wdt_private.iTCO_version == 2) {
159 val32 = readl(iTCO_wdt_private.gcs_pmc); 175 val32 = readl(iTCO_wdt_private.gcs_pmc);
160 val32 |= 0x00000020; 176 val32 |= no_reboot_bit();
161 writel(val32, iTCO_wdt_private.gcs_pmc); 177 writel(val32, iTCO_wdt_private.gcs_pmc);
162 } else if (iTCO_wdt_private.iTCO_version == 1) { 178 } else if (iTCO_wdt_private.iTCO_version == 1) {
163 pci_read_config_dword(iTCO_wdt_private.pdev, 0xd4, &val32); 179 pci_read_config_dword(iTCO_wdt_private.pdev, 0xd4, &val32);
164 val32 |= 0x00000002; 180 val32 |= no_reboot_bit();
165 pci_write_config_dword(iTCO_wdt_private.pdev, 0xd4, val32); 181 pci_write_config_dword(iTCO_wdt_private.pdev, 0xd4, val32);
166 } 182 }
167} 183}
168 184
169static int iTCO_wdt_unset_NO_REBOOT_bit(void) 185static int iTCO_wdt_unset_NO_REBOOT_bit(void)
170{ 186{
171 int ret = 0; 187 u32 enable_bit = no_reboot_bit();
172 u32 val32; 188 u32 val32 = 0;
173 189
174 /* Unset the NO_REBOOT bit: this enables reboots */ 190 /* Unset the NO_REBOOT bit: this enables reboots */
175 if (iTCO_wdt_private.iTCO_version == 3) { 191 if (iTCO_wdt_private.iTCO_version >= 2) {
176 val32 = readl(iTCO_wdt_private.gcs_pmc);
177 val32 &= 0xffffffef;
178 writel(val32, iTCO_wdt_private.gcs_pmc);
179
180 val32 = readl(iTCO_wdt_private.gcs_pmc);
181 if (val32 & 0x00000010)
182 ret = -EIO;
183 } else if (iTCO_wdt_private.iTCO_version == 2) {
184 val32 = readl(iTCO_wdt_private.gcs_pmc); 192 val32 = readl(iTCO_wdt_private.gcs_pmc);
185 val32 &= 0xffffffdf; 193 val32 &= ~enable_bit;
186 writel(val32, iTCO_wdt_private.gcs_pmc); 194 writel(val32, iTCO_wdt_private.gcs_pmc);
187 195
188 val32 = readl(iTCO_wdt_private.gcs_pmc); 196 val32 = readl(iTCO_wdt_private.gcs_pmc);
189 if (val32 & 0x00000020)
190 ret = -EIO;
191 } else if (iTCO_wdt_private.iTCO_version == 1) { 197 } else if (iTCO_wdt_private.iTCO_version == 1) {
192 pci_read_config_dword(iTCO_wdt_private.pdev, 0xd4, &val32); 198 pci_read_config_dword(iTCO_wdt_private.pdev, 0xd4, &val32);
193 val32 &= 0xfffffffd; 199 val32 &= ~enable_bit;
194 pci_write_config_dword(iTCO_wdt_private.pdev, 0xd4, val32); 200 pci_write_config_dword(iTCO_wdt_private.pdev, 0xd4, val32);
195 201
196 pci_read_config_dword(iTCO_wdt_private.pdev, 0xd4, &val32); 202 pci_read_config_dword(iTCO_wdt_private.pdev, 0xd4, &val32);
197 if (val32 & 0x00000002)
198 ret = -EIO;
199 } 203 }
200 204
201 return ret; /* returns: 0 = OK, -EIO = Error */ 205 if (val32 & enable_bit)
206 return -EIO;
207
208 return 0;
202} 209}
203 210
204static int iTCO_wdt_start(struct watchdog_device *wd_dev) 211static int iTCO_wdt_start(struct watchdog_device *wd_dev)
@@ -418,9 +425,9 @@ static int iTCO_wdt_probe(struct platform_device *dev)
418{ 425{
419 int ret = -ENODEV; 426 int ret = -ENODEV;
420 unsigned long val32; 427 unsigned long val32;
421 struct lpc_ich_info *ich_info = dev_get_platdata(&dev->dev); 428 struct itco_wdt_platform_data *pdata = dev_get_platdata(&dev->dev);
422 429
423 if (!ich_info) 430 if (!pdata)
424 goto out; 431 goto out;
425 432
426 spin_lock_init(&iTCO_wdt_private.io_lock); 433 spin_lock_init(&iTCO_wdt_private.io_lock);
@@ -435,7 +442,7 @@ static int iTCO_wdt_probe(struct platform_device *dev)
435 if (!iTCO_wdt_private.smi_res) 442 if (!iTCO_wdt_private.smi_res)
436 goto out; 443 goto out;
437 444
438 iTCO_wdt_private.iTCO_version = ich_info->iTCO_version; 445 iTCO_wdt_private.iTCO_version = pdata->version;
439 iTCO_wdt_private.dev = dev; 446 iTCO_wdt_private.dev = dev;
440 iTCO_wdt_private.pdev = to_pci_dev(dev->dev.parent); 447 iTCO_wdt_private.pdev = to_pci_dev(dev->dev.parent);
441 448
@@ -501,15 +508,24 @@ static int iTCO_wdt_probe(struct platform_device *dev)
501 } 508 }
502 509
503 pr_info("Found a %s TCO device (Version=%d, TCOBASE=0x%04llx)\n", 510 pr_info("Found a %s TCO device (Version=%d, TCOBASE=0x%04llx)\n",
504 ich_info->name, ich_info->iTCO_version, (u64)TCOBASE); 511 pdata->name, pdata->version, (u64)TCOBASE);
505 512
506 /* Clear out the (probably old) status */ 513 /* Clear out the (probably old) status */
507 if (iTCO_wdt_private.iTCO_version == 3) { 514 switch (iTCO_wdt_private.iTCO_version) {
515 case 4:
516 outw(0x0008, TCO1_STS); /* Clear the Time Out Status bit */
517 outw(0x0002, TCO2_STS); /* Clear SECOND_TO_STS bit */
518 break;
519 case 3:
508 outl(0x20008, TCO1_STS); 520 outl(0x20008, TCO1_STS);
509 } else { 521 break;
522 case 2:
523 case 1:
524 default:
510 outw(0x0008, TCO1_STS); /* Clear the Time Out Status bit */ 525 outw(0x0008, TCO1_STS); /* Clear the Time Out Status bit */
511 outw(0x0002, TCO2_STS); /* Clear SECOND_TO_STS bit */ 526 outw(0x0002, TCO2_STS); /* Clear SECOND_TO_STS bit */
512 outw(0x0004, TCO2_STS); /* Clear BOOT_STS bit */ 527 outw(0x0004, TCO2_STS); /* Clear BOOT_STS bit */
528 break;
513 } 529 }
514 530
515 iTCO_wdt_watchdog_dev.bootstatus = 0; 531 iTCO_wdt_watchdog_dev.bootstatus = 0;
diff --git a/include/dt-bindings/mfd/st-lpc.h b/include/dt-bindings/mfd/st-lpc.h
index e3e6c75d8822..d05894afa7e7 100644
--- a/include/dt-bindings/mfd/st-lpc.h
+++ b/include/dt-bindings/mfd/st-lpc.h
@@ -11,5 +11,6 @@
11 11
12#define ST_LPC_MODE_RTC 0 12#define ST_LPC_MODE_RTC 0
13#define ST_LPC_MODE_WDT 1 13#define ST_LPC_MODE_WDT 1
14#define ST_LPC_MODE_CLKSRC 2
14 15
15#endif /* __DT_BINDINGS_ST_LPC_H__ */ 16#endif /* __DT_BINDINGS_ST_LPC_H__ */
diff --git a/include/linux/mfd/88pm80x.h b/include/linux/mfd/88pm80x.h
index 97cb283cc8e1..8fcad63fab55 100644
--- a/include/linux/mfd/88pm80x.h
+++ b/include/linux/mfd/88pm80x.h
@@ -60,60 +60,60 @@ enum {
60/* page 0 basic: slave adder 0x60 */ 60/* page 0 basic: slave adder 0x60 */
61 61
62#define PM800_STATUS_1 (0x01) 62#define PM800_STATUS_1 (0x01)
63#define PM800_ONKEY_STS1 (1 << 0) 63#define PM800_ONKEY_STS1 BIT(0)
64#define PM800_EXTON_STS1 (1 << 1) 64#define PM800_EXTON_STS1 BIT(1)
65#define PM800_CHG_STS1 (1 << 2) 65#define PM800_CHG_STS1 BIT(2)
66#define PM800_BAT_STS1 (1 << 3) 66#define PM800_BAT_STS1 BIT(3)
67#define PM800_VBUS_STS1 (1 << 4) 67#define PM800_VBUS_STS1 BIT(4)
68#define PM800_LDO_PGOOD_STS1 (1 << 5) 68#define PM800_LDO_PGOOD_STS1 BIT(5)
69#define PM800_BUCK_PGOOD_STS1 (1 << 6) 69#define PM800_BUCK_PGOOD_STS1 BIT(6)
70 70
71#define PM800_STATUS_2 (0x02) 71#define PM800_STATUS_2 (0x02)
72#define PM800_RTC_ALARM_STS2 (1 << 0) 72#define PM800_RTC_ALARM_STS2 BIT(0)
73 73
74/* Wakeup Registers */ 74/* Wakeup Registers */
75#define PM800_WAKEUP1 (0x0D) 75#define PM800_WAKEUP1 (0x0D)
76 76
77#define PM800_WAKEUP2 (0x0E) 77#define PM800_WAKEUP2 (0x0E)
78#define PM800_WAKEUP2_INV_INT (1 << 0) 78#define PM800_WAKEUP2_INV_INT BIT(0)
79#define PM800_WAKEUP2_INT_CLEAR (1 << 1) 79#define PM800_WAKEUP2_INT_CLEAR BIT(1)
80#define PM800_WAKEUP2_INT_MASK (1 << 2) 80#define PM800_WAKEUP2_INT_MASK BIT(2)
81 81
82#define PM800_POWER_UP_LOG (0x10) 82#define PM800_POWER_UP_LOG (0x10)
83 83
84/* Referance and low power registers */ 84/* Referance and low power registers */
85#define PM800_LOW_POWER1 (0x20) 85#define PM800_LOW_POWER1 (0x20)
86#define PM800_LOW_POWER2 (0x21) 86#define PM800_LOW_POWER2 (0x21)
87#define PM800_LOW_POWER_CONFIG3 (0x22) 87#define PM800_LOW_POWER_CONFIG3 (0x22)
88#define PM800_LOW_POWER_CONFIG4 (0x23) 88#define PM800_LOW_POWER_CONFIG4 (0x23)
89 89
90/* GPIO register */ 90/* GPIO register */
91#define PM800_GPIO_0_1_CNTRL (0x30) 91#define PM800_GPIO_0_1_CNTRL (0x30)
92#define PM800_GPIO0_VAL (1 << 0) 92#define PM800_GPIO0_VAL BIT(0)
93#define PM800_GPIO0_GPIO_MODE(x) (x << 1) 93#define PM800_GPIO0_GPIO_MODE(x) (x << 1)
94#define PM800_GPIO1_VAL (1 << 4) 94#define PM800_GPIO1_VAL BIT(4)
95#define PM800_GPIO1_GPIO_MODE(x) (x << 5) 95#define PM800_GPIO1_GPIO_MODE(x) (x << 5)
96 96
97#define PM800_GPIO_2_3_CNTRL (0x31) 97#define PM800_GPIO_2_3_CNTRL (0x31)
98#define PM800_GPIO2_VAL (1 << 0) 98#define PM800_GPIO2_VAL BIT(0)
99#define PM800_GPIO2_GPIO_MODE(x) (x << 1) 99#define PM800_GPIO2_GPIO_MODE(x) (x << 1)
100#define PM800_GPIO3_VAL (1 << 4) 100#define PM800_GPIO3_VAL BIT(4)
101#define PM800_GPIO3_GPIO_MODE(x) (x << 5) 101#define PM800_GPIO3_GPIO_MODE(x) (x << 5)
102#define PM800_GPIO3_MODE_MASK 0x1F 102#define PM800_GPIO3_MODE_MASK 0x1F
103#define PM800_GPIO3_HEADSET_MODE PM800_GPIO3_GPIO_MODE(6) 103#define PM800_GPIO3_HEADSET_MODE PM800_GPIO3_GPIO_MODE(6)
104 104
105#define PM800_GPIO_4_CNTRL (0x32) 105#define PM800_GPIO_4_CNTRL (0x32)
106#define PM800_GPIO4_VAL (1 << 0) 106#define PM800_GPIO4_VAL BIT(0)
107#define PM800_GPIO4_GPIO_MODE(x) (x << 1) 107#define PM800_GPIO4_GPIO_MODE(x) (x << 1)
108 108
109#define PM800_HEADSET_CNTRL (0x38) 109#define PM800_HEADSET_CNTRL (0x38)
110#define PM800_HEADSET_DET_EN (1 << 7) 110#define PM800_HEADSET_DET_EN BIT(7)
111#define PM800_HSDET_SLP (1 << 1) 111#define PM800_HSDET_SLP BIT(1)
112/* PWM register */ 112/* PWM register */
113#define PM800_PWM1 (0x40) 113#define PM800_PWM1 (0x40)
114#define PM800_PWM2 (0x41) 114#define PM800_PWM2 (0x41)
115#define PM800_PWM3 (0x42) 115#define PM800_PWM3 (0x42)
116#define PM800_PWM4 (0x43) 116#define PM800_PWM4 (0x43)
117 117
118/* RTC Registers */ 118/* RTC Registers */
119#define PM800_RTC_CONTROL (0xD0) 119#define PM800_RTC_CONTROL (0xD0)
@@ -123,55 +123,55 @@ enum {
123#define PM800_RTC_MISC4 (0xE4) 123#define PM800_RTC_MISC4 (0xE4)
124#define PM800_RTC_MISC5 (0xE7) 124#define PM800_RTC_MISC5 (0xE7)
125/* bit definitions of RTC Register 1 (0xD0) */ 125/* bit definitions of RTC Register 1 (0xD0) */
126#define PM800_ALARM1_EN (1 << 0) 126#define PM800_ALARM1_EN BIT(0)
127#define PM800_ALARM_WAKEUP (1 << 4) 127#define PM800_ALARM_WAKEUP BIT(4)
128#define PM800_ALARM (1 << 5) 128#define PM800_ALARM BIT(5)
129#define PM800_RTC1_USE_XO (1 << 7) 129#define PM800_RTC1_USE_XO BIT(7)
130 130
131/* Regulator Control Registers: BUCK1,BUCK5,LDO1 have DVC */ 131/* Regulator Control Registers: BUCK1,BUCK5,LDO1 have DVC */
132 132
133/* buck registers */ 133/* buck registers */
134#define PM800_SLEEP_BUCK1 (0x30) 134#define PM800_SLEEP_BUCK1 (0x30)
135 135
136/* BUCK Sleep Mode Register 1: BUCK[1..4] */ 136/* BUCK Sleep Mode Register 1: BUCK[1..4] */
137#define PM800_BUCK_SLP1 (0x5A) 137#define PM800_BUCK_SLP1 (0x5A)
138#define PM800_BUCK1_SLP1_SHIFT 0 138#define PM800_BUCK1_SLP1_SHIFT 0
139#define PM800_BUCK1_SLP1_MASK (0x3 << PM800_BUCK1_SLP1_SHIFT) 139#define PM800_BUCK1_SLP1_MASK (0x3 << PM800_BUCK1_SLP1_SHIFT)
140 140
141/* page 2 GPADC: slave adder 0x02 */ 141/* page 2 GPADC: slave adder 0x02 */
142#define PM800_GPADC_MEAS_EN1 (0x01) 142#define PM800_GPADC_MEAS_EN1 (0x01)
143#define PM800_MEAS_EN1_VBAT (1 << 2) 143#define PM800_MEAS_EN1_VBAT BIT(2)
144#define PM800_GPADC_MEAS_EN2 (0x02) 144#define PM800_GPADC_MEAS_EN2 (0x02)
145#define PM800_MEAS_EN2_RFTMP (1 << 0) 145#define PM800_MEAS_EN2_RFTMP BIT(0)
146#define PM800_MEAS_GP0_EN (1 << 2) 146#define PM800_MEAS_GP0_EN BIT(2)
147#define PM800_MEAS_GP1_EN (1 << 3) 147#define PM800_MEAS_GP1_EN BIT(3)
148#define PM800_MEAS_GP2_EN (1 << 4) 148#define PM800_MEAS_GP2_EN BIT(4)
149#define PM800_MEAS_GP3_EN (1 << 5) 149#define PM800_MEAS_GP3_EN BIT(5)
150#define PM800_MEAS_GP4_EN (1 << 6) 150#define PM800_MEAS_GP4_EN BIT(6)
151 151
152#define PM800_GPADC_MISC_CONFIG1 (0x05) 152#define PM800_GPADC_MISC_CONFIG1 (0x05)
153#define PM800_GPADC_MISC_CONFIG2 (0x06) 153#define PM800_GPADC_MISC_CONFIG2 (0x06)
154#define PM800_GPADC_MISC_GPFSM_EN (1 << 0) 154#define PM800_GPADC_MISC_GPFSM_EN BIT(0)
155#define PM800_GPADC_SLOW_MODE(x) (x << 3) 155#define PM800_GPADC_SLOW_MODE(x) (x << 3)
156 156
157#define PM800_GPADC_MISC_CONFIG3 (0x09) 157#define PM800_GPADC_MISC_CONFIG3 (0x09)
158#define PM800_GPADC_MISC_CONFIG4 (0x0A) 158#define PM800_GPADC_MISC_CONFIG4 (0x0A)
159 159
160#define PM800_GPADC_PREBIAS1 (0x0F) 160#define PM800_GPADC_PREBIAS1 (0x0F)
161#define PM800_GPADC0_GP_PREBIAS_TIME(x) (x << 0) 161#define PM800_GPADC0_GP_PREBIAS_TIME(x) (x << 0)
162#define PM800_GPADC_PREBIAS2 (0x10) 162#define PM800_GPADC_PREBIAS2 (0x10)
163 163
164#define PM800_GP_BIAS_ENA1 (0x14) 164#define PM800_GP_BIAS_ENA1 (0x14)
165#define PM800_GPADC_GP_BIAS_EN0 (1 << 0) 165#define PM800_GPADC_GP_BIAS_EN0 BIT(0)
166#define PM800_GPADC_GP_BIAS_EN1 (1 << 1) 166#define PM800_GPADC_GP_BIAS_EN1 BIT(1)
167#define PM800_GPADC_GP_BIAS_EN2 (1 << 2) 167#define PM800_GPADC_GP_BIAS_EN2 BIT(2)
168#define PM800_GPADC_GP_BIAS_EN3 (1 << 3) 168#define PM800_GPADC_GP_BIAS_EN3 BIT(3)
169 169
170#define PM800_GP_BIAS_OUT1 (0x15) 170#define PM800_GP_BIAS_OUT1 (0x15)
171#define PM800_BIAS_OUT_GP0 (1 << 0) 171#define PM800_BIAS_OUT_GP0 BIT(0)
172#define PM800_BIAS_OUT_GP1 (1 << 1) 172#define PM800_BIAS_OUT_GP1 BIT(1)
173#define PM800_BIAS_OUT_GP2 (1 << 2) 173#define PM800_BIAS_OUT_GP2 BIT(2)
174#define PM800_BIAS_OUT_GP3 (1 << 3) 174#define PM800_BIAS_OUT_GP3 BIT(3)
175 175
176#define PM800_GPADC0_LOW_TH 0x20 176#define PM800_GPADC0_LOW_TH 0x20
177#define PM800_GPADC1_LOW_TH 0x21 177#define PM800_GPADC1_LOW_TH 0x21
@@ -222,37 +222,37 @@ enum {
222 222
223#define PM805_INT_STATUS1 (0x03) 223#define PM805_INT_STATUS1 (0x03)
224 224
225#define PM805_INT1_HP1_SHRT (1 << 0) 225#define PM805_INT1_HP1_SHRT BIT(0)
226#define PM805_INT1_HP2_SHRT (1 << 1) 226#define PM805_INT1_HP2_SHRT BIT(1)
227#define PM805_INT1_MIC_CONFLICT (1 << 2) 227#define PM805_INT1_MIC_CONFLICT BIT(2)
228#define PM805_INT1_CLIP_FAULT (1 << 3) 228#define PM805_INT1_CLIP_FAULT BIT(3)
229#define PM805_INT1_LDO_OFF (1 << 4) 229#define PM805_INT1_LDO_OFF BIT(4)
230#define PM805_INT1_SRC_DPLL_LOCK (1 << 5) 230#define PM805_INT1_SRC_DPLL_LOCK BIT(5)
231 231
232#define PM805_INT_STATUS2 (0x04) 232#define PM805_INT_STATUS2 (0x04)
233 233
234#define PM805_INT2_MIC_DET (1 << 0) 234#define PM805_INT2_MIC_DET BIT(0)
235#define PM805_INT2_SHRT_BTN_DET (1 << 1) 235#define PM805_INT2_SHRT_BTN_DET BIT(1)
236#define PM805_INT2_VOLM_BTN_DET (1 << 2) 236#define PM805_INT2_VOLM_BTN_DET BIT(2)
237#define PM805_INT2_VOLP_BTN_DET (1 << 3) 237#define PM805_INT2_VOLP_BTN_DET BIT(3)
238#define PM805_INT2_RAW_PLL_FAULT (1 << 4) 238#define PM805_INT2_RAW_PLL_FAULT BIT(4)
239#define PM805_INT2_FINE_PLL_FAULT (1 << 5) 239#define PM805_INT2_FINE_PLL_FAULT BIT(5)
240 240
241#define PM805_INT_MASK1 (0x05) 241#define PM805_INT_MASK1 (0x05)
242#define PM805_INT_MASK2 (0x06) 242#define PM805_INT_MASK2 (0x06)
243#define PM805_SHRT_BTN_DET (1 << 1) 243#define PM805_SHRT_BTN_DET BIT(1)
244 244
245/* number of status and int reg in a row */ 245/* number of status and int reg in a row */
246#define PM805_INT_REG_NUM (2) 246#define PM805_INT_REG_NUM (2)
247 247
248#define PM805_MIC_DET1 (0x07) 248#define PM805_MIC_DET1 (0x07)
249#define PM805_MIC_DET_EN_MIC_DET (1 << 0) 249#define PM805_MIC_DET_EN_MIC_DET BIT(0)
250#define PM805_MIC_DET2 (0x08) 250#define PM805_MIC_DET2 (0x08)
251#define PM805_MIC_DET_STATUS1 (0x09) 251#define PM805_MIC_DET_STATUS1 (0x09)
252 252
253#define PM805_MIC_DET_STATUS3 (0x0A) 253#define PM805_MIC_DET_STATUS3 (0x0A)
254#define PM805_AUTO_SEQ_STATUS1 (0x0B) 254#define PM805_AUTO_SEQ_STATUS1 (0x0B)
255#define PM805_AUTO_SEQ_STATUS2 (0x0C) 255#define PM805_AUTO_SEQ_STATUS2 (0x0C)
256 256
257#define PM805_ADC_SETTING1 (0x10) 257#define PM805_ADC_SETTING1 (0x10)
258#define PM805_ADC_SETTING2 (0x11) 258#define PM805_ADC_SETTING2 (0x11)
@@ -261,7 +261,7 @@ enum {
261#define PM805_ADC_GAIN2 (0x13) 261#define PM805_ADC_GAIN2 (0x13)
262#define PM805_DMIC_SETTING (0x15) 262#define PM805_DMIC_SETTING (0x15)
263#define PM805_DWS_SETTING (0x16) 263#define PM805_DWS_SETTING (0x16)
264#define PM805_MIC_CONFLICT_STS (0x17) 264#define PM805_MIC_CONFLICT_STS (0x17)
265 265
266#define PM805_PDM_SETTING1 (0x20) 266#define PM805_PDM_SETTING1 (0x20)
267#define PM805_PDM_SETTING2 (0x21) 267#define PM805_PDM_SETTING2 (0x21)
@@ -270,11 +270,11 @@ enum {
270#define PM805_PDM_CONTROL2 (0x24) 270#define PM805_PDM_CONTROL2 (0x24)
271#define PM805_PDM_CONTROL3 (0x25) 271#define PM805_PDM_CONTROL3 (0x25)
272 272
273#define PM805_HEADPHONE_SETTING (0x26) 273#define PM805_HEADPHONE_SETTING (0x26)
274#define PM805_HEADPHONE_GAIN_A2A (0x27) 274#define PM805_HEADPHONE_GAIN_A2A (0x27)
275#define PM805_HEADPHONE_SHORT_STATE (0x28) 275#define PM805_HEADPHONE_SHORT_STATE (0x28)
276#define PM805_EARPHONE_SETTING (0x29) 276#define PM805_EARPHONE_SETTING (0x29)
277#define PM805_AUTO_SEQ_SETTING (0x2A) 277#define PM805_AUTO_SEQ_SETTING (0x2A)
278 278
279struct pm80x_rtc_pdata { 279struct pm80x_rtc_pdata {
280 int vrtc; 280 int vrtc;
diff --git a/include/linux/mfd/arizona/core.h b/include/linux/mfd/arizona/core.h
index 2f434f4f79a1..79e607e2f081 100644
--- a/include/linux/mfd/arizona/core.h
+++ b/include/linux/mfd/arizona/core.h
@@ -25,6 +25,8 @@ enum arizona_type {
25 WM5110 = 2, 25 WM5110 = 2,
26 WM8997 = 3, 26 WM8997 = 3,
27 WM8280 = 4, 27 WM8280 = 4,
28 WM8998 = 5,
29 WM1814 = 6,
28}; 30};
29 31
30#define ARIZONA_IRQ_GP1 0 32#define ARIZONA_IRQ_GP1 0
@@ -165,6 +167,7 @@ static inline int wm5102_patch(struct arizona *arizona)
165 167
166int wm5110_patch(struct arizona *arizona); 168int wm5110_patch(struct arizona *arizona);
167int wm8997_patch(struct arizona *arizona); 169int wm8997_patch(struct arizona *arizona);
170int wm8998_patch(struct arizona *arizona);
168 171
169extern int arizona_of_get_named_gpio(struct arizona *arizona, const char *prop, 172extern int arizona_of_get_named_gpio(struct arizona *arizona, const char *prop,
170 bool mandatory); 173 bool mandatory);
diff --git a/include/linux/mfd/arizona/pdata.h b/include/linux/mfd/arizona/pdata.h
index 43db4faad143..1dc385850ba2 100644
--- a/include/linux/mfd/arizona/pdata.h
+++ b/include/linux/mfd/arizona/pdata.h
@@ -101,7 +101,7 @@ struct arizona_pdata {
101 * useful for systems where and I2S bus with multiple data 101 * useful for systems where and I2S bus with multiple data
102 * lines is mastered. 102 * lines is mastered.
103 */ 103 */
104 int max_channels_clocked[ARIZONA_MAX_AIF]; 104 unsigned int max_channels_clocked[ARIZONA_MAX_AIF];
105 105
106 /** GPIO5 is used for jack detection */ 106 /** GPIO5 is used for jack detection */
107 bool jd_gpio5; 107 bool jd_gpio5;
@@ -125,22 +125,22 @@ struct arizona_pdata {
125 unsigned int hpdet_channel; 125 unsigned int hpdet_channel;
126 126
127 /** Extra debounce timeout used during initial mic detection (ms) */ 127 /** Extra debounce timeout used during initial mic detection (ms) */
128 int micd_detect_debounce; 128 unsigned int micd_detect_debounce;
129 129
130 /** GPIO for mic detection polarity */ 130 /** GPIO for mic detection polarity */
131 int micd_pol_gpio; 131 int micd_pol_gpio;
132 132
133 /** Mic detect ramp rate */ 133 /** Mic detect ramp rate */
134 int micd_bias_start_time; 134 unsigned int micd_bias_start_time;
135 135
136 /** Mic detect sample rate */ 136 /** Mic detect sample rate */
137 int micd_rate; 137 unsigned int micd_rate;
138 138
139 /** Mic detect debounce level */ 139 /** Mic detect debounce level */
140 int micd_dbtime; 140 unsigned int micd_dbtime;
141 141
142 /** Mic detect timeout (ms) */ 142 /** Mic detect timeout (ms) */
143 int micd_timeout; 143 unsigned int micd_timeout;
144 144
145 /** Force MICBIAS on for mic detect */ 145 /** Force MICBIAS on for mic detect */
146 bool micd_force_micbias; 146 bool micd_force_micbias;
@@ -162,6 +162,8 @@ struct arizona_pdata {
162 /** 162 /**
163 * Mode of input structures 163 * Mode of input structures
164 * One of the ARIZONA_INMODE_xxx values 164 * One of the ARIZONA_INMODE_xxx values
165 * wm5102/wm5110/wm8280/wm8997: [0]=IN1 [1]=IN2 [2]=IN3 [3]=IN4
166 * wm8998: [0]=IN1A [1]=IN2A [2]=IN1B [3]=IN2B
165 */ 167 */
166 int inmode[ARIZONA_MAX_INPUT]; 168 int inmode[ARIZONA_MAX_INPUT];
167 169
diff --git a/include/linux/mfd/arizona/registers.h b/include/linux/mfd/arizona/registers.h
index 3499d36e6067..5c39dc5d279e 100644
--- a/include/linux/mfd/arizona/registers.h
+++ b/include/linux/mfd/arizona/registers.h
@@ -139,6 +139,7 @@
139#define ARIZONA_MIC_DETECT_LEVEL_2 0x2A7 139#define ARIZONA_MIC_DETECT_LEVEL_2 0x2A7
140#define ARIZONA_MIC_DETECT_LEVEL_3 0x2A8 140#define ARIZONA_MIC_DETECT_LEVEL_3 0x2A8
141#define ARIZONA_MIC_DETECT_LEVEL_4 0x2A9 141#define ARIZONA_MIC_DETECT_LEVEL_4 0x2A9
142#define ARIZONA_MIC_DETECT_4 0x2AB
142#define ARIZONA_MIC_NOISE_MIX_CONTROL_1 0x2C3 143#define ARIZONA_MIC_NOISE_MIX_CONTROL_1 0x2C3
143#define ARIZONA_ISOLATION_CONTROL 0x2CB 144#define ARIZONA_ISOLATION_CONTROL 0x2CB
144#define ARIZONA_JACK_DETECT_ANALOGUE 0x2D3 145#define ARIZONA_JACK_DETECT_ANALOGUE 0x2D3
@@ -225,14 +226,18 @@
225#define ARIZONA_DAC_VOLUME_LIMIT_6R 0x43E 226#define ARIZONA_DAC_VOLUME_LIMIT_6R 0x43E
226#define ARIZONA_NOISE_GATE_SELECT_6R 0x43F 227#define ARIZONA_NOISE_GATE_SELECT_6R 0x43F
227#define ARIZONA_DRE_ENABLE 0x440 228#define ARIZONA_DRE_ENABLE 0x440
229#define ARIZONA_DRE_CONTROL_1 0x441
228#define ARIZONA_DRE_CONTROL_2 0x442 230#define ARIZONA_DRE_CONTROL_2 0x442
229#define ARIZONA_DRE_CONTROL_3 0x443 231#define ARIZONA_DRE_CONTROL_3 0x443
232#define ARIZONA_EDRE_ENABLE 0x448
230#define ARIZONA_DAC_AEC_CONTROL_1 0x450 233#define ARIZONA_DAC_AEC_CONTROL_1 0x450
234#define ARIZONA_DAC_AEC_CONTROL_2 0x451
231#define ARIZONA_NOISE_GATE_CONTROL 0x458 235#define ARIZONA_NOISE_GATE_CONTROL 0x458
232#define ARIZONA_PDM_SPK1_CTRL_1 0x490 236#define ARIZONA_PDM_SPK1_CTRL_1 0x490
233#define ARIZONA_PDM_SPK1_CTRL_2 0x491 237#define ARIZONA_PDM_SPK1_CTRL_2 0x491
234#define ARIZONA_PDM_SPK2_CTRL_1 0x492 238#define ARIZONA_PDM_SPK2_CTRL_1 0x492
235#define ARIZONA_PDM_SPK2_CTRL_2 0x493 239#define ARIZONA_PDM_SPK2_CTRL_2 0x493
240#define ARIZONA_HP_TEST_CTRL_13 0x49A
236#define ARIZONA_HP1_SHORT_CIRCUIT_CTRL 0x4A0 241#define ARIZONA_HP1_SHORT_CIRCUIT_CTRL 0x4A0
237#define ARIZONA_HP2_SHORT_CIRCUIT_CTRL 0x4A1 242#define ARIZONA_HP2_SHORT_CIRCUIT_CTRL 0x4A1
238#define ARIZONA_HP3_SHORT_CIRCUIT_CTRL 0x4A2 243#define ARIZONA_HP3_SHORT_CIRCUIT_CTRL 0x4A2
@@ -310,6 +315,10 @@
310#define ARIZONA_AIF3_TX_ENABLES 0x599 315#define ARIZONA_AIF3_TX_ENABLES 0x599
311#define ARIZONA_AIF3_RX_ENABLES 0x59A 316#define ARIZONA_AIF3_RX_ENABLES 0x59A
312#define ARIZONA_AIF3_FORCE_WRITE 0x59B 317#define ARIZONA_AIF3_FORCE_WRITE 0x59B
318#define ARIZONA_SPD1_TX_CONTROL 0x5C2
319#define ARIZONA_SPD1_TX_CHANNEL_STATUS_1 0x5C3
320#define ARIZONA_SPD1_TX_CHANNEL_STATUS_2 0x5C4
321#define ARIZONA_SPD1_TX_CHANNEL_STATUS_3 0x5C5
313#define ARIZONA_SLIMBUS_FRAMER_REF_GEAR 0x5E3 322#define ARIZONA_SLIMBUS_FRAMER_REF_GEAR 0x5E3
314#define ARIZONA_SLIMBUS_RATES_1 0x5E5 323#define ARIZONA_SLIMBUS_RATES_1 0x5E5
315#define ARIZONA_SLIMBUS_RATES_2 0x5E6 324#define ARIZONA_SLIMBUS_RATES_2 0x5E6
@@ -643,6 +652,10 @@
643#define ARIZONA_SLIMTX8MIX_INPUT_3_VOLUME 0x7FD 652#define ARIZONA_SLIMTX8MIX_INPUT_3_VOLUME 0x7FD
644#define ARIZONA_SLIMTX8MIX_INPUT_4_SOURCE 0x7FE 653#define ARIZONA_SLIMTX8MIX_INPUT_4_SOURCE 0x7FE
645#define ARIZONA_SLIMTX8MIX_INPUT_4_VOLUME 0x7FF 654#define ARIZONA_SLIMTX8MIX_INPUT_4_VOLUME 0x7FF
655#define ARIZONA_SPDIFTX1MIX_INPUT_1_SOURCE 0x800
656#define ARIZONA_SPDIFTX1MIX_INPUT_1_VOLUME 0x801
657#define ARIZONA_SPDIFTX2MIX_INPUT_1_SOURCE 0x808
658#define ARIZONA_SPDIFTX2MIX_INPUT_1_VOLUME 0x809
646#define ARIZONA_EQ1MIX_INPUT_1_SOURCE 0x880 659#define ARIZONA_EQ1MIX_INPUT_1_SOURCE 0x880
647#define ARIZONA_EQ1MIX_INPUT_1_VOLUME 0x881 660#define ARIZONA_EQ1MIX_INPUT_1_VOLUME 0x881
648#define ARIZONA_EQ1MIX_INPUT_2_SOURCE 0x882 661#define ARIZONA_EQ1MIX_INPUT_2_SOURCE 0x882
@@ -868,6 +881,7 @@
868#define ARIZONA_GPIO5_CTRL 0xC04 881#define ARIZONA_GPIO5_CTRL 0xC04
869#define ARIZONA_IRQ_CTRL_1 0xC0F 882#define ARIZONA_IRQ_CTRL_1 0xC0F
870#define ARIZONA_GPIO_DEBOUNCE_CONFIG 0xC10 883#define ARIZONA_GPIO_DEBOUNCE_CONFIG 0xC10
884#define ARIZONA_GP_SWITCH_1 0xC18
871#define ARIZONA_MISC_PAD_CTRL_1 0xC20 885#define ARIZONA_MISC_PAD_CTRL_1 0xC20
872#define ARIZONA_MISC_PAD_CTRL_2 0xC21 886#define ARIZONA_MISC_PAD_CTRL_2 0xC21
873#define ARIZONA_MISC_PAD_CTRL_3 0xC22 887#define ARIZONA_MISC_PAD_CTRL_3 0xC22
@@ -1169,6 +1183,13 @@
1169#define ARIZONA_DSP4_SCRATCH_1 0x1441 1183#define ARIZONA_DSP4_SCRATCH_1 0x1441
1170#define ARIZONA_DSP4_SCRATCH_2 0x1442 1184#define ARIZONA_DSP4_SCRATCH_2 0x1442
1171#define ARIZONA_DSP4_SCRATCH_3 0x1443 1185#define ARIZONA_DSP4_SCRATCH_3 0x1443
1186#define ARIZONA_FRF_COEFF_1 0x1700
1187#define ARIZONA_FRF_COEFF_2 0x1701
1188#define ARIZONA_FRF_COEFF_3 0x1702
1189#define ARIZONA_FRF_COEFF_4 0x1703
1190#define ARIZONA_V2_DAC_COMP_1 0x1704
1191#define ARIZONA_V2_DAC_COMP_2 0x1705
1192
1172 1193
1173/* 1194/*
1174 * Field Definitions. 1195 * Field Definitions.
@@ -2325,6 +2346,9 @@
2325#define ARIZONA_HP_IDAC_STEER_MASK 0x0004 /* HP_IDAC_STEER */ 2346#define ARIZONA_HP_IDAC_STEER_MASK 0x0004 /* HP_IDAC_STEER */
2326#define ARIZONA_HP_IDAC_STEER_SHIFT 2 /* HP_IDAC_STEER */ 2347#define ARIZONA_HP_IDAC_STEER_SHIFT 2 /* HP_IDAC_STEER */
2327#define ARIZONA_HP_IDAC_STEER_WIDTH 1 /* HP_IDAC_STEER */ 2348#define ARIZONA_HP_IDAC_STEER_WIDTH 1 /* HP_IDAC_STEER */
2349#define WM8998_HP_RATE_MASK 0x0006 /* HP_RATE - [2:1] */
2350#define WM8998_HP_RATE_SHIFT 1 /* HP_RATE - [2:1] */
2351#define WM8998_HP_RATE_WIDTH 2 /* HP_RATE - [2:1] */
2328#define ARIZONA_HP_RATE 0x0002 /* HP_RATE */ 2352#define ARIZONA_HP_RATE 0x0002 /* HP_RATE */
2329#define ARIZONA_HP_RATE_MASK 0x0002 /* HP_RATE */ 2353#define ARIZONA_HP_RATE_MASK 0x0002 /* HP_RATE */
2330#define ARIZONA_HP_RATE_SHIFT 1 /* HP_RATE */ 2354#define ARIZONA_HP_RATE_SHIFT 1 /* HP_RATE */
@@ -2413,6 +2437,16 @@
2413#define ARIZONA_MICD_STS_WIDTH 1 /* MICD_STS */ 2437#define ARIZONA_MICD_STS_WIDTH 1 /* MICD_STS */
2414 2438
2415/* 2439/*
2440 * R683 (0x2AB) - Mic Detect 4
2441 */
2442#define ARIZONA_MICDET_ADCVAL_DIFF_MASK 0xFF00 /* MICDET_ADCVAL_DIFF - [15:8] */
2443#define ARIZONA_MICDET_ADCVAL_DIFF_SHIFT 8 /* MICDET_ADCVAL_DIFF - [15:8] */
2444#define ARIZONA_MICDET_ADCVAL_DIFF_WIDTH 8 /* MICDET_ADCVAL_DIFF - [15:8] */
2445#define ARIZONA_MICDET_ADCVAL_MASK 0x007F /* MICDET_ADCVAL - [15:8] */
2446#define ARIZONA_MICDET_ADCVAL_SHIFT 0 /* MICDET_ADCVAL - [15:8] */
2447#define ARIZONA_MICDET_ADCVAL_WIDTH 7 /* MICDET_ADCVAL - [15:8] */
2448
2449/*
2416 * R707 (0x2C3) - Mic noise mix control 1 2450 * R707 (0x2C3) - Mic noise mix control 1
2417 */ 2451 */
2418#define ARIZONA_MICMUTE_RATE_MASK 0x7800 /* MICMUTE_RATE - [14:11] */ 2452#define ARIZONA_MICMUTE_RATE_MASK 0x7800 /* MICMUTE_RATE - [14:11] */
@@ -2528,6 +2562,12 @@
2528/* 2562/*
2529 * R785 (0x311) - ADC Digital Volume 1L 2563 * R785 (0x311) - ADC Digital Volume 1L
2530 */ 2564 */
2565#define ARIZONA_IN1L_SRC_MASK 0x4000 /* IN1L_SRC - [14] */
2566#define ARIZONA_IN1L_SRC_SHIFT 14 /* IN1L_SRC - [14] */
2567#define ARIZONA_IN1L_SRC_WIDTH 1 /* IN1L_SRC - [14] */
2568#define ARIZONA_IN1L_SRC_SE_MASK 0x2000 /* IN1L_SRC - [13] */
2569#define ARIZONA_IN1L_SRC_SE_SHIFT 13 /* IN1L_SRC - [13] */
2570#define ARIZONA_IN1L_SRC_SE_WIDTH 1 /* IN1L_SRC - [13] */
2531#define ARIZONA_IN_VU 0x0200 /* IN_VU */ 2571#define ARIZONA_IN_VU 0x0200 /* IN_VU */
2532#define ARIZONA_IN_VU_MASK 0x0200 /* IN_VU */ 2572#define ARIZONA_IN_VU_MASK 0x0200 /* IN_VU */
2533#define ARIZONA_IN_VU_SHIFT 9 /* IN_VU */ 2573#define ARIZONA_IN_VU_SHIFT 9 /* IN_VU */
@@ -2560,6 +2600,12 @@
2560/* 2600/*
2561 * R789 (0x315) - ADC Digital Volume 1R 2601 * R789 (0x315) - ADC Digital Volume 1R
2562 */ 2602 */
2603#define ARIZONA_IN1R_SRC_MASK 0x4000 /* IN1R_SRC - [14] */
2604#define ARIZONA_IN1R_SRC_SHIFT 14 /* IN1R_SRC - [14] */
2605#define ARIZONA_IN1R_SRC_WIDTH 1 /* IN1R_SRC - [14] */
2606#define ARIZONA_IN1R_SRC_SE_MASK 0x2000 /* IN1R_SRC - [13] */
2607#define ARIZONA_IN1R_SRC_SE_SHIFT 13 /* IN1R_SRC - [13] */
2608#define ARIZONA_IN1R_SRC_SE_WIDTH 1 /* IN1R_SRC - [13] */
2563#define ARIZONA_IN_VU 0x0200 /* IN_VU */ 2609#define ARIZONA_IN_VU 0x0200 /* IN_VU */
2564#define ARIZONA_IN_VU_MASK 0x0200 /* IN_VU */ 2610#define ARIZONA_IN_VU_MASK 0x0200 /* IN_VU */
2565#define ARIZONA_IN_VU_SHIFT 9 /* IN_VU */ 2611#define ARIZONA_IN_VU_SHIFT 9 /* IN_VU */
@@ -2604,6 +2650,12 @@
2604/* 2650/*
2605 * R793 (0x319) - ADC Digital Volume 2L 2651 * R793 (0x319) - ADC Digital Volume 2L
2606 */ 2652 */
2653#define ARIZONA_IN2L_SRC_MASK 0x4000 /* IN2L_SRC - [14] */
2654#define ARIZONA_IN2L_SRC_SHIFT 14 /* IN2L_SRC - [14] */
2655#define ARIZONA_IN2L_SRC_WIDTH 1 /* IN2L_SRC - [14] */
2656#define ARIZONA_IN2L_SRC_SE_MASK 0x2000 /* IN2L_SRC - [13] */
2657#define ARIZONA_IN2L_SRC_SE_SHIFT 13 /* IN2L_SRC - [13] */
2658#define ARIZONA_IN2L_SRC_SE_WIDTH 1 /* IN2L_SRC - [13] */
2607#define ARIZONA_IN_VU 0x0200 /* IN_VU */ 2659#define ARIZONA_IN_VU 0x0200 /* IN_VU */
2608#define ARIZONA_IN_VU_MASK 0x0200 /* IN_VU */ 2660#define ARIZONA_IN_VU_MASK 0x0200 /* IN_VU */
2609#define ARIZONA_IN_VU_SHIFT 9 /* IN_VU */ 2661#define ARIZONA_IN_VU_SHIFT 9 /* IN_VU */
@@ -3412,11 +3464,45 @@
3412#define ARIZONA_DRE1L_ENA_WIDTH 1 /* DRE1L_ENA */ 3464#define ARIZONA_DRE1L_ENA_WIDTH 1 /* DRE1L_ENA */
3413 3465
3414/* 3466/*
3467 * R1088 (0x440) - DRE Enable (WM8998)
3468 */
3469#define WM8998_DRE3L_ENA 0x0020 /* DRE3L_ENA */
3470#define WM8998_DRE3L_ENA_MASK 0x0020 /* DRE3L_ENA */
3471#define WM8998_DRE3L_ENA_SHIFT 5 /* DRE3L_ENA */
3472#define WM8998_DRE3L_ENA_WIDTH 1 /* DRE3L_ENA */
3473#define WM8998_DRE2L_ENA 0x0008 /* DRE2L_ENA */
3474#define WM8998_DRE2L_ENA_MASK 0x0008 /* DRE2L_ENA */
3475#define WM8998_DRE2L_ENA_SHIFT 3 /* DRE2L_ENA */
3476#define WM8998_DRE2L_ENA_WIDTH 1 /* DRE2L_ENA */
3477#define WM8998_DRE2R_ENA 0x0004 /* DRE2R_ENA */
3478#define WM8998_DRE2R_ENA_MASK 0x0004 /* DRE2R_ENA */
3479#define WM8998_DRE2R_ENA_SHIFT 2 /* DRE2R_ENA */
3480#define WM8998_DRE2R_ENA_WIDTH 1 /* DRE2R_ENA */
3481#define WM8998_DRE1L_ENA 0x0002 /* DRE1L_ENA */
3482#define WM8998_DRE1L_ENA_MASK 0x0002 /* DRE1L_ENA */
3483#define WM8998_DRE1L_ENA_SHIFT 1 /* DRE1L_ENA */
3484#define WM8998_DRE1L_ENA_WIDTH 1 /* DRE1L_ENA */
3485#define WM8998_DRE1R_ENA 0x0001 /* DRE1R_ENA */
3486#define WM8998_DRE1R_ENA_MASK 0x0001 /* DRE1R_ENA */
3487#define WM8998_DRE1R_ENA_SHIFT 0 /* DRE1R_ENA */
3488#define WM8998_DRE1R_ENA_WIDTH 1 /* DRE1R_ENA */
3489
3490/*
3491 * R1089 (0x441) - DRE Control 1
3492 */
3493#define ARIZONA_DRE_ENV_TC_FAST_MASK 0x0F00 /* DRE_ENV_TC_FAST - [11:8] */
3494#define ARIZONA_DRE_ENV_TC_FAST_SHIFT 8 /* DRE_ENV_TC_FAST - [11:8] */
3495#define ARIZONA_DRE_ENV_TC_FAST_WIDTH 4 /* DRE_ENV_TC_FAST - [11:8] */
3496
3497/*
3415 * R1090 (0x442) - DRE Control 2 3498 * R1090 (0x442) - DRE Control 2
3416 */ 3499 */
3417#define ARIZONA_DRE_T_LOW_MASK 0x3F00 /* DRE_T_LOW - [13:8] */ 3500#define ARIZONA_DRE_T_LOW_MASK 0x3F00 /* DRE_T_LOW - [13:8] */
3418#define ARIZONA_DRE_T_LOW_SHIFT 8 /* DRE_T_LOW - [13:8] */ 3501#define ARIZONA_DRE_T_LOW_SHIFT 8 /* DRE_T_LOW - [13:8] */
3419#define ARIZONA_DRE_T_LOW_WIDTH 6 /* DRE_T_LOW - [13:8] */ 3502#define ARIZONA_DRE_T_LOW_WIDTH 6 /* DRE_T_LOW - [13:8] */
3503#define ARIZONA_DRE_ALOG_VOL_DELAY_MASK 0x000F /* DRE_ALOG_VOL_DELAY - [3:0] */
3504#define ARIZONA_DRE_ALOG_VOL_DELAY_SHIFT 0 /* DRE_ALOG_VOL_DELAY - [3:0] */
3505#define ARIZONA_DRE_ALOG_VOL_DELAY_WIDTH 4 /* DRE_ALOG_VOL_DELAY - [3:0] */
3420 3506
3421/* 3507/*
3422 * R1091 (0x443) - DRE Control 3 3508 * R1091 (0x443) - DRE Control 3
@@ -3428,6 +3514,49 @@
3428#define ARIZONA_DRE_LOW_LEVEL_ABS_SHIFT 0 /* LOW_LEVEL_ABS - [3:0] */ 3514#define ARIZONA_DRE_LOW_LEVEL_ABS_SHIFT 0 /* LOW_LEVEL_ABS - [3:0] */
3429#define ARIZONA_DRE_LOW_LEVEL_ABS_WIDTH 4 /* LOW_LEVEL_ABS - [3:0] */ 3515#define ARIZONA_DRE_LOW_LEVEL_ABS_WIDTH 4 /* LOW_LEVEL_ABS - [3:0] */
3430 3516
3517/* R486 (0x448) - EDRE_Enable
3518 */
3519#define ARIZONA_EDRE_OUT4L_THR2_ENA 0x0200 /* EDRE_OUT4L_THR2_ENA */
3520#define ARIZONA_EDRE_OUT4L_THR2_ENA_MASK 0x0200 /* EDRE_OUT4L_THR2_ENA */
3521#define ARIZONA_EDRE_OUT4L_THR2_ENA_SHIFT 9 /* EDRE_OUT4L_THR2_ENA */
3522#define ARIZONA_EDRE_OUT4L_THR2_ENA_WIDTH 1 /* EDRE_OUT4L_THR2_ENA */
3523#define ARIZONA_EDRE_OUT4R_THR2_ENA 0x0100 /* EDRE_OUT4R_THR2_ENA */
3524#define ARIZONA_EDRE_OUT4R_THR2_ENA_MASK 0x0100 /* EDRE_OUT4R_THR2_ENA */
3525#define ARIZONA_EDRE_OUT4R_THR2_ENA_SHIFT 8 /* EDRE_OUT4R_THR2_ENA */
3526#define ARIZONA_EDRE_OUT4R_THR2_ENA_WIDTH 1 /* EDRE_OUT4R_THR2_ENA */
3527#define ARIZONA_EDRE_OUT4L_THR1_ENA 0x0080 /* EDRE_OUT4L_THR1_ENA */
3528#define ARIZONA_EDRE_OUT4L_THR1_ENA_MASK 0x0080 /* EDRE_OUT4L_THR1_ENA */
3529#define ARIZONA_EDRE_OUT4L_THR1_ENA_SHIFT 7 /* EDRE_OUT4L_THR1_ENA */
3530#define ARIZONA_EDRE_OUT4L_THR1_ENA_WIDTH 1 /* EDRE_OUT4L_THR1_ENA */
3531#define ARIZONA_EDRE_OUT4R_THR1_ENA 0x0040 /* EDRE_OUT4R_THR1_ENA */
3532#define ARIZONA_EDRE_OUT4R_THR1_ENA_MASK 0x0040 /* EDRE_OUT4R_THR1_ENA */
3533#define ARIZONA_EDRE_OUT4R_THR1_ENA_SHIFT 6 /* EDRE_OUT4R_THR1_ENA */
3534#define ARIZONA_EDRE_OUT4R_THR1_ENA_WIDTH 1 /* EDRE_OUT4R_THR1_ENA */
3535#define ARIZONA_EDRE_OUT3L_THR1_ENA 0x0020 /* EDRE_OUT3L_THR1_ENA */
3536#define ARIZONA_EDRE_OUT3L_THR1_ENA_MASK 0x0020 /* EDRE_OUT3L_THR1_ENA */
3537#define ARIZONA_EDRE_OUT3L_THR1_ENA_SHIFT 5 /* EDRE_OUT3L_THR1_ENA */
3538#define ARIZONA_EDRE_OUT3L_THR1_ENA_WIDTH 1 /* EDRE_OUT3L_THR1_ENA */
3539#define ARIZONA_EDRE_OUT3R_THR1_ENA 0x0010 /* EDRE_OUT3R_THR1_ENA */
3540#define ARIZONA_EDRE_OUT3R_THR1_ENA_MASK 0x0010 /* EDRE_OUT3R_THR1_ENA */
3541#define ARIZONA_EDRE_OUT3R_THR1_ENA_SHIFT 4 /* EDRE_OUT3R_THR1_ENA */
3542#define ARIZONA_EDRE_OUT3R_THR1_ENA_WIDTH 1 /* EDRE_OUT3R_THR1_ENA */
3543#define ARIZONA_EDRE_OUT2L_THR1_ENA 0x0008 /* EDRE_OUT2L_THR1_ENA */
3544#define ARIZONA_EDRE_OUT2L_THR1_ENA_MASK 0x0008 /* EDRE_OUT2L_THR1_ENA */
3545#define ARIZONA_EDRE_OUT2L_THR1_ENA_SHIFT 3 /* EDRE_OUT2L_THR1_ENA */
3546#define ARIZONA_EDRE_OUT2L_THR1_ENA_WIDTH 1 /* EDRE_OUT2L_THR1_ENA */
3547#define ARIZONA_EDRE_OUT2R_THR1_ENA 0x0004 /* EDRE_OUT2R_THR1_ENA */
3548#define ARIZONA_EDRE_OUT2R_THR1_ENA_MASK 0x0004 /* EDRE_OUT2R_THR1_ENA */
3549#define ARIZONA_EDRE_OUT2R_THR1_ENA_SHIFT 2 /* EDRE_OUT2R_THR1_ENA */
3550#define ARIZONA_EDRE_OUT2R_THR1_ENA_WIDTH 1 /* EDRE_OUT2R_THR1_ENA */
3551#define ARIZONA_EDRE_OUT1L_THR1_ENA 0x0002 /* EDRE_OUT1L_THR1_ENA */
3552#define ARIZONA_EDRE_OUT1L_THR1_ENA_MASK 0x0002 /* EDRE_OUT1L_THR1_ENA */
3553#define ARIZONA_EDRE_OUT1L_THR1_ENA_SHIFT 1 /* EDRE_OUT1L_THR1_ENA */
3554#define ARIZONA_EDRE_OUT1L_THR1_ENA_WIDTH 1 /* EDRE_OUT1L_THR1_ENA */
3555#define ARIZONA_EDRE_OUT1R_THR1_ENA 0x0001 /* EDRE_OUT1R_THR1_ENA */
3556#define ARIZONA_EDRE_OUT1R_THR1_ENA_MASK 0x0001 /* EDRE_OUT1R_THR1_ENA */
3557#define ARIZONA_EDRE_OUT1R_THR1_ENA_SHIFT 0 /* EDRE_OUT1R_THR1_ENA */
3558#define ARIZONA_EDRE_OUT1R_THR1_ENA_WIDTH 1 /* EDRE_OUT1R_THR1_ENA */
3559
3431/* 3560/*
3432 * R1104 (0x450) - DAC AEC Control 1 3561 * R1104 (0x450) - DAC AEC Control 1
3433 */ 3562 */
@@ -4308,6 +4437,86 @@
4308#define ARIZONA_AIF3_FRC_WR_WIDTH 1 /* AIF3_FRC_WR */ 4437#define ARIZONA_AIF3_FRC_WR_WIDTH 1 /* AIF3_FRC_WR */
4309 4438
4310/* 4439/*
4440 * R1474 (0x5C2) - SPD1 TX Control
4441 */
4442#define ARIZONA_SPD1_VAL2 0x2000 /* SPD1_VAL2 */
4443#define ARIZONA_SPD1_VAL2_MASK 0x2000 /* SPD1_VAL2 */
4444#define ARIZONA_SPD1_VAL2_SHIFT 13 /* SPD1_VAL2 */
4445#define ARIZONA_SPD1_VAL2_WIDTH 1 /* SPD1_VAL2 */
4446#define ARIZONA_SPD1_VAL1 0x1000 /* SPD1_VAL1 */
4447#define ARIZONA_SPD1_VAL1_MASK 0x1000 /* SPD1_VAL1 */
4448#define ARIZONA_SPD1_VAL1_SHIFT 12 /* SPD1_VAL1 */
4449#define ARIZONA_SPD1_VAL1_WIDTH 1 /* SPD1_VAL1 */
4450#define ARIZONA_SPD1_RATE_MASK 0x00F0 /* SPD1_RATE */
4451#define ARIZONA_SPD1_RATE_SHIFT 4 /* SPD1_RATE */
4452#define ARIZONA_SPD1_RATE_WIDTH 4 /* SPD1_RATE */
4453#define ARIZONA_SPD1_ENA 0x0001 /* SPD1_ENA */
4454#define ARIZONA_SPD1_ENA_MASK 0x0001 /* SPD1_ENA */
4455#define ARIZONA_SPD1_ENA_SHIFT 0 /* SPD1_ENA */
4456#define ARIZONA_SPD1_ENA_WIDTH 1 /* SPD1_ENA */
4457
4458/*
4459 * R1475 (0x5C3) - SPD1 TX Channel Status 1
4460 */
4461#define ARIZONA_SPD1_CATCODE_MASK 0xFF00 /* SPD1_CATCODE */
4462#define ARIZONA_SPD1_CATCODE_SHIFT 8 /* SPD1_CATCODE */
4463#define ARIZONA_SPD1_CATCODE_WIDTH 8 /* SPD1_CATCODE */
4464#define ARIZONA_SPD1_CHSTMODE_MASK 0x00C0 /* SPD1_CHSTMODE */
4465#define ARIZONA_SPD1_CHSTMODE_SHIFT 6 /* SPD1_CHSTMODE */
4466#define ARIZONA_SPD1_CHSTMODE_WIDTH 2 /* SPD1_CHSTMODE */
4467#define ARIZONA_SPD1_PREEMPH_MASK 0x0038 /* SPD1_PREEMPH */
4468#define ARIZONA_SPD1_PREEMPH_SHIFT 3 /* SPD1_PREEMPH */
4469#define ARIZONA_SPD1_PREEMPH_WIDTH 3 /* SPD1_PREEMPH */
4470#define ARIZONA_SPD1_NOCOPY 0x0004 /* SPD1_NOCOPY */
4471#define ARIZONA_SPD1_NOCOPY_MASK 0x0004 /* SPD1_NOCOPY */
4472#define ARIZONA_SPD1_NOCOPY_SHIFT 2 /* SPD1_NOCOPY */
4473#define ARIZONA_SPD1_NOCOPY_WIDTH 1 /* SPD1_NOCOPY */
4474#define ARIZONA_SPD1_NOAUDIO 0x0002 /* SPD1_NOAUDIO */
4475#define ARIZONA_SPD1_NOAUDIO_MASK 0x0002 /* SPD1_NOAUDIO */
4476#define ARIZONA_SPD1_NOAUDIO_SHIFT 1 /* SPD1_NOAUDIO */
4477#define ARIZONA_SPD1_NOAUDIO_WIDTH 1 /* SPD1_NOAUDIO */
4478#define ARIZONA_SPD1_PRO 0x0001 /* SPD1_PRO */
4479#define ARIZONA_SPD1_PRO_MASK 0x0001 /* SPD1_PRO */
4480#define ARIZONA_SPD1_PRO_SHIFT 0 /* SPD1_PRO */
4481#define ARIZONA_SPD1_PRO_WIDTH 1 /* SPD1_PRO */
4482
4483/*
4484 * R1475 (0x5C4) - SPD1 TX Channel Status 2
4485 */
4486#define ARIZONA_SPD1_FREQ_MASK 0xF000 /* SPD1_FREQ */
4487#define ARIZONA_SPD1_FREQ_SHIFT 12 /* SPD1_FREQ */
4488#define ARIZONA_SPD1_FREQ_WIDTH 4 /* SPD1_FREQ */
4489#define ARIZONA_SPD1_CHNUM2_MASK 0x0F00 /* SPD1_CHNUM2 */
4490#define ARIZONA_SPD1_CHNUM2_SHIFT 8 /* SPD1_CHNUM2 */
4491#define ARIZONA_SPD1_CHNUM2_WIDTH 4 /* SPD1_CHNUM2 */
4492#define ARIZONA_SPD1_CHNUM1_MASK 0x00F0 /* SPD1_CHNUM1 */
4493#define ARIZONA_SPD1_CHNUM1_SHIFT 4 /* SPD1_CHNUM1 */
4494#define ARIZONA_SPD1_CHNUM1_WIDTH 4 /* SPD1_CHNUM1 */
4495#define ARIZONA_SPD1_SRCNUM_MASK 0x000F /* SPD1_SRCNUM */
4496#define ARIZONA_SPD1_SRCNUM_SHIFT 0 /* SPD1_SRCNUM */
4497#define ARIZONA_SPD1_SRCNUM_WIDTH 4 /* SPD1_SRCNUM */
4498
4499/*
4500 * R1475 (0x5C5) - SPD1 TX Channel Status 3
4501 */
4502#define ARIZONA_SPD1_ORGSAMP_MASK 0x0F00 /* SPD1_ORGSAMP */
4503#define ARIZONA_SPD1_ORGSAMP_SHIFT 8 /* SPD1_ORGSAMP */
4504#define ARIZONA_SPD1_ORGSAMP_WIDTH 4 /* SPD1_ORGSAMP */
4505#define ARIZONA_SPD1_TXWL_MASK 0x00E0 /* SPD1_TXWL */
4506#define ARIZONA_SPD1_TXWL_SHIFT 5 /* SPD1_TXWL */
4507#define ARIZONA_SPD1_TXWL_WIDTH 3 /* SPD1_TXWL */
4508#define ARIZONA_SPD1_MAXWL 0x0010 /* SPD1_MAXWL */
4509#define ARIZONA_SPD1_MAXWL_MASK 0x0010 /* SPD1_MAXWL */
4510#define ARIZONA_SPD1_MAXWL_SHIFT 4 /* SPD1_MAXWL */
4511#define ARIZONA_SPD1_MAXWL_WIDTH 1 /* SPD1_MAXWL */
4512#define ARIZONA_SPD1_CS31_30_MASK 0x000C /* SPD1_CS31_30 */
4513#define ARIZONA_SPD1_CS31_30_SHIFT 2 /* SPD1_CS31_30 */
4514#define ARIZONA_SPD1_CS31_30_WIDTH 2 /* SPD1_CS31_30 */
4515#define ARIZONA_SPD1_CLKACU_MASK 0x0003 /* SPD1_CLKACU */
4516#define ARIZONA_SPD1_CLKACU_SHIFT 2 /* SPD1_CLKACU */
4517#define ARIZONA_SPD1_CLKACU_WIDTH 0 /* SPD1_CLKACU */
4518
4519/*
4311 * R1507 (0x5E3) - SLIMbus Framer Ref Gear 4520 * R1507 (0x5E3) - SLIMbus Framer Ref Gear
4312 */ 4521 */
4313#define ARIZONA_SLIMCLK_SRC 0x0010 /* SLIMCLK_SRC */ 4522#define ARIZONA_SLIMCLK_SRC 0x0010 /* SLIMCLK_SRC */
@@ -4562,6 +4771,13 @@
4562#define ARIZONA_GP_DBTIME_WIDTH 4 /* GP_DBTIME - [15:12] */ 4771#define ARIZONA_GP_DBTIME_WIDTH 4 /* GP_DBTIME - [15:12] */
4563 4772
4564/* 4773/*
4774 * R3096 (0xC18) - GP Switch 1
4775 */
4776#define ARIZONA_SW1_MODE_MASK 0x0003 /* SW1_MODE - [1:0] */
4777#define ARIZONA_SW1_MODE_SHIFT 0 /* SW1_MODE - [1:0] */
4778#define ARIZONA_SW1_MODE_WIDTH 2 /* SW1_MODE - [1:0] */
4779
4780/*
4565 * R3104 (0xC20) - Misc Pad Ctrl 1 4781 * R3104 (0xC20) - Misc Pad Ctrl 1
4566 */ 4782 */
4567#define ARIZONA_LDO1ENA_PD 0x8000 /* LDO1ENA_PD */ 4783#define ARIZONA_LDO1ENA_PD 0x8000 /* LDO1ENA_PD */
@@ -6301,6 +6517,10 @@
6301/* 6517/*
6302 * R3366 (0xD26) - Interrupt Raw Status 8 6518 * R3366 (0xD26) - Interrupt Raw Status 8
6303 */ 6519 */
6520#define ARIZONA_SPDIF_OVERCLOCKED_STS 0x8000 /* SPDIF_OVERCLOCKED_STS */
6521#define ARIZONA_SPDIF_OVERCLOCKED_STS_MASK 0x8000 /* SPDIF_OVERCLOCKED_STS */
6522#define ARIZONA_SPDIF_OVERCLOCKED_STS_SHIFT 15 /* SPDIF_OVERCLOCKED_STS */
6523#define ARIZONA_SPDIF_OVERCLOCKED_STS_WIDTH 1 /* SPDIF_OVERCLOCKED_STS */
6304#define ARIZONA_AIF3_UNDERCLOCKED_STS 0x0400 /* AIF3_UNDERCLOCKED_STS */ 6524#define ARIZONA_AIF3_UNDERCLOCKED_STS 0x0400 /* AIF3_UNDERCLOCKED_STS */
6305#define ARIZONA_AIF3_UNDERCLOCKED_STS_MASK 0x0400 /* AIF3_UNDERCLOCKED_STS */ 6525#define ARIZONA_AIF3_UNDERCLOCKED_STS_MASK 0x0400 /* AIF3_UNDERCLOCKED_STS */
6306#define ARIZONA_AIF3_UNDERCLOCKED_STS_SHIFT 10 /* AIF3_UNDERCLOCKED_STS */ 6526#define ARIZONA_AIF3_UNDERCLOCKED_STS_SHIFT 10 /* AIF3_UNDERCLOCKED_STS */
diff --git a/include/linux/mfd/axp20x.h b/include/linux/mfd/axp20x.h
index c2aa853fb412..cc8ad1e1a307 100644
--- a/include/linux/mfd/axp20x.h
+++ b/include/linux/mfd/axp20x.h
@@ -12,7 +12,8 @@
12#define __LINUX_MFD_AXP20X_H 12#define __LINUX_MFD_AXP20X_H
13 13
14enum { 14enum {
15 AXP202_ID = 0, 15 AXP152_ID = 0,
16 AXP202_ID,
16 AXP209_ID, 17 AXP209_ID,
17 AXP221_ID, 18 AXP221_ID,
18 AXP288_ID, 19 AXP288_ID,
@@ -22,6 +23,24 @@ enum {
22#define AXP20X_DATACACHE(m) (0x04 + (m)) 23#define AXP20X_DATACACHE(m) (0x04 + (m))
23 24
24/* Power supply */ 25/* Power supply */
26#define AXP152_PWR_OP_MODE 0x01
27#define AXP152_LDO3456_DC1234_CTRL 0x12
28#define AXP152_ALDO_OP_MODE 0x13
29#define AXP152_LDO0_CTRL 0x15
30#define AXP152_DCDC2_V_OUT 0x23
31#define AXP152_DCDC2_V_SCAL 0x25
32#define AXP152_DCDC1_V_OUT 0x26
33#define AXP152_DCDC3_V_OUT 0x27
34#define AXP152_ALDO12_V_OUT 0x28
35#define AXP152_DLDO1_V_OUT 0x29
36#define AXP152_DLDO2_V_OUT 0x2a
37#define AXP152_DCDC4_V_OUT 0x2b
38#define AXP152_V_OFF 0x31
39#define AXP152_OFF_CTRL 0x32
40#define AXP152_PEK_KEY 0x36
41#define AXP152_DCDC_FREQ 0x37
42#define AXP152_DCDC_MODE 0x80
43
25#define AXP20X_PWR_INPUT_STATUS 0x00 44#define AXP20X_PWR_INPUT_STATUS 0x00
26#define AXP20X_PWR_OP_MODE 0x01 45#define AXP20X_PWR_OP_MODE 0x01
27#define AXP20X_USB_OTG_STATUS 0x02 46#define AXP20X_USB_OTG_STATUS 0x02
@@ -69,6 +88,13 @@ enum {
69#define AXP22X_CHRG_CTRL3 0x35 88#define AXP22X_CHRG_CTRL3 0x35
70 89
71/* Interrupt */ 90/* Interrupt */
91#define AXP152_IRQ1_EN 0x40
92#define AXP152_IRQ2_EN 0x41
93#define AXP152_IRQ3_EN 0x42
94#define AXP152_IRQ1_STATE 0x48
95#define AXP152_IRQ2_STATE 0x49
96#define AXP152_IRQ3_STATE 0x4a
97
72#define AXP20X_IRQ1_EN 0x40 98#define AXP20X_IRQ1_EN 0x40
73#define AXP20X_IRQ2_EN 0x41 99#define AXP20X_IRQ2_EN 0x41
74#define AXP20X_IRQ3_EN 0x42 100#define AXP20X_IRQ3_EN 0x42
@@ -127,6 +153,19 @@ enum {
127#define AXP22X_PWREN_CTRL2 0x8d 153#define AXP22X_PWREN_CTRL2 0x8d
128 154
129/* GPIO */ 155/* GPIO */
156#define AXP152_GPIO0_CTRL 0x90
157#define AXP152_GPIO1_CTRL 0x91
158#define AXP152_GPIO2_CTRL 0x92
159#define AXP152_GPIO3_CTRL 0x93
160#define AXP152_LDOGPIO2_V_OUT 0x96
161#define AXP152_GPIO_INPUT 0x97
162#define AXP152_PWM0_FREQ_X 0x98
163#define AXP152_PWM0_FREQ_Y 0x99
164#define AXP152_PWM0_DUTY_CYCLE 0x9a
165#define AXP152_PWM1_FREQ_X 0x9b
166#define AXP152_PWM1_FREQ_Y 0x9c
167#define AXP152_PWM1_DUTY_CYCLE 0x9d
168
130#define AXP20X_GPIO0_CTRL 0x90 169#define AXP20X_GPIO0_CTRL 0x90
131#define AXP20X_LDO5_V_OUT 0x91 170#define AXP20X_LDO5_V_OUT 0x91
132#define AXP20X_GPIO1_CTRL 0x92 171#define AXP20X_GPIO1_CTRL 0x92
@@ -151,6 +190,12 @@ enum {
151#define AXP20X_CC_CTRL 0xb8 190#define AXP20X_CC_CTRL 0xb8
152#define AXP20X_FG_RES 0xb9 191#define AXP20X_FG_RES 0xb9
153 192
193/* OCV */
194#define AXP20X_RDC_H 0xba
195#define AXP20X_RDC_L 0xbb
196#define AXP20X_OCV(m) (0xc0 + (m))
197#define AXP20X_OCV_MAX 0xf
198
154/* AXP22X specific registers */ 199/* AXP22X specific registers */
155#define AXP22X_BATLOW_THRES1 0xe6 200#define AXP22X_BATLOW_THRES1 0xe6
156 201
@@ -218,6 +263,26 @@ enum {
218 263
219/* IRQs */ 264/* IRQs */
220enum { 265enum {
266 AXP152_IRQ_LDO0IN_CONNECT = 1,
267 AXP152_IRQ_LDO0IN_REMOVAL,
268 AXP152_IRQ_ALDO0IN_CONNECT,
269 AXP152_IRQ_ALDO0IN_REMOVAL,
270 AXP152_IRQ_DCDC1_V_LOW,
271 AXP152_IRQ_DCDC2_V_LOW,
272 AXP152_IRQ_DCDC3_V_LOW,
273 AXP152_IRQ_DCDC4_V_LOW,
274 AXP152_IRQ_PEK_SHORT,
275 AXP152_IRQ_PEK_LONG,
276 AXP152_IRQ_TIMER,
277 AXP152_IRQ_PEK_RIS_EDGE,
278 AXP152_IRQ_PEK_FAL_EDGE,
279 AXP152_IRQ_GPIO3_INPUT,
280 AXP152_IRQ_GPIO2_INPUT,
281 AXP152_IRQ_GPIO1_INPUT,
282 AXP152_IRQ_GPIO0_INPUT,
283};
284
285enum {
221 AXP20X_IRQ_ACIN_OVER_V = 1, 286 AXP20X_IRQ_ACIN_OVER_V = 1,
222 AXP20X_IRQ_ACIN_PLUGIN, 287 AXP20X_IRQ_ACIN_PLUGIN,
223 AXP20X_IRQ_ACIN_REMOVAL, 288 AXP20X_IRQ_ACIN_REMOVAL,
diff --git a/include/linux/mfd/da9062/core.h b/include/linux/mfd/da9062/core.h
new file mode 100644
index 000000000000..376ba84366a0
--- /dev/null
+++ b/include/linux/mfd/da9062/core.h
@@ -0,0 +1,50 @@
1/*
2 * Copyright (C) 2015 Dialog Semiconductor Ltd.
3 *
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU General Public License
6 * as published by the Free Software Foundation; either version 2
7 * of the License, or (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 */
14
15#ifndef __MFD_DA9062_CORE_H__
16#define __MFD_DA9062_CORE_H__
17
18#include <linux/interrupt.h>
19#include <linux/mfd/da9062/registers.h>
20
21/* Interrupts */
22enum da9062_irqs {
23 /* IRQ A */
24 DA9062_IRQ_ONKEY,
25 DA9062_IRQ_ALARM,
26 DA9062_IRQ_TICK,
27 DA9062_IRQ_WDG_WARN,
28 DA9062_IRQ_SEQ_RDY,
29 /* IRQ B*/
30 DA9062_IRQ_TEMP,
31 DA9062_IRQ_LDO_LIM,
32 DA9062_IRQ_DVC_RDY,
33 DA9062_IRQ_VDD_WARN,
34 /* IRQ C */
35 DA9062_IRQ_GPI0,
36 DA9062_IRQ_GPI1,
37 DA9062_IRQ_GPI2,
38 DA9062_IRQ_GPI3,
39 DA9062_IRQ_GPI4,
40
41 DA9062_NUM_IRQ,
42};
43
44struct da9062 {
45 struct device *dev;
46 struct regmap *regmap;
47 struct regmap_irq_chip_data *regmap_irq;
48};
49
50#endif /* __MFD_DA9062_CORE_H__ */
diff --git a/include/linux/mfd/da9062/registers.h b/include/linux/mfd/da9062/registers.h
new file mode 100644
index 000000000000..97790d1b02c5
--- /dev/null
+++ b/include/linux/mfd/da9062/registers.h
@@ -0,0 +1,1108 @@
1/*
2 * registers.h - REGISTERS H for DA9062
3 * Copyright (C) 2015 Dialog Semiconductor Ltd.
4 *
5 * This program is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU General Public License
7 * as published by the Free Software Foundation; either version 2
8 * of the License, or (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 */
15
16#ifndef __DA9062_H__
17#define __DA9062_H__
18
19#define DA9062_PMIC_DEVICE_ID 0x62
20#define DA9062_PMIC_VARIANT_MRC_AA 0x01
21
22#define DA9062_I2C_PAGE_SEL_SHIFT 1
23
24/*
25 * Registers
26 */
27
28#define DA9062AA_PAGE_CON 0x000
29#define DA9062AA_STATUS_A 0x001
30#define DA9062AA_STATUS_B 0x002
31#define DA9062AA_STATUS_D 0x004
32#define DA9062AA_FAULT_LOG 0x005
33#define DA9062AA_EVENT_A 0x006
34#define DA9062AA_EVENT_B 0x007
35#define DA9062AA_EVENT_C 0x008
36#define DA9062AA_IRQ_MASK_A 0x00A
37#define DA9062AA_IRQ_MASK_B 0x00B
38#define DA9062AA_IRQ_MASK_C 0x00C
39#define DA9062AA_CONTROL_A 0x00E
40#define DA9062AA_CONTROL_B 0x00F
41#define DA9062AA_CONTROL_C 0x010
42#define DA9062AA_CONTROL_D 0x011
43#define DA9062AA_CONTROL_E 0x012
44#define DA9062AA_CONTROL_F 0x013
45#define DA9062AA_PD_DIS 0x014
46#define DA9062AA_GPIO_0_1 0x015
47#define DA9062AA_GPIO_2_3 0x016
48#define DA9062AA_GPIO_4 0x017
49#define DA9062AA_GPIO_WKUP_MODE 0x01C
50#define DA9062AA_GPIO_MODE0_4 0x01D
51#define DA9062AA_GPIO_OUT0_2 0x01E
52#define DA9062AA_GPIO_OUT3_4 0x01F
53#define DA9062AA_BUCK2_CONT 0x020
54#define DA9062AA_BUCK1_CONT 0x021
55#define DA9062AA_BUCK4_CONT 0x022
56#define DA9062AA_BUCK3_CONT 0x024
57#define DA9062AA_LDO1_CONT 0x026
58#define DA9062AA_LDO2_CONT 0x027
59#define DA9062AA_LDO3_CONT 0x028
60#define DA9062AA_LDO4_CONT 0x029
61#define DA9062AA_DVC_1 0x032
62#define DA9062AA_COUNT_S 0x040
63#define DA9062AA_COUNT_MI 0x041
64#define DA9062AA_COUNT_H 0x042
65#define DA9062AA_COUNT_D 0x043
66#define DA9062AA_COUNT_MO 0x044
67#define DA9062AA_COUNT_Y 0x045
68#define DA9062AA_ALARM_S 0x046
69#define DA9062AA_ALARM_MI 0x047
70#define DA9062AA_ALARM_H 0x048
71#define DA9062AA_ALARM_D 0x049
72#define DA9062AA_ALARM_MO 0x04A
73#define DA9062AA_ALARM_Y 0x04B
74#define DA9062AA_SECOND_A 0x04C
75#define DA9062AA_SECOND_B 0x04D
76#define DA9062AA_SECOND_C 0x04E
77#define DA9062AA_SECOND_D 0x04F
78#define DA9062AA_SEQ 0x081
79#define DA9062AA_SEQ_TIMER 0x082
80#define DA9062AA_ID_2_1 0x083
81#define DA9062AA_ID_4_3 0x084
82#define DA9062AA_ID_12_11 0x088
83#define DA9062AA_ID_14_13 0x089
84#define DA9062AA_ID_16_15 0x08A
85#define DA9062AA_ID_22_21 0x08D
86#define DA9062AA_ID_24_23 0x08E
87#define DA9062AA_ID_26_25 0x08F
88#define DA9062AA_ID_28_27 0x090
89#define DA9062AA_ID_30_29 0x091
90#define DA9062AA_ID_32_31 0x092
91#define DA9062AA_SEQ_A 0x095
92#define DA9062AA_SEQ_B 0x096
93#define DA9062AA_WAIT 0x097
94#define DA9062AA_EN_32K 0x098
95#define DA9062AA_RESET 0x099
96#define DA9062AA_BUCK_ILIM_A 0x09A
97#define DA9062AA_BUCK_ILIM_B 0x09B
98#define DA9062AA_BUCK_ILIM_C 0x09C
99#define DA9062AA_BUCK2_CFG 0x09D
100#define DA9062AA_BUCK1_CFG 0x09E
101#define DA9062AA_BUCK4_CFG 0x09F
102#define DA9062AA_BUCK3_CFG 0x0A0
103#define DA9062AA_VBUCK2_A 0x0A3
104#define DA9062AA_VBUCK1_A 0x0A4
105#define DA9062AA_VBUCK4_A 0x0A5
106#define DA9062AA_VBUCK3_A 0x0A7
107#define DA9062AA_VLDO1_A 0x0A9
108#define DA9062AA_VLDO2_A 0x0AA
109#define DA9062AA_VLDO3_A 0x0AB
110#define DA9062AA_VLDO4_A 0x0AC
111#define DA9062AA_VBUCK2_B 0x0B4
112#define DA9062AA_VBUCK1_B 0x0B5
113#define DA9062AA_VBUCK4_B 0x0B6
114#define DA9062AA_VBUCK3_B 0x0B8
115#define DA9062AA_VLDO1_B 0x0BA
116#define DA9062AA_VLDO2_B 0x0BB
117#define DA9062AA_VLDO3_B 0x0BC
118#define DA9062AA_VLDO4_B 0x0BD
119#define DA9062AA_BBAT_CONT 0x0C5
120#define DA9062AA_INTERFACE 0x105
121#define DA9062AA_CONFIG_A 0x106
122#define DA9062AA_CONFIG_B 0x107
123#define DA9062AA_CONFIG_C 0x108
124#define DA9062AA_CONFIG_D 0x109
125#define DA9062AA_CONFIG_E 0x10A
126#define DA9062AA_CONFIG_G 0x10C
127#define DA9062AA_CONFIG_H 0x10D
128#define DA9062AA_CONFIG_I 0x10E
129#define DA9062AA_CONFIG_J 0x10F
130#define DA9062AA_CONFIG_K 0x110
131#define DA9062AA_CONFIG_M 0x112
132#define DA9062AA_TRIM_CLDR 0x120
133#define DA9062AA_GP_ID_0 0x121
134#define DA9062AA_GP_ID_1 0x122
135#define DA9062AA_GP_ID_2 0x123
136#define DA9062AA_GP_ID_3 0x124
137#define DA9062AA_GP_ID_4 0x125
138#define DA9062AA_GP_ID_5 0x126
139#define DA9062AA_GP_ID_6 0x127
140#define DA9062AA_GP_ID_7 0x128
141#define DA9062AA_GP_ID_8 0x129
142#define DA9062AA_GP_ID_9 0x12A
143#define DA9062AA_GP_ID_10 0x12B
144#define DA9062AA_GP_ID_11 0x12C
145#define DA9062AA_GP_ID_12 0x12D
146#define DA9062AA_GP_ID_13 0x12E
147#define DA9062AA_GP_ID_14 0x12F
148#define DA9062AA_GP_ID_15 0x130
149#define DA9062AA_GP_ID_16 0x131
150#define DA9062AA_GP_ID_17 0x132
151#define DA9062AA_GP_ID_18 0x133
152#define DA9062AA_GP_ID_19 0x134
153#define DA9062AA_DEVICE_ID 0x181
154#define DA9062AA_VARIANT_ID 0x182
155#define DA9062AA_CUSTOMER_ID 0x183
156#define DA9062AA_CONFIG_ID 0x184
157
158/*
159 * Bit fields
160 */
161
162/* DA9062AA_PAGE_CON = 0x000 */
163#define DA9062AA_PAGE_SHIFT 0
164#define DA9062AA_PAGE_MASK 0x3f
165#define DA9062AA_WRITE_MODE_SHIFT 6
166#define DA9062AA_WRITE_MODE_MASK BIT(6)
167#define DA9062AA_REVERT_SHIFT 7
168#define DA9062AA_REVERT_MASK BIT(7)
169
170/* DA9062AA_STATUS_A = 0x001 */
171#define DA9062AA_NONKEY_SHIFT 0
172#define DA9062AA_NONKEY_MASK 0x01
173#define DA9062AA_DVC_BUSY_SHIFT 2
174#define DA9062AA_DVC_BUSY_MASK BIT(2)
175
176/* DA9062AA_STATUS_B = 0x002 */
177#define DA9062AA_GPI0_SHIFT 0
178#define DA9062AA_GPI0_MASK 0x01
179#define DA9062AA_GPI1_SHIFT 1
180#define DA9062AA_GPI1_MASK BIT(1)
181#define DA9062AA_GPI2_SHIFT 2
182#define DA9062AA_GPI2_MASK BIT(2)
183#define DA9062AA_GPI3_SHIFT 3
184#define DA9062AA_GPI3_MASK BIT(3)
185#define DA9062AA_GPI4_SHIFT 4
186#define DA9062AA_GPI4_MASK BIT(4)
187
188/* DA9062AA_STATUS_D = 0x004 */
189#define DA9062AA_LDO1_ILIM_SHIFT 0
190#define DA9062AA_LDO1_ILIM_MASK 0x01
191#define DA9062AA_LDO2_ILIM_SHIFT 1
192#define DA9062AA_LDO2_ILIM_MASK BIT(1)
193#define DA9062AA_LDO3_ILIM_SHIFT 2
194#define DA9062AA_LDO3_ILIM_MASK BIT(2)
195#define DA9062AA_LDO4_ILIM_SHIFT 3
196#define DA9062AA_LDO4_ILIM_MASK BIT(3)
197
198/* DA9062AA_FAULT_LOG = 0x005 */
199#define DA9062AA_TWD_ERROR_SHIFT 0
200#define DA9062AA_TWD_ERROR_MASK 0x01
201#define DA9062AA_POR_SHIFT 1
202#define DA9062AA_POR_MASK BIT(1)
203#define DA9062AA_VDD_FAULT_SHIFT 2
204#define DA9062AA_VDD_FAULT_MASK BIT(2)
205#define DA9062AA_VDD_START_SHIFT 3
206#define DA9062AA_VDD_START_MASK BIT(3)
207#define DA9062AA_TEMP_CRIT_SHIFT 4
208#define DA9062AA_TEMP_CRIT_MASK BIT(4)
209#define DA9062AA_KEY_RESET_SHIFT 5
210#define DA9062AA_KEY_RESET_MASK BIT(5)
211#define DA9062AA_NSHUTDOWN_SHIFT 6
212#define DA9062AA_NSHUTDOWN_MASK BIT(6)
213#define DA9062AA_WAIT_SHUT_SHIFT 7
214#define DA9062AA_WAIT_SHUT_MASK BIT(7)
215
216/* DA9062AA_EVENT_A = 0x006 */
217#define DA9062AA_E_NONKEY_SHIFT 0
218#define DA9062AA_E_NONKEY_MASK 0x01
219#define DA9062AA_E_ALARM_SHIFT 1
220#define DA9062AA_E_ALARM_MASK BIT(1)
221#define DA9062AA_E_TICK_SHIFT 2
222#define DA9062AA_E_TICK_MASK BIT(2)
223#define DA9062AA_E_WDG_WARN_SHIFT 3
224#define DA9062AA_E_WDG_WARN_MASK BIT(3)
225#define DA9062AA_E_SEQ_RDY_SHIFT 4
226#define DA9062AA_E_SEQ_RDY_MASK BIT(4)
227#define DA9062AA_EVENTS_B_SHIFT 5
228#define DA9062AA_EVENTS_B_MASK BIT(5)
229#define DA9062AA_EVENTS_C_SHIFT 6
230#define DA9062AA_EVENTS_C_MASK BIT(6)
231
232/* DA9062AA_EVENT_B = 0x007 */
233#define DA9062AA_E_TEMP_SHIFT 1
234#define DA9062AA_E_TEMP_MASK BIT(1)
235#define DA9062AA_E_LDO_LIM_SHIFT 3
236#define DA9062AA_E_LDO_LIM_MASK BIT(3)
237#define DA9062AA_E_DVC_RDY_SHIFT 5
238#define DA9062AA_E_DVC_RDY_MASK BIT(5)
239#define DA9062AA_E_VDD_WARN_SHIFT 7
240#define DA9062AA_E_VDD_WARN_MASK BIT(7)
241
242/* DA9062AA_EVENT_C = 0x008 */
243#define DA9062AA_E_GPI0_SHIFT 0
244#define DA9062AA_E_GPI0_MASK 0x01
245#define DA9062AA_E_GPI1_SHIFT 1
246#define DA9062AA_E_GPI1_MASK BIT(1)
247#define DA9062AA_E_GPI2_SHIFT 2
248#define DA9062AA_E_GPI2_MASK BIT(2)
249#define DA9062AA_E_GPI3_SHIFT 3
250#define DA9062AA_E_GPI3_MASK BIT(3)
251#define DA9062AA_E_GPI4_SHIFT 4
252#define DA9062AA_E_GPI4_MASK BIT(4)
253
254/* DA9062AA_IRQ_MASK_A = 0x00A */
255#define DA9062AA_M_NONKEY_SHIFT 0
256#define DA9062AA_M_NONKEY_MASK 0x01
257#define DA9062AA_M_ALARM_SHIFT 1
258#define DA9062AA_M_ALARM_MASK BIT(1)
259#define DA9062AA_M_TICK_SHIFT 2
260#define DA9062AA_M_TICK_MASK BIT(2)
261#define DA9062AA_M_WDG_WARN_SHIFT 3
262#define DA9062AA_M_WDG_WARN_MASK BIT(3)
263#define DA9062AA_M_SEQ_RDY_SHIFT 4
264#define DA9062AA_M_SEQ_RDY_MASK BIT(4)
265
266/* DA9062AA_IRQ_MASK_B = 0x00B */
267#define DA9062AA_M_TEMP_SHIFT 1
268#define DA9062AA_M_TEMP_MASK BIT(1)
269#define DA9062AA_M_LDO_LIM_SHIFT 3
270#define DA9062AA_M_LDO_LIM_MASK BIT(3)
271#define DA9062AA_M_DVC_RDY_SHIFT 5
272#define DA9062AA_M_DVC_RDY_MASK BIT(5)
273#define DA9062AA_M_VDD_WARN_SHIFT 7
274#define DA9062AA_M_VDD_WARN_MASK BIT(7)
275
276/* DA9062AA_IRQ_MASK_C = 0x00C */
277#define DA9062AA_M_GPI0_SHIFT 0
278#define DA9062AA_M_GPI0_MASK 0x01
279#define DA9062AA_M_GPI1_SHIFT 1
280#define DA9062AA_M_GPI1_MASK BIT(1)
281#define DA9062AA_M_GPI2_SHIFT 2
282#define DA9062AA_M_GPI2_MASK BIT(2)
283#define DA9062AA_M_GPI3_SHIFT 3
284#define DA9062AA_M_GPI3_MASK BIT(3)
285#define DA9062AA_M_GPI4_SHIFT 4
286#define DA9062AA_M_GPI4_MASK BIT(4)
287
288/* DA9062AA_CONTROL_A = 0x00E */
289#define DA9062AA_SYSTEM_EN_SHIFT 0
290#define DA9062AA_SYSTEM_EN_MASK 0x01
291#define DA9062AA_POWER_EN_SHIFT 1
292#define DA9062AA_POWER_EN_MASK BIT(1)
293#define DA9062AA_POWER1_EN_SHIFT 2
294#define DA9062AA_POWER1_EN_MASK BIT(2)
295#define DA9062AA_STANDBY_SHIFT 3
296#define DA9062AA_STANDBY_MASK BIT(3)
297#define DA9062AA_M_SYSTEM_EN_SHIFT 4
298#define DA9062AA_M_SYSTEM_EN_MASK BIT(4)
299#define DA9062AA_M_POWER_EN_SHIFT 5
300#define DA9062AA_M_POWER_EN_MASK BIT(5)
301#define DA9062AA_M_POWER1_EN_SHIFT 6
302#define DA9062AA_M_POWER1_EN_MASK BIT(6)
303
304/* DA9062AA_CONTROL_B = 0x00F */
305#define DA9062AA_WATCHDOG_PD_SHIFT 1
306#define DA9062AA_WATCHDOG_PD_MASK BIT(1)
307#define DA9062AA_FREEZE_EN_SHIFT 2
308#define DA9062AA_FREEZE_EN_MASK BIT(2)
309#define DA9062AA_NRES_MODE_SHIFT 3
310#define DA9062AA_NRES_MODE_MASK BIT(3)
311#define DA9062AA_NONKEY_LOCK_SHIFT 4
312#define DA9062AA_NONKEY_LOCK_MASK BIT(4)
313#define DA9062AA_NFREEZE_SHIFT 5
314#define DA9062AA_NFREEZE_MASK (0x03 << 5)
315#define DA9062AA_BUCK_SLOWSTART_SHIFT 7
316#define DA9062AA_BUCK_SLOWSTART_MASK BIT(7)
317
318/* DA9062AA_CONTROL_C = 0x010 */
319#define DA9062AA_DEBOUNCING_SHIFT 0
320#define DA9062AA_DEBOUNCING_MASK 0x07
321#define DA9062AA_AUTO_BOOT_SHIFT 3
322#define DA9062AA_AUTO_BOOT_MASK BIT(3)
323#define DA9062AA_OTPREAD_EN_SHIFT 4
324#define DA9062AA_OTPREAD_EN_MASK BIT(4)
325#define DA9062AA_SLEW_RATE_SHIFT 5
326#define DA9062AA_SLEW_RATE_MASK (0x03 << 5)
327#define DA9062AA_DEF_SUPPLY_SHIFT 7
328#define DA9062AA_DEF_SUPPLY_MASK BIT(7)
329
330/* DA9062AA_CONTROL_D = 0x011 */
331#define DA9062AA_TWDSCALE_SHIFT 0
332#define DA9062AA_TWDSCALE_MASK 0x07
333
334/* DA9062AA_CONTROL_E = 0x012 */
335#define DA9062AA_RTC_MODE_PD_SHIFT 0
336#define DA9062AA_RTC_MODE_PD_MASK 0x01
337#define DA9062AA_RTC_MODE_SD_SHIFT 1
338#define DA9062AA_RTC_MODE_SD_MASK BIT(1)
339#define DA9062AA_RTC_EN_SHIFT 2
340#define DA9062AA_RTC_EN_MASK BIT(2)
341#define DA9062AA_V_LOCK_SHIFT 7
342#define DA9062AA_V_LOCK_MASK BIT(7)
343
344/* DA9062AA_CONTROL_F = 0x013 */
345#define DA9062AA_WATCHDOG_SHIFT 0
346#define DA9062AA_WATCHDOG_MASK 0x01
347#define DA9062AA_SHUTDOWN_SHIFT 1
348#define DA9062AA_SHUTDOWN_MASK BIT(1)
349#define DA9062AA_WAKE_UP_SHIFT 2
350#define DA9062AA_WAKE_UP_MASK BIT(2)
351
352/* DA9062AA_PD_DIS = 0x014 */
353#define DA9062AA_GPI_DIS_SHIFT 0
354#define DA9062AA_GPI_DIS_MASK 0x01
355#define DA9062AA_PMIF_DIS_SHIFT 2
356#define DA9062AA_PMIF_DIS_MASK BIT(2)
357#define DA9062AA_CLDR_PAUSE_SHIFT 4
358#define DA9062AA_CLDR_PAUSE_MASK BIT(4)
359#define DA9062AA_BBAT_DIS_SHIFT 5
360#define DA9062AA_BBAT_DIS_MASK BIT(5)
361#define DA9062AA_OUT32K_PAUSE_SHIFT 6
362#define DA9062AA_OUT32K_PAUSE_MASK BIT(6)
363#define DA9062AA_PMCONT_DIS_SHIFT 7
364#define DA9062AA_PMCONT_DIS_MASK BIT(7)
365
366/* DA9062AA_GPIO_0_1 = 0x015 */
367#define DA9062AA_GPIO0_PIN_SHIFT 0
368#define DA9062AA_GPIO0_PIN_MASK 0x03
369#define DA9062AA_GPIO0_TYPE_SHIFT 2
370#define DA9062AA_GPIO0_TYPE_MASK BIT(2)
371#define DA9062AA_GPIO0_WEN_SHIFT 3
372#define DA9062AA_GPIO0_WEN_MASK BIT(3)
373#define DA9062AA_GPIO1_PIN_SHIFT 4
374#define DA9062AA_GPIO1_PIN_MASK (0x03 << 4)
375#define DA9062AA_GPIO1_TYPE_SHIFT 6
376#define DA9062AA_GPIO1_TYPE_MASK BIT(6)
377#define DA9062AA_GPIO1_WEN_SHIFT 7
378#define DA9062AA_GPIO1_WEN_MASK BIT(7)
379
380/* DA9062AA_GPIO_2_3 = 0x016 */
381#define DA9062AA_GPIO2_PIN_SHIFT 0
382#define DA9062AA_GPIO2_PIN_MASK 0x03
383#define DA9062AA_GPIO2_TYPE_SHIFT 2
384#define DA9062AA_GPIO2_TYPE_MASK BIT(2)
385#define DA9062AA_GPIO2_WEN_SHIFT 3
386#define DA9062AA_GPIO2_WEN_MASK BIT(3)
387#define DA9062AA_GPIO3_PIN_SHIFT 4
388#define DA9062AA_GPIO3_PIN_MASK (0x03 << 4)
389#define DA9062AA_GPIO3_TYPE_SHIFT 6
390#define DA9062AA_GPIO3_TYPE_MASK BIT(6)
391#define DA9062AA_GPIO3_WEN_SHIFT 7
392#define DA9062AA_GPIO3_WEN_MASK BIT(7)
393
394/* DA9062AA_GPIO_4 = 0x017 */
395#define DA9062AA_GPIO4_PIN_SHIFT 0
396#define DA9062AA_GPIO4_PIN_MASK 0x03
397#define DA9062AA_GPIO4_TYPE_SHIFT 2
398#define DA9062AA_GPIO4_TYPE_MASK BIT(2)
399#define DA9062AA_GPIO4_WEN_SHIFT 3
400#define DA9062AA_GPIO4_WEN_MASK BIT(3)
401
402/* DA9062AA_GPIO_WKUP_MODE = 0x01C */
403#define DA9062AA_GPIO0_WKUP_MODE_SHIFT 0
404#define DA9062AA_GPIO0_WKUP_MODE_MASK 0x01
405#define DA9062AA_GPIO1_WKUP_MODE_SHIFT 1
406#define DA9062AA_GPIO1_WKUP_MODE_MASK BIT(1)
407#define DA9062AA_GPIO2_WKUP_MODE_SHIFT 2
408#define DA9062AA_GPIO2_WKUP_MODE_MASK BIT(2)
409#define DA9062AA_GPIO3_WKUP_MODE_SHIFT 3
410#define DA9062AA_GPIO3_WKUP_MODE_MASK BIT(3)
411#define DA9062AA_GPIO4_WKUP_MODE_SHIFT 4
412#define DA9062AA_GPIO4_WKUP_MODE_MASK BIT(4)
413
414/* DA9062AA_GPIO_MODE0_4 = 0x01D */
415#define DA9062AA_GPIO0_MODE_SHIFT 0
416#define DA9062AA_GPIO0_MODE_MASK 0x01
417#define DA9062AA_GPIO1_MODE_SHIFT 1
418#define DA9062AA_GPIO1_MODE_MASK BIT(1)
419#define DA9062AA_GPIO2_MODE_SHIFT 2
420#define DA9062AA_GPIO2_MODE_MASK BIT(2)
421#define DA9062AA_GPIO3_MODE_SHIFT 3
422#define DA9062AA_GPIO3_MODE_MASK BIT(3)
423#define DA9062AA_GPIO4_MODE_SHIFT 4
424#define DA9062AA_GPIO4_MODE_MASK BIT(4)
425
426/* DA9062AA_GPIO_OUT0_2 = 0x01E */
427#define DA9062AA_GPIO0_OUT_SHIFT 0
428#define DA9062AA_GPIO0_OUT_MASK 0x07
429#define DA9062AA_GPIO1_OUT_SHIFT 3
430#define DA9062AA_GPIO1_OUT_MASK (0x07 << 3)
431#define DA9062AA_GPIO2_OUT_SHIFT 6
432#define DA9062AA_GPIO2_OUT_MASK (0x03 << 6)
433
434/* DA9062AA_GPIO_OUT3_4 = 0x01F */
435#define DA9062AA_GPIO3_OUT_SHIFT 0
436#define DA9062AA_GPIO3_OUT_MASK 0x07
437#define DA9062AA_GPIO4_OUT_SHIFT 3
438#define DA9062AA_GPIO4_OUT_MASK (0x03 << 3)
439
440/* DA9062AA_BUCK2_CONT = 0x020 */
441#define DA9062AA_BUCK2_EN_SHIFT 0
442#define DA9062AA_BUCK2_EN_MASK 0x01
443#define DA9062AA_BUCK2_GPI_SHIFT 1
444#define DA9062AA_BUCK2_GPI_MASK (0x03 << 1)
445#define DA9062AA_BUCK2_CONF_SHIFT 3
446#define DA9062AA_BUCK2_CONF_MASK BIT(3)
447#define DA9062AA_VBUCK2_GPI_SHIFT 5
448#define DA9062AA_VBUCK2_GPI_MASK (0x03 << 5)
449
450/* DA9062AA_BUCK1_CONT = 0x021 */
451#define DA9062AA_BUCK1_EN_SHIFT 0
452#define DA9062AA_BUCK1_EN_MASK 0x01
453#define DA9062AA_BUCK1_GPI_SHIFT 1
454#define DA9062AA_BUCK1_GPI_MASK (0x03 << 1)
455#define DA9062AA_BUCK1_CONF_SHIFT 3
456#define DA9062AA_BUCK1_CONF_MASK BIT(3)
457#define DA9062AA_VBUCK1_GPI_SHIFT 5
458#define DA9062AA_VBUCK1_GPI_MASK (0x03 << 5)
459
460/* DA9062AA_BUCK4_CONT = 0x022 */
461#define DA9062AA_BUCK4_EN_SHIFT 0
462#define DA9062AA_BUCK4_EN_MASK 0x01
463#define DA9062AA_BUCK4_GPI_SHIFT 1
464#define DA9062AA_BUCK4_GPI_MASK (0x03 << 1)
465#define DA9062AA_BUCK4_CONF_SHIFT 3
466#define DA9062AA_BUCK4_CONF_MASK BIT(3)
467#define DA9062AA_VBUCK4_GPI_SHIFT 5
468#define DA9062AA_VBUCK4_GPI_MASK (0x03 << 5)
469
470/* DA9062AA_BUCK3_CONT = 0x024 */
471#define DA9062AA_BUCK3_EN_SHIFT 0
472#define DA9062AA_BUCK3_EN_MASK 0x01
473#define DA9062AA_BUCK3_GPI_SHIFT 1
474#define DA9062AA_BUCK3_GPI_MASK (0x03 << 1)
475#define DA9062AA_BUCK3_CONF_SHIFT 3
476#define DA9062AA_BUCK3_CONF_MASK BIT(3)
477#define DA9062AA_VBUCK3_GPI_SHIFT 5
478#define DA9062AA_VBUCK3_GPI_MASK (0x03 << 5)
479
480/* DA9062AA_LDO1_CONT = 0x026 */
481#define DA9062AA_LDO1_EN_SHIFT 0
482#define DA9062AA_LDO1_EN_MASK 0x01
483#define DA9062AA_LDO1_GPI_SHIFT 1
484#define DA9062AA_LDO1_GPI_MASK (0x03 << 1)
485#define DA9062AA_LDO1_PD_DIS_SHIFT 3
486#define DA9062AA_LDO1_PD_DIS_MASK BIT(3)
487#define DA9062AA_VLDO1_GPI_SHIFT 5
488#define DA9062AA_VLDO1_GPI_MASK (0x03 << 5)
489#define DA9062AA_LDO1_CONF_SHIFT 7
490#define DA9062AA_LDO1_CONF_MASK BIT(7)
491
492/* DA9062AA_LDO2_CONT = 0x027 */
493#define DA9062AA_LDO2_EN_SHIFT 0
494#define DA9062AA_LDO2_EN_MASK 0x01
495#define DA9062AA_LDO2_GPI_SHIFT 1
496#define DA9062AA_LDO2_GPI_MASK (0x03 << 1)
497#define DA9062AA_LDO2_PD_DIS_SHIFT 3
498#define DA9062AA_LDO2_PD_DIS_MASK BIT(3)
499#define DA9062AA_VLDO2_GPI_SHIFT 5
500#define DA9062AA_VLDO2_GPI_MASK (0x03 << 5)
501#define DA9062AA_LDO2_CONF_SHIFT 7
502#define DA9062AA_LDO2_CONF_MASK BIT(7)
503
504/* DA9062AA_LDO3_CONT = 0x028 */
505#define DA9062AA_LDO3_EN_SHIFT 0
506#define DA9062AA_LDO3_EN_MASK 0x01
507#define DA9062AA_LDO3_GPI_SHIFT 1
508#define DA9062AA_LDO3_GPI_MASK (0x03 << 1)
509#define DA9062AA_LDO3_PD_DIS_SHIFT 3
510#define DA9062AA_LDO3_PD_DIS_MASK BIT(3)
511#define DA9062AA_VLDO3_GPI_SHIFT 5
512#define DA9062AA_VLDO3_GPI_MASK (0x03 << 5)
513#define DA9062AA_LDO3_CONF_SHIFT 7
514#define DA9062AA_LDO3_CONF_MASK BIT(7)
515
516/* DA9062AA_LDO4_CONT = 0x029 */
517#define DA9062AA_LDO4_EN_SHIFT 0
518#define DA9062AA_LDO4_EN_MASK 0x01
519#define DA9062AA_LDO4_GPI_SHIFT 1
520#define DA9062AA_LDO4_GPI_MASK (0x03 << 1)
521#define DA9062AA_LDO4_PD_DIS_SHIFT 3
522#define DA9062AA_LDO4_PD_DIS_MASK BIT(3)
523#define DA9062AA_VLDO4_GPI_SHIFT 5
524#define DA9062AA_VLDO4_GPI_MASK (0x03 << 5)
525#define DA9062AA_LDO4_CONF_SHIFT 7
526#define DA9062AA_LDO4_CONF_MASK BIT(7)
527
528/* DA9062AA_DVC_1 = 0x032 */
529#define DA9062AA_VBUCK1_SEL_SHIFT 0
530#define DA9062AA_VBUCK1_SEL_MASK 0x01
531#define DA9062AA_VBUCK2_SEL_SHIFT 1
532#define DA9062AA_VBUCK2_SEL_MASK BIT(1)
533#define DA9062AA_VBUCK4_SEL_SHIFT 2
534#define DA9062AA_VBUCK4_SEL_MASK BIT(2)
535#define DA9062AA_VBUCK3_SEL_SHIFT 3
536#define DA9062AA_VBUCK3_SEL_MASK BIT(3)
537#define DA9062AA_VLDO1_SEL_SHIFT 4
538#define DA9062AA_VLDO1_SEL_MASK BIT(4)
539#define DA9062AA_VLDO2_SEL_SHIFT 5
540#define DA9062AA_VLDO2_SEL_MASK BIT(5)
541#define DA9062AA_VLDO3_SEL_SHIFT 6
542#define DA9062AA_VLDO3_SEL_MASK BIT(6)
543#define DA9062AA_VLDO4_SEL_SHIFT 7
544#define DA9062AA_VLDO4_SEL_MASK BIT(7)
545
546/* DA9062AA_COUNT_S = 0x040 */
547#define DA9062AA_COUNT_SEC_SHIFT 0
548#define DA9062AA_COUNT_SEC_MASK 0x3f
549#define DA9062AA_RTC_READ_SHIFT 7
550#define DA9062AA_RTC_READ_MASK BIT(7)
551
552/* DA9062AA_COUNT_MI = 0x041 */
553#define DA9062AA_COUNT_MIN_SHIFT 0
554#define DA9062AA_COUNT_MIN_MASK 0x3f
555
556/* DA9062AA_COUNT_H = 0x042 */
557#define DA9062AA_COUNT_HOUR_SHIFT 0
558#define DA9062AA_COUNT_HOUR_MASK 0x1f
559
560/* DA9062AA_COUNT_D = 0x043 */
561#define DA9062AA_COUNT_DAY_SHIFT 0
562#define DA9062AA_COUNT_DAY_MASK 0x1f
563
564/* DA9062AA_COUNT_MO = 0x044 */
565#define DA9062AA_COUNT_MONTH_SHIFT 0
566#define DA9062AA_COUNT_MONTH_MASK 0x0f
567
568/* DA9062AA_COUNT_Y = 0x045 */
569#define DA9062AA_COUNT_YEAR_SHIFT 0
570#define DA9062AA_COUNT_YEAR_MASK 0x3f
571#define DA9062AA_MONITOR_SHIFT 6
572#define DA9062AA_MONITOR_MASK BIT(6)
573
574/* DA9062AA_ALARM_S = 0x046 */
575#define DA9062AA_ALARM_SEC_SHIFT 0
576#define DA9062AA_ALARM_SEC_MASK 0x3f
577#define DA9062AA_ALARM_STATUS_SHIFT 6
578#define DA9062AA_ALARM_STATUS_MASK (0x03 << 6)
579
580/* DA9062AA_ALARM_MI = 0x047 */
581#define DA9062AA_ALARM_MIN_SHIFT 0
582#define DA9062AA_ALARM_MIN_MASK 0x3f
583
584/* DA9062AA_ALARM_H = 0x048 */
585#define DA9062AA_ALARM_HOUR_SHIFT 0
586#define DA9062AA_ALARM_HOUR_MASK 0x1f
587
588/* DA9062AA_ALARM_D = 0x049 */
589#define DA9062AA_ALARM_DAY_SHIFT 0
590#define DA9062AA_ALARM_DAY_MASK 0x1f
591
592/* DA9062AA_ALARM_MO = 0x04A */
593#define DA9062AA_ALARM_MONTH_SHIFT 0
594#define DA9062AA_ALARM_MONTH_MASK 0x0f
595#define DA9062AA_TICK_TYPE_SHIFT 4
596#define DA9062AA_TICK_TYPE_MASK BIT(4)
597#define DA9062AA_TICK_WAKE_SHIFT 5
598#define DA9062AA_TICK_WAKE_MASK BIT(5)
599
600/* DA9062AA_ALARM_Y = 0x04B */
601#define DA9062AA_ALARM_YEAR_SHIFT 0
602#define DA9062AA_ALARM_YEAR_MASK 0x3f
603#define DA9062AA_ALARM_ON_SHIFT 6
604#define DA9062AA_ALARM_ON_MASK BIT(6)
605#define DA9062AA_TICK_ON_SHIFT 7
606#define DA9062AA_TICK_ON_MASK BIT(7)
607
608/* DA9062AA_SECOND_A = 0x04C */
609#define DA9062AA_SECONDS_A_SHIFT 0
610#define DA9062AA_SECONDS_A_MASK 0xff
611
612/* DA9062AA_SECOND_B = 0x04D */
613#define DA9062AA_SECONDS_B_SHIFT 0
614#define DA9062AA_SECONDS_B_MASK 0xff
615
616/* DA9062AA_SECOND_C = 0x04E */
617#define DA9062AA_SECONDS_C_SHIFT 0
618#define DA9062AA_SECONDS_C_MASK 0xff
619
620/* DA9062AA_SECOND_D = 0x04F */
621#define DA9062AA_SECONDS_D_SHIFT 0
622#define DA9062AA_SECONDS_D_MASK 0xff
623
624/* DA9062AA_SEQ = 0x081 */
625#define DA9062AA_SEQ_POINTER_SHIFT 0
626#define DA9062AA_SEQ_POINTER_MASK 0x0f
627#define DA9062AA_NXT_SEQ_START_SHIFT 4
628#define DA9062AA_NXT_SEQ_START_MASK (0x0f << 4)
629
630/* DA9062AA_SEQ_TIMER = 0x082 */
631#define DA9062AA_SEQ_TIME_SHIFT 0
632#define DA9062AA_SEQ_TIME_MASK 0x0f
633#define DA9062AA_SEQ_DUMMY_SHIFT 4
634#define DA9062AA_SEQ_DUMMY_MASK (0x0f << 4)
635
636/* DA9062AA_ID_2_1 = 0x083 */
637#define DA9062AA_LDO1_STEP_SHIFT 0
638#define DA9062AA_LDO1_STEP_MASK 0x0f
639#define DA9062AA_LDO2_STEP_SHIFT 4
640#define DA9062AA_LDO2_STEP_MASK (0x0f << 4)
641
642/* DA9062AA_ID_4_3 = 0x084 */
643#define DA9062AA_LDO3_STEP_SHIFT 0
644#define DA9062AA_LDO3_STEP_MASK 0x0f
645#define DA9062AA_LDO4_STEP_SHIFT 4
646#define DA9062AA_LDO4_STEP_MASK (0x0f << 4)
647
648/* DA9062AA_ID_12_11 = 0x088 */
649#define DA9062AA_PD_DIS_STEP_SHIFT 4
650#define DA9062AA_PD_DIS_STEP_MASK (0x0f << 4)
651
652/* DA9062AA_ID_14_13 = 0x089 */
653#define DA9062AA_BUCK1_STEP_SHIFT 0
654#define DA9062AA_BUCK1_STEP_MASK 0x0f
655#define DA9062AA_BUCK2_STEP_SHIFT 4
656#define DA9062AA_BUCK2_STEP_MASK (0x0f << 4)
657
658/* DA9062AA_ID_16_15 = 0x08A */
659#define DA9062AA_BUCK4_STEP_SHIFT 0
660#define DA9062AA_BUCK4_STEP_MASK 0x0f
661#define DA9062AA_BUCK3_STEP_SHIFT 4
662#define DA9062AA_BUCK3_STEP_MASK (0x0f << 4)
663
664/* DA9062AA_ID_22_21 = 0x08D */
665#define DA9062AA_GP_RISE1_STEP_SHIFT 0
666#define DA9062AA_GP_RISE1_STEP_MASK 0x0f
667#define DA9062AA_GP_FALL1_STEP_SHIFT 4
668#define DA9062AA_GP_FALL1_STEP_MASK (0x0f << 4)
669
670/* DA9062AA_ID_24_23 = 0x08E */
671#define DA9062AA_GP_RISE2_STEP_SHIFT 0
672#define DA9062AA_GP_RISE2_STEP_MASK 0x0f
673#define DA9062AA_GP_FALL2_STEP_SHIFT 4
674#define DA9062AA_GP_FALL2_STEP_MASK (0x0f << 4)
675
676/* DA9062AA_ID_26_25 = 0x08F */
677#define DA9062AA_GP_RISE3_STEP_SHIFT 0
678#define DA9062AA_GP_RISE3_STEP_MASK 0x0f
679#define DA9062AA_GP_FALL3_STEP_SHIFT 4
680#define DA9062AA_GP_FALL3_STEP_MASK (0x0f << 4)
681
682/* DA9062AA_ID_28_27 = 0x090 */
683#define DA9062AA_GP_RISE4_STEP_SHIFT 0
684#define DA9062AA_GP_RISE4_STEP_MASK 0x0f
685#define DA9062AA_GP_FALL4_STEP_SHIFT 4
686#define DA9062AA_GP_FALL4_STEP_MASK (0x0f << 4)
687
688/* DA9062AA_ID_30_29 = 0x091 */
689#define DA9062AA_GP_RISE5_STEP_SHIFT 0
690#define DA9062AA_GP_RISE5_STEP_MASK 0x0f
691#define DA9062AA_GP_FALL5_STEP_SHIFT 4
692#define DA9062AA_GP_FALL5_STEP_MASK (0x0f << 4)
693
694/* DA9062AA_ID_32_31 = 0x092 */
695#define DA9062AA_WAIT_STEP_SHIFT 0
696#define DA9062AA_WAIT_STEP_MASK 0x0f
697#define DA9062AA_EN32K_STEP_SHIFT 4
698#define DA9062AA_EN32K_STEP_MASK (0x0f << 4)
699
700/* DA9062AA_SEQ_A = 0x095 */
701#define DA9062AA_SYSTEM_END_SHIFT 0
702#define DA9062AA_SYSTEM_END_MASK 0x0f
703#define DA9062AA_POWER_END_SHIFT 4
704#define DA9062AA_POWER_END_MASK (0x0f << 4)
705
706/* DA9062AA_SEQ_B = 0x096 */
707#define DA9062AA_MAX_COUNT_SHIFT 0
708#define DA9062AA_MAX_COUNT_MASK 0x0f
709#define DA9062AA_PART_DOWN_SHIFT 4
710#define DA9062AA_PART_DOWN_MASK (0x0f << 4)
711
712/* DA9062AA_WAIT = 0x097 */
713#define DA9062AA_WAIT_TIME_SHIFT 0
714#define DA9062AA_WAIT_TIME_MASK 0x0f
715#define DA9062AA_WAIT_MODE_SHIFT 4
716#define DA9062AA_WAIT_MODE_MASK BIT(4)
717#define DA9062AA_TIME_OUT_SHIFT 5
718#define DA9062AA_TIME_OUT_MASK BIT(5)
719#define DA9062AA_WAIT_DIR_SHIFT 6
720#define DA9062AA_WAIT_DIR_MASK (0x03 << 6)
721
722/* DA9062AA_EN_32K = 0x098 */
723#define DA9062AA_STABILISATION_TIME_SHIFT 0
724#define DA9062AA_STABILISATION_TIME_MASK 0x07
725#define DA9062AA_CRYSTAL_SHIFT 3
726#define DA9062AA_CRYSTAL_MASK BIT(3)
727#define DA9062AA_DELAY_MODE_SHIFT 4
728#define DA9062AA_DELAY_MODE_MASK BIT(4)
729#define DA9062AA_OUT_CLOCK_SHIFT 5
730#define DA9062AA_OUT_CLOCK_MASK BIT(5)
731#define DA9062AA_RTC_CLOCK_SHIFT 6
732#define DA9062AA_RTC_CLOCK_MASK BIT(6)
733#define DA9062AA_EN_32KOUT_SHIFT 7
734#define DA9062AA_EN_32KOUT_MASK BIT(7)
735
736/* DA9062AA_RESET = 0x099 */
737#define DA9062AA_RESET_TIMER_SHIFT 0
738#define DA9062AA_RESET_TIMER_MASK 0x3f
739#define DA9062AA_RESET_EVENT_SHIFT 6
740#define DA9062AA_RESET_EVENT_MASK (0x03 << 6)
741
742/* DA9062AA_BUCK_ILIM_A = 0x09A */
743#define DA9062AA_BUCK3_ILIM_SHIFT 0
744#define DA9062AA_BUCK3_ILIM_MASK 0x0f
745
746/* DA9062AA_BUCK_ILIM_B = 0x09B */
747#define DA9062AA_BUCK4_ILIM_SHIFT 0
748#define DA9062AA_BUCK4_ILIM_MASK 0x0f
749
750/* DA9062AA_BUCK_ILIM_C = 0x09C */
751#define DA9062AA_BUCK1_ILIM_SHIFT 0
752#define DA9062AA_BUCK1_ILIM_MASK 0x0f
753#define DA9062AA_BUCK2_ILIM_SHIFT 4
754#define DA9062AA_BUCK2_ILIM_MASK (0x0f << 4)
755
756/* DA9062AA_BUCK2_CFG = 0x09D */
757#define DA9062AA_BUCK2_PD_DIS_SHIFT 5
758#define DA9062AA_BUCK2_PD_DIS_MASK BIT(5)
759#define DA9062AA_BUCK2_MODE_SHIFT 6
760#define DA9062AA_BUCK2_MODE_MASK (0x03 << 6)
761
762/* DA9062AA_BUCK1_CFG = 0x09E */
763#define DA9062AA_BUCK1_PD_DIS_SHIFT 5
764#define DA9062AA_BUCK1_PD_DIS_MASK BIT(5)
765#define DA9062AA_BUCK1_MODE_SHIFT 6
766#define DA9062AA_BUCK1_MODE_MASK (0x03 << 6)
767
768/* DA9062AA_BUCK4_CFG = 0x09F */
769#define DA9062AA_BUCK4_VTTR_EN_SHIFT 3
770#define DA9062AA_BUCK4_VTTR_EN_MASK BIT(3)
771#define DA9062AA_BUCK4_VTT_EN_SHIFT 4
772#define DA9062AA_BUCK4_VTT_EN_MASK BIT(4)
773#define DA9062AA_BUCK4_PD_DIS_SHIFT 5
774#define DA9062AA_BUCK4_PD_DIS_MASK BIT(5)
775#define DA9062AA_BUCK4_MODE_SHIFT 6
776#define DA9062AA_BUCK4_MODE_MASK (0x03 << 6)
777
778/* DA9062AA_BUCK3_CFG = 0x0A0 */
779#define DA9062AA_BUCK3_PD_DIS_SHIFT 5
780#define DA9062AA_BUCK3_PD_DIS_MASK BIT(5)
781#define DA9062AA_BUCK3_MODE_SHIFT 6
782#define DA9062AA_BUCK3_MODE_MASK (0x03 << 6)
783
784/* DA9062AA_VBUCK2_A = 0x0A3 */
785#define DA9062AA_VBUCK2_A_SHIFT 0
786#define DA9062AA_VBUCK2_A_MASK 0x7f
787#define DA9062AA_BUCK2_SL_A_SHIFT 7
788#define DA9062AA_BUCK2_SL_A_MASK BIT(7)
789
790/* DA9062AA_VBUCK1_A = 0x0A4 */
791#define DA9062AA_VBUCK1_A_SHIFT 0
792#define DA9062AA_VBUCK1_A_MASK 0x7f
793#define DA9062AA_BUCK1_SL_A_SHIFT 7
794#define DA9062AA_BUCK1_SL_A_MASK BIT(7)
795
796/* DA9062AA_VBUCK4_A = 0x0A5 */
797#define DA9062AA_VBUCK4_A_SHIFT 0
798#define DA9062AA_VBUCK4_A_MASK 0x7f
799#define DA9062AA_BUCK4_SL_A_SHIFT 7
800#define DA9062AA_BUCK4_SL_A_MASK BIT(7)
801
802/* DA9062AA_VBUCK3_A = 0x0A7 */
803#define DA9062AA_VBUCK3_A_SHIFT 0
804#define DA9062AA_VBUCK3_A_MASK 0x7f
805#define DA9062AA_BUCK3_SL_A_SHIFT 7
806#define DA9062AA_BUCK3_SL_A_MASK BIT(7)
807
808/* DA9062AA_VLDO1_A = 0x0A9 */
809#define DA9062AA_VLDO1_A_SHIFT 0
810#define DA9062AA_VLDO1_A_MASK 0x3f
811#define DA9062AA_LDO1_SL_A_SHIFT 7
812#define DA9062AA_LDO1_SL_A_MASK BIT(7)
813
814/* DA9062AA_VLDO2_A = 0x0AA */
815#define DA9062AA_VLDO2_A_SHIFT 0
816#define DA9062AA_VLDO2_A_MASK 0x3f
817#define DA9062AA_LDO2_SL_A_SHIFT 7
818#define DA9062AA_LDO2_SL_A_MASK BIT(7)
819
820/* DA9062AA_VLDO3_A = 0x0AB */
821#define DA9062AA_VLDO3_A_SHIFT 0
822#define DA9062AA_VLDO3_A_MASK 0x3f
823#define DA9062AA_LDO3_SL_A_SHIFT 7
824#define DA9062AA_LDO3_SL_A_MASK BIT(7)
825
826/* DA9062AA_VLDO4_A = 0x0AC */
827#define DA9062AA_VLDO4_A_SHIFT 0
828#define DA9062AA_VLDO4_A_MASK 0x3f
829#define DA9062AA_LDO4_SL_A_SHIFT 7
830#define DA9062AA_LDO4_SL_A_MASK BIT(7)
831
832/* DA9062AA_VBUCK2_B = 0x0B4 */
833#define DA9062AA_VBUCK2_B_SHIFT 0
834#define DA9062AA_VBUCK2_B_MASK 0x7f
835#define DA9062AA_BUCK2_SL_B_SHIFT 7
836#define DA9062AA_BUCK2_SL_B_MASK BIT(7)
837
838/* DA9062AA_VBUCK1_B = 0x0B5 */
839#define DA9062AA_VBUCK1_B_SHIFT 0
840#define DA9062AA_VBUCK1_B_MASK 0x7f
841#define DA9062AA_BUCK1_SL_B_SHIFT 7
842#define DA9062AA_BUCK1_SL_B_MASK BIT(7)
843
844/* DA9062AA_VBUCK4_B = 0x0B6 */
845#define DA9062AA_VBUCK4_B_SHIFT 0
846#define DA9062AA_VBUCK4_B_MASK 0x7f
847#define DA9062AA_BUCK4_SL_B_SHIFT 7
848#define DA9062AA_BUCK4_SL_B_MASK BIT(7)
849
850/* DA9062AA_VBUCK3_B = 0x0B8 */
851#define DA9062AA_VBUCK3_B_SHIFT 0
852#define DA9062AA_VBUCK3_B_MASK 0x7f
853#define DA9062AA_BUCK3_SL_B_SHIFT 7
854#define DA9062AA_BUCK3_SL_B_MASK BIT(7)
855
856/* DA9062AA_VLDO1_B = 0x0BA */
857#define DA9062AA_VLDO1_B_SHIFT 0
858#define DA9062AA_VLDO1_B_MASK 0x3f
859#define DA9062AA_LDO1_SL_B_SHIFT 7
860#define DA9062AA_LDO1_SL_B_MASK BIT(7)
861
862/* DA9062AA_VLDO2_B = 0x0BB */
863#define DA9062AA_VLDO2_B_SHIFT 0
864#define DA9062AA_VLDO2_B_MASK 0x3f
865#define DA9062AA_LDO2_SL_B_SHIFT 7
866#define DA9062AA_LDO2_SL_B_MASK BIT(7)
867
868/* DA9062AA_VLDO3_B = 0x0BC */
869#define DA9062AA_VLDO3_B_SHIFT 0
870#define DA9062AA_VLDO3_B_MASK 0x3f
871#define DA9062AA_LDO3_SL_B_SHIFT 7
872#define DA9062AA_LDO3_SL_B_MASK BIT(7)
873
874/* DA9062AA_VLDO4_B = 0x0BD */
875#define DA9062AA_VLDO4_B_SHIFT 0
876#define DA9062AA_VLDO4_B_MASK 0x3f
877#define DA9062AA_LDO4_SL_B_SHIFT 7
878#define DA9062AA_LDO4_SL_B_MASK BIT(7)
879
880/* DA9062AA_BBAT_CONT = 0x0C5 */
881#define DA9062AA_BCHG_VSET_SHIFT 0
882#define DA9062AA_BCHG_VSET_MASK 0x0f
883#define DA9062AA_BCHG_ISET_SHIFT 4
884#define DA9062AA_BCHG_ISET_MASK (0x0f << 4)
885
886/* DA9062AA_INTERFACE = 0x105 */
887#define DA9062AA_IF_BASE_ADDR_SHIFT 4
888#define DA9062AA_IF_BASE_ADDR_MASK (0x0f << 4)
889
890/* DA9062AA_CONFIG_A = 0x106 */
891#define DA9062AA_PM_I_V_SHIFT 0
892#define DA9062AA_PM_I_V_MASK 0x01
893#define DA9062AA_PM_O_TYPE_SHIFT 2
894#define DA9062AA_PM_O_TYPE_MASK BIT(2)
895#define DA9062AA_IRQ_TYPE_SHIFT 3
896#define DA9062AA_IRQ_TYPE_MASK BIT(3)
897#define DA9062AA_PM_IF_V_SHIFT 4
898#define DA9062AA_PM_IF_V_MASK BIT(4)
899#define DA9062AA_PM_IF_FMP_SHIFT 5
900#define DA9062AA_PM_IF_FMP_MASK BIT(5)
901#define DA9062AA_PM_IF_HSM_SHIFT 6
902#define DA9062AA_PM_IF_HSM_MASK BIT(6)
903
904/* DA9062AA_CONFIG_B = 0x107 */
905#define DA9062AA_VDD_FAULT_ADJ_SHIFT 0
906#define DA9062AA_VDD_FAULT_ADJ_MASK 0x0f
907#define DA9062AA_VDD_HYST_ADJ_SHIFT 4
908#define DA9062AA_VDD_HYST_ADJ_MASK (0x07 << 4)
909
910/* DA9062AA_CONFIG_C = 0x108 */
911#define DA9062AA_BUCK_ACTV_DISCHRG_SHIFT 2
912#define DA9062AA_BUCK_ACTV_DISCHRG_MASK BIT(2)
913#define DA9062AA_BUCK1_CLK_INV_SHIFT 3
914#define DA9062AA_BUCK1_CLK_INV_MASK BIT(3)
915#define DA9062AA_BUCK4_CLK_INV_SHIFT 4
916#define DA9062AA_BUCK4_CLK_INV_MASK BIT(4)
917#define DA9062AA_BUCK3_CLK_INV_SHIFT 6
918#define DA9062AA_BUCK3_CLK_INV_MASK BIT(6)
919
920/* DA9062AA_CONFIG_D = 0x109 */
921#define DA9062AA_GPI_V_SHIFT 0
922#define DA9062AA_GPI_V_MASK 0x01
923#define DA9062AA_NIRQ_MODE_SHIFT 1
924#define DA9062AA_NIRQ_MODE_MASK BIT(1)
925#define DA9062AA_SYSTEM_EN_RD_SHIFT 2
926#define DA9062AA_SYSTEM_EN_RD_MASK BIT(2)
927#define DA9062AA_FORCE_RESET_SHIFT 5
928#define DA9062AA_FORCE_RESET_MASK BIT(5)
929
930/* DA9062AA_CONFIG_E = 0x10A */
931#define DA9062AA_BUCK1_AUTO_SHIFT 0
932#define DA9062AA_BUCK1_AUTO_MASK 0x01
933#define DA9062AA_BUCK2_AUTO_SHIFT 1
934#define DA9062AA_BUCK2_AUTO_MASK BIT(1)
935#define DA9062AA_BUCK4_AUTO_SHIFT 2
936#define DA9062AA_BUCK4_AUTO_MASK BIT(2)
937#define DA9062AA_BUCK3_AUTO_SHIFT 4
938#define DA9062AA_BUCK3_AUTO_MASK BIT(4)
939
940/* DA9062AA_CONFIG_G = 0x10C */
941#define DA9062AA_LDO1_AUTO_SHIFT 0
942#define DA9062AA_LDO1_AUTO_MASK 0x01
943#define DA9062AA_LDO2_AUTO_SHIFT 1
944#define DA9062AA_LDO2_AUTO_MASK BIT(1)
945#define DA9062AA_LDO3_AUTO_SHIFT 2
946#define DA9062AA_LDO3_AUTO_MASK BIT(2)
947#define DA9062AA_LDO4_AUTO_SHIFT 3
948#define DA9062AA_LDO4_AUTO_MASK BIT(3)
949
950/* DA9062AA_CONFIG_H = 0x10D */
951#define DA9062AA_BUCK1_2_MERGE_SHIFT 3
952#define DA9062AA_BUCK1_2_MERGE_MASK BIT(3)
953#define DA9062AA_BUCK2_OD_SHIFT 5
954#define DA9062AA_BUCK2_OD_MASK BIT(5)
955#define DA9062AA_BUCK1_OD_SHIFT 6
956#define DA9062AA_BUCK1_OD_MASK BIT(6)
957
958/* DA9062AA_CONFIG_I = 0x10E */
959#define DA9062AA_NONKEY_PIN_SHIFT 0
960#define DA9062AA_NONKEY_PIN_MASK 0x03
961#define DA9062AA_nONKEY_SD_SHIFT 2
962#define DA9062AA_nONKEY_SD_MASK BIT(2)
963#define DA9062AA_WATCHDOG_SD_SHIFT 3
964#define DA9062AA_WATCHDOG_SD_MASK BIT(3)
965#define DA9062AA_KEY_SD_MODE_SHIFT 4
966#define DA9062AA_KEY_SD_MODE_MASK BIT(4)
967#define DA9062AA_HOST_SD_MODE_SHIFT 5
968#define DA9062AA_HOST_SD_MODE_MASK BIT(5)
969#define DA9062AA_INT_SD_MODE_SHIFT 6
970#define DA9062AA_INT_SD_MODE_MASK BIT(6)
971#define DA9062AA_LDO_SD_SHIFT 7
972#define DA9062AA_LDO_SD_MASK BIT(7)
973
974/* DA9062AA_CONFIG_J = 0x10F */
975#define DA9062AA_KEY_DELAY_SHIFT 0
976#define DA9062AA_KEY_DELAY_MASK 0x03
977#define DA9062AA_SHUT_DELAY_SHIFT 2
978#define DA9062AA_SHUT_DELAY_MASK (0x03 << 2)
979#define DA9062AA_RESET_DURATION_SHIFT 4
980#define DA9062AA_RESET_DURATION_MASK (0x03 << 4)
981#define DA9062AA_TWOWIRE_TO_SHIFT 6
982#define DA9062AA_TWOWIRE_TO_MASK BIT(6)
983#define DA9062AA_IF_RESET_SHIFT 7
984#define DA9062AA_IF_RESET_MASK BIT(7)
985
986/* DA9062AA_CONFIG_K = 0x110 */
987#define DA9062AA_GPIO0_PUPD_SHIFT 0
988#define DA9062AA_GPIO0_PUPD_MASK 0x01
989#define DA9062AA_GPIO1_PUPD_SHIFT 1
990#define DA9062AA_GPIO1_PUPD_MASK BIT(1)
991#define DA9062AA_GPIO2_PUPD_SHIFT 2
992#define DA9062AA_GPIO2_PUPD_MASK BIT(2)
993#define DA9062AA_GPIO3_PUPD_SHIFT 3
994#define DA9062AA_GPIO3_PUPD_MASK BIT(3)
995#define DA9062AA_GPIO4_PUPD_SHIFT 4
996#define DA9062AA_GPIO4_PUPD_MASK BIT(4)
997
998/* DA9062AA_CONFIG_M = 0x112 */
999#define DA9062AA_NSHUTDOWN_PU_SHIFT 1
1000#define DA9062AA_NSHUTDOWN_PU_MASK BIT(1)
1001#define DA9062AA_WDG_MODE_SHIFT 3
1002#define DA9062AA_WDG_MODE_MASK BIT(3)
1003#define DA9062AA_OSC_FRQ_SHIFT 4
1004#define DA9062AA_OSC_FRQ_MASK (0x0f << 4)
1005
1006/* DA9062AA_TRIM_CLDR = 0x120 */
1007#define DA9062AA_TRIM_CLDR_SHIFT 0
1008#define DA9062AA_TRIM_CLDR_MASK 0xff
1009
1010/* DA9062AA_GP_ID_0 = 0x121 */
1011#define DA9062AA_GP_0_SHIFT 0
1012#define DA9062AA_GP_0_MASK 0xff
1013
1014/* DA9062AA_GP_ID_1 = 0x122 */
1015#define DA9062AA_GP_1_SHIFT 0
1016#define DA9062AA_GP_1_MASK 0xff
1017
1018/* DA9062AA_GP_ID_2 = 0x123 */
1019#define DA9062AA_GP_2_SHIFT 0
1020#define DA9062AA_GP_2_MASK 0xff
1021
1022/* DA9062AA_GP_ID_3 = 0x124 */
1023#define DA9062AA_GP_3_SHIFT 0
1024#define DA9062AA_GP_3_MASK 0xff
1025
1026/* DA9062AA_GP_ID_4 = 0x125 */
1027#define DA9062AA_GP_4_SHIFT 0
1028#define DA9062AA_GP_4_MASK 0xff
1029
1030/* DA9062AA_GP_ID_5 = 0x126 */
1031#define DA9062AA_GP_5_SHIFT 0
1032#define DA9062AA_GP_5_MASK 0xff
1033
1034/* DA9062AA_GP_ID_6 = 0x127 */
1035#define DA9062AA_GP_6_SHIFT 0
1036#define DA9062AA_GP_6_MASK 0xff
1037
1038/* DA9062AA_GP_ID_7 = 0x128 */
1039#define DA9062AA_GP_7_SHIFT 0
1040#define DA9062AA_GP_7_MASK 0xff
1041
1042/* DA9062AA_GP_ID_8 = 0x129 */
1043#define DA9062AA_GP_8_SHIFT 0
1044#define DA9062AA_GP_8_MASK 0xff
1045
1046/* DA9062AA_GP_ID_9 = 0x12A */
1047#define DA9062AA_GP_9_SHIFT 0
1048#define DA9062AA_GP_9_MASK 0xff
1049
1050/* DA9062AA_GP_ID_10 = 0x12B */
1051#define DA9062AA_GP_10_SHIFT 0
1052#define DA9062AA_GP_10_MASK 0xff
1053
1054/* DA9062AA_GP_ID_11 = 0x12C */
1055#define DA9062AA_GP_11_SHIFT 0
1056#define DA9062AA_GP_11_MASK 0xff
1057
1058/* DA9062AA_GP_ID_12 = 0x12D */
1059#define DA9062AA_GP_12_SHIFT 0
1060#define DA9062AA_GP_12_MASK 0xff
1061
1062/* DA9062AA_GP_ID_13 = 0x12E */
1063#define DA9062AA_GP_13_SHIFT 0
1064#define DA9062AA_GP_13_MASK 0xff
1065
1066/* DA9062AA_GP_ID_14 = 0x12F */
1067#define DA9062AA_GP_14_SHIFT 0
1068#define DA9062AA_GP_14_MASK 0xff
1069
1070/* DA9062AA_GP_ID_15 = 0x130 */
1071#define DA9062AA_GP_15_SHIFT 0
1072#define DA9062AA_GP_15_MASK 0xff
1073
1074/* DA9062AA_GP_ID_16 = 0x131 */
1075#define DA9062AA_GP_16_SHIFT 0
1076#define DA9062AA_GP_16_MASK 0xff
1077
1078/* DA9062AA_GP_ID_17 = 0x132 */
1079#define DA9062AA_GP_17_SHIFT 0
1080#define DA9062AA_GP_17_MASK 0xff
1081
1082/* DA9062AA_GP_ID_18 = 0x133 */
1083#define DA9062AA_GP_18_SHIFT 0
1084#define DA9062AA_GP_18_MASK 0xff
1085
1086/* DA9062AA_GP_ID_19 = 0x134 */
1087#define DA9062AA_GP_19_SHIFT 0
1088#define DA9062AA_GP_19_MASK 0xff
1089
1090/* DA9062AA_DEVICE_ID = 0x181 */
1091#define DA9062AA_DEV_ID_SHIFT 0
1092#define DA9062AA_DEV_ID_MASK 0xff
1093
1094/* DA9062AA_VARIANT_ID = 0x182 */
1095#define DA9062AA_VRC_SHIFT 0
1096#define DA9062AA_VRC_MASK 0x0f
1097#define DA9062AA_MRC_SHIFT 4
1098#define DA9062AA_MRC_MASK (0x0f << 4)
1099
1100/* DA9062AA_CUSTOMER_ID = 0x183 */
1101#define DA9062AA_CUST_ID_SHIFT 0
1102#define DA9062AA_CUST_ID_MASK 0xff
1103
1104/* DA9062AA_CONFIG_ID = 0x184 */
1105#define DA9062AA_CONFIG_REV_SHIFT 0
1106#define DA9062AA_CONFIG_REV_MASK 0xff
1107
1108#endif /* __DA9062_H__ */
diff --git a/include/linux/mfd/da9063/core.h b/include/linux/mfd/da9063/core.h
index 79f4d822ba13..621af82123c6 100644
--- a/include/linux/mfd/da9063/core.h
+++ b/include/linux/mfd/da9063/core.h
@@ -51,6 +51,7 @@ enum da9063_irqs {
51 DA9063_IRQ_COMP_1V2, 51 DA9063_IRQ_COMP_1V2,
52 DA9063_IRQ_LDO_LIM, 52 DA9063_IRQ_LDO_LIM,
53 DA9063_IRQ_REG_UVOV, 53 DA9063_IRQ_REG_UVOV,
54 DA9063_IRQ_DVC_RDY,
54 DA9063_IRQ_VDD_MON, 55 DA9063_IRQ_VDD_MON,
55 DA9063_IRQ_WARN, 56 DA9063_IRQ_WARN,
56 DA9063_IRQ_GPI0, 57 DA9063_IRQ_GPI0,
diff --git a/include/linux/mfd/lpc_ich.h b/include/linux/mfd/lpc_ich.h
index 8feac782fa83..2b300b44f994 100644
--- a/include/linux/mfd/lpc_ich.h
+++ b/include/linux/mfd/lpc_ich.h
@@ -20,12 +20,6 @@
20#ifndef LPC_ICH_H 20#ifndef LPC_ICH_H
21#define LPC_ICH_H 21#define LPC_ICH_H
22 22
23/* Watchdog resources */
24#define ICH_RES_IO_TCO 0
25#define ICH_RES_IO_SMI 1
26#define ICH_RES_MEM_OFF 2
27#define ICH_RES_MEM_GCS_PMC 0
28
29/* GPIO resources */ 23/* GPIO resources */
30#define ICH_RES_GPIO 0 24#define ICH_RES_GPIO 0
31#define ICH_RES_GPE0 1 25#define ICH_RES_GPE0 1
diff --git a/include/linux/mfd/mt6397/core.h b/include/linux/mfd/mt6397/core.h
index cf5265b0d1c1..45b8e8aa1fbf 100644
--- a/include/linux/mfd/mt6397/core.h
+++ b/include/linux/mfd/mt6397/core.h
@@ -57,6 +57,7 @@ struct mt6397_chip {
57 int irq; 57 int irq;
58 struct irq_domain *irq_domain; 58 struct irq_domain *irq_domain;
59 struct mutex irqlock; 59 struct mutex irqlock;
60 u16 wake_mask[2];
60 u16 irq_masks_cur[2]; 61 u16 irq_masks_cur[2];
61 u16 irq_masks_cache[2]; 62 u16 irq_masks_cache[2];
62}; 63};
diff --git a/include/linux/platform_data/itco_wdt.h b/include/linux/platform_data/itco_wdt.h
new file mode 100644
index 000000000000..f16542c77ff7
--- /dev/null
+++ b/include/linux/platform_data/itco_wdt.h
@@ -0,0 +1,19 @@
1/*
2 * Platform data for the Intel TCO Watchdog
3 */
4
5#ifndef _ITCO_WDT_H_
6#define _ITCO_WDT_H_
7
8/* Watchdog resources */
9#define ICH_RES_IO_TCO 0
10#define ICH_RES_IO_SMI 1
11#define ICH_RES_MEM_OFF 2
12#define ICH_RES_MEM_GCS_PMC 0
13
14struct itco_wdt_platform_data {
15 char name[32];
16 unsigned int version;
17};
18
19#endif /* _ITCO_WDT_H_ */