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