/* SPDX-License-Identifier: GPL-2.0-only */ #include #include #include /* Get pin control MMIO address */ Method (GPAD, 0x1) { /* Arg0 - GPIO pin number */ Return ((Arg0 * 4) + ACPIMMIO_GPIO0_BASE) } /* Read pin control dword */ Method (GPRD, 0x1, Serialized) { /* Arg0 - GPIO pin control MMIO address */ Local0 = Arg0 OperationRegion (GPDW, SystemMemory, Local0, 4) Field (GPDW, AnyAcc, NoLock, Preserve) { TEMP, 32 } Return (TEMP) } /* Write pin control dword */ Method (GPWR, 0x2, Serialized) { /* Arg0 - GPIO pin control MMIO address */ /* Arg1 - Value for control register */ Local0 = Arg0 OperationRegion (GPDW, SystemMemory, Local0, 4) Field (GPDW, AnyAcc, NoLock, Preserve) { TEMP,32 } TEMP = Arg1 } /* * Set GPIO Output Value * Arg0 - GPIO Number */ Method (STXS, 1, Serialized) { OperationRegion (GPDW, SystemMemory, GPAD (Arg0), 4) Field (GPDW, AnyAcc, NoLock, Preserve) { VAL0, 32 } VAL0 |= GPIO_OUTPUT_VALUE } /* * Clear GPIO Output Value * Arg0 - GPIO Number */ Method (CTXS, 1, Serialized) { OperationRegion (GPDW, SystemMemory, GPAD (Arg0), 4) Field (GPDW, AnyAcc, NoLock, Preserve) { VAL0, 32 } VAL0 &= ~GPIO_OUTPUT_VALUE } /* * Get GPIO Input Value * Arg0 - GPIO Number */ Method (GRXS, 1, Serialized) { OperationRegion (GPDW, SystemMemory, GPAD (Arg0), 4) Field (GPDW, AnyAcc, NoLock, Preserve) { VAL0, 32 } Local0 = (GPIO_PIN_STS & VAL0) >> GPIO_PIN_STS_SHIFT Return (Local0) } /* * Get GPIO Output Value * Arg0 - GPIO Number */ Method (GTXS, 1, Serialized) { OperationRegion (GPDW, SystemMemory, GPAD (Arg0), 4) Field (GPDW, AnyAcc, NoLock, Preserve) { VAL0, 32 } Local0 = (GPIO_OUTPUT_VALUE & VAL0) >> GPIO_OUTPUT_SHIFT Return (Local0) }