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