xref: /rk3399_rockchip-uboot/drivers/power/pmic/max8998.c (revision 103e83a1b0a3f2ef5d82d86711ea3d6b2bbf2a16)
1*103e83a1SJaehoon Chung /*
2*103e83a1SJaehoon Chung  *  Copyright (C) 2016 Samsung Electronics
3*103e83a1SJaehoon Chung  *  Jaehoon Chung <jh80.chung@samsung.com>
4*103e83a1SJaehoon Chung  *
5*103e83a1SJaehoon Chung  * SPDX-License-Identifier:	GPL-2.0+
6*103e83a1SJaehoon Chung  */
7*103e83a1SJaehoon Chung 
8*103e83a1SJaehoon Chung #include <common.h>
9*103e83a1SJaehoon Chung #include <dm.h>
10*103e83a1SJaehoon Chung #include <i2c.h>
11*103e83a1SJaehoon Chung #include <power/pmic.h>
12*103e83a1SJaehoon Chung #include <power/max8998_pmic.h>
13*103e83a1SJaehoon Chung #include <errno.h>
14*103e83a1SJaehoon Chung 
15*103e83a1SJaehoon Chung DECLARE_GLOBAL_DATA_PTR;
16*103e83a1SJaehoon Chung 
17*103e83a1SJaehoon Chung static int max8998_reg_count(struct udevice *dev)
18*103e83a1SJaehoon Chung {
19*103e83a1SJaehoon Chung 	return PMIC_NUM_OF_REGS;
20*103e83a1SJaehoon Chung }
21*103e83a1SJaehoon Chung 
22*103e83a1SJaehoon Chung static int max8998_write(struct udevice *dev, uint reg, const uint8_t *buff,
23*103e83a1SJaehoon Chung 		int len)
24*103e83a1SJaehoon Chung {
25*103e83a1SJaehoon Chung 	int ret;
26*103e83a1SJaehoon Chung 
27*103e83a1SJaehoon Chung 	ret = dm_i2c_write(dev, reg, buff, len);
28*103e83a1SJaehoon Chung 	if (ret)
29*103e83a1SJaehoon Chung 		error("write error to device: %p register: %#x!", dev, reg);
30*103e83a1SJaehoon Chung 
31*103e83a1SJaehoon Chung 	return ret;
32*103e83a1SJaehoon Chung }
33*103e83a1SJaehoon Chung 
34*103e83a1SJaehoon Chung static int max8998_read(struct udevice *dev, uint reg, uint8_t *buff, int len)
35*103e83a1SJaehoon Chung {
36*103e83a1SJaehoon Chung 	int ret;
37*103e83a1SJaehoon Chung 
38*103e83a1SJaehoon Chung 	ret = dm_i2c_read(dev, reg, buff, len);
39*103e83a1SJaehoon Chung 	if (ret)
40*103e83a1SJaehoon Chung 		error("read error from device: %p register: %#x!", dev, reg);
41*103e83a1SJaehoon Chung 
42*103e83a1SJaehoon Chung 	return ret;
43*103e83a1SJaehoon Chung }
44*103e83a1SJaehoon Chung 
45*103e83a1SJaehoon Chung static struct dm_pmic_ops max8998_ops = {
46*103e83a1SJaehoon Chung 	.reg_count = max8998_reg_count,
47*103e83a1SJaehoon Chung 	.read	= max8998_read,
48*103e83a1SJaehoon Chung 	.write	= max8998_write,
49*103e83a1SJaehoon Chung };
50*103e83a1SJaehoon Chung 
51*103e83a1SJaehoon Chung static const struct udevice_id max8998_ids[] = {
52*103e83a1SJaehoon Chung 	{ .compatible = "maxim,max8998" },
53*103e83a1SJaehoon Chung 	{ }
54*103e83a1SJaehoon Chung };
55*103e83a1SJaehoon Chung 
56*103e83a1SJaehoon Chung U_BOOT_DRIVER(pmic_max8998) = {
57*103e83a1SJaehoon Chung 	.name		= "max8998_pmic",
58*103e83a1SJaehoon Chung 	.id		= UCLASS_PMIC,
59*103e83a1SJaehoon Chung 	.of_match	= max8998_ids,
60*103e83a1SJaehoon Chung 	.ops		= &max8998_ops,
61*103e83a1SJaehoon Chung };
62