This commit adds support for MAX8998 driver. CONFIG_MAX8998_PMIC flag shall be defined on an architecture supporting it.
Signed-off-by: Lukasz Majewski <l.majew...@samsung.com> Signed-off-by: Kyungmin Park <kyungmin.p...@samsung.com> Cc: Minkyu Kang <mk7.k...@samsung.com> Cc: Wolfgang Denk <w...@denx.de> --- drivers/misc/Makefile | 1 + drivers/misc/max8998_pmic.c | 74 ++++++++++++++++++++++++++++++++++++ include/max8998_pmic.h | 87 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 162 insertions(+), 0 deletions(-) create mode 100644 drivers/misc/max8998_pmic.c create mode 100644 include/max8998_pmic.h diff --git a/drivers/misc/Makefile b/drivers/misc/Makefile index b152486..551bea9 100644 --- a/drivers/misc/Makefile +++ b/drivers/misc/Makefile @@ -35,6 +35,7 @@ COBJS-$(CONFIG_NS87308) += ns87308.o COBJS-$(CONFIG_PDSP188x) += pdsp188x.o COBJS-$(CONFIG_STATUS_LED) += status_led.o COBJS-$(CONFIG_TWL4030_LED) += twl4030_led.o +COBJS-$(CONFIG_MAX8998_PMIC) += max8998_pmic.o COBJS := $(COBJS-y) SRCS := $(COBJS:.o=.c) diff --git a/drivers/misc/max8998_pmic.c b/drivers/misc/max8998_pmic.c new file mode 100644 index 0000000..0600976 --- /dev/null +++ b/drivers/misc/max8998_pmic.c @@ -0,0 +1,74 @@ +/* + * Copyright (C) 2011 Samsung Electronics + * Lukasz Majewski <l.majew...@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 + */ + +#include <common.h> +#include <i2c.h> +#include <max8998_pmic.h> + +static int max8998_read_reg(unsigned int reg, unsigned char *val) +{ + if (i2c_read(MAX8998_I2C_ADDR, reg, 1, val, 1)) + return -1; + + return 0; +} + +static int max8998_write_reg(unsigned int reg, unsigned char *val) +{ + + if (i2c_write(MAX8998_I2C_ADDR, reg, 1, val, 1)) + return -1; + + return 0; +} + +int max8998_probe(void) +{ + i2c_set_bus_num(I2C_PMIC); + + if (i2c_probe(MAX8998_I2C_ADDR)) { + puts("Can't find max8998\n"); + return 1; + } + + return 0; +} + +int max8998_set_ldo(unsigned int reg, unsigned char ldo, int on) +{ + unsigned char val; + + if (max8998_read_reg(reg, &val)) + return -1; + + if (on) + val |= ldo; + else + val &= ~ldo; + + if (max8998_write_reg(reg, &val)) + return -1; + + printf("MAX ONOFF1: val:0x%x\n", val); + return 0; +} diff --git a/include/max8998_pmic.h b/include/max8998_pmic.h new file mode 100644 index 0000000..1a4281d --- /dev/null +++ b/include/max8998_pmic.h @@ -0,0 +1,87 @@ +/* + * Copyright (C) 2011 Samsung Electronics + * Lukasz Majewski <l.majew...@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, +}; + +#define MAX8998_LDO3 (1 << 2) +#define MAX8998_LDO8 (1 << 5) + +#define MAX8998_I2C_ADDR (0xCC >> 1) + +enum { LDO_OFF, LDO_ON }; +enum { I2C_PMIC, I2C_NUM, }; + +int max8998_probe(void); +int max8998_set_ldo(unsigned int reg, unsigned char ldo, int on); + +#endif /* __MAX8998_PMIC_H_ */ -- 1.7.2.3 _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot