Exemple #1
0
static void print_gpio_info(int gpio)
{
	int changed, v, flags;

	if (!gpio_is_implemented(gpio))
		return;  /* Skip unsupported signals */

	v = gpio_get_level(gpio);
#ifdef CONFIG_CMD_GPIO_EXTENDED
	flags = gpio_get_flags(gpio);
#else
	flags = 0;
#endif
	changed = last_val_changed(gpio, v);

	ccprintf("  %d%c %s%s%s%s%s%s%s%s%s%s\n", v, (changed ? '*' : ' '),
		 (flags & GPIO_INPUT ? "I " : ""),
		 (flags & GPIO_OUTPUT ? "O " : ""),
		 (flags & GPIO_LOW ? "L " : ""),
		 (flags & GPIO_HIGH ? "H " : ""),
		 (flags & GPIO_ANALOG ? "A " : ""),
		 (flags & GPIO_OPEN_DRAIN ? "ODR " : ""),
		 (flags & GPIO_PULL_UP ? "PU " : ""),
		 (flags & GPIO_PULL_DOWN ? "PD " : ""),
		 (flags & GPIO_ALTERNATE ? "ALT " : ""),
		 gpio_get_name(gpio));

	/* Flush console to avoid truncating output */
	cflush();
}
Exemple #2
0
static int command_gpio_get(int argc, char **argv)
{
	int changed, v, i;

	/* If a signal is specified, print only that one */
	if (argc == 2) {
		i = find_signal_by_name(argv[1]);
		if (i == GPIO_COUNT)
			return EC_ERROR_PARAM1;
		v = gpio_get_level(i);
		changed = last_val_changed(i, v);
		ccprintf("  %d%c %s\n", v, (changed ? '*' : ' '),
			 gpio_get_name(i));

		return EC_SUCCESS;
	}

	/* Otherwise print them all */
	for (i = 0; i < GPIO_COUNT; i++) {
		if (!gpio_is_implemented(i))
			continue;  /* Skip unsupported signals */

		v = gpio_get_level(i);
		changed = last_val_changed(i, v);
		ccprintf("  %d%c %s\n", v, (changed ? '*' : ' '),
			 gpio_get_name(i));

		/* Flush console to avoid truncating output */
		cflush();
	}

	return EC_SUCCESS;
}
Exemple #3
0
/**
 * Find a GPIO signal by name.
 *
 * @param name		Signal name to find
 *
 * @return the signal index, or GPIO_COUNT if no match.
 */
static enum gpio_signal find_signal_by_name(const char *name)
{
	int i;

	if (!name || !*name)
		return GPIO_COUNT;

	for (i = 0; i < GPIO_COUNT; i++)
		if (gpio_is_implemented(i) &&
		    !strcasecmp(name, gpio_get_name(i)))
			return i;

	return GPIO_COUNT;
}
Exemple #4
0
static enum ec_error_list set(const char *name, int value)
{
	enum gpio_signal signal = find_signal_by_name(name);

	if (signal == GPIO_COUNT)
		return EC_ERROR_INVAL;

	if (!gpio_is_implemented(signal))
		return EC_ERROR_INVAL;

	if (!(gpio_get_default_flags(signal) & GPIO_OUTPUT))
		return EC_ERROR_INVAL;

	gpio_set_level(signal, value);

	return EC_SUCCESS;
}
Exemple #5
0
static int command_gpio_get(int argc, char **argv)
{
	int i;

	/* If a signal is specified, print only that one */
	if (argc == 2) {
		i = find_signal_by_name(argv[1]);
		if (i == GPIO_COUNT)
			return EC_ERROR_PARAM1;
		print_gpio_info(i);

		return EC_SUCCESS;
	}

	/* Otherwise print them all */
	for (i = 0; i < GPIO_COUNT; i++) {
		if (!gpio_is_implemented(i))
			continue;  /* Skip unsupported signals */

		print_gpio_info(i);
	}

	return EC_SUCCESS;
}