
Hi Simon,
You have already applied this patch.
It might be too late, but...
You can remove "#include <asm/gpio.h>" from lib/fdtdec.c.
This is important for me to delete my dummy file arch/arm/include/asm/arch-uniphier/gpio.h
Best Regards Masahiro Yamada
On Mon, 5 Jan 2015 20:05:43 -0700 Simon Glass sjg@chromium.org wrote:
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
include/fdtdec.h | 77 --------------------------------------------- lib/fdtdec.c | 95 -------------------------------------------------------- 2 files changed, 172 deletions(-)
diff --git a/include/fdtdec.h b/include/fdtdec.h index 629e072..54b716e 100644 --- a/include/fdtdec.h +++ b/include/fdtdec.h @@ -186,39 +186,6 @@ int fdtdec_parse_phandle_with_args(const void *blob, int src_node, int cell_count, int index, 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
- all the peripherals of a certain type.
@@ -546,50 +513,6 @@ const u32 *fdtdec_locate_array(const void *blob, int node, 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
- as a 32-bit integer. The property must have at least 4 bytes of data. The
- value of the first cell is returned.
diff --git a/lib/fdtdec.c b/lib/fdtdec.c index d6bc783..71adc06 100644 --- a/lib/fdtdec.c +++ b/lib/fdtdec.c @@ -645,101 +645,6 @@ int fdtdec_parse_phandle_with_args(const void *blob, int src_node, 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, u8 *array, int count) { -- 2.2.0.rc0.207.ga3a616c