xref: /rk3399_rockchip-uboot/cmd/charge.c (revision 05b73bbbfe7617d18be96c9b5a2c30da356496a8)
1c0b38c6cSJoseph Chen /*
2c0b38c6cSJoseph Chen  * (C) Copyright 2017 Rockchip Electronics Co., Ltd
3c0b38c6cSJoseph Chen  *
4c0b38c6cSJoseph Chen  * SPDX-License-Identifier:     GPL-2.0+
5c0b38c6cSJoseph Chen  */
6c0b38c6cSJoseph Chen 
7c0b38c6cSJoseph Chen #include <common.h>
8c0b38c6cSJoseph Chen #include <command.h>
9c0b38c6cSJoseph Chen #include <dm.h>
10c0b38c6cSJoseph Chen #include <power/charge_display.h>
11c0b38c6cSJoseph Chen 
12c0b38c6cSJoseph Chen static int charge_display(cmd_tbl_t *cmdtp, int flag, int argc,
13c0b38c6cSJoseph Chen 			  char *const argv[])
14c0b38c6cSJoseph Chen {
15*05b73bbbSJoseph Chen 	int on_soc, on_voltage, screen_voltage;
16*05b73bbbSJoseph Chen 	int ret, save[3];
17c0b38c6cSJoseph Chen 	struct udevice *dev;
18c0b38c6cSJoseph Chen 
19*05b73bbbSJoseph Chen 	if (argc != 4 && argc != 1)
20c0b38c6cSJoseph Chen 		return CMD_RET_USAGE;
21c0b38c6cSJoseph Chen 
22c0b38c6cSJoseph Chen 	ret = uclass_get_device(UCLASS_CHARGE_DISPLAY, 0, &dev);
23c0b38c6cSJoseph Chen 	if (ret) {
24c0b38c6cSJoseph Chen 		if (ret != -ENODEV) {
25c0b38c6cSJoseph Chen 			printf("Get UCLASS CHARGE DISPLAY failed: %d\n", ret);
26c0b38c6cSJoseph Chen 			return ret;
27c0b38c6cSJoseph Chen 		}
28c0b38c6cSJoseph Chen 
29c0b38c6cSJoseph Chen 		return 0;
30c0b38c6cSJoseph Chen 	}
31c0b38c6cSJoseph Chen 
32*05b73bbbSJoseph Chen 	if (argc == 4) {
33*05b73bbbSJoseph Chen 		save[0] = charge_display_get_power_on_soc(dev);
34*05b73bbbSJoseph Chen 		save[1] = charge_display_get_power_on_voltage(dev);
35*05b73bbbSJoseph Chen 		save[2] = charge_display_get_screen_on_voltage(dev);
36*05b73bbbSJoseph Chen 
37*05b73bbbSJoseph Chen 		on_soc = simple_strtoul(argv[1], NULL, 0);
38*05b73bbbSJoseph Chen 		on_voltage = simple_strtoul(argv[2], NULL, 0);
39*05b73bbbSJoseph Chen 		screen_voltage = simple_strtoul(argv[3], NULL, 0);
40*05b73bbbSJoseph Chen 		debug("new: on_soc=%d, on_voltage=%d, screen_voltage=%d\n",
41*05b73bbbSJoseph Chen 		      on_soc, on_voltage, screen_voltage);
42*05b73bbbSJoseph Chen 
43*05b73bbbSJoseph Chen 		charge_display_set_power_on_soc(dev, on_soc);
44*05b73bbbSJoseph Chen 		charge_display_set_power_on_voltage(dev, on_voltage);
45*05b73bbbSJoseph Chen 		charge_display_set_screen_on_voltage(dev, screen_voltage);
46*05b73bbbSJoseph Chen 
47*05b73bbbSJoseph Chen 		charge_display_show(dev);
48*05b73bbbSJoseph Chen 
49*05b73bbbSJoseph Chen 		charge_display_set_power_on_soc(dev, save[0]);
50*05b73bbbSJoseph Chen 		charge_display_set_power_on_voltage(dev, save[1]);
51*05b73bbbSJoseph Chen 		charge_display_set_screen_on_voltage(dev, save[2]);
52*05b73bbbSJoseph Chen 
53*05b73bbbSJoseph Chen 	} else if (argc == 1) {
54*05b73bbbSJoseph Chen 		charge_display_show(dev);
55*05b73bbbSJoseph Chen 	} else {
56*05b73bbbSJoseph Chen 		return CMD_RET_USAGE;
57c0b38c6cSJoseph Chen 	}
58c0b38c6cSJoseph Chen 
59*05b73bbbSJoseph Chen 	return 0;
60*05b73bbbSJoseph Chen }
61*05b73bbbSJoseph Chen 
62*05b73bbbSJoseph Chen U_BOOT_CMD(charge, 4, 0, charge_display,
63c0b38c6cSJoseph Chen 	   "Charge display",
64*05b73bbbSJoseph Chen 	   "-charge\n"
65*05b73bbbSJoseph Chen 	   "-charge <power on soc> <power on voltage> <screen on voltage>"
66c0b38c6cSJoseph Chen );
67