On Mon, Mar 8, 2021 at 6:44 PM Maximilian Luz <luzmaximilian@xxxxxxxxx> wrote: > On 3/8/21 5:31 PM, Andy Shevchenko wrote: > > On Mon, Mar 08, 2021 at 05:35:59PM +0200, Andy Shevchenko wrote: > >> On Mon, Mar 08, 2021 at 04:25:05PM +0100, Maximilian Luz wrote: > >>> Following commit 036e126c72eb ("pinctrl: intel: Split > >>> intel_pinctrl_add_padgroups() for better maintenance"), > >>> gpiochip_get_desc() is broken on some Kaby Lake R devices (specifically > >>> a Microsoft Surface Book 2), returning -EINVAL for GPIOs that in reality > >>> should be there (they are defined in ACPI and have been accessible > >>> previously). Due to this, gpiod_get() fails with -ENOENT. > >>> > >>> Reverting this commit fixes that issue and the GPIOs in question are > >>> accessible again. > >> > >> I would like to have more information. > >> Can you enable PINCTRL and GPIO debug options in the kernel, and show dmesg > >> output (when kernel command line has 'ignore_loglevel' option) for both working > >> and non-working cases? > >> > >> Also if it's possible to have DSDT.dsl of the device in question along with > >> output of `grep -H 15 /sys/bus/acpi/devices/*/status`. > >> > >>> There is probably a better option than straight up reverting this, so > >>> consider this more of a bug-report. > >> > >> Indeed. > > > > > > Can you test if the below helps (probably you have to apply it by editing > > the file manually): > > > > --- a/drivers/pinctrl/intel/pinctrl-intel.c > > +++ b/drivers/pinctrl/intel/pinctrl-intel.c > > @@ -1392,6 +1392,7 @@ static int intel_pinctrl_add_padgroups_by_size(struct intel_pinctrl *pctrl, > > gpps[i].size = min(gpp_size, npins); > > npins -= gpps[i].size; > > > > + gpps[i].gpio_base = gpps[i].base; > > gpps[i].padown_num = padown_num; > > > > > > That does fix the issue! Thanks for the fast response and fix! I'm about to send the formal patch. I will add the Reported-and-tested-by tag if you are okay with it. -- With Best Regards, Andy Shevchenko