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