• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/* SPDX-License-Identifier: GPL-2.0-only */
2
3
4/* SuperIO GPIO configuration via logical device 0x0A */
5
6Name (MSBF, ResourceTemplate ()
7{
8	IO (Decode16, 0x0000, 0x0000, 0x01, 0x80, _Y1B)
9})
10
11OperationRegion (LPC0, SystemIO, 0x0E00, 0x60)
12Field (LPC0, ByteAcc, NoLock, Preserve)
13{
14	PME0,   8,
15	Offset (0x02),	PME2,8,
16	Offset (0x04),	PME4,8,
17	Offset (0x0A),	PMEA,8,
18	Offset (0x23),
19		GC10,8, GC11,8, GC12,8, GC13,8, GC14,8, GC15,8, GC16,8, GC17,8,
20		GC20,8, GC21,8, GC22,8, GC23,8, GC24,8, GC25,8, GC26,8, GC27,8,
21		GC30,8, GC31,8, GC32,8, GC33,8, GC34,8, GC35,8, GC36,8, GC37,8,
22		GC40,8, GC41,8, GC42,8, GC43,8,
23
24	Offset (0x3F),
25		GC50,8, GC51,8, GC52,8, GC53,8, GC54,8, GC55,8, GC56,8, GC57,8,
26		GC60,8, GC61,8,
27
28	Offset (0x4B),
29		GP_1,8, GP_2,8, GP_3,8, GP_4,8, GP_5,8, GP_6,8,
30	Offset (0x56),	FAN1,8,
31	Offset (0x5D),	LED1,8, LED2,8,
32}
33
34OperationRegion (SMC1, SystemIO, 0x2E, 0x02)
35Field (SMC1, ByteAcc, NoLock, Preserve)
36{
37	INDX,   8,	DATA,   8
38}
39
40IndexField (INDX, DATA, ByteAcc, NoLock, Preserve)
41{
42	Offset (0x07),	LDN,    8,
43	Offset (0x22),	PWRC,   8,
44	Offset (0x30),	ACTR,   8,
45	Offset (0x60),
46		IOAH,   8,	IOAL,   8,
47		IOBH,   8,	IOBL,   8,
48
49	Offset (0x70),	INTR,   8,
50	Offset (0x72),	INT1,   8,
51	Offset (0x74),	DMCH,   8,
52	Offset (0xB2),	SPS1,   8,	SPS2,   8,
53	Offset (0xB8),	D2TS,   8,
54	Offset (0xF0),	OPT1,   8,	OPT2,   8,	OPT3,   8,
55	Offset (0xF4),	WDTC,   8,
56	Offset (0xF6),	GP01,   8,	GP02,   8,	GP04,   8
57}
58
59Method (ECFG, 0, NotSerialized)
60{
61	INDX = 0x55
62}
63Method (XCFG, 0, NotSerialized)
64{
65	INDX = 0xAA
66}
67
68Method (_CRS, 0, NotSerialized)
69{
70	CreateWordField (MSBF, \_SB.PCI0.ICH0.SMSC._Y1B._MIN, IOM1)
71	CreateWordField (MSBF, \_SB.PCI0.ICH0.SMSC._Y1B._MAX, IOM2)
72	CreateByteField (MSBF, \_SB.PCI0.ICH0.SMSC._Y1B._LEN, IOML)
73
74	ECFG ()
75	\_SB.PCI0.ICH0.SMSC.LDN = 0x0A
76	IOM1 = 0x00
77	IOM2 = 0x00
78	IOM1 |= \_SB.PCI0.ICH0.SMSC.IOAH
79	IOM1 <<= 8
80	IOM1 |= \_SB.PCI0.ICH0.SMSC.IOAL
81	IOM2 = IOM1
82	If (IOM1 != 0)
83	{
84		IOML = 0x80
85	}
86	XCFG ()
87
88	Return (MSBF)
89}
90
91
92Method (_INI, 0, NotSerialized)
93{
94	/* GPIO configuration */
95	GC10 = 0x00
96	GC11 = 0x81
97	GC17 = 0x00
98	GC21 = 0x0c
99	GC22 = 0x00
100	GC27 = 0x04
101	GC30 = 0x04
102	GC31 = 0x01
103	GC32 = 0x01
104	GC33 = 0x01
105	GC34 = 0x01 /* GPI password jumper */
106	GC35 = 0x01 /* GPI scsi enable jumper */
107	GC42 = 0x01  /* GPI */
108	GC60 = 0x86 /* led 1 */
109	GC61 = 0x81 /* led 2 ?? */
110
111	/* GPIO initial output levels */
112	Local0 = GP_1
113	Local0 &= 0x7C
114	Local0 |= 0x81
115	GP_1 = Local0
116
117	Local0 = GP_2
118	Local0 &= 0xFE
119	Local0 |= 0
120	GP_2 = Local0
121
122	Local0 = GP_3
123	Local0 &= 0x7F
124	Local0 |= 0x80
125	GP_3 = Local0
126
127	Local0 = GP_4
128	Local0 &= 0x7F
129	Local0 |= 0
130	GP_4 = Local0
131
132	/* Power Led */
133	Local0 = LED1
134	Local0 &= 0xfc
135	Local0 |= 1
136	LED1 = Local0
137
138}
139
140Method (MLED, 1, NotSerialized)
141{
142	If (Arg0 == 0x00)
143	{
144		LED1 = 0x00
145	}
146
147	If (Arg0 == 0x01 || Arg0 == 0x02)
148	{
149		LED1 = 0x01
150	}
151
152	If (Arg0 == 0x03)
153	{
154		LED1 = 0x02
155	}
156
157	If (Arg0 == 0x04 || Arg0 == 0x05)
158	{
159		LED1 = 0x03
160	}
161}
162