• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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