• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/* SPDX-License-Identifier: GPL-2.0-only */
2#include <soc/gpio_defs_cnp_h.h>
3#include <soc/intel/common/block/acpi/acpi/gpio_op.asl>
4#include <soc/irq.h>
5#include <soc/pcr_ids.h>
6
7Device (GPIO)
8{
9	Name (_HID, "INT3450")
10	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, COM3)
18		Memory32Fixed (ReadWrite, 0, 0, COM4)
19		Interrupt (ResourceConsumer, Level, ActiveLow, Shared,,, GIRQ)
20			{ GPIO_IRQ14 }
21	})
22
23	/*
24	 * GPIO communities 0, 1, 3, and 4 are exported for the OS.
25	 * This is based on the Linux kernel provided community map at
26	 * drivers/pinctrl/intel/pinctrl-cannonlake.c:cnhl_communities[]
27	 */
28	Method (_CRS, 0, NotSerialized)
29	{
30		/* GPIO Community 0 */
31		CreateDWordField (^RBUF, ^COM0._BAS, BAS0)
32		CreateDWordField (^RBUF, ^COM0._LEN, LEN0)
33		BAS0 = ^^PCRB (PID_GPIOCOM0)
34		LEN0 = GPIO_BASE_SIZE
35
36		/* GPIO Community 1 */
37		CreateDWordField (^RBUF, ^COM1._BAS, BAS1)
38		CreateDWordField (^RBUF, ^COM1._LEN, LEN1)
39		BAS1 = ^^PCRB (PID_GPIOCOM1)
40		LEN1 = GPIO_BASE_SIZE
41
42		/* GPIO Community 3 */
43		CreateDWordField (^RBUF, ^COM3._BAS, BAS3)
44		CreateDWordField (^RBUF, ^COM3._LEN, LEN3)
45		BAS3 = ^^PCRB (PID_GPIOCOM3)
46		LEN3 = GPIO_BASE_SIZE
47
48		/* GPIO Community 4 */
49		CreateDWordField (^RBUF, ^COM4._BAS, BAS4)
50		CreateDWordField (^RBUF, ^COM4._LEN, LEN4)
51		BAS4 = ^^PCRB (PID_GPIOCOM4)
52		LEN4 = GPIO_BASE_SIZE
53
54		Return (RBUF)
55	}
56
57	Method (_STA, 0, NotSerialized)
58	{
59		Return (0xF)
60	}
61}
62
63/*
64 * Get GPIO DW0 Address
65 * Arg0 - GPIO Number
66 */
67Method (GADD, 1, NotSerialized)
68{
69	/* GPIO Community 0 */
70	If (Arg0 >= GPP_A0 && Arg0 <= GSPI1_CLK_LOOPBK)
71	{
72		Local0 = PID_GPIOCOM0
73		Local1 = Arg0 - GPP_A0
74	}
75	/* GPIO Community 1 */
76	If (Arg0 >= GPP_C0 && Arg0 <= vSSP2_RXD)
77	{
78		Local0 = PID_GPIOCOM1
79		Local1 = Arg0 - GPP_C0
80	}
81	/* GPIO Community 3*/
82	If (Arg0 >= GPP_K0 && Arg0 <= SPI0_CLK_LOOPBK)
83	{
84		Local0 = PID_GPIOCOM3
85		Local1 = Arg0 - GPP_K0
86	}
87	/* GPIO Community 4*/
88	If (Arg0 >= HDACPU_SDI && Arg0 <= GPP_J11)
89	{
90		Local0 = PID_GPIOCOM4
91		Local1 = Arg0 - GPP_I0
92	}
93	Local2 = PCRB (Local0)
94	Local2 += PAD_CFG_BASE
95	Return (Local2 + Local1 * 16)
96}
97