Lines Matching +full:gpio +full:- +full:mux

9 #include "console-server.h"
10 #include "console-mux.h"
23 static const char *key_mux_gpios = "mux-gpios";
24 static const char *key_mux_index = "mux-index";
57 length = comma - current; in extract_mux_gpio_name()
76 console_mux_find_gpio_by_index(struct console_gpio *gpio, in console_mux_find_gpio_by_index() argument
81 gpio->name = extract_mux_gpio_name(config_gpio_names); in console_mux_find_gpio_by_index()
82 if (gpio->name == NULL) { in console_mux_find_gpio_by_index()
83 warnx("could not extract mux gpio name from config '%s'", in console_mux_find_gpio_by_index()
88 gpio->line = gpiod_line_find(gpio->name); in console_mux_find_gpio_by_index()
89 if (gpio->line == NULL) { in console_mux_find_gpio_by_index()
90 warnx("libgpiod: could not find line %s", gpio->name); in console_mux_find_gpio_by_index()
91 free(gpio->name); in console_mux_find_gpio_by_index()
95 return gpio; in console_mux_find_gpio_by_index()
101 for (unsigned long i = 0; i < server->mux->n_mux_gpios; i++) { in console_mux_release_gpio_lines()
102 struct console_gpio *gpio = &server->mux->mux_gpios[i]; in console_mux_release_gpio_lines() local
103 gpiod_line_release(gpio->line); in console_mux_release_gpio_lines()
104 gpiod_line_close_chip(gpio->line); in console_mux_release_gpio_lines()
106 free(gpio->name); in console_mux_release_gpio_lines()
107 gpio->name = NULL; in console_mux_release_gpio_lines()
116 struct console_gpio *gpio; in console_mux_request_gpio_lines() local
119 for (server->mux->n_mux_gpios = 0; *current; in console_mux_request_gpio_lines()
120 server->mux->n_mux_gpios++) { in console_mux_request_gpio_lines()
121 size_t i = server->mux->n_mux_gpios; in console_mux_request_gpio_lines()
122 gpio = console_mux_find_gpio_by_index( in console_mux_request_gpio_lines()
123 &server->mux->mux_gpios[i], &current); in console_mux_request_gpio_lines()
124 if (gpio == NULL) { in console_mux_request_gpio_lines()
126 return -1; in console_mux_request_gpio_lines()
130 gpio->line, program_invocation_short_name, 0); in console_mux_request_gpio_lines()
132 warnx("could not set line %s as output", gpio->name); in console_mux_request_gpio_lines()
135 return -1; in console_mux_request_gpio_lines()
148 config_gpio_names = config_get_value(server->config, key_mux_gpios); in console_server_mux_init()
154 max_ngpios = sizeof(((struct console *)0)->mux_index) * CHAR_BIT; in console_server_mux_init()
156 return -1; in console_server_mux_init()
159 server->mux = calloc(1, sizeof(struct console_mux)); in console_server_mux_init()
160 if (!server->mux) { in console_server_mux_init()
161 return -1; in console_server_mux_init()
164 server->mux->n_mux_gpios = 0; in console_server_mux_init()
165 server->mux->mux_gpios = calloc(ngpios, sizeof(struct console_gpio)); in console_server_mux_init()
166 if (!server->mux->mux_gpios) { in console_server_mux_init()
167 return -1; in console_server_mux_init()
175 if (!server->mux) { in console_server_mux_fini()
181 free(server->mux->mux_gpios); in console_server_mux_fini()
182 server->mux->mux_gpios = NULL; in console_server_mux_fini()
184 free(server->mux); in console_server_mux_fini()
185 server->mux = NULL; in console_server_mux_fini()
190 if (!console->server->mux) { in console_mux_init()
194 if (console->server->mux->n_mux_gpios == 0) { in console_mux_init()
199 config, console->console_id, key_mux_index); in console_mux_init()
203 console->console_id, key_mux_index); in console_mux_init()
204 return -1; in console_mux_init()
208 console->mux_index = strtoul(gpio_value, NULL, 0); in console_mux_init()
210 return -1; in console_mux_init()
225 status = strftime(buffer, size, "%Y-%m-%d %H:%M:%S UTC", timeinfo); in console_timestamp()
243 status = asprintf(&buf, "[obmc-console] %s %s\n", buf_timestamp, in console_print_timestamped()
245 if (status == -1) { in console_print_timestamped()
246 return -1; in console_print_timestamped()
249 ringbuffer_queue(console->rb, (uint8_t *)buf, strlen(buf)); in console_print_timestamped()
260 for (size_t i = 0; i < console->server->mux->n_mux_gpios; i++) { in console_mux_set_lines()
261 struct console_gpio *gpio = &console->server->mux->mux_gpios[i]; in console_mux_set_lines() local
262 const uint8_t value = (console->mux_index >> i) & 0x1; in console_mux_set_lines()
264 status = gpiod_line_set_value(gpio->line, value); in console_mux_set_lines()
266 warnx("could not set line %s", gpio->name); in console_mux_set_lines()
267 return -1; in console_mux_set_lines()
276 struct console_server *server = console->server; in console_mux_activate()
277 const bool first_activation = server->active == NULL; in console_mux_activate()
278 const bool is_active = server->active == console; in console_mux_activate()
285 if (server->mux) { in console_mux_activate()
290 warnx("Error: unable to set mux gpios"); in console_mux_activate()
294 server->active = console; in console_mux_activate()
301 for (size_t i = 0; i < server->n_consoles; i++) { in console_mux_activate()
302 struct console *other = server->consoles[i]; in console_mux_activate()
308 for (long j = 0; j < other->n_handlers; j++) { in console_mux_activate()
309 struct handler *h = other->handlers[j]; in console_mux_activate()
311 if (h->type->deselect) { in console_mux_activate()
312 h->type->deselect(h); in console_mux_activate()