xref: /OK3568_Linux_fs/u-boot/drivers/power/pmic/rn5t567.c (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun  * Copyright (C) 2016 Toradex AG
3*4882a593Smuzhiyun  * Stefan Agner <stefan.agner@toradex.com>
4*4882a593Smuzhiyun  *
5*4882a593Smuzhiyun  * SPDX-License-Identifier:      GPL-2.0+
6*4882a593Smuzhiyun  */
7*4882a593Smuzhiyun 
8*4882a593Smuzhiyun #include <common.h>
9*4882a593Smuzhiyun #include <dm.h>
10*4882a593Smuzhiyun #include <errno.h>
11*4882a593Smuzhiyun #include <fdtdec.h>
12*4882a593Smuzhiyun #include <linux/libfdt.h>
13*4882a593Smuzhiyun #include <power/rn5t567_pmic.h>
14*4882a593Smuzhiyun #include <power/pmic.h>
15*4882a593Smuzhiyun 
rn5t567_reg_count(struct udevice * dev)16*4882a593Smuzhiyun static int rn5t567_reg_count(struct udevice *dev)
17*4882a593Smuzhiyun {
18*4882a593Smuzhiyun 	return RN5T567_NUM_OF_REGS;
19*4882a593Smuzhiyun }
20*4882a593Smuzhiyun 
rn5t567_write(struct udevice * dev,uint reg,const uint8_t * buff,int len)21*4882a593Smuzhiyun static int rn5t567_write(struct udevice *dev, uint reg, const uint8_t *buff,
22*4882a593Smuzhiyun 			  int len)
23*4882a593Smuzhiyun {
24*4882a593Smuzhiyun 	int ret;
25*4882a593Smuzhiyun 
26*4882a593Smuzhiyun 	ret = dm_i2c_write(dev, reg, buff, len);
27*4882a593Smuzhiyun 	if (ret) {
28*4882a593Smuzhiyun 		debug("write error to device: %p register: %#x!", dev, reg);
29*4882a593Smuzhiyun 		return ret;
30*4882a593Smuzhiyun 	}
31*4882a593Smuzhiyun 
32*4882a593Smuzhiyun 	return 0;
33*4882a593Smuzhiyun }
34*4882a593Smuzhiyun 
rn5t567_read(struct udevice * dev,uint reg,uint8_t * buff,int len)35*4882a593Smuzhiyun static int rn5t567_read(struct udevice *dev, uint reg, uint8_t *buff, int len)
36*4882a593Smuzhiyun {
37*4882a593Smuzhiyun 	int ret;
38*4882a593Smuzhiyun 
39*4882a593Smuzhiyun 	ret = dm_i2c_read(dev, reg, buff, len);
40*4882a593Smuzhiyun 	if (ret) {
41*4882a593Smuzhiyun 		debug("read error from device: %p register: %#x!", dev, reg);
42*4882a593Smuzhiyun 		return ret;
43*4882a593Smuzhiyun 	}
44*4882a593Smuzhiyun 
45*4882a593Smuzhiyun 	return 0;
46*4882a593Smuzhiyun }
47*4882a593Smuzhiyun 
48*4882a593Smuzhiyun static struct dm_pmic_ops rn5t567_ops = {
49*4882a593Smuzhiyun 	.reg_count = rn5t567_reg_count,
50*4882a593Smuzhiyun 	.read = rn5t567_read,
51*4882a593Smuzhiyun 	.write = rn5t567_write,
52*4882a593Smuzhiyun };
53*4882a593Smuzhiyun 
54*4882a593Smuzhiyun static const struct udevice_id rn5t567_ids[] = {
55*4882a593Smuzhiyun 	{ .compatible = "ricoh,rn5t567" },
56*4882a593Smuzhiyun 	{ }
57*4882a593Smuzhiyun };
58*4882a593Smuzhiyun 
59*4882a593Smuzhiyun U_BOOT_DRIVER(pmic_rn5t567) = {
60*4882a593Smuzhiyun 	.name = "rn5t567 pmic",
61*4882a593Smuzhiyun 	.id = UCLASS_PMIC,
62*4882a593Smuzhiyun 	.of_match = rn5t567_ids,
63*4882a593Smuzhiyun 	.ops = &rn5t567_ops,
64*4882a593Smuzhiyun };
65