summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/power/pmic/Makefile1
-rw-r--r--drivers/power/pmic/pmic_ltc3676.c32
-rw-r--r--include/power/ltc3676_pmic.h51
3 files changed, 84 insertions, 0 deletions
diff --git a/drivers/power/pmic/Makefile b/drivers/power/pmic/Makefile
index 4129bdabfb..920bbdce6e 100644
--- a/drivers/power/pmic/Makefile
+++ b/drivers/power/pmic/Makefile
@@ -5,6 +5,7 @@
# SPDX-License-Identifier: GPL-2.0+
#
+obj-$(CONFIG_POWER_LTC3676) += pmic_ltc3676.o
obj-$(CONFIG_POWER_MAX8998) += pmic_max8998.o
obj-$(CONFIG_POWER_MAX8997) += pmic_max8997.o
obj-$(CONFIG_POWER_MUIC_MAX8997) += muic_max8997.o
diff --git a/drivers/power/pmic/pmic_ltc3676.c b/drivers/power/pmic/pmic_ltc3676.c
new file mode 100644
index 0000000000..9b874cb07c
--- /dev/null
+++ b/drivers/power/pmic/pmic_ltc3676.c
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2014 Gateworks Corporation
+ * Tim Harvey <tharvey@gateworks.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include <common.h>
+#include <errno.h>
+#include <i2c.h>
+#include <power/pmic.h>
+#include <power/ltc3676_pmic.h>
+
+int power_ltc3676_init(unsigned char bus)
+{
+ static const char name[] = "LTC3676_PMIC";
+ struct pmic *p = pmic_alloc();
+
+ if (!p) {
+ printf("%s: POWER allocation error!\n", __func__);
+ return -ENOMEM;
+ }
+
+ p->name = name;
+ p->interface = PMIC_I2C;
+ p->number_of_regs = LTC3676_NUM_OF_REGS;
+ p->hw.i2c.addr = CONFIG_POWER_LTC3676_I2C_ADDR;
+ p->hw.i2c.tx_num = 1;
+ p->bus = bus;
+
+ return 0;
+}
diff --git a/include/power/ltc3676_pmic.h b/include/power/ltc3676_pmic.h
new file mode 100644
index 0000000000..dcaa985193
--- /dev/null
+++ b/include/power/ltc3676_pmic.h
@@ -0,0 +1,51 @@
+/*
+ * Copyright (C) 2014 Gateworks Corporation
+ * Tim Harvey <tharvey@gateworks.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#ifndef __LTC3676_PMIC_H_
+#define __LTC3676_PMIC_H_
+
+/* LTC3676 registers */
+enum {
+ LTC3676_BUCK1 = 0x01,
+ LTC3676_BUCK2 = 0x02,
+ LTC3676_BUCK3 = 0x03,
+ LTC3676_BUCK4 = 0x04,
+ LTC3676_LDOA = 0x05,
+ LTC3676_LDOB = 0x06,
+ LTC3676_SQD1 = 0x07,
+ LTC3676_SQD2 = 0x08,
+ LTC3676_CNTRL = 0x09,
+ LTC3676_DVB1A = 0x0A,
+ LTC3676_DVB1B = 0x0B,
+ LTC3676_DVB2A = 0x0C,
+ LTC3676_DVB2B = 0x0D,
+ LTC3676_DVB3A = 0x0E,
+ LTC3676_DVB3B = 0x0F,
+ LTC3676_DVB4A = 0x10,
+ LTC3676_DVB4B = 0x11,
+ LTC3676_MSKIRQ = 0x12,
+ LTC3676_MSKPG = 0x13,
+ LTC3676_USER = 0x14,
+ LTC3676_HRST = 0x1E,
+ LTC3676_CLIRQ = 0x1F,
+ LTC3676_IRQSTAT = 0x15,
+ LTC3676_PGSTATL = 0x16,
+ LTC3676_PGSTATR = 0x17,
+ LTC3676_NUM_OF_REGS = 0x20,
+};
+
+/*
+ * SW Configuration
+ */
+
+#define LTC3676_DVB_MASK 0x1f
+#define LTC3676_PGOOD_MASK (1<<5)
+#define LTC3676_REF_SELA (0<<5)
+#define LTC3676_REF_SELB (1<<5)
+
+int power_ltc3676_init(unsigned char bus);
+#endif