mfd: da9062: Supply core driver
authorS Twiss <stwiss.opensource@diasemi.com>
Wed, 1 Jul 2015 13:11:32 +0000 (14:11 +0100)
committerLee Jones <lee.jones@linaro.org>
Tue, 11 Aug 2015 14:08:45 +0000 (15:08 +0100)
Add MFD core driver support for DA9062

Signed-off-by: Steve Twiss <stwiss.opensource@diasemi.com>
Signed-off-by: Lee Jones <lee.jones@linaro.org>
drivers/mfd/Kconfig
drivers/mfd/Makefile
drivers/mfd/da9062-core.c [new file with mode: 0644]
include/linux/mfd/da9062/core.h [new file with mode: 0644]
include/linux/mfd/da9062/registers.h [new file with mode: 0644]

index 5f746ef84418c0c4e1463d80394aa6ee60c25aa1..0b442230c71668c67bbcc4d63c6f691d445929a0 100644 (file)
@@ -186,6 +186,18 @@ config MFD_DA9055
          This driver can be built as a module. If built as a module it will be
          called "da9055"
 
+config MFD_DA9062
+       tristate "Dialog Semiconductor DA9062 PMIC Support"
+       select MFD_CORE
+       select REGMAP_I2C
+       select REGMAP_IRQ
+       depends on I2C=y
+       help
+         Say yes here for support for the Dialog Semiconductor DA9062 PMIC.
+         This includes the I2C driver and core APIs.
+         Additional drivers must be enabled in order to use the functionality
+         of the device.
+
 config MFD_DA9063
        bool "Dialog Semiconductor DA9063 PMIC Support"
        select MFD_CORE
index 530620aa2f702b055b6c5e5a557228da301af1fe..a59e3fcc8626d5fcc313bb708dc69a1f070be926 100644 (file)
@@ -113,10 +113,11 @@ obj-$(CONFIG_MFD_LP8788)  += lp8788.o lp8788-irq.o
 
 da9055-objs                    := da9055-core.o da9055-i2c.o
 obj-$(CONFIG_MFD_DA9055)       += da9055.o
-
+obj-$(CONFIG_MFD_DA9062)       += da9062-core.o
 da9063-objs                    := da9063-core.o da9063-irq.o da9063-i2c.o
 obj-$(CONFIG_MFD_DA9063)       += da9063.o
 obj-$(CONFIG_MFD_DA9150)       += da9150-core.o
+
 obj-$(CONFIG_MFD_MAX14577)     += max14577.o
 obj-$(CONFIG_MFD_MAX77686)     += max77686.o
 obj-$(CONFIG_MFD_MAX77693)     += max77693.o
diff --git a/drivers/mfd/da9062-core.c b/drivers/mfd/da9062-core.c
new file mode 100644 (file)
index 0000000..4cf0643
--- /dev/null
@@ -0,0 +1,512 @@
+/*
+ * Core, IRQ and I2C device driver for DA9062 PMIC
+ * Copyright (C) 2015  Dialog Semiconductor Ltd.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * 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/kernel.h>
+#include <linux/module.h>
+#include <linux/init.h>
+#include <linux/device.h>
+#include <linux/interrupt.h>
+#include <linux/regmap.h>
+#include <linux/irq.h>
+#include <linux/mfd/core.h>
+#include <linux/i2c.h>
+#include <linux/mfd/da9062/core.h>
+#include <linux/mfd/da9062/registers.h>
+#include <linux/regulator/of_regulator.h>
+
+#define        DA9062_REG_EVENT_A_OFFSET       0
+#define        DA9062_REG_EVENT_B_OFFSET       1
+#define        DA9062_REG_EVENT_C_OFFSET       2
+
+static struct regmap_irq da9062_irqs[] = {
+       /* EVENT A */
+       [DA9062_IRQ_ONKEY] = {
+               .reg_offset = DA9062_REG_EVENT_A_OFFSET,
+               .mask = DA9062AA_M_NONKEY_MASK,
+       },
+       [DA9062_IRQ_ALARM] = {
+               .reg_offset = DA9062_REG_EVENT_A_OFFSET,
+               .mask = DA9062AA_M_ALARM_MASK,
+       },
+       [DA9062_IRQ_TICK] = {
+               .reg_offset = DA9062_REG_EVENT_A_OFFSET,
+               .mask = DA9062AA_M_TICK_MASK,
+       },
+       [DA9062_IRQ_WDG_WARN] = {
+               .reg_offset = DA9062_REG_EVENT_A_OFFSET,
+               .mask = DA9062AA_M_WDG_WARN_MASK,
+       },
+       [DA9062_IRQ_SEQ_RDY] = {
+               .reg_offset = DA9062_REG_EVENT_A_OFFSET,
+               .mask = DA9062AA_M_SEQ_RDY_MASK,
+       },
+       /* EVENT B */
+       [DA9062_IRQ_TEMP] = {
+               .reg_offset = DA9062_REG_EVENT_B_OFFSET,
+               .mask = DA9062AA_M_TEMP_MASK,
+       },
+       [DA9062_IRQ_LDO_LIM] = {
+               .reg_offset = DA9062_REG_EVENT_B_OFFSET,
+               .mask = DA9062AA_M_LDO_LIM_MASK,
+       },
+       [DA9062_IRQ_DVC_RDY] = {
+               .reg_offset = DA9062_REG_EVENT_B_OFFSET,
+               .mask = DA9062AA_M_DVC_RDY_MASK,
+       },
+       [DA9062_IRQ_VDD_WARN] = {
+               .reg_offset = DA9062_REG_EVENT_B_OFFSET,
+               .mask = DA9062AA_M_VDD_WARN_MASK,
+       },
+       /* EVENT C */
+       [DA9062_IRQ_GPI0] = {
+               .reg_offset = DA9062_REG_EVENT_C_OFFSET,
+               .mask = DA9062AA_M_GPI0_MASK,
+       },
+       [DA9062_IRQ_GPI1] = {
+               .reg_offset = DA9062_REG_EVENT_C_OFFSET,
+               .mask = DA9062AA_M_GPI1_MASK,
+       },
+       [DA9062_IRQ_GPI2] = {
+               .reg_offset = DA9062_REG_EVENT_C_OFFSET,
+               .mask = DA9062AA_M_GPI2_MASK,
+       },
+       [DA9062_IRQ_GPI3] = {
+               .reg_offset = DA9062_REG_EVENT_C_OFFSET,
+               .mask = DA9062AA_M_GPI3_MASK,
+       },
+       [DA9062_IRQ_GPI4] = {
+               .reg_offset = DA9062_REG_EVENT_C_OFFSET,
+               .mask = DA9062AA_M_GPI4_MASK,
+       },
+};
+
+static struct regmap_irq_chip da9062_irq_chip = {
+       .name = "da9062-irq",
+       .irqs = da9062_irqs,
+       .num_irqs = DA9062_NUM_IRQ,
+       .num_regs = 3,
+       .status_base = DA9062AA_EVENT_A,
+       .mask_base = DA9062AA_IRQ_MASK_A,
+       .ack_base = DA9062AA_EVENT_A,
+};
+
+static struct resource da9062_core_resources[] = {
+       DEFINE_RES_NAMED(DA9062_IRQ_VDD_WARN, 1, "VDD_WARN", IORESOURCE_IRQ),
+};
+
+static struct resource da9062_regulators_resources[] = {
+       DEFINE_RES_NAMED(DA9062_IRQ_LDO_LIM, 1, "LDO_LIM", IORESOURCE_IRQ),
+};
+
+static struct resource da9062_thermal_resources[] = {
+       DEFINE_RES_NAMED(DA9062_IRQ_TEMP, 1, "THERMAL", IORESOURCE_IRQ),
+};
+
+static struct resource da9062_wdt_resources[] = {
+       DEFINE_RES_NAMED(DA9062_IRQ_WDG_WARN, 1, "WD_WARN", IORESOURCE_IRQ),
+};
+
+static const struct mfd_cell da9062_devs[] = {
+       {
+               .name           = "da9062-core",
+               .num_resources  = ARRAY_SIZE(da9062_core_resources),
+               .resources      = da9062_core_resources,
+       },
+       {
+               .name           = "da9062-regulators",
+               .num_resources  = ARRAY_SIZE(da9062_regulators_resources),
+               .resources      = da9062_regulators_resources,
+       },
+       {
+               .name           = "da9062-watchdog",
+               .num_resources  = ARRAY_SIZE(da9062_wdt_resources),
+               .resources      = da9062_wdt_resources,
+               .of_compatible  = "dlg,da9062-wdt",
+       },
+       {
+               .name           = "da9062-thermal",
+               .num_resources  = ARRAY_SIZE(da9062_thermal_resources),
+               .resources      = da9062_thermal_resources,
+               .of_compatible  = "dlg,da9062-thermal",
+       },
+};
+
+static int da9062_clear_fault_log(struct da9062 *chip)
+{
+       int ret;
+       int fault_log;
+
+       ret = regmap_read(chip->regmap, DA9062AA_FAULT_LOG, &fault_log);
+       if (ret < 0)
+               return ret;
+
+       if (fault_log) {
+               if (fault_log & DA9062AA_TWD_ERROR_MASK)
+                       dev_dbg(chip->dev, "Fault log entry detected: TWD_ERROR\n");
+               if (fault_log & DA9062AA_POR_MASK)
+                       dev_dbg(chip->dev, "Fault log entry detected: POR\n");
+               if (fault_log & DA9062AA_VDD_FAULT_MASK)
+                       dev_dbg(chip->dev, "Fault log entry detected: VDD_FAULT\n");
+               if (fault_log & DA9062AA_VDD_START_MASK)
+                       dev_dbg(chip->dev, "Fault log entry detected: VDD_START\n");
+               if (fault_log & DA9062AA_TEMP_CRIT_MASK)
+                       dev_dbg(chip->dev, "Fault log entry detected: TEMP_CRIT\n");
+               if (fault_log & DA9062AA_KEY_RESET_MASK)
+                       dev_dbg(chip->dev, "Fault log entry detected: KEY_RESET\n");
+               if (fault_log & DA9062AA_NSHUTDOWN_MASK)
+                       dev_dbg(chip->dev, "Fault log entry detected: NSHUTDOWN\n");
+               if (fault_log & DA9062AA_WAIT_SHUT_MASK)
+                       dev_dbg(chip->dev, "Fault log entry detected: WAIT_SHUT\n");
+
+               ret = regmap_write(chip->regmap, DA9062AA_FAULT_LOG,
+                                  fault_log);
+       }
+
+       return ret;
+}
+
+int get_device_type(struct da9062 *chip)
+{
+       int device_id, variant_id, variant_mrc;
+       int ret;
+
+       ret = regmap_read(chip->regmap, DA9062AA_DEVICE_ID, &device_id);
+       if (ret < 0) {
+               dev_err(chip->dev, "Cannot read chip ID.\n");
+               return -EIO;
+       }
+       if (device_id != DA9062_PMIC_DEVICE_ID) {
+               dev_err(chip->dev, "Invalid device ID: 0x%02x\n", device_id);
+               return -ENODEV;
+       }
+
+       ret = regmap_read(chip->regmap, DA9062AA_VARIANT_ID, &variant_id);
+       if (ret < 0) {
+               dev_err(chip->dev, "Cannot read chip variant id.\n");
+               return -EIO;
+       }
+
+       dev_info(chip->dev,
+                "Device detected (device-ID: 0x%02X, var-ID: 0x%02X)\n",
+                device_id, variant_id);
+
+       variant_mrc = (variant_id & DA9062AA_MRC_MASK) >> DA9062AA_MRC_SHIFT;
+
+       if (variant_mrc < DA9062_PMIC_VARIANT_MRC_AA) {
+               dev_err(chip->dev,
+                       "Cannot support variant MRC: 0x%02X\n", variant_mrc);
+               return -ENODEV;
+       }
+
+       return ret;
+}
+
+static const struct regmap_range da9062_aa_readable_ranges[] = {
+       {
+               .range_min = DA9062AA_PAGE_CON,
+               .range_max = DA9062AA_STATUS_B,
+       }, {
+               .range_min = DA9062AA_STATUS_D,
+               .range_max = DA9062AA_EVENT_C,
+       }, {
+               .range_min = DA9062AA_IRQ_MASK_A,
+               .range_max = DA9062AA_IRQ_MASK_C,
+       }, {
+               .range_min = DA9062AA_CONTROL_A,
+               .range_max = DA9062AA_GPIO_4,
+       }, {
+               .range_min = DA9062AA_GPIO_WKUP_MODE,
+               .range_max = DA9062AA_BUCK4_CONT,
+       }, {
+               .range_min = DA9062AA_BUCK3_CONT,
+               .range_max = DA9062AA_BUCK3_CONT,
+       }, {
+               .range_min = DA9062AA_LDO1_CONT,
+               .range_max = DA9062AA_LDO4_CONT,
+       }, {
+               .range_min = DA9062AA_DVC_1,
+               .range_max = DA9062AA_DVC_1,
+       }, {
+               .range_min = DA9062AA_COUNT_S,
+               .range_max = DA9062AA_SECOND_D,
+       }, {
+               .range_min = DA9062AA_SEQ,
+               .range_max = DA9062AA_ID_4_3,
+       }, {
+               .range_min = DA9062AA_ID_12_11,
+               .range_max = DA9062AA_ID_16_15,
+       }, {
+               .range_min = DA9062AA_ID_22_21,
+               .range_max = DA9062AA_ID_32_31,
+       }, {
+               .range_min = DA9062AA_SEQ_A,
+               .range_max = DA9062AA_BUCK3_CFG,
+       }, {
+               .range_min = DA9062AA_VBUCK2_A,
+               .range_max = DA9062AA_VBUCK4_A,
+       }, {
+               .range_min = DA9062AA_VBUCK3_A,
+               .range_max = DA9062AA_VBUCK3_A,
+       }, {
+               .range_min = DA9062AA_VLDO1_A,
+               .range_max = DA9062AA_VLDO4_A,
+       }, {
+               .range_min = DA9062AA_VBUCK2_B,
+               .range_max = DA9062AA_VBUCK4_B,
+       }, {
+               .range_min = DA9062AA_VBUCK3_B,
+               .range_max = DA9062AA_VBUCK3_B,
+       }, {
+               .range_min = DA9062AA_VLDO1_B,
+               .range_max = DA9062AA_VLDO4_B,
+       }, {
+               .range_min = DA9062AA_BBAT_CONT,
+               .range_max = DA9062AA_BBAT_CONT,
+       }, {
+               .range_min = DA9062AA_INTERFACE,
+               .range_max = DA9062AA_CONFIG_E,
+       }, {
+               .range_min = DA9062AA_CONFIG_G,
+               .range_max = DA9062AA_CONFIG_K,
+       }, {
+               .range_min = DA9062AA_CONFIG_M,
+               .range_max = DA9062AA_CONFIG_M,
+       }, {
+               .range_min = DA9062AA_TRIM_CLDR,
+               .range_max = DA9062AA_GP_ID_19,
+       }, {
+               .range_min = DA9062AA_DEVICE_ID,
+               .range_max = DA9062AA_CONFIG_ID,
+       },
+};
+
+static const struct regmap_range da9062_aa_writeable_ranges[] = {
+       {
+               .range_min = DA9062AA_PAGE_CON,
+               .range_max = DA9062AA_PAGE_CON,
+       }, {
+               .range_min = DA9062AA_FAULT_LOG,
+               .range_max = DA9062AA_EVENT_C,
+       }, {
+               .range_min = DA9062AA_IRQ_MASK_A,
+               .range_max = DA9062AA_IRQ_MASK_C,
+       }, {
+               .range_min = DA9062AA_CONTROL_A,
+               .range_max = DA9062AA_GPIO_4,
+       }, {
+               .range_min = DA9062AA_GPIO_WKUP_MODE,
+               .range_max = DA9062AA_BUCK4_CONT,
+       }, {
+               .range_min = DA9062AA_BUCK3_CONT,
+               .range_max = DA9062AA_BUCK3_CONT,
+       }, {
+               .range_min = DA9062AA_LDO1_CONT,
+               .range_max = DA9062AA_LDO4_CONT,
+       }, {
+               .range_min = DA9062AA_DVC_1,
+               .range_max = DA9062AA_DVC_1,
+       }, {
+               .range_min = DA9062AA_COUNT_S,
+               .range_max = DA9062AA_ALARM_Y,
+       }, {
+               .range_min = DA9062AA_SEQ,
+               .range_max = DA9062AA_ID_4_3,
+       }, {
+               .range_min = DA9062AA_ID_12_11,
+               .range_max = DA9062AA_ID_16_15,
+       }, {
+               .range_min = DA9062AA_ID_22_21,
+               .range_max = DA9062AA_ID_32_31,
+       }, {
+               .range_min = DA9062AA_SEQ_A,
+               .range_max = DA9062AA_BUCK3_CFG,
+       }, {
+               .range_min = DA9062AA_VBUCK2_A,
+               .range_max = DA9062AA_VBUCK4_A,
+       }, {
+               .range_min = DA9062AA_VBUCK3_A,
+               .range_max = DA9062AA_VBUCK3_A,
+       }, {
+               .range_min = DA9062AA_VLDO1_A,
+               .range_max = DA9062AA_VLDO4_A,
+       }, {
+               .range_min = DA9062AA_VBUCK2_B,
+               .range_max = DA9062AA_VBUCK4_B,
+       }, {
+               .range_min = DA9062AA_VBUCK3_B,
+               .range_max = DA9062AA_VBUCK3_B,
+       }, {
+               .range_min = DA9062AA_VLDO1_B,
+               .range_max = DA9062AA_VLDO4_B,
+       }, {
+               .range_min = DA9062AA_BBAT_CONT,
+               .range_max = DA9062AA_BBAT_CONT,
+       }, {
+               .range_min = DA9062AA_GP_ID_0,
+               .range_max = DA9062AA_GP_ID_19,
+       },
+};
+
+static const struct regmap_range da9062_aa_volatile_ranges[] = {
+       {
+               .range_min = DA9062AA_PAGE_CON,
+               .range_max = DA9062AA_STATUS_B,
+       }, {
+               .range_min = DA9062AA_STATUS_D,
+               .range_max = DA9062AA_EVENT_C,
+       }, {
+               .range_min = DA9062AA_CONTROL_F,
+               .range_max = DA9062AA_CONTROL_F,
+       }, {
+               .range_min = DA9062AA_COUNT_S,
+               .range_max = DA9062AA_SECOND_D,
+       },
+};
+
+static const struct regmap_access_table da9062_aa_readable_table = {
+       .yes_ranges = da9062_aa_readable_ranges,
+       .n_yes_ranges = ARRAY_SIZE(da9062_aa_readable_ranges),
+};
+
+static const struct regmap_access_table da9062_aa_writeable_table = {
+       .yes_ranges = da9062_aa_writeable_ranges,
+       .n_yes_ranges = ARRAY_SIZE(da9062_aa_writeable_ranges),
+};
+
+static const struct regmap_access_table da9062_aa_volatile_table = {
+       .yes_ranges = da9062_aa_volatile_ranges,
+       .n_yes_ranges = ARRAY_SIZE(da9062_aa_volatile_ranges),
+};
+
+static const struct regmap_range_cfg da9062_range_cfg[] = {
+       {
+               .range_min = DA9062AA_PAGE_CON,
+               .range_max = DA9062AA_CONFIG_ID,
+               .selector_reg = DA9062AA_PAGE_CON,
+               .selector_mask = 1 << DA9062_I2C_PAGE_SEL_SHIFT,
+               .selector_shift = DA9062_I2C_PAGE_SEL_SHIFT,
+               .window_start = 0,
+               .window_len = 256,
+       }
+};
+
+static struct regmap_config da9062_regmap_config = {
+       .reg_bits = 8,
+       .val_bits = 8,
+       .ranges = da9062_range_cfg,
+       .num_ranges = ARRAY_SIZE(da9062_range_cfg),
+       .max_register = DA9062AA_CONFIG_ID,
+       .cache_type = REGCACHE_RBTREE,
+       .rd_table = &da9062_aa_readable_table,
+       .wr_table = &da9062_aa_writeable_table,
+       .volatile_table = &da9062_aa_volatile_table,
+};
+
+static int da9062_i2c_probe(struct i2c_client *i2c,
+       const struct i2c_device_id *id)
+{
+       struct da9062 *chip;
+       unsigned int irq_base;
+       int ret;
+
+       chip = devm_kzalloc(&i2c->dev, sizeof(*chip), GFP_KERNEL);
+       if (!chip)
+               return -ENOMEM;
+
+       i2c_set_clientdata(i2c, chip);
+       chip->dev = &i2c->dev;
+
+       if (!i2c->irq) {
+               dev_err(chip->dev, "No IRQ configured\n");
+               return -EINVAL;
+       }
+
+       chip->regmap = devm_regmap_init_i2c(i2c, &da9062_regmap_config);
+       if (IS_ERR(chip->regmap)) {
+               ret = PTR_ERR(chip->regmap);
+               dev_err(chip->dev, "Failed to allocate register map: %d\n",
+                       ret);
+               return ret;
+       }
+
+       ret = da9062_clear_fault_log(chip);
+       if (ret < 0)
+               dev_warn(chip->dev, "Cannot clear fault log\n");
+
+       ret = get_device_type(chip);
+       if (ret)
+               return ret;
+
+       ret = regmap_add_irq_chip(chip->regmap, i2c->irq,
+                       IRQF_TRIGGER_LOW | IRQF_ONESHOT | IRQF_SHARED,
+                       -1, &da9062_irq_chip,
+                       &chip->regmap_irq);
+       if (ret) {
+               dev_err(chip->dev, "Failed to request IRQ %d: %d\n",
+                       i2c->irq, ret);
+               return ret;
+       }
+
+       irq_base = regmap_irq_chip_get_base(chip->regmap_irq);
+
+       ret = mfd_add_devices(chip->dev, PLATFORM_DEVID_NONE, da9062_devs,
+                             ARRAY_SIZE(da9062_devs), NULL, irq_base,
+                             NULL);
+       if (ret) {
+               dev_err(chip->dev, "Cannot register child devices\n");
+               regmap_del_irq_chip(i2c->irq, chip->regmap_irq);
+               return ret;
+       }
+
+       return ret;
+}
+
+static int da9062_i2c_remove(struct i2c_client *i2c)
+{
+       struct da9062 *chip = i2c_get_clientdata(i2c);
+
+       mfd_remove_devices(chip->dev);
+       regmap_del_irq_chip(i2c->irq, chip->regmap_irq);
+
+       return 0;
+}
+
+static const struct i2c_device_id da9062_i2c_id[] = {
+       { "da9062", 0 },
+       { },
+};
+MODULE_DEVICE_TABLE(i2c, da9062_i2c_id);
+
+static const struct of_device_id da9062_dt_ids[] = {
+       { .compatible = "dlg,da9062", },
+       { }
+};
+MODULE_DEVICE_TABLE(of, da9062_dt_ids);
+
+static struct i2c_driver da9062_i2c_driver = {
+       .driver = {
+               .name = "da9062",
+               .of_match_table = of_match_ptr(da9062_dt_ids),
+       },
+       .probe    = da9062_i2c_probe,
+       .remove   = da9062_i2c_remove,
+       .id_table = da9062_i2c_id,
+};
+
+module_i2c_driver(da9062_i2c_driver);
+
+MODULE_DESCRIPTION("Core device driver for Dialog DA9062");
+MODULE_AUTHOR("Steve Twiss <stwiss.opensource@diasemi.com>");
+MODULE_LICENSE("GPL");
diff --git a/include/linux/mfd/da9062/core.h b/include/linux/mfd/da9062/core.h
new file mode 100644 (file)
index 0000000..376ba84
--- /dev/null
@@ -0,0 +1,50 @@
+/*
+ * Copyright (C) 2015  Dialog Semiconductor Ltd.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * 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_DA9062_CORE_H__
+#define __MFD_DA9062_CORE_H__
+
+#include <linux/interrupt.h>
+#include <linux/mfd/da9062/registers.h>
+
+/* Interrupts */
+enum da9062_irqs {
+       /* IRQ A */
+       DA9062_IRQ_ONKEY,
+       DA9062_IRQ_ALARM,
+       DA9062_IRQ_TICK,
+       DA9062_IRQ_WDG_WARN,
+       DA9062_IRQ_SEQ_RDY,
+       /* IRQ B*/
+       DA9062_IRQ_TEMP,
+       DA9062_IRQ_LDO_LIM,
+       DA9062_IRQ_DVC_RDY,
+       DA9062_IRQ_VDD_WARN,
+       /* IRQ C */
+       DA9062_IRQ_GPI0,
+       DA9062_IRQ_GPI1,
+       DA9062_IRQ_GPI2,
+       DA9062_IRQ_GPI3,
+       DA9062_IRQ_GPI4,
+
+       DA9062_NUM_IRQ,
+};
+
+struct da9062 {
+       struct device *dev;
+       struct regmap *regmap;
+       struct regmap_irq_chip_data *regmap_irq;
+};
+
+#endif /* __MFD_DA9062_CORE_H__ */
diff --git a/include/linux/mfd/da9062/registers.h b/include/linux/mfd/da9062/registers.h
new file mode 100644 (file)
index 0000000..97790d1
--- /dev/null
@@ -0,0 +1,1108 @@
+/*
+ * registers.h - REGISTERS H for DA9062
+ * Copyright (C) 2015  Dialog Semiconductor Ltd.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * 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 __DA9062_H__
+#define __DA9062_H__
+
+#define DA9062_PMIC_DEVICE_ID          0x62
+#define DA9062_PMIC_VARIANT_MRC_AA     0x01
+
+#define DA9062_I2C_PAGE_SEL_SHIFT      1
+
+/*
+ * Registers
+ */
+
+#define DA9062AA_PAGE_CON              0x000
+#define DA9062AA_STATUS_A              0x001
+#define DA9062AA_STATUS_B              0x002
+#define DA9062AA_STATUS_D              0x004
+#define DA9062AA_FAULT_LOG             0x005
+#define DA9062AA_EVENT_A               0x006
+#define DA9062AA_EVENT_B               0x007
+#define DA9062AA_EVENT_C               0x008
+#define DA9062AA_IRQ_MASK_A            0x00A
+#define DA9062AA_IRQ_MASK_B            0x00B
+#define DA9062AA_IRQ_MASK_C            0x00C
+#define DA9062AA_CONTROL_A             0x00E
+#define DA9062AA_CONTROL_B             0x00F
+#define DA9062AA_CONTROL_C             0x010
+#define DA9062AA_CONTROL_D             0x011
+#define DA9062AA_CONTROL_E             0x012
+#define DA9062AA_CONTROL_F             0x013
+#define DA9062AA_PD_DIS                        0x014
+#define DA9062AA_GPIO_0_1              0x015
+#define DA9062AA_GPIO_2_3              0x016
+#define DA9062AA_GPIO_4                        0x017
+#define DA9062AA_GPIO_WKUP_MODE                0x01C
+#define DA9062AA_GPIO_MODE0_4          0x01D
+#define DA9062AA_GPIO_OUT0_2           0x01E
+#define DA9062AA_GPIO_OUT3_4           0x01F
+#define DA9062AA_BUCK2_CONT            0x020
+#define DA9062AA_BUCK1_CONT            0x021
+#define DA9062AA_BUCK4_CONT            0x022
+#define DA9062AA_BUCK3_CONT            0x024
+#define DA9062AA_LDO1_CONT             0x026
+#define DA9062AA_LDO2_CONT             0x027
+#define DA9062AA_LDO3_CONT             0x028
+#define DA9062AA_LDO4_CONT             0x029
+#define DA9062AA_DVC_1                 0x032
+#define DA9062AA_COUNT_S               0x040
+#define DA9062AA_COUNT_MI              0x041
+#define DA9062AA_COUNT_H               0x042
+#define DA9062AA_COUNT_D               0x043
+#define DA9062AA_COUNT_MO              0x044
+#define DA9062AA_COUNT_Y               0x045
+#define DA9062AA_ALARM_S               0x046
+#define DA9062AA_ALARM_MI              0x047
+#define DA9062AA_ALARM_H               0x048
+#define DA9062AA_ALARM_D               0x049
+#define DA9062AA_ALARM_MO              0x04A
+#define DA9062AA_ALARM_Y               0x04B
+#define DA9062AA_SECOND_A              0x04C
+#define DA9062AA_SECOND_B              0x04D
+#define DA9062AA_SECOND_C              0x04E
+#define DA9062AA_SECOND_D              0x04F
+#define DA9062AA_SEQ                   0x081
+#define DA9062AA_SEQ_TIMER             0x082
+#define DA9062AA_ID_2_1                        0x083
+#define DA9062AA_ID_4_3                        0x084
+#define DA9062AA_ID_12_11              0x088
+#define DA9062AA_ID_14_13              0x089
+#define DA9062AA_ID_16_15              0x08A
+#define DA9062AA_ID_22_21              0x08D
+#define DA9062AA_ID_24_23              0x08E
+#define DA9062AA_ID_26_25              0x08F
+#define DA9062AA_ID_28_27              0x090
+#define DA9062AA_ID_30_29              0x091
+#define DA9062AA_ID_32_31              0x092
+#define DA9062AA_SEQ_A                 0x095
+#define DA9062AA_SEQ_B                 0x096
+#define DA9062AA_WAIT                  0x097
+#define DA9062AA_EN_32K                        0x098
+#define DA9062AA_RESET                 0x099
+#define DA9062AA_BUCK_ILIM_A           0x09A
+#define DA9062AA_BUCK_ILIM_B           0x09B
+#define DA9062AA_BUCK_ILIM_C           0x09C
+#define DA9062AA_BUCK2_CFG             0x09D
+#define DA9062AA_BUCK1_CFG             0x09E
+#define DA9062AA_BUCK4_CFG             0x09F
+#define DA9062AA_BUCK3_CFG             0x0A0
+#define DA9062AA_VBUCK2_A              0x0A3
+#define DA9062AA_VBUCK1_A              0x0A4
+#define DA9062AA_VBUCK4_A              0x0A5
+#define DA9062AA_VBUCK3_A              0x0A7
+#define DA9062AA_VLDO1_A               0x0A9
+#define DA9062AA_VLDO2_A               0x0AA
+#define DA9062AA_VLDO3_A               0x0AB
+#define DA9062AA_VLDO4_A               0x0AC
+#define DA9062AA_VBUCK2_B              0x0B4
+#define DA9062AA_VBUCK1_B              0x0B5
+#define DA9062AA_VBUCK4_B              0x0B6
+#define DA9062AA_VBUCK3_B              0x0B8
+#define DA9062AA_VLDO1_B               0x0BA
+#define DA9062AA_VLDO2_B               0x0BB
+#define DA9062AA_VLDO3_B               0x0BC
+#define DA9062AA_VLDO4_B               0x0BD
+#define DA9062AA_BBAT_CONT             0x0C5
+#define DA9062AA_INTERFACE             0x105
+#define DA9062AA_CONFIG_A              0x106
+#define DA9062AA_CONFIG_B              0x107
+#define DA9062AA_CONFIG_C              0x108
+#define DA9062AA_CONFIG_D              0x109
+#define DA9062AA_CONFIG_E              0x10A
+#define DA9062AA_CONFIG_G              0x10C
+#define DA9062AA_CONFIG_H              0x10D
+#define DA9062AA_CONFIG_I              0x10E
+#define DA9062AA_CONFIG_J              0x10F
+#define DA9062AA_CONFIG_K              0x110
+#define DA9062AA_CONFIG_M              0x112
+#define DA9062AA_TRIM_CLDR             0x120
+#define DA9062AA_GP_ID_0               0x121
+#define DA9062AA_GP_ID_1               0x122
+#define DA9062AA_GP_ID_2               0x123
+#define DA9062AA_GP_ID_3               0x124
+#define DA9062AA_GP_ID_4               0x125
+#define DA9062AA_GP_ID_5               0x126
+#define DA9062AA_GP_ID_6               0x127
+#define DA9062AA_GP_ID_7               0x128
+#define DA9062AA_GP_ID_8               0x129
+#define DA9062AA_GP_ID_9               0x12A
+#define DA9062AA_GP_ID_10              0x12B
+#define DA9062AA_GP_ID_11              0x12C
+#define DA9062AA_GP_ID_12              0x12D
+#define DA9062AA_GP_ID_13              0x12E
+#define DA9062AA_GP_ID_14              0x12F
+#define DA9062AA_GP_ID_15              0x130
+#define DA9062AA_GP_ID_16              0x131
+#define DA9062AA_GP_ID_17              0x132
+#define DA9062AA_GP_ID_18              0x133
+#define DA9062AA_GP_ID_19              0x134
+#define DA9062AA_DEVICE_ID             0x181
+#define DA9062AA_VARIANT_ID            0x182
+#define DA9062AA_CUSTOMER_ID           0x183
+#define DA9062AA_CONFIG_ID             0x184
+
+/*
+ * Bit fields
+ */
+
+/* DA9062AA_PAGE_CON = 0x000 */
+#define DA9062AA_PAGE_SHIFT            0
+#define DA9062AA_PAGE_MASK             0x3f
+#define DA9062AA_WRITE_MODE_SHIFT      6
+#define DA9062AA_WRITE_MODE_MASK       BIT(6)
+#define DA9062AA_REVERT_SHIFT          7
+#define DA9062AA_REVERT_MASK           BIT(7)
+
+/* DA9062AA_STATUS_A = 0x001 */
+#define DA9062AA_NONKEY_SHIFT          0
+#define DA9062AA_NONKEY_MASK           0x01
+#define DA9062AA_DVC_BUSY_SHIFT                2
+#define DA9062AA_DVC_BUSY_MASK         BIT(2)
+
+/* DA9062AA_STATUS_B = 0x002 */
+#define DA9062AA_GPI0_SHIFT            0
+#define DA9062AA_GPI0_MASK             0x01
+#define DA9062AA_GPI1_SHIFT            1
+#define DA9062AA_GPI1_MASK             BIT(1)
+#define DA9062AA_GPI2_SHIFT            2
+#define DA9062AA_GPI2_MASK             BIT(2)
+#define DA9062AA_GPI3_SHIFT            3
+#define DA9062AA_GPI3_MASK             BIT(3)
+#define DA9062AA_GPI4_SHIFT            4
+#define DA9062AA_GPI4_MASK             BIT(4)
+
+/* DA9062AA_STATUS_D = 0x004 */
+#define DA9062AA_LDO1_ILIM_SHIFT       0
+#define DA9062AA_LDO1_ILIM_MASK                0x01
+#define DA9062AA_LDO2_ILIM_SHIFT       1
+#define DA9062AA_LDO2_ILIM_MASK                BIT(1)
+#define DA9062AA_LDO3_ILIM_SHIFT       2
+#define DA9062AA_LDO3_ILIM_MASK                BIT(2)
+#define DA9062AA_LDO4_ILIM_SHIFT       3
+#define DA9062AA_LDO4_ILIM_MASK                BIT(3)
+
+/* DA9062AA_FAULT_LOG = 0x005 */
+#define DA9062AA_TWD_ERROR_SHIFT       0
+#define DA9062AA_TWD_ERROR_MASK                0x01
+#define DA9062AA_POR_SHIFT             1
+#define DA9062AA_POR_MASK              BIT(1)
+#define DA9062AA_VDD_FAULT_SHIFT       2
+#define DA9062AA_VDD_FAULT_MASK                BIT(2)
+#define DA9062AA_VDD_START_SHIFT       3
+#define DA9062AA_VDD_START_MASK                BIT(3)
+#define DA9062AA_TEMP_CRIT_SHIFT       4
+#define DA9062AA_TEMP_CRIT_MASK                BIT(4)
+#define DA9062AA_KEY_RESET_SHIFT       5
+#define DA9062AA_KEY_RESET_MASK                BIT(5)
+#define DA9062AA_NSHUTDOWN_SHIFT       6
+#define DA9062AA_NSHUTDOWN_MASK                BIT(6)
+#define DA9062AA_WAIT_SHUT_SHIFT       7
+#define DA9062AA_WAIT_SHUT_MASK                BIT(7)
+
+/* DA9062AA_EVENT_A = 0x006 */
+#define DA9062AA_E_NONKEY_SHIFT                0
+#define DA9062AA_E_NONKEY_MASK         0x01
+#define DA9062AA_E_ALARM_SHIFT         1
+#define DA9062AA_E_ALARM_MASK          BIT(1)
+#define DA9062AA_E_TICK_SHIFT          2
+#define DA9062AA_E_TICK_MASK           BIT(2)
+#define DA9062AA_E_WDG_WARN_SHIFT      3
+#define DA9062AA_E_WDG_WARN_MASK       BIT(3)
+#define DA9062AA_E_SEQ_RDY_SHIFT       4
+#define DA9062AA_E_SEQ_RDY_MASK                BIT(4)
+#define DA9062AA_EVENTS_B_SHIFT                5
+#define DA9062AA_EVENTS_B_MASK         BIT(5)
+#define DA9062AA_EVENTS_C_SHIFT                6
+#define DA9062AA_EVENTS_C_MASK         BIT(6)
+
+/* DA9062AA_EVENT_B = 0x007 */
+#define DA9062AA_E_TEMP_SHIFT          1
+#define DA9062AA_E_TEMP_MASK           BIT(1)
+#define DA9062AA_E_LDO_LIM_SHIFT       3
+#define DA9062AA_E_LDO_LIM_MASK                BIT(3)
+#define DA9062AA_E_DVC_RDY_SHIFT       5
+#define DA9062AA_E_DVC_RDY_MASK                BIT(5)
+#define DA9062AA_E_VDD_WARN_SHIFT      7
+#define DA9062AA_E_VDD_WARN_MASK       BIT(7)
+
+/* DA9062AA_EVENT_C = 0x008 */
+#define DA9062AA_E_GPI0_SHIFT          0
+#define DA9062AA_E_GPI0_MASK           0x01
+#define DA9062AA_E_GPI1_SHIFT          1
+#define DA9062AA_E_GPI1_MASK           BIT(1)
+#define DA9062AA_E_GPI2_SHIFT          2
+#define DA9062AA_E_GPI2_MASK           BIT(2)
+#define DA9062AA_E_GPI3_SHIFT          3
+#define DA9062AA_E_GPI3_MASK           BIT(3)
+#define DA9062AA_E_GPI4_SHIFT          4
+#define DA9062AA_E_GPI4_MASK           BIT(4)
+
+/* DA9062AA_IRQ_MASK_A = 0x00A */
+#define DA9062AA_M_NONKEY_SHIFT                0
+#define DA9062AA_M_NONKEY_MASK         0x01
+#define DA9062AA_M_ALARM_SHIFT         1
+#define DA9062AA_M_ALARM_MASK          BIT(1)
+#define DA9062AA_M_TICK_SHIFT          2
+#define DA9062AA_M_TICK_MASK           BIT(2)
+#define DA9062AA_M_WDG_WARN_SHIFT      3
+#define DA9062AA_M_WDG_WARN_MASK       BIT(3)
+#define DA9062AA_M_SEQ_RDY_SHIFT       4
+#define DA9062AA_M_SEQ_RDY_MASK                BIT(4)
+
+/* DA9062AA_IRQ_MASK_B = 0x00B */
+#define DA9062AA_M_TEMP_SHIFT          1
+#define DA9062AA_M_TEMP_MASK           BIT(1)
+#define DA9062AA_M_LDO_LIM_SHIFT       3
+#define DA9062AA_M_LDO_LIM_MASK                BIT(3)
+#define DA9062AA_M_DVC_RDY_SHIFT       5
+#define DA9062AA_M_DVC_RDY_MASK                BIT(5)
+#define DA9062AA_M_VDD_WARN_SHIFT      7
+#define DA9062AA_M_VDD_WARN_MASK       BIT(7)
+
+/* DA9062AA_IRQ_MASK_C = 0x00C */
+#define DA9062AA_M_GPI0_SHIFT          0
+#define DA9062AA_M_GPI0_MASK           0x01
+#define DA9062AA_M_GPI1_SHIFT          1
+#define DA9062AA_M_GPI1_MASK           BIT(1)
+#define DA9062AA_M_GPI2_SHIFT          2
+#define DA9062AA_M_GPI2_MASK           BIT(2)
+#define DA9062AA_M_GPI3_SHIFT          3
+#define DA9062AA_M_GPI3_MASK           BIT(3)
+#define DA9062AA_M_GPI4_SHIFT          4
+#define DA9062AA_M_GPI4_MASK           BIT(4)
+
+/* DA9062AA_CONTROL_A = 0x00E */
+#define DA9062AA_SYSTEM_EN_SHIFT       0
+#define DA9062AA_SYSTEM_EN_MASK                0x01
+#define DA9062AA_POWER_EN_SHIFT                1
+#define DA9062AA_POWER_EN_MASK         BIT(1)
+#define DA9062AA_POWER1_EN_SHIFT       2
+#define DA9062AA_POWER1_EN_MASK                BIT(2)
+#define DA9062AA_STANDBY_SHIFT         3
+#define DA9062AA_STANDBY_MASK          BIT(3)
+#define DA9062AA_M_SYSTEM_EN_SHIFT     4
+#define DA9062AA_M_SYSTEM_EN_MASK      BIT(4)
+#define DA9062AA_M_POWER_EN_SHIFT      5
+#define DA9062AA_M_POWER_EN_MASK       BIT(5)
+#define DA9062AA_M_POWER1_EN_SHIFT     6
+#define DA9062AA_M_POWER1_EN_MASK      BIT(6)
+
+/* DA9062AA_CONTROL_B = 0x00F */
+#define DA9062AA_WATCHDOG_PD_SHIFT     1
+#define DA9062AA_WATCHDOG_PD_MASK      BIT(1)
+#define DA9062AA_FREEZE_EN_SHIFT       2
+#define DA9062AA_FREEZE_EN_MASK                BIT(2)
+#define DA9062AA_NRES_MODE_SHIFT       3
+#define DA9062AA_NRES_MODE_MASK                BIT(3)
+#define DA9062AA_NONKEY_LOCK_SHIFT     4
+#define DA9062AA_NONKEY_LOCK_MASK      BIT(4)
+#define DA9062AA_NFREEZE_SHIFT         5
+#define DA9062AA_NFREEZE_MASK          (0x03 << 5)
+#define DA9062AA_BUCK_SLOWSTART_SHIFT  7
+#define DA9062AA_BUCK_SLOWSTART_MASK   BIT(7)
+
+/* DA9062AA_CONTROL_C = 0x010 */
+#define DA9062AA_DEBOUNCING_SHIFT      0
+#define DA9062AA_DEBOUNCING_MASK       0x07
+#define DA9062AA_AUTO_BOOT_SHIFT       3
+#define DA9062AA_AUTO_BOOT_MASK                BIT(3)
+#define DA9062AA_OTPREAD_EN_SHIFT      4
+#define DA9062AA_OTPREAD_EN_MASK       BIT(4)
+#define DA9062AA_SLEW_RATE_SHIFT       5
+#define DA9062AA_SLEW_RATE_MASK                (0x03 << 5)
+#define DA9062AA_DEF_SUPPLY_SHIFT      7
+#define DA9062AA_DEF_SUPPLY_MASK       BIT(7)
+
+/* DA9062AA_CONTROL_D = 0x011 */
+#define DA9062AA_TWDSCALE_SHIFT                0
+#define DA9062AA_TWDSCALE_MASK         0x07
+
+/* DA9062AA_CONTROL_E = 0x012 */
+#define DA9062AA_RTC_MODE_PD_SHIFT     0
+#define DA9062AA_RTC_MODE_PD_MASK      0x01
+#define DA9062AA_RTC_MODE_SD_SHIFT     1
+#define DA9062AA_RTC_MODE_SD_MASK      BIT(1)
+#define DA9062AA_RTC_EN_SHIFT          2
+#define DA9062AA_RTC_EN_MASK           BIT(2)
+#define DA9062AA_V_LOCK_SHIFT          7
+#define DA9062AA_V_LOCK_MASK           BIT(7)
+
+/* DA9062AA_CONTROL_F = 0x013 */
+#define DA9062AA_WATCHDOG_SHIFT                0
+#define DA9062AA_WATCHDOG_MASK         0x01
+#define DA9062AA_SHUTDOWN_SHIFT                1
+#define DA9062AA_SHUTDOWN_MASK         BIT(1)
+#define DA9062AA_WAKE_UP_SHIFT         2
+#define DA9062AA_WAKE_UP_MASK          BIT(2)
+
+/* DA9062AA_PD_DIS = 0x014 */
+#define DA9062AA_GPI_DIS_SHIFT         0
+#define DA9062AA_GPI_DIS_MASK          0x01
+#define DA9062AA_PMIF_DIS_SHIFT                2
+#define DA9062AA_PMIF_DIS_MASK         BIT(2)
+#define DA9062AA_CLDR_PAUSE_SHIFT      4
+#define DA9062AA_CLDR_PAUSE_MASK       BIT(4)
+#define DA9062AA_BBAT_DIS_SHIFT                5
+#define DA9062AA_BBAT_DIS_MASK         BIT(5)
+#define DA9062AA_OUT32K_PAUSE_SHIFT    6
+#define DA9062AA_OUT32K_PAUSE_MASK     BIT(6)
+#define DA9062AA_PMCONT_DIS_SHIFT      7
+#define DA9062AA_PMCONT_DIS_MASK       BIT(7)
+
+/* DA9062AA_GPIO_0_1 = 0x015 */
+#define DA9062AA_GPIO0_PIN_SHIFT       0
+#define DA9062AA_GPIO0_PIN_MASK                0x03
+#define DA9062AA_GPIO0_TYPE_SHIFT      2
+#define DA9062AA_GPIO0_TYPE_MASK       BIT(2)
+#define DA9062AA_GPIO0_WEN_SHIFT       3
+#define DA9062AA_GPIO0_WEN_MASK                BIT(3)
+#define DA9062AA_GPIO1_PIN_SHIFT       4
+#define DA9062AA_GPIO1_PIN_MASK                (0x03 << 4)
+#define DA9062AA_GPIO1_TYPE_SHIFT      6
+#define DA9062AA_GPIO1_TYPE_MASK       BIT(6)
+#define DA9062AA_GPIO1_WEN_SHIFT       7
+#define DA9062AA_GPIO1_WEN_MASK                BIT(7)
+
+/* DA9062AA_GPIO_2_3 = 0x016 */
+#define DA9062AA_GPIO2_PIN_SHIFT       0
+#define DA9062AA_GPIO2_PIN_MASK                0x03
+#define DA9062AA_GPIO2_TYPE_SHIFT      2
+#define DA9062AA_GPIO2_TYPE_MASK       BIT(2)
+#define DA9062AA_GPIO2_WEN_SHIFT       3
+#define DA9062AA_GPIO2_WEN_MASK                BIT(3)
+#define DA9062AA_GPIO3_PIN_SHIFT       4
+#define DA9062AA_GPIO3_PIN_MASK                (0x03 << 4)
+#define DA9062AA_GPIO3_TYPE_SHIFT      6
+#define DA9062AA_GPIO3_TYPE_MASK       BIT(6)
+#define DA9062AA_GPIO3_WEN_SHIFT       7
+#define DA9062AA_GPIO3_WEN_MASK                BIT(7)
+
+/* DA9062AA_GPIO_4 = 0x017 */
+#define DA9062AA_GPIO4_PIN_SHIFT       0
+#define DA9062AA_GPIO4_PIN_MASK                0x03
+#define DA9062AA_GPIO4_TYPE_SHIFT      2
+#define DA9062AA_GPIO4_TYPE_MASK       BIT(2)
+#define DA9062AA_GPIO4_WEN_SHIFT       3
+#define DA9062AA_GPIO4_WEN_MASK                BIT(3)
+
+/* DA9062AA_GPIO_WKUP_MODE = 0x01C */
+#define DA9062AA_GPIO0_WKUP_MODE_SHIFT 0
+#define DA9062AA_GPIO0_WKUP_MODE_MASK  0x01
+#define DA9062AA_GPIO1_WKUP_MODE_SHIFT 1
+#define DA9062AA_GPIO1_WKUP_MODE_MASK  BIT(1)
+#define DA9062AA_GPIO2_WKUP_MODE_SHIFT 2
+#define DA9062AA_GPIO2_WKUP_MODE_MASK  BIT(2)
+#define DA9062AA_GPIO3_WKUP_MODE_SHIFT 3
+#define DA9062AA_GPIO3_WKUP_MODE_MASK  BIT(3)
+#define DA9062AA_GPIO4_WKUP_MODE_SHIFT 4
+#define DA9062AA_GPIO4_WKUP_MODE_MASK  BIT(4)
+
+/* DA9062AA_GPIO_MODE0_4 = 0x01D */
+#define DA9062AA_GPIO0_MODE_SHIFT      0
+#define DA9062AA_GPIO0_MODE_MASK       0x01
+#define DA9062AA_GPIO1_MODE_SHIFT      1
+#define DA9062AA_GPIO1_MODE_MASK       BIT(1)
+#define DA9062AA_GPIO2_MODE_SHIFT      2
+#define DA9062AA_GPIO2_MODE_MASK       BIT(2)
+#define DA9062AA_GPIO3_MODE_SHIFT      3
+#define DA9062AA_GPIO3_MODE_MASK       BIT(3)
+#define DA9062AA_GPIO4_MODE_SHIFT      4
+#define DA9062AA_GPIO4_MODE_MASK       BIT(4)
+
+/* DA9062AA_GPIO_OUT0_2 = 0x01E */
+#define DA9062AA_GPIO0_OUT_SHIFT       0
+#define DA9062AA_GPIO0_OUT_MASK                0x07
+#define DA9062AA_GPIO1_OUT_SHIFT       3
+#define DA9062AA_GPIO1_OUT_MASK                (0x07 << 3)
+#define DA9062AA_GPIO2_OUT_SHIFT       6
+#define DA9062AA_GPIO2_OUT_MASK                (0x03 << 6)
+
+/* DA9062AA_GPIO_OUT3_4 = 0x01F */
+#define DA9062AA_GPIO3_OUT_SHIFT       0
+#define DA9062AA_GPIO3_OUT_MASK                0x07
+#define DA9062AA_GPIO4_OUT_SHIFT       3
+#define DA9062AA_GPIO4_OUT_MASK                (0x03 << 3)
+
+/* DA9062AA_BUCK2_CONT = 0x020 */
+#define DA9062AA_BUCK2_EN_SHIFT                0
+#define DA9062AA_BUCK2_EN_MASK         0x01
+#define DA9062AA_BUCK2_GPI_SHIFT       1
+#define DA9062AA_BUCK2_GPI_MASK                (0x03 << 1)
+#define DA9062AA_BUCK2_CONF_SHIFT      3
+#define DA9062AA_BUCK2_CONF_MASK       BIT(3)
+#define DA9062AA_VBUCK2_GPI_SHIFT      5
+#define DA9062AA_VBUCK2_GPI_MASK       (0x03 << 5)
+
+/* DA9062AA_BUCK1_CONT = 0x021 */
+#define DA9062AA_BUCK1_EN_SHIFT                0
+#define DA9062AA_BUCK1_EN_MASK         0x01
+#define DA9062AA_BUCK1_GPI_SHIFT       1
+#define DA9062AA_BUCK1_GPI_MASK                (0x03 << 1)
+#define DA9062AA_BUCK1_CONF_SHIFT      3
+#define DA9062AA_BUCK1_CONF_MASK       BIT(3)
+#define DA9062AA_VBUCK1_GPI_SHIFT      5
+#define DA9062AA_VBUCK1_GPI_MASK       (0x03 << 5)
+
+/* DA9062AA_BUCK4_CONT = 0x022 */
+#define DA9062AA_BUCK4_EN_SHIFT                0
+#define DA9062AA_BUCK4_EN_MASK         0x01
+#define DA9062AA_BUCK4_GPI_SHIFT       1
+#define DA9062AA_BUCK4_GPI_MASK                (0x03 << 1)
+#define DA9062AA_BUCK4_CONF_SHIFT      3
+#define DA9062AA_BUCK4_CONF_MASK       BIT(3)
+#define DA9062AA_VBUCK4_GPI_SHIFT      5
+#define DA9062AA_VBUCK4_GPI_MASK       (0x03 << 5)
+
+/* DA9062AA_BUCK3_CONT = 0x024 */
+#define DA9062AA_BUCK3_EN_SHIFT                0
+#define DA9062AA_BUCK3_EN_MASK         0x01
+#define DA9062AA_BUCK3_GPI_SHIFT       1
+#define DA9062AA_BUCK3_GPI_MASK                (0x03 << 1)
+#define DA9062AA_BUCK3_CONF_SHIFT      3
+#define DA9062AA_BUCK3_CONF_MASK       BIT(3)
+#define DA9062AA_VBUCK3_GPI_SHIFT      5
+#define DA9062AA_VBUCK3_GPI_MASK       (0x03 << 5)
+
+/* DA9062AA_LDO1_CONT = 0x026 */
+#define DA9062AA_LDO1_EN_SHIFT         0
+#define DA9062AA_LDO1_EN_MASK          0x01
+#define DA9062AA_LDO1_GPI_SHIFT                1
+#define DA9062AA_LDO1_GPI_MASK         (0x03 << 1)
+#define DA9062AA_LDO1_PD_DIS_SHIFT     3
+#define DA9062AA_LDO1_PD_DIS_MASK      BIT(3)
+#define DA9062AA_VLDO1_GPI_SHIFT       5
+#define DA9062AA_VLDO1_GPI_MASK                (0x03 << 5)
+#define DA9062AA_LDO1_CONF_SHIFT       7
+#define DA9062AA_LDO1_CONF_MASK                BIT(7)
+
+/* DA9062AA_LDO2_CONT = 0x027 */
+#define DA9062AA_LDO2_EN_SHIFT         0
+#define DA9062AA_LDO2_EN_MASK          0x01
+#define DA9062AA_LDO2_GPI_SHIFT                1
+#define DA9062AA_LDO2_GPI_MASK         (0x03 << 1)
+#define DA9062AA_LDO2_PD_DIS_SHIFT     3
+#define DA9062AA_LDO2_PD_DIS_MASK      BIT(3)
+#define DA9062AA_VLDO2_GPI_SHIFT       5
+#define DA9062AA_VLDO2_GPI_MASK                (0x03 << 5)
+#define DA9062AA_LDO2_CONF_SHIFT       7
+#define DA9062AA_LDO2_CONF_MASK                BIT(7)
+
+/* DA9062AA_LDO3_CONT = 0x028 */
+#define DA9062AA_LDO3_EN_SHIFT         0
+#define DA9062AA_LDO3_EN_MASK          0x01
+#define DA9062AA_LDO3_GPI_SHIFT                1
+#define DA9062AA_LDO3_GPI_MASK         (0x03 << 1)
+#define DA9062AA_LDO3_PD_DIS_SHIFT     3
+#define DA9062AA_LDO3_PD_DIS_MASK      BIT(3)
+#define DA9062AA_VLDO3_GPI_SHIFT       5
+#define DA9062AA_VLDO3_GPI_MASK                (0x03 << 5)
+#define DA9062AA_LDO3_CONF_SHIFT       7
+#define DA9062AA_LDO3_CONF_MASK                BIT(7)
+
+/* DA9062AA_LDO4_CONT = 0x029 */
+#define DA9062AA_LDO4_EN_SHIFT         0
+#define DA9062AA_LDO4_EN_MASK          0x01
+#define DA9062AA_LDO4_GPI_SHIFT                1
+#define DA9062AA_LDO4_GPI_MASK         (0x03 << 1)
+#define DA9062AA_LDO4_PD_DIS_SHIFT     3
+#define DA9062AA_LDO4_PD_DIS_MASK      BIT(3)
+#define DA9062AA_VLDO4_GPI_SHIFT       5
+#define DA9062AA_VLDO4_GPI_MASK                (0x03 << 5)
+#define DA9062AA_LDO4_CONF_SHIFT       7
+#define DA9062AA_LDO4_CONF_MASK                BIT(7)
+
+/* DA9062AA_DVC_1 = 0x032 */
+#define DA9062AA_VBUCK1_SEL_SHIFT      0
+#define DA9062AA_VBUCK1_SEL_MASK       0x01
+#define DA9062AA_VBUCK2_SEL_SHIFT      1
+#define DA9062AA_VBUCK2_SEL_MASK       BIT(1)
+#define DA9062AA_VBUCK4_SEL_SHIFT      2
+#define DA9062AA_VBUCK4_SEL_MASK       BIT(2)
+#define DA9062AA_VBUCK3_SEL_SHIFT      3
+#define DA9062AA_VBUCK3_SEL_MASK       BIT(3)
+#define DA9062AA_VLDO1_SEL_SHIFT       4
+#define DA9062AA_VLDO1_SEL_MASK                BIT(4)
+#define DA9062AA_VLDO2_SEL_SHIFT       5
+#define DA9062AA_VLDO2_SEL_MASK                BIT(5)
+#define DA9062AA_VLDO3_SEL_SHIFT       6
+#define DA9062AA_VLDO3_SEL_MASK                BIT(6)
+#define DA9062AA_VLDO4_SEL_SHIFT       7
+#define DA9062AA_VLDO4_SEL_MASK                BIT(7)
+
+/* DA9062AA_COUNT_S = 0x040 */
+#define DA9062AA_COUNT_SEC_SHIFT       0
+#define DA9062AA_COUNT_SEC_MASK                0x3f
+#define DA9062AA_RTC_READ_SHIFT                7
+#define DA9062AA_RTC_READ_MASK         BIT(7)
+
+/* DA9062AA_COUNT_MI = 0x041 */
+#define DA9062AA_COUNT_MIN_SHIFT       0
+#define DA9062AA_COUNT_MIN_MASK                0x3f
+
+/* DA9062AA_COUNT_H = 0x042 */
+#define DA9062AA_COUNT_HOUR_SHIFT      0
+#define DA9062AA_COUNT_HOUR_MASK       0x1f
+
+/* DA9062AA_COUNT_D = 0x043 */
+#define DA9062AA_COUNT_DAY_SHIFT       0
+#define DA9062AA_COUNT_DAY_MASK                0x1f
+
+/* DA9062AA_COUNT_MO = 0x044 */
+#define DA9062AA_COUNT_MONTH_SHIFT     0
+#define DA9062AA_COUNT_MONTH_MASK      0x0f
+
+/* DA9062AA_COUNT_Y = 0x045 */
+#define DA9062AA_COUNT_YEAR_SHIFT      0
+#define DA9062AA_COUNT_YEAR_MASK       0x3f
+#define DA9062AA_MONITOR_SHIFT         6
+#define DA9062AA_MONITOR_MASK          BIT(6)
+
+/* DA9062AA_ALARM_S = 0x046 */
+#define DA9062AA_ALARM_SEC_SHIFT       0
+#define DA9062AA_ALARM_SEC_MASK                0x3f
+#define DA9062AA_ALARM_STATUS_SHIFT    6
+#define DA9062AA_ALARM_STATUS_MASK     (0x03 << 6)
+
+/* DA9062AA_ALARM_MI = 0x047 */
+#define DA9062AA_ALARM_MIN_SHIFT       0
+#define DA9062AA_ALARM_MIN_MASK                0x3f
+
+/* DA9062AA_ALARM_H = 0x048 */
+#define DA9062AA_ALARM_HOUR_SHIFT      0
+#define DA9062AA_ALARM_HOUR_MASK       0x1f
+
+/* DA9062AA_ALARM_D = 0x049 */
+#define DA9062AA_ALARM_DAY_SHIFT       0
+#define DA9062AA_ALARM_DAY_MASK                0x1f
+
+/* DA9062AA_ALARM_MO = 0x04A */
+#define DA9062AA_ALARM_MONTH_SHIFT     0
+#define DA9062AA_ALARM_MONTH_MASK      0x0f
+#define DA9062AA_TICK_TYPE_SHIFT       4
+#define DA9062AA_TICK_TYPE_MASK                BIT(4)
+#define DA9062AA_TICK_WAKE_SHIFT       5
+#define DA9062AA_TICK_WAKE_MASK                BIT(5)
+
+/* DA9062AA_ALARM_Y = 0x04B */
+#define DA9062AA_ALARM_YEAR_SHIFT      0
+#define DA9062AA_ALARM_YEAR_MASK       0x3f
+#define DA9062AA_ALARM_ON_SHIFT                6
+#define DA9062AA_ALARM_ON_MASK         BIT(6)
+#define DA9062AA_TICK_ON_SHIFT         7
+#define DA9062AA_TICK_ON_MASK          BIT(7)
+
+/* DA9062AA_SECOND_A = 0x04C */
+#define DA9062AA_SECONDS_A_SHIFT       0
+#define DA9062AA_SECONDS_A_MASK                0xff
+
+/* DA9062AA_SECOND_B = 0x04D */
+#define DA9062AA_SECONDS_B_SHIFT       0
+#define DA9062AA_SECONDS_B_MASK                0xff
+
+/* DA9062AA_SECOND_C = 0x04E */
+#define DA9062AA_SECONDS_C_SHIFT       0
+#define DA9062AA_SECONDS_C_MASK                0xff
+
+/* DA9062AA_SECOND_D = 0x04F */
+#define DA9062AA_SECONDS_D_SHIFT       0
+#define DA9062AA_SECONDS_D_MASK                0xff
+
+/* DA9062AA_SEQ = 0x081 */
+#define DA9062AA_SEQ_POINTER_SHIFT     0
+#define DA9062AA_SEQ_POINTER_MASK      0x0f
+#define DA9062AA_NXT_SEQ_START_SHIFT   4
+#define DA9062AA_NXT_SEQ_START_MASK    (0x0f << 4)
+
+/* DA9062AA_SEQ_TIMER = 0x082 */
+#define DA9062AA_SEQ_TIME_SHIFT                0
+#define DA9062AA_SEQ_TIME_MASK         0x0f
+#define DA9062AA_SEQ_DUMMY_SHIFT       4
+#define DA9062AA_SEQ_DUMMY_MASK                (0x0f << 4)
+
+/* DA9062AA_ID_2_1 = 0x083 */
+#define DA9062AA_LDO1_STEP_SHIFT       0
+#define DA9062AA_LDO1_STEP_MASK                0x0f
+#define DA9062AA_LDO2_STEP_SHIFT       4
+#define DA9062AA_LDO2_STEP_MASK                (0x0f << 4)
+
+/* DA9062AA_ID_4_3 = 0x084 */
+#define DA9062AA_LDO3_STEP_SHIFT       0
+#define DA9062AA_LDO3_STEP_MASK                0x0f
+#define DA9062AA_LDO4_STEP_SHIFT       4
+#define DA9062AA_LDO4_STEP_MASK                (0x0f << 4)
+
+/* DA9062AA_ID_12_11 = 0x088 */
+#define DA9062AA_PD_DIS_STEP_SHIFT     4
+#define DA9062AA_PD_DIS_STEP_MASK      (0x0f << 4)
+
+/* DA9062AA_ID_14_13 = 0x089 */
+#define DA9062AA_BUCK1_STEP_SHIFT      0
+#define DA9062AA_BUCK1_STEP_MASK       0x0f
+#define DA9062AA_BUCK2_STEP_SHIFT      4
+#define DA9062AA_BUCK2_STEP_MASK       (0x0f << 4)
+
+/* DA9062AA_ID_16_15 = 0x08A */
+#define DA9062AA_BUCK4_STEP_SHIFT      0
+#define DA9062AA_BUCK4_STEP_MASK       0x0f
+#define DA9062AA_BUCK3_STEP_SHIFT      4
+#define DA9062AA_BUCK3_STEP_MASK       (0x0f << 4)
+
+/* DA9062AA_ID_22_21 = 0x08D */
+#define DA9062AA_GP_RISE1_STEP_SHIFT   0
+#define DA9062AA_GP_RISE1_STEP_MASK    0x0f
+#define DA9062AA_GP_FALL1_STEP_SHIFT   4
+#define DA9062AA_GP_FALL1_STEP_MASK    (0x0f << 4)
+
+/* DA9062AA_ID_24_23 = 0x08E */
+#define DA9062AA_GP_RISE2_STEP_SHIFT   0
+#define DA9062AA_GP_RISE2_STEP_MASK    0x0f
+#define DA9062AA_GP_FALL2_STEP_SHIFT   4
+#define DA9062AA_GP_FALL2_STEP_MASK    (0x0f << 4)
+
+/* DA9062AA_ID_26_25 = 0x08F */
+#define DA9062AA_GP_RISE3_STEP_SHIFT   0
+#define DA9062AA_GP_RISE3_STEP_MASK    0x0f
+#define DA9062AA_GP_FALL3_STEP_SHIFT   4
+#define DA9062AA_GP_FALL3_STEP_MASK    (0x0f << 4)
+
+/* DA9062AA_ID_28_27 = 0x090 */
+#define DA9062AA_GP_RISE4_STEP_SHIFT   0
+#define DA9062AA_GP_RISE4_STEP_MASK    0x0f
+#define DA9062AA_GP_FALL4_STEP_SHIFT   4
+#define DA9062AA_GP_FALL4_STEP_MASK    (0x0f << 4)
+
+/* DA9062AA_ID_30_29 = 0x091 */
+#define DA9062AA_GP_RISE5_STEP_SHIFT   0
+#define DA9062AA_GP_RISE5_STEP_MASK    0x0f
+#define DA9062AA_GP_FALL5_STEP_SHIFT   4
+#define DA9062AA_GP_FALL5_STEP_MASK    (0x0f << 4)
+
+/* DA9062AA_ID_32_31 = 0x092 */
+#define DA9062AA_WAIT_STEP_SHIFT       0
+#define DA9062AA_WAIT_STEP_MASK                0x0f
+#define DA9062AA_EN32K_STEP_SHIFT      4
+#define DA9062AA_EN32K_STEP_MASK       (0x0f << 4)
+
+/* DA9062AA_SEQ_A = 0x095 */
+#define DA9062AA_SYSTEM_END_SHIFT      0
+#define DA9062AA_SYSTEM_END_MASK       0x0f
+#define DA9062AA_POWER_END_SHIFT       4
+#define DA9062AA_POWER_END_MASK                (0x0f << 4)
+
+/* DA9062AA_SEQ_B = 0x096 */
+#define DA9062AA_MAX_COUNT_SHIFT       0
+#define DA9062AA_MAX_COUNT_MASK                0x0f
+#define DA9062AA_PART_DOWN_SHIFT       4
+#define DA9062AA_PART_DOWN_MASK                (0x0f << 4)
+
+/* DA9062AA_WAIT = 0x097 */
+#define DA9062AA_WAIT_TIME_SHIFT       0
+#define DA9062AA_WAIT_TIME_MASK                0x0f
+#define DA9062AA_WAIT_MODE_SHIFT       4
+#define DA9062AA_WAIT_MODE_MASK                BIT(4)
+#define DA9062AA_TIME_OUT_SHIFT                5
+#define DA9062AA_TIME_OUT_MASK         BIT(5)
+#define DA9062AA_WAIT_DIR_SHIFT                6
+#define DA9062AA_WAIT_DIR_MASK         (0x03 << 6)
+
+/* DA9062AA_EN_32K = 0x098 */
+#define DA9062AA_STABILISATION_TIME_SHIFT      0
+#define DA9062AA_STABILISATION_TIME_MASK       0x07
+#define DA9062AA_CRYSTAL_SHIFT                 3
+#define DA9062AA_CRYSTAL_MASK                  BIT(3)
+#define DA9062AA_DELAY_MODE_SHIFT              4
+#define DA9062AA_DELAY_MODE_MASK               BIT(4)
+#define DA9062AA_OUT_CLOCK_SHIFT               5
+#define DA9062AA_OUT_CLOCK_MASK                        BIT(5)
+#define DA9062AA_RTC_CLOCK_SHIFT               6
+#define DA9062AA_RTC_CLOCK_MASK                        BIT(6)
+#define DA9062AA_EN_32KOUT_SHIFT               7
+#define DA9062AA_EN_32KOUT_MASK                        BIT(7)
+
+/* DA9062AA_RESET = 0x099 */
+#define DA9062AA_RESET_TIMER_SHIFT     0
+#define DA9062AA_RESET_TIMER_MASK      0x3f
+#define DA9062AA_RESET_EVENT_SHIFT     6
+#define DA9062AA_RESET_EVENT_MASK      (0x03 << 6)
+
+/* DA9062AA_BUCK_ILIM_A = 0x09A */
+#define DA9062AA_BUCK3_ILIM_SHIFT      0
+#define DA9062AA_BUCK3_ILIM_MASK       0x0f
+
+/* DA9062AA_BUCK_ILIM_B = 0x09B */
+#define DA9062AA_BUCK4_ILIM_SHIFT      0
+#define DA9062AA_BUCK4_ILIM_MASK       0x0f
+
+/* DA9062AA_BUCK_ILIM_C = 0x09C */
+#define DA9062AA_BUCK1_ILIM_SHIFT      0
+#define DA9062AA_BUCK1_ILIM_MASK       0x0f
+#define DA9062AA_BUCK2_ILIM_SHIFT      4
+#define DA9062AA_BUCK2_ILIM_MASK       (0x0f << 4)
+
+/* DA9062AA_BUCK2_CFG = 0x09D */
+#define DA9062AA_BUCK2_PD_DIS_SHIFT    5
+#define DA9062AA_BUCK2_PD_DIS_MASK     BIT(5)
+#define DA9062AA_BUCK2_MODE_SHIFT      6
+#define DA9062AA_BUCK2_MODE_MASK       (0x03 << 6)
+
+/* DA9062AA_BUCK1_CFG = 0x09E */
+#define DA9062AA_BUCK1_PD_DIS_SHIFT    5
+#define DA9062AA_BUCK1_PD_DIS_MASK     BIT(5)
+#define DA9062AA_BUCK1_MODE_SHIFT      6
+#define DA9062AA_BUCK1_MODE_MASK       (0x03 << 6)
+
+/* DA9062AA_BUCK4_CFG = 0x09F */
+#define DA9062AA_BUCK4_VTTR_EN_SHIFT   3
+#define DA9062AA_BUCK4_VTTR_EN_MASK    BIT(3)
+#define DA9062AA_BUCK4_VTT_EN_SHIFT    4
+#define DA9062AA_BUCK4_VTT_EN_MASK     BIT(4)
+#define DA9062AA_BUCK4_PD_DIS_SHIFT    5
+#define DA9062AA_BUCK4_PD_DIS_MASK     BIT(5)
+#define DA9062AA_BUCK4_MODE_SHIFT      6
+#define DA9062AA_BUCK4_MODE_MASK       (0x03 << 6)
+
+/* DA9062AA_BUCK3_CFG = 0x0A0 */
+#define DA9062AA_BUCK3_PD_DIS_SHIFT    5
+#define DA9062AA_BUCK3_PD_DIS_MASK     BIT(5)
+#define DA9062AA_BUCK3_MODE_SHIFT      6
+#define DA9062AA_BUCK3_MODE_MASK       (0x03 << 6)
+
+/* DA9062AA_VBUCK2_A = 0x0A3 */
+#define DA9062AA_VBUCK2_A_SHIFT                0
+#define DA9062AA_VBUCK2_A_MASK         0x7f
+#define DA9062AA_BUCK2_SL_A_SHIFT      7
+#define DA9062AA_BUCK2_SL_A_MASK       BIT(7)
+
+/* DA9062AA_VBUCK1_A = 0x0A4 */
+#define DA9062AA_VBUCK1_A_SHIFT                0
+#define DA9062AA_VBUCK1_A_MASK         0x7f
+#define DA9062AA_BUCK1_SL_A_SHIFT      7
+#define DA9062AA_BUCK1_SL_A_MASK       BIT(7)
+
+/* DA9062AA_VBUCK4_A = 0x0A5 */
+#define DA9062AA_VBUCK4_A_SHIFT                0
+#define DA9062AA_VBUCK4_A_MASK         0x7f
+#define DA9062AA_BUCK4_SL_A_SHIFT      7
+#define DA9062AA_BUCK4_SL_A_MASK       BIT(7)
+
+/* DA9062AA_VBUCK3_A = 0x0A7 */
+#define DA9062AA_VBUCK3_A_SHIFT                0
+#define DA9062AA_VBUCK3_A_MASK         0x7f
+#define DA9062AA_BUCK3_SL_A_SHIFT      7
+#define DA9062AA_BUCK3_SL_A_MASK       BIT(7)
+
+/* DA9062AA_VLDO1_A = 0x0A9 */
+#define DA9062AA_VLDO1_A_SHIFT         0
+#define DA9062AA_VLDO1_A_MASK          0x3f
+#define DA9062AA_LDO1_SL_A_SHIFT       7
+#define DA9062AA_LDO1_SL_A_MASK                BIT(7)
+
+/* DA9062AA_VLDO2_A = 0x0AA */
+#define DA9062AA_VLDO2_A_SHIFT         0
+#define DA9062AA_VLDO2_A_MASK          0x3f
+#define DA9062AA_LDO2_SL_A_SHIFT       7
+#define DA9062AA_LDO2_SL_A_MASK                BIT(7)
+
+/* DA9062AA_VLDO3_A = 0x0AB */
+#define DA9062AA_VLDO3_A_SHIFT         0
+#define DA9062AA_VLDO3_A_MASK          0x3f
+#define DA9062AA_LDO3_SL_A_SHIFT       7
+#define DA9062AA_LDO3_SL_A_MASK                BIT(7)
+
+/* DA9062AA_VLDO4_A = 0x0AC */
+#define DA9062AA_VLDO4_A_SHIFT         0
+#define DA9062AA_VLDO4_A_MASK          0x3f
+#define DA9062AA_LDO4_SL_A_SHIFT       7
+#define DA9062AA_LDO4_SL_A_MASK                BIT(7)
+
+/* DA9062AA_VBUCK2_B = 0x0B4 */
+#define DA9062AA_VBUCK2_B_SHIFT                0
+#define DA9062AA_VBUCK2_B_MASK         0x7f
+#define DA9062AA_BUCK2_SL_B_SHIFT      7
+#define DA9062AA_BUCK2_SL_B_MASK       BIT(7)
+
+/* DA9062AA_VBUCK1_B = 0x0B5 */
+#define DA9062AA_VBUCK1_B_SHIFT                0
+#define DA9062AA_VBUCK1_B_MASK         0x7f
+#define DA9062AA_BUCK1_SL_B_SHIFT      7
+#define DA9062AA_BUCK1_SL_B_MASK       BIT(7)
+
+/* DA9062AA_VBUCK4_B = 0x0B6 */
+#define DA9062AA_VBUCK4_B_SHIFT                0
+#define DA9062AA_VBUCK4_B_MASK         0x7f
+#define DA9062AA_BUCK4_SL_B_SHIFT      7
+#define DA9062AA_BUCK4_SL_B_MASK       BIT(7)
+
+/* DA9062AA_VBUCK3_B = 0x0B8 */
+#define DA9062AA_VBUCK3_B_SHIFT                0
+#define DA9062AA_VBUCK3_B_MASK         0x7f
+#define DA9062AA_BUCK3_SL_B_SHIFT      7
+#define DA9062AA_BUCK3_SL_B_MASK       BIT(7)
+
+/* DA9062AA_VLDO1_B = 0x0BA */
+#define DA9062AA_VLDO1_B_SHIFT         0
+#define DA9062AA_VLDO1_B_MASK          0x3f
+#define DA9062AA_LDO1_SL_B_SHIFT       7
+#define DA9062AA_LDO1_SL_B_MASK                BIT(7)
+
+/* DA9062AA_VLDO2_B = 0x0BB */
+#define DA9062AA_VLDO2_B_SHIFT         0
+#define DA9062AA_VLDO2_B_MASK          0x3f
+#define DA9062AA_LDO2_SL_B_SHIFT       7
+#define DA9062AA_LDO2_SL_B_MASK                BIT(7)
+
+/* DA9062AA_VLDO3_B = 0x0BC */
+#define DA9062AA_VLDO3_B_SHIFT         0
+#define DA9062AA_VLDO3_B_MASK          0x3f
+#define DA9062AA_LDO3_SL_B_SHIFT       7
+#define DA9062AA_LDO3_SL_B_MASK                BIT(7)
+
+/* DA9062AA_VLDO4_B = 0x0BD */
+#define DA9062AA_VLDO4_B_SHIFT         0
+#define DA9062AA_VLDO4_B_MASK          0x3f
+#define DA9062AA_LDO4_SL_B_SHIFT       7
+#define DA9062AA_LDO4_SL_B_MASK                BIT(7)
+
+/* DA9062AA_BBAT_CONT = 0x0C5 */
+#define DA9062AA_BCHG_VSET_SHIFT       0
+#define DA9062AA_BCHG_VSET_MASK                0x0f
+#define DA9062AA_BCHG_ISET_SHIFT       4
+#define DA9062AA_BCHG_ISET_MASK                (0x0f << 4)
+
+/* DA9062AA_INTERFACE = 0x105 */
+#define DA9062AA_IF_BASE_ADDR_SHIFT    4
+#define DA9062AA_IF_BASE_ADDR_MASK     (0x0f << 4)
+
+/* DA9062AA_CONFIG_A = 0x106 */
+#define DA9062AA_PM_I_V_SHIFT          0
+#define DA9062AA_PM_I_V_MASK           0x01
+#define DA9062AA_PM_O_TYPE_SHIFT       2
+#define DA9062AA_PM_O_TYPE_MASK                BIT(2)
+#define DA9062AA_IRQ_TYPE_SHIFT                3
+#define DA9062AA_IRQ_TYPE_MASK         BIT(3)
+#define DA9062AA_PM_IF_V_SHIFT         4
+#define DA9062AA_PM_IF_V_MASK          BIT(4)
+#define DA9062AA_PM_IF_FMP_SHIFT       5
+#define DA9062AA_PM_IF_FMP_MASK                BIT(5)
+#define DA9062AA_PM_IF_HSM_SHIFT       6
+#define DA9062AA_PM_IF_HSM_MASK                BIT(6)
+
+/* DA9062AA_CONFIG_B = 0x107 */
+#define DA9062AA_VDD_FAULT_ADJ_SHIFT   0
+#define DA9062AA_VDD_FAULT_ADJ_MASK    0x0f
+#define DA9062AA_VDD_HYST_ADJ_SHIFT    4
+#define DA9062AA_VDD_HYST_ADJ_MASK     (0x07 << 4)
+
+/* DA9062AA_CONFIG_C = 0x108 */
+#define DA9062AA_BUCK_ACTV_DISCHRG_SHIFT       2
+#define DA9062AA_BUCK_ACTV_DISCHRG_MASK                BIT(2)
+#define DA9062AA_BUCK1_CLK_INV_SHIFT           3
+#define DA9062AA_BUCK1_CLK_INV_MASK            BIT(3)
+#define DA9062AA_BUCK4_CLK_INV_SHIFT           4
+#define DA9062AA_BUCK4_CLK_INV_MASK            BIT(4)
+#define DA9062AA_BUCK3_CLK_INV_SHIFT           6
+#define DA9062AA_BUCK3_CLK_INV_MASK            BIT(6)
+
+/* DA9062AA_CONFIG_D = 0x109 */
+#define DA9062AA_GPI_V_SHIFT           0
+#define DA9062AA_GPI_V_MASK            0x01
+#define DA9062AA_NIRQ_MODE_SHIFT       1
+#define DA9062AA_NIRQ_MODE_MASK                BIT(1)
+#define DA9062AA_SYSTEM_EN_RD_SHIFT    2
+#define DA9062AA_SYSTEM_EN_RD_MASK     BIT(2)
+#define DA9062AA_FORCE_RESET_SHIFT     5
+#define DA9062AA_FORCE_RESET_MASK      BIT(5)
+
+/* DA9062AA_CONFIG_E = 0x10A */
+#define DA9062AA_BUCK1_AUTO_SHIFT      0
+#define DA9062AA_BUCK1_AUTO_MASK       0x01
+#define DA9062AA_BUCK2_AUTO_SHIFT      1
+#define DA9062AA_BUCK2_AUTO_MASK       BIT(1)
+#define DA9062AA_BUCK4_AUTO_SHIFT      2
+#define DA9062AA_BUCK4_AUTO_MASK       BIT(2)
+#define DA9062AA_BUCK3_AUTO_SHIFT      4
+#define DA9062AA_BUCK3_AUTO_MASK       BIT(4)
+
+/* DA9062AA_CONFIG_G = 0x10C */
+#define DA9062AA_LDO1_AUTO_SHIFT       0
+#define DA9062AA_LDO1_AUTO_MASK                0x01
+#define DA9062AA_LDO2_AUTO_SHIFT       1
+#define DA9062AA_LDO2_AUTO_MASK                BIT(1)
+#define DA9062AA_LDO3_AUTO_SHIFT       2
+#define DA9062AA_LDO3_AUTO_MASK                BIT(2)
+#define DA9062AA_LDO4_AUTO_SHIFT       3
+#define DA9062AA_LDO4_AUTO_MASK                BIT(3)
+
+/* DA9062AA_CONFIG_H = 0x10D */
+#define DA9062AA_BUCK1_2_MERGE_SHIFT   3
+#define DA9062AA_BUCK1_2_MERGE_MASK    BIT(3)
+#define DA9062AA_BUCK2_OD_SHIFT                5
+#define DA9062AA_BUCK2_OD_MASK         BIT(5)
+#define DA9062AA_BUCK1_OD_SHIFT                6
+#define DA9062AA_BUCK1_OD_MASK         BIT(6)
+
+/* DA9062AA_CONFIG_I = 0x10E */
+#define DA9062AA_NONKEY_PIN_SHIFT      0
+#define DA9062AA_NONKEY_PIN_MASK       0x03
+#define DA9062AA_nONKEY_SD_SHIFT       2
+#define DA9062AA_nONKEY_SD_MASK                BIT(2)
+#define DA9062AA_WATCHDOG_SD_SHIFT     3
+#define DA9062AA_WATCHDOG_SD_MASK      BIT(3)
+#define DA9062AA_KEY_SD_MODE_SHIFT     4
+#define DA9062AA_KEY_SD_MODE_MASK      BIT(4)
+#define DA9062AA_HOST_SD_MODE_SHIFT    5
+#define DA9062AA_HOST_SD_MODE_MASK     BIT(5)
+#define DA9062AA_INT_SD_MODE_SHIFT     6
+#define DA9062AA_INT_SD_MODE_MASK      BIT(6)
+#define DA9062AA_LDO_SD_SHIFT          7
+#define DA9062AA_LDO_SD_MASK           BIT(7)
+
+/* DA9062AA_CONFIG_J = 0x10F */
+#define DA9062AA_KEY_DELAY_SHIFT       0
+#define DA9062AA_KEY_DELAY_MASK                0x03
+#define DA9062AA_SHUT_DELAY_SHIFT      2
+#define DA9062AA_SHUT_DELAY_MASK       (0x03 << 2)
+#define DA9062AA_RESET_DURATION_SHIFT  4
+#define DA9062AA_RESET_DURATION_MASK   (0x03 << 4)
+#define DA9062AA_TWOWIRE_TO_SHIFT      6
+#define DA9062AA_TWOWIRE_TO_MASK       BIT(6)
+#define DA9062AA_IF_RESET_SHIFT                7
+#define DA9062AA_IF_RESET_MASK         BIT(7)
+
+/* DA9062AA_CONFIG_K = 0x110 */
+#define DA9062AA_GPIO0_PUPD_SHIFT      0
+#define DA9062AA_GPIO0_PUPD_MASK       0x01
+#define DA9062AA_GPIO1_PUPD_SHIFT      1
+#define DA9062AA_GPIO1_PUPD_MASK       BIT(1)
+#define DA9062AA_GPIO2_PUPD_SHIFT      2
+#define DA9062AA_GPIO2_PUPD_MASK       BIT(2)
+#define DA9062AA_GPIO3_PUPD_SHIFT      3
+#define DA9062AA_GPIO3_PUPD_MASK       BIT(3)
+#define DA9062AA_GPIO4_PUPD_SHIFT      4
+#define DA9062AA_GPIO4_PUPD_MASK       BIT(4)
+
+/* DA9062AA_CONFIG_M = 0x112 */
+#define DA9062AA_NSHUTDOWN_PU_SHIFT    1
+#define DA9062AA_NSHUTDOWN_PU_MASK     BIT(1)
+#define DA9062AA_WDG_MODE_SHIFT                3
+#define DA9062AA_WDG_MODE_MASK         BIT(3)
+#define DA9062AA_OSC_FRQ_SHIFT         4
+#define DA9062AA_OSC_FRQ_MASK          (0x0f << 4)
+
+/* DA9062AA_TRIM_CLDR = 0x120 */
+#define DA9062AA_TRIM_CLDR_SHIFT       0
+#define DA9062AA_TRIM_CLDR_MASK                0xff
+
+/* DA9062AA_GP_ID_0 = 0x121 */
+#define DA9062AA_GP_0_SHIFT            0
+#define DA9062AA_GP_0_MASK             0xff
+
+/* DA9062AA_GP_ID_1 = 0x122 */
+#define DA9062AA_GP_1_SHIFT            0
+#define DA9062AA_GP_1_MASK             0xff
+
+/* DA9062AA_GP_ID_2 = 0x123 */
+#define DA9062AA_GP_2_SHIFT            0
+#define DA9062AA_GP_2_MASK             0xff
+
+/* DA9062AA_GP_ID_3 = 0x124 */
+#define DA9062AA_GP_3_SHIFT            0
+#define DA9062AA_GP_3_MASK             0xff
+
+/* DA9062AA_GP_ID_4 = 0x125 */
+#define DA9062AA_GP_4_SHIFT            0
+#define DA9062AA_GP_4_MASK             0xff
+
+/* DA9062AA_GP_ID_5 = 0x126 */
+#define DA9062AA_GP_5_SHIFT            0
+#define DA9062AA_GP_5_MASK             0xff
+
+/* DA9062AA_GP_ID_6 = 0x127 */
+#define DA9062AA_GP_6_SHIFT            0
+#define DA9062AA_GP_6_MASK             0xff
+
+/* DA9062AA_GP_ID_7 = 0x128 */
+#define DA9062AA_GP_7_SHIFT            0
+#define DA9062AA_GP_7_MASK             0xff
+
+/* DA9062AA_GP_ID_8 = 0x129 */
+#define DA9062AA_GP_8_SHIFT            0
+#define DA9062AA_GP_8_MASK             0xff
+
+/* DA9062AA_GP_ID_9 = 0x12A */
+#define DA9062AA_GP_9_SHIFT            0
+#define DA9062AA_GP_9_MASK             0xff
+
+/* DA9062AA_GP_ID_10 = 0x12B */
+#define DA9062AA_GP_10_SHIFT           0
+#define DA9062AA_GP_10_MASK            0xff
+
+/* DA9062AA_GP_ID_11 = 0x12C */
+#define DA9062AA_GP_11_SHIFT           0
+#define DA9062AA_GP_11_MASK            0xff
+
+/* DA9062AA_GP_ID_12 = 0x12D */
+#define DA9062AA_GP_12_SHIFT           0
+#define DA9062AA_GP_12_MASK            0xff
+
+/* DA9062AA_GP_ID_13 = 0x12E */
+#define DA9062AA_GP_13_SHIFT           0
+#define DA9062AA_GP_13_MASK            0xff
+
+/* DA9062AA_GP_ID_14 = 0x12F */
+#define DA9062AA_GP_14_SHIFT           0
+#define DA9062AA_GP_14_MASK            0xff
+
+/* DA9062AA_GP_ID_15 = 0x130 */
+#define DA9062AA_GP_15_SHIFT           0
+#define DA9062AA_GP_15_MASK            0xff
+
+/* DA9062AA_GP_ID_16 = 0x131 */
+#define DA9062AA_GP_16_SHIFT           0
+#define DA9062AA_GP_16_MASK            0xff
+
+/* DA9062AA_GP_ID_17 = 0x132 */
+#define DA9062AA_GP_17_SHIFT           0
+#define DA9062AA_GP_17_MASK            0xff
+
+/* DA9062AA_GP_ID_18 = 0x133 */
+#define DA9062AA_GP_18_SHIFT           0
+#define DA9062AA_GP_18_MASK            0xff
+
+/* DA9062AA_GP_ID_19 = 0x134 */
+#define DA9062AA_GP_19_SHIFT           0
+#define DA9062AA_GP_19_MASK            0xff
+
+/* DA9062AA_DEVICE_ID = 0x181 */
+#define DA9062AA_DEV_ID_SHIFT          0
+#define DA9062AA_DEV_ID_MASK           0xff
+
+/* DA9062AA_VARIANT_ID = 0x182 */
+#define DA9062AA_VRC_SHIFT             0
+#define DA9062AA_VRC_MASK              0x0f
+#define DA9062AA_MRC_SHIFT             4
+#define DA9062AA_MRC_MASK              (0x0f << 4)
+
+/* DA9062AA_CUSTOMER_ID = 0x183 */
+#define DA9062AA_CUST_ID_SHIFT         0
+#define DA9062AA_CUST_ID_MASK          0xff
+
+/* DA9062AA_CONFIG_ID = 0x184 */
+#define DA9062AA_CONFIG_REV_SHIFT      0
+#define DA9062AA_CONFIG_REV_MASK       0xff
+
+#endif /* __DA9062_H__ */