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