xref: /freebsd/sys/dev/sound/pci/hda/pin_patch.h (revision 95ee2897e98f5d444f26ed2334cc7c439f9c16c6)
1ef790cc7SK Staring /*-
2*4d846d26SWarner Losh  * SPDX-License-Identifier: BSD-2-Clause
3ef790cc7SK Staring  *
4ef790cc7SK Staring  * Copyright (c) 2018 Khamba Staring <k.staring@quickdecay.com>
5ef790cc7SK Staring  * All rights reserved.
6ef790cc7SK Staring  *
7ef790cc7SK Staring  * Redistribution and use in source and binary forms, with or without
8ef790cc7SK Staring  * modification, are permitted provided that the following conditions
9ef790cc7SK Staring  * are met:
10ef790cc7SK Staring  * 1. Redistributions of source code must retain the above copyright
11ef790cc7SK Staring  *    notice, this list of conditions and the following disclaimer.
12ef790cc7SK Staring  * 2. Redistributions in binary form must reproduce the above copyright
13ef790cc7SK Staring  *    notice, this list of conditions and the following disclaimer in the
14ef790cc7SK Staring  *    documentation and/or other materials provided with the distribution.
15ef790cc7SK Staring  *
16ef790cc7SK Staring  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
17ef790cc7SK Staring  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18ef790cc7SK Staring  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19ef790cc7SK Staring  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
20ef790cc7SK Staring  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21ef790cc7SK Staring  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22ef790cc7SK Staring  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23ef790cc7SK Staring  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24ef790cc7SK Staring  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25ef790cc7SK Staring  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26ef790cc7SK Staring  * SUCH DAMAGE.
27ef790cc7SK Staring  */
28ef790cc7SK Staring #ifndef PIN_PATCH_H
29ef790cc7SK Staring #define PIN_PATCH_H
30ef790cc7SK Staring 
31ef790cc7SK Staring #include "hdac.h"
32ef790cc7SK Staring 
33ef790cc7SK Staring #define PIN_SUBVENDOR(sv)		{ .id = sv }
34ef790cc7SK Staring 
35ef790cc7SK Staring 
36ef790cc7SK Staring #define PIN_PATCH_STRING(n, patchstr) {		\
37ef790cc7SK Staring 	.nid = n,				\
38ef790cc7SK Staring 	.type = PIN_PATCH_TYPE_STRING,		\
39ef790cc7SK Staring 	.patch.string = patchstr		\
40ef790cc7SK Staring }
41ef790cc7SK Staring #define PIN_OVERRIDE(n, newvalue) {		\
42ef790cc7SK Staring 	.nid = n,				\
43ef790cc7SK Staring 	.type = PIN_PATCH_TYPE_OVERRIDE,	\
44ef790cc7SK Staring 	.patch.override = newvalue		\
45ef790cc7SK Staring }
46ef790cc7SK Staring #define PIN_PATCH_NOT_APPLICABLE(n)		\
47ef790cc7SK Staring 	PIN_PATCH_STRING(n, "as=15 misc=1 color=Black ctype=1/8 device=Speaker loc=Rear conn=None")
48ef790cc7SK Staring #define PIN_PATCH_HP_OUT(n)			\
49ef790cc7SK Staring 	PIN_PATCH_STRING(n, "seq=15 as=1 color=Green ctype=1/8 device=Headphones loc=Rear")
50ef790cc7SK Staring #define PIN_PATCH_HP(n)				\
51ef790cc7SK Staring 	PIN_PATCH_STRING(n, "seq=15 as=1 misc=1 color=Green ctype=1/8 device=Headphones loc=Rear")
52ef790cc7SK Staring #define PIN_PATCH_SPEAKER(n)			\
53ef790cc7SK Staring 	PIN_PATCH_STRING(n, "as=2 misc=1 ctype=ATAPI loc=Onboard conn=Fixed")
54ef790cc7SK Staring #define PIN_PATCH_BASS_SPEAKER(n)		\
55ef790cc7SK Staring 	PIN_PATCH_STRING(n, "as=3 misc=1 ctype=ATAPI loc=Onboard conn=Fixed")
56ef790cc7SK Staring #define PIN_PATCH_MIC_IN(n)			\
57ef790cc7SK Staring 	PIN_PATCH_STRING(n, "as=5 misc=9 color=Pink ctype=1/8 device=Mic loc=Rear")
58ef790cc7SK Staring #define PIN_PATCH_MIC_INTERNAL(n)		\
59ef790cc7SK Staring 	PIN_PATCH_STRING(n, "as=6 misc=1 ctype=Digital device=Mic loc=Internal conn=Fixed")
60ef790cc7SK Staring #define PIN_PATCH_MIC_FRONT(n)			\
61ef790cc7SK Staring 	PIN_PATCH_STRING(n, "as=4 misc=12 color=Pink ctype=1/8 device=Mic loc=Front")
62ef790cc7SK Staring #define PIN_PATCH_LINE_IN(n)			\
63ef790cc7SK Staring 	PIN_PATCH_STRING(n, "seq=1 as=3 color=Blue ctype=1/8 device=Line-in loc=Rear")
64ef790cc7SK Staring #define PIN_PATCH_LINE_OUT(n)			\
65ef790cc7SK Staring 	PIN_PATCH_STRING(n, "as=1 color=Green ctype=1/8 loc=Rear")
66ef790cc7SK Staring #define PIN_PATCH_SPDIF_OUT(n)			\
67ef790cc7SK Staring 	PIN_PATCH_STRING(n, "as=4 misc=1 color=Green ctype=Optical device=SPDIF-out loc=Rear")
68ef790cc7SK Staring #define PIN_PATCH_JACK_WO_DETECT(n)		\
69ef790cc7SK Staring 	PIN_PATCH_STRING(n, "seq=12 as=3 misc=1 color=Pink ctype=1/8 device=Mic loc=Rear")
70ef790cc7SK Staring #define PIN_PATCH_HPMIC_WO_DETECT(n)		\
71ef790cc7SK Staring 	PIN_PATCH_STRING(n, "seq=13 as=3 misc=1 color=Pink ctype=1/8 device=Mic loc=Rear")
72ef790cc7SK Staring #define PIN_PATCH_HPMIC_WITH_DETECT(n)		\
73ef790cc7SK Staring 	PIN_PATCH_STRING(n, "seq=12 as=3 color=Pink ctype=1/8 device=Mic loc=Rear")
74ef790cc7SK Staring #define PIN_PATCH_CLFE(n)			\
75ef790cc7SK Staring 	PIN_PATCH_STRING(n, "seq=1 as=1 misc=4 color=Black ctype=1/8 loc=Rear")
76ef790cc7SK Staring #define PIN_PATCH_SURROUND(n)			\
77ef790cc7SK Staring 	PIN_PATCH_STRING(n, "seq=2 as=1 misc=4 color=Orange ctype=1/8 loc=Rear")
78ef790cc7SK Staring #define PIN_PATCH_SUBWOOFER(n)			\
79ef790cc7SK Staring 	PIN_PATCH_STRING(n, "seq=1 as=1 misc=1 ctype=ATAPI device=Speaker loc=Onboard conn=Fixed")
80ef790cc7SK Staring #define PIN_PATCH_DOCK_LINE_OUT(n)		\
81ef790cc7SK Staring 	PIN_PATCH_STRING(n, "seq=15 as=3 color=Black ctype=1/8 loc=Ext-Rear")
82ef790cc7SK Staring #define PIN_PATCH_DOCK_HP(n)			\
83ef790cc7SK Staring 	PIN_PATCH_STRING(n, "seq=15 as=3 color=Black ctype=1/8 device=Headphones loc=Ext-Rear")
84ef790cc7SK Staring #define PIN_PATCH_DOCK_MIC_IN(n)		\
85ef790cc7SK Staring 	PIN_PATCH_STRING(n, "as=4 color=Black ctype=1/8 device=Mic loc=Ext-Left")
86ef790cc7SK Staring 
87ef790cc7SK Staring enum {
88ef790cc7SK Staring 	PIN_PATCH_TYPE_EOL,			/* end-of-list */
89ef790cc7SK Staring 	PIN_PATCH_TYPE_STRING,
90ef790cc7SK Staring 	PIN_PATCH_TYPE_MASK,
91ef790cc7SK Staring 	PIN_PATCH_TYPE_OVERRIDE
92ef790cc7SK Staring };
93ef790cc7SK Staring 
94ef790cc7SK Staring struct pin_patch_t {
95ef790cc7SK Staring 	nid_t nid;				/* nid to patch */
96ef790cc7SK Staring 	int type;				/* patch type */
97ef790cc7SK Staring 	union {
98ef790cc7SK Staring 		const char *string;		/* patch string */
99ef790cc7SK Staring 		uint32_t mask[2];		/* pin config mask */
100ef790cc7SK Staring 		uint32_t override;		/* pin config override */
101ef790cc7SK Staring 	} patch;
102ef790cc7SK Staring };
103ef790cc7SK Staring 
104ef790cc7SK Staring struct pin_machine_model_t {
105ef790cc7SK Staring 	uint32_t id;				/* vendor machine id */
106ef790cc7SK Staring };
107ef790cc7SK Staring 
108ef790cc7SK Staring struct model_pin_patch_t {
109ef790cc7SK Staring 	struct pin_machine_model_t *models;	/* list of machine models */
110ef790cc7SK Staring 	struct pin_patch_t *pin_patches;	/* hardcoded overrides */
111ef790cc7SK Staring 	void (*fixup_func)(struct hdaa_widget *); /* for future use */
112ef790cc7SK Staring };
113ef790cc7SK Staring 
114ef790cc7SK Staring struct hdaa_model_pin_patch_t {
115ef790cc7SK Staring 	uint32_t id;				/* the hdaa id */
116ef790cc7SK Staring 	struct model_pin_patch_t *patches;	/* list of machine patches */
117ef790cc7SK Staring };
118ef790cc7SK Staring 
119ef790cc7SK Staring #endif /* PIN_PATCH_H */
120