LCOV - code coverage report
Current view: top level - sound/pci/hda - hda_jack.h (source / functions) Hit Total Coverage
Test: combined.info Lines: 0 4 0.0 %
Date: 2022-03-28 16:04:14 Functions: 0 0 -
Branches: 0 0 -

           Branch data     Line data    Source code
       1                 :            : /* SPDX-License-Identifier: GPL-2.0-or-later */
       2                 :            : /*
       3                 :            :  * Jack-detection handling for HD-audio
       4                 :            :  *
       5                 :            :  * Copyright (c) 2011 Takashi Iwai <tiwai@suse.de>
       6                 :            :  */
       7                 :            : 
       8                 :            : #ifndef __SOUND_HDA_JACK_H
       9                 :            : #define __SOUND_HDA_JACK_H
      10                 :            : 
      11                 :            : #include <linux/err.h>
      12                 :            : #include <sound/jack.h>
      13                 :            : 
      14                 :            : struct auto_pin_cfg;
      15                 :            : struct hda_jack_tbl;
      16                 :            : struct hda_jack_callback;
      17                 :            : 
      18                 :            : typedef void (*hda_jack_callback_fn) (struct hda_codec *, struct hda_jack_callback *);
      19                 :            : 
      20                 :            : struct hda_jack_callback {
      21                 :            :         hda_nid_t nid;
      22                 :            :         int dev_id;
      23                 :            :         hda_jack_callback_fn func;
      24                 :            :         unsigned int private_data;      /* arbitrary data */
      25                 :            :         unsigned int unsol_res;         /* unsolicited event bits */
      26                 :            :         struct hda_jack_tbl *jack;      /* associated jack entry */
      27                 :            :         struct hda_jack_callback *next;
      28                 :            : };
      29                 :            : 
      30                 :            : struct hda_jack_tbl {
      31                 :            :         hda_nid_t nid;
      32                 :            :         int dev_id;
      33                 :            :         unsigned char tag;              /* unsol event tag */
      34                 :            :         struct hda_jack_callback *callback;
      35                 :            :         /* jack-detection stuff */
      36                 :            :         unsigned int pin_sense;         /* cached pin-sense value */
      37                 :            :         unsigned int jack_detect:1;     /* capable of jack-detection? */
      38                 :            :         unsigned int jack_dirty:1;      /* needs to update? */
      39                 :            :         unsigned int phantom_jack:1;    /* a fixed, always present port? */
      40                 :            :         unsigned int block_report:1;    /* in a transitional state - do not report to userspace */
      41                 :            :         hda_nid_t gating_jack;          /* valid when gating jack plugged */
      42                 :            :         hda_nid_t gated_jack;           /* gated is dependent on this jack */
      43                 :            :         int type;
      44                 :            :         int button_state;
      45                 :            :         struct snd_jack *jack;
      46                 :            : };
      47                 :            : 
      48                 :            : struct hda_jack_keymap {
      49                 :            :         enum snd_jack_types type;
      50                 :            :         int key;
      51                 :            : };
      52                 :            : 
      53                 :            : struct hda_jack_tbl *
      54                 :            : snd_hda_jack_tbl_get_mst(struct hda_codec *codec, hda_nid_t nid, int dev_id);
      55                 :            : 
      56                 :            : /**
      57                 :            :  * snd_hda_jack_tbl_get - query the jack-table entry for the given NID
      58                 :            :  * @codec: the HDA codec
      59                 :            :  * @nid: pin NID to refer to
      60                 :            :  */
      61                 :            : static inline struct hda_jack_tbl *
      62                 :            : snd_hda_jack_tbl_get(struct hda_codec *codec, hda_nid_t nid)
      63                 :            : {
      64                 :            :         return snd_hda_jack_tbl_get_mst(codec, nid, 0);
      65                 :            : }
      66                 :            : 
      67                 :            : struct hda_jack_tbl *
      68                 :            : snd_hda_jack_tbl_get_from_tag(struct hda_codec *codec,
      69                 :            :                               unsigned char tag, int dev_id);
      70                 :            : 
      71                 :            : void snd_hda_jack_tbl_clear(struct hda_codec *codec);
      72                 :            : 
      73                 :            : void snd_hda_jack_set_dirty_all(struct hda_codec *codec);
      74                 :            : 
      75                 :            : int snd_hda_jack_detect_enable(struct hda_codec *codec, hda_nid_t nid,
      76                 :            :                                int dev_id);
      77                 :            : 
      78                 :            : struct hda_jack_callback *
      79                 :            : snd_hda_jack_detect_enable_callback_mst(struct hda_codec *codec, hda_nid_t nid,
      80                 :            :                                         int dev_id, hda_jack_callback_fn cb);
      81                 :            : 
      82                 :            : /**
      83                 :            :  * snd_hda_jack_detect_enable - enable the jack-detection
      84                 :            :  * @codec: the HDA codec
      85                 :            :  * @nid: pin NID to enable
      86                 :            :  * @func: callback function to register
      87                 :            :  *
      88                 :            :  * In the case of error, the return value will be a pointer embedded with
      89                 :            :  * errno.  Check and handle the return value appropriately with standard
      90                 :            :  * macros such as @IS_ERR() and @PTR_ERR().
      91                 :            :  */
      92                 :            : static inline struct hda_jack_callback *
      93                 :            : snd_hda_jack_detect_enable_callback(struct hda_codec *codec, hda_nid_t nid,
      94                 :            :                                     hda_jack_callback_fn cb)
      95                 :            : {
      96                 :            :         return snd_hda_jack_detect_enable_callback_mst(codec, nid, 0, cb);
      97                 :            : }
      98                 :            : 
      99                 :            : int snd_hda_jack_set_gating_jack(struct hda_codec *codec, hda_nid_t gated_nid,
     100                 :            :                                  hda_nid_t gating_nid);
     101                 :            : 
     102                 :            : u32 snd_hda_jack_pin_sense(struct hda_codec *codec, hda_nid_t nid, int dev_id);
     103                 :            : 
     104                 :            : /* the jack state returned from snd_hda_jack_detect_state() */
     105                 :            : enum {
     106                 :            :         HDA_JACK_NOT_PRESENT, HDA_JACK_PRESENT, HDA_JACK_PHANTOM,
     107                 :            : };
     108                 :            : 
     109                 :            : int snd_hda_jack_detect_state_mst(struct hda_codec *codec, hda_nid_t nid,
     110                 :            :                                   int dev_id);
     111                 :            : 
     112                 :            : /**
     113                 :            :  * snd_hda_jack_detect_state - query pin Presence Detect status
     114                 :            :  * @codec: the CODEC to sense
     115                 :            :  * @nid: the pin NID to sense
     116                 :            :  *
     117                 :            :  * Query and return the pin's Presence Detect status, as either
     118                 :            :  * HDA_JACK_NOT_PRESENT, HDA_JACK_PRESENT or HDA_JACK_PHANTOM.
     119                 :            :  */
     120                 :            : static inline int
     121                 :            : snd_hda_jack_detect_state(struct hda_codec *codec, hda_nid_t nid)
     122                 :            : {
     123                 :            :         return snd_hda_jack_detect_state_mst(codec, nid, 0);
     124                 :            : }
     125                 :            : 
     126                 :            : /**
     127                 :            :  * snd_hda_jack_detect_mst - Detect the jack
     128                 :            :  * @codec: the HDA codec
     129                 :            :  * @nid: pin NID to check jack detection
     130                 :            :  * @dev_id: pin device entry id
     131                 :            :  */
     132                 :            : static inline bool
     133                 :          0 : snd_hda_jack_detect_mst(struct hda_codec *codec, hda_nid_t nid, int dev_id)
     134                 :            : {
     135                 :          0 :         return snd_hda_jack_detect_state_mst(codec, nid, dev_id) !=
     136                 :            :                         HDA_JACK_NOT_PRESENT;
     137                 :            : }
     138                 :            : 
     139                 :            : /**
     140                 :            :  * snd_hda_jack_detect - Detect the jack
     141                 :            :  * @codec: the HDA codec
     142                 :            :  * @nid: pin NID to check jack detection
     143                 :            :  */
     144                 :            : static inline bool
     145                 :            : snd_hda_jack_detect(struct hda_codec *codec, hda_nid_t nid)
     146                 :            : {
     147                 :            :         return snd_hda_jack_detect_mst(codec, nid, 0);
     148                 :            : }
     149                 :            : 
     150                 :            : bool is_jack_detectable(struct hda_codec *codec, hda_nid_t nid);
     151                 :            : 
     152                 :            : int snd_hda_jack_add_kctl_mst(struct hda_codec *codec, hda_nid_t nid,
     153                 :            :                               int dev_id, const char *name, bool phantom_jack,
     154                 :            :                               int type, const struct hda_jack_keymap *keymap);
     155                 :            : 
     156                 :            : /**
     157                 :            :  * snd_hda_jack_add_kctl - Add a kctl for the given pin
     158                 :            :  * @codec: the HDA codec
     159                 :            :  * @nid: pin NID to assign
     160                 :            :  * @name: string name for the jack
     161                 :            :  * @phantom_jack: flag to deal as a phantom jack
     162                 :            :  * @type: jack type bits to be reported, 0 for guessing from pincfg
     163                 :            :  * @keymap: optional jack / key mapping
     164                 :            :  *
     165                 :            :  * This assigns a jack-detection kctl to the given pin.  The kcontrol
     166                 :            :  * will have the given name and index.
     167                 :            :  */
     168                 :            : static inline int
     169                 :          0 : snd_hda_jack_add_kctl(struct hda_codec *codec, hda_nid_t nid,
     170                 :            :                       const char *name, bool phantom_jack,
     171                 :            :                       int type, const struct hda_jack_keymap *keymap)
     172                 :            : {
     173                 :          0 :         return snd_hda_jack_add_kctl_mst(codec, nid, 0,
     174                 :            :                                          name, phantom_jack, type, keymap);
     175                 :            : }
     176                 :            : 
     177                 :            : int snd_hda_jack_add_kctls(struct hda_codec *codec,
     178                 :            :                            const struct auto_pin_cfg *cfg);
     179                 :            : 
     180                 :            : void snd_hda_jack_report_sync(struct hda_codec *codec);
     181                 :            : 
     182                 :            : void snd_hda_jack_unsol_event(struct hda_codec *codec, unsigned int res);
     183                 :            : 
     184                 :            : void snd_hda_jack_poll_all(struct hda_codec *codec);
     185                 :            : 
     186                 :            : #endif /* __SOUND_HDA_JACK_H */

Generated by: LCOV version 1.14