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 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