Hi Simon, On 09/15/14 15:57, Simon Glass wrote: > Add driver model support with this driver. In this case the platform data > is in the driver. It would be better to put this into an SOC-specific file, > but this is best attempted when more boards are moved over to use driver > model. > > Signed-off-by: Simon Glass <s...@chromium.org> > --- > > drivers/gpio/mxc_gpio.c | 291 > +++++++++++++++++++++++++++++++++++++++++++++++- > 1 file changed, 290 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpio/mxc_gpio.c b/drivers/gpio/mxc_gpio.c > index 6a572d5..8669cf0 100644 > --- a/drivers/gpio/mxc_gpio.c > +++ b/drivers/gpio/mxc_gpio.c
[...] > +static int check_reserved(struct udevice *dev, unsigned offset, > + const char *func) Wouldn't "check_requested" be a better name here? And then also in the error message below? > +{ > + struct mxc_bank_info *bank = dev_get_priv(dev); > + struct gpio_dev_priv *uc_priv = dev->uclass_priv; > + > + if (!*bank->label[offset]) { Can we have here a more explicit (and descriptive) check for '\0'? > + printf("mxc_gpio: %s: error: gpio %s%d not reserved\n", > + func, uc_priv->bank_name, offset); > + return -EPERM; > + } > + > + return 0; > +} [...] > +static int mxc_gpio_request(struct udevice *dev, unsigned offset, > + const char *label) > +{ > + struct mxc_bank_info *bank = dev_get_priv(dev); > + > + if (*bank->label[offset]) Same here? > + return -EBUSY; > + > + strncpy(bank->label[offset], label, GPIO_NAME_SIZE); > + bank->label[offset][GPIO_NAME_SIZE - 1] = '\0'; > + > + return 0; > +} [...] > +static int mxc_gpio_get_function(struct udevice *dev, unsigned offset) > +{ > + struct mxc_bank_info *bank = dev_get_priv(dev); > + > + if (!*bank->label[offset]) and here. > + return GPIOF_UNUSED; > + > + /* GPIOF_FUNC is not implemented yet */ > + if (mxc_gpio_is_output(bank->regs, offset)) > + return GPIOF_OUTPUT; > + else > + return GPIOF_INPUT; > +} [...] > +static int mxc_gpio_probe(struct udevice *dev) > +{ > + struct mxc_bank_info *bank = dev_get_priv(dev); > + struct mxc_gpio_plat *plat = dev_get_platdata(dev); > + struct gpio_dev_priv *uc_priv = dev->uclass_priv; > + int banknum; > + char *name = ""; I think you can skip this initialization, malloc will write into this pointer anyway. > + > + bank->regs = plat->regs; > + uc_priv->gpio_count = 32; Isn't this GPIO_PER_BANK is defined for? > + name = malloc(8); > + if (!name) > + return -ENOMEM; > + banknum = plat - mxc_plat; > + if (banknum < 98) > + sprintf(name, "GPIO%d_", banknum + 1); The logic here (and the magic 98) is unclear. Can we have a bit more explanation here please? > + uc_priv->bank_name = name; > + > + return 0; > +} [...] -- Regards, Igor. _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot