1
2
3
4
5
6
7
8
9
10
11
12#ifndef __SOUND_HDA_JACK_H
13#define __SOUND_HDA_JACK_H
14
15#include <linux/err.h>
16#include <sound/jack.h>
17
18struct auto_pin_cfg;
19struct hda_jack_tbl;
20struct hda_jack_callback;
21
22typedef void (*hda_jack_callback_fn) (struct hda_codec *, struct hda_jack_callback *);
23
24struct hda_jack_callback {
25 hda_nid_t nid;
26 hda_jack_callback_fn func;
27 unsigned int private_data;
28 unsigned int unsol_res;
29 struct hda_jack_tbl *jack;
30 struct hda_jack_callback *next;
31};
32
33struct hda_jack_tbl {
34 hda_nid_t nid;
35 unsigned char tag;
36 struct hda_jack_callback *callback;
37
38 unsigned int pin_sense;
39 unsigned int jack_detect:1;
40 unsigned int jack_dirty:1;
41 unsigned int phantom_jack:1;
42 unsigned int block_report:1;
43 hda_nid_t gating_jack;
44 hda_nid_t gated_jack;
45 int type;
46 int button_state;
47 struct snd_jack *jack;
48};
49
50struct hda_jack_keymap {
51 enum snd_jack_types type;
52 int key;
53};
54
55struct hda_jack_tbl *
56snd_hda_jack_tbl_get(struct hda_codec *codec, hda_nid_t nid);
57struct hda_jack_tbl *
58snd_hda_jack_tbl_get_from_tag(struct hda_codec *codec, unsigned char tag);
59
60void snd_hda_jack_tbl_clear(struct hda_codec *codec);
61
62void snd_hda_jack_set_dirty_all(struct hda_codec *codec);
63
64int snd_hda_jack_detect_enable(struct hda_codec *codec, hda_nid_t nid);
65struct hda_jack_callback *
66snd_hda_jack_detect_enable_callback(struct hda_codec *codec, hda_nid_t nid,
67 hda_jack_callback_fn cb);
68
69int snd_hda_jack_set_gating_jack(struct hda_codec *codec, hda_nid_t gated_nid,
70 hda_nid_t gating_nid);
71
72u32 snd_hda_pin_sense(struct hda_codec *codec, hda_nid_t nid);
73
74
75enum {
76 HDA_JACK_NOT_PRESENT, HDA_JACK_PRESENT, HDA_JACK_PHANTOM,
77};
78
79int snd_hda_jack_detect_state(struct hda_codec *codec, hda_nid_t nid);
80
81
82
83
84
85
86static inline bool snd_hda_jack_detect(struct hda_codec *codec, hda_nid_t nid)
87{
88 return snd_hda_jack_detect_state(codec, nid) != HDA_JACK_NOT_PRESENT;
89}
90
91bool is_jack_detectable(struct hda_codec *codec, hda_nid_t nid);
92
93int snd_hda_jack_add_kctl(struct hda_codec *codec, hda_nid_t nid,
94 const char *name, bool phantom_jack,
95 int type, const struct hda_jack_keymap *keymap);
96int snd_hda_jack_add_kctls(struct hda_codec *codec,
97 const struct auto_pin_cfg *cfg);
98
99void snd_hda_jack_report_sync(struct hda_codec *codec);
100
101void snd_hda_jack_unsol_event(struct hda_codec *codec, unsigned int res);
102
103void snd_hda_jack_poll_all(struct hda_codec *codec);
104
105#endif
106