On Sun, 22 Feb 2015, Sascha Hauer wrote:

> From: Flora Fu <flora...@mediatek.com>
> 
> This adds support for the MediaTek MT6397 PMIC. This is a
> multifunction device with the following sub modules:
> 
> - Regulator
> - RTC
> - Audio codec
> - GPIO
> - Clock
> 
> It is interfaced to the host controller using SPI interface by a proprietary
> hardware called PMIC wrapper or pwrap. MT6397 MFD is a child device of the
> pwrap.
> 
> Signed-off-by: Flora Fu, MediaTek
> Signed-off-by: Sascha Hauer <s.ha...@pengutronix.de>
> Cc: Samuel Ortiz <sa...@linux.intel.com>
> Cc: Lee Jones <lee.jo...@linaro.org>
> ---
>  drivers/mfd/Kconfig                  |  10 +
>  drivers/mfd/Makefile                 |   1 +
>  drivers/mfd/mt6397-core.c            | 223 +++++++++++++++++++++
>  include/linux/mfd/mt6397/core.h      |  64 +++++++
>  include/linux/mfd/mt6397/registers.h | 362 
> +++++++++++++++++++++++++++++++++++
>  5 files changed, 660 insertions(+)
>  create mode 100644 drivers/mfd/mt6397-core.c
>  create mode 100644 include/linux/mfd/mt6397/core.h
>  create mode 100644 include/linux/mfd/mt6397/registers.h

I'm pretty sure I already Acked this.  Please ensure these are carried
forward to mitigate wasted time due to duplicated effort.

Patch applied, thanks.

> diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig
> index 2e6b731..7782e95 100644
> --- a/drivers/mfd/Kconfig
> +++ b/drivers/mfd/Kconfig
> @@ -489,6 +489,16 @@ config MFD_MAX8998
>         additional drivers must be enabled in order to use the functionality
>         of the device.
>  
> +config MFD_MT6397
> +     tristate "MediaTek MT6397 PMIC Support"
> +     select MFD_CORE
> +     select IRQ_DOMAIN
> +     help
> +       Say yes here to add support for MediaTek MT6397 PMIC. This is
> +       a Power Management IC. This driver provides common support for
> +       accessing the device; additional drivers must be enabled in order
> +       to use the functionality of the device.
> +
>  config MFD_MENF21BMC
>       tristate "MEN 14F021P00 Board Management Controller Support"
>       depends on I2C
> diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile
> index 53467e2..329d4ed 100644
> --- a/drivers/mfd/Makefile
> +++ b/drivers/mfd/Makefile
> @@ -179,3 +179,4 @@ obj-$(CONFIG_MFD_DLN2)            += dln2.o
>  
>  intel-soc-pmic-objs          := intel_soc_pmic_core.o intel_soc_pmic_crc.o
>  obj-$(CONFIG_INTEL_SOC_PMIC) += intel-soc-pmic.o
> +obj-$(CONFIG_MFD_MT6397)     += mt6397-core.o
> diff --git a/drivers/mfd/mt6397-core.c b/drivers/mfd/mt6397-core.c
> new file mode 100644
> index 0000000..b61c4eb
> --- /dev/null
> +++ b/drivers/mfd/mt6397-core.c
> @@ -0,0 +1,223 @@
> +/*
> + * Copyright (c) 2014 MediaTek Inc.
> + * Author: Flora Fu, MediaTek
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License version 2 as
> + * published by the Free Software Foundation.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + * GNU General Public License for more details.
> + */
> +
> +#include <linux/interrupt.h>
> +#include <linux/module.h>
> +#include <linux/of_device.h>
> +#include <linux/of_irq.h>
> +#include <linux/regmap.h>
> +#include <linux/mfd/core.h>
> +#include <linux/mfd/mt6397/core.h>
> +#include <linux/mfd/mt6397/registers.h>
> +
> +static const struct mfd_cell mt6397_devs[] = {
> +     {
> +             .name = "mt6397-rtc",
> +             .of_compatible = "mediatek,mt6397-rtc",
> +     }, {
> +             .name = "mt6397-regulator",
> +             .of_compatible = "mediatek,mt6397-regulator",
> +     }, {
> +             .name = "mt6397-codec",
> +             .of_compatible = "mediatek,mt6397-codec",
> +     }, {
> +             .name = "mt6397-clk",
> +             .of_compatible = "mediatek,mt6397-clk",
> +     },
> +};
> +
> +static void mt6397_irq_lock(struct irq_data *data)
> +{
> +     struct mt6397_chip *mt6397 = irq_get_chip_data(data->irq);
> +
> +     mutex_lock(&mt6397->irqlock);
> +}
> +
> +static void mt6397_irq_sync_unlock(struct irq_data *data)
> +{
> +     struct mt6397_chip *mt6397 = irq_get_chip_data(data->irq);
> +
> +     regmap_write(mt6397->regmap, MT6397_INT_CON0, mt6397->irq_masks_cur[0]);
> +     regmap_write(mt6397->regmap, MT6397_INT_CON1, mt6397->irq_masks_cur[1]);
> +
> +     mutex_unlock(&mt6397->irqlock);
> +}
> +
> +static void mt6397_irq_disable(struct irq_data *data)
> +{
> +     struct mt6397_chip *mt6397 = irq_get_chip_data(data->irq);
> +     int shift = data->hwirq & 0xf;
> +     int reg = data->hwirq >> 4;
> +
> +     mt6397->irq_masks_cur[reg] &= ~BIT(shift);
> +}
> +
> +static void mt6397_irq_enable(struct irq_data *data)
> +{
> +     struct mt6397_chip *mt6397 = irq_get_chip_data(data->irq);
> +     int shift = data->hwirq & 0xf;
> +     int reg = data->hwirq >> 4;
> +
> +     mt6397->irq_masks_cur[reg] |= BIT(shift);
> +}
> +
> +static struct irq_chip mt6397_irq_chip = {
> +     .name = "mt6397-irq",
> +     .irq_bus_lock = mt6397_irq_lock,
> +     .irq_bus_sync_unlock = mt6397_irq_sync_unlock,
> +     .irq_enable = mt6397_irq_enable,
> +     .irq_disable = mt6397_irq_disable,
> +};
> +
> +static void mt6397_irq_handle_reg(struct mt6397_chip *mt6397, int reg,
> +             int irqbase)
> +{
> +     unsigned int status;
> +     int i, irq, ret;
> +
> +     ret = regmap_read(mt6397->regmap, reg, &status);
> +     if (ret) {
> +             dev_err(mt6397->dev, "Failed to read irq status: %d\n", ret);
> +             return;
> +     }
> +
> +     for (i = 0; i < 16; i++) {
> +             if (status & BIT(i)) {
> +                     irq = irq_find_mapping(mt6397->irq_domain, irqbase + i);
> +                     if (irq)
> +                             handle_nested_irq(irq);
> +             }
> +     }
> +
> +     regmap_write(mt6397->regmap, reg, status);
> +}
> +
> +static irqreturn_t mt6397_irq_thread(int irq, void *data)
> +{
> +     struct mt6397_chip *mt6397 = data;
> +
> +     mt6397_irq_handle_reg(mt6397, MT6397_INT_STATUS0, 0);
> +     mt6397_irq_handle_reg(mt6397, MT6397_INT_STATUS1, 16);
> +
> +     return IRQ_HANDLED;
> +}
> +
> +static int mt6397_irq_domain_map(struct irq_domain *d, unsigned int irq,
> +                                     irq_hw_number_t hw)
> +{
> +     struct mt6397_chip *mt6397 = d->host_data;
> +
> +     irq_set_chip_data(irq, mt6397);
> +     irq_set_chip_and_handler(irq, &mt6397_irq_chip, handle_level_irq);
> +     irq_set_nested_thread(irq, 1);
> +     set_irq_flags(irq, IRQF_VALID);
> +
> +     return 0;
> +}
> +
> +static struct irq_domain_ops mt6397_irq_domain_ops = {
> +     .map = mt6397_irq_domain_map,
> +};
> +
> +static int mt6397_irq_init(struct mt6397_chip *mt6397)
> +{
> +     int ret;
> +
> +     mutex_init(&mt6397->irqlock);
> +
> +     /* Mask all interrupt sources */
> +     regmap_write(mt6397->regmap, MT6397_INT_CON0, 0x0);
> +     regmap_write(mt6397->regmap, MT6397_INT_CON1, 0x0);
> +
> +     mt6397->irq_domain = irq_domain_add_linear(mt6397->dev->of_node,
> +             MT6397_IRQ_NR, &mt6397_irq_domain_ops, mt6397);
> +     if (!mt6397->irq_domain) {
> +             dev_err(mt6397->dev, "could not create irq domain\n");
> +             return -ENOMEM;
> +     }
> +
> +     ret = devm_request_threaded_irq(mt6397->dev, mt6397->irq, NULL,
> +             mt6397_irq_thread, IRQF_ONESHOT, "mt6397-pmic", mt6397);
> +     if (ret) {
> +             dev_err(mt6397->dev, "failed to register irq=%d; err: %d\n",
> +                     mt6397->irq, ret);
> +             return ret;
> +     }
> +
> +     return 0;
> +}
> +
> +static int mt6397_probe(struct platform_device *pdev)
> +{
> +     int ret;
> +     struct mt6397_chip *mt6397;
> +
> +     mt6397 = devm_kzalloc(&pdev->dev, sizeof(*mt6397), GFP_KERNEL);
> +     if (!mt6397)
> +             return -ENOMEM;
> +
> +     mt6397->dev = &pdev->dev;
> +     /*
> +      * mt6397 MFD is child device of soc pmic wrapper.
> +      * Regmap is set from its parent.
> +      */
> +     mt6397->regmap = dev_get_regmap(pdev->dev.parent, NULL);
> +     if (!mt6397->regmap)
> +             return -ENODEV;
> +
> +     platform_set_drvdata(pdev, mt6397);
> +
> +     mt6397->irq = platform_get_irq(pdev, 0);
> +     if (mt6397->irq > 0) {
> +             ret = mt6397_irq_init(mt6397);
> +             if (ret)
> +                     return ret;
> +     }
> +
> +     ret = mfd_add_devices(&pdev->dev, -1, mt6397_devs,
> +                     ARRAY_SIZE(mt6397_devs), NULL, 0, NULL);
> +     if (ret)
> +             dev_err(&pdev->dev, "failed to add child devices: %d\n", ret);
> +
> +     return ret;
> +}
> +
> +static int mt6397_remove(struct platform_device *pdev)
> +{
> +     mfd_remove_devices(&pdev->dev);
> +
> +     return 0;
> +}
> +
> +static const struct of_device_id mt6397_of_match[] = {
> +     { .compatible = "mediatek,mt6397" },
> +     { }
> +};
> +MODULE_DEVICE_TABLE(of, mt6397_of_match);
> +
> +static struct platform_driver mt6397_driver = {
> +     .probe = mt6397_probe,
> +     .remove = mt6397_remove,
> +     .driver = {
> +             .name = "mt6397",
> +             .of_match_table = of_match_ptr(mt6397_of_match),
> +     },
> +};
> +
> +module_platform_driver(mt6397_driver);
> +
> +MODULE_AUTHOR("Flora Fu, MediaTek");
> +MODULE_DESCRIPTION("Driver for MediaTek MT6397 PMIC");
> +MODULE_LICENSE("GPL");
> +MODULE_ALIAS("platform:mt6397");
> diff --git a/include/linux/mfd/mt6397/core.h b/include/linux/mfd/mt6397/core.h
> new file mode 100644
> index 0000000..cf5265b
> --- /dev/null
> +++ b/include/linux/mfd/mt6397/core.h
> @@ -0,0 +1,64 @@
> +/*
> + * Copyright (c) 2014 MediaTek Inc.
> + * Author: Flora Fu, MediaTek
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License version 2 as
> + * published by the Free Software Foundation.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + * GNU General Public License for more details.
> + */
> +
> +#ifndef __MFD_MT6397_CORE_H__
> +#define __MFD_MT6397_CORE_H__
> +
> +enum mt6397_irq_numbers {
> +     MT6397_IRQ_SPKL_AB = 0,
> +     MT6397_IRQ_SPKR_AB,
> +     MT6397_IRQ_SPKL,
> +     MT6397_IRQ_SPKR,
> +     MT6397_IRQ_BAT_L,
> +     MT6397_IRQ_BAT_H,
> +     MT6397_IRQ_FG_BAT_L,
> +     MT6397_IRQ_FG_BAT_H,
> +     MT6397_IRQ_WATCHDOG,
> +     MT6397_IRQ_PWRKEY,
> +     MT6397_IRQ_THR_L,
> +     MT6397_IRQ_THR_H,
> +     MT6397_IRQ_VBATON_UNDET,
> +     MT6397_IRQ_BVALID_DET,
> +     MT6397_IRQ_CHRDET,
> +     MT6397_IRQ_OV,
> +     MT6397_IRQ_LDO,
> +     MT6397_IRQ_HOMEKEY,
> +     MT6397_IRQ_ACCDET,
> +     MT6397_IRQ_AUDIO,
> +     MT6397_IRQ_RTC,
> +     MT6397_IRQ_PWRKEY_RSTB,
> +     MT6397_IRQ_HDMI_SIFM,
> +     MT6397_IRQ_HDMI_CEC,
> +     MT6397_IRQ_VCA15,
> +     MT6397_IRQ_VSRMCA15,
> +     MT6397_IRQ_VCORE,
> +     MT6397_IRQ_VGPU,
> +     MT6397_IRQ_VIO18,
> +     MT6397_IRQ_VPCA7,
> +     MT6397_IRQ_VSRMCA7,
> +     MT6397_IRQ_VDRM,
> +     MT6397_IRQ_NR,
> +};
> +
> +struct mt6397_chip {
> +     struct device *dev;
> +     struct regmap *regmap;
> +     int irq;
> +     struct irq_domain *irq_domain;
> +     struct mutex irqlock;
> +     u16 irq_masks_cur[2];
> +     u16 irq_masks_cache[2];
> +};
> +
> +#endif /* __MFD_MT6397_CORE_H__ */
> diff --git a/include/linux/mfd/mt6397/registers.h 
> b/include/linux/mfd/mt6397/registers.h
> new file mode 100644
> index 0000000..f23a0a6
> --- /dev/null
> +++ b/include/linux/mfd/mt6397/registers.h
> @@ -0,0 +1,362 @@
> +/*
> + * Copyright (c) 2014 MediaTek Inc.
> + * Author: Flora Fu, MediaTek
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License version 2 as
> + * published by the Free Software Foundation.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + * GNU General Public License for more details.
> + */
> +
> +#ifndef __MFD_MT6397_REGISTERS_H__
> +#define __MFD_MT6397_REGISTERS_H__
> +
> +/* PMIC Registers */
> +#define MT6397_CID                   0x0100
> +#define MT6397_TOP_CKPDN             0x0102
> +#define MT6397_TOP_CKPDN_SET         0x0104
> +#define MT6397_TOP_CKPDN_CLR         0x0106
> +#define MT6397_TOP_CKPDN2            0x0108
> +#define MT6397_TOP_CKPDN2_SET                0x010A
> +#define MT6397_TOP_CKPDN2_CLR                0x010C
> +#define MT6397_TOP_GPIO_CKPDN                0x010E
> +#define MT6397_TOP_RST_CON           0x0114
> +#define MT6397_WRP_CKPDN             0x011A
> +#define MT6397_WRP_RST_CON           0x0120
> +#define MT6397_TOP_RST_MISC          0x0126
> +#define MT6397_TOP_CKCON1            0x0128
> +#define MT6397_TOP_CKCON2            0x012A
> +#define MT6397_TOP_CKTST1            0x012C
> +#define MT6397_TOP_CKTST2            0x012E
> +#define MT6397_OC_DEG_EN             0x0130
> +#define MT6397_OC_CTL0                       0x0132
> +#define MT6397_OC_CTL1                       0x0134
> +#define MT6397_OC_CTL2                       0x0136
> +#define MT6397_INT_RSV                       0x0138
> +#define MT6397_TEST_CON0             0x013A
> +#define MT6397_TEST_CON1             0x013C
> +#define MT6397_STATUS0                       0x013E
> +#define MT6397_STATUS1                       0x0140
> +#define MT6397_PGSTATUS                      0x0142
> +#define MT6397_CHRSTATUS             0x0144
> +#define MT6397_OCSTATUS0             0x0146
> +#define MT6397_OCSTATUS1             0x0148
> +#define MT6397_OCSTATUS2             0x014A
> +#define MT6397_HDMI_PAD_IE           0x014C
> +#define MT6397_TEST_OUT_L            0x014E
> +#define MT6397_TEST_OUT_H            0x0150
> +#define MT6397_TDSEL_CON             0x0152
> +#define MT6397_RDSEL_CON             0x0154
> +#define MT6397_GPIO_SMT_CON0         0x0156
> +#define MT6397_GPIO_SMT_CON1         0x0158
> +#define MT6397_GPIO_SMT_CON2         0x015A
> +#define MT6397_GPIO_SMT_CON3         0x015C
> +#define MT6397_DRV_CON0                      0x015E
> +#define MT6397_DRV_CON1                      0x0160
> +#define MT6397_DRV_CON2                      0x0162
> +#define MT6397_DRV_CON3                      0x0164
> +#define MT6397_DRV_CON4                      0x0166
> +#define MT6397_DRV_CON5                      0x0168
> +#define MT6397_DRV_CON6                      0x016A
> +#define MT6397_DRV_CON7                      0x016C
> +#define MT6397_DRV_CON8                      0x016E
> +#define MT6397_DRV_CON9                      0x0170
> +#define MT6397_DRV_CON10             0x0172
> +#define MT6397_DRV_CON11             0x0174
> +#define MT6397_DRV_CON12             0x0176
> +#define MT6397_INT_CON0                      0x0178
> +#define MT6397_INT_CON1                      0x017E
> +#define MT6397_INT_STATUS0           0x0184
> +#define MT6397_INT_STATUS1           0x0186
> +#define MT6397_FQMTR_CON0            0x0188
> +#define MT6397_FQMTR_CON1            0x018A
> +#define MT6397_FQMTR_CON2            0x018C
> +#define MT6397_EFUSE_DOUT_0_15               0x01C4
> +#define MT6397_EFUSE_DOUT_16_31              0x01C6
> +#define MT6397_EFUSE_DOUT_32_47              0x01C8
> +#define MT6397_EFUSE_DOUT_48_63              0x01CA
> +#define MT6397_SPI_CON                       0x01CC
> +#define MT6397_TOP_CKPDN3            0x01CE
> +#define MT6397_TOP_CKCON3            0x01D4
> +#define MT6397_EFUSE_DOUT_64_79              0x01D6
> +#define MT6397_EFUSE_DOUT_80_95              0x01D8
> +#define MT6397_EFUSE_DOUT_96_111     0x01DA
> +#define MT6397_EFUSE_DOUT_112_127    0x01DC
> +#define MT6397_EFUSE_DOUT_128_143    0x01DE
> +#define MT6397_EFUSE_DOUT_144_159    0x01E0
> +#define MT6397_EFUSE_DOUT_160_175    0x01E2
> +#define MT6397_EFUSE_DOUT_176_191    0x01E4
> +#define MT6397_EFUSE_DOUT_192_207    0x01E6
> +#define MT6397_EFUSE_DOUT_208_223    0x01E8
> +#define MT6397_EFUSE_DOUT_224_239    0x01EA
> +#define MT6397_EFUSE_DOUT_240_255    0x01EC
> +#define MT6397_EFUSE_DOUT_256_271    0x01EE
> +#define MT6397_EFUSE_DOUT_272_287    0x01F0
> +#define MT6397_EFUSE_DOUT_288_300    0x01F2
> +#define MT6397_EFUSE_DOUT_304_319    0x01F4
> +#define MT6397_BUCK_CON0             0x0200
> +#define MT6397_BUCK_CON1             0x0202
> +#define MT6397_BUCK_CON2             0x0204
> +#define MT6397_BUCK_CON3             0x0206
> +#define MT6397_BUCK_CON4             0x0208
> +#define MT6397_BUCK_CON5             0x020A
> +#define MT6397_BUCK_CON6             0x020C
> +#define MT6397_BUCK_CON7             0x020E
> +#define MT6397_BUCK_CON8             0x0210
> +#define MT6397_BUCK_CON9             0x0212
> +#define MT6397_VCA15_CON0            0x0214
> +#define MT6397_VCA15_CON1            0x0216
> +#define MT6397_VCA15_CON2            0x0218
> +#define MT6397_VCA15_CON3            0x021A
> +#define MT6397_VCA15_CON4            0x021C
> +#define MT6397_VCA15_CON5            0x021E
> +#define MT6397_VCA15_CON6            0x0220
> +#define MT6397_VCA15_CON7            0x0222
> +#define MT6397_VCA15_CON8            0x0224
> +#define MT6397_VCA15_CON9            0x0226
> +#define MT6397_VCA15_CON10           0x0228
> +#define MT6397_VCA15_CON11           0x022A
> +#define MT6397_VCA15_CON12           0x022C
> +#define MT6397_VCA15_CON13           0x022E
> +#define MT6397_VCA15_CON14           0x0230
> +#define MT6397_VCA15_CON15           0x0232
> +#define MT6397_VCA15_CON16           0x0234
> +#define MT6397_VCA15_CON17           0x0236
> +#define MT6397_VCA15_CON18           0x0238
> +#define MT6397_VSRMCA15_CON0         0x023A
> +#define MT6397_VSRMCA15_CON1         0x023C
> +#define MT6397_VSRMCA15_CON2         0x023E
> +#define MT6397_VSRMCA15_CON3         0x0240
> +#define MT6397_VSRMCA15_CON4         0x0242
> +#define MT6397_VSRMCA15_CON5         0x0244
> +#define MT6397_VSRMCA15_CON6         0x0246
> +#define MT6397_VSRMCA15_CON7         0x0248
> +#define MT6397_VSRMCA15_CON8         0x024A
> +#define MT6397_VSRMCA15_CON9         0x024C
> +#define MT6397_VSRMCA15_CON10                0x024E
> +#define MT6397_VSRMCA15_CON11                0x0250
> +#define MT6397_VSRMCA15_CON12                0x0252
> +#define MT6397_VSRMCA15_CON13                0x0254
> +#define MT6397_VSRMCA15_CON14                0x0256
> +#define MT6397_VSRMCA15_CON15                0x0258
> +#define MT6397_VSRMCA15_CON16                0x025A
> +#define MT6397_VSRMCA15_CON17                0x025C
> +#define MT6397_VSRMCA15_CON18                0x025E
> +#define MT6397_VSRMCA15_CON19                0x0260
> +#define MT6397_VSRMCA15_CON20                0x0262
> +#define MT6397_VSRMCA15_CON21                0x0264
> +#define MT6397_VCORE_CON0            0x0266
> +#define MT6397_VCORE_CON1            0x0268
> +#define MT6397_VCORE_CON2            0x026A
> +#define MT6397_VCORE_CON3            0x026C
> +#define MT6397_VCORE_CON4            0x026E
> +#define MT6397_VCORE_CON5            0x0270
> +#define MT6397_VCORE_CON6            0x0272
> +#define MT6397_VCORE_CON7            0x0274
> +#define MT6397_VCORE_CON8            0x0276
> +#define MT6397_VCORE_CON9            0x0278
> +#define MT6397_VCORE_CON10           0x027A
> +#define MT6397_VCORE_CON11           0x027C
> +#define MT6397_VCORE_CON12           0x027E
> +#define MT6397_VCORE_CON13           0x0280
> +#define MT6397_VCORE_CON14           0x0282
> +#define MT6397_VCORE_CON15           0x0284
> +#define MT6397_VCORE_CON16           0x0286
> +#define MT6397_VCORE_CON17           0x0288
> +#define MT6397_VCORE_CON18           0x028A
> +#define MT6397_VGPU_CON0             0x028C
> +#define MT6397_VGPU_CON1             0x028E
> +#define MT6397_VGPU_CON2             0x0290
> +#define MT6397_VGPU_CON3             0x0292
> +#define MT6397_VGPU_CON4             0x0294
> +#define MT6397_VGPU_CON5             0x0296
> +#define MT6397_VGPU_CON6             0x0298
> +#define MT6397_VGPU_CON7             0x029A
> +#define MT6397_VGPU_CON8             0x029C
> +#define MT6397_VGPU_CON9             0x029E
> +#define MT6397_VGPU_CON10            0x02A0
> +#define MT6397_VGPU_CON11            0x02A2
> +#define MT6397_VGPU_CON12            0x02A4
> +#define MT6397_VGPU_CON13            0x02A6
> +#define MT6397_VGPU_CON14            0x02A8
> +#define MT6397_VGPU_CON15            0x02AA
> +#define MT6397_VGPU_CON16            0x02AC
> +#define MT6397_VGPU_CON17            0x02AE
> +#define MT6397_VGPU_CON18            0x02B0
> +#define MT6397_VIO18_CON0            0x0300
> +#define MT6397_VIO18_CON1            0x0302
> +#define MT6397_VIO18_CON2            0x0304
> +#define MT6397_VIO18_CON3            0x0306
> +#define MT6397_VIO18_CON4            0x0308
> +#define MT6397_VIO18_CON5            0x030A
> +#define MT6397_VIO18_CON6            0x030C
> +#define MT6397_VIO18_CON7            0x030E
> +#define MT6397_VIO18_CON8            0x0310
> +#define MT6397_VIO18_CON9            0x0312
> +#define MT6397_VIO18_CON10           0x0314
> +#define MT6397_VIO18_CON11           0x0316
> +#define MT6397_VIO18_CON12           0x0318
> +#define MT6397_VIO18_CON13           0x031A
> +#define MT6397_VIO18_CON14           0x031C
> +#define MT6397_VIO18_CON15           0x031E
> +#define MT6397_VIO18_CON16           0x0320
> +#define MT6397_VIO18_CON17           0x0322
> +#define MT6397_VIO18_CON18           0x0324
> +#define MT6397_VPCA7_CON0            0x0326
> +#define MT6397_VPCA7_CON1            0x0328
> +#define MT6397_VPCA7_CON2            0x032A
> +#define MT6397_VPCA7_CON3            0x032C
> +#define MT6397_VPCA7_CON4            0x032E
> +#define MT6397_VPCA7_CON5            0x0330
> +#define MT6397_VPCA7_CON6            0x0332
> +#define MT6397_VPCA7_CON7            0x0334
> +#define MT6397_VPCA7_CON8            0x0336
> +#define MT6397_VPCA7_CON9            0x0338
> +#define MT6397_VPCA7_CON10           0x033A
> +#define MT6397_VPCA7_CON11           0x033C
> +#define MT6397_VPCA7_CON12           0x033E
> +#define MT6397_VPCA7_CON13           0x0340
> +#define MT6397_VPCA7_CON14           0x0342
> +#define MT6397_VPCA7_CON15           0x0344
> +#define MT6397_VPCA7_CON16           0x0346
> +#define MT6397_VPCA7_CON17           0x0348
> +#define MT6397_VPCA7_CON18           0x034A
> +#define MT6397_VSRMCA7_CON0          0x034C
> +#define MT6397_VSRMCA7_CON1          0x034E
> +#define MT6397_VSRMCA7_CON2          0x0350
> +#define MT6397_VSRMCA7_CON3          0x0352
> +#define MT6397_VSRMCA7_CON4          0x0354
> +#define MT6397_VSRMCA7_CON5          0x0356
> +#define MT6397_VSRMCA7_CON6          0x0358
> +#define MT6397_VSRMCA7_CON7          0x035A
> +#define MT6397_VSRMCA7_CON8          0x035C
> +#define MT6397_VSRMCA7_CON9          0x035E
> +#define MT6397_VSRMCA7_CON10         0x0360
> +#define MT6397_VSRMCA7_CON11         0x0362
> +#define MT6397_VSRMCA7_CON12         0x0364
> +#define MT6397_VSRMCA7_CON13         0x0366
> +#define MT6397_VSRMCA7_CON14         0x0368
> +#define MT6397_VSRMCA7_CON15         0x036A
> +#define MT6397_VSRMCA7_CON16         0x036C
> +#define MT6397_VSRMCA7_CON17         0x036E
> +#define MT6397_VSRMCA7_CON18         0x0370
> +#define MT6397_VSRMCA7_CON19         0x0372
> +#define MT6397_VSRMCA7_CON20         0x0374
> +#define MT6397_VSRMCA7_CON21         0x0376
> +#define MT6397_VDRM_CON0             0x0378
> +#define MT6397_VDRM_CON1             0x037A
> +#define MT6397_VDRM_CON2             0x037C
> +#define MT6397_VDRM_CON3             0x037E
> +#define MT6397_VDRM_CON4             0x0380
> +#define MT6397_VDRM_CON5             0x0382
> +#define MT6397_VDRM_CON6             0x0384
> +#define MT6397_VDRM_CON7             0x0386
> +#define MT6397_VDRM_CON8             0x0388
> +#define MT6397_VDRM_CON9             0x038A
> +#define MT6397_VDRM_CON10            0x038C
> +#define MT6397_VDRM_CON11            0x038E
> +#define MT6397_VDRM_CON12            0x0390
> +#define MT6397_VDRM_CON13            0x0392
> +#define MT6397_VDRM_CON14            0x0394
> +#define MT6397_VDRM_CON15            0x0396
> +#define MT6397_VDRM_CON16            0x0398
> +#define MT6397_VDRM_CON17            0x039A
> +#define MT6397_VDRM_CON18            0x039C
> +#define MT6397_BUCK_K_CON0           0x039E
> +#define MT6397_BUCK_K_CON1           0x03A0
> +#define MT6397_ANALDO_CON0           0x0400
> +#define MT6397_ANALDO_CON1           0x0402
> +#define MT6397_ANALDO_CON2           0x0404
> +#define MT6397_ANALDO_CON3           0x0406
> +#define MT6397_ANALDO_CON4           0x0408
> +#define MT6397_ANALDO_CON5           0x040A
> +#define MT6397_ANALDO_CON6           0x040C
> +#define MT6397_ANALDO_CON7           0x040E
> +#define MT6397_DIGLDO_CON0           0x0410
> +#define MT6397_DIGLDO_CON1           0x0412
> +#define MT6397_DIGLDO_CON2           0x0414
> +#define MT6397_DIGLDO_CON3           0x0416
> +#define MT6397_DIGLDO_CON4           0x0418
> +#define MT6397_DIGLDO_CON5           0x041A
> +#define MT6397_DIGLDO_CON6           0x041C
> +#define MT6397_DIGLDO_CON7           0x041E
> +#define MT6397_DIGLDO_CON8           0x0420
> +#define MT6397_DIGLDO_CON9           0x0422
> +#define MT6397_DIGLDO_CON10          0x0424
> +#define MT6397_DIGLDO_CON11          0x0426
> +#define MT6397_DIGLDO_CON12          0x0428
> +#define MT6397_DIGLDO_CON13          0x042A
> +#define MT6397_DIGLDO_CON14          0x042C
> +#define MT6397_DIGLDO_CON15          0x042E
> +#define MT6397_DIGLDO_CON16          0x0430
> +#define MT6397_DIGLDO_CON17          0x0432
> +#define MT6397_DIGLDO_CON18          0x0434
> +#define MT6397_DIGLDO_CON19          0x0436
> +#define MT6397_DIGLDO_CON20          0x0438
> +#define MT6397_DIGLDO_CON21          0x043A
> +#define MT6397_DIGLDO_CON22          0x043C
> +#define MT6397_DIGLDO_CON23          0x043E
> +#define MT6397_DIGLDO_CON24          0x0440
> +#define MT6397_DIGLDO_CON25          0x0442
> +#define MT6397_DIGLDO_CON26          0x0444
> +#define MT6397_DIGLDO_CON27          0x0446
> +#define MT6397_DIGLDO_CON28          0x0448
> +#define MT6397_DIGLDO_CON29          0x044A
> +#define MT6397_DIGLDO_CON30          0x044C
> +#define MT6397_DIGLDO_CON31          0x044E
> +#define MT6397_DIGLDO_CON32          0x0450
> +#define MT6397_DIGLDO_CON33          0x045A
> +#define MT6397_SPK_CON0                      0x0600
> +#define MT6397_SPK_CON1                      0x0602
> +#define MT6397_SPK_CON2                      0x0604
> +#define MT6397_SPK_CON3                      0x0606
> +#define MT6397_SPK_CON4                      0x0608
> +#define MT6397_SPK_CON5                      0x060A
> +#define MT6397_SPK_CON6                      0x060C
> +#define MT6397_SPK_CON7                      0x060E
> +#define MT6397_SPK_CON8                      0x0610
> +#define MT6397_SPK_CON9                      0x0612
> +#define MT6397_SPK_CON10             0x0614
> +#define MT6397_SPK_CON11             0x0616
> +#define MT6397_AUDDAC_CON0           0x0700
> +#define MT6397_AUDBUF_CFG0           0x0702
> +#define MT6397_AUDBUF_CFG1           0x0704
> +#define MT6397_AUDBUF_CFG2           0x0706
> +#define MT6397_AUDBUF_CFG3           0x0708
> +#define MT6397_AUDBUF_CFG4           0x070A
> +#define MT6397_IBIASDIST_CFG0                0x070C
> +#define MT6397_AUDACCDEPOP_CFG0              0x070E
> +#define MT6397_AUD_IV_CFG0           0x0710
> +#define MT6397_AUDCLKGEN_CFG0                0x0712
> +#define MT6397_AUDLDO_CFG0           0x0714
> +#define MT6397_AUDLDO_CFG1           0x0716
> +#define MT6397_AUDNVREGGLB_CFG0              0x0718
> +#define MT6397_AUD_NCP0                      0x071A
> +#define MT6397_AUDPREAMP_CON0                0x071C
> +#define MT6397_AUDADC_CON0           0x071E
> +#define MT6397_AUDADC_CON1           0x0720
> +#define MT6397_AUDADC_CON2           0x0722
> +#define MT6397_AUDADC_CON3           0x0724
> +#define MT6397_AUDADC_CON4           0x0726
> +#define MT6397_AUDADC_CON5           0x0728
> +#define MT6397_AUDADC_CON6           0x072A
> +#define MT6397_AUDDIGMI_CON0         0x072C
> +#define MT6397_AUDLSBUF_CON0         0x072E
> +#define MT6397_AUDLSBUF_CON1         0x0730
> +#define MT6397_AUDENCSPARE_CON0              0x0732
> +#define MT6397_AUDENCCLKSQ_CON0              0x0734
> +#define MT6397_AUDPREAMPGAIN_CON0    0x0736
> +#define MT6397_ZCD_CON0                      0x0738
> +#define MT6397_ZCD_CON1                      0x073A
> +#define MT6397_ZCD_CON2                      0x073C
> +#define MT6397_ZCD_CON3                      0x073E
> +#define MT6397_ZCD_CON4                      0x0740
> +#define MT6397_ZCD_CON5                      0x0742
> +#define MT6397_NCP_CLKDIV_CON0               0x0744
> +#define MT6397_NCP_CLKDIV_CON1               0x0746
> +
> +#endif /* __MFD_MT6397_REGISTERS_H__ */

-- 
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to