On Mon, Mar 01, 2021 at 07:07:03PM +0200, Andy Shevchenko wrote: > On Sun, Feb 28, 2021 at 4:55 AM Shawn Guo <shawn.guo@xxxxxxxxxx> wrote: > > > > In case of ACPI boot, GPIO core does the right thing to parse GPIO pin > > configs from ACPI table, and call into gpio_chip's .set_config hook for > > setting them up. It enables such support on qcom platform by using > > generic config function, which in turn calls into .pin_config_set of > > pinconf for setting up hardware. For qcom platform, it's possible to > > reuse pin group config functions for pin config hooks, because every pin > > is maintained as a single group. > > > > This change fixes the problem that Touchpad of Lenovo Flex 5G laptop > > doesn't work with ACPI boot, because PullUp config of Touchpad GpioInt > > pin is not set up by kernel driver. > > by the kernel > > ... > > > .pin_config_group_get = msm_config_group_get, > > .pin_config_group_set = msm_config_group_set, > > + .pin_config_get = msm_config_group_get, > > + .pin_config_set = msm_config_group_set, > > This can't be right. They have different semantics. As mentioned in the commit log, this works considering every pin is maintained as a single group on Qualcomm platform. So configuring one pin is essentially to configure the group containing the pin. I can do something like below, if you think that's easier to understand. static int msm_config_pin_get(struct pinctrl_dev *pctldev, unsigned int pin, unsigned long *config) { return msm_config_group_get(pctldev, pin, config); } static int msm_config_pin_set(struct pinctrl_dev *pctldev, unsigned pin, unsigned long *configs, unsigned num_configs) { return msm_config_group_set(pctldev, pin, configs, num_configs); } static const struct pinconf_ops msm_pinconf_ops = { ... .pin_config_get = msm_config_pin_get, .pin_config_set = msm_config_pin_set, }; Shawn