xref: /rk3399_rockchip-uboot/cmd/charge.c (revision 92916bd121af8b134bea5ebc3d9c2632184132dc)
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