Re: [PATCH v2 1/3] platform: x86: dell-rbtn: Dell Airplane Mode Switch driver

From: Gabriele Mazzotta
Date: Wed Apr 29 2015 - 14:41:48 EST


On Wednesday 29 April 2015 20:16:06 Pali Rohár wrote:
> On Wednesday 29 April 2015 20:11:38 Gabriele Mazzotta wrote:
> > On Wednesday 29 April 2015 20:00:18 Pali Rohár wrote:
> > > On Wednesday 29 April 2015 19:54:43 Gabriele Mazzotta wrote:
> > > > On Wednesday 29 April 2015 18:28:40 Pali Rohár wrote:
> > > > > On Wednesday 29 April 2015 15:57:58 Gabriele Mazzotta wrote:
> > > > > > On Wednesday 29 April 2015 15:08:40 Pali Rohár wrote:
> > > > > > > On Wednesday 29 April 2015 12:30:32 Gabriele Mazzotta wrote:
> > > > > > > > On Wednesday 29 April 2015 11:51:04 Pali Rohár wrote:
> > > > > > > > > This is an ACPI driver for Dell laptops which receive HW switch events.
> > > > > > > > > It exports rfkill device dell-rbtn which provide correct hard rfkill state.
> > > > > > > > >
> > > > > > > > > Alex Hung added code for supporting Dell laptops which have toggle button
> > > > > > > > > instead HW slider switch. On these laptops toggle button event is reported
> > > > > > > > > by new input device (instead rfkill) as they do not have hw radio switch.
> > > > > > > > >
> > > > > > > > > It looks like those are two different functions (rfkill, input device), but
> > > > > > > > > Dell BIOS exports them via same ACPI device and uses same ACPI functions.
> > > > > > > > > So code is in one kernel driver.
> > > > > > > >
> > > > > > > > I made a patch some time ago that I've just adapted. It allows to
> > > > > > > > prefer RBTN_SLIDER over RBTN_TOGGLE. The main reason why I'd like to
> > > > > > > > have the hardware switch is that the BIOS doesn't alter the soft state
> > > > > > > > of the devices. This comes in handy when the function key controls
> > > > > > > > multiple radio devices.
> > > > > > > >
> > > > > > >
> > > > > > > Now I'm thinking... is't this bug in wifi kernel driver (which exports
> > > > > > > phy rfkill)? Or problem somewhere else (userspace or kernel)?
> > > > > >
> > > > > > What is the presumed bug you are referring to? The fact that the soft state
> > > > > > doesn't change?
> > > > >
> > > > > Can you remind me whats the problem on your laptop?
> > > >
> > > > CRBT returns 0 (so RBTN_TOGGLE), but by default my laptop acts as if
> > > > it returned 2 or 3, so we have to call ARBT.
> > > >
> > > > As said before, there's no way to know when a platform whose CRBT
> > > > method returns 0 or 1 also has the hardware switch, so to be sure that
> > > > all the platforms have working function keys, some of them (such as
> > > > mine) have to give up on the hardware switch.
> > >
> > > Ok, and what happens when you load this v2 version? What stopped working
> > > on your laptop?
> > >
> > > Alex, can you help? Code for toggle laptop version is originally yours.
> >
> > When I press the Fn key, a _Qxx EC method is executed. The code path
> > of this method depends on a variable set by ARBT.
> >
> > When you call ARBT with 1 as argument, the variable is set to 1 and the
> > _Qxx method does nothing but sending a notification (0x80) to RBTN
> > whenever the function key is pressed.
> >
> > When you call ARBT with 0 as argument, the variable is set to 0 and
> > the _Qxx method both sends 0x80 to RBTN _and_ toggle the state of the
> > radio devices whenever the function key is pressed.
> >
> > So in the end nothing _really_ breaks.
>
> So in linux kernel is missing code for toggling state of radio devices?
> And you can do that only by ACPI when ARBT is called with 0, right?

Yes.

With Alex's code the kernel sends keypresses to userspace and userspace
takes care of toggling the state of radio devices.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/