1/* SPDX-License-Identifier: GPL-2.0-only */ 2 3#include <gpio.h> 4#include <soc/intel/common/block/acpi/acpi/gpio_op.asl> 5#include <soc/irq.h> 6#include <soc/pcr_ids.h> 7 8#include <soc/intel/common/acpi/gpio.asl> 9 10Device (GPIO) 11{ 12 Name (_HID, CROS_GPIO_NAME) 13 Name (_UID, 0) 14 Name (_DDN, "GPIO Controller") 15 16 Name (RBUF, ResourceTemplate() 17 { 18 Memory32Fixed (ReadWrite, 0, 0, COM0) 19 Memory32Fixed (ReadWrite, 0, 0, COM1) 20 Memory32Fixed (ReadWrite, 0, 0, COM4) 21 Memory32Fixed (ReadWrite, 0, 0, COM5) 22 Interrupt (ResourceConsumer, Level, ActiveLow, Shared,,, GIRQ) 23 { GPIO_IRQ14 } 24 }) 25 26 Method (_CRS, 0, NotSerialized) 27 { 28 /* GPIO Community 0 */ 29 CreateDWordField (^RBUF, ^COM0._BAS, BAS0) 30 CreateDWordField (^RBUF, ^COM0._LEN, LEN0) 31 BAS0 = ^^PCRB (PID_GPIOCOM0) 32 LEN0 = GPIO_BASE_SIZE 33 34 /* GPIO Community 1 */ 35 CreateDWordField (^RBUF, ^COM1._BAS, BAS1) 36 CreateDWordField (^RBUF, ^COM1._LEN, LEN1) 37 BAS1 = ^^PCRB (PID_GPIOCOM1) 38 LEN1 = GPIO_BASE_SIZE 39 40 /* GPIO Community 4 */ 41 CreateDWordField (^RBUF, ^COM4._BAS, BAS4) 42 CreateDWordField (^RBUF, ^COM4._LEN, LEN4) 43 BAS4 = ^^PCRB (PID_GPIOCOM4) 44 LEN4 = GPIO_BASE_SIZE 45 46 /* GPIO Community 5 */ 47 CreateDWordField (^RBUF, ^COM5._BAS, BAS5) 48 CreateDWordField (^RBUF, ^COM5._LEN, LEN5) 49 BAS5 = ^^PCRB (PID_GPIOCOM5) 50 LEN5 = GPIO_BASE_SIZE 51 52 Return (RBUF) 53 } 54 55 Method (_STA, 0, NotSerialized) 56 { 57 Return (0xF) 58 } 59} 60/* 61 * Get GPIO DW0 Address 62 * Arg0 - GPIO Number 63 */ 64Method (GADD, 1, NotSerialized) 65{ 66 /* GPIO Community 0 */ 67 If (Arg0 >= GPIO_COM0_START && Arg0 <= GPIO_COM0_END) 68 { 69 Local0 = PID_GPIOCOM0 70 Local1 = Arg0 - GPIO_COM0_START 71 } 72 /* GPIO Community 1 */ 73 If (Arg0 >= GPIO_COM1_START && Arg0 <= GPIO_COM1_END) 74 { 75 Local0 = PID_GPIOCOM1 76 Local1 = Arg0 - GPIO_COM1_START 77 } 78 /* GPIO Community 2 */ 79 If (Arg0 >= GPIO_COM2_START && Arg0 <= GPIO_COM2_END) 80 { 81 Local0 = PID_GPIOCOM2 82 Local1 = Arg0 - GPIO_COM2_START 83 } 84 /* GPIO Community 4 */ 85 If (Arg0 >= GPIO_COM4_START && Arg0 <= GPIO_COM4_END) 86 { 87 Local0 = PID_GPIOCOM4 88 Local1 = Arg0 - GPIO_COM4_START 89 } 90 /* GPIO Community 05*/ 91 If (Arg0 >= GPIO_COM5_START && Arg0 <= GPIO_COM5_END) 92 { 93 Local0 = PID_GPIOCOM5 94 Local1 = Arg0 - GPIO_COM5_START 95 } 96 97 Local2 = PCRB(Local0) + PAD_CFG_BASE + (Local1 * 16) 98 Return (Local2) 99} 100 101/* 102 * Return PCR Port ID of GPIO Communities 103 * 104 * Arg0: GPIO Community (0-5) 105 */ 106Method (GPID, 1, Serialized) 107{ 108 Switch (ToInteger (Arg0)) 109 { 110 Case (COMM_0) { 111 Local0 = PID_GPIOCOM0 112 } 113 Case (COMM_1) { 114 Local0 = PID_GPIOCOM1 115 } 116 Case (COMM_2) { 117 Local0 = PID_GPIOCOM2 118 } 119 Case (COMM_4) { 120 Local0 = PID_GPIOCOM4 121 } 122 Case (COMM_5) { 123 Local0 = PID_GPIOCOM5 124 } 125 Default { 126 Return (0) 127 } 128 } 129 130 Return (Local0) 131} 132