1
1
Files
zyxel-vmg8825_b50b-cfw/package/boot/uboot-zyxel/files/lib_zloader/cmd_zgpio.c
T
2026-04-17 18:33:03 +02:00

58 lines
1.6 KiB
C

#include <common.h>
#include <command.h>
#ifdef CONFIG_ZGPIO_CMD
#include <zgpio.h>
int do_zgpio(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
{
int pio, val;
if ( argc == 2 && argv[1][0]=='d' ) {
dump_pio_regs();
return 0;
}
if ( argc <3 ) {
return -1;
}
pio = simple_strtoul(argv[2], NULL, 0);
if ( pio > max_pio_num() ) {
return -1;
}
if ( argc > 3 ) {
val = simple_strtoul(argv[3], NULL, 0);
if ( argv[1][0]=='s') {
if ( configure_pio(pio, val?ZGPIO_CONFIG_INPUT:ZGPIO_CONFIG_OUTPUT) ) {
printf("Fail to configure PIO %d as %s\n", pio, val?"Input":"Output");
return -1;
}
printf("Configure PIO %d as %s\n", pio, val?"Input":"Output");
} else if ( argv[1][0]=='w') {
if (set_pio(pio, val?ZGPIO_LEVEL_HIGH:ZGPIO_LEVEL_LOW)) {
printf("Fail to set PIO %d to %s\n", pio, val?"High":"Low");
return -1;
}
printf("Set PIO %d to %s\n", pio, val?"High":"Low");
}
} else if ( argv[1][0]=='r' ) {
if ( get_pio(pio, &val) ) {
printf("Fail to read PIO %d\n", pio);
return -1;
}
printf("PIO %d is %s\n", pio, val?"High":"Low");
} else {
return -1;
}
return 0;
}
U_BOOT_CMD(
zgpio, 4, 0, do_zgpio,
"GPIO access",
"s <pio> <dir> - PIO setup\n"
"zgpio w <pio> <0|1> - PIO output\n"
"zgpio r <pio> - PIO input\n"
"zgpio d - dump PIO registers\n"
);
#endif