On Wed, Mar 9, 2022 at 1:41 AM Jianqun Xu <jay.xu@xxxxxxxxxxxxxx> wrote: > > Currently, the rockchip_pin_bank is get from pinctrl, that binds the > gpio driver to the pinctrl driver. > > rockchip-pinctrl > ->probe > ->register pinctrl > ->populate gpio platform > ... > ->rockchip-gpio probe > ->register gpio_chip > > Once the pinctrl device registered, other devices may try to configure > pins througth pinctrl_bind_pins before probe, and if it is a gpio through > operation, that make a failure since gpio not ready. > > Heiko has provide a output-defer-list to store settings between pinctrl > and gpio driver, once gpio register, the list will set activate. > > With this patch, the gpio can register itself before or without pinctrl, > even if pinctrl driver used, we can make the gpio register before > pinctrl by another patch to rockchip pinctrl driver. > > rockchip-pinctrl > ->probe > ->populate gpio platform > ->rockchip-gpio probe > ->register gpio_chip > ->register pinctrl > > Since the pinctrl is registered last, other devices will do defer probe. will defer ... > + gc->label = kasprintf(GFP_KERNEL, "gpio%d", bank->id); No NULL checks? ... > + static int static_gpio_id; > id = of_alias_get_id(np, "gpio"); > if (id < 0) > + id = static_gpio_id++; You haven't stress tested that, have you? ... > + clk_prepare_enable(gpio->clk); Error check? ... > + printk("%s: probed %s\n", __func__, dev_name(dev)); Why printk()?! -- With Best Regards, Andy Shevchenko