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