1/* SPDX-License-Identifier: GPL-2.0-only */ 2#include <soc/gpio_defs_cnp_h.h> 3#include <soc/intel/common/block/acpi/acpi/gpio_op.asl> 4#include <soc/irq.h> 5#include <soc/pcr_ids.h> 6 7Device (GPIO) 8{ 9 Name (_HID, "INT3450") 10 Name (_UID, 0) 11 Name (_DDN, "GPIO Controller") 12 13 Name (RBUF, ResourceTemplate() 14 { 15 Memory32Fixed (ReadWrite, 0, 0, COM0) 16 Memory32Fixed (ReadWrite, 0, 0, COM1) 17 Memory32Fixed (ReadWrite, 0, 0, COM3) 18 Memory32Fixed (ReadWrite, 0, 0, COM4) 19 Interrupt (ResourceConsumer, Level, ActiveLow, Shared,,, GIRQ) 20 { GPIO_IRQ14 } 21 }) 22 23 /* 24 * GPIO communities 0, 1, 3, and 4 are exported for the OS. 25 * This is based on the Linux kernel provided community map at 26 * drivers/pinctrl/intel/pinctrl-cannonlake.c:cnhl_communities[] 27 */ 28 Method (_CRS, 0, NotSerialized) 29 { 30 /* GPIO Community 0 */ 31 CreateDWordField (^RBUF, ^COM0._BAS, BAS0) 32 CreateDWordField (^RBUF, ^COM0._LEN, LEN0) 33 BAS0 = ^^PCRB (PID_GPIOCOM0) 34 LEN0 = GPIO_BASE_SIZE 35 36 /* GPIO Community 1 */ 37 CreateDWordField (^RBUF, ^COM1._BAS, BAS1) 38 CreateDWordField (^RBUF, ^COM1._LEN, LEN1) 39 BAS1 = ^^PCRB (PID_GPIOCOM1) 40 LEN1 = GPIO_BASE_SIZE 41 42 /* GPIO Community 3 */ 43 CreateDWordField (^RBUF, ^COM3._BAS, BAS3) 44 CreateDWordField (^RBUF, ^COM3._LEN, LEN3) 45 BAS3 = ^^PCRB (PID_GPIOCOM3) 46 LEN3 = GPIO_BASE_SIZE 47 48 /* GPIO Community 4 */ 49 CreateDWordField (^RBUF, ^COM4._BAS, BAS4) 50 CreateDWordField (^RBUF, ^COM4._LEN, LEN4) 51 BAS4 = ^^PCRB (PID_GPIOCOM4) 52 LEN4 = GPIO_BASE_SIZE 53 54 Return (RBUF) 55 } 56 57 Method (_STA, 0, NotSerialized) 58 { 59 Return (0xF) 60 } 61} 62 63/* 64 * Get GPIO DW0 Address 65 * Arg0 - GPIO Number 66 */ 67Method (GADD, 1, NotSerialized) 68{ 69 /* GPIO Community 0 */ 70 If (Arg0 >= GPP_A0 && Arg0 <= GSPI1_CLK_LOOPBK) 71 { 72 Local0 = PID_GPIOCOM0 73 Local1 = Arg0 - GPP_A0 74 } 75 /* GPIO Community 1 */ 76 If (Arg0 >= GPP_C0 && Arg0 <= vSSP2_RXD) 77 { 78 Local0 = PID_GPIOCOM1 79 Local1 = Arg0 - GPP_C0 80 } 81 /* GPIO Community 3*/ 82 If (Arg0 >= GPP_K0 && Arg0 <= SPI0_CLK_LOOPBK) 83 { 84 Local0 = PID_GPIOCOM3 85 Local1 = Arg0 - GPP_K0 86 } 87 /* GPIO Community 4*/ 88 If (Arg0 >= HDACPU_SDI && Arg0 <= GPP_J11) 89 { 90 Local0 = PID_GPIOCOM4 91 Local1 = Arg0 - GPP_I0 92 } 93 Local2 = PCRB (Local0) 94 Local2 += PAD_CFG_BASE 95 Return (Local2 + Local1 * 16) 96} 97