xref: /rk3399_rockchip-uboot/cmd/charge.c (revision ac1dc0c37a5bde2bf6a399028a52c0fbe3f99d65)
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>
11*ac1dc0c3SJoseph Chen #include <power/charge_animation.h>
12c0b38c6cSJoseph Chen 
13c0b38c6cSJoseph Chen static int charge_display(cmd_tbl_t *cmdtp, int flag, int argc,
14c0b38c6cSJoseph Chen 			  char *const argv[])
15c0b38c6cSJoseph Chen {
1605b73bbbSJoseph Chen 	int on_soc, on_voltage, screen_voltage;
1705b73bbbSJoseph Chen 	int ret, save[3];
18c0b38c6cSJoseph Chen 	struct udevice *dev;
19*ac1dc0c3SJoseph Chen 	struct charge_animation_pdata *pdata;
20c0b38c6cSJoseph Chen 
2105b73bbbSJoseph Chen 	if (argc != 4 && argc != 1)
22c0b38c6cSJoseph Chen 		return CMD_RET_USAGE;
23c0b38c6cSJoseph Chen 
24c0b38c6cSJoseph Chen 	ret = uclass_get_device(UCLASS_CHARGE_DISPLAY, 0, &dev);
25c0b38c6cSJoseph Chen 	if (ret) {
26c0b38c6cSJoseph Chen 		if (ret != -ENODEV) {
27c0b38c6cSJoseph Chen 			printf("Get UCLASS CHARGE DISPLAY failed: %d\n", ret);
28c0b38c6cSJoseph Chen 			return ret;
29c0b38c6cSJoseph Chen 		}
30c0b38c6cSJoseph Chen 
31c0b38c6cSJoseph Chen 		return 0;
32c0b38c6cSJoseph Chen 	}
33c0b38c6cSJoseph Chen 
3405b73bbbSJoseph Chen 	if (argc == 4) {
35*ac1dc0c3SJoseph Chen 		pdata = dev_get_platdata(dev);
36*ac1dc0c3SJoseph Chen 		save[0] = pdata->exit_charge_level;
37*ac1dc0c3SJoseph Chen 		save[1] = pdata->exit_charge_voltage;
38*ac1dc0c3SJoseph Chen 		save[2] = pdata->screen_on_voltage;
3905b73bbbSJoseph Chen 
4005b73bbbSJoseph Chen 		on_soc = simple_strtoul(argv[1], NULL, 0);
4105b73bbbSJoseph Chen 		on_voltage = simple_strtoul(argv[2], NULL, 0);
4205b73bbbSJoseph Chen 		screen_voltage = simple_strtoul(argv[3], NULL, 0);
4305b73bbbSJoseph Chen 		debug("new: on_soc=%d, on_voltage=%d, screen_voltage=%d\n",
4405b73bbbSJoseph Chen 		      on_soc, on_voltage, screen_voltage);
4505b73bbbSJoseph Chen 
46*ac1dc0c3SJoseph Chen 		pdata->exit_charge_level = on_soc;
47*ac1dc0c3SJoseph Chen 		pdata->exit_charge_voltage = on_voltage;
48*ac1dc0c3SJoseph Chen 		pdata->screen_on_voltage = screen_voltage;
4905b73bbbSJoseph Chen 
5005b73bbbSJoseph Chen 		charge_display_show(dev);
5105b73bbbSJoseph Chen 
52*ac1dc0c3SJoseph Chen 		pdata->exit_charge_level = save[0];
53*ac1dc0c3SJoseph Chen 		pdata->exit_charge_voltage = save[1];
54*ac1dc0c3SJoseph Chen 		pdata->screen_on_voltage = save[2];
5505b73bbbSJoseph Chen 	} else if (argc == 1) {
5605b73bbbSJoseph Chen 		charge_display_show(dev);
5705b73bbbSJoseph Chen 	} else {
5805b73bbbSJoseph Chen 		return CMD_RET_USAGE;
59c0b38c6cSJoseph Chen 	}
60c0b38c6cSJoseph Chen 
6105b73bbbSJoseph Chen 	return 0;
6205b73bbbSJoseph Chen }
6305b73bbbSJoseph Chen 
6405b73bbbSJoseph Chen U_BOOT_CMD(charge, 4, 0, charge_display,
65c0b38c6cSJoseph Chen 	   "Charge display",
6605b73bbbSJoseph Chen 	   "-charge\n"
6705b73bbbSJoseph Chen 	   "-charge <power on soc> <power on voltage> <screen on voltage>"
68c0b38c6cSJoseph Chen );
69