On 3/29/24 7:32 AM, Gwendal Grignou wrote: > ACER Vivobook Flip (TP401NAS) virtual intel switch is implemented as > follow: > > Device (VGBI) > { > Name (_HID, EisaId ("INT33D6") ... > Name (VBDS, Zero) > Method (_STA, 0, Serialized) // _STA: Status ... > Method (VBDL, 0, Serialized) > { > PB1E |= 0x20 > VBDS |= 0x40 > } > Method (VGBS, 0, Serialized) > { > Return (VBDS) /* \_SB_.PCI0.SBRG.EC0_.VGBI.VBDS */ > } > ... > } > > By default VBDS is set to 0. At boot it is set to clamshell (bit 6 set) > only after method VBDL is executed. > > Since VBDL is now evaluated in the probe routine later, after the device > is registered, the retrieved value of VBDS was still 0 ("tablet mode") > when setting up the virtual switch. > > Make sure to evaluate VGBS after VBDL, to ensure the > convertible boots in clamshell mode, the expected default. > > Fixes: 26173179fae1 ("platform/x86: intel-vbtn: Eval VBDL after registering our notifier") > Signed-off-by: Gwendal Grignou <gwendal@xxxxxxxxxxxx> > --- Reviewed-by: Kuppuswamy Sathyanarayanan <sathyanarayanan.kuppuswamy@xxxxxxxxxxxxxxx> > drivers/platform/x86/intel/vbtn.c | 5 +++-- > 1 file changed, 3 insertions(+), 2 deletions(-) > > diff --git a/drivers/platform/x86/intel/vbtn.c b/drivers/platform/x86/intel/vbtn.c > index 48f0ac19d6ddf..79bb2c801daa9 100644 > --- a/drivers/platform/x86/intel/vbtn.c > +++ b/drivers/platform/x86/intel/vbtn.c > @@ -136,8 +136,6 @@ static int intel_vbtn_input_setup(struct platform_device *device) > priv->switches_dev->id.bustype = BUS_HOST; > > if (priv->has_switches) { > - detect_tablet_mode(&device->dev); > - > ret = input_register_device(priv->switches_dev); > if (ret) > return ret; > @@ -312,6 +310,9 @@ static int intel_vbtn_probe(struct platform_device *device) > if (ACPI_FAILURE(status)) > dev_err(&device->dev, "Error VBDL failed with ACPI status %d\n", status); > } > + // Check switches after buttons since VBDL may have side effects. > + if (has_switches) > + detect_tablet_mode(&device->dev); > > device_init_wakeup(&device->dev, true); > /* -- Sathyanarayanan Kuppuswamy Linux Kernel Developer