blob: d7523dfe2359df0199f5ed00f7ca41000a5ca2b9 [file] [log] [blame]
/* SPDX-License-Identifier: GPL-2.0-or-later */
#define AOAC_DEVICE(DEV_ID, SX) \
PowerResource(AOAC, SX, 0) { \
OperationRegion (AOAC, SystemMemory, ACPIMMIO_BASE(AOAC) + 0x40 + (DEV_ID << 1), 2) \
Field (AOAC, ByteAcc, NoLock, Preserve) { \
/* \
* Target Device State \
* \
* 0 = D0 - Uninitialized \
* 1 = D0 - Initialized \
* 2 = D1/D2/D3Hot \
* 3 = D3Cold \
* \
* This field is only used to cut off register access. It does not \
* control any power states. D3Cold is the only value that will \
* cut off register access. All other values will allow register \
* access and are purely informational. \
*/ \
TDS, 2, \
\
DS, 1, /* Device State - Purely informational */ \
\
/* \
* Power On Dev \
* \
* 1 = Perform hardware sequence to power on the device \
* 0 = Perform hardware sequence to power off the device \
* \
* This register is only valid when Is Software Control = 0. \
*/ \
POD, 1, \
\
/* Software Power On Reset B */ \
SPRB, 1, \
/* Software Ref Clock OK */ \
SRCO, 1, \
/* Software Reset B */ \
SRB, 1, \
/* \
* Is Software Control \
* \
* 1 = Allow software to control Power On Reset B, \
* Ref Clock OK, and Reset B. \
* 0 = Hardware control \
*/ \
ISWC, 1, \
\
/* Power Reset B State */ \
PRBS, 1, \
/* Ref Clock OK State */ \
RCOS, 1, \
/* Reset B State */ \
RBS, 1, \
/* Device Off Gating State */ \
DOGS, 1, \
/* D3 Cold State */ \
D3CS, 1, \
/* Device Clock OK State */ \
COS, 1, \
/* State of device */ \
STA0, 1, \
/* State of device */ \
STA1, 1, \
} \
Method(_STA) { \
Local0 = (PRBS && RCOS && RBS) \
\
If (Local0) { \
Return (1) \
} Else { \
Return (0) \
} \
} \
Method(_ON, 0, Serialized) { \
ISWC=0 \
POD=1 \
\
While (!PRBS || !RCOS || !RBS) { \
Stall (100) \
} \
} \
Method(_OFF, 0, Serialized) { \
ISWC=0 \
POD=0 \
\
While (PRBS || RCOS || RBS) { \
Stall (100) \
} \
} \
Method(_RST, 0, Serialized) { \
ISWC=1 \
SRB=1 \
\
/* Assert the SwRstB signal for 200 us */ \
Stall (200) \
\
SRB=0 \
ISWC=0 \
\
While (!PRBS || !RCOS || !RBS) { \
Printf ("Waiting for device to complete reset") \
Stall (100) \
} \
} \
} \
Name (_PR0, Package () { AOAC }) \
Name (_PR2, Package () { AOAC }) \
Name (_PR3, Package () { AOAC }) \
Method (_PS0, 0, Serialized) { \
^AOAC.TDS = 1 \
} \
Method (_PS3, 0, Serialized) { \
^AOAC.TDS = 3 \
}