Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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
...

+4816 -581
+4
Documentation/devicetree/bindings/mfd/atmel-hlcdc.txt
··· 2 2 3 3 Required properties: 4 4 - compatible: value should be one of the following: 5 + "atmel,at91sam9n12-hlcdc" 6 + "atmel,at91sam9x5-hlcdc" 7 + "atmel,sama5d2-hlcdc" 5 8 "atmel,sama5d3-hlcdc" 9 + "atmel,sama5d4-hlcdc" 6 10 - reg: base address and size of the HLCDC device registers. 7 11 - clock-names: the name of the 3 clocks requested by the HLCDC device. 8 12 Should contain "periph_clk", "sys_clk" and "slow_clk".
+3 -1
Documentation/devicetree/bindings/mfd/axp20x.txt
··· 1 1 AXP family PMIC device tree bindings 2 2 3 3 The axp20x family current members : 4 + axp152 (X-Powers) 4 5 axp202 (X-Powers) 5 6 axp209 (X-Powers) 6 7 axp221 (X-Powers) 7 8 8 9 Required 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 12 - reg: The I2C slave address for the AXP chip 11 13 - interrupt-parent: The parent interrupt controller 12 14 - interrupts: SoC NMI / GPIO interrupt connected to the PMIC's IRQ pin
+88
Documentation/devicetree/bindings/mfd/da9062.txt
··· 1 + * Dialog DA9062 Power Management Integrated Circuit (PMIC) 2 + 3 + DA9062 consists of a large and varied group of sub-devices: 4 + 5 + Device Supply Names Description 6 + ------ ------------ ----------- 7 + da9062-regulator : : LDOs & BUCKs 8 + da9062-rtc : : Real-Time Clock 9 + da9062-watchdog : : Watchdog Timer 10 + 11 + ====== 12 + 13 + Required 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 + 23 + See Documentation/devicetree/bindings/interrupt-controller/interrupts.txt for 24 + further information on IRQ bindings. 25 + 26 + Sub-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 + 54 + Example: 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 +
+5 -60
Documentation/devicetree/bindings/mfd/max77686.txt
··· 7 7 client while probing.This document describes the binding for mfd device and 8 8 PMIC submodule. 9 9 10 - Binding for the built-in 32k clock generator block is defined separately 11 - in bindings/clk/maxim,max77686.txt file. 10 + Bindings for the built-in 32k clock generator block and 11 + regulators are defined in ../clk/maxim,max77686.txt and 12 + ../regulator/max77686.txt respectively. 12 13 13 14 Required properties: 14 15 - compatible : Must be "maxim,max77686"; ··· 17 16 - interrupts : This i2c device has an IRQ line connected to the main SoC. 18 17 - interrupt-parent : The parent interrupt controller. 19 18 20 - Optional node: 21 - - voltage-regulators : The regulators of max77686 have to be instantiated 22 - under subnode named "voltage-regulators" using the following format. 23 - 24 - regulator_name { 25 - regulator-compatible = LDOn/BUCKn 26 - standard regulator constraints.... 27 - }; 28 - refer Documentation/devicetree/bindings/regulator/regulator.txt 29 - 30 - The regulator-compatible property of regulator should initialized with string 31 - to get matched with their hardware counterparts as follow: 32 - 33 - -LDOn : for LDOs, where n can lie in range 1 to 26. 34 - example: LDO1, LDO2, LDO26. 35 - -BUCKn : for BUCKs, where n can lie in range 1 to 9. 36 - example: BUCK1, BUCK5, BUCK9. 37 - 38 - Regulators which can be turned off during system suspend: 39 - -LDOn : 2, 6-8, 10-12, 14-16, 40 - -BUCKn : 1-4. 41 - Use standard regulator bindings for it ('regulator-off-in-suspend'). 42 - 43 - LDO20, LDO21, LDO22, BUCK8 and BUCK9 can be configured to GPIO enable 44 - control. To turn this feature on this property must be added to the regulator 45 - sub-node: 46 - - maxim,ena-gpios : one GPIO specifier enable control (the gpio 47 - flags are actually ignored and always 48 - ACTIVE_HIGH is used) 49 - 50 19 Example: 51 20 52 - max77686@09 { 21 + max77686: pmic@09 { 53 22 compatible = "maxim,max77686"; 54 23 interrupt-parent = <&wakeup_eint>; 55 24 interrupts = <26 0>; 56 25 reg = <0x09>; 57 - 58 - voltage-regulators { 59 - ldo11_reg { 60 - regulator-compatible = "LDO11"; 61 - regulator-name = "vdd_ldo11"; 62 - regulator-min-microvolt = <1900000>; 63 - regulator-max-microvolt = <1900000>; 64 - regulator-always-on; 65 - }; 66 - 67 - buck1_reg { 68 - regulator-compatible = "BUCK1"; 69 - regulator-name = "vdd_mif"; 70 - regulator-min-microvolt = <950000>; 71 - regulator-max-microvolt = <1300000>; 72 - regulator-always-on; 73 - regulator-boot-on; 74 - }; 75 - 76 - buck9_reg { 77 - regulator-compatible = "BUCK9"; 78 - regulator-name = "CAM_ISP_CORE_1.2V"; 79 - regulator-min-microvolt = <1000000>; 80 - regulator-max-microvolt = <1200000>; 81 - maxim,ena-gpios = <&gpm0 3 GPIO_ACTIVE_HIGH>; 82 - }; 83 - } 26 + };
+26
Documentation/devicetree/bindings/mfd/max77802.txt
··· 1 + Maxim MAX77802 multi-function device 2 + 3 + The Maxim MAX77802 is a Power Management IC (PMIC) that contains 10 high 4 + efficiency Buck regulators, 32 Low-DropOut (LDO) regulators used to power 5 + up application processors and peripherals, a 2-channel 32kHz clock outputs, 6 + a Real-Time-Clock (RTC) and a I2C interface to program the individual 7 + regulators, clocks outputs and the RTC. 8 + 9 + Bindings for the built-in 32k clock generator block and 10 + regulators are defined in ../clk/maxim,max77802.txt and 11 + ../regulator/max77802.txt respectively. 12 + 13 + Required 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 + 19 + Example: 20 + 21 + max77802: pmic@09 { 22 + compatible = "maxim,max77802"; 23 + interrupt-parent = <&intc>; 24 + interrupts = <26 IRQ_TYPE_NONE>; 25 + reg = <0x09>; 26 + };
+71
Documentation/devicetree/bindings/regulator/max77686.txt
··· 1 + Binding for Maxim MAX77686 regulators 2 + 3 + This is a part of the device tree bindings of MAX77686 multi-function device. 4 + More information can be found in ../mfd/max77686.txt file. 5 + 6 + The MAX77686 PMIC has 9 high-efficiency Buck and 26 Low-DropOut (LDO) 7 + regulators that can be controlled over I2C. 8 + 9 + Following properties should be present in main device node of the MFD chip. 10 + 11 + Optional 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 22 + to 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 + 41 + Example: 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 + };
+9 -6
Documentation/devicetree/bindings/rtc/rtc-st-lpc.txt
··· 1 1 STMicroelectronics Low Power Controller (LPC) - RTC 2 2 =================================================== 3 3 4 - LPC currently supports Watchdog OR Real Time Clock functionality. 4 + LPC currently supports Watchdog OR Real Time Clock OR Clocksource 5 + functionality. 5 6 6 7 [See: ../watchdog/st_lpc_wdt.txt for Watchdog options] 8 + [See: ../timer/st,stih407-lpc for Clocksource options] 7 9 8 10 Required properties 9 11 10 - - compatible : Must be one of: "st,stih407-lpc" "st,stih416-lpc" 11 - "st,stih415-lpc" "st,stid127-lpc" 12 + - compatible : Must be: "st,stih407-lpc" 12 13 - reg : LPC registers base address + size 13 14 - interrupts : LPC interrupt line number and associated flags 14 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_WDT [1]. One (and only one) mode must be 17 - selected. 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. 18 21 19 22 Example: 20 23 lpc@fde05000 {
+28
Documentation/devicetree/bindings/timer/st,stih407-lpc
··· 1 + STMicroelectronics Low Power Controller (LPC) - Clocksource 2 + =========================================================== 3 + 4 + LPC currently supports Watchdog OR Real Time Clock OR Clocksource 5 + functionality. 6 + 7 + [See: ../watchdog/st_lpc_wdt.txt for Watchdog options] 8 + [See: ../rtc/rtc-st-lpc.txt for RTC options] 9 + 10 + Required 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 + 22 + Example: 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 + };
+1
Documentation/devicetree/bindings/vendor-prefixes.txt
··· 150 150 newhaven Newhaven Display International 151 151 nintendo Nintendo 152 152 nokia Nokia 153 + nuvoton Nuvoton Technology Corporation 153 154 nvidia NVIDIA 154 155 nxp NXP Semiconductors 155 156 onnn ON Semiconductor Corp.
+8 -4
Documentation/devicetree/bindings/watchdog/st_lpc_wdt.txt
··· 1 1 STMicroelectronics Low Power Controller (LPC) - Watchdog 2 2 ======================================================== 3 3 4 - LPC currently supports Watchdog OR Real Time Clock functionality. 4 + LPC currently supports Watchdog OR Real Time Clock OR Clocksource 5 + functionality. 5 6 6 7 [See: ../rtc/rtc-st-lpc.txt for RTC options] 8 + [See: ../timer/st,stih407-lpc for Clocksource options] 7 9 8 10 Required properties 9 11 ··· 14 12 - reg : LPC registers base address + size 15 13 - interrupts : LPC interrupt line number and associated flags 16 14 - clocks : Clock used by LPC device (See: ../clock/clock-bindings.txt) 17 - - st,lpc-mode : The LPC can run either one of two modes ST_LPC_MODE_RTC [0] or 18 - ST_LPC_MODE_WDT [1]. One (and only one) mode must be 19 - selected. 15 + - st,lpc-mode : The LPC can run either one of three modes: 16 + ST_LPC_MODE_RTC [0] 17 + ST_LPC_MODE_WDT [1] 18 + ST_LPC_MODE_CLKSRC [2] 19 + One (and only one) mode must be selected. 20 20 21 21 Required properties [watchdog mode] 22 22
+10 -1
MAINTAINERS
··· 1517 1517 F: arch/arm/mach-sti/ 1518 1518 F: arch/arm/boot/dts/sti* 1519 1519 F: drivers/clocksource/arm_global_timer.c 1520 + F: drivers/clocksource/clksrc_st_lpc.c 1520 1521 F: drivers/i2c/busses/i2c-st.c 1521 1522 F: drivers/media/rc/st_rc.c 1522 1523 F: drivers/mmc/host/sdhci-st.c ··· 6595 6594 F: drivers/power/max14577_charger.c 6596 6595 F: drivers/power/max77693_charger.c 6597 6596 6597 + MAXIM MAX77802 MULTIFUNCTION PMIC DEVICE DRIVERS 6598 + M: Javier Martinez Canillas <javier@osg.samsung.com> 6599 + L: linux-kernel@vger.kernel.org 6600 + S: Supported 6601 + F: drivers/*/*max77802.c 6602 + F: Documentation/devicetree/bindings/*/*max77802.txt 6603 + F: include/dt-bindings/*/*max77802.h 6604 + 6598 6605 MAXIM PMIC AND MUIC DRIVERS FOR EXYNOS BASED BOARDS 6599 6606 M: Chanwoo Choi <cw00.choi@samsung.com> 6600 6607 M: Krzysztof Kozlowski <k.kozlowski@samsung.com> ··· 6616 6607 F: drivers/rtc/rtc-max77686.c 6617 6608 F: drivers/clk/clk-max77686.c 6618 6609 F: Documentation/devicetree/bindings/mfd/max14577.txt 6619 - F: Documentation/devicetree/bindings/mfd/max77686.txt 6610 + F: Documentation/devicetree/bindings/*/max77686.txt 6620 6611 F: Documentation/devicetree/bindings/mfd/max77693.txt 6621 6612 F: Documentation/devicetree/bindings/clock/maxim,max77686.txt 6622 6613 F: include/linux/mfd/max14577*.h
+8
drivers/clocksource/Kconfig
··· 297 297 depends on ARM && CLKDEV_LOOKUP 298 298 select CLKSRC_MMIO 299 299 300 + config 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 + 300 308 endmenu
+1
drivers/clocksource/Makefile
··· 61 61 obj-$(CONFIG_H8300) += h8300_timer8.o 62 62 obj-$(CONFIG_H8300_TMR16) += h8300_timer16.o 63 63 obj-$(CONFIG_H8300_TPU) += h8300_tpu.o 64 + obj-$(CONFIG_CLKSRC_ST_LPC) += clksrc_st_lpc.o
+131
drivers/clocksource/clksrc_st_lpc.c
··· 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 + 29 + static struct st_clksrc_ddata { 30 + struct clk *clk; 31 + void __iomem *base; 32 + } ddata; 33 + 34 + static 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 + 42 + static u64 notrace st_clksrc_sched_clock_read(void) 43 + { 44 + return (u64)readl_relaxed(ddata.base + LPC_LPT_LSB_OFF); 45 + } 46 + 47 + static 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 + 69 + static 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 + 95 + static 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 + } 131 + CLOCKSOURCE_OF_DECLARE(ddata, "st,stih407-lpc", st_clksrc_of_register);
+119 -1
drivers/i2c/busses/i2c-i801.c
··· 88 88 #include <linux/slab.h> 89 89 #include <linux/wait.h> 90 90 #include <linux/err.h> 91 + #include <linux/platform_device.h> 92 + #include <linux/platform_data/itco_wdt.h> 91 93 92 94 #if (defined CONFIG_I2C_MUX_GPIO || defined CONFIG_I2C_MUX_GPIO_MODULE) && \ 93 95 defined CONFIG_DMI 94 96 #include <linux/gpio.h> 95 97 #include <linux/i2c-mux-gpio.h> 96 - #include <linux/platform_device.h> 97 98 #endif 98 99 99 100 /* I801 SMBus address offsets */ ··· 114 113 #define SMBPCICTL 0x004 115 114 #define SMBPCISTS 0x006 116 115 #define SMBHSTCFG 0x040 116 + #define TCOBASE 0x050 117 + #define TCOCTL 0x054 118 + 119 + #define ACPIBASE 0x040 120 + #define ACPIBASE_SMI_OFF 0x030 121 + #define ACPICTRL 0x044 122 + #define ACPICTRL_EN 0x080 123 + 124 + #define SBREG_BAR 0x10 125 + #define SBREG_SMBCTRL 0xc6000c 117 126 118 127 /* Host status bits for SMBPCISTS */ 119 128 #define SMBPCISTS_INTS 0x08 ··· 135 124 #define SMBHSTCFG_HST_EN 1 136 125 #define SMBHSTCFG_SMB_SMI_EN 2 137 126 #define SMBHSTCFG_I2C_EN 4 127 + 128 + /* TCO configuration bits for TCOCTL */ 129 + #define TCOCTL_EN 0x0100 138 130 139 131 /* Auxiliary control register bits, ICH4+ only */ 140 132 #define SMBAUXCTL_CRC 1 ··· 235 221 const struct i801_mux_config *mux_drvdata; 236 222 struct platform_device *mux_pdev; 237 223 #endif 224 + struct platform_device *tco_pdev; 238 225 }; 239 226 240 227 #define FEATURE_SMBUS_PEC (1 << 0) ··· 245 230 #define FEATURE_IRQ (1 << 4) 246 231 /* Not really a feature, but it's convenient to handle it as such */ 247 232 #define FEATURE_IDF (1 << 15) 233 + #define FEATURE_TCO (1 << 16) 248 234 249 235 static const char *i801_feature_names[] = { 250 236 "SMBus PEC", ··· 1148 1132 } 1149 1133 #endif 1150 1134 1135 + static const struct itco_wdt_platform_data tco_platform_data = { 1136 + .name = "Intel PCH", 1137 + .version = 4, 1138 + }; 1139 + 1140 + static DEFINE_SPINLOCK(p2sb_spinlock); 1141 + 1142 + static void i801_add_tco(struct i801_priv *priv) 1143 + { 1144 + struct pci_dev *pci_dev = priv->pci_dev; 1145 + struct resource tco_res[3], *res; 1146 + struct platform_device *pdev; 1147 + unsigned int devfn; 1148 + u32 tco_base, tco_ctl; 1149 + u32 base_addr, ctrl_val; 1150 + u64 base64_addr; 1151 + 1152 + if (!(priv->features & FEATURE_TCO)) 1153 + return; 1154 + 1155 + pci_read_config_dword(pci_dev, TCOBASE, &tco_base); 1156 + pci_read_config_dword(pci_dev, TCOCTL, &tco_ctl); 1157 + if (!(tco_ctl & TCOCTL_EN)) 1158 + return; 1159 + 1160 + memset(tco_res, 0, sizeof(tco_res)); 1161 + 1162 + res = &tco_res[ICH_RES_IO_TCO]; 1163 + res->start = tco_base & ~1; 1164 + res->end = res->start + 32 - 1; 1165 + res->flags = IORESOURCE_IO; 1166 + 1167 + /* 1168 + * Power Management registers. 1169 + */ 1170 + devfn = PCI_DEVFN(PCI_SLOT(pci_dev->devfn), 2); 1171 + pci_bus_read_config_dword(pci_dev->bus, devfn, ACPIBASE, &base_addr); 1172 + 1173 + res = &tco_res[ICH_RES_IO_SMI]; 1174 + res->start = (base_addr & ~1) + ACPIBASE_SMI_OFF; 1175 + res->end = res->start + 3; 1176 + res->flags = IORESOURCE_IO; 1177 + 1178 + /* 1179 + * Enable the ACPI I/O space. 1180 + */ 1181 + pci_bus_read_config_dword(pci_dev->bus, devfn, ACPICTRL, &ctrl_val); 1182 + ctrl_val |= ACPICTRL_EN; 1183 + pci_bus_write_config_dword(pci_dev->bus, devfn, ACPICTRL, ctrl_val); 1184 + 1185 + /* 1186 + * We must access the NO_REBOOT bit over the Primary to Sideband 1187 + * bridge (P2SB). The BIOS prevents the P2SB device from being 1188 + * enumerated by the PCI subsystem, so we need to unhide/hide it 1189 + * to lookup the P2SB BAR. 1190 + */ 1191 + spin_lock(&p2sb_spinlock); 1192 + 1193 + devfn = PCI_DEVFN(PCI_SLOT(pci_dev->devfn), 1); 1194 + 1195 + /* Unhide the P2SB device */ 1196 + pci_bus_write_config_byte(pci_dev->bus, devfn, 0xe1, 0x0); 1197 + 1198 + pci_bus_read_config_dword(pci_dev->bus, devfn, SBREG_BAR, &base_addr); 1199 + base64_addr = base_addr & 0xfffffff0; 1200 + 1201 + pci_bus_read_config_dword(pci_dev->bus, devfn, SBREG_BAR + 0x4, &base_addr); 1202 + base64_addr |= (u64)base_addr << 32; 1203 + 1204 + /* Hide the P2SB device */ 1205 + pci_bus_write_config_byte(pci_dev->bus, devfn, 0xe1, 0x1); 1206 + spin_unlock(&p2sb_spinlock); 1207 + 1208 + res = &tco_res[ICH_RES_MEM_OFF]; 1209 + res->start = (resource_size_t)base64_addr + SBREG_SMBCTRL; 1210 + res->end = res->start + 3; 1211 + res->flags = IORESOURCE_MEM; 1212 + 1213 + pdev = platform_device_register_resndata(&pci_dev->dev, "iTCO_wdt", -1, 1214 + tco_res, 3, &tco_platform_data, 1215 + sizeof(tco_platform_data)); 1216 + if (IS_ERR(pdev)) { 1217 + dev_warn(&pci_dev->dev, "failed to create iTCO device\n"); 1218 + return; 1219 + } 1220 + 1221 + priv->tco_pdev = pdev; 1222 + } 1223 + 1151 1224 static int i801_probe(struct pci_dev *dev, const struct pci_device_id *id) 1152 1225 { 1153 1226 unsigned char temp; ··· 1254 1149 1255 1150 priv->pci_dev = dev; 1256 1151 switch (dev->device) { 1152 + case PCI_DEVICE_ID_INTEL_SUNRISEPOINT_H_SMBUS: 1153 + case PCI_DEVICE_ID_INTEL_SUNRISEPOINT_LP_SMBUS: 1154 + priv->features |= FEATURE_I2C_BLOCK_READ; 1155 + priv->features |= FEATURE_IRQ; 1156 + priv->features |= FEATURE_SMBUS_PEC; 1157 + priv->features |= FEATURE_BLOCK_BUFFER; 1158 + priv->features |= FEATURE_TCO; 1159 + break; 1160 + 1257 1161 case PCI_DEVICE_ID_INTEL_PATSBURG_SMBUS_IDF0: 1258 1162 case PCI_DEVICE_ID_INTEL_PATSBURG_SMBUS_IDF1: 1259 1163 case PCI_DEVICE_ID_INTEL_PATSBURG_SMBUS_IDF2: ··· 1379 1265 dev_info(&dev->dev, "SMBus using %s\n", 1380 1266 priv->features & FEATURE_IRQ ? "PCI interrupt" : "polling"); 1381 1267 1268 + i801_add_tco(priv); 1269 + 1382 1270 /* set up the sysfs linkage to our parent device */ 1383 1271 priv->adapter.dev.parent = &dev->dev; 1384 1272 ··· 1411 1295 i801_del_mux(priv); 1412 1296 i2c_del_adapter(&priv->adapter); 1413 1297 pci_write_config_byte(dev, SMBHSTCFG, priv->original_hstcfg); 1298 + 1299 + platform_device_unregister(priv->tco_pdev); 1414 1300 1415 1301 /* 1416 1302 * do not call pci_disable_device(dev) since it can cause hard hangs on
-1
drivers/mfd/88pm800.c
··· 609 609 static struct i2c_driver pm800_driver = { 610 610 .driver = { 611 611 .name = "88PM800", 612 - .owner = THIS_MODULE, 613 612 .pm = &pm80x_pm_ops, 614 613 }, 615 614 .probe = pm800_probe,
-1
drivers/mfd/88pm805.c
··· 267 267 static struct i2c_driver pm805_driver = { 268 268 .driver = { 269 269 .name = "88PM805", 270 - .owner = THIS_MODULE, 271 270 .pm = &pm80x_pm_ops, 272 271 }, 273 272 .probe = pm805_probe,
-5
drivers/mfd/88pm860x-core.c
··· 558 558 irq_set_chip_data(virq, d->host_data); 559 559 irq_set_chip_and_handler(virq, &pm860x_irq_chip, handle_edge_irq); 560 560 irq_set_nested_thread(virq, 1); 561 - #ifdef CONFIG_ARM 562 - set_irq_flags(virq, IRQF_VALID); 563 - #else 564 561 irq_set_noprobe(virq); 565 - #endif 566 562 return 0; 567 563 } 568 564 ··· 1254 1258 static struct i2c_driver pm860x_driver = { 1255 1259 .driver = { 1256 1260 .name = "88PM860x", 1257 - .owner = THIS_MODULE, 1258 1261 .pm = &pm860x_pm_ops, 1259 1262 .of_match_table = pm860x_dt_ids, 1260 1263 },
+23 -2
drivers/mfd/Kconfig
··· 97 97 select MFD_CORE 98 98 select CHROME_PLATFORMS 99 99 select CROS_EC_PROTO 100 + depends on X86 || ARM || COMPILE_TEST 100 101 help 101 102 If you say Y here you get support for the ChromeOS Embedded 102 103 Controller (EC) providing keyboard, battery and power services. ··· 106 105 107 106 config MFD_CROS_EC_I2C 108 107 tristate "ChromeOS Embedded Controller (I2C)" 109 - depends on MFD_CROS_EC && CROS_EC_PROTO && I2C 108 + depends on MFD_CROS_EC && I2C 110 109 111 110 help 112 111 If you say Y here, you get support for talking to the ChromeOS ··· 116 115 117 116 config MFD_CROS_EC_SPI 118 117 tristate "ChromeOS Embedded Controller (SPI)" 119 - depends on MFD_CROS_EC && CROS_EC_PROTO && SPI 118 + depends on MFD_CROS_EC && SPI 120 119 121 120 ---help--- 122 121 If you say Y here, you get support for talking to the ChromeOS EC ··· 186 185 187 186 This driver can be built as a module. If built as a module it will be 188 187 called "da9055" 188 + 189 + config MFD_DA9062 190 + tristate "Dialog Semiconductor DA9062 PMIC Support" 191 + select MFD_CORE 192 + select REGMAP_I2C 193 + select REGMAP_IRQ 194 + depends on I2C=y 195 + help 196 + Say yes here for support for the Dialog Semiconductor DA9062 PMIC. 197 + This includes the I2C driver and core APIs. 198 + Additional drivers must be enabled in order to use the functionality 199 + of the device. 189 200 190 201 config MFD_DA9063 191 202 bool "Dialog Semiconductor DA9063 PMIC Support" ··· 411 398 device may provide functions like watchdog, GPIO, UART and I2C bus. 412 399 413 400 The following modules are supported: 401 + * COMe-bBL6 414 402 * COMe-bHL6 415 403 * COMe-bIP# 416 404 * COMe-bPC2 (ETXexpress-PC) 417 405 * COMe-bSC# (ETXexpress-SC T#) 418 406 * COMe-cBL6 419 407 * COMe-cBT6 408 + * COMe-cBW6 420 409 * COMe-cCT6 421 410 * COMe-cDC2 (microETXexpress-DC) 422 411 * COMe-cHL6 ··· 1393 1378 depends on MFD_ARIZONA 1394 1379 help 1395 1380 Support for Wolfson Microelectronics WM8997 low power audio SoC 1381 + 1382 + config MFD_WM8998 1383 + bool "Wolfson Microelectronics WM8998" 1384 + depends on MFD_ARIZONA 1385 + help 1386 + Support for Wolfson Microelectronics WM8998 low power audio SoC 1396 1387 1397 1388 config MFD_WM8400 1398 1389 bool "Wolfson Microelectronics WM8400"
+5 -1
drivers/mfd/Makefile
··· 48 48 ifeq ($(CONFIG_MFD_WM8997),y) 49 49 obj-$(CONFIG_MFD_ARIZONA) += wm8997-tables.o 50 50 endif 51 + ifeq ($(CONFIG_MFD_WM8998),y) 52 + obj-$(CONFIG_MFD_ARIZONA) += wm8998-tables.o 53 + endif 51 54 obj-$(CONFIG_MFD_WM8400) += wm8400-core.o 52 55 wm831x-objs := wm831x-core.o wm831x-irq.o wm831x-otp.o 53 56 wm831x-objs += wm831x-auxadc.o ··· 113 110 114 111 da9055-objs := da9055-core.o da9055-i2c.o 115 112 obj-$(CONFIG_MFD_DA9055) += da9055.o 116 - 113 + obj-$(CONFIG_MFD_DA9062) += da9062-core.o 117 114 da9063-objs := da9063-core.o da9063-irq.o da9063-i2c.o 118 115 obj-$(CONFIG_MFD_DA9063) += da9063.o 119 116 obj-$(CONFIG_MFD_DA9150) += da9150-core.o 117 + 120 118 obj-$(CONFIG_MFD_MAX14577) += max14577.o 121 119 obj-$(CONFIG_MFD_MAX77686) += max77686.o 122 120 obj-$(CONFIG_MFD_MAX77693) += max77693.o
-1
drivers/mfd/aat2870-core.c
··· 500 500 static struct i2c_driver aat2870_i2c_driver = { 501 501 .driver = { 502 502 .name = "aat2870", 503 - .owner = THIS_MODULE, 504 503 .pm = &aat2870_pm_ops, 505 504 }, 506 505 .probe = aat2870_i2c_probe,
-1
drivers/mfd/ab3100-core.c
··· 972 972 static struct i2c_driver ab3100_driver = { 973 973 .driver = { 974 974 .name = "ab3100", 975 - .owner = THIS_MODULE, 976 975 }, 977 976 .id_table = ab3100_id, 978 977 .probe = ab3100_probe,
-4
drivers/mfd/ab8500-core.c
··· 565 565 irq_set_chip_and_handler(virq, &ab8500_irq_chip, 566 566 handle_simple_irq); 567 567 irq_set_nested_thread(virq, 1); 568 - #ifdef CONFIG_ARM 569 - set_irq_flags(virq, IRQF_VALID); 570 - #else 571 568 irq_set_noprobe(virq); 572 - #endif 573 569 574 570 return 0; 575 571 }
-1
drivers/mfd/adp5520.c
··· 351 351 static struct i2c_driver adp5520_driver = { 352 352 .driver = { 353 353 .name = "adp5520", 354 - .owner = THIS_MODULE, 355 354 .pm = &adp5520_pm, 356 355 }, 357 356 .probe = adp5520_probe,
+113 -25
drivers/mfd/arizona-core.c
··· 30 30 31 31 #include "arizona.h" 32 32 33 - static const char *wm5102_core_supplies[] = { 33 + static const char * const wm5102_core_supplies[] = { 34 34 "AVDD", 35 35 "DBVDD1", 36 36 }; ··· 146 146 static irqreturn_t arizona_overclocked(int irq, void *data) 147 147 { 148 148 struct arizona *arizona = data; 149 - unsigned int val[2]; 149 + unsigned int val[3]; 150 150 int ret; 151 - 151 + 152 152 ret = regmap_bulk_read(arizona->regmap, ARIZONA_INTERRUPT_RAW_STATUS_6, 153 - &val[0], 2); 153 + &val[0], 3); 154 154 if (ret != 0) { 155 155 dev_err(arizona->dev, "Failed to read overclock status: %d\n", 156 156 ret); 157 157 return IRQ_NONE; 158 + } 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; 158 172 } 159 173 160 174 if (val[0] & ARIZONA_PWM_OVERCLOCKED_STS) ··· 214 200 dev_err(arizona->dev, "ISRC2 overclocked\n"); 215 201 if (val[1] & ARIZONA_ISRC1_OVERCLOCKED_STS) 216 202 dev_err(arizona->dev, "ISRC1 overclocked\n"); 203 + 204 + if (val[2] & ARIZONA_SPDIF_OVERCLOCKED_STS) 205 + dev_err(arizona->dev, "SPDIF overclocked\n"); 217 206 218 207 return IRQ_HANDLED; 219 208 } ··· 567 550 break; 568 551 default: 569 552 ret = arizona_wait_for_boot(arizona); 570 - if (ret != 0) { 553 + if (ret != 0) 571 554 goto err; 572 - } 573 555 574 556 if (arizona->external_dcvdd) { 575 557 ret = regmap_update_bits(arizona->regmap, ··· 775 759 776 760 ret = of_property_read_u32_array(arizona->dev->of_node, 777 761 "wlf,gpio-defaults", 778 - arizona->pdata.gpio_defaults, 779 - ARRAY_SIZE(arizona->pdata.gpio_defaults)); 762 + pdata->gpio_defaults, 763 + ARRAY_SIZE(pdata->gpio_defaults)); 780 764 if (ret >= 0) { 781 765 /* 782 766 * All values are literal except out of range values ··· 784 768 * data which uses 0 as chip default and out of range 785 769 * as zero. 786 770 */ 787 - for (i = 0; i < ARRAY_SIZE(arizona->pdata.gpio_defaults); i++) { 788 - if (arizona->pdata.gpio_defaults[i] > 0xffff) 789 - arizona->pdata.gpio_defaults[i] = 0; 790 - else if (arizona->pdata.gpio_defaults[i] == 0) 791 - arizona->pdata.gpio_defaults[i] = 0x10000; 771 + for (i = 0; i < ARRAY_SIZE(pdata->gpio_defaults); i++) { 772 + if (pdata->gpio_defaults[i] > 0xffff) 773 + pdata->gpio_defaults[i] = 0; 774 + else if (pdata->gpio_defaults[i] == 0) 775 + pdata->gpio_defaults[i] = 0x10000; 792 776 } 793 777 } else { 794 778 dev_err(arizona->dev, "Failed to parse GPIO defaults: %d\n", ··· 797 781 798 782 of_property_for_each_u32(arizona->dev->of_node, "wlf,inmode", prop, 799 783 cur, val) { 800 - if (count == ARRAY_SIZE(arizona->pdata.inmode)) 784 + if (count == ARRAY_SIZE(pdata->inmode)) 801 785 break; 802 786 803 - arizona->pdata.inmode[count] = val; 787 + pdata->inmode[count] = val; 804 788 count++; 805 789 } 806 790 807 791 count = 0; 808 792 of_property_for_each_u32(arizona->dev->of_node, "wlf,dmic-ref", prop, 809 793 cur, val) { 810 - if (count == ARRAY_SIZE(arizona->pdata.dmic_ref)) 794 + if (count == ARRAY_SIZE(pdata->dmic_ref)) 811 795 break; 812 796 813 - arizona->pdata.dmic_ref[count] = val; 797 + pdata->dmic_ref[count] = val; 814 798 count++; 815 799 } 816 800 ··· 822 806 { .compatible = "wlf,wm5110", .data = (void *)WM5110 }, 823 807 { .compatible = "wlf,wm8280", .data = (void *)WM8280 }, 824 808 { .compatible = "wlf,wm8997", .data = (void *)WM8997 }, 809 + { .compatible = "wlf,wm8998", .data = (void *)WM8998 }, 810 + { .compatible = "wlf,wm1814", .data = (void *)WM1814 }, 825 811 {}, 826 812 }; 827 813 EXPORT_SYMBOL_GPL(arizona_of_match); ··· 838 820 { .name = "arizona-ldo1" }, 839 821 }; 840 822 841 - static const char *wm5102_supplies[] = { 823 + static const char * const wm5102_supplies[] = { 842 824 "MICVDD", 843 825 "DBVDD2", 844 826 "DBVDD3", ··· 881 863 }, 882 864 }; 883 865 884 - static const char *wm8997_supplies[] = { 866 + static const char * const wm8997_supplies[] = { 885 867 "MICVDD", 886 868 "DBVDD2", 887 869 "CPVDD", ··· 905 887 }, 906 888 }; 907 889 890 + static const struct mfd_cell wm8998_devs[] = { 891 + { 892 + .name = "arizona-extcon", 893 + .parent_supplies = wm5102_supplies, 894 + .num_parent_supplies = 1, /* We only need MICVDD */ 895 + }, 896 + { .name = "arizona-gpio" }, 897 + { .name = "arizona-haptics" }, 898 + { .name = "arizona-pwm" }, 899 + { 900 + .name = "wm8998-codec", 901 + .parent_supplies = wm5102_supplies, 902 + .num_parent_supplies = ARRAY_SIZE(wm5102_supplies), 903 + }, 904 + { .name = "arizona-micsupp" }, 905 + }; 906 + 908 907 int arizona_dev_init(struct arizona *arizona) 909 908 { 910 909 struct device *dev = arizona->dev; 911 910 const char *type_name; 912 - unsigned int reg, val; 911 + unsigned int reg, val, mask; 913 912 int (*apply_patch)(struct arizona *) = NULL; 914 913 int ret, i; 915 914 ··· 946 911 case WM5110: 947 912 case WM8280: 948 913 case WM8997: 914 + case WM8998: 915 + case WM1814: 949 916 for (i = 0; i < ARRAY_SIZE(wm5102_core_supplies); i++) 950 917 arizona->core_supplies[i].supply 951 918 = wm5102_core_supplies[i]; ··· 1029 992 switch (reg) { 1030 993 case 0x5102: 1031 994 case 0x5110: 995 + case 0x6349: 1032 996 case 0x8997: 1033 997 break; 1034 998 default: ··· 1129 1091 arizona->type = WM8997; 1130 1092 } 1131 1093 apply_patch = wm8997_patch; 1094 + break; 1095 + #endif 1096 + #ifdef CONFIG_MFD_WM8998 1097 + case 0x6349: 1098 + switch (arizona->type) { 1099 + case WM8998: 1100 + type_name = "WM8998"; 1101 + break; 1102 + 1103 + case WM1814: 1104 + type_name = "WM1814"; 1105 + break; 1106 + 1107 + default: 1108 + type_name = "WM8998"; 1109 + dev_err(arizona->dev, "WM8998 registered as %d\n", 1110 + arizona->type); 1111 + arizona->type = WM8998; 1112 + } 1113 + 1114 + apply_patch = wm8998_patch; 1132 1115 break; 1133 1116 #endif 1134 1117 default: ··· 1263 1204 << ARIZONA_IN1_DMIC_SUP_SHIFT; 1264 1205 if (arizona->pdata.inmode[i] & ARIZONA_INMODE_DMIC) 1265 1206 val |= 1 << ARIZONA_IN1_MODE_SHIFT; 1266 - if (arizona->pdata.inmode[i] & ARIZONA_INMODE_SE) 1267 - val |= 1 << ARIZONA_IN1_SINGLE_ENDED_SHIFT; 1207 + 1208 + switch (arizona->type) { 1209 + case WM8998: 1210 + case WM1814: 1211 + regmap_update_bits(arizona->regmap, 1212 + ARIZONA_ADC_DIGITAL_VOLUME_1L + (i * 8), 1213 + ARIZONA_IN1L_SRC_SE_MASK, 1214 + (arizona->pdata.inmode[i] & ARIZONA_INMODE_SE) 1215 + << ARIZONA_IN1L_SRC_SE_SHIFT); 1216 + 1217 + regmap_update_bits(arizona->regmap, 1218 + ARIZONA_ADC_DIGITAL_VOLUME_1R + (i * 8), 1219 + ARIZONA_IN1R_SRC_SE_MASK, 1220 + (arizona->pdata.inmode[i] & ARIZONA_INMODE_SE) 1221 + << ARIZONA_IN1R_SRC_SE_SHIFT); 1222 + 1223 + mask = ARIZONA_IN1_DMIC_SUP_MASK | 1224 + ARIZONA_IN1_MODE_MASK; 1225 + break; 1226 + default: 1227 + if (arizona->pdata.inmode[i] & ARIZONA_INMODE_SE) 1228 + val |= 1 << ARIZONA_IN1_SINGLE_ENDED_SHIFT; 1229 + 1230 + mask = ARIZONA_IN1_DMIC_SUP_MASK | 1231 + ARIZONA_IN1_MODE_MASK | 1232 + ARIZONA_IN1_SINGLE_ENDED_MASK; 1233 + break; 1234 + } 1268 1235 1269 1236 regmap_update_bits(arizona->regmap, 1270 1237 ARIZONA_IN1L_CONTROL + (i * 8), 1271 - ARIZONA_IN1_DMIC_SUP_MASK | 1272 - ARIZONA_IN1_MODE_MASK | 1273 - ARIZONA_IN1_SINGLE_ENDED_MASK, val); 1238 + mask, val); 1274 1239 } 1275 1240 1276 1241 for (i = 0; i < ARIZONA_MAX_OUTPUT; i++) { ··· 1355 1272 case WM8997: 1356 1273 ret = mfd_add_devices(arizona->dev, -1, wm8997_devs, 1357 1274 ARRAY_SIZE(wm8997_devs), NULL, 0, NULL); 1275 + break; 1276 + case WM8998: 1277 + case WM1814: 1278 + ret = mfd_add_devices(arizona->dev, -1, wm8998_devs, 1279 + ARRAY_SIZE(wm8998_devs), NULL, 0, NULL); 1358 1280 break; 1359 1281 } 1360 1282
+8 -1
drivers/mfd/arizona-i2c.c
··· 53 53 regmap_config = &wm8997_i2c_regmap; 54 54 break; 55 55 #endif 56 + #ifdef CONFIG_MFD_WM8998 57 + case WM8998: 58 + case WM1814: 59 + regmap_config = &wm8998_i2c_regmap; 60 + break; 61 + #endif 56 62 default: 57 63 dev_err(&i2c->dev, "Unknown device type %ld\n", 58 64 id->driver_data); ··· 96 90 { "wm5110", WM5110 }, 97 91 { "wm8280", WM8280 }, 98 92 { "wm8997", WM8997 }, 93 + { "wm8998", WM8998 }, 94 + { "wm1814", WM1814 }, 99 95 { } 100 96 }; 101 97 MODULE_DEVICE_TABLE(i2c, arizona_i2c_id); ··· 105 97 static struct i2c_driver arizona_i2c_driver = { 106 98 .driver = { 107 99 .name = "arizona", 108 - .owner = THIS_MODULE, 109 100 .pm = &arizona_pm_ops, 110 101 .of_match_table = of_match_ptr(arizona_of_match), 111 102 },
+9 -7
drivers/mfd/arizona-irq.c
··· 174 174 irq_set_chip_data(virq, data); 175 175 irq_set_chip_and_handler(virq, &arizona_irq_chip, handle_simple_irq); 176 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 177 irq_set_noprobe(virq); 184 - #endif 185 178 186 179 return 0; 187 180 } ··· 223 230 case WM8997: 224 231 aod = &wm8997_aod; 225 232 irq = &wm8997_irq; 233 + 234 + arizona->ctrlif_error = false; 235 + break; 236 + #endif 237 + #ifdef CONFIG_MFD_WM8998 238 + case WM8998: 239 + case WM1814: 240 + aod = &wm8998_aod; 241 + irq = &wm8998_irq; 226 242 227 243 arizona->ctrlif_error = false; 228 244 break;
+5
drivers/mfd/arizona.h
··· 27 27 28 28 extern const struct regmap_config wm8997_i2c_regmap; 29 29 30 + extern const struct regmap_config wm8998_i2c_regmap; 31 + 30 32 extern const struct dev_pm_ops arizona_pm_ops; 31 33 32 34 extern const struct of_device_id arizona_of_match[]; ··· 42 40 43 41 extern const struct regmap_irq_chip wm8997_aod; 44 42 extern const struct regmap_irq_chip wm8997_irq; 43 + 44 + extern struct regmap_irq_chip wm8998_aod; 45 + extern struct regmap_irq_chip wm8998_irq; 45 46 46 47 int arizona_dev_init(struct arizona *arizona); 47 48 int arizona_dev_exit(struct arizona *arizona);
-1
drivers/mfd/as3711.c
··· 211 211 static struct i2c_driver as3711_i2c_driver = { 212 212 .driver = { 213 213 .name = "as3711", 214 - .owner = THIS_MODULE, 215 214 .of_match_table = of_match_ptr(as3711_of_match), 216 215 }, 217 216 .probe = as3711_i2c_probe,
-1
drivers/mfd/as3722.c
··· 437 437 static struct i2c_driver as3722_i2c_driver = { 438 438 .driver = { 439 439 .name = "as3722", 440 - .owner = THIS_MODULE, 441 440 .of_match_table = as3722_of_match, 442 441 }, 443 442 .probe = as3722_i2c_probe,
+2 -2
drivers/mfd/asic3.c
··· 411 411 412 412 irq_set_chip_data(irq, asic); 413 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 417 asic3_write_register(asic, ASIC3_OFFSET(INTR, INT_MASK), ··· 431 431 irq_base = asic->irq_base; 432 432 433 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 435 irq_set_chip_and_handler(irq, NULL, NULL); 436 436 irq_set_chip_data(irq, NULL); 437 437 }
+49 -6
drivers/mfd/atmel-hlcdc.c
··· 18 18 */ 19 19 20 20 #include <linux/clk.h> 21 + #include <linux/iopoll.h> 21 22 #include <linux/mfd/atmel-hlcdc.h> 22 23 #include <linux/mfd/core.h> 23 24 #include <linux/module.h> ··· 26 25 #include <linux/regmap.h> 27 26 28 27 #define ATMEL_HLCDC_REG_MAX (0x4000 - 0x4) 28 + 29 + struct atmel_hlcdc_regmap { 30 + void __iomem *regs; 31 + }; 29 32 30 33 static const struct mfd_cell atmel_hlcdc_cells[] = { 31 34 { ··· 42 37 }, 43 38 }; 44 39 40 + static int regmap_atmel_hlcdc_reg_write(void *context, unsigned int reg, 41 + unsigned int val) 42 + { 43 + struct atmel_hlcdc_regmap *hregmap = context; 44 + 45 + if (reg <= ATMEL_HLCDC_DIS) { 46 + u32 status; 47 + 48 + readl_poll_timeout(hregmap->regs + ATMEL_HLCDC_SR, status, 49 + !(status & ATMEL_HLCDC_SIP), 1, 100); 50 + } 51 + 52 + writel(val, hregmap->regs + reg); 53 + 54 + return 0; 55 + } 56 + 57 + static int regmap_atmel_hlcdc_reg_read(void *context, unsigned int reg, 58 + unsigned int *val) 59 + { 60 + struct atmel_hlcdc_regmap *hregmap = context; 61 + 62 + *val = readl(hregmap->regs + reg); 63 + 64 + return 0; 65 + } 66 + 45 67 static const struct regmap_config atmel_hlcdc_regmap_config = { 46 68 .reg_bits = 32, 47 69 .val_bits = 32, 48 70 .reg_stride = 4, 49 71 .max_register = ATMEL_HLCDC_REG_MAX, 72 + .reg_write = regmap_atmel_hlcdc_reg_write, 73 + .reg_read = regmap_atmel_hlcdc_reg_read, 74 + .fast_io = true, 50 75 }; 51 76 52 77 static int atmel_hlcdc_probe(struct platform_device *pdev) 53 78 { 79 + struct atmel_hlcdc_regmap *hregmap; 54 80 struct device *dev = &pdev->dev; 55 81 struct atmel_hlcdc *hlcdc; 56 82 struct resource *res; 57 - void __iomem *regs; 83 + 84 + hregmap = devm_kzalloc(dev, sizeof(*hregmap), GFP_KERNEL); 85 + if (!hregmap) 86 + return -ENOMEM; 58 87 59 88 hlcdc = devm_kzalloc(dev, sizeof(*hlcdc), GFP_KERNEL); 60 89 if (!hlcdc) 61 90 return -ENOMEM; 62 91 63 92 res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 64 - regs = devm_ioremap_resource(dev, res); 65 - if (IS_ERR(regs)) 66 - return PTR_ERR(regs); 93 + hregmap->regs = devm_ioremap_resource(dev, res); 94 + if (IS_ERR(hregmap->regs)) 95 + return PTR_ERR(hregmap->regs); 67 96 68 97 hlcdc->irq = platform_get_irq(pdev, 0); 69 98 if (hlcdc->irq < 0) ··· 121 82 return PTR_ERR(hlcdc->slow_clk); 122 83 } 123 84 124 - hlcdc->regmap = devm_regmap_init_mmio(dev, regs, 125 - &atmel_hlcdc_regmap_config); 85 + hlcdc->regmap = devm_regmap_init(dev, NULL, hregmap, 86 + &atmel_hlcdc_regmap_config); 126 87 if (IS_ERR(hlcdc->regmap)) 127 88 return PTR_ERR(hlcdc->regmap); 128 89 ··· 141 102 } 142 103 143 104 static const struct of_device_id atmel_hlcdc_match[] = { 105 + { .compatible = "atmel,at91sam9n12-hlcdc" }, 106 + { .compatible = "atmel,at91sam9x5-hlcdc" }, 107 + { .compatible = "atmel,sama5d2-hlcdc" }, 144 108 { .compatible = "atmel,sama5d3-hlcdc" }, 109 + { .compatible = "atmel,sama5d4-hlcdc" }, 145 110 { /* sentinel */ }, 146 111 }; 147 112
+106 -6
drivers/mfd/axp20x.c
··· 30 30 #define AXP20X_OFF 0x80 31 31 32 32 static const char * const axp20x_model_names[] = { 33 + "AXP152", 33 34 "AXP202", 34 35 "AXP209", 35 36 "AXP221", 36 37 "AXP288", 37 38 }; 38 39 40 + static 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 + 45 + static 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 + 51 + static 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 + 56 + static 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 + 39 61 static const struct regmap_range axp20x_writeable_ranges[] = { 40 62 regmap_reg_range(AXP20X_DATACACHE(0), AXP20X_IRQ5_STATE), 41 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 44 67 static 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 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 48 76 static const struct regmap_access_table axp20x_writeable_table = { ··· 121 93 .n_yes_ranges = ARRAY_SIZE(axp288_volatile_ranges), 122 94 }; 123 95 96 + static struct resource axp152_pek_resources[] = { 97 + DEFINE_RES_IRQ_NAMED(AXP152_IRQ_PEK_RIS_EDGE, "PEK_DBR"), 98 + DEFINE_RES_IRQ_NAMED(AXP152_IRQ_PEK_FAL_EDGE, "PEK_DBF"), 99 + }; 100 + 124 101 static struct resource axp20x_pek_resources[] = { 125 102 { 126 103 .name = "PEK_DBR", ··· 138 105 .end = AXP20X_IRQ_PEK_FAL_EDGE, 139 106 .flags = IORESOURCE_IRQ, 140 107 }, 108 + }; 109 + 110 + static struct resource axp20x_usb_power_supply_resources[] = { 111 + DEFINE_RES_IRQ_NAMED(AXP20X_IRQ_VBUS_PLUGIN, "VBUS_PLUGIN"), 112 + DEFINE_RES_IRQ_NAMED(AXP20X_IRQ_VBUS_REMOVAL, "VBUS_REMOVAL"), 113 + DEFINE_RES_IRQ_NAMED(AXP20X_IRQ_VBUS_VALID, "VBUS_VALID"), 114 + DEFINE_RES_IRQ_NAMED(AXP20X_IRQ_VBUS_NOT_VALID, "VBUS_NOT_VALID"), 141 115 }; 142 116 143 117 static struct resource axp22x_pek_resources[] = { ··· 194 154 }, 195 155 }; 196 156 157 + static const struct regmap_config axp152_regmap_config = { 158 + .reg_bits = 8, 159 + .val_bits = 8, 160 + .wr_table = &axp152_writeable_table, 161 + .volatile_table = &axp152_volatile_table, 162 + .max_register = AXP152_PWM1_DUTY_CYCLE, 163 + .cache_type = REGCACHE_RBTREE, 164 + }; 165 + 197 166 static const struct regmap_config axp20x_regmap_config = { 198 167 .reg_bits = 8, 199 168 .val_bits = 8, 200 169 .wr_table = &axp20x_writeable_table, 201 170 .volatile_table = &axp20x_volatile_table, 202 - .max_register = AXP20X_FG_RES, 171 + .max_register = AXP20X_OCV(AXP20X_OCV_MAX), 203 172 .cache_type = REGCACHE_RBTREE, 204 173 }; 205 174 ··· 232 183 233 184 #define INIT_REGMAP_IRQ(_variant, _irq, _off, _mask) \ 234 185 [_variant##_IRQ_##_irq] = { .reg_offset = (_off), .mask = BIT(_mask) } 186 + 187 + static const struct regmap_irq axp152_regmap_irqs[] = { 188 + INIT_REGMAP_IRQ(AXP152, LDO0IN_CONNECT, 0, 6), 189 + INIT_REGMAP_IRQ(AXP152, LDO0IN_REMOVAL, 0, 5), 190 + INIT_REGMAP_IRQ(AXP152, ALDO0IN_CONNECT, 0, 3), 191 + INIT_REGMAP_IRQ(AXP152, ALDO0IN_REMOVAL, 0, 2), 192 + INIT_REGMAP_IRQ(AXP152, DCDC1_V_LOW, 1, 5), 193 + INIT_REGMAP_IRQ(AXP152, DCDC2_V_LOW, 1, 4), 194 + INIT_REGMAP_IRQ(AXP152, DCDC3_V_LOW, 1, 3), 195 + INIT_REGMAP_IRQ(AXP152, DCDC4_V_LOW, 1, 2), 196 + INIT_REGMAP_IRQ(AXP152, PEK_SHORT, 1, 1), 197 + INIT_REGMAP_IRQ(AXP152, PEK_LONG, 1, 0), 198 + INIT_REGMAP_IRQ(AXP152, TIMER, 2, 7), 199 + INIT_REGMAP_IRQ(AXP152, PEK_RIS_EDGE, 2, 6), 200 + INIT_REGMAP_IRQ(AXP152, PEK_FAL_EDGE, 2, 5), 201 + INIT_REGMAP_IRQ(AXP152, GPIO3_INPUT, 2, 3), 202 + INIT_REGMAP_IRQ(AXP152, GPIO2_INPUT, 2, 2), 203 + INIT_REGMAP_IRQ(AXP152, GPIO1_INPUT, 2, 1), 204 + INIT_REGMAP_IRQ(AXP152, GPIO0_INPUT, 2, 0), 205 + }; 235 206 236 207 static const struct regmap_irq axp20x_regmap_irqs[] = { 237 208 INIT_REGMAP_IRQ(AXP20X, ACIN_OVER_V, 0, 7), ··· 362 293 }; 363 294 364 295 static const struct of_device_id axp20x_of_match[] = { 296 + { .compatible = "x-powers,axp152", .data = (void *) AXP152_ID }, 365 297 { .compatible = "x-powers,axp202", .data = (void *) AXP202_ID }, 366 298 { .compatible = "x-powers,axp209", .data = (void *) AXP209_ID }, 367 299 { .compatible = "x-powers,axp221", .data = (void *) AXP221_ID }, ··· 386 316 { }, 387 317 }; 388 318 MODULE_DEVICE_TABLE(acpi, axp20x_acpi_match); 319 + 320 + static const struct regmap_irq_chip axp152_regmap_irq_chip = { 321 + .name = "axp152_irq_chip", 322 + .status_base = AXP152_IRQ1_STATE, 323 + .ack_base = AXP152_IRQ1_STATE, 324 + .mask_base = AXP152_IRQ1_EN, 325 + .mask_invert = true, 326 + .init_ack_masked = true, 327 + .irqs = axp152_regmap_irqs, 328 + .num_irqs = ARRAY_SIZE(axp152_regmap_irqs), 329 + .num_regs = 3, 330 + }; 389 331 390 332 static const struct regmap_irq_chip axp20x_regmap_irq_chip = { 391 333 .name = "axp20x_irq_chip", ··· 439 357 440 358 static struct mfd_cell axp20x_cells[] = { 441 359 { 442 - .name = "axp20x-pek", 443 - .num_resources = ARRAY_SIZE(axp20x_pek_resources), 444 - .resources = axp20x_pek_resources, 360 + .name = "axp20x-pek", 361 + .num_resources = ARRAY_SIZE(axp20x_pek_resources), 362 + .resources = axp20x_pek_resources, 445 363 }, { 446 - .name = "axp20x-regulator", 364 + .name = "axp20x-regulator", 365 + }, { 366 + .name = "axp20x-usb-power-supply", 367 + .of_compatible = "x-powers,axp202-usb-power-supply", 368 + .num_resources = ARRAY_SIZE(axp20x_usb_power_supply_resources), 369 + .resources = axp20x_usb_power_supply_resources, 447 370 }, 448 371 }; 449 372 ··· 459 372 .resources = axp22x_pek_resources, 460 373 }, { 461 374 .name = "axp20x-regulator", 375 + }, 376 + }; 377 + 378 + static struct mfd_cell axp152_cells[] = { 379 + { 380 + .name = "axp20x-pek", 381 + .num_resources = ARRAY_SIZE(axp152_pek_resources), 382 + .resources = axp152_pek_resources, 462 383 }, 463 384 }; 464 385 ··· 608 513 } 609 514 610 515 switch (axp20x->variant) { 516 + case AXP152_ID: 517 + axp20x->nr_cells = ARRAY_SIZE(axp152_cells); 518 + axp20x->cells = axp152_cells; 519 + axp20x->regmap_cfg = &axp152_regmap_config; 520 + axp20x->regmap_irq_chip = &axp152_regmap_irq_chip; 521 + break; 611 522 case AXP202_ID: 612 523 case AXP209_ID: 613 524 axp20x->nr_cells = ARRAY_SIZE(axp20x_cells); ··· 714 613 static struct i2c_driver axp20x_i2c_driver = { 715 614 .driver = { 716 615 .name = "axp20x", 717 - .owner = THIS_MODULE, 718 616 .of_match_table = of_match_ptr(axp20x_of_match), 719 617 .acpi_match_table = ACPI_PTR(axp20x_acpi_match), 720 618 },
-1
drivers/mfd/bcm590xx.c
··· 117 117 static struct i2c_driver bcm590xx_i2c_driver = { 118 118 .driver = { 119 119 .name = "bcm590xx", 120 - .owner = THIS_MODULE, 121 120 .of_match_table = of_match_ptr(bcm590xx_of_match), 122 121 }, 123 122 .probe = bcm590xx_i2c_probe,
-1
drivers/mfd/cros_ec_i2c.c
··· 353 353 static struct i2c_driver cros_ec_driver = { 354 354 .driver = { 355 355 .name = "cros-ec-i2c", 356 - .owner = THIS_MODULE, 357 356 .pm = &cros_ec_i2c_pm_ops, 358 357 }, 359 358 .probe = cros_ec_i2c_probe,
+7
drivers/mfd/cros_ec_spi.c
··· 701 701 static SIMPLE_DEV_PM_OPS(cros_ec_spi_pm_ops, cros_ec_spi_suspend, 702 702 cros_ec_spi_resume); 703 703 704 + static const struct of_device_id cros_ec_spi_of_match[] = { 705 + { .compatible = "google,cros-ec-spi", }, 706 + { /* sentinel */ }, 707 + }; 708 + MODULE_DEVICE_TABLE(of, cros_ec_spi_of_match); 709 + 704 710 static const struct spi_device_id cros_ec_spi_id[] = { 705 711 { "cros-ec-spi", 0 }, 706 712 { } ··· 716 710 static struct spi_driver cros_ec_driver_spi = { 717 711 .driver = { 718 712 .name = "cros-ec-spi", 713 + .of_match_table = of_match_ptr(cros_ec_spi_of_match), 719 714 .owner = THIS_MODULE, 720 715 .pm = &cros_ec_spi_pm_ops, 721 716 },
-1
drivers/mfd/da903x.c
··· 550 550 static struct i2c_driver da903x_driver = { 551 551 .driver = { 552 552 .name = "da903x", 553 - .owner = THIS_MODULE, 554 553 }, 555 554 .probe = da903x_probe, 556 555 .remove = da903x_remove,
-1
drivers/mfd/da9052-i2c.c
··· 195 195 .id_table = da9052_i2c_id, 196 196 .driver = { 197 197 .name = "da9052", 198 - .owner = THIS_MODULE, 199 198 #ifdef CONFIG_OF 200 199 .of_match_table = dialog_dt_ids, 201 200 #endif
-1
drivers/mfd/da9055-i2c.c
··· 79 79 .id_table = da9055_i2c_id, 80 80 .driver = { 81 81 .name = "da9055-pmic", 82 - .owner = THIS_MODULE, 83 82 .of_match_table = of_match_ptr(da9055_of_match), 84 83 }, 85 84 };
+533
drivers/mfd/da9062-core.c
··· 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 + 33 + static 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 + 95 + static 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 + 105 + static struct resource da9062_core_resources[] = { 106 + DEFINE_RES_NAMED(DA9062_IRQ_VDD_WARN, 1, "VDD_WARN", IORESOURCE_IRQ), 107 + }; 108 + 109 + static struct resource da9062_regulators_resources[] = { 110 + DEFINE_RES_NAMED(DA9062_IRQ_LDO_LIM, 1, "LDO_LIM", IORESOURCE_IRQ), 111 + }; 112 + 113 + static struct resource da9062_thermal_resources[] = { 114 + DEFINE_RES_NAMED(DA9062_IRQ_TEMP, 1, "THERMAL", IORESOURCE_IRQ), 115 + }; 116 + 117 + static struct resource da9062_wdt_resources[] = { 118 + DEFINE_RES_NAMED(DA9062_IRQ_WDG_WARN, 1, "WD_WARN", IORESOURCE_IRQ), 119 + }; 120 + 121 + static 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 + 126 + static struct resource da9062_onkey_resources[] = { 127 + DEFINE_RES_NAMED(DA9062_IRQ_ONKEY, 1, "ONKEY", IORESOURCE_IRQ), 128 + }; 129 + 130 + static 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 + 167 + static 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 + 201 + int 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 + 237 + static 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 + 316 + static 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 + 383 + static 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 + 399 + static 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 + 404 + static 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 + 409 + static 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 + 414 + static 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 + 426 + static 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 + 438 + static 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 + 497 + static 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 + 507 + static const struct i2c_device_id da9062_i2c_id[] = { 508 + { "da9062", 0 }, 509 + { }, 510 + }; 511 + MODULE_DEVICE_TABLE(i2c, da9062_i2c_id); 512 + 513 + static const struct of_device_id da9062_dt_ids[] = { 514 + { .compatible = "dlg,da9062", }, 515 + { } 516 + }; 517 + MODULE_DEVICE_TABLE(of, da9062_dt_ids); 518 + 519 + static 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 + 529 + module_i2c_driver(da9062_i2c_driver); 530 + 531 + MODULE_DESCRIPTION("Core device driver for Dialog DA9062"); 532 + MODULE_AUTHOR("Steve Twiss <stwiss.opensource@diasemi.com>"); 533 + MODULE_LICENSE("GPL");
-1
drivers/mfd/da9063-i2c.c
··· 264 264 static struct i2c_driver da9063_i2c_driver = { 265 265 .driver = { 266 266 .name = "da9063", 267 - .owner = THIS_MODULE, 268 267 .of_match_table = of_match_ptr(da9063_dt_ids), 269 268 }, 270 269 .probe = da9063_i2c_probe,
+4
drivers/mfd/da9063-irq.c
··· 77 77 .reg_offset = DA9063_REG_EVENT_B_OFFSET, 78 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 84 [DA9063_IRQ_VDD_MON] = { 81 85 .reg_offset = DA9063_REG_EVENT_B_OFFSET, 82 86 .mask = DA9063_M_VDD_MON,
-1
drivers/mfd/db8500-prcmu.c
··· 2654 2654 { 2655 2655 irq_set_chip_and_handler(virq, &prcmu_irq_chip, 2656 2656 handle_simple_irq); 2657 - set_irq_flags(virq, IRQF_VALID); 2658 2657 2659 2658 return 0; 2660 2659 }
+3 -8
drivers/mfd/ezx-pcap.c
··· 207 207 208 208 static 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 212 desc->irq_data.chip->irq_ack(&desc->irq_data); 213 213 queue_work(pcap->workqueue, &pcap->isr_work); ··· 463 463 for (i = pcap->irq_base; i < (pcap->irq_base + PCAP_NIRQS); i++) { 464 464 irq_set_chip_and_handler(i, &pcap_irq_chip, handle_simple_irq); 465 465 irq_set_chip_data(i, pcap); 466 - #ifdef CONFIG_ARM 467 - set_irq_flags(i, IRQF_VALID); 468 - #else 469 - irq_set_noprobe(i); 470 - #endif 466 + irq_clear_status_flags(i, IRQ_NOREQUEST | IRQ_NOPROBE); 471 467 } 472 468 473 469 /* mask/ack all PCAP interrupts */ ··· 472 476 pcap->msr = PCAP_MASK_ALL_INTERRUPT; 473 477 474 478 irq_set_irq_type(spi->irq, IRQ_TYPE_EDGE_RISING); 475 - irq_set_handler_data(spi->irq, pcap); 476 - irq_set_chained_handler(spi->irq, pcap_irq_handler); 479 + irq_set_chained_handler_and_data(spi->irq, pcap_irq_handler, pcap); 477 480 irq_set_irq_wake(spi->irq, 1); 478 481 479 482 /* ADC */
+4 -4
drivers/mfd/htc-egpio.c
··· 350 350 irq_set_chip_and_handler(irq, &egpio_muxed_chip, 351 351 handle_simple_irq); 352 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 355 irq_set_irq_type(ei->chained_irq, IRQ_TYPE_EDGE_RISING); 356 - irq_set_handler_data(ei->chained_irq, ei); 357 - irq_set_chained_handler(ei->chained_irq, egpio_handler); 356 + irq_set_chained_handler_and_data(ei->chained_irq, 357 + egpio_handler, ei); 358 358 ack_irqs(ei); 359 359 360 360 device_init_wakeup(&pdev->dev, 1); ··· 376 376 irq_end = ei->irq_start + ei->nirqs; 377 377 for (irq = ei->irq_start; irq < irq_end; irq++) { 378 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 381 irq_set_chained_handler(ei->chained_irq, NULL); 382 382 device_init_wakeup(&pdev->dev, 0);
+1 -5
drivers/mfd/htc-i2cpld.c
··· 330 330 irq_set_chip_and_handler(irq, &htcpld_muxed_chip, 331 331 handle_simple_irq); 332 332 irq_set_chip_data(irq, chip); 333 - #ifdef CONFIG_ARM 334 - set_irq_flags(irq, IRQF_VALID | IRQF_PROBE); 335 - #else 336 - irq_set_probe(irq); 337 - #endif 333 + irq_clear_status_flags(irq, IRQ_NOREQUEST | IRQ_NOPROBE); 338 334 } 339 335 340 336 return ret;
+1 -2
drivers/mfd/intel_soc_pmic_core.c
··· 147 147 MODULE_DEVICE_TABLE(i2c, intel_soc_pmic_i2c_id); 148 148 149 149 #if defined(CONFIG_ACPI) 150 - static struct acpi_device_id intel_soc_pmic_acpi_match[] = { 150 + static const struct acpi_device_id intel_soc_pmic_acpi_match[] = { 151 151 {"INT33FD", (kernel_ulong_t)&intel_soc_pmic_config_crc}, 152 152 { }, 153 153 }; ··· 157 157 static struct i2c_driver intel_soc_pmic_i2c_driver = { 158 158 .driver = { 159 159 .name = "intel_soc_pmic_i2c", 160 - .owner = THIS_MODULE, 161 160 .pm = &intel_soc_pmic_pm_ops, 162 161 .acpi_match_table = ACPI_PTR(intel_soc_pmic_acpi_match), 163 162 },
+9 -29
drivers/mfd/ipaq-micro.c
··· 53 53 tx->buf[bp++] = checksum; 54 54 tx->len = bp; 55 55 tx->index = 0; 56 - print_hex_dump(KERN_DEBUG, "data: ", DUMP_PREFIX_OFFSET, 16, 1, 57 - tx->buf, tx->len, true); 56 + print_hex_dump_debug("data: ", DUMP_PREFIX_OFFSET, 16, 1, 57 + tx->buf, tx->len, true); 58 58 59 59 /* Enable interrupt */ 60 60 val = readl(micro->base + UTCR3); ··· 242 242 return data[1] << 8 | data[0]; 243 243 } 244 244 245 - static void ipaq_micro_eeprom_dump(struct ipaq_micro *micro) 245 + static void __init ipaq_micro_eeprom_dump(struct ipaq_micro *micro) 246 246 { 247 247 u8 dump[256]; 248 248 char *str; ··· 250 250 ipaq_micro_eeprom_read(micro, 0, 128, dump); 251 251 str = ipaq_micro_str(dump, 10); 252 252 if (str) { 253 - dev_info(micro->dev, "HM version %s\n", str); 253 + dev_info(micro->dev, "HW version %s\n", str); 254 254 kfree(str); 255 255 } 256 256 str = ipaq_micro_str(dump+10, 40); ··· 281 281 dev_info(micro->dev, "RAM size: %u KiB\n", ipaq_micro_to_u16(dump+92)); 282 282 dev_info(micro->dev, "screen: %u x %u\n", 283 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, 285 - dump, 256, true); 284 + print_hex_dump_debug("eeprom: ", DUMP_PREFIX_OFFSET, 16, 1, 285 + dump, 256, true); 286 286 287 287 } 288 288 ··· 386 386 return 0; 387 387 } 388 388 389 - static int micro_probe(struct platform_device *pdev) 389 + static int __init micro_probe(struct platform_device *pdev) 390 390 { 391 391 struct ipaq_micro *micro; 392 392 struct resource *res; ··· 448 448 return 0; 449 449 } 450 450 451 - static 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 - 466 451 static const struct dev_pm_ops micro_dev_pm_ops = { 467 452 SET_SYSTEM_SLEEP_PM_OPS(NULL, micro_resume) 468 453 }; ··· 456 471 .driver = { 457 472 .name = "ipaq-h3xxx-micro", 458 473 .pm = &micro_dev_pm_ops, 474 + .suppress_bind_attrs = true, 459 475 }, 460 - .probe = micro_probe, 461 - .remove = micro_remove, 462 - /* .shutdown = micro_suspend, // FIXME */ 463 476 }; 464 - module_platform_driver(micro_device_driver); 465 - 466 - MODULE_LICENSE("GPL"); 467 - MODULE_DESCRIPTION("driver for iPAQ Atmel micro core and backlight"); 477 + builtin_platform_driver_probe(micro_device_driver, micro_probe);
+4 -5
drivers/mfd/jz4740-adc.c
··· 273 273 ct->chip.irq_unmask = irq_gc_mask_clr_bit; 274 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 279 adc->gc = gc; 279 280 280 - irq_set_handler_data(adc->irq, gc); 281 - irq_set_chained_handler(adc->irq, jz4740_adc_irq_demux); 281 + irq_set_chained_handler_and_data(adc->irq, jz4740_adc_irq_demux, gc); 282 282 283 283 writeb(0x00, adc->base + JZ_REG_ADC_ENABLE); 284 284 writeb(0xff, adc->base + JZ_REG_ADC_CTRL); ··· 308 308 309 309 irq_remove_generic_chip(adc->gc, IRQ_MSK(5), IRQ_NOPROBE | IRQ_LEVEL, 0); 310 310 kfree(adc->gc); 311 - irq_set_handler_data(adc->irq, NULL); 312 - irq_set_chained_handler(adc->irq, NULL); 311 + irq_set_chained_handler_and_data(adc->irq, NULL, NULL); 313 312 314 313 iounmap(adc->base); 315 314 release_mem_region(adc->mem->start, resource_size(adc->mem));
+16
drivers/mfd/kempld-core.c
··· 501 501 502 502 static 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 512 .ident = "BHL6", 505 513 .matches = { 506 514 DMI_MATCH(DMI_BOARD_VENDOR, "Kontron"), ··· 521 513 .matches = { 522 514 DMI_MATCH(DMI_BOARD_VENDOR, "Kontron"), 523 515 DMI_MATCH(DMI_BOARD_NAME, "COMe-cBL6"), 516 + }, 517 + .driver_data = (void *)&kempld_platform_data_generic, 518 + .callback = kempld_create_platform_device, 519 + }, { 520 + .ident = "CBW6", 521 + .matches = { 522 + DMI_MATCH(DMI_BOARD_VENDOR, "Kontron"), 523 + DMI_MATCH(DMI_BOARD_NAME, "COMe-cBW6"), 524 524 }, 525 525 .driver_data = (void *)&kempld_platform_data_generic, 526 526 .callback = kempld_create_platform_device,
-1
drivers/mfd/lm3533-core.c
··· 640 640 static struct i2c_driver lm3533_i2c_driver = { 641 641 .driver = { 642 642 .name = "lm3533", 643 - .owner = THIS_MODULE, 644 643 }, 645 644 .id_table = lm3533_i2c_ids, 646 645 .probe = lm3533_i2c_probe,
-1
drivers/mfd/lp3943.c
··· 154 154 .remove = lp3943_remove, 155 155 .driver = { 156 156 .name = "lp3943", 157 - .owner = THIS_MODULE, 158 157 .of_match_table = of_match_ptr(lp3943_of_match), 159 158 }, 160 159 .id_table = lp3943_ids,
-5
drivers/mfd/lp8788-irq.c
··· 141 141 irq_set_chip_data(virq, irqd); 142 142 irq_set_chip_and_handler(virq, chip, handle_edge_irq); 143 143 irq_set_nested_thread(virq, 1); 144 - 145 - #ifdef CONFIG_ARM 146 - set_irq_flags(virq, IRQF_VALID); 147 - #else 148 144 irq_set_noprobe(virq); 149 - #endif 150 145 151 146 return 0; 152 147 }
-1
drivers/mfd/lp8788.c
··· 221 221 static struct i2c_driver lp8788_driver = { 222 222 .driver = { 223 223 .name = "lp8788", 224 - .owner = THIS_MODULE, 225 224 }, 226 225 .probe = lp8788_probe, 227 226 .remove = lp8788_remove,
+29 -3
drivers/mfd/lpc_ich.c
··· 66 66 #include <linux/pci.h> 67 67 #include <linux/mfd/core.h> 68 68 #include <linux/mfd/lpc_ich.h> 69 + #include <linux/platform_data/itco_wdt.h> 69 70 70 71 #define ACPIBASE 0x40 71 72 #define ACPIBASE_GPE_OFF 0x28 ··· 836 835 priv->actrl_pbase_save = reg_save; 837 836 } 838 837 839 - static void lpc_ich_finalize_cell(struct pci_dev *dev, struct mfd_cell *cell) 838 + static int lpc_ich_finalize_wdt_cell(struct pci_dev *dev) 839 + { 840 + struct itco_wdt_platform_data *pdata; 841 + struct lpc_ich_priv *priv = pci_get_drvdata(dev); 842 + struct lpc_ich_info *info; 843 + struct mfd_cell *cell = &lpc_ich_cells[LPC_WDT]; 844 + 845 + pdata = devm_kzalloc(&dev->dev, sizeof(*pdata), GFP_KERNEL); 846 + if (!pdata) 847 + return -ENOMEM; 848 + 849 + info = &lpc_chipset_info[priv->chipset]; 850 + 851 + pdata->version = info->iTCO_version; 852 + strlcpy(pdata->name, info->name, sizeof(pdata->name)); 853 + 854 + cell->platform_data = pdata; 855 + cell->pdata_size = sizeof(*pdata); 856 + return 0; 857 + } 858 + 859 + static void lpc_ich_finalize_gpio_cell(struct pci_dev *dev) 840 860 { 841 861 struct lpc_ich_priv *priv = pci_get_drvdata(dev); 862 + struct mfd_cell *cell = &lpc_ich_cells[LPC_GPIO]; 842 863 843 864 cell->platform_data = &lpc_chipset_info[priv->chipset]; 844 865 cell->pdata_size = sizeof(struct lpc_ich_info); ··· 956 933 lpc_chipset_info[priv->chipset].use_gpio = ret; 957 934 lpc_ich_enable_gpio_space(dev); 958 935 959 - lpc_ich_finalize_cell(dev, &lpc_ich_cells[LPC_GPIO]); 936 + lpc_ich_finalize_gpio_cell(dev); 960 937 ret = mfd_add_devices(&dev->dev, PLATFORM_DEVID_AUTO, 961 938 &lpc_ich_cells[LPC_GPIO], 1, NULL, 0, NULL); 962 939 ··· 1030 1007 res->end = base_addr + ACPIBASE_PMC_END; 1031 1008 } 1032 1009 1033 - lpc_ich_finalize_cell(dev, &lpc_ich_cells[LPC_WDT]); 1010 + ret = lpc_ich_finalize_wdt_cell(dev); 1011 + if (ret) 1012 + goto wdt_done; 1013 + 1034 1014 ret = mfd_add_devices(&dev->dev, PLATFORM_DEVID_AUTO, 1035 1015 &lpc_ich_cells[LPC_WDT], 1, NULL, 0, NULL); 1036 1016
-1
drivers/mfd/max14577.c
··· 532 532 static struct i2c_driver max14577_i2c_driver = { 533 533 .driver = { 534 534 .name = "max14577", 535 - .owner = THIS_MODULE, 536 535 .pm = &max14577_pm, 537 536 .of_match_table = max14577_dt_match, 538 537 },
-1
drivers/mfd/max77686.c
··· 391 391 static struct i2c_driver max77686_i2c_driver = { 392 392 .driver = { 393 393 .name = "max77686", 394 - .owner = THIS_MODULE, 395 394 .pm = &max77686_pm, 396 395 .of_match_table = of_match_ptr(max77686_pmic_dt_match), 397 396 },
-1
drivers/mfd/max77693.c
··· 373 373 static struct i2c_driver max77693_i2c_driver = { 374 374 .driver = { 375 375 .name = "max77693", 376 - .owner = THIS_MODULE, 377 376 .pm = &max77693_pm, 378 377 .of_match_table = of_match_ptr(max77693_dt_match), 379 378 },
-1
drivers/mfd/max8907.c
··· 321 321 static struct i2c_driver max8907_i2c_driver = { 322 322 .driver = { 323 323 .name = "max8907", 324 - .owner = THIS_MODULE, 325 324 .of_match_table = of_match_ptr(max8907_of_match), 326 325 }, 327 326 .probe = max8907_i2c_probe,
+1 -4
drivers/mfd/max8925-core.c
··· 650 650 irq_set_chip_data(virq, d->host_data); 651 651 irq_set_chip_and_handler(virq, &max8925_irq_chip, handle_edge_irq); 652 652 irq_set_nested_thread(virq, 1); 653 - #ifdef CONFIG_ARM 654 - set_irq_flags(virq, IRQF_VALID); 655 - #else 656 653 irq_set_noprobe(virq); 657 - #endif 654 + 658 655 return 0; 659 656 } 660 657
-1
drivers/mfd/max8925-i2c.c
··· 245 245 static struct i2c_driver max8925_driver = { 246 246 .driver = { 247 247 .name = "max8925", 248 - .owner = THIS_MODULE, 249 248 .pm = &max8925_pm_ops, 250 249 .of_match_table = max8925_dt_ids, 251 250 },
+8 -12
drivers/mfd/max8997-irq.c
··· 113 113 114 114 static 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 118 mutex_lock(&max8997->irqlock); 119 119 } 120 120 121 121 static 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 124 int i; 125 125 126 126 for (i = 0; i < MAX8997_IRQ_GROUP_NR; i++) { ··· 140 140 } 141 141 142 142 static const inline struct max8997_irq_data * 143 - irq_to_max8997_irq(struct max8997_dev *max8997, int irq) 143 + irq_to_max8997_irq(struct max8997_dev *max8997, struct irq_data *data) 144 144 { 145 - struct irq_data *data = irq_get_irq_data(irq); 146 145 return &max8997_irqs[data->hwirq]; 147 146 } 148 147 149 148 static 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 151 const struct max8997_irq_data *irq_data = irq_to_max8997_irq(max8997, 153 - data->irq); 152 + data); 154 153 155 154 max8997->irq_masks_cur[irq_data->group] |= irq_data->mask; 156 155 } 157 156 158 157 static 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 160 const struct max8997_irq_data *irq_data = irq_to_max8997_irq(max8997, 162 - data->irq); 161 + data); 163 162 164 163 max8997->irq_masks_cur[irq_data->group] &= ~irq_data->mask; 165 164 } ··· 294 295 irq_set_chip_data(irq, max8997); 295 296 irq_set_chip_and_handler(irq, &max8997_irq_chip, handle_edge_irq); 296 297 irq_set_nested_thread(irq, 1); 297 - #ifdef CONFIG_ARM 298 - set_irq_flags(irq, IRQF_VALID); 299 - #else 300 298 irq_set_noprobe(irq); 301 - #endif 299 + 302 300 return 0; 303 301 } 304 302
-1
drivers/mfd/max8997.c
··· 508 508 static struct i2c_driver max8997_i2c_driver = { 509 509 .driver = { 510 510 .name = "max8997", 511 - .owner = THIS_MODULE, 512 511 .pm = &max8997_pm, 513 512 .of_match_table = of_match_ptr(max8997_pmic_dt_match), 514 513 },
+4 -10
drivers/mfd/max8998-irq.c
··· 98 98 }; 99 99 100 100 static inline struct max8998_irq_data * 101 - irq_to_max8998_irq(struct max8998_dev *max8998, int irq) 101 + irq_to_max8998_irq(struct max8998_dev *max8998, struct irq_data *data) 102 102 { 103 - struct irq_data *data = irq_get_irq_data(irq); 104 103 return &max8998_irqs[data->hwirq]; 105 104 } 106 105 ··· 133 134 static void max8998_irq_unmask(struct irq_data *data) 134 135 { 135 136 struct max8998_dev *max8998 = irq_data_get_irq_chip_data(data); 136 - struct max8998_irq_data *irq_data = irq_to_max8998_irq(max8998, 137 - data->irq); 137 + struct max8998_irq_data *irq_data = irq_to_max8998_irq(max8998, data); 138 138 139 139 max8998->irq_masks_cur[irq_data->reg - 1] &= ~irq_data->mask; 140 140 } ··· 141 143 static void max8998_irq_mask(struct irq_data *data) 142 144 { 143 145 struct max8998_dev *max8998 = irq_data_get_irq_chip_data(data); 144 - struct max8998_irq_data *irq_data = irq_to_max8998_irq(max8998, 145 - data->irq); 146 + struct max8998_irq_data *irq_data = irq_to_max8998_irq(max8998, data); 146 147 147 148 max8998->irq_masks_cur[irq_data->reg - 1] |= irq_data->mask; 148 149 } ··· 203 206 irq_set_chip_data(irq, max8998); 204 207 irq_set_chip_and_handler(irq, &max8998_irq_chip, handle_edge_irq); 205 208 irq_set_nested_thread(irq, 1); 206 - #ifdef CONFIG_ARM 207 - set_irq_flags(irq, IRQF_VALID); 208 - #else 209 209 irq_set_noprobe(irq); 210 - #endif 210 + 211 211 return 0; 212 212 } 213 213
-1
drivers/mfd/max8998.c
··· 377 377 static struct i2c_driver max8998_i2c_driver = { 378 378 .driver = { 379 379 .name = "max8998", 380 - .owner = THIS_MODULE, 381 380 .pm = &max8998_pm, 382 381 .of_match_table = of_match_ptr(max8998_dt_match), 383 382 },
-1
drivers/mfd/mc13xxx-i2c.c
··· 96 96 static struct i2c_driver mc13xxx_i2c_driver = { 97 97 .id_table = mc13xxx_i2c_device_id, 98 98 .driver = { 99 - .owner = THIS_MODULE, 100 99 .name = "mc13xxx", 101 100 .of_match_table = mc13xxx_dt_ids, 102 101 },
+53 -8
drivers/mfd/mt6397-core.c
··· 60 60 61 61 static 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 65 mutex_lock(&mt6397->irqlock); 66 66 } 67 67 68 68 static 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 72 regmap_write(mt6397->regmap, MT6397_INT_CON0, mt6397->irq_masks_cur[0]); 73 73 regmap_write(mt6397->regmap, MT6397_INT_CON1, mt6397->irq_masks_cur[1]); ··· 77 77 78 78 static 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 81 int shift = data->hwirq & 0xf; 82 82 int reg = data->hwirq >> 4; 83 83 ··· 86 86 87 87 static 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 90 int shift = data->hwirq & 0xf; 91 91 int reg = data->hwirq >> 4; 92 92 93 93 mt6397->irq_masks_cur[reg] |= BIT(shift); 94 94 } 95 + 96 + #ifdef CONFIG_PM_SLEEP 97 + static 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 95 113 96 114 static struct irq_chip mt6397_irq_chip = { 97 115 .name = "mt6397-irq", ··· 117 99 .irq_bus_sync_unlock = mt6397_irq_sync_unlock, 118 100 .irq_enable = mt6397_irq_enable, 119 101 .irq_disable = mt6397_irq_disable, 102 + .irq_set_wake = mt6397_irq_set_wake, 120 103 }; 121 104 122 105 static void mt6397_irq_handle_reg(struct mt6397_chip *mt6397, int reg, ··· 161 142 irq_set_chip_data(irq, mt6397); 162 143 irq_set_chip_and_handler(irq, &mt6397_irq_chip, handle_level_irq); 163 144 irq_set_nested_thread(irq, 1); 164 - #ifdef CONFIG_ARM 165 - set_irq_flags(irq, IRQF_VALID); 166 - #else 167 145 irq_set_noprobe(irq); 168 - #endif 169 146 170 147 return 0; 171 148 } ··· 197 182 198 183 return 0; 199 184 } 185 + 186 + #ifdef CONFIG_PM_SLEEP 187 + static int mt6397_irq_suspend(struct device *dev) 188 + { 189 + struct mt6397_chip *chip = dev_get_drvdata(dev); 190 + 191 + regmap_write(chip->regmap, MT6397_INT_CON0, chip->wake_mask[0]); 192 + regmap_write(chip->regmap, MT6397_INT_CON1, chip->wake_mask[1]); 193 + 194 + enable_irq_wake(chip->irq); 195 + 196 + return 0; 197 + } 198 + 199 + static int mt6397_irq_resume(struct device *dev) 200 + { 201 + struct mt6397_chip *chip = dev_get_drvdata(dev); 202 + 203 + regmap_write(chip->regmap, MT6397_INT_CON0, chip->irq_masks_cur[0]); 204 + regmap_write(chip->regmap, MT6397_INT_CON1, chip->irq_masks_cur[1]); 205 + 206 + disable_irq_wake(chip->irq); 207 + 208 + return 0; 209 + } 210 + #endif 211 + 212 + static SIMPLE_DEV_PM_OPS(mt6397_pm_ops, mt6397_irq_suspend, 213 + mt6397_irq_resume); 200 214 201 215 static int mt6397_probe(struct platform_device *pdev) 202 216 { ··· 281 237 .driver = { 282 238 .name = "mt6397", 283 239 .of_match_table = of_match_ptr(mt6397_of_match), 240 + .pm = &mt6397_pm_ops, 284 241 }, 285 242 }; 286 243
-1
drivers/mfd/palmas.c
··· 719 719 .driver = { 720 720 .name = "palmas", 721 721 .of_match_table = of_palmas_match_tbl, 722 - .owner = THIS_MODULE, 723 722 }, 724 723 .probe = palmas_i2c_probe, 725 724 .remove = palmas_i2c_remove,
+42 -10
drivers/mfd/pm8921-core.c
··· 236 236 return pm8xxx_config_irq(chip, block, config); 237 237 } 238 238 239 + static 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)); 270 + bail: 271 + spin_unlock(&chip->pm_irq_lock); 272 + 273 + return rc; 274 + } 275 + 239 276 static struct irq_chip pm8xxx_irq_chip = { 240 277 .name = "pm8xxx", 241 278 .irq_mask_ack = pm8xxx_irq_mask_ack, 242 279 .irq_unmask = pm8xxx_irq_unmask, 243 280 .irq_set_type = pm8xxx_irq_set_type, 281 + .irq_get_irqchip_state = pm8xxx_irq_get_irqchip_state, 244 282 .flags = IRQCHIP_MASK_ON_SUSPEND | IRQCHIP_SKIP_SET_WAKE, 245 283 }; 246 284 ··· 289 251 290 252 irq_set_chip_and_handler(irq, &pm8xxx_irq_chip, handle_level_irq); 291 253 irq_set_chip_data(irq, chip); 292 - #ifdef CONFIG_ARM 293 - set_irq_flags(irq, IRQF_VALID); 294 - #else 295 254 irq_set_noprobe(irq); 296 - #endif 255 + 297 256 return 0; 298 257 } 299 258 ··· 371 336 if (!chip->irqdomain) 372 337 return -ENODEV; 373 338 374 - irq_set_handler_data(irq, chip); 375 - irq_set_chained_handler(irq, pm8xxx_irq_handler); 339 + irq_set_chained_handler_and_data(irq, pm8xxx_irq_handler, chip); 376 340 irq_set_irq_wake(irq, 1); 377 341 378 342 rc = of_platform_populate(pdev->dev.of_node, NULL, NULL, &pdev->dev); 379 343 if (rc) { 380 - irq_set_chained_handler(irq, NULL); 381 - irq_set_handler_data(irq, NULL); 344 + irq_set_chained_handler_and_data(irq, NULL, NULL); 382 345 irq_domain_remove(chip->irqdomain); 383 346 } 384 347 ··· 395 362 struct pm_irq_chip *chip = platform_get_drvdata(pdev); 396 363 397 364 device_for_each_child(&pdev->dev, NULL, pm8921_remove_child); 398 - irq_set_chained_handler(irq, NULL); 399 - irq_set_handler_data(irq, NULL); 365 + irq_set_chained_handler_and_data(irq, NULL, NULL); 400 366 irq_domain_remove(chip->irqdomain); 401 367 402 368 return 0;
+1
drivers/mfd/qcom_rpm.c
··· 149 149 [QCOM_RPM_USB_OTG_SWITCH] = { 210, 125, 82, 1 }, 150 150 [QCOM_RPM_HDMI_SWITCH] = { 211, 126, 83, 1 }, 151 151 [QCOM_RPM_DDR_DMM] = { 212, 127, 84, 2 }, 152 + [QCOM_RPM_QDSS_CLK] = { 214, ~0, 7, 1 }, 152 153 [QCOM_RPM_VDDMIN_GPIO] = { 215, 131, 89, 1 }, 153 154 }; 154 155
+1 -3
drivers/mfd/rc5t583-irq.c
··· 386 386 irq_set_chip_and_handler(__irq, &rc5t583_irq_chip, 387 387 handle_simple_irq); 388 388 irq_set_nested_thread(__irq, 1); 389 - #ifdef CONFIG_ARM 390 - set_irq_flags(__irq, IRQF_VALID); 391 - #endif 389 + irq_clear_status_flags(__irq, IRQ_NOREQUEST); 392 390 } 393 391 394 392 ret = request_threaded_irq(irq, NULL, rc5t583_irq, IRQF_ONESHOT,
-1
drivers/mfd/rc5t583.c
··· 322 322 static struct i2c_driver rc5t583_i2c_driver = { 323 323 .driver = { 324 324 .name = "rc5t583", 325 - .owner = THIS_MODULE, 326 325 }, 327 326 .probe = rc5t583_i2c_probe, 328 327 .remove = rc5t583_i2c_remove,
-1
drivers/mfd/retu-mfd.c
··· 311 311 static struct i2c_driver retu_driver = { 312 312 .driver = { 313 313 .name = "retu-mfd", 314 - .owner = THIS_MODULE, 315 314 }, 316 315 .probe = retu_probe, 317 316 .remove = retu_remove,
+1
drivers/mfd/rt5033.c
··· 124 124 { .compatible = "richtek,rt5033", }, 125 125 { } 126 126 }; 127 + MODULE_DEVICE_TABLE(of, rt5033_dt_match); 127 128 128 129 static struct i2c_driver rt5033_driver = { 129 130 .driver = {
-1
drivers/mfd/sec-core.c
··· 486 486 static struct i2c_driver sec_pmic_driver = { 487 487 .driver = { 488 488 .name = "sec_pmic", 489 - .owner = THIS_MODULE, 490 489 .pm = &sec_pmic_pm_ops, 491 490 .of_match_table = of_match_ptr(sec_dt_match), 492 491 },
-1
drivers/mfd/si476x-i2c.c
··· 873 873 static struct i2c_driver si476x_core_driver = { 874 874 .driver = { 875 875 .name = "si476x-core", 876 - .owner = THIS_MODULE, 877 876 }, 878 877 .probe = si476x_core_probe, 879 878 .remove = si476x_core_remove,
-1
drivers/mfd/smsc-ece1099.c
··· 98 98 static struct i2c_driver smsc_i2c_driver = { 99 99 .driver = { 100 100 .name = "smsc", 101 - .owner = THIS_MODULE, 102 101 }, 103 102 .probe = smsc_i2c_probe, 104 103 .remove = smsc_i2c_remove,
-1
drivers/mfd/stmpe-i2c.c
··· 112 112 static struct i2c_driver stmpe_i2c_driver = { 113 113 .driver = { 114 114 .name = "stmpe-i2c", 115 - .owner = THIS_MODULE, 116 115 #ifdef CONFIG_PM 117 116 .pm = &stmpe_dev_pm_ops, 118 117 #endif
+13
drivers/mfd/stmpe-spi.c
··· 11 11 #include <linux/interrupt.h> 12 12 #include <linux/kernel.h> 13 13 #include <linux/module.h> 14 + #include <linux/of.h> 14 15 #include <linux/types.h> 15 16 #include "stmpe.h" 16 17 ··· 109 108 return stmpe_remove(stmpe); 110 109 } 111 110 111 + static const struct of_device_id stmpe_spi_of_match[] = { 112 + { .compatible = "st,stmpe610", }, 113 + { .compatible = "st,stmpe801", }, 114 + { .compatible = "st,stmpe811", }, 115 + { .compatible = "st,stmpe1601", }, 116 + { .compatible = "st,stmpe2401", }, 117 + { .compatible = "st,stmpe2403", }, 118 + { /* sentinel */ }, 119 + }; 120 + MODULE_DEVICE_TABLE(of, stmpe_spi_of_match); 121 + 112 122 static const struct spi_device_id stmpe_spi_id[] = { 113 123 { "stmpe610", STMPE610 }, 114 124 { "stmpe801", STMPE801 }, ··· 134 122 static struct spi_driver stmpe_spi_driver = { 135 123 .driver = { 136 124 .name = "stmpe-spi", 125 + .of_match_table = of_match_ptr(stmpe_spi_of_match), 137 126 .owner = THIS_MODULE, 138 127 #ifdef CONFIG_PM 139 128 .pm = &stmpe_dev_pm_ops,
-7
drivers/mfd/stmpe.c
··· 971 971 irq_set_chip_data(virq, stmpe); 972 972 irq_set_chip_and_handler(virq, chip, handle_edge_irq); 973 973 irq_set_nested_thread(virq, 1); 974 - #ifdef CONFIG_ARM 975 - set_irq_flags(virq, IRQF_VALID); 976 - #else 977 974 irq_set_noprobe(virq); 978 - #endif 979 975 980 976 return 0; 981 977 } 982 978 983 979 static 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 981 irq_set_chip_and_handler(virq, NULL, NULL); 989 982 irq_set_chip_data(virq, NULL); 990 983 }
+1
drivers/mfd/stw481x.c
··· 231 231 { "stw481x", 0 }, 232 232 { }, 233 233 }; 234 + MODULE_DEVICE_TABLE(i2c, stw481x_id); 234 235 235 236 static const struct of_device_id stw481x_match[] = { 236 237 { .compatible = "st,stw4810", },
+5 -13
drivers/mfd/t7l66xb.c
··· 187 187 /* Handle the T7L66XB interrupt mux */ 188 188 static 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 191 unsigned int isr; 192 192 unsigned int i, irq_base; 193 193 ··· 246 246 for (irq = irq_base; irq < irq_base + T7L66XB_NR_IRQS; irq++) { 247 247 irq_set_chip_and_handler(irq, &t7l66xb_chip, handle_level_irq); 248 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 251 irq_set_irq_type(t7l66xb->irq, IRQ_TYPE_EDGE_FALLING); 255 - irq_set_handler_data(t7l66xb->irq, t7l66xb); 256 - irq_set_chained_handler(t7l66xb->irq, t7l66xb_irq); 252 + irq_set_chained_handler_and_data(t7l66xb->irq, t7l66xb_irq, t7l66xb); 257 253 } 258 254 259 255 static void t7l66xb_detach_irq(struct platform_device *dev) ··· 259 263 260 264 irq_base = t7l66xb->irq_base; 261 265 262 - irq_set_chained_handler(t7l66xb->irq, NULL); 263 - irq_set_handler_data(t7l66xb->irq, NULL); 266 + irq_set_chained_handler_and_data(t7l66xb->irq, NULL, NULL); 264 267 265 268 for (irq = irq_base; irq < irq_base + T7L66XB_NR_IRQS; irq++) { 266 - #ifdef CONFIG_ARM 267 - set_irq_flags(irq, 0); 268 - #endif 269 269 irq_set_chip(irq, NULL); 270 270 irq_set_chip_data(irq, NULL); 271 271 } ··· 310 318 struct resource *iomem, *rscr; 311 319 int ret; 312 320 313 - if (pdata == NULL) 321 + if (!pdata) 314 322 return -EINVAL; 315 323 316 324 iomem = platform_get_resource(dev, IORESOURCE_MEM, 0); ··· 363 371 364 372 clk_prepare_enable(t7l66xb->clk48m); 365 373 366 - if (pdata && pdata->enable) 374 + if (pdata->enable) 367 375 pdata->enable(dev); 368 376 369 377 /* Mask all interrupts */
-8
drivers/mfd/tc3589x.c
··· 215 215 irq_set_chip_and_handler(virq, &dummy_irq_chip, 216 216 handle_edge_irq); 217 217 irq_set_nested_thread(virq, 1); 218 - #ifdef CONFIG_ARM 219 - set_irq_flags(virq, IRQF_VALID); 220 - #else 221 218 irq_set_noprobe(virq); 222 - #endif 223 219 224 220 return 0; 225 221 } 226 222 227 223 static 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 225 irq_set_chip_and_handler(virq, NULL, NULL); 233 226 irq_set_chip_data(virq, NULL); 234 227 } ··· 485 492 static struct i2c_driver tc3589x_driver = { 486 493 .driver = { 487 494 .name = "tc3589x", 488 - .owner = THIS_MODULE, 489 495 .pm = &tc3589x_dev_pm_ops, 490 496 .of_match_table = of_match_ptr(tc3589x_match), 491 497 },
+6 -7
drivers/mfd/tc6393xb.c
··· 525 525 static void 526 526 tc6393xb_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 529 unsigned int isr; 530 530 unsigned int i, irq_base; 531 531 ··· 586 586 for (irq = irq_base; irq < irq_base + TC6393XB_NR_IRQS; irq++) { 587 587 irq_set_chip_and_handler(irq, &tc6393xb_chip, handle_edge_irq); 588 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 592 irq_set_irq_type(tc6393xb->irq, IRQ_TYPE_EDGE_FALLING); 593 - irq_set_handler_data(tc6393xb->irq, tc6393xb); 594 - irq_set_chained_handler(tc6393xb->irq, tc6393xb_irq); 593 + irq_set_chained_handler_and_data(tc6393xb->irq, tc6393xb_irq, 594 + tc6393xb); 595 595 } 596 596 597 597 static void tc6393xb_detach_irq(struct platform_device *dev) ··· 599 599 struct tc6393xb *tc6393xb = platform_get_drvdata(dev); 600 600 unsigned int irq, irq_base; 601 601 602 - irq_set_chained_handler(tc6393xb->irq, NULL); 603 - irq_set_handler_data(tc6393xb->irq, NULL); 602 + irq_set_chained_handler_and_data(tc6393xb->irq, NULL, NULL); 604 603 605 604 irq_base = tc6393xb->irq_base; 606 605 607 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 608 irq_set_chip(irq, NULL); 610 609 irq_set_chip_data(irq, NULL); 611 610 }
-1
drivers/mfd/tps6507x.c
··· 129 129 static struct i2c_driver tps6507x_i2c_driver = { 130 130 .driver = { 131 131 .name = "tps6507x", 132 - .owner = THIS_MODULE, 133 132 .of_match_table = of_match_ptr(tps6507x_of_match), 134 133 }, 135 134 .probe = tps6507x_i2c_probe,
-1
drivers/mfd/tps65090.c
··· 259 259 static struct i2c_driver tps65090_driver = { 260 260 .driver = { 261 261 .name = "tps65090", 262 - .owner = THIS_MODULE, 263 262 .of_match_table = of_match_ptr(tps65090_of_match), 264 263 }, 265 264 .probe = tps65090_i2c_probe,
+1 -1
drivers/mfd/tps65217.c
··· 156 156 { .compatible = "ti,tps65217", .data = (void *)TPS65217 }, 157 157 { /* sentinel */ }, 158 158 }; 159 + MODULE_DEVICE_TABLE(of, tps65217_of_match); 159 160 160 161 static int tps65217_probe(struct i2c_client *client, 161 162 const struct i2c_device_id *ids) ··· 249 248 static struct i2c_driver tps65217_driver = { 250 249 .driver = { 251 250 .name = "tps65217", 252 - .owner = THIS_MODULE, 253 251 .of_match_table = tps65217_of_match, 254 252 }, 255 253 .id_table = tps65217_id_table,
+1 -1
drivers/mfd/tps65218.c
··· 211 211 { .compatible = "ti,tps65218", }, 212 212 {} 213 213 }; 214 + MODULE_DEVICE_TABLE(of, of_tps65218_match_table); 214 215 215 216 static int tps65218_probe(struct i2c_client *client, 216 217 const struct i2c_device_id *ids) ··· 281 280 static struct i2c_driver tps65218_driver = { 282 281 .driver = { 283 282 .name = "tps65218", 284 - .owner = THIS_MODULE, 285 283 .of_match_table = of_tps65218_match_table, 286 284 }, 287 285 .probe = tps65218_probe,
+2 -10
drivers/mfd/tps6586x.c
··· 52 52 #define TPS6586X_VERSIONCRC 0xcd 53 53 54 54 /* Maximum register */ 55 - #define TPS6586X_MAX_REGISTER (TPS6586X_VERSIONCRC + 1) 55 + #define TPS6586X_MAX_REGISTER TPS6586X_VERSIONCRC 56 56 57 57 struct tps6586x_irq_data { 58 58 u8 mask_reg; ··· 299 299 irq_set_chip_data(virq, tps6586x); 300 300 irq_set_chip_and_handler(virq, &tps6586x_irq_chip, handle_simple_irq); 301 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 302 irq_set_noprobe(virq); 309 - #endif 310 303 311 304 return 0; 312 305 } ··· 460 467 static const struct regmap_config tps6586x_regmap_config = { 461 468 .reg_bits = 8, 462 469 .val_bits = 8, 463 - .max_register = TPS6586X_MAX_REGISTER - 1, 470 + .max_register = TPS6586X_MAX_REGISTER, 464 471 .volatile_reg = is_volatile_reg, 465 472 .cache_type = REGCACHE_RBTREE, 466 473 }; ··· 603 610 static struct i2c_driver tps6586x_driver = { 604 611 .driver = { 605 612 .name = "tps6586x", 606 - .owner = THIS_MODULE, 607 613 .of_match_table = of_match_ptr(tps6586x_of_match), 608 614 }, 609 615 .probe = tps6586x_i2c_probe,
-1
drivers/mfd/tps65910.c
··· 544 544 static struct i2c_driver tps65910_i2c_driver = { 545 545 .driver = { 546 546 .name = "tps65910", 547 - .owner = THIS_MODULE, 548 547 .of_match_table = of_match_ptr(tps65910_of_match), 549 548 }, 550 549 .probe = tps65910_i2c_probe,
-1
drivers/mfd/tps65912-i2c.c
··· 109 109 static struct i2c_driver tps65912_i2c_driver = { 110 110 .driver = { 111 111 .name = "tps65912", 112 - .owner = THIS_MODULE, 113 112 }, 114 113 .probe = tps65912_i2c_probe, 115 114 .remove = tps65912_i2c_remove,
+1 -7
drivers/mfd/tps65912-irq.c
··· 197 197 irq_set_chip_and_handler(cur_irq, &tps65912_irq_chip, 198 198 handle_edge_irq); 199 199 irq_set_nested_thread(cur_irq, 1); 200 - /* ARM needs us to explicitly flag the IRQ as valid 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 200 + irq_clear_status_flags(cur_irq, IRQ_NOREQUEST | IRQ_NOPROBE); 207 201 } 208 202 209 203 ret = request_threaded_irq(irq, NULL, tps65912_irq, flags,
-1
drivers/mfd/tps80031.c
··· 549 549 static struct i2c_driver tps80031_driver = { 550 550 .driver = { 551 551 .name = "tps80031", 552 - .owner = THIS_MODULE, 553 552 }, 554 553 .probe = tps80031_probe, 555 554 .remove = tps80031_remove,
+1 -10
drivers/mfd/twl4030-irq.c
··· 419 419 420 420 static inline void activate_irq(int irq) 421 421 { 422 - #ifdef CONFIG_ARM 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 422 + irq_clear_status_flags(irq, IRQ_NOREQUEST | IRQ_NOPROBE); 432 423 } 433 424 434 425 /*----------------------------------------------------------------------*/
+1 -14
drivers/mfd/twl6030-irq.c
··· 231 231 232 232 static 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 236 if (on) 237 237 atomic_inc(&pdata->wakeirqs); ··· 352 352 irq_set_chip_and_handler(virq, &pdata->irq_chip, handle_simple_irq); 353 353 irq_set_nested_thread(virq, true); 354 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 355 irq_set_noprobe(virq); 365 - #endif 366 356 367 357 return 0; 368 358 } 369 359 370 360 static 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 362 irq_set_chip_and_handler(virq, NULL, NULL); 376 363 irq_set_chip_data(virq, NULL); 377 364 }
-1
drivers/mfd/twl6040.c
··· 801 801 static struct i2c_driver twl6040_driver = { 802 802 .driver = { 803 803 .name = "twl6040", 804 - .owner = THIS_MODULE, 805 804 }, 806 805 .probe = twl6040_probe, 807 806 .remove = twl6040_remove,
+3 -3
drivers/mfd/ucb1x00-core.c
··· 282 282 * SIBCLK to talk to the chip. We leave the clock running until 283 283 * we have finished processing all interrupts from the chip. 284 284 */ 285 - static void ucb1x00_irq(unsigned int irq, struct irq_desc *desc) 285 + static void ucb1x00_irq(unsigned int __irq, struct irq_desc *desc) 286 286 { 287 287 struct ucb1x00 *ucb = irq_desc_get_handler_data(desc); 288 288 unsigned int isr, i; ··· 292 292 ucb1x00_reg_write(ucb, UCB_IE_CLEAR, isr); 293 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 296 if (isr & 1) 297 297 generic_handle_irq(ucb->irq_base + i); 298 298 ucb1x00_disable(ucb); ··· 562 562 563 563 irq_set_chip_and_handler(irq, &ucb1x00_irqchip, handle_edge_irq); 564 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 568 irq_set_irq_type(ucb->irq, IRQ_TYPE_EDGE_RISING);
+6 -45
drivers/mfd/wm5102-tables.c
··· 266 266 { 0x00000069, 0x01FF }, /* R105 - Always On Triggers Sequence Select 4 */ 267 267 { 0x0000006A, 0x01FF }, /* R106 - Always On Triggers Sequence Select 5 */ 268 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 269 { 0x00000070, 0x0000 }, /* R112 - Comfort Noise Generator */ 272 270 { 0x00000090, 0x0000 }, /* R144 - Haptics Control 1 */ 273 271 { 0x00000091, 0x7FFF }, /* R145 - Haptics Control 2 */ ··· 298 300 { 0x00000175, 0x0004 }, /* R373 - FLL1 Control 5 */ 299 301 { 0x00000176, 0x0000 }, /* R374 - FLL1 Control 6 */ 300 302 { 0x00000177, 0x0181 }, /* R375 - FLL1 Loop Filter Test 1 */ 301 - { 0x00000178, 0x0000 }, /* R376 - FLL1 NCO Test 0 */ 302 303 { 0x00000179, 0x0000 }, /* R377 - FLL1 Control 7 */ 303 304 { 0x00000181, 0x0000 }, /* R385 - FLL1 Synchroniser 1 */ 304 305 { 0x00000182, 0x0000 }, /* R386 - FLL1 Synchroniser 2 */ ··· 315 318 { 0x00000195, 0x0004 }, /* R405 - FLL2 Control 5 */ 316 319 { 0x00000196, 0x0000 }, /* R406 - FLL2 Control 6 */ 317 320 { 0x00000197, 0x0000 }, /* R407 - FLL2 Loop Filter Test 1 */ 318 - { 0x00000198, 0x0000 }, /* R408 - FLL2 NCO Test 0 */ 319 321 { 0x00000199, 0x0000 }, /* R409 - FLL2 Control 7 */ 320 322 { 0x000001A1, 0x0000 }, /* R417 - FLL2 Synchroniser 1 */ 321 323 { 0x000001A2, 0x0000 }, /* R418 - FLL2 Synchroniser 2 */ ··· 334 338 { 0x0000021A, 0x01A6 }, /* R538 - Mic Bias Ctrl 3 */ 335 339 { 0x00000293, 0x0000 }, /* R659 - Accessory Detect Mode 1 */ 336 340 { 0x0000029B, 0x0020 }, /* R667 - Headphone Detect 1 */ 337 - { 0x0000029C, 0x0000 }, /* R668 - Headphone Detect 2 */ 338 - { 0x0000029F, 0x0000 }, /* R671 - Headphone Detect Test */ 339 341 { 0x000002A2, 0x0000 }, /* R674 - Micd clamp control */ 340 342 { 0x000002A3, 0x1102 }, /* R675 - Mic Detect 1 */ 341 343 { 0x000002A4, 0x009F }, /* R676 - Mic Detect 2 */ 342 - { 0x000002A5, 0x0000 }, /* R677 - Mic Detect 3 */ 343 344 { 0x000002A6, 0x3737 }, /* R678 - Mic Detect Level 1 */ 344 345 { 0x000002A7, 0x372C }, /* R679 - Mic Detect Level 2 */ 345 346 { 0x000002A8, 0x1422 }, /* R680 - Mic Detect Level 3 */ ··· 880 887 { 0x00000D1B, 0xFFFF }, /* R3355 - IRQ2 Status 4 Mask */ 881 888 { 0x00000D1C, 0xFFFF }, /* R3356 - IRQ2 Status 5 Mask */ 882 889 { 0x00000D1F, 0x0000 }, /* R3359 - IRQ2 Control */ 890 + { 0x00000D41, 0x0000 }, /* R3393 - ADSP2 IRQ0 */ 883 891 { 0x00000D53, 0xFFFF }, /* R3411 - AOD IRQ Mask IRQ1 */ 884 892 { 0x00000D54, 0xFFFF }, /* R3412 - AOD IRQ Mask IRQ2 */ 885 893 { 0x00000D56, 0x0000 }, /* R3414 - Jack detect debounce */ 886 894 { 0x00000E00, 0x0000 }, /* R3584 - FX_Ctrl1 */ 887 - { 0x00000E01, 0x0000 }, /* R3585 - FX_Ctrl2 */ 888 895 { 0x00000E10, 0x6318 }, /* R3600 - EQ1_1 */ 889 896 { 0x00000E11, 0x6300 }, /* R3601 - EQ1_2 */ 890 897 { 0x00000E12, 0x0FC8 }, /* R3602 - EQ1_3 */ ··· 984 991 { 0x00000ECD, 0x0000 }, /* R3789 - HPLPF4_2 */ 985 992 { 0x00000EE0, 0x0000 }, /* R3808 - ASRC_ENABLE */ 986 993 { 0x00000EE2, 0x0000 }, /* R3810 - ASRC_RATE1 */ 994 + { 0x00000EE3, 0x0400 }, /* R3811 - ASRC_RATE2 */ 987 995 { 0x00000EF0, 0x0000 }, /* R3824 - ISRC 1 CTRL 1 */ 988 996 { 0x00000EF1, 0x0000 }, /* R3825 - ISRC 1 CTRL 2 */ 989 997 { 0x00000EF2, 0x0000 }, /* R3826 - ISRC 1 CTRL 3 */ ··· 992 998 { 0x00000EF4, 0x0000 }, /* R3828 - ISRC 2 CTRL 2 */ 993 999 { 0x00000EF5, 0x0000 }, /* R3829 - ISRC 2 CTRL 3 */ 994 1000 { 0x00001100, 0x0010 }, /* R4352 - DSP1 Control 1 */ 995 - { 0x00001101, 0x0000 }, /* R4353 - DSP1 Clocking 1 */ 996 1001 }; 997 1002 998 1003 static bool wm5102_readable_register(struct device *dev, unsigned int reg) ··· 1001 1008 case ARIZONA_DEVICE_REVISION: 1002 1009 case ARIZONA_CTRL_IF_SPI_CFG_1: 1003 1010 case ARIZONA_CTRL_IF_I2C1_CFG_1: 1004 - case ARIZONA_CTRL_IF_STATUS_1: 1005 1011 case ARIZONA_WRITE_SEQUENCER_CTRL_0: 1006 1012 case ARIZONA_WRITE_SEQUENCER_CTRL_1: 1007 1013 case ARIZONA_WRITE_SEQUENCER_CTRL_2: 1008 1014 case ARIZONA_WRITE_SEQUENCER_CTRL_3: 1009 - case ARIZONA_WRITE_SEQUENCER_PROM: 1010 1015 case ARIZONA_TONE_GENERATOR_1: 1011 1016 case ARIZONA_TONE_GENERATOR_2: 1012 1017 case ARIZONA_TONE_GENERATOR_3: ··· 1025 1034 case ARIZONA_ALWAYS_ON_TRIGGERS_SEQUENCE_SELECT_4: 1026 1035 case ARIZONA_ALWAYS_ON_TRIGGERS_SEQUENCE_SELECT_5: 1027 1036 case ARIZONA_ALWAYS_ON_TRIGGERS_SEQUENCE_SELECT_6: 1028 - case ARIZONA_ALWAYS_ON_TRIGGERS_SEQUENCE_SELECT_7: 1029 - case ARIZONA_ALWAYS_ON_TRIGGERS_SEQUENCE_SELECT_8: 1030 1037 case ARIZONA_COMFORT_NOISE_GENERATOR: 1031 1038 case ARIZONA_HAPTICS_CONTROL_1: 1032 1039 case ARIZONA_HAPTICS_CONTROL_2: ··· 1165 1176 case ARIZONA_DAC_DIGITAL_VOLUME_4L: 1166 1177 case ARIZONA_OUT_VOLUME_4L: 1167 1178 case ARIZONA_NOISE_GATE_SELECT_4L: 1168 - case ARIZONA_OUTPUT_PATH_CONFIG_4R: 1169 1179 case ARIZONA_DAC_DIGITAL_VOLUME_4R: 1170 1180 case ARIZONA_OUT_VOLUME_4R: 1171 1181 case ARIZONA_NOISE_GATE_SELECT_4R: ··· 1172 1184 case ARIZONA_DAC_DIGITAL_VOLUME_5L: 1173 1185 case ARIZONA_DAC_VOLUME_LIMIT_5L: 1174 1186 case ARIZONA_NOISE_GATE_SELECT_5L: 1175 - case ARIZONA_OUTPUT_PATH_CONFIG_5R: 1176 1187 case ARIZONA_DAC_DIGITAL_VOLUME_5R: 1177 1188 case ARIZONA_DAC_VOLUME_LIMIT_5R: 1178 1189 case ARIZONA_NOISE_GATE_SELECT_5R: ··· 1182 1195 case ARIZONA_NOISE_GATE_CONTROL: 1183 1196 case ARIZONA_PDM_SPK1_CTRL_1: 1184 1197 case ARIZONA_PDM_SPK1_CTRL_2: 1185 - case ARIZONA_SPK_CTRL_2: 1186 - case ARIZONA_SPK_CTRL_3: 1187 1198 case ARIZONA_DAC_COMP_1: 1188 1199 case ARIZONA_DAC_COMP_2: 1189 1200 case ARIZONA_DAC_COMP_3: ··· 1213 1228 case ARIZONA_AIF1_FRAME_CTRL_18: 1214 1229 case ARIZONA_AIF1_TX_ENABLES: 1215 1230 case ARIZONA_AIF1_RX_ENABLES: 1216 - case ARIZONA_AIF1_FORCE_WRITE: 1217 1231 case ARIZONA_AIF2_BCLK_CTRL: 1218 1232 case ARIZONA_AIF2_TX_PIN_CTRL: 1219 1233 case ARIZONA_AIF2_RX_PIN_CTRL: ··· 1228 1244 case ARIZONA_AIF2_FRAME_CTRL_12: 1229 1245 case ARIZONA_AIF2_TX_ENABLES: 1230 1246 case ARIZONA_AIF2_RX_ENABLES: 1231 - case ARIZONA_AIF2_FORCE_WRITE: 1232 1247 case ARIZONA_AIF3_BCLK_CTRL: 1233 1248 case ARIZONA_AIF3_TX_PIN_CTRL: 1234 1249 case ARIZONA_AIF3_RX_PIN_CTRL: ··· 1243 1260 case ARIZONA_AIF3_FRAME_CTRL_12: 1244 1261 case ARIZONA_AIF3_TX_ENABLES: 1245 1262 case ARIZONA_AIF3_RX_ENABLES: 1246 - case ARIZONA_AIF3_FORCE_WRITE: 1247 1263 case ARIZONA_SLIMBUS_FRAMER_REF_GEAR: 1248 1264 case ARIZONA_SLIMBUS_RATES_1: 1249 1265 case ARIZONA_SLIMBUS_RATES_2: ··· 1568 1586 case ARIZONA_DRC1RMIX_INPUT_3_VOLUME: 1569 1587 case ARIZONA_DRC1RMIX_INPUT_4_SOURCE: 1570 1588 case ARIZONA_DRC1RMIX_INPUT_4_VOLUME: 1571 - case ARIZONA_DRC2LMIX_INPUT_1_SOURCE: 1572 - case ARIZONA_DRC2LMIX_INPUT_1_VOLUME: 1573 - case ARIZONA_DRC2LMIX_INPUT_2_SOURCE: 1574 - case ARIZONA_DRC2LMIX_INPUT_2_VOLUME: 1575 - case ARIZONA_DRC2LMIX_INPUT_3_SOURCE: 1576 - case ARIZONA_DRC2LMIX_INPUT_3_VOLUME: 1577 - case ARIZONA_DRC2LMIX_INPUT_4_SOURCE: 1578 - case ARIZONA_DRC2LMIX_INPUT_4_VOLUME: 1579 - case ARIZONA_DRC2RMIX_INPUT_1_SOURCE: 1580 - case ARIZONA_DRC2RMIX_INPUT_1_VOLUME: 1581 - case ARIZONA_DRC2RMIX_INPUT_2_SOURCE: 1582 - case ARIZONA_DRC2RMIX_INPUT_2_VOLUME: 1583 - case ARIZONA_DRC2RMIX_INPUT_3_SOURCE: 1584 - case ARIZONA_DRC2RMIX_INPUT_3_VOLUME: 1585 - case ARIZONA_DRC2RMIX_INPUT_4_SOURCE: 1586 - case ARIZONA_DRC2RMIX_INPUT_4_VOLUME: 1587 1589 case ARIZONA_HPLP1MIX_INPUT_1_SOURCE: 1588 1590 case ARIZONA_HPLP1MIX_INPUT_1_VOLUME: 1589 1591 case ARIZONA_HPLP1MIX_INPUT_2_SOURCE: ··· 1776 1810 case ARIZONA_DRC1_CTRL3: 1777 1811 case ARIZONA_DRC1_CTRL4: 1778 1812 case ARIZONA_DRC1_CTRL5: 1779 - case ARIZONA_DRC2_CTRL1: 1780 - case ARIZONA_DRC2_CTRL2: 1781 - case ARIZONA_DRC2_CTRL3: 1782 - case ARIZONA_DRC2_CTRL4: 1783 - case ARIZONA_DRC2_CTRL5: 1784 1813 case ARIZONA_HPLPF1_1: 1785 1814 case ARIZONA_HPLPF1_2: 1786 1815 case ARIZONA_HPLPF2_1: ··· 1793 1832 case ARIZONA_ISRC_2_CTRL_1: 1794 1833 case ARIZONA_ISRC_2_CTRL_2: 1795 1834 case ARIZONA_ISRC_2_CTRL_3: 1796 - case ARIZONA_ISRC_3_CTRL_1: 1797 - case ARIZONA_ISRC_3_CTRL_2: 1798 - case ARIZONA_ISRC_3_CTRL_3: 1799 1835 case ARIZONA_DSP1_CONTROL_1: 1800 1836 case ARIZONA_DSP1_CLOCKING_1: 1801 1837 case ARIZONA_DSP1_STATUS_1: ··· 1841 1883 case ARIZONA_WRITE_SEQUENCER_CTRL_2: 1842 1884 case ARIZONA_WRITE_SEQUENCER_CTRL_3: 1843 1885 case ARIZONA_OUTPUT_STATUS_1: 1844 - case ARIZONA_RAW_OUTPUT_STATUS_1: 1845 1886 case ARIZONA_SLIMBUS_RX_PORT_STATUS: 1846 1887 case ARIZONA_SLIMBUS_TX_PORT_STATUS: 1847 1888 case ARIZONA_SAMPLE_RATE_1_STATUS: ··· 1926 1969 .reg_bits = 32, 1927 1970 .pad_bits = 16, 1928 1971 .val_bits = 16, 1972 + .reg_format_endian = REGMAP_ENDIAN_BIG, 1973 + .val_format_endian = REGMAP_ENDIAN_BIG, 1929 1974 1930 1975 .max_register = WM5102_MAX_REGISTER, 1931 1976 .readable_reg = wm5102_readable_register, ··· 1942 1983 const struct regmap_config wm5102_i2c_regmap = { 1943 1984 .reg_bits = 32, 1944 1985 .val_bits = 16, 1986 + .reg_format_endian = REGMAP_ENDIAN_BIG, 1987 + .val_format_endian = REGMAP_ENDIAN_BIG, 1945 1988 1946 1989 .max_register = WM5102_MAX_REGISTER, 1947 1990 .readable_reg = wm5102_readable_register,
+4 -10
drivers/mfd/wm5110-tables.c
··· 754 754 { 0x0000021A, 0x01A6 }, /* R538 - Mic Bias Ctrl 3 */ 755 755 { 0x00000293, 0x0000 }, /* R659 - Accessory Detect Mode 1 */ 756 756 { 0x0000029B, 0x0028 }, /* R667 - Headphone Detect 1 */ 757 - { 0x0000029C, 0x0000 }, /* R668 - Headphone Detect 2 */ 758 757 { 0x000002A2, 0x0000 }, /* R674 - Micd clamp control */ 759 758 { 0x000002A3, 0x1102 }, /* R675 - Mic Detect 1 */ 760 759 { 0x000002A4, 0x009F }, /* R676 - Mic Detect 2 */ 761 - { 0x000002A5, 0x0000 }, /* R677 - Mic Detect 3 */ 762 760 { 0x000002A6, 0x3737 }, /* R678 - Mic Detect Level 1 */ 763 761 { 0x000002A7, 0x372C }, /* R679 - Mic Detect Level 2 */ 764 762 { 0x000002A8, 0x1422 }, /* R680 - Mic Detect Level 3 */ ··· 846 848 { 0x00000440, 0x8FFF }, /* R1088 - DRE Enable */ 847 849 { 0x00000450, 0x0000 }, /* R1104 - DAC AEC Control 1 */ 848 850 { 0x00000458, 0x0000 }, /* R1112 - Noise Gate Control */ 849 - { 0x00000480, 0x0040 }, /* R1152 - Class W ANC Threshold 1 */ 850 - { 0x00000481, 0x0040 }, /* R1153 - Class W ANC Threshold 2 */ 851 851 { 0x00000490, 0x0069 }, /* R1168 - PDM SPK1 CTRL 1 */ 852 852 { 0x00000491, 0x0000 }, /* R1169 - PDM SPK1 CTRL 2 */ 853 853 { 0x00000492, 0x0069 }, /* R1170 - PDM SPK2 CTRL 1 */ ··· 1504 1508 { 0x00000D54, 0xFFFF }, /* R3412 - AOD IRQ Mask IRQ2 */ 1505 1509 { 0x00000D56, 0x0000 }, /* R3414 - Jack detect debounce */ 1506 1510 { 0x00000E00, 0x0000 }, /* R3584 - FX_Ctrl1 */ 1507 - { 0x00000E01, 0x0000 }, /* R3585 - FX_Ctrl2 */ 1508 1511 { 0x00000E10, 0x6318 }, /* R3600 - EQ1_1 */ 1509 1512 { 0x00000E11, 0x6300 }, /* R3601 - EQ1_2 */ 1510 1513 { 0x00000E12, 0x0FC8 }, /* R3602 - EQ1_3 */ ··· 1620 1625 { 0x00000F00, 0x0000 }, /* R3840 - Clock Control */ 1621 1626 { 0x00000F01, 0x0000 }, /* R3841 - ANC_SRC */ 1622 1627 { 0x00001100, 0x0010 }, /* R4352 - DSP1 Control 1 */ 1623 - { 0x00001101, 0x0000 }, /* R4353 - DSP1 Clocking 1 */ 1624 1628 { 0x00001200, 0x0010 }, /* R4608 - DSP2 Control 1 */ 1625 - { 0x00001201, 0x0000 }, /* R4609 - DSP2 Clocking 1 */ 1626 1629 { 0x00001300, 0x0010 }, /* R4864 - DSP3 Control 1 */ 1627 - { 0x00001301, 0x0000 }, /* R4865 - DSP3 Clocking 1 */ 1628 1630 { 0x00001400, 0x0010 }, /* R5120 - DSP4 Control 1 */ 1629 - { 0x00001401, 0x0000 }, /* R5121 - DSP4 Clocking 1 */ 1630 - { 0x00001404, 0x0000 }, /* R5124 - DSP4 Status 1 */ 1631 1631 }; 1632 1632 1633 1633 static bool wm5110_is_rev_b_adsp_memory(unsigned int reg) ··· 2997 3007 .reg_bits = 32, 2998 3008 .pad_bits = 16, 2999 3009 .val_bits = 16, 3010 + .reg_format_endian = REGMAP_ENDIAN_BIG, 3011 + .val_format_endian = REGMAP_ENDIAN_BIG, 3000 3012 3001 3013 .max_register = WM5110_MAX_REGISTER, 3002 3014 .readable_reg = wm5110_readable_register, ··· 3013 3021 const struct regmap_config wm5110_i2c_regmap = { 3014 3022 .reg_bits = 32, 3015 3023 .val_bits = 16, 3024 + .reg_format_endian = REGMAP_ENDIAN_BIG, 3025 + .val_format_endian = REGMAP_ENDIAN_BIG, 3016 3026 3017 3027 .max_register = WM5110_MAX_REGISTER, 3018 3028 .readable_reg = wm5110_readable_register,
-1
drivers/mfd/wm831x-i2c.c
··· 93 93 static struct i2c_driver wm831x_i2c_driver = { 94 94 .driver = { 95 95 .name = "wm831x", 96 - .owner = THIS_MODULE, 97 96 .pm = &wm831x_pm_ops, 98 97 }, 99 98 .probe = wm831x_i2c_probe,
-7
drivers/mfd/wm831x-irq.c
··· 552 552 irq_set_chip_data(virq, h->host_data); 553 553 irq_set_chip_and_handler(virq, &wm831x_irq_chip, handle_edge_irq); 554 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 555 irq_set_noprobe(virq); 562 - #endif 563 556 564 557 return 0; 565 558 }
-1
drivers/mfd/wm8350-i2c.c
··· 69 69 static struct i2c_driver wm8350_i2c_driver = { 70 70 .driver = { 71 71 .name = "wm8350", 72 - .owner = THIS_MODULE, 73 72 }, 74 73 .probe = wm8350_i2c_probe, 75 74 .remove = wm8350_i2c_remove,
+1 -7
drivers/mfd/wm8350-irq.c
··· 526 526 handle_edge_irq); 527 527 irq_set_nested_thread(cur_irq, 1); 528 528 529 - /* ARM needs us to explicitly flag the IRQ as valid 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 529 + irq_clear_status_flags(cur_irq, IRQ_NOREQUEST | IRQ_NOPROBE); 536 530 } 537 531 538 532 ret = request_threaded_irq(irq, NULL, wm8350_irq, flags,
-1
drivers/mfd/wm8400-core.c
··· 194 194 static struct i2c_driver wm8400_i2c_driver = { 195 195 .driver = { 196 196 .name = "WM8400", 197 - .owner = THIS_MODULE, 198 197 }, 199 198 .probe = wm8400_i2c_probe, 200 199 .remove = wm8400_i2c_remove,
-1
drivers/mfd/wm8994-core.c
··· 677 677 static struct i2c_driver wm8994_i2c_driver = { 678 678 .driver = { 679 679 .name = "wm8994", 680 - .owner = THIS_MODULE, 681 680 .pm = &wm8994_pm_ops, 682 681 .of_match_table = of_match_ptr(wm8994_of_match), 683 682 },
+1 -8
drivers/mfd/wm8994-irq.c
··· 172 172 irq_set_chip_data(virq, wm8994); 173 173 irq_set_chip_and_handler(virq, &wm8994_edge_irq_chip, handle_edge_irq); 174 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 175 irq_set_noprobe(virq); 182 - #endif 183 176 184 177 return 0; 185 178 } ··· 186 193 { 187 194 int ret; 188 195 unsigned long irqflags; 189 - struct wm8994_pdata *pdata = dev_get_platdata(wm8994->dev); 196 + struct wm8994_pdata *pdata = &wm8994->pdata; 190 197 191 198 if (!wm8994->irq) { 192 199 dev_warn(wm8994->dev,
+3 -3
drivers/mfd/wm8994-regmap.c
··· 19 19 20 20 #include "wm8994.h" 21 21 22 - static struct reg_default wm1811_defaults[] = { 22 + static const struct reg_default wm1811_defaults[] = { 23 23 { 0x0001, 0x0000 }, /* R1 - Power Management (1) */ 24 24 { 0x0002, 0x6000 }, /* R2 - Power Management (2) */ 25 25 { 0x0003, 0x0000 }, /* R3 - Power Management (3) */ ··· 251 251 { 0x0748, 0x003F }, /* R1864 - IRQ Debounce */ 252 252 }; 253 253 254 - static struct reg_default wm8994_defaults[] = { 254 + static const struct reg_default wm8994_defaults[] = { 255 255 { 0x0001, 0x0000 }, /* R1 - Power Management (1) */ 256 256 { 0x0002, 0x6000 }, /* R2 - Power Management (2) */ 257 257 { 0x0003, 0x0000 }, /* R3 - Power Management (3) */ ··· 470 470 { 0x0748, 0x003F }, /* R1864 - IRQ Debounce */ 471 471 }; 472 472 473 - static struct reg_default wm8958_defaults[] = { 473 + static const struct reg_default wm8958_defaults[] = { 474 474 { 0x0001, 0x0000 }, /* R1 - Power Management (1) */ 475 475 { 0x0002, 0x6000 }, /* R2 - Power Management (2) */ 476 476 { 0x0003, 0x0000 }, /* R3 - Power Management (3) */
+4 -4
drivers/mfd/wm8997-tables.c
··· 243 243 { 0x0000029B, 0x0020 }, /* R667 - Headphone Detect 1 */ 244 244 { 0x000002A3, 0x1102 }, /* R675 - Mic Detect 1 */ 245 245 { 0x000002A4, 0x009F }, /* R676 - Mic Detect 2 */ 246 - { 0x000002A5, 0x0000 }, /* R677 - Mic Detect 3 */ 247 246 { 0x000002C3, 0x0000 }, /* R707 - Mic noise mix control 1 */ 248 247 { 0x000002CB, 0x0000 }, /* R715 - Isolation control */ 249 248 { 0x000002D3, 0x0000 }, /* R723 - Jack detect analogue */ ··· 683 684 { 0x00000D54, 0xFFFF }, /* R3412 - AOD IRQ Mask IRQ2 */ 684 685 { 0x00000D56, 0x0000 }, /* R3414 - Jack detect debounce */ 685 686 { 0x00000E00, 0x0000 }, /* R3584 - FX_Ctrl1 */ 686 - { 0x00000E01, 0x0000 }, /* R3585 - FX_Ctrl2 */ 687 687 { 0x00000E10, 0x6318 }, /* R3600 - EQ1_1 */ 688 688 { 0x00000E11, 0x6300 }, /* R3601 - EQ1_2 */ 689 689 { 0x00000E12, 0x0FC8 }, /* R3602 - EQ1_3 */ ··· 786 788 { 0x00000EF3, 0x0000 }, /* R3827 - ISRC 2 CTRL 1 */ 787 789 { 0x00000EF4, 0x0000 }, /* R3828 - ISRC 2 CTRL 2 */ 788 790 { 0x00000EF5, 0x0000 }, /* R3829 - ISRC 2 CTRL 3 */ 789 - { 0x00001100, 0x0010 }, /* R4352 - DSP1 Control 1 */ 790 - { 0x00001101, 0x0000 }, /* R4353 - DSP1 Clocking 1 */ 791 791 }; 792 792 793 793 static bool wm8997_readable_register(struct device *dev, unsigned int reg) ··· 1476 1480 case ARIZONA_SAMPLE_RATE_2_STATUS: 1477 1481 case ARIZONA_SAMPLE_RATE_3_STATUS: 1478 1482 case ARIZONA_ASYNC_SAMPLE_RATE_1_STATUS: 1483 + case ARIZONA_FLL1_NCO_TEST_0: 1484 + case ARIZONA_FLL2_NCO_TEST_0: 1479 1485 case ARIZONA_MIC_DETECT_3: 1480 1486 case ARIZONA_HP_CTRL_1L: 1481 1487 case ARIZONA_HP_CTRL_1R: ··· 1519 1521 const struct regmap_config wm8997_i2c_regmap = { 1520 1522 .reg_bits = 32, 1521 1523 .val_bits = 16, 1524 + .reg_format_endian = REGMAP_ENDIAN_BIG, 1525 + .val_format_endian = REGMAP_ENDIAN_BIG, 1522 1526 1523 1527 .max_register = WM8997_MAX_REGISTER, 1524 1528 .readable_reg = wm8997_readable_register,
+1594
drivers/mfd/wm8998-tables.c
··· 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 + 24 + static 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() */ 46 + int 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 + 53 + static 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 + 66 + struct 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 + 78 + static 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 + 169 + struct 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 + 179 + static 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 + 831 + static 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 + 1526 + static 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 + 1580 + const 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 + }; 1594 + EXPORT_SYMBOL_GPL(wm8998_i2c_regmap);
+4 -5
drivers/platform/x86/intel_pmc_ipc.c
··· 33 33 #include <linux/suspend.h> 34 34 #include <linux/acpi.h> 35 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 39 * IPC registers ··· 473 473 }, 474 474 }; 475 475 476 - static struct lpc_ich_info tco_info = { 476 + static struct itco_wdt_platform_data tco_info = { 477 477 .name = "Apollo Lake SoC", 478 - .iTCO_version = 3, 478 + .version = 3, 479 479 }; 480 480 481 481 static int ipc_create_punit_device(void) ··· 552 552 goto err; 553 553 } 554 554 555 - ret = platform_device_add_data(pdev, &tco_info, 556 - sizeof(struct lpc_ich_info)); 555 + ret = platform_device_add_data(pdev, &tco_info, sizeof(tco_info)); 557 556 if (ret) { 558 557 dev_err(ipcdev.dev, "Failed to add tco platform data\n"); 559 558 goto err;
+1 -1
drivers/rtc/rtc-st-lpc.c
··· 208 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 212 if (mode != ST_LPC_MODE_RTC) 213 213 return -ENODEV; 214 214
+2 -1
drivers/watchdog/Kconfig
··· 797 797 tristate "Intel TCO Timer/Watchdog" 798 798 depends on (X86 || IA64) && PCI 799 799 select WATCHDOG_CORE 800 - select LPC_ICH 800 + select LPC_ICH if !EXPERT 801 + select I2C_I801 if !EXPERT 801 802 ---help--- 802 803 Hardware driver for the intel TCO timer based watchdog devices. 803 804 These drivers are included in the Intel 82801 I/O Controller
+49 -33
drivers/watchdog/iTCO_wdt.c
··· 66 66 #include <linux/spinlock.h> /* For spin_lock/spin_unlock/... */ 67 67 #include <linux/uaccess.h> /* For copy_to_user/put_user/... */ 68 68 #include <linux/io.h> /* For inb/outb/... */ 69 - #include <linux/mfd/core.h> 70 - #include <linux/mfd/lpc_ich.h> 69 + #include <linux/platform_data/itco_wdt.h> 71 70 72 71 #include "iTCO_vendor.h" 73 72 ··· 145 146 return iTCO_wdt_private.iTCO_version == 3 ? ticks : (ticks * 6) / 10; 146 147 } 147 148 149 + static inline u32 no_reboot_bit(void) 150 + { 151 + u32 enable_bit; 152 + 153 + switch (iTCO_wdt_private.iTCO_version) { 154 + case 3: 155 + enable_bit = 0x00000010; 156 + break; 157 + case 2: 158 + enable_bit = 0x00000020; 159 + break; 160 + case 4: 161 + case 1: 162 + default: 163 + enable_bit = 0x00000002; 164 + break; 165 + } 166 + 167 + return enable_bit; 168 + } 169 + 148 170 static void iTCO_wdt_set_NO_REBOOT_bit(void) 149 171 { 150 172 u32 val32; 151 173 152 174 /* Set the NO_REBOOT bit: this disables reboots */ 153 - if (iTCO_wdt_private.iTCO_version == 3) { 175 + if (iTCO_wdt_private.iTCO_version >= 2) { 154 176 val32 = readl(iTCO_wdt_private.gcs_pmc); 155 - val32 |= 0x00000010; 156 - writel(val32, iTCO_wdt_private.gcs_pmc); 157 - } else if (iTCO_wdt_private.iTCO_version == 2) { 158 - val32 = readl(iTCO_wdt_private.gcs_pmc); 159 - val32 |= 0x00000020; 177 + val32 |= no_reboot_bit(); 160 178 writel(val32, iTCO_wdt_private.gcs_pmc); 161 179 } else if (iTCO_wdt_private.iTCO_version == 1) { 162 180 pci_read_config_dword(iTCO_wdt_private.pdev, 0xd4, &val32); 163 - val32 |= 0x00000002; 181 + val32 |= no_reboot_bit(); 164 182 pci_write_config_dword(iTCO_wdt_private.pdev, 0xd4, val32); 165 183 } 166 184 } 167 185 168 186 static int iTCO_wdt_unset_NO_REBOOT_bit(void) 169 187 { 170 - int ret = 0; 171 - u32 val32; 188 + u32 enable_bit = no_reboot_bit(); 189 + u32 val32 = 0; 172 190 173 191 /* Unset the NO_REBOOT bit: this enables reboots */ 174 - if (iTCO_wdt_private.iTCO_version == 3) { 192 + if (iTCO_wdt_private.iTCO_version >= 2) { 175 193 val32 = readl(iTCO_wdt_private.gcs_pmc); 176 - val32 &= 0xffffffef; 194 + val32 &= ~enable_bit; 177 195 writel(val32, iTCO_wdt_private.gcs_pmc); 178 196 179 197 val32 = readl(iTCO_wdt_private.gcs_pmc); 180 - if (val32 & 0x00000010) 181 - ret = -EIO; 182 - } else if (iTCO_wdt_private.iTCO_version == 2) { 183 - val32 = readl(iTCO_wdt_private.gcs_pmc); 184 - val32 &= 0xffffffdf; 185 - writel(val32, iTCO_wdt_private.gcs_pmc); 186 - 187 - val32 = readl(iTCO_wdt_private.gcs_pmc); 188 - if (val32 & 0x00000020) 189 - ret = -EIO; 190 198 } else if (iTCO_wdt_private.iTCO_version == 1) { 191 199 pci_read_config_dword(iTCO_wdt_private.pdev, 0xd4, &val32); 192 - val32 &= 0xfffffffd; 200 + val32 &= ~enable_bit; 193 201 pci_write_config_dword(iTCO_wdt_private.pdev, 0xd4, val32); 194 202 195 203 pci_read_config_dword(iTCO_wdt_private.pdev, 0xd4, &val32); 196 - if (val32 & 0x00000002) 197 - ret = -EIO; 198 204 } 199 205 200 - return ret; /* returns: 0 = OK, -EIO = Error */ 206 + if (val32 & enable_bit) 207 + return -EIO; 208 + 209 + return 0; 201 210 } 202 211 203 212 static int iTCO_wdt_start(struct watchdog_device *wd_dev) ··· 425 418 { 426 419 int ret = -ENODEV; 427 420 unsigned long val32; 428 - struct lpc_ich_info *ich_info = dev_get_platdata(&dev->dev); 421 + struct itco_wdt_platform_data *pdata = dev_get_platdata(&dev->dev); 429 422 430 - if (!ich_info) 423 + if (!pdata) 431 424 goto out; 432 425 433 426 spin_lock_init(&iTCO_wdt_private.io_lock); ··· 442 435 if (!iTCO_wdt_private.smi_res) 443 436 goto out; 444 437 445 - iTCO_wdt_private.iTCO_version = ich_info->iTCO_version; 438 + iTCO_wdt_private.iTCO_version = pdata->version; 446 439 iTCO_wdt_private.dev = dev; 447 440 iTCO_wdt_private.pdev = to_pci_dev(dev->dev.parent); 448 441 ··· 508 501 } 509 502 510 503 pr_info("Found a %s TCO device (Version=%d, TCOBASE=0x%04llx)\n", 511 - ich_info->name, ich_info->iTCO_version, (u64)TCOBASE); 504 + pdata->name, pdata->version, (u64)TCOBASE); 512 505 513 506 /* Clear out the (probably old) status */ 514 - if (iTCO_wdt_private.iTCO_version == 3) { 507 + switch (iTCO_wdt_private.iTCO_version) { 508 + case 4: 509 + outw(0x0008, TCO1_STS); /* Clear the Time Out Status bit */ 510 + outw(0x0002, TCO2_STS); /* Clear SECOND_TO_STS bit */ 511 + break; 512 + case 3: 515 513 outl(0x20008, TCO1_STS); 516 - } else { 514 + break; 515 + case 2: 516 + case 1: 517 + default: 517 518 outw(0x0008, TCO1_STS); /* Clear the Time Out Status bit */ 518 519 outw(0x0002, TCO2_STS); /* Clear SECOND_TO_STS bit */ 519 520 outw(0x0004, TCO2_STS); /* Clear BOOT_STS bit */ 521 + break; 520 522 } 521 523 522 524 iTCO_wdt_watchdog_dev.bootstatus = 0;
+1
include/dt-bindings/mfd/st-lpc.h
··· 11 11 12 12 #define ST_LPC_MODE_RTC 0 13 13 #define ST_LPC_MODE_WDT 1 14 + #define ST_LPC_MODE_CLKSRC 2 14 15 15 16 #endif /* __DT_BINDINGS_ST_LPC_H__ */
+81 -81
include/linux/mfd/88pm80x.h
··· 60 60 /* page 0 basic: slave adder 0x60 */ 61 61 62 62 #define PM800_STATUS_1 (0x01) 63 - #define PM800_ONKEY_STS1 (1 << 0) 64 - #define PM800_EXTON_STS1 (1 << 1) 65 - #define PM800_CHG_STS1 (1 << 2) 66 - #define PM800_BAT_STS1 (1 << 3) 67 - #define PM800_VBUS_STS1 (1 << 4) 68 - #define PM800_LDO_PGOOD_STS1 (1 << 5) 69 - #define PM800_BUCK_PGOOD_STS1 (1 << 6) 63 + #define PM800_ONKEY_STS1 BIT(0) 64 + #define PM800_EXTON_STS1 BIT(1) 65 + #define PM800_CHG_STS1 BIT(2) 66 + #define PM800_BAT_STS1 BIT(3) 67 + #define PM800_VBUS_STS1 BIT(4) 68 + #define PM800_LDO_PGOOD_STS1 BIT(5) 69 + #define PM800_BUCK_PGOOD_STS1 BIT(6) 70 70 71 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 74 /* Wakeup Registers */ 75 - #define PM800_WAKEUP1 (0x0D) 75 + #define PM800_WAKEUP1 (0x0D) 76 76 77 - #define PM800_WAKEUP2 (0x0E) 78 - #define PM800_WAKEUP2_INV_INT (1 << 0) 79 - #define PM800_WAKEUP2_INT_CLEAR (1 << 1) 80 - #define PM800_WAKEUP2_INT_MASK (1 << 2) 77 + #define PM800_WAKEUP2 (0x0E) 78 + #define PM800_WAKEUP2_INV_INT BIT(0) 79 + #define PM800_WAKEUP2_INT_CLEAR BIT(1) 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 84 /* Referance and low power registers */ 85 85 #define PM800_LOW_POWER1 (0x20) 86 86 #define PM800_LOW_POWER2 (0x21) 87 - #define PM800_LOW_POWER_CONFIG3 (0x22) 88 - #define PM800_LOW_POWER_CONFIG4 (0x23) 87 + #define PM800_LOW_POWER_CONFIG3 (0x22) 88 + #define PM800_LOW_POWER_CONFIG4 (0x23) 89 89 90 90 /* GPIO register */ 91 91 #define PM800_GPIO_0_1_CNTRL (0x30) 92 - #define PM800_GPIO0_VAL (1 << 0) 92 + #define PM800_GPIO0_VAL BIT(0) 93 93 #define PM800_GPIO0_GPIO_MODE(x) (x << 1) 94 - #define PM800_GPIO1_VAL (1 << 4) 94 + #define PM800_GPIO1_VAL BIT(4) 95 95 #define PM800_GPIO1_GPIO_MODE(x) (x << 5) 96 96 97 97 #define PM800_GPIO_2_3_CNTRL (0x31) 98 - #define PM800_GPIO2_VAL (1 << 0) 98 + #define PM800_GPIO2_VAL BIT(0) 99 99 #define PM800_GPIO2_GPIO_MODE(x) (x << 1) 100 - #define PM800_GPIO3_VAL (1 << 4) 100 + #define PM800_GPIO3_VAL BIT(4) 101 101 #define PM800_GPIO3_GPIO_MODE(x) (x << 5) 102 102 #define PM800_GPIO3_MODE_MASK 0x1F 103 103 #define PM800_GPIO3_HEADSET_MODE PM800_GPIO3_GPIO_MODE(6) 104 104 105 - #define PM800_GPIO_4_CNTRL (0x32) 106 - #define PM800_GPIO4_VAL (1 << 0) 105 + #define PM800_GPIO_4_CNTRL (0x32) 106 + #define PM800_GPIO4_VAL BIT(0) 107 107 #define PM800_GPIO4_GPIO_MODE(x) (x << 1) 108 108 109 109 #define PM800_HEADSET_CNTRL (0x38) 110 - #define PM800_HEADSET_DET_EN (1 << 7) 111 - #define PM800_HSDET_SLP (1 << 1) 110 + #define PM800_HEADSET_DET_EN BIT(7) 111 + #define PM800_HSDET_SLP BIT(1) 112 112 /* PWM register */ 113 - #define PM800_PWM1 (0x40) 114 - #define PM800_PWM2 (0x41) 115 - #define PM800_PWM3 (0x42) 116 - #define PM800_PWM4 (0x43) 113 + #define PM800_PWM1 (0x40) 114 + #define PM800_PWM2 (0x41) 115 + #define PM800_PWM3 (0x42) 116 + #define PM800_PWM4 (0x43) 117 117 118 118 /* RTC Registers */ 119 119 #define PM800_RTC_CONTROL (0xD0) ··· 123 123 #define PM800_RTC_MISC4 (0xE4) 124 124 #define PM800_RTC_MISC5 (0xE7) 125 125 /* bit definitions of RTC Register 1 (0xD0) */ 126 - #define PM800_ALARM1_EN (1 << 0) 127 - #define PM800_ALARM_WAKEUP (1 << 4) 128 - #define PM800_ALARM (1 << 5) 129 - #define PM800_RTC1_USE_XO (1 << 7) 126 + #define PM800_ALARM1_EN BIT(0) 127 + #define PM800_ALARM_WAKEUP BIT(4) 128 + #define PM800_ALARM BIT(5) 129 + #define PM800_RTC1_USE_XO BIT(7) 130 130 131 131 /* Regulator Control Registers: BUCK1,BUCK5,LDO1 have DVC */ 132 132 133 133 /* buck registers */ 134 - #define PM800_SLEEP_BUCK1 (0x30) 134 + #define PM800_SLEEP_BUCK1 (0x30) 135 135 136 136 /* BUCK Sleep Mode Register 1: BUCK[1..4] */ 137 - #define PM800_BUCK_SLP1 (0x5A) 138 - #define PM800_BUCK1_SLP1_SHIFT 0 139 - #define PM800_BUCK1_SLP1_MASK (0x3 << PM800_BUCK1_SLP1_SHIFT) 137 + #define PM800_BUCK_SLP1 (0x5A) 138 + #define PM800_BUCK1_SLP1_SHIFT 0 139 + #define PM800_BUCK1_SLP1_MASK (0x3 << PM800_BUCK1_SLP1_SHIFT) 140 140 141 141 /* page 2 GPADC: slave adder 0x02 */ 142 142 #define PM800_GPADC_MEAS_EN1 (0x01) 143 - #define PM800_MEAS_EN1_VBAT (1 << 2) 143 + #define PM800_MEAS_EN1_VBAT BIT(2) 144 144 #define PM800_GPADC_MEAS_EN2 (0x02) 145 - #define PM800_MEAS_EN2_RFTMP (1 << 0) 146 - #define PM800_MEAS_GP0_EN (1 << 2) 147 - #define PM800_MEAS_GP1_EN (1 << 3) 148 - #define PM800_MEAS_GP2_EN (1 << 4) 149 - #define PM800_MEAS_GP3_EN (1 << 5) 150 - #define PM800_MEAS_GP4_EN (1 << 6) 145 + #define PM800_MEAS_EN2_RFTMP BIT(0) 146 + #define PM800_MEAS_GP0_EN BIT(2) 147 + #define PM800_MEAS_GP1_EN BIT(3) 148 + #define PM800_MEAS_GP2_EN BIT(4) 149 + #define PM800_MEAS_GP3_EN BIT(5) 150 + #define PM800_MEAS_GP4_EN BIT(6) 151 151 152 152 #define PM800_GPADC_MISC_CONFIG1 (0x05) 153 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 155 #define PM800_GPADC_SLOW_MODE(x) (x << 3) 156 156 157 - #define PM800_GPADC_MISC_CONFIG3 (0x09) 158 - #define PM800_GPADC_MISC_CONFIG4 (0x0A) 157 + #define PM800_GPADC_MISC_CONFIG3 (0x09) 158 + #define PM800_GPADC_MISC_CONFIG4 (0x0A) 159 159 160 - #define PM800_GPADC_PREBIAS1 (0x0F) 160 + #define PM800_GPADC_PREBIAS1 (0x0F) 161 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) 165 - #define PM800_GPADC_GP_BIAS_EN0 (1 << 0) 166 - #define PM800_GPADC_GP_BIAS_EN1 (1 << 1) 167 - #define PM800_GPADC_GP_BIAS_EN2 (1 << 2) 168 - #define PM800_GPADC_GP_BIAS_EN3 (1 << 3) 164 + #define PM800_GP_BIAS_ENA1 (0x14) 165 + #define PM800_GPADC_GP_BIAS_EN0 BIT(0) 166 + #define PM800_GPADC_GP_BIAS_EN1 BIT(1) 167 + #define PM800_GPADC_GP_BIAS_EN2 BIT(2) 168 + #define PM800_GPADC_GP_BIAS_EN3 BIT(3) 169 169 170 170 #define PM800_GP_BIAS_OUT1 (0x15) 171 - #define PM800_BIAS_OUT_GP0 (1 << 0) 172 - #define PM800_BIAS_OUT_GP1 (1 << 1) 173 - #define PM800_BIAS_OUT_GP2 (1 << 2) 174 - #define PM800_BIAS_OUT_GP3 (1 << 3) 171 + #define PM800_BIAS_OUT_GP0 BIT(0) 172 + #define PM800_BIAS_OUT_GP1 BIT(1) 173 + #define PM800_BIAS_OUT_GP2 BIT(2) 174 + #define PM800_BIAS_OUT_GP3 BIT(3) 175 175 176 176 #define PM800_GPADC0_LOW_TH 0x20 177 177 #define PM800_GPADC1_LOW_TH 0x21 ··· 222 222 223 223 #define PM805_INT_STATUS1 (0x03) 224 224 225 - #define PM805_INT1_HP1_SHRT (1 << 0) 226 - #define PM805_INT1_HP2_SHRT (1 << 1) 227 - #define PM805_INT1_MIC_CONFLICT (1 << 2) 228 - #define PM805_INT1_CLIP_FAULT (1 << 3) 229 - #define PM805_INT1_LDO_OFF (1 << 4) 230 - #define PM805_INT1_SRC_DPLL_LOCK (1 << 5) 225 + #define PM805_INT1_HP1_SHRT BIT(0) 226 + #define PM805_INT1_HP2_SHRT BIT(1) 227 + #define PM805_INT1_MIC_CONFLICT BIT(2) 228 + #define PM805_INT1_CLIP_FAULT BIT(3) 229 + #define PM805_INT1_LDO_OFF BIT(4) 230 + #define PM805_INT1_SRC_DPLL_LOCK BIT(5) 231 231 232 232 #define PM805_INT_STATUS2 (0x04) 233 233 234 - #define PM805_INT2_MIC_DET (1 << 0) 235 - #define PM805_INT2_SHRT_BTN_DET (1 << 1) 236 - #define PM805_INT2_VOLM_BTN_DET (1 << 2) 237 - #define PM805_INT2_VOLP_BTN_DET (1 << 3) 238 - #define PM805_INT2_RAW_PLL_FAULT (1 << 4) 239 - #define PM805_INT2_FINE_PLL_FAULT (1 << 5) 234 + #define PM805_INT2_MIC_DET BIT(0) 235 + #define PM805_INT2_SHRT_BTN_DET BIT(1) 236 + #define PM805_INT2_VOLM_BTN_DET BIT(2) 237 + #define PM805_INT2_VOLP_BTN_DET BIT(3) 238 + #define PM805_INT2_RAW_PLL_FAULT BIT(4) 239 + #define PM805_INT2_FINE_PLL_FAULT BIT(5) 240 240 241 241 #define PM805_INT_MASK1 (0x05) 242 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 245 /* number of status and int reg in a row */ 246 246 #define PM805_INT_REG_NUM (2) 247 247 248 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 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) 254 - #define PM805_AUTO_SEQ_STATUS1 (0x0B) 255 - #define PM805_AUTO_SEQ_STATUS2 (0x0C) 253 + #define PM805_MIC_DET_STATUS3 (0x0A) 254 + #define PM805_AUTO_SEQ_STATUS1 (0x0B) 255 + #define PM805_AUTO_SEQ_STATUS2 (0x0C) 256 256 257 257 #define PM805_ADC_SETTING1 (0x10) 258 258 #define PM805_ADC_SETTING2 (0x11) ··· 261 261 #define PM805_ADC_GAIN2 (0x13) 262 262 #define PM805_DMIC_SETTING (0x15) 263 263 #define PM805_DWS_SETTING (0x16) 264 - #define PM805_MIC_CONFLICT_STS (0x17) 264 + #define PM805_MIC_CONFLICT_STS (0x17) 265 265 266 266 #define PM805_PDM_SETTING1 (0x20) 267 267 #define PM805_PDM_SETTING2 (0x21) ··· 270 270 #define PM805_PDM_CONTROL2 (0x24) 271 271 #define PM805_PDM_CONTROL3 (0x25) 272 272 273 - #define PM805_HEADPHONE_SETTING (0x26) 274 - #define PM805_HEADPHONE_GAIN_A2A (0x27) 275 - #define PM805_HEADPHONE_SHORT_STATE (0x28) 276 - #define PM805_EARPHONE_SETTING (0x29) 277 - #define PM805_AUTO_SEQ_SETTING (0x2A) 273 + #define PM805_HEADPHONE_SETTING (0x26) 274 + #define PM805_HEADPHONE_GAIN_A2A (0x27) 275 + #define PM805_HEADPHONE_SHORT_STATE (0x28) 276 + #define PM805_EARPHONE_SETTING (0x29) 277 + #define PM805_AUTO_SEQ_SETTING (0x2A) 278 278 279 279 struct pm80x_rtc_pdata { 280 280 int vrtc;
+3
include/linux/mfd/arizona/core.h
··· 25 25 WM5110 = 2, 26 26 WM8997 = 3, 27 27 WM8280 = 4, 28 + WM8998 = 5, 29 + WM1814 = 6, 28 30 }; 29 31 30 32 #define ARIZONA_IRQ_GP1 0 ··· 167 165 168 166 int wm5110_patch(struct arizona *arizona); 169 167 int wm8997_patch(struct arizona *arizona); 168 + int wm8998_patch(struct arizona *arizona); 170 169 171 170 extern int arizona_of_get_named_gpio(struct arizona *arizona, const char *prop, 172 171 bool mandatory);
+8 -6
include/linux/mfd/arizona/pdata.h
··· 101 101 * useful for systems where and I2S bus with multiple data 102 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 106 /** GPIO5 is used for jack detection */ 107 107 bool jd_gpio5; ··· 125 125 unsigned int hpdet_channel; 126 126 127 127 /** Extra debounce timeout used during initial mic detection (ms) */ 128 - int micd_detect_debounce; 128 + unsigned int micd_detect_debounce; 129 129 130 130 /** GPIO for mic detection polarity */ 131 131 int micd_pol_gpio; 132 132 133 133 /** Mic detect ramp rate */ 134 - int micd_bias_start_time; 134 + unsigned int micd_bias_start_time; 135 135 136 136 /** Mic detect sample rate */ 137 - int micd_rate; 137 + unsigned int micd_rate; 138 138 139 139 /** Mic detect debounce level */ 140 - int micd_dbtime; 140 + unsigned int micd_dbtime; 141 141 142 142 /** Mic detect timeout (ms) */ 143 - int micd_timeout; 143 + unsigned int micd_timeout; 144 144 145 145 /** Force MICBIAS on for mic detect */ 146 146 bool micd_force_micbias; ··· 162 162 /** 163 163 * Mode of input structures 164 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 168 int inmode[ARIZONA_MAX_INPUT]; 167 169
+220
include/linux/mfd/arizona/registers.h
··· 139 139 #define ARIZONA_MIC_DETECT_LEVEL_2 0x2A7 140 140 #define ARIZONA_MIC_DETECT_LEVEL_3 0x2A8 141 141 #define ARIZONA_MIC_DETECT_LEVEL_4 0x2A9 142 + #define ARIZONA_MIC_DETECT_4 0x2AB 142 143 #define ARIZONA_MIC_NOISE_MIX_CONTROL_1 0x2C3 143 144 #define ARIZONA_ISOLATION_CONTROL 0x2CB 144 145 #define ARIZONA_JACK_DETECT_ANALOGUE 0x2D3 ··· 226 225 #define ARIZONA_DAC_VOLUME_LIMIT_6R 0x43E 227 226 #define ARIZONA_NOISE_GATE_SELECT_6R 0x43F 228 227 #define ARIZONA_DRE_ENABLE 0x440 228 + #define ARIZONA_DRE_CONTROL_1 0x441 229 229 #define ARIZONA_DRE_CONTROL_2 0x442 230 230 #define ARIZONA_DRE_CONTROL_3 0x443 231 + #define ARIZONA_EDRE_ENABLE 0x448 231 232 #define ARIZONA_DAC_AEC_CONTROL_1 0x450 233 + #define ARIZONA_DAC_AEC_CONTROL_2 0x451 232 234 #define ARIZONA_NOISE_GATE_CONTROL 0x458 233 235 #define ARIZONA_PDM_SPK1_CTRL_1 0x490 234 236 #define ARIZONA_PDM_SPK1_CTRL_2 0x491 235 237 #define ARIZONA_PDM_SPK2_CTRL_1 0x492 236 238 #define ARIZONA_PDM_SPK2_CTRL_2 0x493 239 + #define ARIZONA_HP_TEST_CTRL_13 0x49A 237 240 #define ARIZONA_HP1_SHORT_CIRCUIT_CTRL 0x4A0 238 241 #define ARIZONA_HP2_SHORT_CIRCUIT_CTRL 0x4A1 239 242 #define ARIZONA_HP3_SHORT_CIRCUIT_CTRL 0x4A2 ··· 315 310 #define ARIZONA_AIF3_TX_ENABLES 0x599 316 311 #define ARIZONA_AIF3_RX_ENABLES 0x59A 317 312 #define ARIZONA_AIF3_FORCE_WRITE 0x59B 313 + #define ARIZONA_SPD1_TX_CONTROL 0x5C2 314 + #define ARIZONA_SPD1_TX_CHANNEL_STATUS_1 0x5C3 315 + #define ARIZONA_SPD1_TX_CHANNEL_STATUS_2 0x5C4 316 + #define ARIZONA_SPD1_TX_CHANNEL_STATUS_3 0x5C5 318 317 #define ARIZONA_SLIMBUS_FRAMER_REF_GEAR 0x5E3 319 318 #define ARIZONA_SLIMBUS_RATES_1 0x5E5 320 319 #define ARIZONA_SLIMBUS_RATES_2 0x5E6 ··· 652 643 #define ARIZONA_SLIMTX8MIX_INPUT_3_VOLUME 0x7FD 653 644 #define ARIZONA_SLIMTX8MIX_INPUT_4_SOURCE 0x7FE 654 645 #define ARIZONA_SLIMTX8MIX_INPUT_4_VOLUME 0x7FF 646 + #define ARIZONA_SPDIFTX1MIX_INPUT_1_SOURCE 0x800 647 + #define ARIZONA_SPDIFTX1MIX_INPUT_1_VOLUME 0x801 648 + #define ARIZONA_SPDIFTX2MIX_INPUT_1_SOURCE 0x808 649 + #define ARIZONA_SPDIFTX2MIX_INPUT_1_VOLUME 0x809 655 650 #define ARIZONA_EQ1MIX_INPUT_1_SOURCE 0x880 656 651 #define ARIZONA_EQ1MIX_INPUT_1_VOLUME 0x881 657 652 #define ARIZONA_EQ1MIX_INPUT_2_SOURCE 0x882 ··· 881 868 #define ARIZONA_GPIO5_CTRL 0xC04 882 869 #define ARIZONA_IRQ_CTRL_1 0xC0F 883 870 #define ARIZONA_GPIO_DEBOUNCE_CONFIG 0xC10 871 + #define ARIZONA_GP_SWITCH_1 0xC18 884 872 #define ARIZONA_MISC_PAD_CTRL_1 0xC20 885 873 #define ARIZONA_MISC_PAD_CTRL_2 0xC21 886 874 #define ARIZONA_MISC_PAD_CTRL_3 0xC22 ··· 1183 1169 #define ARIZONA_DSP4_SCRATCH_1 0x1441 1184 1170 #define ARIZONA_DSP4_SCRATCH_2 0x1442 1185 1171 #define ARIZONA_DSP4_SCRATCH_3 0x1443 1172 + #define ARIZONA_FRF_COEFF_1 0x1700 1173 + #define ARIZONA_FRF_COEFF_2 0x1701 1174 + #define ARIZONA_FRF_COEFF_3 0x1702 1175 + #define ARIZONA_FRF_COEFF_4 0x1703 1176 + #define ARIZONA_V2_DAC_COMP_1 0x1704 1177 + #define ARIZONA_V2_DAC_COMP_2 0x1705 1178 + 1186 1179 1187 1180 /* 1188 1181 * Field Definitions. ··· 2346 2325 #define ARIZONA_HP_IDAC_STEER_MASK 0x0004 /* HP_IDAC_STEER */ 2347 2326 #define ARIZONA_HP_IDAC_STEER_SHIFT 2 /* HP_IDAC_STEER */ 2348 2327 #define ARIZONA_HP_IDAC_STEER_WIDTH 1 /* HP_IDAC_STEER */ 2328 + #define WM8998_HP_RATE_MASK 0x0006 /* HP_RATE - [2:1] */ 2329 + #define WM8998_HP_RATE_SHIFT 1 /* HP_RATE - [2:1] */ 2330 + #define WM8998_HP_RATE_WIDTH 2 /* HP_RATE - [2:1] */ 2349 2331 #define ARIZONA_HP_RATE 0x0002 /* HP_RATE */ 2350 2332 #define ARIZONA_HP_RATE_MASK 0x0002 /* HP_RATE */ 2351 2333 #define ARIZONA_HP_RATE_SHIFT 1 /* HP_RATE */ ··· 2435 2411 #define ARIZONA_MICD_STS_MASK 0x0001 /* MICD_STS */ 2436 2412 #define ARIZONA_MICD_STS_SHIFT 0 /* MICD_STS */ 2437 2413 #define ARIZONA_MICD_STS_WIDTH 1 /* MICD_STS */ 2414 + 2415 + /* 2416 + * R683 (0x2AB) - Mic Detect 4 2417 + */ 2418 + #define ARIZONA_MICDET_ADCVAL_DIFF_MASK 0xFF00 /* MICDET_ADCVAL_DIFF - [15:8] */ 2419 + #define ARIZONA_MICDET_ADCVAL_DIFF_SHIFT 8 /* MICDET_ADCVAL_DIFF - [15:8] */ 2420 + #define ARIZONA_MICDET_ADCVAL_DIFF_WIDTH 8 /* MICDET_ADCVAL_DIFF - [15:8] */ 2421 + #define ARIZONA_MICDET_ADCVAL_MASK 0x007F /* MICDET_ADCVAL - [15:8] */ 2422 + #define ARIZONA_MICDET_ADCVAL_SHIFT 0 /* MICDET_ADCVAL - [15:8] */ 2423 + #define ARIZONA_MICDET_ADCVAL_WIDTH 7 /* MICDET_ADCVAL - [15:8] */ 2438 2424 2439 2425 /* 2440 2426 * R707 (0x2C3) - Mic noise mix control 1 ··· 2562 2528 /* 2563 2529 * R785 (0x311) - ADC Digital Volume 1L 2564 2530 */ 2531 + #define ARIZONA_IN1L_SRC_MASK 0x4000 /* IN1L_SRC - [14] */ 2532 + #define ARIZONA_IN1L_SRC_SHIFT 14 /* IN1L_SRC - [14] */ 2533 + #define ARIZONA_IN1L_SRC_WIDTH 1 /* IN1L_SRC - [14] */ 2534 + #define ARIZONA_IN1L_SRC_SE_MASK 0x2000 /* IN1L_SRC - [13] */ 2535 + #define ARIZONA_IN1L_SRC_SE_SHIFT 13 /* IN1L_SRC - [13] */ 2536 + #define ARIZONA_IN1L_SRC_SE_WIDTH 1 /* IN1L_SRC - [13] */ 2565 2537 #define ARIZONA_IN_VU 0x0200 /* IN_VU */ 2566 2538 #define ARIZONA_IN_VU_MASK 0x0200 /* IN_VU */ 2567 2539 #define ARIZONA_IN_VU_SHIFT 9 /* IN_VU */ ··· 2600 2560 /* 2601 2561 * R789 (0x315) - ADC Digital Volume 1R 2602 2562 */ 2563 + #define ARIZONA_IN1R_SRC_MASK 0x4000 /* IN1R_SRC - [14] */ 2564 + #define ARIZONA_IN1R_SRC_SHIFT 14 /* IN1R_SRC - [14] */ 2565 + #define ARIZONA_IN1R_SRC_WIDTH 1 /* IN1R_SRC - [14] */ 2566 + #define ARIZONA_IN1R_SRC_SE_MASK 0x2000 /* IN1R_SRC - [13] */ 2567 + #define ARIZONA_IN1R_SRC_SE_SHIFT 13 /* IN1R_SRC - [13] */ 2568 + #define ARIZONA_IN1R_SRC_SE_WIDTH 1 /* IN1R_SRC - [13] */ 2603 2569 #define ARIZONA_IN_VU 0x0200 /* IN_VU */ 2604 2570 #define ARIZONA_IN_VU_MASK 0x0200 /* IN_VU */ 2605 2571 #define ARIZONA_IN_VU_SHIFT 9 /* IN_VU */ ··· 2650 2604 /* 2651 2605 * R793 (0x319) - ADC Digital Volume 2L 2652 2606 */ 2607 + #define ARIZONA_IN2L_SRC_MASK 0x4000 /* IN2L_SRC - [14] */ 2608 + #define ARIZONA_IN2L_SRC_SHIFT 14 /* IN2L_SRC - [14] */ 2609 + #define ARIZONA_IN2L_SRC_WIDTH 1 /* IN2L_SRC - [14] */ 2610 + #define ARIZONA_IN2L_SRC_SE_MASK 0x2000 /* IN2L_SRC - [13] */ 2611 + #define ARIZONA_IN2L_SRC_SE_SHIFT 13 /* IN2L_SRC - [13] */ 2612 + #define ARIZONA_IN2L_SRC_SE_WIDTH 1 /* IN2L_SRC - [13] */ 2653 2613 #define ARIZONA_IN_VU 0x0200 /* IN_VU */ 2654 2614 #define ARIZONA_IN_VU_MASK 0x0200 /* IN_VU */ 2655 2615 #define ARIZONA_IN_VU_SHIFT 9 /* IN_VU */ ··· 3464 3412 #define ARIZONA_DRE1L_ENA_WIDTH 1 /* DRE1L_ENA */ 3465 3413 3466 3414 /* 3415 + * R1088 (0x440) - DRE Enable (WM8998) 3416 + */ 3417 + #define WM8998_DRE3L_ENA 0x0020 /* DRE3L_ENA */ 3418 + #define WM8998_DRE3L_ENA_MASK 0x0020 /* DRE3L_ENA */ 3419 + #define WM8998_DRE3L_ENA_SHIFT 5 /* DRE3L_ENA */ 3420 + #define WM8998_DRE3L_ENA_WIDTH 1 /* DRE3L_ENA */ 3421 + #define WM8998_DRE2L_ENA 0x0008 /* DRE2L_ENA */ 3422 + #define WM8998_DRE2L_ENA_MASK 0x0008 /* DRE2L_ENA */ 3423 + #define WM8998_DRE2L_ENA_SHIFT 3 /* DRE2L_ENA */ 3424 + #define WM8998_DRE2L_ENA_WIDTH 1 /* DRE2L_ENA */ 3425 + #define WM8998_DRE2R_ENA 0x0004 /* DRE2R_ENA */ 3426 + #define WM8998_DRE2R_ENA_MASK 0x0004 /* DRE2R_ENA */ 3427 + #define WM8998_DRE2R_ENA_SHIFT 2 /* DRE2R_ENA */ 3428 + #define WM8998_DRE2R_ENA_WIDTH 1 /* DRE2R_ENA */ 3429 + #define WM8998_DRE1L_ENA 0x0002 /* DRE1L_ENA */ 3430 + #define WM8998_DRE1L_ENA_MASK 0x0002 /* DRE1L_ENA */ 3431 + #define WM8998_DRE1L_ENA_SHIFT 1 /* DRE1L_ENA */ 3432 + #define WM8998_DRE1L_ENA_WIDTH 1 /* DRE1L_ENA */ 3433 + #define WM8998_DRE1R_ENA 0x0001 /* DRE1R_ENA */ 3434 + #define WM8998_DRE1R_ENA_MASK 0x0001 /* DRE1R_ENA */ 3435 + #define WM8998_DRE1R_ENA_SHIFT 0 /* DRE1R_ENA */ 3436 + #define WM8998_DRE1R_ENA_WIDTH 1 /* DRE1R_ENA */ 3437 + 3438 + /* 3439 + * R1089 (0x441) - DRE Control 1 3440 + */ 3441 + #define ARIZONA_DRE_ENV_TC_FAST_MASK 0x0F00 /* DRE_ENV_TC_FAST - [11:8] */ 3442 + #define ARIZONA_DRE_ENV_TC_FAST_SHIFT 8 /* DRE_ENV_TC_FAST - [11:8] */ 3443 + #define ARIZONA_DRE_ENV_TC_FAST_WIDTH 4 /* DRE_ENV_TC_FAST - [11:8] */ 3444 + 3445 + /* 3467 3446 * R1090 (0x442) - DRE Control 2 3468 3447 */ 3469 3448 #define ARIZONA_DRE_T_LOW_MASK 0x3F00 /* DRE_T_LOW - [13:8] */ 3470 3449 #define ARIZONA_DRE_T_LOW_SHIFT 8 /* DRE_T_LOW - [13:8] */ 3471 3450 #define ARIZONA_DRE_T_LOW_WIDTH 6 /* DRE_T_LOW - [13:8] */ 3451 + #define ARIZONA_DRE_ALOG_VOL_DELAY_MASK 0x000F /* DRE_ALOG_VOL_DELAY - [3:0] */ 3452 + #define ARIZONA_DRE_ALOG_VOL_DELAY_SHIFT 0 /* DRE_ALOG_VOL_DELAY - [3:0] */ 3453 + #define ARIZONA_DRE_ALOG_VOL_DELAY_WIDTH 4 /* DRE_ALOG_VOL_DELAY - [3:0] */ 3472 3454 3473 3455 /* 3474 3456 * R1091 (0x443) - DRE Control 3 ··· 3513 3427 #define ARIZONA_DRE_LOW_LEVEL_ABS_MASK 0x000F /* LOW_LEVEL_ABS - [3:0] */ 3514 3428 #define ARIZONA_DRE_LOW_LEVEL_ABS_SHIFT 0 /* LOW_LEVEL_ABS - [3:0] */ 3515 3429 #define ARIZONA_DRE_LOW_LEVEL_ABS_WIDTH 4 /* LOW_LEVEL_ABS - [3:0] */ 3430 + 3431 + /* R486 (0x448) - EDRE_Enable 3432 + */ 3433 + #define ARIZONA_EDRE_OUT4L_THR2_ENA 0x0200 /* EDRE_OUT4L_THR2_ENA */ 3434 + #define ARIZONA_EDRE_OUT4L_THR2_ENA_MASK 0x0200 /* EDRE_OUT4L_THR2_ENA */ 3435 + #define ARIZONA_EDRE_OUT4L_THR2_ENA_SHIFT 9 /* EDRE_OUT4L_THR2_ENA */ 3436 + #define ARIZONA_EDRE_OUT4L_THR2_ENA_WIDTH 1 /* EDRE_OUT4L_THR2_ENA */ 3437 + #define ARIZONA_EDRE_OUT4R_THR2_ENA 0x0100 /* EDRE_OUT4R_THR2_ENA */ 3438 + #define ARIZONA_EDRE_OUT4R_THR2_ENA_MASK 0x0100 /* EDRE_OUT4R_THR2_ENA */ 3439 + #define ARIZONA_EDRE_OUT4R_THR2_ENA_SHIFT 8 /* EDRE_OUT4R_THR2_ENA */ 3440 + #define ARIZONA_EDRE_OUT4R_THR2_ENA_WIDTH 1 /* EDRE_OUT4R_THR2_ENA */ 3441 + #define ARIZONA_EDRE_OUT4L_THR1_ENA 0x0080 /* EDRE_OUT4L_THR1_ENA */ 3442 + #define ARIZONA_EDRE_OUT4L_THR1_ENA_MASK 0x0080 /* EDRE_OUT4L_THR1_ENA */ 3443 + #define ARIZONA_EDRE_OUT4L_THR1_ENA_SHIFT 7 /* EDRE_OUT4L_THR1_ENA */ 3444 + #define ARIZONA_EDRE_OUT4L_THR1_ENA_WIDTH 1 /* EDRE_OUT4L_THR1_ENA */ 3445 + #define ARIZONA_EDRE_OUT4R_THR1_ENA 0x0040 /* EDRE_OUT4R_THR1_ENA */ 3446 + #define ARIZONA_EDRE_OUT4R_THR1_ENA_MASK 0x0040 /* EDRE_OUT4R_THR1_ENA */ 3447 + #define ARIZONA_EDRE_OUT4R_THR1_ENA_SHIFT 6 /* EDRE_OUT4R_THR1_ENA */ 3448 + #define ARIZONA_EDRE_OUT4R_THR1_ENA_WIDTH 1 /* EDRE_OUT4R_THR1_ENA */ 3449 + #define ARIZONA_EDRE_OUT3L_THR1_ENA 0x0020 /* EDRE_OUT3L_THR1_ENA */ 3450 + #define ARIZONA_EDRE_OUT3L_THR1_ENA_MASK 0x0020 /* EDRE_OUT3L_THR1_ENA */ 3451 + #define ARIZONA_EDRE_OUT3L_THR1_ENA_SHIFT 5 /* EDRE_OUT3L_THR1_ENA */ 3452 + #define ARIZONA_EDRE_OUT3L_THR1_ENA_WIDTH 1 /* EDRE_OUT3L_THR1_ENA */ 3453 + #define ARIZONA_EDRE_OUT3R_THR1_ENA 0x0010 /* EDRE_OUT3R_THR1_ENA */ 3454 + #define ARIZONA_EDRE_OUT3R_THR1_ENA_MASK 0x0010 /* EDRE_OUT3R_THR1_ENA */ 3455 + #define ARIZONA_EDRE_OUT3R_THR1_ENA_SHIFT 4 /* EDRE_OUT3R_THR1_ENA */ 3456 + #define ARIZONA_EDRE_OUT3R_THR1_ENA_WIDTH 1 /* EDRE_OUT3R_THR1_ENA */ 3457 + #define ARIZONA_EDRE_OUT2L_THR1_ENA 0x0008 /* EDRE_OUT2L_THR1_ENA */ 3458 + #define ARIZONA_EDRE_OUT2L_THR1_ENA_MASK 0x0008 /* EDRE_OUT2L_THR1_ENA */ 3459 + #define ARIZONA_EDRE_OUT2L_THR1_ENA_SHIFT 3 /* EDRE_OUT2L_THR1_ENA */ 3460 + #define ARIZONA_EDRE_OUT2L_THR1_ENA_WIDTH 1 /* EDRE_OUT2L_THR1_ENA */ 3461 + #define ARIZONA_EDRE_OUT2R_THR1_ENA 0x0004 /* EDRE_OUT2R_THR1_ENA */ 3462 + #define ARIZONA_EDRE_OUT2R_THR1_ENA_MASK 0x0004 /* EDRE_OUT2R_THR1_ENA */ 3463 + #define ARIZONA_EDRE_OUT2R_THR1_ENA_SHIFT 2 /* EDRE_OUT2R_THR1_ENA */ 3464 + #define ARIZONA_EDRE_OUT2R_THR1_ENA_WIDTH 1 /* EDRE_OUT2R_THR1_ENA */ 3465 + #define ARIZONA_EDRE_OUT1L_THR1_ENA 0x0002 /* EDRE_OUT1L_THR1_ENA */ 3466 + #define ARIZONA_EDRE_OUT1L_THR1_ENA_MASK 0x0002 /* EDRE_OUT1L_THR1_ENA */ 3467 + #define ARIZONA_EDRE_OUT1L_THR1_ENA_SHIFT 1 /* EDRE_OUT1L_THR1_ENA */ 3468 + #define ARIZONA_EDRE_OUT1L_THR1_ENA_WIDTH 1 /* EDRE_OUT1L_THR1_ENA */ 3469 + #define ARIZONA_EDRE_OUT1R_THR1_ENA 0x0001 /* EDRE_OUT1R_THR1_ENA */ 3470 + #define ARIZONA_EDRE_OUT1R_THR1_ENA_MASK 0x0001 /* EDRE_OUT1R_THR1_ENA */ 3471 + #define ARIZONA_EDRE_OUT1R_THR1_ENA_SHIFT 0 /* EDRE_OUT1R_THR1_ENA */ 3472 + #define ARIZONA_EDRE_OUT1R_THR1_ENA_WIDTH 1 /* EDRE_OUT1R_THR1_ENA */ 3516 3473 3517 3474 /* 3518 3475 * R1104 (0x450) - DAC AEC Control 1 ··· 4437 4308 #define ARIZONA_AIF3_FRC_WR_WIDTH 1 /* AIF3_FRC_WR */ 4438 4309 4439 4310 /* 4311 + * R1474 (0x5C2) - SPD1 TX Control 4312 + */ 4313 + #define ARIZONA_SPD1_VAL2 0x2000 /* SPD1_VAL2 */ 4314 + #define ARIZONA_SPD1_VAL2_MASK 0x2000 /* SPD1_VAL2 */ 4315 + #define ARIZONA_SPD1_VAL2_SHIFT 13 /* SPD1_VAL2 */ 4316 + #define ARIZONA_SPD1_VAL2_WIDTH 1 /* SPD1_VAL2 */ 4317 + #define ARIZONA_SPD1_VAL1 0x1000 /* SPD1_VAL1 */ 4318 + #define ARIZONA_SPD1_VAL1_MASK 0x1000 /* SPD1_VAL1 */ 4319 + #define ARIZONA_SPD1_VAL1_SHIFT 12 /* SPD1_VAL1 */ 4320 + #define ARIZONA_SPD1_VAL1_WIDTH 1 /* SPD1_VAL1 */ 4321 + #define ARIZONA_SPD1_RATE_MASK 0x00F0 /* SPD1_RATE */ 4322 + #define ARIZONA_SPD1_RATE_SHIFT 4 /* SPD1_RATE */ 4323 + #define ARIZONA_SPD1_RATE_WIDTH 4 /* SPD1_RATE */ 4324 + #define ARIZONA_SPD1_ENA 0x0001 /* SPD1_ENA */ 4325 + #define ARIZONA_SPD1_ENA_MASK 0x0001 /* SPD1_ENA */ 4326 + #define ARIZONA_SPD1_ENA_SHIFT 0 /* SPD1_ENA */ 4327 + #define ARIZONA_SPD1_ENA_WIDTH 1 /* SPD1_ENA */ 4328 + 4329 + /* 4330 + * R1475 (0x5C3) - SPD1 TX Channel Status 1 4331 + */ 4332 + #define ARIZONA_SPD1_CATCODE_MASK 0xFF00 /* SPD1_CATCODE */ 4333 + #define ARIZONA_SPD1_CATCODE_SHIFT 8 /* SPD1_CATCODE */ 4334 + #define ARIZONA_SPD1_CATCODE_WIDTH 8 /* SPD1_CATCODE */ 4335 + #define ARIZONA_SPD1_CHSTMODE_MASK 0x00C0 /* SPD1_CHSTMODE */ 4336 + #define ARIZONA_SPD1_CHSTMODE_SHIFT 6 /* SPD1_CHSTMODE */ 4337 + #define ARIZONA_SPD1_CHSTMODE_WIDTH 2 /* SPD1_CHSTMODE */ 4338 + #define ARIZONA_SPD1_PREEMPH_MASK 0x0038 /* SPD1_PREEMPH */ 4339 + #define ARIZONA_SPD1_PREEMPH_SHIFT 3 /* SPD1_PREEMPH */ 4340 + #define ARIZONA_SPD1_PREEMPH_WIDTH 3 /* SPD1_PREEMPH */ 4341 + #define ARIZONA_SPD1_NOCOPY 0x0004 /* SPD1_NOCOPY */ 4342 + #define ARIZONA_SPD1_NOCOPY_MASK 0x0004 /* SPD1_NOCOPY */ 4343 + #define ARIZONA_SPD1_NOCOPY_SHIFT 2 /* SPD1_NOCOPY */ 4344 + #define ARIZONA_SPD1_NOCOPY_WIDTH 1 /* SPD1_NOCOPY */ 4345 + #define ARIZONA_SPD1_NOAUDIO 0x0002 /* SPD1_NOAUDIO */ 4346 + #define ARIZONA_SPD1_NOAUDIO_MASK 0x0002 /* SPD1_NOAUDIO */ 4347 + #define ARIZONA_SPD1_NOAUDIO_SHIFT 1 /* SPD1_NOAUDIO */ 4348 + #define ARIZONA_SPD1_NOAUDIO_WIDTH 1 /* SPD1_NOAUDIO */ 4349 + #define ARIZONA_SPD1_PRO 0x0001 /* SPD1_PRO */ 4350 + #define ARIZONA_SPD1_PRO_MASK 0x0001 /* SPD1_PRO */ 4351 + #define ARIZONA_SPD1_PRO_SHIFT 0 /* SPD1_PRO */ 4352 + #define ARIZONA_SPD1_PRO_WIDTH 1 /* SPD1_PRO */ 4353 + 4354 + /* 4355 + * R1475 (0x5C4) - SPD1 TX Channel Status 2 4356 + */ 4357 + #define ARIZONA_SPD1_FREQ_MASK 0xF000 /* SPD1_FREQ */ 4358 + #define ARIZONA_SPD1_FREQ_SHIFT 12 /* SPD1_FREQ */ 4359 + #define ARIZONA_SPD1_FREQ_WIDTH 4 /* SPD1_FREQ */ 4360 + #define ARIZONA_SPD1_CHNUM2_MASK 0x0F00 /* SPD1_CHNUM2 */ 4361 + #define ARIZONA_SPD1_CHNUM2_SHIFT 8 /* SPD1_CHNUM2 */ 4362 + #define ARIZONA_SPD1_CHNUM2_WIDTH 4 /* SPD1_CHNUM2 */ 4363 + #define ARIZONA_SPD1_CHNUM1_MASK 0x00F0 /* SPD1_CHNUM1 */ 4364 + #define ARIZONA_SPD1_CHNUM1_SHIFT 4 /* SPD1_CHNUM1 */ 4365 + #define ARIZONA_SPD1_CHNUM1_WIDTH 4 /* SPD1_CHNUM1 */ 4366 + #define ARIZONA_SPD1_SRCNUM_MASK 0x000F /* SPD1_SRCNUM */ 4367 + #define ARIZONA_SPD1_SRCNUM_SHIFT 0 /* SPD1_SRCNUM */ 4368 + #define ARIZONA_SPD1_SRCNUM_WIDTH 4 /* SPD1_SRCNUM */ 4369 + 4370 + /* 4371 + * R1475 (0x5C5) - SPD1 TX Channel Status 3 4372 + */ 4373 + #define ARIZONA_SPD1_ORGSAMP_MASK 0x0F00 /* SPD1_ORGSAMP */ 4374 + #define ARIZONA_SPD1_ORGSAMP_SHIFT 8 /* SPD1_ORGSAMP */ 4375 + #define ARIZONA_SPD1_ORGSAMP_WIDTH 4 /* SPD1_ORGSAMP */ 4376 + #define ARIZONA_SPD1_TXWL_MASK 0x00E0 /* SPD1_TXWL */ 4377 + #define ARIZONA_SPD1_TXWL_SHIFT 5 /* SPD1_TXWL */ 4378 + #define ARIZONA_SPD1_TXWL_WIDTH 3 /* SPD1_TXWL */ 4379 + #define ARIZONA_SPD1_MAXWL 0x0010 /* SPD1_MAXWL */ 4380 + #define ARIZONA_SPD1_MAXWL_MASK 0x0010 /* SPD1_MAXWL */ 4381 + #define ARIZONA_SPD1_MAXWL_SHIFT 4 /* SPD1_MAXWL */ 4382 + #define ARIZONA_SPD1_MAXWL_WIDTH 1 /* SPD1_MAXWL */ 4383 + #define ARIZONA_SPD1_CS31_30_MASK 0x000C /* SPD1_CS31_30 */ 4384 + #define ARIZONA_SPD1_CS31_30_SHIFT 2 /* SPD1_CS31_30 */ 4385 + #define ARIZONA_SPD1_CS31_30_WIDTH 2 /* SPD1_CS31_30 */ 4386 + #define ARIZONA_SPD1_CLKACU_MASK 0x0003 /* SPD1_CLKACU */ 4387 + #define ARIZONA_SPD1_CLKACU_SHIFT 2 /* SPD1_CLKACU */ 4388 + #define ARIZONA_SPD1_CLKACU_WIDTH 0 /* SPD1_CLKACU */ 4389 + 4390 + /* 4440 4391 * R1507 (0x5E3) - SLIMbus Framer Ref Gear 4441 4392 */ 4442 4393 #define ARIZONA_SLIMCLK_SRC 0x0010 /* SLIMCLK_SRC */ ··· 4769 4560 #define ARIZONA_GP_DBTIME_MASK 0xF000 /* GP_DBTIME - [15:12] */ 4770 4561 #define ARIZONA_GP_DBTIME_SHIFT 12 /* GP_DBTIME - [15:12] */ 4771 4562 #define ARIZONA_GP_DBTIME_WIDTH 4 /* GP_DBTIME - [15:12] */ 4563 + 4564 + /* 4565 + * R3096 (0xC18) - GP Switch 1 4566 + */ 4567 + #define ARIZONA_SW1_MODE_MASK 0x0003 /* SW1_MODE - [1:0] */ 4568 + #define ARIZONA_SW1_MODE_SHIFT 0 /* SW1_MODE - [1:0] */ 4569 + #define ARIZONA_SW1_MODE_WIDTH 2 /* SW1_MODE - [1:0] */ 4772 4570 4773 4571 /* 4774 4572 * R3104 (0xC20) - Misc Pad Ctrl 1 ··· 6517 6301 /* 6518 6302 * R3366 (0xD26) - Interrupt Raw Status 8 6519 6303 */ 6304 + #define ARIZONA_SPDIF_OVERCLOCKED_STS 0x8000 /* SPDIF_OVERCLOCKED_STS */ 6305 + #define ARIZONA_SPDIF_OVERCLOCKED_STS_MASK 0x8000 /* SPDIF_OVERCLOCKED_STS */ 6306 + #define ARIZONA_SPDIF_OVERCLOCKED_STS_SHIFT 15 /* SPDIF_OVERCLOCKED_STS */ 6307 + #define ARIZONA_SPDIF_OVERCLOCKED_STS_WIDTH 1 /* SPDIF_OVERCLOCKED_STS */ 6520 6308 #define ARIZONA_AIF3_UNDERCLOCKED_STS 0x0400 /* AIF3_UNDERCLOCKED_STS */ 6521 6309 #define ARIZONA_AIF3_UNDERCLOCKED_STS_MASK 0x0400 /* AIF3_UNDERCLOCKED_STS */ 6522 6310 #define ARIZONA_AIF3_UNDERCLOCKED_STS_SHIFT 10 /* AIF3_UNDERCLOCKED_STS */
+66 -1
include/linux/mfd/axp20x.h
··· 12 12 #define __LINUX_MFD_AXP20X_H 13 13 14 14 enum { 15 - AXP202_ID = 0, 15 + AXP152_ID = 0, 16 + AXP202_ID, 16 17 AXP209_ID, 17 18 AXP221_ID, 18 19 AXP288_ID, ··· 23 22 #define AXP20X_DATACACHE(m) (0x04 + (m)) 24 23 25 24 /* Power supply */ 25 + #define AXP152_PWR_OP_MODE 0x01 26 + #define AXP152_LDO3456_DC1234_CTRL 0x12 27 + #define AXP152_ALDO_OP_MODE 0x13 28 + #define AXP152_LDO0_CTRL 0x15 29 + #define AXP152_DCDC2_V_OUT 0x23 30 + #define AXP152_DCDC2_V_SCAL 0x25 31 + #define AXP152_DCDC1_V_OUT 0x26 32 + #define AXP152_DCDC3_V_OUT 0x27 33 + #define AXP152_ALDO12_V_OUT 0x28 34 + #define AXP152_DLDO1_V_OUT 0x29 35 + #define AXP152_DLDO2_V_OUT 0x2a 36 + #define AXP152_DCDC4_V_OUT 0x2b 37 + #define AXP152_V_OFF 0x31 38 + #define AXP152_OFF_CTRL 0x32 39 + #define AXP152_PEK_KEY 0x36 40 + #define AXP152_DCDC_FREQ 0x37 41 + #define AXP152_DCDC_MODE 0x80 42 + 26 43 #define AXP20X_PWR_INPUT_STATUS 0x00 27 44 #define AXP20X_PWR_OP_MODE 0x01 28 45 #define AXP20X_USB_OTG_STATUS 0x02 ··· 88 69 #define AXP22X_CHRG_CTRL3 0x35 89 70 90 71 /* Interrupt */ 72 + #define AXP152_IRQ1_EN 0x40 73 + #define AXP152_IRQ2_EN 0x41 74 + #define AXP152_IRQ3_EN 0x42 75 + #define AXP152_IRQ1_STATE 0x48 76 + #define AXP152_IRQ2_STATE 0x49 77 + #define AXP152_IRQ3_STATE 0x4a 78 + 91 79 #define AXP20X_IRQ1_EN 0x40 92 80 #define AXP20X_IRQ2_EN 0x41 93 81 #define AXP20X_IRQ3_EN 0x42 ··· 153 127 #define AXP22X_PWREN_CTRL2 0x8d 154 128 155 129 /* GPIO */ 130 + #define AXP152_GPIO0_CTRL 0x90 131 + #define AXP152_GPIO1_CTRL 0x91 132 + #define AXP152_GPIO2_CTRL 0x92 133 + #define AXP152_GPIO3_CTRL 0x93 134 + #define AXP152_LDOGPIO2_V_OUT 0x96 135 + #define AXP152_GPIO_INPUT 0x97 136 + #define AXP152_PWM0_FREQ_X 0x98 137 + #define AXP152_PWM0_FREQ_Y 0x99 138 + #define AXP152_PWM0_DUTY_CYCLE 0x9a 139 + #define AXP152_PWM1_FREQ_X 0x9b 140 + #define AXP152_PWM1_FREQ_Y 0x9c 141 + #define AXP152_PWM1_DUTY_CYCLE 0x9d 142 + 156 143 #define AXP20X_GPIO0_CTRL 0x90 157 144 #define AXP20X_LDO5_V_OUT 0x91 158 145 #define AXP20X_GPIO1_CTRL 0x92 ··· 189 150 #define AXP20X_DISCHRG_CC_7_0 0xb7 190 151 #define AXP20X_CC_CTRL 0xb8 191 152 #define AXP20X_FG_RES 0xb9 153 + 154 + /* OCV */ 155 + #define AXP20X_RDC_H 0xba 156 + #define AXP20X_RDC_L 0xbb 157 + #define AXP20X_OCV(m) (0xc0 + (m)) 158 + #define AXP20X_OCV_MAX 0xf 192 159 193 160 /* AXP22X specific registers */ 194 161 #define AXP22X_BATLOW_THRES1 0xe6 ··· 262 217 }; 263 218 264 219 /* IRQs */ 220 + enum { 221 + AXP152_IRQ_LDO0IN_CONNECT = 1, 222 + AXP152_IRQ_LDO0IN_REMOVAL, 223 + AXP152_IRQ_ALDO0IN_CONNECT, 224 + AXP152_IRQ_ALDO0IN_REMOVAL, 225 + AXP152_IRQ_DCDC1_V_LOW, 226 + AXP152_IRQ_DCDC2_V_LOW, 227 + AXP152_IRQ_DCDC3_V_LOW, 228 + AXP152_IRQ_DCDC4_V_LOW, 229 + AXP152_IRQ_PEK_SHORT, 230 + AXP152_IRQ_PEK_LONG, 231 + AXP152_IRQ_TIMER, 232 + AXP152_IRQ_PEK_RIS_EDGE, 233 + AXP152_IRQ_PEK_FAL_EDGE, 234 + AXP152_IRQ_GPIO3_INPUT, 235 + AXP152_IRQ_GPIO2_INPUT, 236 + AXP152_IRQ_GPIO1_INPUT, 237 + AXP152_IRQ_GPIO0_INPUT, 238 + }; 239 + 265 240 enum { 266 241 AXP20X_IRQ_ACIN_OVER_V = 1, 267 242 AXP20X_IRQ_ACIN_PLUGIN,
+50
include/linux/mfd/da9062/core.h
··· 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 */ 22 + enum 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 + 44 + struct 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__ */
+1108
include/linux/mfd/da9062/registers.h
··· 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__ */
+1
include/linux/mfd/da9063/core.h
··· 51 51 DA9063_IRQ_COMP_1V2, 52 52 DA9063_IRQ_LDO_LIM, 53 53 DA9063_IRQ_REG_UVOV, 54 + DA9063_IRQ_DVC_RDY, 54 55 DA9063_IRQ_VDD_MON, 55 56 DA9063_IRQ_WARN, 56 57 DA9063_IRQ_GPI0,
-6
include/linux/mfd/lpc_ich.h
··· 20 20 #ifndef LPC_ICH_H 21 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 23 /* GPIO resources */ 30 24 #define ICH_RES_GPIO 0 31 25 #define ICH_RES_GPE0 1
+1
include/linux/mfd/mt6397/core.h
··· 57 57 int irq; 58 58 struct irq_domain *irq_domain; 59 59 struct mutex irqlock; 60 + u16 wake_mask[2]; 60 61 u16 irq_masks_cur[2]; 61 62 u16 irq_masks_cache[2]; 62 63 };
+19
include/linux/platform_data/itco_wdt.h
··· 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 + 14 + struct itco_wdt_platform_data { 15 + char name[32]; 16 + unsigned int version; 17 + }; 18 + 19 + #endif /* _ITCO_WDT_H_ */