[PATCH] Eject button handling in quickstart driver

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Background: Fujitsu is releasing currently small desktop systems like the
ESPRIMO Q510 that have no direct accessible eject button for the optical drive.

http://www.fujitsu.com/fts/products/computing/pc/desktops/all-round/esprimo-q510/index.html

Instead of an eject button on the drive the system has a button on the
mainboard that will send a notify event to the assigned device using the
following ACPI code:

Scope(\_GPE)
{
        Method(_L15, 0)                                         // ODD Eject GPIO handler
        {
                 Notify(\_SB.ODDE, 0x80)                         // Notify a ODD Eject Button event
to the OS
        }
} //Scope(\_GPE)

Scope(\_SB)
{
//
// Direct Application Launch Button definition used for Windows Vista, Windows 7, Linux ...
//
        Device(ODDE)                                            // Eject Button Device
        {
                Name(_HID, EISAID("PNP0C32"))   // HID ACPI button device
                Name(_UID, 1)                                   // Unique instance # of that device
                Name(_STA, 0x0F)                                // Device is working properly

                Method(GHID, 0)                                 // Button "role" method
                {
                        Return(Buffer(){1})                 // Application Launch Button role
                }
        }

Matthew Garrett advised me that there is a quickstart driver in staging that
was designed to handle the PNP0C32 devices. I had a look at it and it needed
patching for my purpose because

- the driver only reports the pressed button on wakeup events, but in
  my case it should report the pressure of the "Optical Disc Drive Eject"
  button during runtime.
- The driver was generating character input events when I pressed the button
  during runtime, resulting in the funny question of the bash open if I want
  to see all possible completions.

So I made a minor change to this driver to handle my "ODDE" button event as I want
it and to be minimal intrusive to the remaining functionality.

Of course this needs a small "daemon like skript" that polls the pressed_button file
frequently and initiates the eject command if the button is pressed. This one
(modified from the Sourceforge quickstart download) works:

#!/bin/bash
#
# Sample application launcher.
# Angelo Arrifano <miknix@xxxxxxxxx>
# http://quickstart.sourceforge.net
#
# Put this script on ~/.config/autostart.
#

# Add your button actions here
LAUNCH["ODDE"]="eject /dev/sr0"

# The sysfs file telling which button was pressed
PRESSEDFILE="/sys/devices/platform/quickstart/pressed_button"

if [[ ! -e "$PRESSEDFILE" ]]; then
        exit 1
fi

while (true) do
PRESSEDBUTTON="$(cat "$PRESSEDFILE")"
if [[ "$PRESSEDBUTTON" != "none" ]]; then
        ${LAUNCH[$PRESSEDBUTTON]};
        echo -n "none" > "$PRESSEDFILE"
fi
sleep 1;
done

# End of script

Signed-off-by: Rainer Koenig <Rainer.Koenig@xxxxxxxxxxxxxx>

---

--- upstream/drivers/staging/quickstart/quickstart.c    2012-03-07 14:32:37.000000000 +0100
+++ new/drivers/staging/quickstart/quickstart.c 2012-03-07 14:50:36.000000000 +0100
@@ -223,10 +223,16 @@
        if (event == QUICKSTART_EVENT_WAKE)
                quickstart_data.pressed = quickstart->btn;
        else if (event == QUICKSTART_EVENT_RUNTIME) {
-               input_report_key(quickstart_input, quickstart->btn->id, 1);
-               input_sync(quickstart_input);
-               input_report_key(quickstart_input, quickstart->btn->id, 0);
-               input_sync(quickstart_input);
+                if (strncasecmp(quickstart->btn->name, "ODDE", 4) == 0) {
+                  /* ODDE is Optical Disc Drive Eject */
+                  quickstart_data.pressed = quickstart->btn;
+                }
+                else {
+                 input_report_key(quickstart_input, quickstart->btn->id, 1);
+                 input_sync(quickstart_input);
+                 input_report_key(quickstart_input, quickstart->btn->id, 0);
+                 input_sync(quickstart_input);
+                }
        }
        return;
 }


-- 
Dipl.-Inf. (FH) Rainer Koenig
Project Manager Linux Clients
Dept. PDG WPS R&D SW OSE

Fujitsu Technology Solutions
Bürgermeister-Ullrich-Str. 100
86199 Augsburg
Germany

Telephone: +49-821-804-3321
Telefax:   +49-821-804-2131
Mail:      mailto:Rainer.Koenig@xxxxxxxxxxxxxx

Internet         ts.fujtsu.com
Company Details  ts.fujitsu.com/imprint.html
--
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux IBM ACPI]     [Linux Power Management]     [Linux Kernel]     [Linux Laptop]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]     [Linux Resources]

  Powered by Linux