Blame view
cmd/pinmux.c
3.34 KB
d5a831390 cmd: pinmux: Add ... |
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 |
// SPDX-License-Identifier: GPL-2.0+ /* * Copyright (C) 2018, STMicroelectronics - All Rights Reserved */ #include <common.h> #include <command.h> #include <dm.h> #include <errno.h> #include <dm/pinctrl.h> #include <dm/uclass-internal.h> #define LIMIT_DEVNAME 30 static struct udevice *currdev; static int do_dev(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { const char *name; int ret; switch (argc) { case 2: name = argv[1]; ret = uclass_get_device_by_name(UCLASS_PINCTRL, name, &currdev); if (ret) { printf("Can't get the pin-controller: %s! ", name); return CMD_RET_FAILURE; } |
d23aef176 cmd: pinmux: Fix ... |
31 |
/* fall through */ |
d5a831390 cmd: pinmux: Add ... |
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 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 |
case 1: if (!currdev) { printf("Pin-controller device is not set! "); return CMD_RET_USAGE; } printf("dev: %s ", currdev->name); } return CMD_RET_SUCCESS; } static int show_pinmux(struct udevice *dev) { char pin_name[PINNAME_SIZE]; char pin_mux[PINMUX_SIZE]; int pins_count; int i; int ret; pins_count = pinctrl_get_pins_count(dev); if (pins_count == -ENOSYS) { printf("Ops get_pins_count not supported "); return pins_count; } for (i = 0; i < pins_count; i++) { ret = pinctrl_get_pin_name(dev, i, pin_name, PINNAME_SIZE); if (ret == -ENOSYS) { printf("Ops get_pin_name not supported "); return ret; } ret = pinctrl_get_pin_muxing(dev, i, pin_mux, PINMUX_SIZE); if (ret) { printf("Ops get_pin_muxing error (%d) ", ret); return ret; } printf("%-*s: %-*s ", PINNAME_SIZE, pin_name, PINMUX_SIZE, pin_mux); } return 0; } static int do_status(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { struct udevice *dev; int ret = CMD_RET_USAGE; if (currdev && (argc < 2 || strcmp(argv[1], "-a"))) return show_pinmux(currdev); if (argc < 2 || strcmp(argv[1], "-a")) return ret; uclass_foreach_dev_probe(UCLASS_PINCTRL, dev) { /* insert a separator between each pin-controller display */ printf("-------------------------- "); printf("%s: ", dev->name); ret = show_pinmux(dev); if (ret < 0) printf("Can't display pin muxing for %s ", dev->name); } return ret; } static int do_list(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { struct udevice *dev; printf("| %-*.*s| %-*.*s| %s ", LIMIT_DEVNAME, LIMIT_DEVNAME, "Device", LIMIT_DEVNAME, LIMIT_DEVNAME, "Driver", "Parent"); uclass_foreach_dev_probe(UCLASS_PINCTRL, dev) { printf("| %-*.*s| %-*.*s| %s ", LIMIT_DEVNAME, LIMIT_DEVNAME, dev->name, LIMIT_DEVNAME, LIMIT_DEVNAME, dev->driver->name, dev->parent->name); } return CMD_RET_SUCCESS; } static cmd_tbl_t pinmux_subcmd[] = { U_BOOT_CMD_MKENT(dev, 2, 1, do_dev, "", ""), U_BOOT_CMD_MKENT(list, 1, 1, do_list, "", ""), U_BOOT_CMD_MKENT(status, 2, 1, do_status, "", ""), }; static int do_pinmux(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { cmd_tbl_t *cmd; argc--; argv++; cmd = find_cmd_tbl(argv[0], pinmux_subcmd, ARRAY_SIZE(pinmux_subcmd)); if (!cmd || argc > cmd->maxargs) return CMD_RET_USAGE; return cmd->cmd(cmdtp, flag, argc, argv); } U_BOOT_CMD(pinmux, CONFIG_SYS_MAXARGS, 1, do_pinmux, "show pin-controller muxing", "list - list UCLASS_PINCTRL devices " "pinmux dev [pincontroller-name] - select pin-controller device " "pinmux status [-a] - print pin-controller muxing [for all] " ) |