mirror of
https://github.com/Fishwaldo/u-boot.git
synced 2025-03-19 05:31:32 +00:00
dm: fdt: Remove the old GPIO functions
Now that we support device tree GPIO bindings directly in the driver model GPIO uclass we can remove these functions. Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
6f755eb66b
commit
009067c3b7
2 changed files with 0 additions and 172 deletions
|
@ -231,39 +231,6 @@ int fdtdec_parse_phandle_with_args(const void *blob, int src_node,
|
||||||
int cell_count, int index,
|
int cell_count, int index,
|
||||||
struct fdtdec_phandle_args *out_args);
|
struct fdtdec_phandle_args *out_args);
|
||||||
|
|
||||||
/* GPIOs are numbered from 0 */
|
|
||||||
enum {
|
|
||||||
FDT_GPIO_NONE = -1U, /* an invalid GPIO used to end our list */
|
|
||||||
|
|
||||||
FDT_GPIO_ACTIVE_LOW = 1 << 0, /* input is active low (else high) */
|
|
||||||
};
|
|
||||||
|
|
||||||
/* This is the state of a GPIO pin as defined by the fdt */
|
|
||||||
struct fdt_gpio_state {
|
|
||||||
const char *name; /* name of the fdt property defining this */
|
|
||||||
uint gpio; /* GPIO number, or FDT_GPIO_NONE if none */
|
|
||||||
u8 flags; /* FDT_GPIO_... flags */
|
|
||||||
};
|
|
||||||
|
|
||||||
/* This tells us whether a fdt_gpio_state record is valid or not */
|
|
||||||
#define fdt_gpio_isvalid(x) ((x)->gpio != FDT_GPIO_NONE)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Read the GPIO taking into account the polarity of the pin.
|
|
||||||
*
|
|
||||||
* @param gpio pointer to the decoded gpio
|
|
||||||
* @return value of the gpio if successful, < 0 if unsuccessful
|
|
||||||
*/
|
|
||||||
int fdtdec_get_gpio(struct fdt_gpio_state *gpio);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Write the GPIO taking into account the polarity of the pin.
|
|
||||||
*
|
|
||||||
* @param gpio pointer to the decoded gpio
|
|
||||||
* @return 0 if successful
|
|
||||||
*/
|
|
||||||
int fdtdec_set_gpio(struct fdt_gpio_state *gpio, int val);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Find the next numbered alias for a peripheral. This is used to enumerate
|
* Find the next numbered alias for a peripheral. This is used to enumerate
|
||||||
* all the peripherals of a certain type.
|
* all the peripherals of a certain type.
|
||||||
|
@ -644,50 +611,6 @@ const u32 *fdtdec_locate_array(const void *blob, int node,
|
||||||
*/
|
*/
|
||||||
int fdtdec_get_bool(const void *blob, int node, const char *prop_name);
|
int fdtdec_get_bool(const void *blob, int node, const char *prop_name);
|
||||||
|
|
||||||
/**
|
|
||||||
* Decode a single GPIOs from an FDT.
|
|
||||||
*
|
|
||||||
* If the property is not found, then the GPIO structure will still be
|
|
||||||
* initialised, with gpio set to FDT_GPIO_NONE. This makes it easy to
|
|
||||||
* provide optional GPIOs.
|
|
||||||
*
|
|
||||||
* @param blob FDT blob to use
|
|
||||||
* @param node Node to look at
|
|
||||||
* @param prop_name Node property name
|
|
||||||
* @param gpio gpio elements to fill from FDT
|
|
||||||
* @return 0 if ok, -FDT_ERR_NOTFOUND if the property is missing.
|
|
||||||
*/
|
|
||||||
int fdtdec_decode_gpio(const void *blob, int node, const char *prop_name,
|
|
||||||
struct fdt_gpio_state *gpio);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Decode a list of GPIOs from an FDT. This creates a list of GPIOs with no
|
|
||||||
* terminating item.
|
|
||||||
*
|
|
||||||
* @param blob FDT blob to use
|
|
||||||
* @param node Node to look at
|
|
||||||
* @param prop_name Node property name
|
|
||||||
* @param gpio Array of gpio elements to fill from FDT. This will be
|
|
||||||
* untouched if either 0 or an error is returned
|
|
||||||
* @param max_count Maximum number of elements allowed
|
|
||||||
* @return number of GPIOs read if ok, -FDT_ERR_BADLAYOUT if max_count would
|
|
||||||
* be exceeded, or -FDT_ERR_NOTFOUND if the property is missing.
|
|
||||||
*/
|
|
||||||
int fdtdec_decode_gpios(const void *blob, int node, const char *prop_name,
|
|
||||||
struct fdt_gpio_state *gpio, int max_count);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set up a GPIO pin according to the provided gpio information. At present this
|
|
||||||
* just requests the GPIO.
|
|
||||||
*
|
|
||||||
* If the gpio is FDT_GPIO_NONE, no action is taken. This makes it easy to
|
|
||||||
* deal with optional GPIOs.
|
|
||||||
*
|
|
||||||
* @param gpio GPIO info to use for set up
|
|
||||||
* @return 0 if all ok or gpio was FDT_GPIO_NONE; -1 on error
|
|
||||||
*/
|
|
||||||
int fdtdec_setup_gpio(struct fdt_gpio_state *gpio);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Look in the FDT for a config item with the given name and return its value
|
* Look in the FDT for a config item with the given name and return its value
|
||||||
* as a 32-bit integer. The property must have at least 4 bytes of data. The
|
* as a 32-bit integer. The property must have at least 4 bytes of data. The
|
||||||
|
|
95
lib/fdtdec.c
95
lib/fdtdec.c
|
@ -803,101 +803,6 @@ int fdtdec_parse_phandle_with_args(const void *blob, int src_node,
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Decode a list of GPIOs from an FDT. This creates a list of GPIOs with no
|
|
||||||
* terminating item.
|
|
||||||
*
|
|
||||||
* @param blob FDT blob to use
|
|
||||||
* @param node Node to look at
|
|
||||||
* @param prop_name Node property name
|
|
||||||
* @param gpio Array of gpio elements to fill from FDT. This will be
|
|
||||||
* untouched if either 0 or an error is returned
|
|
||||||
* @param max_count Maximum number of elements allowed
|
|
||||||
* @return number of GPIOs read if ok, -FDT_ERR_BADLAYOUT if max_count would
|
|
||||||
* be exceeded, or -FDT_ERR_NOTFOUND if the property is missing.
|
|
||||||
*/
|
|
||||||
int fdtdec_decode_gpios(const void *blob, int node, const char *prop_name,
|
|
||||||
struct fdt_gpio_state *gpio, int max_count)
|
|
||||||
{
|
|
||||||
const struct fdt_property *prop;
|
|
||||||
const u32 *cell;
|
|
||||||
const char *name;
|
|
||||||
int len, i;
|
|
||||||
|
|
||||||
debug("%s: %s\n", __func__, prop_name);
|
|
||||||
assert(max_count > 0);
|
|
||||||
prop = fdt_get_property(blob, node, prop_name, &len);
|
|
||||||
if (!prop) {
|
|
||||||
debug("%s: property '%s' missing\n", __func__, prop_name);
|
|
||||||
return -FDT_ERR_NOTFOUND;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* We will use the name to tag the GPIO */
|
|
||||||
name = fdt_string(blob, fdt32_to_cpu(prop->nameoff));
|
|
||||||
cell = (u32 *)prop->data;
|
|
||||||
len /= sizeof(u32) * 3; /* 3 cells per GPIO record */
|
|
||||||
if (len > max_count) {
|
|
||||||
debug(" %s: too many GPIOs / cells for "
|
|
||||||
"property '%s'\n", __func__, prop_name);
|
|
||||||
return -FDT_ERR_BADLAYOUT;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Read out the GPIO data from the cells */
|
|
||||||
for (i = 0; i < len; i++, cell += 3) {
|
|
||||||
gpio[i].gpio = fdt32_to_cpu(cell[1]);
|
|
||||||
gpio[i].flags = fdt32_to_cpu(cell[2]);
|
|
||||||
gpio[i].name = name;
|
|
||||||
}
|
|
||||||
|
|
||||||
return len;
|
|
||||||
}
|
|
||||||
|
|
||||||
int fdtdec_decode_gpio(const void *blob, int node, const char *prop_name,
|
|
||||||
struct fdt_gpio_state *gpio)
|
|
||||||
{
|
|
||||||
int err;
|
|
||||||
|
|
||||||
debug("%s: %s\n", __func__, prop_name);
|
|
||||||
gpio->gpio = FDT_GPIO_NONE;
|
|
||||||
gpio->name = NULL;
|
|
||||||
err = fdtdec_decode_gpios(blob, node, prop_name, gpio, 1);
|
|
||||||
return err == 1 ? 0 : err;
|
|
||||||
}
|
|
||||||
|
|
||||||
int fdtdec_get_gpio(struct fdt_gpio_state *gpio)
|
|
||||||
{
|
|
||||||
int val;
|
|
||||||
|
|
||||||
if (!fdt_gpio_isvalid(gpio))
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
val = gpio_get_value(gpio->gpio);
|
|
||||||
return gpio->flags & FDT_GPIO_ACTIVE_LOW ? val ^ 1 : val;
|
|
||||||
}
|
|
||||||
|
|
||||||
int fdtdec_set_gpio(struct fdt_gpio_state *gpio, int val)
|
|
||||||
{
|
|
||||||
if (!fdt_gpio_isvalid(gpio))
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
val = gpio->flags & FDT_GPIO_ACTIVE_LOW ? val ^ 1 : val;
|
|
||||||
return gpio_set_value(gpio->gpio, val);
|
|
||||||
}
|
|
||||||
|
|
||||||
int fdtdec_setup_gpio(struct fdt_gpio_state *gpio)
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* Return success if there is no GPIO defined. This is used for
|
|
||||||
* optional GPIOs)
|
|
||||||
*/
|
|
||||||
if (!fdt_gpio_isvalid(gpio))
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
if (gpio_request(gpio->gpio, gpio->name))
|
|
||||||
return -1;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int fdtdec_get_byte_array(const void *blob, int node, const char *prop_name,
|
int fdtdec_get_byte_array(const void *blob, int node, const char *prop_name,
|
||||||
u8 *array, int count)
|
u8 *array, int count)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Reference in a new issue