blob: d773b096b2fd6dbeb3b697ba4ff13e6d5f851527 [file] [log] [blame]
Bo Lv72d0e902023-01-02 14:27:34 +00001// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
2/*
3 * Copyright (c) 2019 Amlogic, Inc. All rights reserved.
4 */
5
6#include <common.h>
7#include <i2c.h>
8#include <dm.h>
9
10#define I2C_BUS_ID 9
11#define BD71888_CHIP_DEV 0x4b
12#define BD2657_CHIP_DEV 0x6a
13
14struct udevice *cmd_dev;
15
16/* addr = 8bit, val = 8bit */
17int common_write(uint8_t pmic_addr, uint8_t addr, uint8_t val)
18{
19 uint8_t val_tmp = val;
20 int ret;
21
22 ret = i2c_get_chip_for_busnum(I2C_BUS_ID, pmic_addr, 1, &cmd_dev);
23 if (ret)
24 printf("%s i2c get chip failed\n", __func__);
25 ret = dm_i2c_write(cmd_dev, addr, &val_tmp, 1);
26 if (ret)
27 printf("%s i2c write failed\n", __func__);
28
29 return 0;
30
31}
32
33int common_read(uint8_t pmic_addr, uint8_t addr, uint8_t *val)
34{
35 int ret;
36
37 ret = i2c_get_chip_for_busnum(I2C_BUS_ID, pmic_addr, 1, &cmd_dev);
38 if (ret)
39 printf("%s i2c get chip failed\n", __func__);
40 ret = dm_i2c_read(cmd_dev, addr, val, 1);
41 if (ret < 0) {
42 printf("%s: pmic read fault, ret:%d\n", __FUNCTION__, ret);
43 }
44 return 0;
45}
46
47static int do_i2c_write_bd71888(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
48{
49 int ret = 100;
50
51 uint8_t write_address = simple_strtoul(argv[1], NULL, 16);
52 uint8_t write_val = simple_strtoul(argv[2], NULL, 16);
53
54 ret = common_write(BD71888_CHIP_DEV,write_address,write_val);
55 if (ret < 0) {
56 printf("%s: bd71888 pmic write fault, ret:%d\n", __FUNCTION__, ret);
57 return ret;
58 }
59
60 printf("write_val = 0x%x\n",write_val);
61
62 return 0;
63}
64
65U_BOOT_CMD(
66 bd71888_i2c_write, 3, 1, do_i2c_write_bd71888,
67 "test i2c",
68 "/N\n"
69 "bd71888_i2c_write \n"
70 "\n"
71);
72
73static int do_i2c_read_bd71888(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
74{
75 int ret = 100;
76 uint8_t read_val = 0x33;
77
78 uint8_t read_address = simple_strtoul(argv[1], NULL, 16);
79
80 ret = common_read(BD71888_CHIP_DEV,read_address,&read_val);
81 if (ret < 0) {
82 printf("%s: bd71888 aml_pmic read fault, ret:%d\n", __FUNCTION__, ret);
83 return ret;
84 }
85
86 printf("read_val = 0x%x\n",read_val);
87
88 return 0;
89}
90
91U_BOOT_CMD(
92 bd71888_i2c_read, 2, 1, do_i2c_read_bd71888,
93 "test i2c",
94 "/N\n"
95 "bd71888_i2c_read \n"
96 "\n"
97);
98
99
100static int do_i2c_write_bd2657(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
101{
102 int ret = 100;
103
104 uint8_t write_address = simple_strtoul(argv[1], NULL, 16);
105 uint8_t write_val = simple_strtoul(argv[2], NULL, 16);
106
107 ret = common_write(BD2657_CHIP_DEV,write_address,write_val);
108 if (ret < 0) {
109 printf("%s: bd71888 pmic write fault, ret:%d\n", __FUNCTION__, ret);
110 return ret;
111 }
112
113 printf("write_val = 0x%x\n",write_val);
114
115 return 0;
116}
117
118U_BOOT_CMD(
119 bd2657_i2c_write, 3, 1, do_i2c_write_bd2657,
120 "test i2c",
121 "/N\n"
122 "bd2657_i2c_write \n"
123 "\n"
124);
125
126static int do_i2c_read_bd2657(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
127{
128 int ret = 100;
129 uint8_t read_val = 0x33;
130
131 uint8_t read_address = simple_strtoul(argv[1], NULL, 16);
132
133 ret = common_read(BD2657_CHIP_DEV,read_address,&read_val);
134 if (ret < 0) {
135 printf("%s: bd71888 aml_pmic read fault, ret:%d\n", __FUNCTION__, ret);
136 return ret;
137 }
138
139 printf("read_val = 0x%x\n",read_val);
140
141 return 0;
142}
143
144U_BOOT_CMD(
145 bd2657_i2c_read, 2, 1, do_i2c_read_bd2657,
146 "test i2c",
147 "/N\n"
148 "bd2657_i2c_read \n"
149 "\n"
150);
151
152
153
154