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