#include <asm/arch/sys_proto.h>
 #include <asm/io.h>
 #include <nand.h>
-#include <pmic.h>
+#include <power/pmic.h>
 #include <fsl_pmic.h>
 #include <asm/gpio.h>
 #include "qong_fpga.h"
 #include <watchdog.h>
+#include <errno.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
 {
        u32 val;
        struct pmic *p;
+       int ret;
 
-       pmic_init();
-       p = get_pmic();
+       ret = pmic_init(I2C_PMIC);
+       if (ret)
+               return ret;
 
+       p = pmic_get("FSL_PMIC");
+       if (!p)
+               return -ENODEV;
        /* Enable RTC battery */
        pmic_reg_read(p, REG_POWER_CTL0, &val);
        pmic_reg_write(p, REG_POWER_CTL0, val | COINCHEN);
 
 #include <asm/arch/imx-regs.h>
 #include <asm/arch/sys_proto.h>
 #include <watchdog.h>
-#include <pmic.h>
+#include <power/pmic.h>
 #include <fsl_pmic.h>
+#include <errno.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
 {
        u32 val;
        struct pmic *p;
+       int ret;
 
-       pmic_init();
-       p = get_pmic();
+       ret = pmic_init(I2C_PMIC);
+       if (ret)
+               return ret;
 
+       p = pmic_get("FSL_PMIC");
+       if (!p)
+               return -ENODEV;
        /* Enable RTC battery */
        pmic_reg_read(p, REG_POWER_CTL0, &val);
        pmic_reg_write(p, REG_POWER_CTL0, val | COINCHEN);
 
 #include <asm/arch/mx35_pins.h>
 #include <asm/arch/iomux.h>
 #include <i2c.h>
-#include <pmic.h>
+#include <power/pmic.h>
 #include <fsl_pmic.h>
 #include <mmc.h>
 #include <fsl_esdhc.h>
 static inline int pmic_detect(void)
 {
        unsigned int id;
-       struct pmic *p = get_pmic();
+       struct pmic *p = pmic_get("FSL_PMIC");
+       if (!p)
+               return -ENODEV;
 
        pmic_reg_read(p, REG_IDENTIFICATION, &id);
 
        u8 val;
        u32 pmic_val;
        struct pmic *p;
+       int ret;
+
+       ret = pmic_init(I2C_PMIC);
+       if (ret)
+               return ret;
 
-       pmic_init();
        if (pmic_detect()) {
-               p = get_pmic();
+               p = pmic_get("FSL_PMIC");
                mxc_request_iomux(MX35_PIN_WATCHDOG_RST, MUX_CONFIG_SION |
                                        MUX_CONFIG_ALT1);
 
 
 #include <i2c.h>
 #include <mmc.h>
 #include <fsl_esdhc.h>
-#include <pmic.h>
+#include <power/pmic.h>
 #include <fsl_pmic.h>
 #include <mc13892.h>
 #include <usb/ehci-fsl.h>
        unsigned int val;
        struct mxc_ccm_reg *mxc_ccm = (struct mxc_ccm_reg *)MXC_CCM_BASE;
        struct pmic *p;
+       int ret;
+
+       ret = pmic_init(I2C_PMIC);
+       if (ret)
+               return;
 
-       pmic_init();
-       p = get_pmic();
+       p = pmic_get("FSL_PMIC");
+       if (!p)
+               return;
 
        /* Write needed to Power Gate 2 register */
        pmic_reg_read(p, REG_POWER_MISC, &val);
 
 #include <i2c.h>
 #include <mmc.h>
 #include <fsl_esdhc.h>
-#include <pmic.h>
+#include <power/pmic.h>
 #include <fsl_pmic.h>
 #include <asm/gpio.h>
 #include <mc13892.h>
 {
        unsigned int val;
        struct pmic *p;
+       int ret;
+
+       ret = pmic_init(I2C_PMIC);
+       if (ret)
+               return;
 
-       pmic_init();
-       p = get_pmic();
+       p = pmic_get("FSL_PMIC");
+       if (!p)
+               return;
 
        /* Set VDDA to 1.25V */
        pmic_reg_read(p, REG_SW_2, &val);
 
 #include <mmc.h>
 #include <fsl_esdhc.h>
 #include <asm/gpio.h>
-#include <pmic.h>
+#include <power/pmic.h>
 #include <dialog_pmic.h>
 #include <fsl_pmic.h>
 #include <linux/fb.h>
        unsigned int val;
        int ret = -1;
        struct pmic *p;
+       int retval;
 
        if (!i2c_probe(CONFIG_SYS_DIALOG_PMIC_I2C_ADDR)) {
-               pmic_dialog_init();
-               p = get_pmic();
+               retval = pmic_dialog_init(I2C_PMIC);
+               if (retval)
+                       return retval;
+
+               p = pmic_get("DIALOG_PMIC");
+               if (!p)
+                       return -ENODEV;
 
                /* Set VDDA to 1.25V */
                val = DA9052_BUCKCORE_BCOREEN | DA_BUCKCORE_VBCORE_1_250V;
        }
 
        if (!i2c_probe(CONFIG_SYS_FSL_PMIC_I2C_ADDR)) {
-               pmic_init();
-               p = get_pmic();
+               retval = pmic_init(I2C_PMIC);
+               if (retval)
+                       return retval;
+
+               p = pmic_get("DIALOG_PMIC");
+               if (!p)
+                       return -ENODEV;
 
                /* Set VDDGP to 1.25V for 1GHz on SW1 */
                pmic_reg_read(p, REG_SW_0, &val);
 
 #include <i2c.h>
 #include <mmc.h>
 #include <fsl_esdhc.h>
-#include <pmic.h>
+#include <power/pmic.h>
 #include <fsl_pmic.h>
 #include <mc13892.h>
 
        unsigned int val;
        struct mxc_ccm_reg *mxc_ccm = (struct mxc_ccm_reg *)MXC_CCM_BASE;
        struct pmic *p;
+       int ret;
+
+       ret = pmic_init(I2C_PMIC);
+       if (ret)
+               return;
 
-       pmic_init();
-       p = get_pmic();
+       p = pmic_get("FSL_PMIC");
+       if (!p)
+               return;
 
        /* Write needed to Power Gate 2 register */
        pmic_reg_read(p, REG_POWER_MISC, &val);
 
 #include <common.h>
 #include <netdev.h>
 #include <command.h>
-#include <pmic.h>
+#include <power/pmic.h>
 #include <fsl_pmic.h>
 #include <mc13783.h>
 #include <asm/arch/clock.h>
 #include <asm/arch/sys_proto.h>
 #include <asm/io.h>
+#include <errno.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
 {
        u32 val;
        struct pmic *p;
+       int ret;
 
        /*
        * this is the first driver to use the pmic, so call
        * pmic_init() here. board_late_init() is too late for
        * the MMC driver.
        */
-       pmic_init();
-       p = get_pmic();
+
+       ret = pmic_init(I2C_PMIC);
+       if (ret)
+               return ret;
+
+       p = pmic_get("FSL_PMIC");
+       if (!p)
+               return -ENODEV;
 
        /* configure pins for SDHC1 only */
        mx31_gpio_mux(IOMUX_MODE(MUX_CTL_SD1_CLK, MUX_CTL_FUNC));
 
 #include <common.h>
 #include <asm/arch/gpio.h>
 #include <asm/arch/mmc.h>
-#include <pmic.h>
+#include <power/pmic.h>
 #include <usb/s3c_udc.h>
 #include <asm/arch/cpu.h>
-#include <max8998_pmic.h>
+#include <power/max8998_pmic.h>
 DECLARE_GLOBAL_DATA_PTR;
 
 static struct s5pc110_gpio *s5pc110_gpio;
        gd->bd->bi_boot_params = PHYS_SDRAM_1 + 0x100;
 
 #if defined(CONFIG_PMIC)
-       pmic_init();
+       pmic_init(I2C_5);
 #endif
+
        return 0;
 }
 
 {
        int ret;
        static int status;
-       struct pmic *p = get_pmic();
+       struct pmic *p = pmic_get("MAX8998_PMIC");
+       if (!p)
+               return -ENODEV;
 
        if (pmic_probe(p))
                return -1;
 
 #include <asm/arch/mipi_dsim.h>
 #include <asm/arch/watchdog.h>
 #include <asm/arch/power.h>
-#include <pmic.h>
+#include <power/pmic.h>
 #include <usb/s3c_udc.h>
-#include <max8997_pmic.h>
+#include <power/max8997_pmic.h>
 #include <libtizen.h>
 
 #include "setup.h"
        printf("HW Revision:\t0x%x\n", board_rev);
 
 #if defined(CONFIG_PMIC)
-       pmic_init();
+       pmic_init(I2C_5);
 #endif
 
        return 0;
 {
        int ret = 0;
        u32 val = 0;
-       struct pmic *p = get_pmic();
+       struct pmic *p = pmic_get("MAX8997_PMIC");
+       if (!p)
+               return -ENODEV;
 
        if (pmic_probe(p))
                return -1;
 static int lcd_power(void)
 {
        int ret = 0;
-       struct pmic *p = get_pmic();
+       struct pmic *p = pmic_get("MAX8997_PMIC");
+       if (!p)
+               return -ENODEV;
 
        if (pmic_probe(p))
                return 0;
 static int mipi_power(void)
 {
        int ret = 0;
-       struct pmic *p = get_pmic();
+       struct pmic *p = pmic_get("MAX8997_PMIC");
+       if (!p)
+               return -ENODEV;
 
        if (pmic_probe(p))
                return 0;
 
 #include <asm/arch/adc.h>
 #include <asm/arch/gpio.h>
 #include <asm/arch/mmc.h>
-#include <pmic.h>
+#include <power/pmic.h>
 #include <usb/s3c_udc.h>
 #include <asm/arch/cpu.h>
-#include <max8998_pmic.h>
+#include <power/max8998_pmic.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
        gd->bd->bi_boot_params = PHYS_SDRAM_1 + 0x100;
 
 #if defined(CONFIG_PMIC)
-       pmic_init();
+       pmic_init(I2C_5);
 #endif
 
        check_hw_revision();
 static int adc_power_control(int on)
 {
        int ret;
-       struct pmic *p = get_pmic();
+       struct pmic *p = pmic_get("MAX8998_PMIC");
+       if (!p)
+               return -ENODEV;
 
        if (pmic_probe(p))
                return -1;
 static int s5pc210_phy_control(int on)
 {
        int ret = 0;
-       struct pmic *p = get_pmic();
+       struct pmic *p = pmic_get("MAX8998_PMIC");
+       if (!p)
+               return -ENODEV;
 
        if (pmic_probe(p))
                return -1;
 
 #include <asm/arch/sys_proto.h>
 #include <i2c.h>
 #include <mmc.h>
-#include <pmic.h>
+#include <power/pmic.h>
 #include <fsl_esdhc.h>
 #include <fsl_pmic.h>
 #include <mc13892.h>
 {
        unsigned int val;
        struct pmic *p;
+       int ret;
+
+       ret = pmic_init(I2C_PMIC);
+       if (ret)
+               return;
 
-       pmic_init();
-       p = get_pmic();
+       p = pmic_get("FSL_PMIC");
+       if (!p)
+               return;
 
        /* Write needed to Power Gate 2 register */
        pmic_reg_read(p, REG_POWER_MISC, &val);
 
  */
 
 #include <common.h>
+#include <malloc.h>
 #include <linux/types.h>
-#include <pmic.h>
+#include <linux/list.h>
+#include <power/pmic.h>
 
-static struct pmic pmic;
+static LIST_HEAD(pmic_list);
 
-int check_reg(u32 reg)
+int check_reg(struct pmic *p, u32 reg)
 {
-       if (reg >= pmic.number_of_regs) {
+       if (reg >= p->number_of_regs) {
                printf("<reg num> = %d is invalid. Should be less than %d\n",
-                      reg, pmic.number_of_regs);
+                      reg, p->number_of_regs);
                return -1;
        }
+
        return 0;
 }
 
        printf("PMIC: %s\n", p->name);
 }
 
-static void pmic_dump(struct pmic *p)
+static int pmic_dump(struct pmic *p)
 {
        int i, ret;
        u32 val;
 
+       if (!p) {
+               puts("Wrong PMIC name!\n");
+               return -1;
+       }
+
        pmic_show_info(p);
        for (i = 0; i < p->number_of_regs; i++) {
                ret = pmic_reg_read(p, i, &val);
                printf("%08x ", val);
        }
        puts("\n");
+       return 0;
 }
 
-struct pmic *get_pmic(void)
+struct pmic *pmic_alloc(void)
 {
-       return &pmic;
+       struct pmic *p;
+
+       p = calloc(sizeof(*p), 1);
+       if (!p) {
+               printf("%s: No available memory for allocation!\n", __func__);
+               return NULL;
+       }
+
+       list_add_tail(&p->list, &pmic_list);
+
+       debug("%s: new pmic struct: 0x%p\n", __func__, p);
+
+       return p;
+}
+
+struct pmic *pmic_get(const char *s)
+{
+       struct pmic *p;
+
+       list_for_each_entry(p, &pmic_list, list) {
+               if (strcmp(p->name, s) == 0) {
+                       debug("%s: pmic %s -> 0x%p\n", __func__, p->name, p);
+                       return p;
+               }
+       }
+
+       return NULL;
+}
+
+static void pmic_list_names(void)
+{
+       struct pmic *p;
+
+       puts("PMIC devices:\n");
+       list_for_each_entry(p, &pmic_list, list) {
+               printf("name: %s\n", p->name);
+       }
 }
 
 int do_pmic(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 {
        u32 ret, reg, val;
+       struct pmic *p;
        char *cmd;
 
-       struct pmic *p = &pmic;
-
        /* at least two arguments please */
        if (argc < 2)
-               return cmd_usage(cmdtp);
+               return CMD_RET_USAGE;
 
        cmd = argv[1];
+
+       if (strcmp(cmd, "list") == 0) {
+               pmic_list_names();
+               return CMD_RET_SUCCESS;
+       }
+
        if (strcmp(cmd, "dump") == 0) {
-               pmic_dump(p);
-               return 0;
+               p = pmic_get(argv[2]);
+               if (!p)
+                       return CMD_RET_FAILURE;
+               if (pmic_dump(p))
+                       return CMD_RET_FAILURE;
+               return CMD_RET_SUCCESS;
        }
 
        if (strcmp(cmd, "read") == 0) {
-               if (argc < 3)
-                       return cmd_usage(cmdtp);
+               if (argc < 4)
+                       return CMD_RET_USAGE;
 
-               reg = simple_strtoul(argv[2], NULL, 16);
+               reg = simple_strtoul(argv[3], NULL, 16);
+               p = pmic_get(argv[2]);
+               if (!p)
+                       return CMD_RET_FAILURE;
 
                ret = pmic_reg_read(p, reg, &val);
 
 
                printf("\n0x%02x: 0x%08x\n", reg, val);
 
-               return 0;
+               return CMD_RET_SUCCESS;
        }
 
        if (strcmp(cmd, "write") == 0) {
-               if (argc < 4)
-                       return cmd_usage(cmdtp);
-
-               reg = simple_strtoul(argv[2], NULL, 16);
-               val = simple_strtoul(argv[3], NULL, 16);
-
+               if (argc < 5)
+                       return CMD_RET_USAGE;
+
+               reg = simple_strtoul(argv[3], NULL, 16);
+               val = simple_strtoul(argv[4], NULL, 16);
+               p = pmic_get(argv[2]);
+               if (!p)
+                       return CMD_RET_FAILURE;
                pmic_reg_write(p, reg, val);
 
-               return 0;
+               return CMD_RET_SUCCESS;
        }
 
        /* No subcommand found */
-       return 1;
+       return CMD_RET_SUCCESS;
 }
 
 U_BOOT_CMD(
        pmic,   CONFIG_SYS_MAXARGS, 1, do_pmic,
        "PMIC",
-       "dump - dump PMIC registers\n"
-       "pmic read <reg> - read register\n"
-       "pmic write <reg> <value> - write register"
+       "list - list available PMICs\n"
+       "pmic dump name - dump named PMIC registers\n"
+       "pmic name read <reg> - read register\n"
+       "pmic name write <reg> <value> - write register"
 );
 
  */
 
 #include <common.h>
-#include <pmic.h>
+#include <power/pmic.h>
 #include <dialog_pmic.h>
+#include <errno.h>
 
-int pmic_dialog_init(void)
+int pmic_dialog_init(unsigned char bus)
 {
-       struct pmic *p = get_pmic();
        static const char name[] = "DIALOG_PMIC";
+       struct pmic *p = pmic_alloc();
+
+       if (!p) {
+               printf("%s: POWER allocation error!\n", __func__);
+               return -ENOMEM;
+       }
 
        p->name = name;
        p->number_of_regs = DIALOG_NUM_OF_REGS;
        p->interface = PMIC_I2C;
        p->hw.i2c.addr = CONFIG_SYS_DIALOG_PMIC_I2C_ADDR;
        p->hw.i2c.tx_num = 1;
-       p->bus = I2C_PMIC;
+       p->bus = bus;
 
        return 0;
 }
 
 
 #include <common.h>
 #include <spi.h>
-#include <pmic.h>
+#include <power/pmic.h>
 #include <fsl_pmic.h>
+#include <errno.h>
 
 #if defined(CONFIG_PMIC_SPI)
 static u32 pmic_spi_prepare_tx(u32 reg, u32 *val, u32 write)
 }
 #endif
 
-int pmic_init(void)
+int pmic_init(unsigned char bus)
 {
-       struct pmic *p = get_pmic();
        static const char name[] = "FSL_PMIC";
+       struct pmic *p = pmic_alloc();
+
+       if (!p) {
+               printf("%s: POWER allocation error!\n", __func__);
+               return -ENOMEM;
+       }
 
        p->name = name;
        p->number_of_regs = PMIC_NUM_OF_REGS;
        p->interface = PMIC_I2C;
        p->hw.i2c.addr = CONFIG_SYS_FSL_PMIC_I2C_ADDR;
        p->hw.i2c.tx_num = 3;
-       p->bus = I2C_PMIC;
+       p->bus = bus;
 #else
 #error "You must select CONFIG_PMIC_SPI or CONFIG_PMIC_I2C"
 #endif
 
 
 #include <common.h>
 #include <linux/types.h>
-#include <pmic.h>
+#include <power/pmic.h>
 #include <i2c.h>
 #include <compiler.h>
 
 {
        unsigned char buf[4] = { 0 };
 
-       if (check_reg(reg))
+       if (check_reg(p, reg))
                return -1;
 
        switch (pmic_i2c_tx_num) {
        unsigned char buf[4] = { 0 };
        u32 ret_val = 0;
 
-       if (check_reg(reg))
+       if (check_reg(p, reg))
                return -1;
 
        if (i2c_read(pmic_i2c_addr, reg, 1, buf, pmic_i2c_tx_num))
 
  */
 
 #include <common.h>
-#include <pmic.h>
-#include <max8997_pmic.h>
+#include <power/pmic.h>
+#include <power/max8997_pmic.h>
 #include <i2c.h>
+#include <errno.h>
 
-int pmic_init(void)
+int pmic_init(unsigned char bus)
 {
-       struct pmic *p = get_pmic();
        static const char name[] = "MAX8997_PMIC";
+       struct pmic *p = pmic_alloc();
+
+       if (!p) {
+               printf("%s: POWER allocation error!\n", __func__);
+               return -ENOMEM;
+       }
 
        puts("Board PMIC init\n");
 
        p->number_of_regs = PMIC_NUM_OF_REGS;
        p->hw.i2c.addr = MAX8997_I2C_ADDR;
        p->hw.i2c.tx_num = 1;
-       p->bus = I2C_0;
+       p->bus = bus;
 
        return 0;
 }
 
  */
 
 #include <common.h>
-#include <pmic.h>
-#include <max8998_pmic.h>
+#include <power/pmic.h>
+#include <power/max8998_pmic.h>
+#include <errno.h>
 
-int pmic_init(void)
+int pmic_init(unsigned char bus)
 {
-       struct pmic *p = get_pmic();
        static const char name[] = "MAX8998_PMIC";
+       struct pmic *p = pmic_alloc();
+
+       if (!p) {
+               printf("%s: POWER allocation error!\n", __func__);
+               return -ENOMEM;
+       }
 
        puts("Board PMIC init\n");
 
        p->number_of_regs = PMIC_NUM_OF_REGS;
        p->hw.i2c.addr = MAX8998_I2C_ADDR;
        p->hw.i2c.tx_num = 1;
-       p->bus = I2C_PMIC;
+       p->bus = bus;
 
        return 0;
 }
 
 
 #include <common.h>
 #include <linux/types.h>
-#include <pmic.h>
+#include <power/pmic.h>
 #include <spi.h>
 
 static struct spi_slave *slave;
                        return -1;
        }
 
-       if (check_reg(reg))
+       if (check_reg(p, reg))
                return -1;
 
        if (spi_claim_bus(slave))
 
 #include <common.h>
 #include <rtc.h>
 #include <spi.h>
-#include <pmic.h>
+#include <power/pmic.h>
 #include <fsl_pmic.h>
 
 int rtc_get(struct rtc_time *rtc)
 {
        u32 day1, day2, time;
        int tim, i = 0;
-       struct pmic *p = get_pmic();
+       struct pmic *p = pmic_get("FSL_PMIC");
        int ret;
 
+       if (!p)
+               return -1;
        do {
                ret = pmic_reg_read(p, REG_RTC_DAY, &day1);
                if (ret < 0)
 int rtc_set(struct rtc_time *rtc)
 {
        u32 time, day;
-       struct pmic *p = get_pmic();
+       struct pmic *p = pmic_get("FSL_PMIC");
+       if (!p)
+               return -1;
 
        time = mktime(rtc->tm_year, rtc->tm_mon, rtc->tm_mday,
                      rtc->tm_hour, rtc->tm_min, rtc->tm_sec);
 
+++ /dev/null
-/*
- *  Copyright (C) 2011 Samsung Electronics
- *  Lukasz Majewski <l.majewski@samsung.com>
- *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * 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.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
- */
-
-#ifndef __MAX8997_PMIC_H_
-#define __MAX8997_PMIC_H_
-
-/* MAX 8997 registers */
-enum {
-       MAX8997_REG_PMIC_ID0    = 0x00,
-       MAX8997_REG_PMIC_ID1    = 0x01,
-       MAX8997_REG_INTSRC      = 0x02,
-       MAX8997_REG_INT1        = 0x03,
-       MAX8997_REG_INT2        = 0x04,
-       MAX8997_REG_INT3        = 0x05,
-       MAX8997_REG_INT4        = 0x06,
-
-       MAX8997_REG_INT1MSK     = 0x08,
-       MAX8997_REG_INT2MSK     = 0x09,
-       MAX8997_REG_INT3MSK     = 0x0a,
-       MAX8997_REG_INT4MSK     = 0x0b,
-
-       MAX8997_REG_STATUS1     = 0x0d,
-       MAX8997_REG_STATUS2     = 0x0e,
-       MAX8997_REG_STATUS3     = 0x0f,
-       MAX8997_REG_STATUS4     = 0x10,
-
-       MAX8997_REG_MAINCON1    = 0x13,
-       MAX8997_REG_MAINCON2    = 0x14,
-       MAX8997_REG_BUCKRAMP    = 0x15,
-
-       MAX8997_REG_BUCK1CTRL   = 0x18,
-       MAX8997_REG_BUCK1DVS1   = 0x19,
-       MAX8997_REG_BUCK1DVS2   = 0x1a,
-       MAX8997_REG_BUCK1DVS3   = 0x1b,
-       MAX8997_REG_BUCK1DVS4   = 0x1c,
-       MAX8997_REG_BUCK1DVS5   = 0x1d,
-       MAX8997_REG_BUCK1DVS6   = 0x1e,
-       MAX8997_REG_BUCK1DVS7   = 0x1f,
-       MAX8997_REG_BUCK1DVS8   = 0x20,
-       MAX8997_REG_BUCK2CTRL   = 0x21,
-       MAX8997_REG_BUCK2DVS1   = 0x22,
-       MAX8997_REG_BUCK2DVS2   = 0x23,
-       MAX8997_REG_BUCK2DVS3   = 0x24,
-       MAX8997_REG_BUCK2DVS4   = 0x25,
-       MAX8997_REG_BUCK2DVS5   = 0x26,
-       MAX8997_REG_BUCK2DVS6   = 0x27,
-       MAX8997_REG_BUCK2DVS7   = 0x28,
-       MAX8997_REG_BUCK2DVS8   = 0x29,
-       MAX8997_REG_BUCK3CTRL   = 0x2a,
-       MAX8997_REG_BUCK3DVS    = 0x2b,
-       MAX8997_REG_BUCK4CTRL   = 0x2c,
-       MAX8997_REG_BUCK4DVS    = 0x2d,
-       MAX8997_REG_BUCK5CTRL   = 0x2e,
-       MAX8997_REG_BUCK5DVS1   = 0x2f,
-       MAX8997_REG_BUCK5DVS2   = 0x30,
-       MAX8997_REG_BUCK5DVS3   = 0x31,
-       MAX8997_REG_BUCK5DVS4   = 0x32,
-       MAX8997_REG_BUCK5DVS5   = 0x33,
-       MAX8997_REG_BUCK5DVS6   = 0x34,
-       MAX8997_REG_BUCK5DVS7   = 0x35,
-       MAX8997_REG_BUCK5DVS8   = 0x36,
-       MAX8997_REG_BUCK6CTRL   = 0x37,
-       MAX8997_REG_BUCK6BPSKIPCTRL     = 0x38,
-       MAX8997_REG_BUCK7CTRL   = 0x39,
-       MAX8997_REG_BUCK7DVS    = 0x3a,
-       MAX8997_REG_LDO1CTRL    = 0x3b,
-       MAX8997_REG_LDO2CTRL    = 0x3c,
-       MAX8997_REG_LDO3CTRL    = 0x3d,
-       MAX8997_REG_LDO4CTRL    = 0x3e,
-       MAX8997_REG_LDO5CTRL    = 0x3f,
-       MAX8997_REG_LDO6CTRL    = 0x40,
-       MAX8997_REG_LDO7CTRL    = 0x41,
-       MAX8997_REG_LDO8CTRL    = 0x42,
-       MAX8997_REG_LDO9CTRL    = 0x43,
-       MAX8997_REG_LDO10CTRL   = 0x44,
-       MAX8997_REG_LDO11CTRL   = 0x45,
-       MAX8997_REG_LDO12CTRL   = 0x46,
-       MAX8997_REG_LDO13CTRL   = 0x47,
-       MAX8997_REG_LDO14CTRL   = 0x48,
-       MAX8997_REG_LDO15CTRL   = 0x49,
-       MAX8997_REG_LDO16CTRL   = 0x4a,
-       MAX8997_REG_LDO17CTRL   = 0x4b,
-       MAX8997_REG_LDO18CTRL   = 0x4c,
-       MAX8997_REG_LDO21CTRL   = 0x4d,
-
-       MAX8997_REG_MBCCTRL1    = 0x50,
-       MAX8997_REG_MBCCTRL2    = 0x51,
-       MAX8997_REG_MBCCTRL3    = 0x52,
-       MAX8997_REG_MBCCTRL4    = 0x53,
-       MAX8997_REG_MBCCTRL5    = 0x54,
-       MAX8997_REG_MBCCTRL6    = 0x55,
-       MAX8997_REG_OTPCGHCVS   = 0x56,
-
-       MAX8997_REG_SAFEOUTCTRL = 0x5a,
-
-       MAX8997_REG_LBCNFG1     = 0x5e,
-       MAX8997_REG_LBCNFG2     = 0x5f,
-       MAX8997_REG_BBCCTRL     = 0x60,
-
-       MAX8997_REG_FLASH1_CUR  = 0x63, /* 0x63 ~ 0x6e for FLASH */
-       MAX8997_REG_FLASH2_CUR  = 0x64,
-       MAX8997_REG_MOVIE_CUR   = 0x65,
-       MAX8997_REG_GSMB_CUR    = 0x66,
-       MAX8997_REG_BOOST_CNTL  = 0x67,
-       MAX8997_REG_LEN_CNTL    = 0x68,
-       MAX8997_REG_FLASH_CNTL  = 0x69,
-       MAX8997_REG_WDT_CNTL    = 0x6a,
-       MAX8997_REG_MAXFLASH1   = 0x6b,
-       MAX8997_REG_MAXFLASH2   = 0x6c,
-       MAX8997_REG_FLASHSTATUS = 0x6d,
-       MAX8997_REG_FLASHSTATUSMASK     = 0x6e,
-
-       MAX8997_REG_GPIOCNTL1   = 0x70,
-       MAX8997_REG_GPIOCNTL2   = 0x71,
-       MAX8997_REG_GPIOCNTL3   = 0x72,
-       MAX8997_REG_GPIOCNTL4   = 0x73,
-       MAX8997_REG_GPIOCNTL5   = 0x74,
-       MAX8997_REG_GPIOCNTL6   = 0x75,
-       MAX8997_REG_GPIOCNTL7   = 0x76,
-       MAX8997_REG_GPIOCNTL8   = 0x77,
-       MAX8997_REG_GPIOCNTL9   = 0x78,
-       MAX8997_REG_GPIOCNTL10  = 0x79,
-       MAX8997_REG_GPIOCNTL11  = 0x7a,
-       MAX8997_REG_GPIOCNTL12  = 0x7b,
-
-       MAX8997_REG_LDO1CONFIG  = 0x80,
-       MAX8997_REG_LDO2CONFIG  = 0x81,
-       MAX8997_REG_LDO3CONFIG  = 0x82,
-       MAX8997_REG_LDO4CONFIG  = 0x83,
-       MAX8997_REG_LDO5CONFIG  = 0x84,
-       MAX8997_REG_LDO6CONFIG  = 0x85,
-       MAX8997_REG_LDO7CONFIG  = 0x86,
-       MAX8997_REG_LDO8CONFIG  = 0x87,
-       MAX8997_REG_LDO9CONFIG  = 0x88,
-       MAX8997_REG_LDO10CONFIG = 0x89,
-       MAX8997_REG_LDO11CONFIG = 0x8a,
-       MAX8997_REG_LDO12CONFIG = 0x8b,
-       MAX8997_REG_LDO13CONFIG = 0x8c,
-       MAX8997_REG_LDO14CONFIG = 0x8d,
-       MAX8997_REG_LDO15CONFIG = 0x8e,
-       MAX8997_REG_LDO16CONFIG = 0x8f,
-       MAX8997_REG_LDO17CONFIG = 0x90,
-       MAX8997_REG_LDO18CONFIG = 0x91,
-       MAX8997_REG_LDO21CONFIG = 0x92,
-
-       MAX8997_REG_DVSOKTIMER1 = 0x97,
-       MAX8997_REG_DVSOKTIMER2 = 0x98,
-       MAX8997_REG_DVSOKTIMER4 = 0x99,
-       MAX8997_REG_DVSOKTIMER5 = 0x9a,
-
-       PMIC_NUM_OF_REGS = 0x9b,
-};
-
-#define ENSAFEOUT1 (1 << 6)
-#define ENSAFEOUT2 (1 << 7)
-
-#define MAX8997_I2C_ADDR        (0xCC >> 1)
-#define MAX8997_RTC_ADDR       (0x0C >> 1)
-#define MAX8997_MUIC_ADDR      (0x4A >> 1)
-#define MAX8997_FG_ADDR        (0x6C >> 1)
-
-enum {
-       LDO_OFF = 0,
-       LDO_ON = 1,
-
-       DIS_LDO = (0x00 << 6),
-       EN_LDO = (0x3 << 6),
-};
-
-#endif /* __MAX8997_PMIC_H_ */
 
+++ /dev/null
-/*
- *  Copyright (C) 2011 Samsung Electronics
- *  Lukasz Majewski <l.majewski@samsung.com>
- *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * 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.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
- */
-
-#ifndef __MAX8998_PMIC_H_
-#define __MAX8998_PMIC_H_
-
-/* MAX 8998 registers */
-enum {
-       MAX8998_REG_IRQ1,
-       MAX8998_REG_IRQ2,
-       MAX8998_REG_IRQ3,
-       MAX8998_REG_IRQ4,
-       MAX8998_REG_IRQM1,
-       MAX8998_REG_IRQM2,
-       MAX8998_REG_IRQM3,
-       MAX8998_REG_IRQM4,
-       MAX8998_REG_STATUS1,
-       MAX8998_REG_STATUS2,
-       MAX8998_REG_STATUSM1,
-       MAX8998_REG_STATUSM2,
-       MAX8998_REG_CHGR1,
-       MAX8998_REG_CHGR2,
-       MAX8998_REG_LDO_ACTIVE_DISCHARGE1,
-       MAX8998_REG_LDO_ACTIVE_DISCHARGE2,
-       MAX8998_REG_BUCK_ACTIVE_DISCHARGE3,
-       MAX8998_REG_ONOFF1,
-       MAX8998_REG_ONOFF2,
-       MAX8998_REG_ONOFF3,
-       MAX8998_REG_ONOFF4,
-       MAX8998_REG_BUCK1_VOLTAGE1,
-       MAX8998_REG_BUCK1_VOLTAGE2,
-       MAX8998_REG_BUCK1_VOLTAGE3,
-       MAX8998_REG_BUCK1_VOLTAGE4,
-       MAX8998_REG_BUCK2_VOLTAGE1,
-       MAX8998_REG_BUCK2_VOLTAGE2,
-       MAX8998_REG_BUCK3,
-       MAX8998_REG_BUCK4,
-       MAX8998_REG_LDO2_LDO3,
-       MAX8998_REG_LDO4,
-       MAX8998_REG_LDO5,
-       MAX8998_REG_LDO6,
-       MAX8998_REG_LDO7,
-       MAX8998_REG_LDO8_LDO9,
-       MAX8998_REG_LDO10_LDO11,
-       MAX8998_REG_LDO12,
-       MAX8998_REG_LDO13,
-       MAX8998_REG_LDO14,
-       MAX8998_REG_LDO15,
-       MAX8998_REG_LDO16,
-       MAX8998_REG_LDO17,
-       MAX8998_REG_BKCHR,
-       MAX8998_REG_LBCNFG1,
-       MAX8998_REG_LBCNFG2,
-       PMIC_NUM_OF_REGS,
-};
-
-#define MAX8998_LDO3           (1 << 2)
-#define MAX8998_LDO4           (1 << 1)
-#define MAX8998_LDO8           (1 << 5)
-#define MAX8998_SAFEOUT1       (1 << 4)
-
-#define MAX8998_I2C_ADDR        (0xCC >> 1)
-
-enum { LDO_OFF, LDO_ON };
-
-#endif /* __MAX8998_PMIC_H_ */
 
+++ /dev/null
-/*
- *  Copyright (C) 2011 Samsung Electronics
- *  Lukasz Majewski <l.majewski@samsung.com>
- *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * 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.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
- */
-
-#ifndef __CORE_PMIC_H_
-#define __CORE_PMIC_H_
-
-enum { PMIC_I2C, PMIC_SPI, };
-enum { I2C_PMIC, I2C_NUM, };
-enum { PMIC_READ, PMIC_WRITE, };
-enum { PMIC_SENSOR_BYTE_ORDER_LITTLE, PMIC_SENSOR_BYTE_ORDER_BIG, };
-
-struct p_i2c {
-       unsigned char addr;
-       unsigned char *buf;
-       unsigned char tx_num;
-};
-
-struct p_spi {
-       unsigned int cs;
-       unsigned int mode;
-       unsigned int bitlen;
-       unsigned int clk;
-       unsigned int flags;
-       u32 (*prepare_tx)(u32 reg, u32 *val, u32 write);
-};
-
-struct pmic {
-       const char *name;
-       unsigned char bus;
-       unsigned char interface;
-       unsigned char sensor_byte_order;
-       unsigned char number_of_regs;
-       union hw {
-               struct p_i2c i2c;
-               struct p_spi spi;
-       } hw;
-};
-
-int pmic_init(void);
-int pmic_dialog_init(void);
-int check_reg(u32 reg);
-struct pmic *get_pmic(void);
-int pmic_probe(struct pmic *p);
-int pmic_reg_read(struct pmic *p, u32 reg, u32 *val);
-int pmic_reg_write(struct pmic *p, u32 reg, u32 val);
-int pmic_set_output(struct pmic *p, u32 reg, int ldo, int on);
-
-#define pmic_i2c_addr (p->hw.i2c.addr)
-#define pmic_i2c_tx_num (p->hw.i2c.tx_num)
-
-#define pmic_spi_bitlen (p->hw.spi.bitlen)
-#define pmic_spi_flags (p->hw.spi.flags)
-
-#endif /* __CORE_PMIC_H_ */
 
--- /dev/null
+/*
+ *  Copyright (C) 2011 Samsung Electronics
+ *  Lukasz Majewski <l.majewski@samsung.com>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * 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.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#ifndef __MAX8997_PMIC_H_
+#define __MAX8997_PMIC_H_
+
+/* MAX 8997 registers */
+enum {
+       MAX8997_REG_PMIC_ID0    = 0x00,
+       MAX8997_REG_PMIC_ID1    = 0x01,
+       MAX8997_REG_INTSRC      = 0x02,
+       MAX8997_REG_INT1        = 0x03,
+       MAX8997_REG_INT2        = 0x04,
+       MAX8997_REG_INT3        = 0x05,
+       MAX8997_REG_INT4        = 0x06,
+
+       MAX8997_REG_INT1MSK     = 0x08,
+       MAX8997_REG_INT2MSK     = 0x09,
+       MAX8997_REG_INT3MSK     = 0x0a,
+       MAX8997_REG_INT4MSK     = 0x0b,
+
+       MAX8997_REG_STATUS1     = 0x0d,
+       MAX8997_REG_STATUS2     = 0x0e,
+       MAX8997_REG_STATUS3     = 0x0f,
+       MAX8997_REG_STATUS4     = 0x10,
+
+       MAX8997_REG_MAINCON1    = 0x13,
+       MAX8997_REG_MAINCON2    = 0x14,
+       MAX8997_REG_BUCKRAMP    = 0x15,
+
+       MAX8997_REG_BUCK1CTRL   = 0x18,
+       MAX8997_REG_BUCK1DVS1   = 0x19,
+       MAX8997_REG_BUCK1DVS2   = 0x1a,
+       MAX8997_REG_BUCK1DVS3   = 0x1b,
+       MAX8997_REG_BUCK1DVS4   = 0x1c,
+       MAX8997_REG_BUCK1DVS5   = 0x1d,
+       MAX8997_REG_BUCK1DVS6   = 0x1e,
+       MAX8997_REG_BUCK1DVS7   = 0x1f,
+       MAX8997_REG_BUCK1DVS8   = 0x20,
+       MAX8997_REG_BUCK2CTRL   = 0x21,
+       MAX8997_REG_BUCK2DVS1   = 0x22,
+       MAX8997_REG_BUCK2DVS2   = 0x23,
+       MAX8997_REG_BUCK2DVS3   = 0x24,
+       MAX8997_REG_BUCK2DVS4   = 0x25,
+       MAX8997_REG_BUCK2DVS5   = 0x26,
+       MAX8997_REG_BUCK2DVS6   = 0x27,
+       MAX8997_REG_BUCK2DVS7   = 0x28,
+       MAX8997_REG_BUCK2DVS8   = 0x29,
+       MAX8997_REG_BUCK3CTRL   = 0x2a,
+       MAX8997_REG_BUCK3DVS    = 0x2b,
+       MAX8997_REG_BUCK4CTRL   = 0x2c,
+       MAX8997_REG_BUCK4DVS    = 0x2d,
+       MAX8997_REG_BUCK5CTRL   = 0x2e,
+       MAX8997_REG_BUCK5DVS1   = 0x2f,
+       MAX8997_REG_BUCK5DVS2   = 0x30,
+       MAX8997_REG_BUCK5DVS3   = 0x31,
+       MAX8997_REG_BUCK5DVS4   = 0x32,
+       MAX8997_REG_BUCK5DVS5   = 0x33,
+       MAX8997_REG_BUCK5DVS6   = 0x34,
+       MAX8997_REG_BUCK5DVS7   = 0x35,
+       MAX8997_REG_BUCK5DVS8   = 0x36,
+       MAX8997_REG_BUCK6CTRL   = 0x37,
+       MAX8997_REG_BUCK6BPSKIPCTRL     = 0x38,
+       MAX8997_REG_BUCK7CTRL   = 0x39,
+       MAX8997_REG_BUCK7DVS    = 0x3a,
+       MAX8997_REG_LDO1CTRL    = 0x3b,
+       MAX8997_REG_LDO2CTRL    = 0x3c,
+       MAX8997_REG_LDO3CTRL    = 0x3d,
+       MAX8997_REG_LDO4CTRL    = 0x3e,
+       MAX8997_REG_LDO5CTRL    = 0x3f,
+       MAX8997_REG_LDO6CTRL    = 0x40,
+       MAX8997_REG_LDO7CTRL    = 0x41,
+       MAX8997_REG_LDO8CTRL    = 0x42,
+       MAX8997_REG_LDO9CTRL    = 0x43,
+       MAX8997_REG_LDO10CTRL   = 0x44,
+       MAX8997_REG_LDO11CTRL   = 0x45,
+       MAX8997_REG_LDO12CTRL   = 0x46,
+       MAX8997_REG_LDO13CTRL   = 0x47,
+       MAX8997_REG_LDO14CTRL   = 0x48,
+       MAX8997_REG_LDO15CTRL   = 0x49,
+       MAX8997_REG_LDO16CTRL   = 0x4a,
+       MAX8997_REG_LDO17CTRL   = 0x4b,
+       MAX8997_REG_LDO18CTRL   = 0x4c,
+       MAX8997_REG_LDO21CTRL   = 0x4d,
+
+       MAX8997_REG_MBCCTRL1    = 0x50,
+       MAX8997_REG_MBCCTRL2    = 0x51,
+       MAX8997_REG_MBCCTRL3    = 0x52,
+       MAX8997_REG_MBCCTRL4    = 0x53,
+       MAX8997_REG_MBCCTRL5    = 0x54,
+       MAX8997_REG_MBCCTRL6    = 0x55,
+       MAX8997_REG_OTPCGHCVS   = 0x56,
+
+       MAX8997_REG_SAFEOUTCTRL = 0x5a,
+
+       MAX8997_REG_LBCNFG1     = 0x5e,
+       MAX8997_REG_LBCNFG2     = 0x5f,
+       MAX8997_REG_BBCCTRL     = 0x60,
+
+       MAX8997_REG_FLASH1_CUR  = 0x63, /* 0x63 ~ 0x6e for FLASH */
+       MAX8997_REG_FLASH2_CUR  = 0x64,
+       MAX8997_REG_MOVIE_CUR   = 0x65,
+       MAX8997_REG_GSMB_CUR    = 0x66,
+       MAX8997_REG_BOOST_CNTL  = 0x67,
+       MAX8997_REG_LEN_CNTL    = 0x68,
+       MAX8997_REG_FLASH_CNTL  = 0x69,
+       MAX8997_REG_WDT_CNTL    = 0x6a,
+       MAX8997_REG_MAXFLASH1   = 0x6b,
+       MAX8997_REG_MAXFLASH2   = 0x6c,
+       MAX8997_REG_FLASHSTATUS = 0x6d,
+       MAX8997_REG_FLASHSTATUSMASK     = 0x6e,
+
+       MAX8997_REG_GPIOCNTL1   = 0x70,
+       MAX8997_REG_GPIOCNTL2   = 0x71,
+       MAX8997_REG_GPIOCNTL3   = 0x72,
+       MAX8997_REG_GPIOCNTL4   = 0x73,
+       MAX8997_REG_GPIOCNTL5   = 0x74,
+       MAX8997_REG_GPIOCNTL6   = 0x75,
+       MAX8997_REG_GPIOCNTL7   = 0x76,
+       MAX8997_REG_GPIOCNTL8   = 0x77,
+       MAX8997_REG_GPIOCNTL9   = 0x78,
+       MAX8997_REG_GPIOCNTL10  = 0x79,
+       MAX8997_REG_GPIOCNTL11  = 0x7a,
+       MAX8997_REG_GPIOCNTL12  = 0x7b,
+
+       MAX8997_REG_LDO1CONFIG  = 0x80,
+       MAX8997_REG_LDO2CONFIG  = 0x81,
+       MAX8997_REG_LDO3CONFIG  = 0x82,
+       MAX8997_REG_LDO4CONFIG  = 0x83,
+       MAX8997_REG_LDO5CONFIG  = 0x84,
+       MAX8997_REG_LDO6CONFIG  = 0x85,
+       MAX8997_REG_LDO7CONFIG  = 0x86,
+       MAX8997_REG_LDO8CONFIG  = 0x87,
+       MAX8997_REG_LDO9CONFIG  = 0x88,
+       MAX8997_REG_LDO10CONFIG = 0x89,
+       MAX8997_REG_LDO11CONFIG = 0x8a,
+       MAX8997_REG_LDO12CONFIG = 0x8b,
+       MAX8997_REG_LDO13CONFIG = 0x8c,
+       MAX8997_REG_LDO14CONFIG = 0x8d,
+       MAX8997_REG_LDO15CONFIG = 0x8e,
+       MAX8997_REG_LDO16CONFIG = 0x8f,
+       MAX8997_REG_LDO17CONFIG = 0x90,
+       MAX8997_REG_LDO18CONFIG = 0x91,
+       MAX8997_REG_LDO21CONFIG = 0x92,
+
+       MAX8997_REG_DVSOKTIMER1 = 0x97,
+       MAX8997_REG_DVSOKTIMER2 = 0x98,
+       MAX8997_REG_DVSOKTIMER4 = 0x99,
+       MAX8997_REG_DVSOKTIMER5 = 0x9a,
+
+       PMIC_NUM_OF_REGS = 0x9b,
+};
+
+#define ACTDISSAFEO1 (1 << 4)
+#define ACTDISSAFEO2 (1 << 5)
+#define ENSAFEOUT1 (1 << 6)
+#define ENSAFEOUT2 (1 << 7)
+
+/* Charger */
+enum {CHARGER_ENABLE, CHARGER_DISABLE};
+#define DETBAT                  (1 << 2)
+#define MBCICHFCSET             (1 << 4)
+#define MBCHOSTEN               (1 << 6)
+#define VCHGR_FC                (1 << 7)
+
+#define CHARGER_MIN_CURRENT 200
+#define CHARGER_MAX_CURRENT 950
+#define CHARGER_CURRENT_RESOLUTION 50
+
+#define MAX8997_I2C_ADDR        (0xCC >> 1)
+#define MAX8997_RTC_ADDR       (0x0C >> 1)
+#define MAX8997_MUIC_ADDR      (0x4A >> 1)
+#define MAX8997_FG_ADDR        (0x6C >> 1)
+
+enum {
+       LDO_OFF = 0,
+       LDO_ON = 1,
+
+       DIS_LDO = (0x00 << 6),
+       EN_LDO = (0x3 << 6),
+};
+
+#endif /* __MAX8997_PMIC_H_ */
 
--- /dev/null
+/*
+ *  Copyright (C) 2011 Samsung Electronics
+ *  Lukasz Majewski <l.majewski@samsung.com>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * 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.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#ifndef __MAX8998_PMIC_H_
+#define __MAX8998_PMIC_H_
+
+/* MAX 8998 registers */
+enum {
+       MAX8998_REG_IRQ1,
+       MAX8998_REG_IRQ2,
+       MAX8998_REG_IRQ3,
+       MAX8998_REG_IRQ4,
+       MAX8998_REG_IRQM1,
+       MAX8998_REG_IRQM2,
+       MAX8998_REG_IRQM3,
+       MAX8998_REG_IRQM4,
+       MAX8998_REG_STATUS1,
+       MAX8998_REG_STATUS2,
+       MAX8998_REG_STATUSM1,
+       MAX8998_REG_STATUSM2,
+       MAX8998_REG_CHGR1,
+       MAX8998_REG_CHGR2,
+       MAX8998_REG_LDO_ACTIVE_DISCHARGE1,
+       MAX8998_REG_LDO_ACTIVE_DISCHARGE2,
+       MAX8998_REG_BUCK_ACTIVE_DISCHARGE3,
+       MAX8998_REG_ONOFF1,
+       MAX8998_REG_ONOFF2,
+       MAX8998_REG_ONOFF3,
+       MAX8998_REG_ONOFF4,
+       MAX8998_REG_BUCK1_VOLTAGE1,
+       MAX8998_REG_BUCK1_VOLTAGE2,
+       MAX8998_REG_BUCK1_VOLTAGE3,
+       MAX8998_REG_BUCK1_VOLTAGE4,
+       MAX8998_REG_BUCK2_VOLTAGE1,
+       MAX8998_REG_BUCK2_VOLTAGE2,
+       MAX8998_REG_BUCK3,
+       MAX8998_REG_BUCK4,
+       MAX8998_REG_LDO2_LDO3,
+       MAX8998_REG_LDO4,
+       MAX8998_REG_LDO5,
+       MAX8998_REG_LDO6,
+       MAX8998_REG_LDO7,
+       MAX8998_REG_LDO8_LDO9,
+       MAX8998_REG_LDO10_LDO11,
+       MAX8998_REG_LDO12,
+       MAX8998_REG_LDO13,
+       MAX8998_REG_LDO14,
+       MAX8998_REG_LDO15,
+       MAX8998_REG_LDO16,
+       MAX8998_REG_LDO17,
+       MAX8998_REG_BKCHR,
+       MAX8998_REG_LBCNFG1,
+       MAX8998_REG_LBCNFG2,
+       PMIC_NUM_OF_REGS,
+};
+
+#define MAX8998_LDO3           (1 << 2)
+#define MAX8998_LDO4           (1 << 1)
+#define MAX8998_LDO8           (1 << 5)
+#define MAX8998_SAFEOUT1       (1 << 4)
+
+#define MAX8998_I2C_ADDR        (0xCC >> 1)
+
+enum { LDO_OFF, LDO_ON };
+
+#endif /* __MAX8998_PMIC_H_ */
 
--- /dev/null
+/*
+ *  Copyright (C) 2011-2012 Samsung Electronics
+ *  Lukasz Majewski <l.majewski@samsung.com>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * 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.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#ifndef __CORE_PMIC_H_
+#define __CORE_PMIC_H_
+
+#include <common.h>
+#include <linux/list.h>
+#include <i2c.h>
+
+enum { PMIC_I2C, PMIC_SPI, };
+enum { I2C_PMIC, I2C_NUM, };
+enum { PMIC_READ, PMIC_WRITE, };
+enum { PMIC_SENSOR_BYTE_ORDER_LITTLE, PMIC_SENSOR_BYTE_ORDER_BIG, };
+
+struct p_i2c {
+       unsigned char addr;
+       unsigned char *buf;
+       unsigned char tx_num;
+};
+
+struct p_spi {
+       unsigned int cs;
+       unsigned int mode;
+       unsigned int bitlen;
+       unsigned int clk;
+       unsigned int flags;
+       u32 (*prepare_tx)(u32 reg, u32 *val, u32 write);
+};
+
+struct pmic {
+       const char *name;
+       unsigned char bus;
+       unsigned char interface;
+       unsigned char sensor_byte_order;
+       unsigned int number_of_regs;
+       union hw {
+               struct p_i2c i2c;
+               struct p_spi spi;
+       } hw;
+
+       struct list_head list;
+};
+
+int pmic_init(unsigned char bus);
+int pmic_dialog_init(unsigned char bus);
+int check_reg(struct pmic *p, u32 reg);
+struct pmic *pmic_alloc(void);
+struct pmic *pmic_get(const char *s);
+int pmic_probe(struct pmic *p);
+int pmic_reg_read(struct pmic *p, u32 reg, u32 *val);
+int pmic_reg_write(struct pmic *p, u32 reg, u32 val);
+int pmic_set_output(struct pmic *p, u32 reg, int ldo, int on);
+
+#define pmic_i2c_addr (p->hw.i2c.addr)
+#define pmic_i2c_tx_num (p->hw.i2c.tx_num)
+
+#define pmic_spi_bitlen (p->hw.spi.bitlen)
+#define pmic_spi_flags (p->hw.spi.flags)
+
+#endif /* __CORE_PMIC_H_ */