linux/sound/pci/hda/hda_jack.h
<<
>>
Prefs
   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
  15#include <linux/err.h>
  16
  17struct auto_pin_cfg;
  18struct hda_jack_tbl;
  19struct hda_jack_callback;
  20
  21typedef void (*hda_jack_callback_fn) (struct hda_codec *, struct hda_jack_callback *);
  22
  23struct hda_jack_callback {
  24        hda_nid_t nid;
  25        hda_jack_callback_fn func;
  26        unsigned int private_data;      /* arbitrary data */
  27        struct hda_jack_callback *next;
  28};
  29
  30struct hda_jack_tbl {
  31        hda_nid_t nid;
  32        unsigned char tag;              /* unsol event tag */
  33        struct hda_jack_callback *callback;
  34        /* jack-detection stuff */
  35        unsigned int pin_sense;         /* cached pin-sense value */
  36        unsigned int jack_detect:1;     /* capable of jack-detection? */
  37        unsigned int jack_dirty:1;      /* needs to update? */
  38        unsigned int phantom_jack:1;    /* a fixed, always present port? */
  39        unsigned int block_report:1;    /* in a transitional state - do not report to userspace */
  40        hda_nid_t gating_jack;          /* valid when gating jack plugged */
  41        hda_nid_t gated_jack;           /* gated is dependent on this jack */
  42        int type;
  43        struct snd_jack *jack;
  44};
  45
  46struct hda_jack_tbl *
  47snd_hda_jack_tbl_get(struct hda_codec *codec, hda_nid_t nid);
  48struct hda_jack_tbl *
  49snd_hda_jack_tbl_get_from_tag(struct hda_codec *codec, unsigned char tag);
  50
  51void snd_hda_jack_tbl_clear(struct hda_codec *codec);
  52
  53void snd_hda_jack_set_dirty_all(struct hda_codec *codec);
  54
  55int snd_hda_jack_detect_enable(struct hda_codec *codec, hda_nid_t nid);
  56struct hda_jack_callback *
  57snd_hda_jack_detect_enable_callback(struct hda_codec *codec, hda_nid_t nid,
  58                                    hda_jack_callback_fn cb);
  59
  60int snd_hda_jack_set_gating_jack(struct hda_codec *codec, hda_nid_t gated_nid,
  61                                 hda_nid_t gating_nid);
  62
  63u32 snd_hda_pin_sense(struct hda_codec *codec, hda_nid_t nid);
  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
  72/**
  73 * snd_hda_jack_detect - Detect the jack
  74 * @codec: the HDA codec
  75 * @nid: pin NID to check jack detection
  76 */
  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}
  81
  82bool is_jack_detectable(struct hda_codec *codec, hda_nid_t nid);
  83
  84int snd_hda_jack_add_kctl(struct hda_codec *codec, hda_nid_t nid,
  85                          const char *name, bool phantom_jack);
  86int snd_hda_jack_add_kctls(struct hda_codec *codec,
  87                           const struct auto_pin_cfg *cfg);
  88
  89void snd_hda_jack_report_sync(struct hda_codec *codec);
  90
  91void snd_hda_jack_unsol_event(struct hda_codec *codec, unsigned int res);
  92
  93void snd_hda_jack_poll_all(struct hda_codec *codec);
  94
  95#endif /* __SOUND_HDA_JACK_H */
  96