root/sound/x86/intel_hdmi_audio.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 /*
   2  * Copyright (C) 2016 Intel Corporation
   3  *  Authors:    Sailaja Bandarupalli <sailaja.bandarupalli@intel.com>
   4  *              Ramesh Babu K V <ramesh.babu@intel.com>
   5  *              Vaibhav Agarwal <vaibhav.agarwal@intel.com>
   6  *              Jerome Anand <jerome.anand@intel.com>
   7  *
   8  * Permission is hereby granted, free of charge, to any person obtaining
   9  * a copy of this software and associated documentation files
  10  * (the "Software"), to deal in the Software without restriction,
  11  * including without limitation the rights to use, copy, modify, merge,
  12  * publish, distribute, sublicense, and/or sell copies of the Software,
  13  * and to permit persons to whom the Software is furnished to do so,
  14  * subject to the following conditions:
  15  *
  16  * The above copyright notice and this permission notice (including the
  17  * next paragraph) shall be included in all copies or substantial
  18  * portions of the Software.
  19  *
  20  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  21  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  22  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
  23  * NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
  24  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
  25  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  26  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  27  * SOFTWARE.
  28  */
  29 
  30 #ifndef _INTEL_HDMI_AUDIO_H_
  31 #define _INTEL_HDMI_AUDIO_H_
  32 
  33 #include "intel_hdmi_lpe_audio.h"
  34 
  35 #define MAX_PB_STREAMS          1
  36 #define MAX_CAP_STREAMS         0
  37 #define BYTES_PER_WORD          0x4
  38 #define INTEL_HAD               "HdmiLpeAudio"
  39 
  40 /*
  41  *      CEA speaker placement:
  42  *
  43  *      FL  FLC   FC   FRC   FR
  44  *
  45  *                                              LFE
  46  *
  47  *      RL  RLC   RC   RRC   RR
  48  *
  49  *      The Left/Right Surround channel _notions_ LS/RS in SMPTE 320M
  50  *      corresponds to CEA RL/RR; The SMPTE channel _assignment_ C/LFE is
  51  *      swapped to CEA LFE/FC.
  52  */
  53 enum cea_speaker_placement {
  54         FL  = (1 <<  0),        /* Front Left           */
  55         FC  = (1 <<  1),        /* Front Center         */
  56         FR  = (1 <<  2),        /* Front Right          */
  57         FLC = (1 <<  3),        /* Front Left Center    */
  58         FRC = (1 <<  4),        /* Front Right Center   */
  59         RL  = (1 <<  5),        /* Rear Left            */
  60         RC  = (1 <<  6),        /* Rear Center          */
  61         RR  = (1 <<  7),        /* Rear Right           */
  62         RLC = (1 <<  8),        /* Rear Left Center     */
  63         RRC = (1 <<  9),        /* Rear Right Center    */
  64         LFE = (1 << 10),        /* Low Frequency Effect */
  65 };
  66 
  67 struct cea_channel_speaker_allocation {
  68         int ca_index;
  69         int speakers[8];
  70 
  71         /* derived values, just for convenience */
  72         int channels;
  73         int spk_mask;
  74 };
  75 
  76 struct channel_map_table {
  77         unsigned char map;              /* ALSA API channel map position */
  78         unsigned char cea_slot;         /* CEA slot value */
  79         int spk_mask;                   /* speaker position bit mask */
  80 };
  81 
  82 struct pcm_stream_info {
  83         struct snd_pcm_substream *substream;
  84         int substream_refcount;
  85 };
  86 
  87 /*
  88  * struct snd_intelhad - intelhad driver structure
  89  *
  90  * @card: ptr to hold card details
  91  * @connected: the monitor connection status
  92  * @stream_info: stream information
  93  * @eld: holds ELD info
  94  * @curr_buf: pointer to hold current active ring buf
  95  * @valid_buf_cnt: ring buffer count for stream
  96  * @had_spinlock: driver lock
  97  * @aes_bits: IEC958 status bits
  98  * @buff_done: id of current buffer done intr
  99  * @dev: platoform device handle
 100  * @chmap: holds channel map info
 101  */
 102 struct snd_intelhad {
 103         struct snd_intelhad_card *card_ctx;
 104         bool            connected;
 105         struct          pcm_stream_info stream_info;
 106         unsigned char   eld[HDMI_MAX_ELD_BYTES];
 107         bool dp_output;
 108         unsigned int    aes_bits;
 109         spinlock_t had_spinlock;
 110         struct device *dev;
 111         struct snd_pcm_chmap *chmap;
 112         int tmds_clock_speed;
 113         int link_rate;
 114         int port; /* fixed */
 115         int pipe; /* can change dynamically */
 116 
 117         /* ring buffer (BD) position index */
 118         unsigned int bd_head;
 119         /* PCM buffer position indices */
 120         unsigned int pcmbuf_head;       /* being processed */
 121         unsigned int pcmbuf_filled;     /* to be filled */
 122 
 123         unsigned int num_bds;           /* number of BDs */
 124         unsigned int period_bytes;      /* PCM period size in bytes */
 125 
 126         /* internal stuff */
 127         union aud_cfg aud_config;       /* AUD_CONFIG reg value cache */
 128         struct work_struct hdmi_audio_wq;
 129         struct mutex mutex; /* for protecting chmap and eld */
 130         bool need_reset;
 131         struct snd_jack *jack;
 132 };
 133 
 134 struct snd_intelhad_card {
 135         struct snd_card *card;
 136         struct device *dev;
 137 
 138         /* internal stuff */
 139         int irq;
 140         void __iomem *mmio_start;
 141         int num_pipes;
 142         int num_ports;
 143         struct snd_intelhad pcm_ctx[3]; /* one for each port */
 144 };
 145 
 146 #endif /* _INTEL_HDMI_AUDIO_ */

/* [<][>][^][v][top][bottom][index][help] */