1/* SPDX-License-Identifier: GPL-2.0-only */ 2 3Device (GPIO) 4{ 5 // GPIO Controller 6 Name (_HID, "INT33C7") 7 Name (_CID, "INT33C7") 8 Name (_UID, 1) 9 10 Name (RBUF, ResourceTemplate () 11 { 12 DWordIo (ResourceProducer, 13 MinFixed, // IsMinFixed 14 MaxFixed, // IsMaxFixed 15 PosDecode, // Decode 16 EntireRange, // ISARanges 17 0x00000000, // AddressGranularity 18 0x00000000, // AddressMinimum 19 0x00000000, // AddressMaximum 20 0x00000000, // AddressTranslation 21 0x00000000, // RangeLength 22 , // ResourceSourceIndex 23 , // ResourceSource 24 BAR0) 25 // Disabled due to IRQ storm: http://crosbug.com/p/29548 26 //Interrupt (ResourceConsumer, 27 // Level, ActiveHigh, Shared, , , ) {14} 28 }) 29 30 Method (_CRS, 0, NotSerialized) 31 { 32 CreateDwordField (^RBUF, ^BAR0._MIN, BMIN) 33 CreateDwordField (^RBUF, ^BAR0._MAX, BMAX) 34 CreateDwordField (^RBUF, ^BAR0._LEN, BLEN) 35 36 BLEN = DEFAULT_GPIOSIZE 37 BMIN = DEFAULT_GPIOBASE 38 BMAX = DEFAULT_GPIOBASE + DEFAULT_GPIOSIZE - 1 39 40 Return (RBUF) 41 } 42 43 Method (_STA, 0, NotSerialized) 44 { 45 Return (0xF) 46 } 47 48 // GWAK: Setup GPIO as ACPI GPE for Wake 49 // Arg0: GPIO Number 50 Method (GWAK, 1, Serialized) 51 { 52 // Local0 = GPIO Base Address 53 Local0 = GPBS & ~1 54 55 // Local1 = BANK, Local2 = OFFSET 56 Local2 = Arg0 % 32 57 Local1 = Arg0 / 32 58 59 // 60 // Set OWNER to ACPI 61 // 62 63 // Local3 = GPIOBASE + GPIO_OWN(BANK) 64 Local3 = Local0 + Local1 * 4 65 66 // GPIO_OWN(BANK) 67 OperationRegion (IOWN, SystemIO, Local3, 4) 68 Field (IOWN, AnyAcc, NoLock, Preserve) { 69 GOWN, 32, 70 } 71 72 // GPIO_OWN[GPIO] = 0 (ACPI) 73 GOWN &= ~(1 << Local2) 74 75 // 76 // Set ROUTE to SCI 77 // 78 79 // Local3 = GPIOBASE + GPIO_ROUTE(BANK) 80 Local3 = Local0 + 0x30 + Local1 * 4 81 82 // GPIO_ROUTE(BANK) 83 OperationRegion (IROU, SystemIO, Local3, 4) 84 Field (IROU, AnyAcc, NoLock, Preserve) { 85 GROU, 32, 86 } 87 88 // GPIO_ROUTE[GPIO] = 0 (SCI) 89 GROU &= ~(1 << Local2) 90 91 // 92 // Set GPnCONFIG to GPIO|INPUT|INVERT 93 // 94 95 // Local3 = GPIOBASE + GPnCONFIG0(GPIO) 96 Local3 = Local0 + 0x100 + Arg0 * 8 97 98 // GPnCONFIG(GPIO) 99 OperationRegion (GPNC, SystemIO, Local3, 8) 100 Field (GPNC, AnyAcc, NoLock, Preserve) { 101 GMOD, 1, // MODE: 0=NATIVE 1=GPIO 102 , 1, 103 GIOS, 1, // IO_SEL: 0=OUTPUT 1=INPUT 104 GINV, 1, // INVERT: 0=NORMAL 1=INVERT 105 GLES, 1, // LxEB: 0=EDGE 1=LEVEL 106 , 24, 107 ILVL, 1, // INPUT: 0=LOW 1=HIGH 108 OLVL, 1, // OUTPUT: 0=LOW 1=HIGH 109 GPWP, 2, // PULLUP: 00=NONE 01=DOWN 10=UP 11=INVALID 110 ISEN, 1, // SENSE: 0=ENABLE 1=DISABLE 111 } 112 113 GMOD = 1 // GPIO 114 GIOS = 1 // INPUT 115 GINV = 1 // INVERT 116 } 117} 118