|
|
|
@ -25,13 +25,6 @@ enum gpio_cmd { |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
#if defined(CONFIG_DM_GPIO) && !defined(gpio_status) |
|
|
|
|
static const char * const gpio_function[GPIOF_COUNT] = { |
|
|
|
|
"input", |
|
|
|
|
"output", |
|
|
|
|
"unused", |
|
|
|
|
"unknown", |
|
|
|
|
"func", |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
/* A few flags used by show_gpio() */ |
|
|
|
|
enum { |
|
|
|
@ -40,22 +33,16 @@ enum { |
|
|
|
|
FLAG_SHOW_NEWLINE = 1 << 2, |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
static void show_gpio(struct udevice *dev, const char *bank_name, int offset, |
|
|
|
|
int *flagsp) |
|
|
|
|
static void gpio_get_description(struct udevice *dev, const char *bank_name, |
|
|
|
|
int offset, int *flagsp) |
|
|
|
|
{ |
|
|
|
|
struct dm_gpio_ops *ops = gpio_get_ops(dev); |
|
|
|
|
int func = GPIOF_UNKNOWN; |
|
|
|
|
char buf[80]; |
|
|
|
|
int ret; |
|
|
|
|
|
|
|
|
|
BUILD_BUG_ON(GPIOF_COUNT != ARRAY_SIZE(gpio_function)); |
|
|
|
|
|
|
|
|
|
if (ops->get_function) { |
|
|
|
|
ret = ops->get_function(dev, offset); |
|
|
|
|
if (ret >= 0 && ret < ARRAY_SIZE(gpio_function)) |
|
|
|
|
func = ret; |
|
|
|
|
} |
|
|
|
|
if (!(*flagsp & FLAG_SHOW_ALL) && func == GPIOF_UNUSED) |
|
|
|
|
ret = gpio_get_function(dev, offset, NULL); |
|
|
|
|
if (ret < 0) |
|
|
|
|
goto err; |
|
|
|
|
if (!(*flagsp & FLAG_SHOW_ALL) && ret == GPIOF_UNUSED) |
|
|
|
|
return; |
|
|
|
|
if ((*flagsp & FLAG_SHOW_BANK) && bank_name) { |
|
|
|
|
if (*flagsp & FLAG_SHOW_NEWLINE) { |
|
|
|
@ -65,20 +52,15 @@ static void show_gpio(struct udevice *dev, const char *bank_name, int offset, |
|
|
|
|
printf("Bank %s:\n", bank_name); |
|
|
|
|
*flagsp &= ~FLAG_SHOW_BANK; |
|
|
|
|
} |
|
|
|
|
*buf = '\0'; |
|
|
|
|
if (ops->get_state) { |
|
|
|
|
ret = ops->get_state(dev, offset, buf, sizeof(buf)); |
|
|
|
|
if (ret) { |
|
|
|
|
puts("<unknown>"); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
sprintf(buf, "%s%u: %8s %d", bank_name, offset, |
|
|
|
|
gpio_function[func], ops->get_value(dev, offset)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
puts(buf); |
|
|
|
|
puts("\n"); |
|
|
|
|
ret = gpio_get_status(dev, offset, buf, sizeof(buf)); |
|
|
|
|
if (ret) |
|
|
|
|
goto err; |
|
|
|
|
|
|
|
|
|
printf("%s\n", buf); |
|
|
|
|
return; |
|
|
|
|
err: |
|
|
|
|
printf("Error %d\n", ret); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static int do_gpio_status(bool all, const char *gpio_name) |
|
|
|
@ -101,8 +83,10 @@ static int do_gpio_status(bool all, const char *gpio_name) |
|
|
|
|
if (all) |
|
|
|
|
flags |= FLAG_SHOW_ALL; |
|
|
|
|
bank_name = gpio_get_bank_info(dev, &num_bits); |
|
|
|
|
if (!num_bits) |
|
|
|
|
if (!num_bits) { |
|
|
|
|
debug("GPIO device %s has no bits\n", dev->name); |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
banklen = bank_name ? strlen(bank_name) : 0; |
|
|
|
|
|
|
|
|
|
if (!gpio_name || !bank_name || |
|
|
|
@ -113,11 +97,12 @@ static int do_gpio_status(bool all, const char *gpio_name) |
|
|
|
|
p = gpio_name + banklen; |
|
|
|
|
if (gpio_name && *p) { |
|
|
|
|
offset = simple_strtoul(p, NULL, 10); |
|
|
|
|
show_gpio(dev, bank_name, offset, &flags); |
|
|
|
|
gpio_get_description(dev, bank_name, offset, |
|
|
|
|
&flags); |
|
|
|
|
} else { |
|
|
|
|
for (offset = 0; offset < num_bits; offset++) { |
|
|
|
|
show_gpio(dev, bank_name, offset, |
|
|
|
|
&flags); |
|
|
|
|
gpio_get_description(dev, bank_name, |
|
|
|
|
offset, &flags); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|