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