Merge tag 'media/v4.5-5' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab...
[linux-2.6-block.git] / sound / pci / hda / hda_jack.h
CommitLineData
1835a0f9
TI
1/*
2 * Jack-detection handling for HD-audio
3 *
4 * Copyright (c) 2011 Takashi Iwai <tiwai@suse.de>
5 *
6 * This driver is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 */
11
12#ifndef __SOUND_HDA_JACK_H
13#define __SOUND_HDA_JACK_H
14
a5062dee
DH
15#include <linux/err.h>
16
128bc4ba 17struct auto_pin_cfg;
954df2a9 18struct hda_jack_tbl;
1a4f69d5 19struct hda_jack_callback;
954df2a9 20
1a4f69d5
TI
21typedef void (*hda_jack_callback_fn) (struct hda_codec *, struct hda_jack_callback *);
22
23struct hda_jack_callback {
2ebab40e 24 hda_nid_t nid;
1a4f69d5
TI
25 hda_jack_callback_fn func;
26 unsigned int private_data; /* arbitrary data */
27 struct hda_jack_callback *next;
28};
128bc4ba 29
1835a0f9
TI
30struct hda_jack_tbl {
31 hda_nid_t nid;
3a93897e 32 unsigned char tag; /* unsol event tag */
1a4f69d5 33 struct hda_jack_callback *callback;
3a93897e 34 /* jack-detection stuff */
1835a0f9 35 unsigned int pin_sense; /* cached pin-sense value */
3a93897e 36 unsigned int jack_detect:1; /* capable of jack-detection? */
1835a0f9 37 unsigned int jack_dirty:1; /* needs to update? */
80c8bfbe 38 unsigned int phantom_jack:1; /* a fixed, always present port? */
0f568959 39 unsigned int block_report:1; /* in a transitional state - do not report to userspace */
0619ba8c
DR
40 hda_nid_t gating_jack; /* valid when gating jack plugged */
41 hda_nid_t gated_jack; /* gated is dependent on this jack */
aad37dbd
TI
42 int type;
43 struct snd_jack *jack;
1835a0f9
TI
44};
45
46struct hda_jack_tbl *
47snd_hda_jack_tbl_get(struct hda_codec *codec, hda_nid_t nid);
3a93897e
TI
48struct hda_jack_tbl *
49snd_hda_jack_tbl_get_from_tag(struct hda_codec *codec, unsigned char tag);
1835a0f9 50
1835a0f9
TI
51void snd_hda_jack_tbl_clear(struct hda_codec *codec);
52
1835a0f9
TI
53void snd_hda_jack_set_dirty_all(struct hda_codec *codec);
54
62f949bf 55int snd_hda_jack_detect_enable(struct hda_codec *codec, hda_nid_t nid);
1a4f69d5 56struct hda_jack_callback *
bda17b82 57snd_hda_jack_detect_enable_callback(struct hda_codec *codec, hda_nid_t nid,
1a4f69d5 58 hda_jack_callback_fn cb);
954df2a9 59
0619ba8c
DR
60int snd_hda_jack_set_gating_jack(struct hda_codec *codec, hda_nid_t gated_nid,
61 hda_nid_t gating_nid);
1835a0f9
TI
62
63u32 snd_hda_pin_sense(struct hda_codec *codec, hda_nid_t nid);
60ea8ca2
TI
64
65/* the jack state returned from snd_hda_jack_detect_state() */
66enum {
67 HDA_JACK_NOT_PRESENT, HDA_JACK_PRESENT, HDA_JACK_PHANTOM,
68};
69
70int snd_hda_jack_detect_state(struct hda_codec *codec, hda_nid_t nid);
71
95a962c3
TI
72/**
73 * snd_hda_jack_detect - Detect the jack
74 * @codec: the HDA codec
75 * @nid: pin NID to check jack detection
76 */
60ea8ca2
TI
77static inline bool snd_hda_jack_detect(struct hda_codec *codec, hda_nid_t nid)
78{
79 return snd_hda_jack_detect_state(codec, nid) != HDA_JACK_NOT_PRESENT;
80}
1835a0f9 81
a9c74173 82bool is_jack_detectable(struct hda_codec *codec, hda_nid_t nid);
1835a0f9 83
01a61e12 84int snd_hda_jack_add_kctl(struct hda_codec *codec, hda_nid_t nid,
909cadc6 85 const char *name, bool phantom_jack);
01a61e12
TI
86int snd_hda_jack_add_kctls(struct hda_codec *codec,
87 const struct auto_pin_cfg *cfg);
88
01a61e12
TI
89void snd_hda_jack_report_sync(struct hda_codec *codec);
90
954df2a9 91void snd_hda_jack_unsol_event(struct hda_codec *codec, unsigned int res);
01a61e12 92
26a6cb6c
DH
93void snd_hda_jack_poll_all(struct hda_codec *codec);
94
1835a0f9 95#endif /* __SOUND_HDA_JACK_H */