Loading...
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 | // SPDX-License-Identifier: GPL-2.0+ /* * Copyright (c) 2013 Google, Inc * * (C) Copyright 2012 * Pavel Herrmann <morpheus.ibis@gmail.com> */ #include <common.h> #include <command.h> #include <dm-demo.h> #include <mapmem.h> #include <asm/io.h> struct udevice *demo_dev; static int do_demo_hello(struct cmd_tbl *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(struct cmd_tbl *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\n", status); return 0; } static int do_demo_light(struct cmd_tbl *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\n", ret); ret = 0; } } return ret; } int do_demo_list(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[]) { struct udevice *dev; int i, ret; puts("Demo uclass entries:\n"); 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\n", 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 struct cmd_tbl 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(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[]) { struct cmd_tbl *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\n" "demo hello <num> [<char>] Say hello\n" "demo light [<num>] Set or get the lights\n" "demo status <num> Get demo device status\n" "demo list List available demo devices" ); |