Message ID | 20220622085931.1205590-1-kory.maincent@bootlin.com |
---|---|
State | Accepted |
Commit | 98ac7857f9674a98e6ea886b3dccc782efeacadb |
Delegated to: | Marek Vasut |
Headers | show |
Series | usb: kbd: allow probing even if usbkbd not in stdin | expand |
On 6/22/22 10:59, kory.maincent@bootlin.com wrote: > From: Kory Maincent <kory.maincent@bootlin.com> > > For now the driver does not probe if usbkbd was not present in stdin. > This presents two issues, we can not probe the driver before setting stdin Environment should be up and running before USB, so this is likely not a problem. > and we can not use this driver in other manner than stdin console. > > This patch fixes this by adding an else statement. It simply probes the > driver without console management in the case "usbkbd" is not in stdin. Can you document the usecase in a bit more detail ? What exactly is the problem you are solving here ? > stdinname = env_get("stdin"); > #if CONFIG_IS_ENABLED(CONSOLE_MUX) > - error = iomux_doenv(stdin, stdinname); > - if (error) > - return error; > + if (strstr(stdinname, DEVNAME) != NULL) { > + error = iomux_doenv(stdin, stdinname); > + if (error) > + return error; > + } > #else > /* Check if this is the standard input device. */ > - if (strcmp(stdinname, DEVNAME)) > - return 1; > - > - /* Reassign the console */ > - if (overwrite_console()) > - return 1; > + if (!strcmp(stdinname, DEVNAME)) { Maybe use strcmp() == NULL to be consistent with the != NULL check above ?
Hello Marek, On Fri, 24 Jun 2022 20:12:31 +0200 Marek Vasut <marex@denx.de> wrote: > On 6/22/22 10:59, kory.maincent@bootlin.com wrote: > > From: Kory Maincent <kory.maincent@bootlin.com> > > > > For now the driver does not probe if usbkbd was not present in stdin. > > This presents two issues, we can not probe the driver before setting stdin > > Environment should be up and running before USB, so this is likely not a > problem. Having a driver probing only in this specific state is weird? It should probe whatever the state of stdin. > > > and we can not use this driver in other manner than stdin console. > > > > This patch fixes this by adding an else statement. It simply probes the > > driver without console management in the case "usbkbd" is not in stdin. > > Can you document the usecase in a bit more detail ? My usecase is to get a key press from the USB keyboard and do some thing about it in board_init. I do not want to multiplex the keyboard input to stdin but I still want to read character from it. > What exactly is the problem you are solving here ? > > stdinname = env_get("stdin"); > > #if CONFIG_IS_ENABLED(CONSOLE_MUX) > > - error = iomux_doenv(stdin, stdinname); > > - if (error) > > - return error; > > + if (strstr(stdinname, DEVNAME) != NULL) { > > + error = iomux_doenv(stdin, stdinname); > > + if (error) > > + return error; > > + } > > #else > > /* Check if this is the standard input device. */ > > - if (strcmp(stdinname, DEVNAME)) > > - return 1; > > - > > - /* Reassign the console */ > > - if (overwrite_console()) > > - return 1; > > + if (!strcmp(stdinname, DEVNAME)) { > > Maybe use strcmp() == NULL to be consistent with the != NULL check above ? Yes, you are right. Regards, Köry
On 6/27/22 12:03, Köry Maincent wrote: > Hello Marek, > > On Fri, 24 Jun 2022 20:12:31 +0200 > Marek Vasut <marex@denx.de> wrote: > >> On 6/22/22 10:59, kory.maincent@bootlin.com wrote: >>> From: Kory Maincent <kory.maincent@bootlin.com> >>> >>> For now the driver does not probe if usbkbd was not present in stdin. >>> This presents two issues, we can not probe the driver before setting stdin >> >> Environment should be up and running before USB, so this is likely not a >> problem. > > Having a driver probing only in this specific state is weird? > It should probe whatever the state of stdin. > >> >>> and we can not use this driver in other manner than stdin console. >>> >>> This patch fixes this by adding an else statement. It simply probes the >>> driver without console management in the case "usbkbd" is not in stdin. >> >> Can you document the usecase in a bit more detail ? > > My usecase is to get a key press from the USB keyboard and do some thing about > it in board_init. I do not want to multiplex the keyboard input to stdin but I > still want to read character from it. All right, understood, both. Thanks for clarification. I applied this to usb/next , I hope that's OK ?
On Mon, 27 Jun 2022 13:39:03 +0200 Marek Vasut <marex@denx.de> wrote: > >> Can you document the usecase in a bit more detail ? > > > > My usecase is to get a key press from the USB keyboard and do some thing > > about it in board_init. I do not want to multiplex the keyboard input to > > stdin but I still want to read character from it. > > All right, understood, both. Thanks for clarification. > > I applied this to usb/next , I hope that's OK ? Great! Thanks! Köry
diff --git a/common/usb_kbd.c b/common/usb_kbd.c index 352d86fb2e..d385bea532 100644 --- a/common/usb_kbd.c +++ b/common/usb_kbd.c @@ -581,21 +581,22 @@ static int probe_usb_keyboard(struct usb_device *dev) stdinname = env_get("stdin"); #if CONFIG_IS_ENABLED(CONSOLE_MUX) - error = iomux_doenv(stdin, stdinname); - if (error) - return error; + if (strstr(stdinname, DEVNAME) != NULL) { + error = iomux_doenv(stdin, stdinname); + if (error) + return error; + } #else /* Check if this is the standard input device. */ - if (strcmp(stdinname, DEVNAME)) - return 1; - - /* Reassign the console */ - if (overwrite_console()) - return 1; + if (!strcmp(stdinname, DEVNAME)) { + /* Reassign the console */ + if (overwrite_console()) + return 1; - error = console_assign(stdin, DEVNAME); - if (error) - return error; + error = console_assign(stdin, DEVNAME); + if (error) + return error; + } #endif return 0;