1/* SPDX-License-Identifier: GPL-2.0 */
2/*
3 * Copyright (C) 2016 Intel Corporation.
4 */
5
6Scope (\_SB)
7{
8	/* Get Pad Configuration DW0 register value */
9	Method (GPC0, 0x1, Serialized)
10	{
11		/* Arg0 - GPIO DW0 address */
12		Store (Arg0, Local0)
13		OperationRegion (PDW0, SystemMemory, Local0, 4)
14		Field (PDW0, AnyAcc, NoLock, Preserve) {
15			TEMP, 32
16		}
17		Return (TEMP)
18	}
19
20	/* Set Pad Configuration DW0 register value */
21	Method (SPC0, 0x2, Serialized)
22	{
23		/* Arg0 - GPIO DW0 address */
24		/* Arg1 - Value for DW0 register */
25		Store (Arg0, Local0)
26		OperationRegion (PDW0, SystemMemory, Local0, 4)
27		Field (PDW0, AnyAcc, NoLock, Preserve) {
28			TEMP,32
29		}
30		Store (Arg1, TEMP)
31	}
32
33	/* Get Pad Configuration DW1 register value */
34	Method (GPC1, 0x1, Serialized)
35	{
36		/* Arg0 - GPIO DW0 address */
37		Store (Add (Arg0, 0x4), Local0)
38		OperationRegion (PDW1, SystemMemory, Local0, 4)
39		Field (PDW1, AnyAcc, NoLock, Preserve) {
40			TEMP, 32
41		}
42		Return (TEMP)
43	}
44
45	/* Set Pad Configuration DW1 register value */
46	Method (SPC1, 0x2, Serialized)
47	{
48		/* Arg0 - GPIO DW0 address */
49		/* Arg1 - Value for DW1 register */
50		Store (Add (Arg0, 0x4), Local0)
51		OperationRegion (PDW1, SystemMemory, Local0, 4)
52		Field(PDW1, AnyAcc, NoLock, Preserve) {
53			TEMP,32
54		}
55		Store (Arg1, TEMP)
56	}
57
58	/* Get DW0 address of a given pad */
59	Method (GDW0, 0x2, Serialized)
60	{
61		/* Arg0 - GPIO portid */
62		/* Arg1 - GPIO pad offset relative to the community */
63		Store (0, Local1)
64		Or( Or (ShiftLeft (Arg0, 16), IOMAP_P2SB_BAR),
65					Local1, Local1)
66		Or( Add (PAD_CFG_BASE, Multiply (Arg1, Multiply (
67			GPIO_NUM_PAD_CFG_REGS, 4))), Local1, Local1)
68		Return (Local1)
69	}
70
71	/* Calculate HOSTSW_REG address */
72	Method (CHSA, 0x1, Serialized)
73	{
74		/* Arg0 - GPIO pad offset relative to the community */
75		Add (HOSTSW_OWN_REG_0, Multiply (Divide (Arg0, 32), 4), Local1)
76		Return (Local1)
77	}
78
79	/* Get Host ownership register of GPIO Community */
80	Method (GHO, 0x2, Serialized)
81	{
82		/* Arg0 - GPIO portid */
83		/* Arg1 - GPIO pad offset relative to the community */
84		Store (CHSA (Arg1), Local1)
85
86		OperationRegion (SHO0, SystemMemory, Or ( Or
87			(IOMAP_P2SB_BAR, ShiftLeft (Arg0, 16)), Local1), 4)
88		Field (SHO0, AnyAcc, NoLock, Preserve) {
89			TEMP, 32
90		}
91		Return (TEMP)
92	}
93
94	/* Set Host ownership register of GPIO Community */
95	Method (SHO, 0x3, Serialized)
96	{
97		/* Arg0 - GPIO portid */
98		/* Arg1 - GPIO pad offset relative to the community */
99		/* Arg2 - Value for Host own register */
100		Store (CHSA (Arg1), Local1)
101
102		OperationRegion (SHO0, SystemMemory, Or ( Or
103			(IOMAP_P2SB_BAR, ShiftLeft (Arg0, 16)), Local1), 4)
104		Field (SHO0, AnyAcc, NoLock, Preserve) {
105			TEMP, 32
106		}
107		Store (Arg2, TEMP)
108	}
109}
110