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