Blame view
cmd/demo.c
2.85 KB
d41ce506b Initial Release, ... |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 |
/* * Copyright (c) 2013 Google, Inc * * (C) Copyright 2012 * Pavel Herrmann <morpheus.ibis@gmail.com> * * SPDX-License-Identifier: GPL-2.0+ */ #include <common.h> #include <dm-demo.h> #include <mapmem.h> #include <asm/io.h> struct udevice *demo_dev; static int do_demo_hello(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { int ch = 0; if (argc) ch = *argv[0]; return demo_hello(demo_dev, ch); } static int do_demo_status(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { int status; int ret; ret = demo_status(demo_dev, &status); if (ret) return ret; printf("Status: %d ", status); return 0; } static int do_demo_light(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { int light; int ret; if (argc) { light = simple_strtoul(argv[0], NULL, 16); ret = demo_set_light(demo_dev, light); } else { ret = demo_get_light(demo_dev); if (ret >= 0) { printf("Light: %x ", ret); ret = 0; } } return ret; } int do_demo_list(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { struct udevice *dev; int i, ret; puts("Demo uclass entries: "); for (i = 0, ret = uclass_first_device(UCLASS_DEMO, &dev); dev; ret = uclass_next_device(&dev)) { printf("entry %d - instance %08x, ops %08x, platdata %08x ", i++, (uint)map_to_sysmem(dev), (uint)map_to_sysmem(dev->driver->ops), (uint)map_to_sysmem(dev_get_platdata(dev))); } return cmd_process_error(cmdtp, ret); } static cmd_tbl_t demo_commands[] = { U_BOOT_CMD_MKENT(list, 0, 1, do_demo_list, "", ""), U_BOOT_CMD_MKENT(hello, 2, 1, do_demo_hello, "", ""), U_BOOT_CMD_MKENT(light, 2, 1, do_demo_light, "", ""), U_BOOT_CMD_MKENT(status, 1, 1, do_demo_status, "", ""), }; static int do_demo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { cmd_tbl_t *demo_cmd; int devnum = 0; int ret; if (argc < 2) return CMD_RET_USAGE; demo_cmd = find_cmd_tbl(argv[1], demo_commands, ARRAY_SIZE(demo_commands)); argc -= 2; argv += 2; if ((!demo_cmd || argc > demo_cmd->maxargs) || ((demo_cmd->name[0] != 'l') && (argc < 1))) return CMD_RET_USAGE; if (argc) { devnum = simple_strtoul(argv[0], NULL, 10); ret = uclass_get_device(UCLASS_DEMO, devnum, &demo_dev); if (ret) return cmd_process_error(cmdtp, ret); argc--; argv++; } else { demo_dev = NULL; if (demo_cmd->cmd != do_demo_list) return CMD_RET_USAGE; } ret = demo_cmd->cmd(demo_cmd, flag, argc, argv); return cmd_process_error(demo_cmd, ret); } U_BOOT_CMD( demo, 4, 1, do_demo, "Driver model (dm) demo operations", "list List available demo devices " "demo hello <num> [<char>] Say hello " "demo light [<num>] Set or get the lights " "demo status <num> Get demo device status " "demo list List available demo devices" ); |