mb/google/kblrvp: Add camera devices power sequencing through ACPI power resources
This patch controls the camera devices power through ACPI power resource. * Add Opregions for PMIC1 and PMIC2, * TI_PMIC_POWER_OPREGION * TI_PMIC_VR_VAL_OPREGION * TI_PMIC_CLK_OPREGION * TI_PMIC_CLK_FREQ_OPREGION * Add power resources for sensors and VCM, * OVTH for CAM0 * OVFI for CAM1 * VCMP for VCM * Implement _ON and _OFF methods for sensor and VCM module's power on and power off sequences. BUG=none BRANCH=none TEST=Build and boot kblrvp. Dump and verify that the generated DSDT table has the required entries. Verified that sensor probe is successful. Change-Id: I02c4784ab3f4d6e1f0e657ad50b727ff11da8b9c Signed-off-by: V Sowmya <v.sowmya@intel.com> Reviewed-on: https://review.coreboot.org/20663 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Furquan Shaikh <furquan@google.com>
This commit is contained in:
parent
34e92a9be5
commit
f19ee0d737
|
@ -27,13 +27,358 @@ Scope (\_SB.PCI0.I2C2)
|
||||||
Return (0x0F)
|
Return (0x0F)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Marks the availability of all the operation regions */
|
||||||
|
Name (AVP1, Zero)
|
||||||
|
Name (AVGP, Zero)
|
||||||
|
Name (AVB0, Zero)
|
||||||
|
Name (AVB1, Zero)
|
||||||
|
Name (AVB2, Zero)
|
||||||
|
Name (AVB3, Zero)
|
||||||
|
Method (_REG, 2, NotSerialized)
|
||||||
|
{
|
||||||
|
If (LEqual (Arg0, 0x08))
|
||||||
|
{
|
||||||
|
/* Marks the availability of GeneralPurposeIO
|
||||||
|
* 0x08: opregion space for GeneralPurposeIO
|
||||||
|
*/
|
||||||
|
Store (Arg1, AVGP)
|
||||||
|
}
|
||||||
|
If (LEqual (Arg0, 0xB0))
|
||||||
|
{
|
||||||
|
/* Marks the availability of
|
||||||
|
* TI_PMIC_POWER_OPREGION_ID */
|
||||||
|
Store (Arg1, AVB0)
|
||||||
|
}
|
||||||
|
If (LEqual (Arg0, 0xB1))
|
||||||
|
{
|
||||||
|
/* Marks the availability of
|
||||||
|
* TI_PMIC_VR_VAL_OPREGION_ID */
|
||||||
|
Store (Arg1, AVB1)
|
||||||
|
}
|
||||||
|
If (LEqual (Arg0, 0xB2))
|
||||||
|
{
|
||||||
|
/* Marks the availability of
|
||||||
|
* TI_PMIC_CLK_OPREGION_ID */
|
||||||
|
Store (Arg1, AVB2)
|
||||||
|
}
|
||||||
|
If (LEqual (Arg0, 0xB3))
|
||||||
|
{
|
||||||
|
/* Marks the availability of
|
||||||
|
* TI_PMIC_CLK_FREQ_OPREGION_ID */
|
||||||
|
Store (Arg1, AVB3)
|
||||||
|
}
|
||||||
|
If (LAnd (AVGP, LAnd (LAnd (AVB0, AVB1),
|
||||||
|
LAnd(AVB2, AVB3))))
|
||||||
|
{
|
||||||
|
/* Marks the availability of all opregions */
|
||||||
|
Store (1, AVP1)
|
||||||
|
}
|
||||||
|
Else
|
||||||
|
{
|
||||||
|
Store (0, AVP1)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
OperationRegion (GPOP, GeneralPurposeIo, 0, 0x2)
|
||||||
Name (_CRS, ResourceTemplate ()
|
Name (_CRS, ResourceTemplate ()
|
||||||
{
|
{
|
||||||
I2cSerialBus (0x004D, ControllerInitiated, 0x00061A80,
|
I2cSerialBus (0x004D, ControllerInitiated, 0x00061A80,
|
||||||
AddressingMode7Bit, "\\_SB.PCI0.I2C2",
|
AddressingMode7Bit, "\\_SB.PCI0.I2C2",
|
||||||
0x00, ResourceConsumer, ,
|
0x00, ResourceConsumer, ,
|
||||||
)
|
)
|
||||||
|
/* GPIO.9 is XSHUTDOWN pin for world facing camera */
|
||||||
|
GpioIo (Exclusive, PullDefault, 0x0000, 0x0000,
|
||||||
|
IoRestrictionOutputOnly, "\\_SB.PCI0.I2C2.PMIC",
|
||||||
|
0x00, ResourceConsumer,,)
|
||||||
|
{
|
||||||
|
9
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
/* PMIC operation regions */
|
||||||
|
/* 0xB0: TI_PMIC_POWER_OPREGION_ID
|
||||||
|
* VSIO: Sensor IO LDO output
|
||||||
|
* VCMC: VCM LDO output
|
||||||
|
* VAX1: Auxiliary LDO1 output
|
||||||
|
* VAX2: Auxiliary LDO2 output
|
||||||
|
* VACT: Analog LDO output
|
||||||
|
* VDCT: Core buck output
|
||||||
|
*/
|
||||||
|
OperationRegion (PWR1, 0xB0, Zero, 0x0100)
|
||||||
|
Field (PWR1, DWordAcc, NoLock, Preserve)
|
||||||
|
{
|
||||||
|
VSIO, 32,
|
||||||
|
VCMC, 32,
|
||||||
|
VAX1, 32,
|
||||||
|
VAX2, 32,
|
||||||
|
VACT, 32,
|
||||||
|
VDCT, 32,
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 0xB1: TI_PMIC_VR_VAL_OPREGION_ID
|
||||||
|
* SIOV: VSIO VR voltage value
|
||||||
|
* IOVA: VIO VR voltage value
|
||||||
|
* VCMV: VCM VR voltage value
|
||||||
|
* AX1V: Auxiliary LDO1 VR voltage value
|
||||||
|
* AX2V: Auxiliary LDO2 VR voltage value
|
||||||
|
* ACVA: Analog LDO VR voltage
|
||||||
|
* DCVA: Core buck VR volatage
|
||||||
|
*/
|
||||||
|
OperationRegion (PWR2, 0xB1, Zero, 0x0100)
|
||||||
|
Field (PWR2, DWordAcc, NoLock, Preserve)
|
||||||
|
{
|
||||||
|
SIOV, 32,
|
||||||
|
IOVA, 32,
|
||||||
|
VCMV, 32,
|
||||||
|
AX1V, 32,
|
||||||
|
AX2V, 32,
|
||||||
|
ACVA, 32,
|
||||||
|
DCVA, 32,
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 0xB2: TI_PMIC_CLK_OPREGION_ID
|
||||||
|
* PCTL: PLL control register
|
||||||
|
* PCT2: PLL control 2 register
|
||||||
|
* CFG1: Clock configuration 1 register
|
||||||
|
* CFG2: Clock configuration 2 register
|
||||||
|
*/
|
||||||
|
OperationRegion (CLKC, 0xB2, Zero, 0x0100)
|
||||||
|
Field (CLKC, DWordAcc, NoLock, Preserve)
|
||||||
|
{
|
||||||
|
PCTL, 32,
|
||||||
|
PCT2, 32,
|
||||||
|
CFG1, 32,
|
||||||
|
CFG2, 32,
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 0xB3: TI_PMIC_CLK_FREQ_OPREGION_ID
|
||||||
|
* PDV2: PLL output divider for HCLK_B
|
||||||
|
* BODI: PLL output divider for boost clock
|
||||||
|
* BUDI: PLL output divider for buck clock
|
||||||
|
* PSWR: PLL reference clock setting
|
||||||
|
* XTDV: Reference crystal divider
|
||||||
|
* PLDV: PLL feedback divider
|
||||||
|
* PODV: PLL output divider for HCLK_A
|
||||||
|
*/
|
||||||
|
OperationRegion (CLKF, 0xB3, Zero, 0x0100)
|
||||||
|
Field (CLKF, DWordAcc, NoLock, Preserve)
|
||||||
|
{
|
||||||
|
PDV2, 32,
|
||||||
|
BODI, 32,
|
||||||
|
BUDI, 32,
|
||||||
|
PSWR, 32,
|
||||||
|
XTDV, 32,
|
||||||
|
PLDV, 32,
|
||||||
|
PODV, 32,
|
||||||
|
}
|
||||||
|
|
||||||
|
Mutex (MUTC, 0)
|
||||||
|
Method (CLKE, 0, Serialized) {
|
||||||
|
/* save Acquire result so we can check for
|
||||||
|
Mutex acquired */
|
||||||
|
Store (Acquire (MUTC, 1000), Local0)
|
||||||
|
/* check for Mutex acquired */
|
||||||
|
If (LEqual (Local0, Zero)) {
|
||||||
|
/* Set boost clock divider */
|
||||||
|
BODI = 3
|
||||||
|
/* Set buck clock divider */
|
||||||
|
BUDI = 2
|
||||||
|
/* Set the PLL_REF_CLK cyles */
|
||||||
|
PSWR = 19
|
||||||
|
/* Set the reference crystal divider */
|
||||||
|
XTDV = 170
|
||||||
|
/* Set PLL feedback divider */
|
||||||
|
PLDV = 32
|
||||||
|
/* Set PLL output divider for HCLK_A */
|
||||||
|
PODV = 1
|
||||||
|
/* Enable HCLK_A clock.
|
||||||
|
* CFG1: output selection for HCLK_A.
|
||||||
|
* CFG2: set drive strength for HCLK_A.
|
||||||
|
*/
|
||||||
|
CFG2 = 1
|
||||||
|
CFG1 = 2
|
||||||
|
/* Enable PLL output, crystal oscillator
|
||||||
|
* input capacitance control and set
|
||||||
|
* Xtal oscillator as clock source.
|
||||||
|
*/
|
||||||
|
PCTL = 209
|
||||||
|
Sleep(1)
|
||||||
|
Release (MUTC)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Method (CLKD, 0, Serialized) {
|
||||||
|
/* save Acquire result so we can check for
|
||||||
|
Mutex acquired */
|
||||||
|
Store (Acquire (MUTC, 1000), Local0)
|
||||||
|
/* check for Mutex acquired */
|
||||||
|
If (LEqual (Local0, Zero)) {
|
||||||
|
BODI = 0
|
||||||
|
BUDI = 0
|
||||||
|
PSWR = 0
|
||||||
|
XTDV = 0
|
||||||
|
PLDV = 0
|
||||||
|
PODV = 0
|
||||||
|
/* Disable HCLK_A clock */
|
||||||
|
CFG2 = 0
|
||||||
|
CFG1 = 0
|
||||||
|
PCTL = 0
|
||||||
|
Release (MUTC)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Reference count for VSIO */
|
||||||
|
Mutex (MUTV, 0)
|
||||||
|
Name (VSIC, 0)
|
||||||
|
Method (DOVD, 1, Serialized) {
|
||||||
|
/* Save Acquire result so we can check for
|
||||||
|
Mutex acquired */
|
||||||
|
Store (Acquire (MUTV, 1000), Local0)
|
||||||
|
/* Check for Mutex acquired */
|
||||||
|
If (LEqual (Local0, Zero)) {
|
||||||
|
/* Turn off VSIO */
|
||||||
|
If (LEqual (Arg0, Zero)) {
|
||||||
|
/* Decrement only if VSIC > 0 */
|
||||||
|
if (LGreater (VSIC, 0)) {
|
||||||
|
Decrement (VSIC)
|
||||||
|
If (LEqual (VSIC, Zero)) {
|
||||||
|
VSIO = 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} ElseIf (LEqual (Arg0, 1)) {
|
||||||
|
/* Increment only if VSIC < 2 */
|
||||||
|
If (LLess (VSIC, 2)) {
|
||||||
|
/* Turn on VSIO */
|
||||||
|
If (LEqual (VSIC, Zero)) {
|
||||||
|
VSIO = 3
|
||||||
|
}
|
||||||
|
Increment (VSIC)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Release (MUTV)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Power resource methods for CAM0 */
|
||||||
|
PowerResource (OVTH, 0, 0) {
|
||||||
|
Name (STA, 0)
|
||||||
|
Method (_ON, 0, Serialized) {
|
||||||
|
If (LEqual (AVP1, 1)) {
|
||||||
|
If (LEqual (STA, 0)) {
|
||||||
|
/* Enable VSIO regulator +
|
||||||
|
daisy chain */
|
||||||
|
DOVD(1)
|
||||||
|
|
||||||
|
if (LNotEqual (IOVA, 52)) {
|
||||||
|
/* Set VSIO value as
|
||||||
|
1.8006 V */
|
||||||
|
IOVA = 52
|
||||||
|
}
|
||||||
|
if (LNotEqual (SIOV, 52)) {
|
||||||
|
/* Set VSIO value as
|
||||||
|
1.8006 V */
|
||||||
|
SIOV = 52
|
||||||
|
}
|
||||||
|
Sleep(3)
|
||||||
|
|
||||||
|
VACT = 1
|
||||||
|
if (LNotEqual (ACVA, 109)) {
|
||||||
|
/* Set ANA at 2.8152V */
|
||||||
|
ACVA = 109
|
||||||
|
}
|
||||||
|
Sleep(3)
|
||||||
|
|
||||||
|
\_SB.PCI0.I2C2.PMIC.CLKE()
|
||||||
|
|
||||||
|
VDCT = 1
|
||||||
|
if (LNotEqual (DCVA, 12)) {
|
||||||
|
/* Set CORE at 1.2V */
|
||||||
|
DCVA = 12
|
||||||
|
}
|
||||||
|
Sleep(3)
|
||||||
|
\_SB.PCI0.I2C2.CAM0.CRST(1)
|
||||||
|
Sleep(5)
|
||||||
|
|
||||||
|
STA = 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Method (_OFF, 0, Serialized) {
|
||||||
|
If (LEqual (AVP1, 1)) {
|
||||||
|
If (LEqual (STA, 1)) {
|
||||||
|
Sleep(2)
|
||||||
|
\_SB.PCI0.I2C2.PMIC.CLKD()
|
||||||
|
Sleep(2)
|
||||||
|
\_SB.PCI0.I2C2.CAM0.CRST(0)
|
||||||
|
Sleep(3)
|
||||||
|
VDCT = 0
|
||||||
|
Sleep(3)
|
||||||
|
VACT = 0
|
||||||
|
Sleep(1)
|
||||||
|
DOVD(0)
|
||||||
|
Sleep(1)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
STA = 0
|
||||||
|
}
|
||||||
|
Method (_STA, 0, NotSerialized) {
|
||||||
|
Return (STA)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Power resource methods for VCM */
|
||||||
|
PowerResource (VCMP, 0, 0) {
|
||||||
|
Name (STA, 0)
|
||||||
|
Method (_ON, 0, Serialized) {
|
||||||
|
If (LEqual (AVP1, 1)) {
|
||||||
|
If (LEqual (STA, 0)) {
|
||||||
|
/* Enable VSIO regulator +
|
||||||
|
daisy chain */
|
||||||
|
DOVD(1)
|
||||||
|
if (LNotEqual (IOVA, 52)) {
|
||||||
|
/* Set VSIO value as
|
||||||
|
1.8006 V */
|
||||||
|
IOVA = 52
|
||||||
|
}
|
||||||
|
if (LNotEqual (SIOV, 52)) {
|
||||||
|
/* Set VSIO value as
|
||||||
|
1.8006 V */
|
||||||
|
SIOV = 52
|
||||||
|
}
|
||||||
|
Sleep(3)
|
||||||
|
|
||||||
|
/* Enable VCM regulator */
|
||||||
|
VCMC = 1
|
||||||
|
if (LNotEqual (VCMV, 109)) {
|
||||||
|
/* Set VCM value at
|
||||||
|
2.8152 V */
|
||||||
|
VCMV = 109
|
||||||
|
}
|
||||||
|
Sleep(3)
|
||||||
|
|
||||||
|
STA = 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Method (_OFF, 0, Serialized) {
|
||||||
|
If (LEqual (AVP1, 1)) {
|
||||||
|
If (LEqual (STA, 1)) {
|
||||||
|
VCMC = 0 /* Disable regulator */
|
||||||
|
Sleep(1)
|
||||||
|
DOVD(0) /* Disable regulator */
|
||||||
|
Sleep(1)
|
||||||
|
STA = 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Method (_STA, 0, NotSerialized) {
|
||||||
|
Return (STA)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Device (CAM0)
|
Device (CAM0)
|
||||||
|
@ -57,6 +402,30 @@ Scope (\_SB.PCI0.I2C2)
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
Field (\_SB.PCI0.I2C2.PMIC.GPOP, ByteAcc, NoLock, Preserve)
|
||||||
|
{
|
||||||
|
Connection
|
||||||
|
(
|
||||||
|
GpioIo (Exclusive, PullDefault, 0x0000, 0x0000,
|
||||||
|
IoRestrictionOutputOnly,
|
||||||
|
"\\_SB.PCI0.I2C2.PMIC", 0x00,
|
||||||
|
ResourceConsumer,,)
|
||||||
|
{
|
||||||
|
9
|
||||||
|
}
|
||||||
|
),
|
||||||
|
GRST, 1,
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Set or clear GRST GPIO */
|
||||||
|
Method (CRST, 1, Serialized)
|
||||||
|
{
|
||||||
|
GRST = Arg0
|
||||||
|
}
|
||||||
|
|
||||||
|
Name (_PR0, Package () { ^^I2C2.PMIC.OVTH })
|
||||||
|
Name (_PR3, Package () { ^^I2C2.PMIC.OVTH })
|
||||||
|
|
||||||
/* Port0 of CAM0 is connected to port0 of CIO2 device */
|
/* Port0 of CAM0 is connected to port0 of CIO2 device */
|
||||||
Name (_DSD, Package () {
|
Name (_DSD, Package () {
|
||||||
ToUUID ("dbb8e3e6-5886-4ba6-8795-1319f52a966b"),
|
ToUUID ("dbb8e3e6-5886-4ba6-8795-1319f52a966b"),
|
||||||
|
@ -137,6 +506,9 @@ Scope (\_SB.PCI0.I2C2)
|
||||||
0x00, ResourceConsumer, ,
|
0x00, ResourceConsumer, ,
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
Name (_PR0, Package () { ^PMIC.VCMP })
|
||||||
|
Name (_PR3, Package () { ^PMIC.VCMP })
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -154,13 +526,296 @@ Scope (\_SB.PCI0.I2C3)
|
||||||
Return (0x0F)
|
Return (0x0F)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Marks the availability of all the operation regions */
|
||||||
|
Name (AVP2, Zero)
|
||||||
|
Name (AVGP, Zero)
|
||||||
|
Name (AVB0, Zero)
|
||||||
|
Name (AVB1, Zero)
|
||||||
|
Name (AVB2, Zero)
|
||||||
|
Name (AVB3, Zero)
|
||||||
|
Method (_REG, 2, NotSerialized)
|
||||||
|
{
|
||||||
|
If (LEqual (Arg0, 0x08))
|
||||||
|
{
|
||||||
|
/* Marks the availability of GeneralPurposeIO
|
||||||
|
* 0x08: opregion space for GeneralPurposeIO
|
||||||
|
*/
|
||||||
|
Store (Arg1, AVGP)
|
||||||
|
}
|
||||||
|
If (LEqual (Arg0, 0xB0))
|
||||||
|
{
|
||||||
|
/* Marks the availability of
|
||||||
|
* TI_PMIC_POWER_OPREGION_ID */
|
||||||
|
Store (Arg1, AVB0)
|
||||||
|
}
|
||||||
|
If (LEqual (Arg0, 0xB1))
|
||||||
|
{
|
||||||
|
/* Marks the availability of
|
||||||
|
* TI_PMIC_VR_VAL_OPREGION_ID */
|
||||||
|
Store (Arg1, AVB1)
|
||||||
|
}
|
||||||
|
If (LEqual (Arg0, 0xB2))
|
||||||
|
{
|
||||||
|
/* Marks the availability of
|
||||||
|
* TI_PMIC_CLK_OPREGION_ID */
|
||||||
|
Store (Arg1, AVB2)
|
||||||
|
}
|
||||||
|
If (LEqual (Arg0, 0xB3))
|
||||||
|
{
|
||||||
|
/* Marks the availability of
|
||||||
|
* TI_PMIC_CLK_FREQ_OPREGION_ID */
|
||||||
|
Store (Arg1, AVB3)
|
||||||
|
}
|
||||||
|
If (LAnd (AVGP, LAnd (LAnd (AVB0, AVB1),
|
||||||
|
LAnd(AVB2, AVB3))))
|
||||||
|
{
|
||||||
|
/* Marks the availability of all opregions */
|
||||||
|
Store (1, AVP2)
|
||||||
|
}
|
||||||
|
Else
|
||||||
|
{
|
||||||
|
Store (0, AVP2)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
OperationRegion (GPOP, GeneralPurposeIo, 0, 0x2)
|
||||||
Name (_CRS, ResourceTemplate ()
|
Name (_CRS, ResourceTemplate ()
|
||||||
{
|
{
|
||||||
I2cSerialBus (0x0049, ControllerInitiated, 0x00061A80,
|
I2cSerialBus (0x0049, ControllerInitiated, 0x00061A80,
|
||||||
AddressingMode7Bit, "\\_SB.PCI0.I2C3",
|
AddressingMode7Bit, "\\_SB.PCI0.I2C3",
|
||||||
0x00, ResourceConsumer, ,
|
0x00, ResourceConsumer, ,
|
||||||
)
|
)
|
||||||
|
/* GPIO.4 is AVDD pin for user facing camera */
|
||||||
|
GpioIo (Exclusive, PullDefault, 0x0000, 0x0000,
|
||||||
|
IoRestrictionOutputOnly, "\\_SB.PCI0.I2C3.PMIC",
|
||||||
|
0x00, ResourceConsumer,,)
|
||||||
|
{
|
||||||
|
4
|
||||||
|
}
|
||||||
|
/* GPIO.5 is XSHUTDOWN pin for user facing camera */
|
||||||
|
GpioIo (Exclusive, PullDefault, 0x0000, 0x0000,
|
||||||
|
IoRestrictionOutputOnly, "\\_SB.PCI0.I2C3.PMIC",
|
||||||
|
0x00, ResourceConsumer,,)
|
||||||
|
{
|
||||||
|
5
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
/* PMIC operation regions */
|
||||||
|
/* 0xB0: TI_PMIC_POWER_OPREGION_ID
|
||||||
|
* VSIO: Sensor IO LDO output
|
||||||
|
* VCMC: VCM LDO output
|
||||||
|
* VAX1: Auxiliary LDO1 output
|
||||||
|
* VAX2: Auxiliary LDO2 output
|
||||||
|
* VACT: Analog LDO output
|
||||||
|
* VDCT: Core buck output
|
||||||
|
*/
|
||||||
|
OperationRegion (PWR1, 0xB0, Zero, 0x0100)
|
||||||
|
Field (PWR1, DWordAcc, NoLock, Preserve)
|
||||||
|
{
|
||||||
|
VSIO, 32,
|
||||||
|
VCMC, 32,
|
||||||
|
VAX1, 32,
|
||||||
|
VAX2, 32,
|
||||||
|
VACT, 32,
|
||||||
|
VDCT, 32,
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 0xB1: TI_PMIC_VR_VAL_OPREGION_ID
|
||||||
|
* SIOV: VSIO VR voltage value
|
||||||
|
* IOVA: VIO VR voltage value
|
||||||
|
* VCMV: VCM VR voltage value
|
||||||
|
* AX1V: Auxiliary LDO1 VR voltage value
|
||||||
|
* AX2V: Auxiliary LDO2 VR voltage value
|
||||||
|
* ACVA: Analog LDO VR voltage
|
||||||
|
* DCVA: Core buck VR volatage
|
||||||
|
*/
|
||||||
|
OperationRegion (PWR2, 0xB1, Zero, 0x0100)
|
||||||
|
Field (PWR2, DWordAcc, NoLock, Preserve)
|
||||||
|
{
|
||||||
|
SIOV, 32,
|
||||||
|
IOVA, 32,
|
||||||
|
VCMV, 32,
|
||||||
|
AX1V, 32,
|
||||||
|
AX2V, 32,
|
||||||
|
ACVA, 32,
|
||||||
|
DCVA, 32,
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 0xB2: TI_PMIC_CLK_OPREGION_ID
|
||||||
|
* PCTL: PLL control register
|
||||||
|
* PCT2: PLL control 2 register
|
||||||
|
* CFG1: Clock configuration 1 register
|
||||||
|
* CFG2: Clock configuration 2 register
|
||||||
|
*/
|
||||||
|
OperationRegion (CLKC, 0xB2, Zero, 0x0100)
|
||||||
|
Field (CLKC, DWordAcc, NoLock, Preserve)
|
||||||
|
{
|
||||||
|
PCTL, 32,
|
||||||
|
PCT2, 32,
|
||||||
|
CFG1, 32,
|
||||||
|
CFG2, 32,
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 0xB3: TI_PMIC_CLK_FREQ_OPREGION_ID
|
||||||
|
* PDV2: PLL output divider for HCLK_B
|
||||||
|
* BODI: PLL output divider for boost clock
|
||||||
|
* BUDI: PLL output divider for buck clock
|
||||||
|
* PSWR: PLL reference clock setting
|
||||||
|
* XTDV: Reference crystal divider
|
||||||
|
* PLDV: PLL feedback divider
|
||||||
|
* PODV: PLL output divider for HCLK_A
|
||||||
|
*/
|
||||||
|
OperationRegion (CLKF, 0xB3, Zero, 0x0100)
|
||||||
|
Field (CLKF, DWordAcc, NoLock, Preserve)
|
||||||
|
{
|
||||||
|
PDV2, 32,
|
||||||
|
BODI, 32,
|
||||||
|
BUDI, 32,
|
||||||
|
PSWR, 32,
|
||||||
|
XTDV, 32,
|
||||||
|
PLDV, 32,
|
||||||
|
PODV, 32,
|
||||||
|
}
|
||||||
|
|
||||||
|
Mutex (MUTC, 0)
|
||||||
|
Method (CLKE, 0, Serialized) {
|
||||||
|
/* save Acquire result so we can check for
|
||||||
|
Mutex acquired */
|
||||||
|
Store (Acquire (MUTC, 1000), Local0)
|
||||||
|
/* check for Mutex acquired */
|
||||||
|
If (LEqual (Local0, Zero)) {
|
||||||
|
/* Set boost clock divider */
|
||||||
|
BODI = 3
|
||||||
|
/* Set buck clock divider */
|
||||||
|
BUDI = 2
|
||||||
|
/* Set the PLL_REF_CLK cyles */
|
||||||
|
PSWR = 19
|
||||||
|
/* Set the reference crystal divider */
|
||||||
|
XTDV = 170
|
||||||
|
/* Set PLL feedback divider */
|
||||||
|
PLDV = 32
|
||||||
|
/* Set PLL output divider for HCLK_A */
|
||||||
|
PODV = 1
|
||||||
|
/* Enable HCLK_A clock.
|
||||||
|
* CFG1: output selection for HCLK_A.
|
||||||
|
* CFG2: set drive strength for HCLK_A.
|
||||||
|
*/
|
||||||
|
CFG2 = 1
|
||||||
|
CFG1 = 2
|
||||||
|
/* Enable PLL output, crystal oscillator
|
||||||
|
* input capacitance control and set
|
||||||
|
* Xtal oscillator as clock source.
|
||||||
|
*/
|
||||||
|
PCTL = 209
|
||||||
|
Sleep(1)
|
||||||
|
Release (MUTC)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Method (CLKD, 0, Serialized) {
|
||||||
|
/* save Acquire result so we can check for
|
||||||
|
Mutex acquired */
|
||||||
|
Store (Acquire (MUTC, 1000), Local0)
|
||||||
|
/* check for Mutex acquired */
|
||||||
|
If (LEqual (Local0, Zero)) {
|
||||||
|
BODI = 0
|
||||||
|
BUDI = 0
|
||||||
|
PSWR = 0
|
||||||
|
XTDV = 0
|
||||||
|
PLDV = 0
|
||||||
|
PODV = 0
|
||||||
|
/* Disable HCLK_A clock */
|
||||||
|
CFG2 = 0
|
||||||
|
CFG1 = 0
|
||||||
|
PCTL = 0
|
||||||
|
Release (MUTC)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Reference count for VSIO */
|
||||||
|
Mutex (MUTV, 0)
|
||||||
|
Name (VSIC, 0)
|
||||||
|
Method (DOVD, 1, Serialized) {
|
||||||
|
/* Save Acquire result so we can check for
|
||||||
|
Mutex acquired */
|
||||||
|
Store (Acquire (MUTV, 1000), Local0)
|
||||||
|
/* Check for Mutex acquired */
|
||||||
|
If (LEqual (Local0, Zero)) {
|
||||||
|
/* Turn off VSIO */
|
||||||
|
If (LEqual (Arg0, Zero)) {
|
||||||
|
VSIO = 0
|
||||||
|
} ElseIf (LEqual (Arg0, 1)) {
|
||||||
|
VSIO = 3
|
||||||
|
}
|
||||||
|
Release (MUTV)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Power resource methods for CAM1 */
|
||||||
|
PowerResource (OVFI, 0, 0) {
|
||||||
|
Name (STA, 0)
|
||||||
|
Method (_ON, 0, Serialized) {
|
||||||
|
If (LEqual (AVP2, 1)) {
|
||||||
|
If (LEqual (STA, 0)) {
|
||||||
|
/* Enable VSIO regulator +
|
||||||
|
daisy chain */
|
||||||
|
DOVD(1)
|
||||||
|
|
||||||
|
VAX2 = 1 /* Enable VAUX2 */
|
||||||
|
|
||||||
|
if (LNotEqual (AX2V, 52)) {
|
||||||
|
/* Set VAUX2 as
|
||||||
|
1.8006 V */
|
||||||
|
AX2V = 52
|
||||||
|
}
|
||||||
|
Sleep(1)
|
||||||
|
|
||||||
|
\_SB.PCI0.I2C3.PMIC.CLKE()
|
||||||
|
|
||||||
|
VAX1 = 1 /* Enable VAUX1 */
|
||||||
|
if (LNotEqual (AX1V, 19)) {
|
||||||
|
/* Set VAUX1 as 1.2132V */
|
||||||
|
AX1V = 19
|
||||||
|
}
|
||||||
|
Sleep(3)
|
||||||
|
|
||||||
|
\_SB.PCI0.I2C3.CAM1.CGP4(1)
|
||||||
|
Sleep(3)
|
||||||
|
|
||||||
|
\_SB.PCI0.I2C3.CAM1.CGP5(1)
|
||||||
|
Sleep(5)
|
||||||
|
STA = 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Method (_OFF, 0, Serialized) {
|
||||||
|
If (LEqual (AVP2, 1)) {
|
||||||
|
If (LEqual (STA, 1)) {
|
||||||
|
Sleep(2)
|
||||||
|
\_SB.PCI0.I2C3.PMIC.CLKD()
|
||||||
|
Sleep(2)
|
||||||
|
\_SB.PCI0.I2C3.CAM1.CGP5(0)
|
||||||
|
Sleep(3)
|
||||||
|
VAX1 = 0
|
||||||
|
Sleep(1)
|
||||||
|
\_SB.PCI0.I2C3.CAM1.CGP4(0)
|
||||||
|
Sleep(1)
|
||||||
|
VAX2 = 0
|
||||||
|
Sleep(1)
|
||||||
|
DOVD(0)
|
||||||
|
Sleep(1)
|
||||||
|
|
||||||
|
}
|
||||||
|
STA = 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Method (_STA, 0, NotSerialized) {
|
||||||
|
Return (STA)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Device (CAM1)
|
Device (CAM1)
|
||||||
|
@ -184,6 +839,47 @@ Scope (\_SB.PCI0.I2C3)
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
Field (\_SB.PCI0.I2C3.PMIC.GPOP, ByteAcc, NoLock, Preserve)
|
||||||
|
{
|
||||||
|
Connection
|
||||||
|
(
|
||||||
|
GpioIo (Exclusive, PullDefault, 0x0000, 0x0000,
|
||||||
|
IoRestrictionOutputOnly,
|
||||||
|
"\\_SB.PCI0.I2C3.PMIC", 0x00,
|
||||||
|
ResourceConsumer,,)
|
||||||
|
{
|
||||||
|
4
|
||||||
|
}
|
||||||
|
),
|
||||||
|
GPO4, 1,
|
||||||
|
Connection
|
||||||
|
(
|
||||||
|
GpioIo (Exclusive, PullDefault, 0x0000, 0x0000,
|
||||||
|
IoRestrictionOutputOnly,
|
||||||
|
"\\_SB.PCI0.I2C3.PMIC", 0x00,
|
||||||
|
ResourceConsumer,,)
|
||||||
|
{
|
||||||
|
5
|
||||||
|
}
|
||||||
|
),
|
||||||
|
GPO5, 1,
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Set or clear GPO4 GPIO */
|
||||||
|
Method (CGP4, 1, Serialized)
|
||||||
|
{
|
||||||
|
GPO4 = Arg0
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Set or clear GPO5 GPIO */
|
||||||
|
Method (CGP5, 1, Serialized)
|
||||||
|
{
|
||||||
|
GPO5 = Arg0
|
||||||
|
}
|
||||||
|
|
||||||
|
Name (_PR0, Package () { ^^I2C3.PMIC.OVFI })
|
||||||
|
Name (_PR3, Package () { ^^I2C3.PMIC.OVFI })
|
||||||
|
|
||||||
/* Port0 of CAM1 is connected to port1 of CIO2 device */
|
/* Port0 of CAM1 is connected to port1 of CIO2 device */
|
||||||
Name (_DSD, Package () {
|
Name (_DSD, Package () {
|
||||||
ToUUID ("dbb8e3e6-5886-4ba6-8795-1319f52a966b"),
|
ToUUID ("dbb8e3e6-5886-4ba6-8795-1319f52a966b"),
|
||||||
|
|
Loading…
Reference in New Issue