sound/hda/common/hda_jack.h

Source file repositories/reference/linux-study-clean/sound/hda/common/hda_jack.h

File Facts

System
Linux kernel
Corpus path
sound/hda/common/hda_jack.h
Extension
.h
Size
5913 bytes
Lines
196
Domain
Driver Families
Bucket
sound/hda
Inferred role
Driver Families: implementation source
Status
source implementation candidate

Why This File Exists

Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.

Dependency Surface

Detected Declarations

Annotated Snippet

struct hda_jack_callback {
	hda_nid_t nid;
	int dev_id;
	hda_jack_callback_fn func;
	unsigned int private_data;	/* arbitrary data */
	unsigned int unsol_res;		/* unsolicited event bits */
	struct hda_jack_tbl *jack;	/* associated jack entry */
	struct hda_jack_callback *next;
};

struct hda_jack_tbl {
	hda_nid_t nid;
	int dev_id;
	unsigned char tag;		/* unsol event tag */
	struct hda_jack_callback *callback;
	/* jack-detection stuff */
	unsigned int pin_sense;		/* cached pin-sense value */
	unsigned int jack_detect:1;	/* capable of jack-detection? */
	unsigned int jack_dirty:1;	/* needs to update? */
	unsigned int phantom_jack:1;    /* a fixed, always present port? */
	unsigned int block_report:1;    /* in a transitional state - do not report to userspace */
	hda_nid_t gating_jack;		/* valid when gating jack plugged */
	hda_nid_t gated_jack;		/* gated is dependent on this jack */
	hda_nid_t key_report_jack;	/* key reports to this jack */
	int type;
	int button_state;
	struct snd_jack *jack;
};

struct hda_jack_keymap {
	enum snd_jack_types type;
	int key;
};

struct hda_jack_tbl *
snd_hda_jack_tbl_get_mst(struct hda_codec *codec, hda_nid_t nid, int dev_id);

/**
 * snd_hda_jack_tbl_get - query the jack-table entry for the given NID
 * @codec: the HDA codec
 * @nid: pin NID to refer to
 */
static inline struct hda_jack_tbl *
snd_hda_jack_tbl_get(struct hda_codec *codec, hda_nid_t nid)
{
	return snd_hda_jack_tbl_get_mst(codec, nid, 0);
}

struct hda_jack_tbl *
snd_hda_jack_tbl_get_from_tag(struct hda_codec *codec,
			      unsigned char tag, int dev_id);

void snd_hda_jack_tbl_disconnect(struct hda_codec *codec);
void snd_hda_jack_tbl_clear(struct hda_codec *codec);

void snd_hda_jack_set_dirty_all(struct hda_codec *codec);

int snd_hda_jack_detect_enable(struct hda_codec *codec, hda_nid_t nid,
			       int dev_id);

struct hda_jack_callback *
snd_hda_jack_detect_enable_callback_mst(struct hda_codec *codec, hda_nid_t nid,
					int dev_id, hda_jack_callback_fn func);

/**
 * snd_hda_jack_detect_enable_callback - enable the jack-detection
 * @codec: the HDA codec
 * @nid: pin NID to enable
 * @cb: callback function to register
 *
 * In the case of error, the return value will be a pointer embedded with
 * errno.  Check and handle the return value appropriately with standard
 * macros such as @IS_ERR() and @PTR_ERR().
 */
static inline struct hda_jack_callback *
snd_hda_jack_detect_enable_callback(struct hda_codec *codec, hda_nid_t nid,
				    hda_jack_callback_fn cb)
{
	return snd_hda_jack_detect_enable_callback_mst(codec, nid, 0, cb);
}

int snd_hda_jack_set_gating_jack(struct hda_codec *codec, hda_nid_t gated_nid,
				 hda_nid_t gating_nid);

int snd_hda_jack_bind_keymap(struct hda_codec *codec, hda_nid_t key_nid,
			     const struct hda_jack_keymap *keymap,
			     hda_nid_t jack_nid);

void snd_hda_jack_set_button_state(struct hda_codec *codec, hda_nid_t jack_nid,
				   int button_state);

Annotation

Implementation Notes