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>
11ac1dc0c3SJoseph Chen #include <power/charge_animation.h>
12c0b38c6cSJoseph Chen
do_charge_display(cmd_tbl_t * cmdtp,int flag,int argc,char * const argv[])1394cf1096SJoseph Chen static int do_charge_display(cmd_tbl_t *cmdtp, int flag, int argc,
14c0b38c6cSJoseph Chen char *const argv[])
15c0b38c6cSJoseph Chen {
16*90b678f6SJoseph Chen
17ac1dc0c3SJoseph Chen struct charge_animation_pdata *pdata;
18*90b678f6SJoseph Chen struct udevice *dev;
19*90b678f6SJoseph Chen int screen_voltage;
20*90b678f6SJoseph Chen int on_voltage;
21*90b678f6SJoseph Chen int on_soc;
22*90b678f6SJoseph Chen int save[3];
23*90b678f6SJoseph Chen int ret;
24c0b38c6cSJoseph Chen
2505b73bbbSJoseph Chen if (argc != 4 && argc != 1)
26c0b38c6cSJoseph Chen return CMD_RET_USAGE;
27c0b38c6cSJoseph Chen
28c0b38c6cSJoseph Chen ret = uclass_get_device(UCLASS_CHARGE_DISPLAY, 0, &dev);
29c0b38c6cSJoseph Chen if (ret) {
30c0b38c6cSJoseph Chen if (ret != -ENODEV) {
31c0b38c6cSJoseph Chen printf("Get UCLASS CHARGE DISPLAY failed: %d\n", ret);
32c0b38c6cSJoseph Chen return ret;
33c0b38c6cSJoseph Chen }
34c0b38c6cSJoseph Chen
35c0b38c6cSJoseph Chen return 0;
36c0b38c6cSJoseph Chen }
37c0b38c6cSJoseph Chen
3805b73bbbSJoseph Chen if (argc == 4) {
39ac1dc0c3SJoseph Chen pdata = dev_get_platdata(dev);
40ac1dc0c3SJoseph Chen save[0] = pdata->exit_charge_level;
41ac1dc0c3SJoseph Chen save[1] = pdata->exit_charge_voltage;
42ac1dc0c3SJoseph Chen save[2] = pdata->screen_on_voltage;
4305b73bbbSJoseph Chen
4405b73bbbSJoseph Chen on_soc = simple_strtoul(argv[1], NULL, 0);
4505b73bbbSJoseph Chen on_voltage = simple_strtoul(argv[2], NULL, 0);
4605b73bbbSJoseph Chen screen_voltage = simple_strtoul(argv[3], NULL, 0);
4705b73bbbSJoseph Chen debug("new: on_soc=%d, on_voltage=%d, screen_voltage=%d\n",
4805b73bbbSJoseph Chen on_soc, on_voltage, screen_voltage);
4905b73bbbSJoseph Chen
50ac1dc0c3SJoseph Chen pdata->exit_charge_level = on_soc;
51ac1dc0c3SJoseph Chen pdata->exit_charge_voltage = on_voltage;
52ac1dc0c3SJoseph Chen pdata->screen_on_voltage = screen_voltage;
5305b73bbbSJoseph Chen
5405b73bbbSJoseph Chen charge_display_show(dev);
5505b73bbbSJoseph Chen
56ac1dc0c3SJoseph Chen pdata->exit_charge_level = save[0];
57ac1dc0c3SJoseph Chen pdata->exit_charge_voltage = save[1];
58ac1dc0c3SJoseph Chen pdata->screen_on_voltage = save[2];
5905b73bbbSJoseph Chen } else if (argc == 1) {
6005b73bbbSJoseph Chen charge_display_show(dev);
6105b73bbbSJoseph Chen } else {
6205b73bbbSJoseph Chen return CMD_RET_USAGE;
63c0b38c6cSJoseph Chen }
64c0b38c6cSJoseph Chen
6505b73bbbSJoseph Chen return 0;
6605b73bbbSJoseph Chen }
6705b73bbbSJoseph Chen
6894cf1096SJoseph Chen U_BOOT_CMD(charge, 4, 0, do_charge_display,
69c0b38c6cSJoseph Chen "Charge display",
7005b73bbbSJoseph Chen "-charge\n"
7105b73bbbSJoseph Chen "-charge <power on soc> <power on voltage> <screen on voltage>"
72c0b38c6cSJoseph Chen );
73