2 * Command for max8998 / lp3974 pmic
4 * Copyright (C) 2011 Samsung Electrnoics
5 * Minkyu Kang <mk7.kang@samsung.com>
6 * Kyungmin Park <kyungmin.park@samsung.com>
13 unsigned int pmic_bus;
15 void pmic_bus_init(int bus_num)
20 static int pmic_probe(void)
22 unsigned char addr = 0xCC >> 1;
24 i2c_set_bus_num(pmic_bus);
26 if (i2c_probe(addr)) {
27 puts("Can't found pmic\n");
34 #ifdef CONFIG_SOFT_I2C_READ_REPEATED_START
35 #define i2c_read_func(addr, reg, alen, val, len) \
36 i2c_read_r(addr, reg, alen, val, len)
38 #define i2c_read_func(addr, reg, alen, val, len) \
39 i2c_read(addr, reg, alen, val, len)
42 unsigned int pmic_get_irq(int irq)
44 unsigned char addr, val[4];
70 i2c_read_func(addr, 0x0, 1, val, 4);
72 ret = val[reg] & (1 << shift);
77 static int pmic_status(void)
79 unsigned char addr, val[2];
88 i2c_read_func(addr, reg, 1, val, 1);
89 for (i = 7; i >= 4; i--)
90 printf("BUCK%d %s\n", 7 - i + 1,
91 val[0] & (1 << i) ? "on" : "off");
93 printf("LDO%d %s\n", 5 - i,
94 val[0] & (1 << i) ? "on" : "off");
96 i2c_read_func(addr, reg, 1, val, 1);
97 for (i = 7; i >= 0; i--)
98 printf("LDO%d %s\n", 7 - i + 6,
99 val[0] & (1 << i) ? "on" : "off");
101 i2c_read_func(addr, reg, 1, val, 1);
102 for (i = 7; i >= 4; i--)
103 printf("LDO%d %s\n", 7 - i + 14,
104 val[0] & (1 << i) ? "on" : "off");
107 i2c_read_func(addr, reg, 1, val, 1);
108 for (i = 7; i >= 6; i--)
109 printf("SAFEOUT%d %s\n", 7 - i + 1,
110 val[0] & (1 << i) ? "on" : "off");
114 static int pmic_ldo_control(int buck, int ldo, int safeout, int on)
116 unsigned char addr, val[2];
117 unsigned int reg, shift;
125 } else if (ldo <= 13) {
128 } else if (ldo <= 17) {
130 shift = 17 - ldo + 4;
137 shift = 4 - buck + 4;
138 } else if (safeout) {
151 i2c_read_func(addr, reg, 1, val, 1);
153 val[0] |= (1 << shift);
155 val[0] &= ~(1 << shift);
156 i2c_write(addr, reg, 1, val, 1);
157 i2c_read_func(addr, reg, 1, val, 1);
162 static int do_pmic(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
164 int buck = 0, ldo = 0, safeout = 0, on = -1;
169 if (strncmp(argv[1], "status", 6) == 0)
170 return pmic_status();
173 if (strncmp(argv[1], "ldo", 3) == 0)
174 ldo = simple_strtoul(argv[2], NULL, 10);
175 else if (strncmp(argv[1], "buck", 4) == 0)
176 buck = simple_strtoul(argv[2], NULL, 10);
177 else if (strncmp(argv[1], "safeout", 7) == 0)
178 safeout = simple_strtoul(argv[2], NULL, 10);
182 if (strncmp(argv[3], "on", 2) == 0)
184 else if (strncmp(argv[3], "off", 3) == 0)
189 ret = pmic_ldo_control(buck, ldo, safeout, on);
192 printf("%s %s %s\n", argv[1], argv[2], argv[3]);
205 "PMIC LDO & BUCK control",
206 "status - Display PMIC LDO & BUCK status\n"
207 "pmic ldo num on/off - Turn on/off the LDO\n"
208 "pmic buck num on/off - Turn on/off the BUCK\n"
209 "pmic safeout num on/off - Turn on/off the SAFEOUT\n"