blob: a9de7da55981bc7a4baee583d3e037b2bcf7e7c0 [file] [log] [blame]
/* SPDX-License-Identifier: GPL-2.0-only */
Device (HIDD) // HID Device
{
Name (_HID, "INTC1051") // Intel Ultrabook HID Platform Event Driver.
Name (HBSY, 0) // HID Busy
Name (HIDX, 0) // HID Index
Name (HMDE, 0) // HID Mode
Name (HRDY, 0) // HID Ready
Name (BTLD, 0) // Button Driver Loaded
Name (BTS1, 0) // Button Status
Method (_STA, 0, Serialized) // Status Method
{
// Usually, ACPI will check if the OS is 0x07DD (2013 - Windows 8.1ish)
// before showing the HID event filter. Seeing as we use Linux we show
// it regardless.
Return (0x0F)
}
//
// HID Driver Descriptor Method - Called by HID Driver during initialization
// to obtain HID Descriptor information.
//
// Input:
// None
//
// Output:
// Package containing a complete HID Descriptor information.
//
Name (DPKG, Package(4)
{
0x11111111,
0x22222222,
0x33333333,
0x44444444,
})
Method (HDDM, 0, Serialized)
{
Return (DPKG)
}
//
// HID Driver Event Method - Called by HID Driver to get the specific
// platform event.
//
// Input:
// None
//
// Output:
// Mode 0 = Index of HID Input Report, per pre-defined Table.
// Mode 1 = Package containing a complete HID Input Report.
//
Method (HDEM, 0, Serialized)
{
HBSY = 0x00 // Clear HID Busy.
// Simple Mode is hardcoded for now. Return Simple Mode HID Index Value.
If (HMDE == 0x00)
{
Return (HIDX)
}
Return (HMDE)
}
//
// HID Driver Mode Method - Called by HID Driver during initialization to get
// the platform mode of operation.
//
// Input:
// None
//
// Output:
// 0 = Simple Mode.
// 1 = Advanced Mode.
//
Method (HDMM, 0, Serialized)
{
Return (HMDE) // Return Mode of operation.
}
//
// HID Driver Status Method - called by HID Driver to report platform readiness status.
//
// Input: Driver Status.
// 0 = Driver Unloaded.
// 1 = Driver Loaded and Ready.
//
// Output: None
//
Method (HDSM, 1, Serialized)
{
HRDY = Arg0 // Store HID Ready Status.
// Eventually code will communicate to platform the Driver status (enabled/disabled).
}
//
// HID Platform Event Method - called by Platform to communicate HID Event to Driver.
//
// Input:
// Mode 0 = Index of HID Event.
// Mode 1 = Package containing a complete HID Report.
//
Method (HPEM, 1, Serialized) // HID Platform Event Method.
{
HBSY = 0x01 // Set HID Busy.
// Simple Mode is hardcoded for now. Simply store HID Index value.
If (HMDE == 0x00)
{
HIDX = Arg0
} Else {
HIDX = Arg0
}
Notify (\_SB.HIDD, 0xC0) // Notify Driver to get HID Event.
Local0 = 0x00 // Initialize Local0 as a timeout counter.
While((Local0 < 250) && HBSY) // Wait <= 1 second for Driver to ACK success.
{
Sleep (4) // Delay 4 ms.
Local0++ // Increment Timeout.
}
If (HBSY == 0x01) // Failure?
{
HBSY = 0x00 // Yes. Clear HID Busy Flag.
HIDX = 0x00 // Set HID Simple Mode Index = 0 = Undefined.
Return (0x01) // Return Failure.
} Else {
Return (0x00) // Return Success.
}
}
//
// HID Button Load Method - called by Platform to say HID driver is capable of receiving
// 5-button array notifications.
//
// Input:
// None
//
// Output:
// None
//
Method (BTNL, 0, Serialized) // HID Button Enable/Disable Method
{
BTS1 = 0x00
}
//
// HID Button Enable/Disable Method - called by Platform to disable/enable notification based
// on button press
//
// Input:
// Arg0 = Bit mask of buttons to Enable or Disable:
// 1 == Button should be Enabled
// 0 == Button should be Disabled
// Bits[0]: Power Button N/A to disable
// Bits[1]: Windows Button
// Bits[2]: Volume Up Button
// Bits[3]: Volume Down Button
// Bits[4]: Rotation Lock Button
// Bits[5:31]: Reserved
//
// Output:
// None
//
Method (BTNE, 1, Serialized) // HID Button Enable/Disable Method
{
Return (BTS1)
}
//
// HID Button Status - called by Platform to get what buttons are enabled and disabled
//
// Input:
// None
//
// Output:
// Bit mask of buttons' current status:
// 1 == Button is Enabled
// 0 == Button is Disabled
// Bits[0]: Power Button N/A to disable
// Bits[1]: Windows Button
// Bits[2]: Volume Up Button
// Bits[3]: Volume Down Button
// Bits[4]: Rotation Lock Button
// Bits[5:31]: Reserved
//
Method (BTNS, 0, Serialized)
{
Return (BTS1)
}
//
// HID Button Capabilities Method - called by Platform to determine what buttons are supported
//
// Input:
// None
//
// Output:
// Bit mask of buttons supported:
// 1 == Button is Supported
// 0 == Button is not Supported
// Bits[0]: Power Button (Must be 1)
// Bits[1]: Windows Button
// Bits[2]: Volume Up Button
// Bits[3]: Volume Down Button
// Bits[4]: Rotation Lock Button
// Bits[5:31]: Reserved
//
Method (BTNC, 0, Serialized) // HID Button Capabilities Method
{
Return (0x1F)
}
//
// HEBC: HID Event Base Capabilities [31:0]- To specify the base button capabilities supported
// on platform by returning a ULONG value with the following bit level definition
//
// Input:
// None
//
// 0 = Button not supported
// 1 = Button supported
// Output:
// Bits [0] - Windows Button (Windows 8.1 supported), Rotation Lock (Windows 8.1 supported):
// Num Lock, Home, End, Page Up, Page Down
// Bits [1] - Wireless Radio Control
// Bits [2] - System Power Down (Windows 8.1 supported)
// Bits [3] - System Hibernate
// Bits [4] - System Sleep/ System Wake
// Bits [5] - Scan Next Track
// Bits [6] - Scan Previous Track
// Bits [7] - Stop
// Bits [8] - Play/Pause
// Bits [9] - Mute
// Bits [10] - Volume Increment (Windows 8.1 supported)
// Bits [11] - Volume Decrement (Windows 8.1 supported)
// Bits [12] - Display Brightness Increment
// Bits [13] - Display Brightness Decrement
// Bits [14] - Lock Tablet
// Bits [15] - Release Tablet
// Bits [16] - Toggle Bezel
// Bits [17] - 5 button array (Windows 10 supported):
// (Power, Windows Home, Volume Up, Volume Down, Rotation Lock)
// Bits [18] - Button 1
// Bits [19] - Button 2
// Bits [20] - Button 3
// Bits [21] - Button 4
// Bits [22] - Button 5
// Bits [23-31] - reserved
//
// Modify below table if the target platform has different capabilities. Each bit
// corresponding the above table definition.
//
Name (HEB2, 0) // Extended 32bit capability definition for future enhancements.
Method (HEBC, 0, Serialized) {
// It's possible to return (\HEB1)
Return (0x00)
}
Method (H2BC, 0, Serialized) {
// It's possible to return (\HEB1)
Return (0x00)
}
//
// HEEC- Hid Event Extended Capabilities [32:63]
//
Method (HEEC, 0, Serialized) {
// It's possible to return (\HEB2)
Return (0x00)
}
//
// HIDD _DSM
// _DSM : Device Specific Method for the Windows Compatible Button Array.
//
// Arg0: UUID Unique function identifier
// Arg1: Integer Revision Level
// Arg2: Integer Function Index
// Arg3: Package Parameters
//
Method (_DSM, 4, Serialized, 0, UnknownObj, {BuffObj, IntObj, IntObj, PkgObj})
{
// Compare passed in UUID to supported UUID.
If (Arg0 == ToUUID ("EEEC56B3-4442-408F-A792-4EDD4D758054"))
{
If (0x01 == ToInteger(Arg1)) // Revision 1.
{
Switch (ToInteger(Arg2)) // Switch to Function Index.
{
//
// Function 0, Query of supported functions.
//
Case (0x00)
{
Return (Buffer() {0xFF, 0x03}) // Total 9 function indices are supported including this.
}
//
// Function 1, BTNL. Button Load Method. No Input/Output.
//
Case (0x01)
{
BTNL()
}
//
// Function 2, HDMM. HID Driver Mode Method.
// Input:None
// Output:HDMM output. See HDMM
//
Case (0x02)
{
Return (HDMM())
}
//
// Function 3, HDSM. HID Driver Status Method.
// Input: 0 - The driver is not available. 1 - The driver is available.
// Output: None
//
Case (0x03)
{
HDSM (DeRefOf(Arg3[0]))
}
//
// Function 4, HDEM. HID Driver Event Method.
// Input: None.
// Output: Package contains Supported Keys (Mode 0)
//
Case (0x04)
{
Return (HDEM())
}
//
// Function 5 BTNS. Button Status Method.
// Input: None.
// Output: Int32 which contains a bit map of Buttons' enable/disable states
//
Case (0x05)
{
Return (BTNS())
}
//
// Function 6 BTNE. Button Enable/Disable Method.
// Input: Int32 Bit mask of buttons enable/disable control:
// 1 = Button should be Enabled
// 0 = Button should be Disabled
// Output: None.
//
Case (0x06)
{
BTNE (DeRefOf(Arg3[0]))
}
//
// Function 7 HEBC. Button implemented state.
// Input: None
// Output: Int32 Bit map which shows what buttons are implemented on this system.
//
Case (0x07)
{
Return (HEBC())
}
//
// Function 8 VGBS. Virtual GPIO Button Status.
// Input: None
// Output: Intger Bit map which shows what Virtual GPIO Button status. Currently only
// Dock/Slate modes are supported.
//
Case (0x08)
{
Return (0x00)
}
//
// Function 9 H2BC. Button implemented state.
// Input: None
// Output: Int32 Bit map which shows what buttons are implemented on this system.
//
Case (0x09)
{
Return (H2BC())
}
}
}
}
// If the code falls through to this point, just return a buffer of 0.
Return (Buffer() {0x00})
}
}