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> 11c0b38c6cSJoseph Chen 12c0b38c6cSJoseph Chen static int charge_display(cmd_tbl_t *cmdtp, int flag, int argc, 13c0b38c6cSJoseph Chen char *const argv[]) 14c0b38c6cSJoseph Chen { 15*05b73bbbSJoseph Chen int on_soc, on_voltage, screen_voltage; 16*05b73bbbSJoseph Chen int ret, save[3]; 17c0b38c6cSJoseph Chen struct udevice *dev; 18c0b38c6cSJoseph Chen 19*05b73bbbSJoseph Chen if (argc != 4 && argc != 1) 20c0b38c6cSJoseph Chen return CMD_RET_USAGE; 21c0b38c6cSJoseph Chen 22c0b38c6cSJoseph Chen ret = uclass_get_device(UCLASS_CHARGE_DISPLAY, 0, &dev); 23c0b38c6cSJoseph Chen if (ret) { 24c0b38c6cSJoseph Chen if (ret != -ENODEV) { 25c0b38c6cSJoseph Chen printf("Get UCLASS CHARGE DISPLAY failed: %d\n", ret); 26c0b38c6cSJoseph Chen return ret; 27c0b38c6cSJoseph Chen } 28c0b38c6cSJoseph Chen 29c0b38c6cSJoseph Chen return 0; 30c0b38c6cSJoseph Chen } 31c0b38c6cSJoseph Chen 32*05b73bbbSJoseph Chen if (argc == 4) { 33*05b73bbbSJoseph Chen save[0] = charge_display_get_power_on_soc(dev); 34*05b73bbbSJoseph Chen save[1] = charge_display_get_power_on_voltage(dev); 35*05b73bbbSJoseph Chen save[2] = charge_display_get_screen_on_voltage(dev); 36*05b73bbbSJoseph Chen 37*05b73bbbSJoseph Chen on_soc = simple_strtoul(argv[1], NULL, 0); 38*05b73bbbSJoseph Chen on_voltage = simple_strtoul(argv[2], NULL, 0); 39*05b73bbbSJoseph Chen screen_voltage = simple_strtoul(argv[3], NULL, 0); 40*05b73bbbSJoseph Chen debug("new: on_soc=%d, on_voltage=%d, screen_voltage=%d\n", 41*05b73bbbSJoseph Chen on_soc, on_voltage, screen_voltage); 42*05b73bbbSJoseph Chen 43*05b73bbbSJoseph Chen charge_display_set_power_on_soc(dev, on_soc); 44*05b73bbbSJoseph Chen charge_display_set_power_on_voltage(dev, on_voltage); 45*05b73bbbSJoseph Chen charge_display_set_screen_on_voltage(dev, screen_voltage); 46*05b73bbbSJoseph Chen 47*05b73bbbSJoseph Chen charge_display_show(dev); 48*05b73bbbSJoseph Chen 49*05b73bbbSJoseph Chen charge_display_set_power_on_soc(dev, save[0]); 50*05b73bbbSJoseph Chen charge_display_set_power_on_voltage(dev, save[1]); 51*05b73bbbSJoseph Chen charge_display_set_screen_on_voltage(dev, save[2]); 52*05b73bbbSJoseph Chen 53*05b73bbbSJoseph Chen } else if (argc == 1) { 54*05b73bbbSJoseph Chen charge_display_show(dev); 55*05b73bbbSJoseph Chen } else { 56*05b73bbbSJoseph Chen return CMD_RET_USAGE; 57c0b38c6cSJoseph Chen } 58c0b38c6cSJoseph Chen 59*05b73bbbSJoseph Chen return 0; 60*05b73bbbSJoseph Chen } 61*05b73bbbSJoseph Chen 62*05b73bbbSJoseph Chen U_BOOT_CMD(charge, 4, 0, charge_display, 63c0b38c6cSJoseph Chen "Charge display", 64*05b73bbbSJoseph Chen "-charge\n" 65*05b73bbbSJoseph Chen "-charge <power on soc> <power on voltage> <screen on voltage>" 66c0b38c6cSJoseph Chen ); 67