xref: /OK3568_Linux_fs/kernel/include/sound/jack.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-or-later */
2*4882a593Smuzhiyun #ifndef __SOUND_JACK_H
3*4882a593Smuzhiyun #define __SOUND_JACK_H
4*4882a593Smuzhiyun 
5*4882a593Smuzhiyun /*
6*4882a593Smuzhiyun  *  Jack abstraction layer
7*4882a593Smuzhiyun  *
8*4882a593Smuzhiyun  *  Copyright 2008 Wolfson Microelectronics plc
9*4882a593Smuzhiyun  */
10*4882a593Smuzhiyun 
11*4882a593Smuzhiyun #include <sound/core.h>
12*4882a593Smuzhiyun #include <linux/android_kabi.h>
13*4882a593Smuzhiyun 
14*4882a593Smuzhiyun struct input_dev;
15*4882a593Smuzhiyun 
16*4882a593Smuzhiyun /**
17*4882a593Smuzhiyun  * enum snd_jack_types - Jack types which can be reported
18*4882a593Smuzhiyun  * @SND_JACK_HEADPHONE: Headphone
19*4882a593Smuzhiyun  * @SND_JACK_MICROPHONE: Microphone
20*4882a593Smuzhiyun  * @SND_JACK_HEADSET: Headset
21*4882a593Smuzhiyun  * @SND_JACK_LINEOUT: Line out
22*4882a593Smuzhiyun  * @SND_JACK_MECHANICAL: Mechanical switch
23*4882a593Smuzhiyun  * @SND_JACK_VIDEOOUT: Video out
24*4882a593Smuzhiyun  * @SND_JACK_AVOUT: AV (Audio Video) out
25*4882a593Smuzhiyun  * @SND_JACK_LINEIN:  Line in
26*4882a593Smuzhiyun  * @SND_JACK_BTN_0: Button 0
27*4882a593Smuzhiyun  * @SND_JACK_BTN_1: Button 1
28*4882a593Smuzhiyun  * @SND_JACK_BTN_2: Button 2
29*4882a593Smuzhiyun  * @SND_JACK_BTN_3: Button 3
30*4882a593Smuzhiyun  * @SND_JACK_BTN_4: Button 4
31*4882a593Smuzhiyun  * @SND_JACK_BTN_5: Button 5
32*4882a593Smuzhiyun  *
33*4882a593Smuzhiyun  * These values are used as a bitmask.
34*4882a593Smuzhiyun  *
35*4882a593Smuzhiyun  * Note that this must be kept in sync with the lookup table in
36*4882a593Smuzhiyun  * sound/core/jack.c.
37*4882a593Smuzhiyun  */
38*4882a593Smuzhiyun enum snd_jack_types {
39*4882a593Smuzhiyun 	SND_JACK_HEADPHONE	= 0x0001,
40*4882a593Smuzhiyun 	SND_JACK_MICROPHONE	= 0x0002,
41*4882a593Smuzhiyun 	SND_JACK_HEADSET	= SND_JACK_HEADPHONE | SND_JACK_MICROPHONE,
42*4882a593Smuzhiyun 	SND_JACK_LINEOUT	= 0x0004,
43*4882a593Smuzhiyun 	SND_JACK_MECHANICAL	= 0x0008, /* If detected separately */
44*4882a593Smuzhiyun 	SND_JACK_VIDEOOUT	= 0x0010,
45*4882a593Smuzhiyun 	SND_JACK_AVOUT		= SND_JACK_LINEOUT | SND_JACK_VIDEOOUT,
46*4882a593Smuzhiyun 	SND_JACK_LINEIN		= 0x0020,
47*4882a593Smuzhiyun 
48*4882a593Smuzhiyun 	/* Kept separate from switches to facilitate implementation */
49*4882a593Smuzhiyun 	SND_JACK_BTN_0		= 0x4000,
50*4882a593Smuzhiyun 	SND_JACK_BTN_1		= 0x2000,
51*4882a593Smuzhiyun 	SND_JACK_BTN_2		= 0x1000,
52*4882a593Smuzhiyun 	SND_JACK_BTN_3		= 0x0800,
53*4882a593Smuzhiyun 	SND_JACK_BTN_4		= 0x0400,
54*4882a593Smuzhiyun 	SND_JACK_BTN_5		= 0x0200,
55*4882a593Smuzhiyun };
56*4882a593Smuzhiyun 
57*4882a593Smuzhiyun /* Keep in sync with definitions above */
58*4882a593Smuzhiyun #define SND_JACK_SWITCH_TYPES 6
59*4882a593Smuzhiyun 
60*4882a593Smuzhiyun struct snd_jack {
61*4882a593Smuzhiyun 	struct list_head kctl_list;
62*4882a593Smuzhiyun 	struct snd_card *card;
63*4882a593Smuzhiyun 	const char *id;
64*4882a593Smuzhiyun #ifdef CONFIG_SND_JACK_INPUT_DEV
65*4882a593Smuzhiyun 	struct input_dev *input_dev;
66*4882a593Smuzhiyun 	int registered;
67*4882a593Smuzhiyun 	int type;
68*4882a593Smuzhiyun 	char name[100];
69*4882a593Smuzhiyun 	unsigned int key[6];   /* Keep in sync with definitions above */
70*4882a593Smuzhiyun #endif /* CONFIG_SND_JACK_INPUT_DEV */
71*4882a593Smuzhiyun 	void *private_data;
72*4882a593Smuzhiyun 	void (*private_free)(struct snd_jack *);
73*4882a593Smuzhiyun 
74*4882a593Smuzhiyun 	ANDROID_KABI_RESERVE(1);
75*4882a593Smuzhiyun };
76*4882a593Smuzhiyun 
77*4882a593Smuzhiyun #ifdef CONFIG_SND_JACK
78*4882a593Smuzhiyun 
79*4882a593Smuzhiyun int snd_jack_new(struct snd_card *card, const char *id, int type,
80*4882a593Smuzhiyun 		 struct snd_jack **jack, bool initial_kctl, bool phantom_jack);
81*4882a593Smuzhiyun int snd_jack_add_new_kctl(struct snd_jack *jack, const char * name, int mask);
82*4882a593Smuzhiyun #ifdef CONFIG_SND_JACK_INPUT_DEV
83*4882a593Smuzhiyun void snd_jack_set_parent(struct snd_jack *jack, struct device *parent);
84*4882a593Smuzhiyun int snd_jack_set_key(struct snd_jack *jack, enum snd_jack_types type,
85*4882a593Smuzhiyun 		     int keytype);
86*4882a593Smuzhiyun #endif
87*4882a593Smuzhiyun void snd_jack_report(struct snd_jack *jack, int status);
88*4882a593Smuzhiyun 
89*4882a593Smuzhiyun #else
snd_jack_new(struct snd_card * card,const char * id,int type,struct snd_jack ** jack,bool initial_kctl,bool phantom_jack)90*4882a593Smuzhiyun static inline int snd_jack_new(struct snd_card *card, const char *id, int type,
91*4882a593Smuzhiyun 			       struct snd_jack **jack, bool initial_kctl, bool phantom_jack)
92*4882a593Smuzhiyun {
93*4882a593Smuzhiyun 	return 0;
94*4882a593Smuzhiyun }
95*4882a593Smuzhiyun 
snd_jack_add_new_kctl(struct snd_jack * jack,const char * name,int mask)96*4882a593Smuzhiyun static inline int snd_jack_add_new_kctl(struct snd_jack *jack, const char * name, int mask)
97*4882a593Smuzhiyun {
98*4882a593Smuzhiyun 	return 0;
99*4882a593Smuzhiyun }
100*4882a593Smuzhiyun 
snd_jack_report(struct snd_jack * jack,int status)101*4882a593Smuzhiyun static inline void snd_jack_report(struct snd_jack *jack, int status)
102*4882a593Smuzhiyun {
103*4882a593Smuzhiyun }
104*4882a593Smuzhiyun 
105*4882a593Smuzhiyun #endif
106*4882a593Smuzhiyun 
107*4882a593Smuzhiyun #if !defined(CONFIG_SND_JACK) || !defined(CONFIG_SND_JACK_INPUT_DEV)
snd_jack_set_parent(struct snd_jack * jack,struct device * parent)108*4882a593Smuzhiyun static inline void snd_jack_set_parent(struct snd_jack *jack,
109*4882a593Smuzhiyun 				       struct device *parent)
110*4882a593Smuzhiyun {
111*4882a593Smuzhiyun }
112*4882a593Smuzhiyun 
snd_jack_set_key(struct snd_jack * jack,enum snd_jack_types type,int keytype)113*4882a593Smuzhiyun static inline int snd_jack_set_key(struct snd_jack *jack,
114*4882a593Smuzhiyun 				   enum snd_jack_types type,
115*4882a593Smuzhiyun 				   int keytype)
116*4882a593Smuzhiyun {
117*4882a593Smuzhiyun 	return 0;
118*4882a593Smuzhiyun }
119*4882a593Smuzhiyun #endif /* !CONFIG_SND_JACK || !CONFIG_SND_JACK_INPUT_DEV */
120*4882a593Smuzhiyun 
121*4882a593Smuzhiyun #endif
122