BayTrail/AaeonCommonPkg/AaeonBfpi/AaeonBfpiLed.asl
2022-09-02 09:03:21 +08:00

127 lines
3.9 KiB
Plaintext

#if ASL_WMI_LED_SUPPORT
Scope(\_SB.BFPI) {
//---------------------------------------------------------------------------
// Name: LEDO
//
// Description: LED Operation
//
// Input:
// Arg0 : Sub-function number
// Arg1 : IIA0, Input: IntegerArgument
// Arg2 : IIA1, Input: IntegerArgument
//
// Output:
// According to sub-function.
//
//---------------------------------------------------------------------------
Method (LEDO, 3){
If (LEqual(Arg0, 0x0000)) { // Report capability
Return(LDRC(Arg1, Arg2))
}
If (LEqual(Arg0, 0x0001)) { // LED get brightness
Return(LDGB(Arg1, Arg2))
}
If (LEqual(Arg0, 0x0002)) { // LED set brightness
Return(LDSB(Arg1, Arg2))
}
Return(ASL_BFPI_INVALID_PARAMETER)
}
//------------------------------------------------------------------------
// Table: TLED
// Description: LED name string look up table
//
//-------------------------------------------------------------------------
Name (TLED, Package(ASL_LED_NUMBER) {
ASL_LED_STRING_LIST
})
//---------------------------------------------------------------------------
// Name: LDRC
//
// Description: LED report capability
// Arg0 : IIA0, Select capability data to return
// Arg1 : IIA1, Basically not used.
//
// Output:
// According to sub-function.
//
//---------------------------------------------------------------------------
Method (LDRC, 2){
And (Arg0, 0xFF, Local0) // Input: Interger - Select capability data to return
If (LEqual(Local0, 0x00)) { // Report capability in JSON format
Store (LEDC, Local0)
For (Local1 = 0, Local1 < ASL_LED_NUMBER, Local1++)
{
Concatenate(Local0, "\"", Local0)
Concatenate(Local0, DeRefOf(Index(TLED,Local1)), Local0)
Concatenate(Local0, "\"", Local0)
If (LLess(Add(Local1,ONE),ASL_LED_NUMBER))
{
Concatenate(Local0, ",", Local0)
}
}
Concatenate(Local0, "]}", Local0)
Store (Local0, WDBF)
Return (ASL_BFPI_SUCCESS)
}
If (LEqual(Local0, 0x10)) { // Return Supported LED number
Return (ASL_LED_NUMBER)
}
Return(ASL_BFPI_INVALID_PARAMETER)
}
//---------------------------------------------------------------------------
// Name: LDGB
//
// Description: LED get brightness
// Arg0 : IIA0, LED number to get.
// Arg1 : IIA1, Basically not used.
//
// Output:
// Interger:
// 0 - Off
// 1 - On
// BFPI_INVALID_PARAMETER
//
//---------------------------------------------------------------------------
Method (LDGB, 2){
If (LGreaterEqual(Arg0, ASL_LED_NUMBER)) {
Return (ASL_BFPI_INVALID_PARAMETER)
}
// Currently support OEM type only
#if ASL_LED_TYPE_OEM_SUPPORT
Return (ASL_OEM_LED_GB_METHOD)
#endif
}
//---------------------------------------------------------------------------
// Name: LDSB
//
// Description: LED set brightness
// Arg1 : IIA0
// Bit[7:0] : LED number to set
// Bit[16] : LED brightness to set
// 0 - Off
// 1 - On
// Arg1 : IIA1, Basically not used.
//
// Output:
// BFPI_SUCCESS
// BFPI_INVALID_PARAMETER
//
//---------------------------------------------------------------------------
Method (LDSB, 2){
And (Arg0, 0xFF, Local0) // Bit[7:0] : LED number to set
And (ShiftRight (Arg0, 16), 0x01, Local1) //Bit[16] : LED brightness to set
If (LGreaterEqual(Local0, ASL_LED_NUMBER)) { Return (ASL_BFPI_INVALID_PARAMETER) }
If (LGreater(Local1, 1)) { Return (ASL_BFPI_INVALID_PARAMETER) }
// Currently support OEM type only
#if ASL_LED_TYPE_OEM_SUPPORT
Return (ASL_OEM_LED_SB_METHOD)
#endif
}
} // Scope(\_SB.BFPI)
#endif