blob: 6a8f82492990602072e38638b681207f31f1ce60 [file] [log] [blame]
Angel Pons32abdd62020-04-05 15:47:03 +02001/* SPDX-License-Identifier: GPL-2.0-only */
Subrata Banik8ff80b22020-09-23 19:17:12 +05302#include <soc/intel/common/block/acpi/acpi/gpio_op.asl>
Aamir Bohra3ee54bb2018-10-17 11:55:01 +05303#include <soc/gpio_defs.h>
4#include <soc/irq.h>
5#include <soc/pcr_ids.h>
6
Aamir Bohra3ee54bb2018-10-17 11:55:01 +05307Device (GPIO)
8{
Aamir Bohra6efa5c32018-11-06 11:37:44 +05309 Name (_HID, "INT3455")
Aamir Bohra3ee54bb2018-10-17 11:55:01 +053010 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, COM2)
Aamir Bohra3ee54bb2018-10-17 11:55:01 +053018 Memory32Fixed (ReadWrite, 0, 0, COM4)
Aamir Bohra6efa5c32018-11-06 11:37:44 +053019 Memory32Fixed (ReadWrite, 0, 0, COM5)
Aamir Bohra3ee54bb2018-10-17 11:55:01 +053020 Interrupt (ResourceConsumer, Level, ActiveLow, Shared,,, GIRQ)
21 { GPIO_IRQ14 }
22 })
23
24 Method (_CRS, 0, NotSerialized)
25 {
26 /* GPIO Community 0 */
27 CreateDWordField (^RBUF, ^COM0._BAS, BAS0)
28 CreateDWordField (^RBUF, ^COM0._LEN, LEN0)
Angel Pons263e2e12020-09-24 16:29:38 +020029 BAS0 = ^^PCRB (PID_GPIOCOM0)
30 LEN0 = GPIO_BASE_SIZE
Aamir Bohra3ee54bb2018-10-17 11:55:01 +053031
32 /* GPIO Community 1 */
33 CreateDWordField (^RBUF, ^COM1._BAS, BAS1)
34 CreateDWordField (^RBUF, ^COM1._LEN, LEN1)
Angel Pons263e2e12020-09-24 16:29:38 +020035 BAS1 = ^^PCRB (PID_GPIOCOM1)
36 LEN1 = GPIO_BASE_SIZE
Aamir Bohra3ee54bb2018-10-17 11:55:01 +053037
38 /* GPIO Community 2 */
39 CreateDWordField (^RBUF, ^COM2._BAS, BAS2)
40 CreateDWordField (^RBUF, ^COM2._LEN, LEN2)
Angel Pons263e2e12020-09-24 16:29:38 +020041 BAS2 = ^^PCRB (PID_GPIOCOM2)
42 LEN2 = GPIO_BASE_SIZE
Aamir Bohra3ee54bb2018-10-17 11:55:01 +053043
Aamir Bohra3ee54bb2018-10-17 11:55:01 +053044 /* GPIO Community 4 */
45 CreateDWordField (^RBUF, ^COM4._BAS, BAS4)
46 CreateDWordField (^RBUF, ^COM4._LEN, LEN4)
Angel Pons263e2e12020-09-24 16:29:38 +020047 BAS4 = ^^PCRB (PID_GPIOCOM4)
48 LEN4 = GPIO_BASE_SIZE
Aamir Bohra3ee54bb2018-10-17 11:55:01 +053049
Aamir Bohra6efa5c32018-11-06 11:37:44 +053050 /* GPIO Community 5 */
51 CreateDWordField (^RBUF, ^COM5._BAS, BAS5)
52 CreateDWordField (^RBUF, ^COM5._LEN, LEN5)
Angel Pons263e2e12020-09-24 16:29:38 +020053 BAS5 = ^^PCRB (PID_GPIOCOM5)
54 LEN5 = GPIO_BASE_SIZE
Aamir Bohra6efa5c32018-11-06 11:37:44 +053055
Aamir Bohra3ee54bb2018-10-17 11:55:01 +053056 Return (RBUF)
57 }
58
59 Method (_STA, 0, NotSerialized)
60 {
61 Return (0xF)
62 }
63}
64
65/*
66 * Get GPIO DW0 Address
67 * Arg0 - GPIO Number
68 */
69Method (GADD, 1, NotSerialized)
70{
71 /* GPIO Community 0 */
Angel Pons263e2e12020-09-24 16:29:38 +020072 If ((Arg0 >= GPP_G0) && (Arg0 <= GPP_A23))
Aamir Bohra3ee54bb2018-10-17 11:55:01 +053073 {
Angel Pons263e2e12020-09-24 16:29:38 +020074 Local0 = PID_GPIOCOM0
Angel Pons1a43de12020-09-28 00:51:15 +020075 Local1 = Arg0 - GPP_G0
Aamir Bohra3ee54bb2018-10-17 11:55:01 +053076 }
77 /* GPIO Community 1 */
Angel Pons263e2e12020-09-24 16:29:38 +020078 If ((Arg0 >= GPP_H0) && (Arg0 <= GPP_F19))
Aamir Bohra3ee54bb2018-10-17 11:55:01 +053079 {
Angel Pons263e2e12020-09-24 16:29:38 +020080 Local0 = PID_GPIOCOM1
Angel Pons1a43de12020-09-28 00:51:15 +020081 Local1 = Arg0 - GPP_H0
Aamir Bohra3ee54bb2018-10-17 11:55:01 +053082 }
83 /* GPIO Community 2 */
Angel Pons263e2e12020-09-24 16:29:38 +020084 If ((Arg0 >= GPD0) && (Arg0 <= GPD11))
Aamir Bohra3ee54bb2018-10-17 11:55:01 +053085 {
Angel Pons263e2e12020-09-24 16:29:38 +020086 Local0 = PID_GPIOCOM2
87 Local1 = Arg0 - GPD0
Aamir Bohra3ee54bb2018-10-17 11:55:01 +053088 }
Aamir Bohra6efa5c32018-11-06 11:37:44 +053089 /* GPIO Community 4 */
Angel Pons263e2e12020-09-24 16:29:38 +020090 If ((Arg0 >= GPP_C0) && (Arg0 <= GPP_E23))
Aamir Bohra3ee54bb2018-10-17 11:55:01 +053091 {
Angel Pons263e2e12020-09-24 16:29:38 +020092 Local0 = PID_GPIOCOM4
93 Local1 = Arg0 - GPP_C0
Aamir Bohra3ee54bb2018-10-17 11:55:01 +053094 }
Angel Pons263e2e12020-09-24 16:29:38 +020095 /* GPIO Community 5 */
96 If ((Arg0 >= GPP_R0) && (Arg0 <= GPP_S7))
Aamir Bohra6efa5c32018-11-06 11:37:44 +053097 {
Angel Pons263e2e12020-09-24 16:29:38 +020098 Local0 = PID_GPIOCOM5
99 Local1 = Arg0 - GPP_R0
Aamir Bohra6efa5c32018-11-06 11:37:44 +0530100 }
Angel Pons263e2e12020-09-24 16:29:38 +0200101
102 Local2 = PCRB (Local0)
103 Local2 += PAD_CFG_BASE
104 Return (Local2 + (Local1 * 16))
Aamir Bohra3ee54bb2018-10-17 11:55:01 +0530105}