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