1
2
3
4
5
6
7
8
9
10
11
12#ifndef __SOUND_HDA_JACK_H
13#define __SOUND_HDA_JACK_H
14
15struct auto_pin_cfg;
16struct hda_jack_tbl;
17
18typedef void (*hda_jack_callback) (struct hda_codec *, struct hda_jack_tbl *);
19
20struct hda_jack_tbl {
21 hda_nid_t nid;
22 unsigned char action;
23 unsigned char tag;
24 unsigned int private_data;
25 hda_jack_callback callback;
26
27 unsigned int pin_sense;
28 unsigned int jack_detect:1;
29 unsigned int jack_dirty:1;
30 unsigned int phantom_jack:1;
31 unsigned int block_report:1;
32 hda_nid_t gating_jack;
33 hda_nid_t gated_jack;
34 struct snd_kcontrol *kctl;
35#ifdef CONFIG_SND_HDA_INPUT_JACK
36 int type;
37 struct snd_jack *jack;
38#endif
39};
40
41struct hda_jack_tbl *
42snd_hda_jack_tbl_get(struct hda_codec *codec, hda_nid_t nid);
43struct hda_jack_tbl *
44snd_hda_jack_tbl_get_from_tag(struct hda_codec *codec, unsigned char tag);
45
46struct hda_jack_tbl *
47snd_hda_jack_tbl_new(struct hda_codec *codec, hda_nid_t nid);
48void snd_hda_jack_tbl_clear(struct hda_codec *codec);
49
50
51
52
53
54
55
56static inline unsigned char
57snd_hda_jack_get_action(struct hda_codec *codec, unsigned int tag)
58{
59 struct hda_jack_tbl *jack = snd_hda_jack_tbl_get_from_tag(codec, tag);
60 if (jack) {
61 jack->jack_dirty = 1;
62 return jack->action;
63 }
64 return 0;
65}
66
67void snd_hda_jack_set_dirty_all(struct hda_codec *codec);
68
69int snd_hda_jack_detect_enable(struct hda_codec *codec, hda_nid_t nid,
70 unsigned char action);
71int snd_hda_jack_detect_enable_callback(struct hda_codec *codec, hda_nid_t nid,
72 unsigned char action,
73 hda_jack_callback cb);
74
75int snd_hda_jack_set_gating_jack(struct hda_codec *codec, hda_nid_t gated_nid,
76 hda_nid_t gating_nid);
77
78u32 snd_hda_pin_sense(struct hda_codec *codec, hda_nid_t nid);
79
80
81enum {
82 HDA_JACK_NOT_PRESENT, HDA_JACK_PRESENT, HDA_JACK_PHANTOM,
83};
84
85int snd_hda_jack_detect_state(struct hda_codec *codec, hda_nid_t nid);
86
87static inline bool snd_hda_jack_detect(struct hda_codec *codec, hda_nid_t nid)
88{
89 return snd_hda_jack_detect_state(codec, nid) != HDA_JACK_NOT_PRESENT;
90}
91
92bool is_jack_detectable(struct hda_codec *codec, hda_nid_t nid);
93
94int snd_hda_jack_add_kctl(struct hda_codec *codec, hda_nid_t nid,
95 const char *name, int idx);
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