瀏覽代碼

power: pmic: add the max8998 controller for DM

Add the max8998 controller for Driver model.
Samsung S5P series are using max8998 pmic controller.
In future, it should be supported the regulator framework.

Signed-off-by: Jaehoon Chung <jh80.chung@samsung.com>
Signed-off-by: Minkyu Kang <mk7.kang@samsung.com>
Jaehoon Chung 8 年之前
父節點
當前提交
103e83a1b0
共有 3 個文件被更改,包括 69 次插入0 次删除
  1. 7 0
      drivers/power/pmic/Kconfig
  2. 1 0
      drivers/power/pmic/Makefile
  3. 61 0
      drivers/power/pmic/max8998.c

+ 7 - 0
drivers/power/pmic/Kconfig

@@ -54,6 +54,13 @@ config DM_PMIC_MAX77686
 	This config enables implementation of driver-model pmic uclass features
 	for PMIC MAX77686. The driver implements read/write operations.
 
+config DM_PMIC_MAX8998
+	bool "Enable Driver Model for PMIC MAX8998"
+	depends on DM_PMIC
+	---help---
+	This config enables implementation of driver-model pmic uclass features
+	for PMIC MAX8998. The driver implements read/write operations.
+
 config PMIC_PM8916
 	bool "Enable Driver Model for Qualcomm PM8916 PMIC"
 	depends on DM_PMIC

+ 1 - 0
drivers/power/pmic/Makefile

@@ -7,6 +7,7 @@
 
 obj-$(CONFIG_DM_PMIC) += pmic-uclass.o
 obj-$(CONFIG_DM_PMIC_MAX77686) += max77686.o
+obj-$(CONFIG_DM_PMIC_MAX8998) += max8998.o
 obj-$(CONFIG_DM_PMIC_PFUZE100) += pfuze100.o
 obj-$(CONFIG_PMIC_S2MPS11) += s2mps11.o
 obj-$(CONFIG_DM_PMIC_SANDBOX) += sandbox.o i2c_pmic_emul.o

+ 61 - 0
drivers/power/pmic/max8998.c

@@ -0,0 +1,61 @@
+/*
+ *  Copyright (C) 2016 Samsung Electronics
+ *  Jaehoon Chung <jh80.chung@samsung.com>
+ *
+ * SPDX-License-Identifier:	GPL-2.0+
+ */
+
+#include <common.h>
+#include <dm.h>
+#include <i2c.h>
+#include <power/pmic.h>
+#include <power/max8998_pmic.h>
+#include <errno.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+static int max8998_reg_count(struct udevice *dev)
+{
+	return PMIC_NUM_OF_REGS;
+}
+
+static int max8998_write(struct udevice *dev, uint reg, const uint8_t *buff,
+		int len)
+{
+	int ret;
+
+	ret = dm_i2c_write(dev, reg, buff, len);
+	if (ret)
+		error("write error to device: %p register: %#x!", dev, reg);
+
+	return ret;
+}
+
+static int max8998_read(struct udevice *dev, uint reg, uint8_t *buff, int len)
+{
+	int ret;
+
+	ret = dm_i2c_read(dev, reg, buff, len);
+	if (ret)
+		error("read error from device: %p register: %#x!", dev, reg);
+
+	return ret;
+}
+
+static struct dm_pmic_ops max8998_ops = {
+	.reg_count = max8998_reg_count,
+	.read	= max8998_read,
+	.write	= max8998_write,
+};
+
+static const struct udevice_id max8998_ids[] = {
+	{ .compatible = "maxim,max8998" },
+	{ }
+};
+
+U_BOOT_DRIVER(pmic_max8998) = {
+	.name		= "max8998_pmic",
+	.id		= UCLASS_PMIC,
+	.of_match	= max8998_ids,
+	.ops		= &max8998_ops,
+};