Re: [PATCH RFC v2 4/5] selftest: gpio: Add wait flag to gpio-mockup-cdev

2024-10-28 Thread Linus Walleij
On Fri, Oct 25, 2024 at 9:46 PM Nícolas F. R. A. Prado
 wrote:


> Add a -w flag to the gpio-mockup-cdev utility that causes the program to
> wait until a signal is received before exiting, even when its behavior
> is to retrieve the GPIO value of the line. This allows using this
> utility to keep a GPIO line configured even when in input mode, which
> will be relied on in other tests.
>
> Signed-off-by: Nícolas F. R. A. Prado 

Bartosz has to look at this patch!

But overall the idea looks sound to me.

Yours,
Linus Walleij



[PATCH RFC v2 4/5] selftest: gpio: Add wait flag to gpio-mockup-cdev

2024-10-25 Thread Nícolas F . R . A . Prado
Add a -w flag to the gpio-mockup-cdev utility that causes the program to
wait until a signal is received before exiting, even when its behavior
is to retrieve the GPIO value of the line. This allows using this
utility to keep a GPIO line configured even when in input mode, which
will be relied on in other tests.

Signed-off-by: Nícolas F. R. A. Prado 
---
 tools/testing/selftests/gpio/gpio-mockup-cdev.c | 14 +++---
 1 file changed, 11 insertions(+), 3 deletions(-)

diff --git a/tools/testing/selftests/gpio/gpio-mockup-cdev.c 
b/tools/testing/selftests/gpio/gpio-mockup-cdev.c
index 
d1640f44f8ac2a6fda7a5f75605f83fcaa165dc0..f674dcafa60a02cb1739f3cfae8963dc09efba74
 100644
--- a/tools/testing/selftests/gpio/gpio-mockup-cdev.c
+++ b/tools/testing/selftests/gpio/gpio-mockup-cdev.c
@@ -15,6 +15,7 @@
 #include 
 #include 
 #include 
+#include 
 
 #define CONSUMER   "gpio-mockup-cdev"
 
@@ -95,6 +96,7 @@ static void usage(char *prog)
printf("   (default is to leave bias unchanged):\n");
printf("-l: set line active low (default is active high)\n");
printf("-s: set line value (default is to get line value)\n");
+   printf("-w: wait even in get mode\n");
printf("-u: uAPI version to use (default is 2)\n");
exit(-1);
 }
@@ -120,13 +122,14 @@ int main(int argc, char *argv[])
unsigned int offset, val = 0, abiv;
uint32_t flags_v1;
uint64_t flags_v2;
+   bool wait = false;
 
abiv = 2;
ret = 0;
flags_v1 = GPIOHANDLE_REQUEST_INPUT;
flags_v2 = GPIO_V2_LINE_FLAG_INPUT;
 
-   while ((opt = getopt(argc, argv, "lb:s:u:")) != -1) {
+   while ((opt = getopt(argc, argv, "lb:s:u:w")) != -1) {
switch (opt) {
case 'l':
flags_v1 |= GPIOHANDLE_REQUEST_ACTIVE_LOW;
@@ -150,10 +153,14 @@ int main(int argc, char *argv[])
flags_v1 |= GPIOHANDLE_REQUEST_OUTPUT;
flags_v2 &= ~GPIO_V2_LINE_FLAG_INPUT;
flags_v2 |= GPIO_V2_LINE_FLAG_OUTPUT;
+   wait = true;
break;
case 'u':
abiv = atoi(optarg);
break;
+   case 'w':
+   wait = true;
+   break;
default:
usage(argv[0]);
}
@@ -183,9 +190,10 @@ int main(int argc, char *argv[])
return lfd;
}
 
-   if (flags_v2 & GPIO_V2_LINE_FLAG_OUTPUT) {
+   if (wait)
wait_signal();
-   } else {
+
+   if (flags_v2 & GPIO_V2_LINE_FLAG_INPUT) {
if (abiv == 1)
ret = get_value_v1(lfd);
else

-- 
2.47.0