At present with the sandbox GPIO driver it is not possible to change the value of GPIOD_IS_OUT_ACTIVE unless the GPIO is an output. This makes it hard to test changing the flags since we need to be aware of the internal workings of the driver. The feature is designed to aid testing. Split this feature out into a separate sandbox-specific flag, so that the flags can change unimpeded. This will make it easier to allow updating the flags in a future patch. Signed-off-by: Simon Glass <sjg@chromium.org>
90 lines
2.7 KiB
C
90 lines
2.7 KiB
C
/* SPDX-License-Identifier: GPL-2.0+ */
|
|
/*
|
|
* This is the interface to the sandbox GPIO driver for test code which
|
|
* wants to change the GPIO values reported to U-Boot.
|
|
*
|
|
* Copyright (c) 2011 The Chromium OS Authors.
|
|
*/
|
|
|
|
#ifndef __ASM_SANDBOX_GPIO_H
|
|
#define __ASM_SANDBOX_GPIO_H
|
|
|
|
/*
|
|
* We use the generic interface, and add a back-channel.
|
|
*
|
|
* The back-channel functions are declared in this file. They should not be used
|
|
* except in test code.
|
|
*
|
|
* Test code can, for example, call sandbox_gpio_set_value() to set the value of
|
|
* a simulated GPIO. From then on, normal code in U-Boot will see this new
|
|
* value when it calls gpio_get_value().
|
|
*
|
|
* NOTE: DO NOT use the functions in this file except in test code!
|
|
*/
|
|
#include <asm-generic/gpio.h>
|
|
|
|
/* Our own private GPIO flags, which musn't conflict with GPIOD_... */
|
|
#define GPIOD_EXT_HIGH BIT(31) /* external source is high (else low) */
|
|
|
|
#define GPIOD_SANDBOX_MASK BIT(31)
|
|
|
|
/**
|
|
* Return the simulated value of a GPIO (used only in sandbox test code)
|
|
*
|
|
* @param dev device to use
|
|
* @param offset GPIO offset within bank
|
|
* @return -1 on error, 0 if GPIO is low, >0 if high
|
|
*/
|
|
int sandbox_gpio_get_value(struct udevice *dev, unsigned int offset);
|
|
|
|
/**
|
|
* Set the simulated value of a GPIO (used only in sandbox test code)
|
|
*
|
|
* @param dev device to use
|
|
* @param offset GPIO offset within bank
|
|
* @param value value to set (0 for low, non-zero for high)
|
|
* @return -1 on error, 0 if ok
|
|
*/
|
|
int sandbox_gpio_set_value(struct udevice *dev, unsigned int offset, int value);
|
|
|
|
/**
|
|
* Return the simulated direction of a GPIO (used only in sandbox test code)
|
|
*
|
|
* @param dev device to use
|
|
* @param offset GPIO offset within bank
|
|
* @return -1 on error, 0 if GPIO is input, >0 if output
|
|
*/
|
|
int sandbox_gpio_get_direction(struct udevice *dev, unsigned int offset);
|
|
|
|
/**
|
|
* Set the simulated direction of a GPIO (used only in sandbox test code)
|
|
*
|
|
* @param dev device to use
|
|
* @param offset GPIO offset within bank
|
|
* @param output 0 to set as input, 1 to set as output
|
|
* @return -1 on error, 0 if ok
|
|
*/
|
|
int sandbox_gpio_set_direction(struct udevice *dev, unsigned int offset,
|
|
int output);
|
|
|
|
/**
|
|
* Return the simulated flags of a GPIO (used only in sandbox test code)
|
|
*
|
|
* @param dev device to use
|
|
* @param offset GPIO offset within bank
|
|
* @return dir_flags: bitfield accesses by GPIOD_ defines
|
|
*/
|
|
ulong sandbox_gpio_get_flags(struct udevice *dev, unsigned int offset);
|
|
|
|
/**
|
|
* Set the simulated flags of a GPIO (used only in sandbox test code)
|
|
*
|
|
* @param dev device to use
|
|
* @param offset GPIO offset within bank
|
|
* @param flags bitfield accesses by GPIOD_ defines
|
|
* @return -1 on error, 0 if ok
|
|
*/
|
|
int sandbox_gpio_set_flags(struct udevice *dev, unsigned int offset,
|
|
ulong flags);
|
|
|
|
#endif
|