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 <s...@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 <s...@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 _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot