brintos

brintos / linux-shallow public Read only

0
0
Text · 4.4 KiB · 7ce8c2a Raw
146 lines · c
1/*2 * Copyright (C) 2016 Intel Corporation3 *  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 obtaining9 * a copy of this software and associated documentation files10 * (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 the17 * next paragraph) shall be included in all copies or substantial18 * 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 OF22 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND23 * NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS24 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN25 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN26 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE27 * 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		136#define MAX_CAP_STREAMS		037#define BYTES_PER_WORD		0x438#define INTEL_HAD		"HdmiLpeAudio"39 40/*41 *	CEA speaker placement:42 *43 *	FL  FLC   FC   FRC   FR44 *45 *						LFE46 *47 *	RL  RLC   RC   RRC   RR48 *49 *	The Left/Right Surround channel _notions_ LS/RS in SMPTE 320M50 *	corresponds to CEA RL/RR; The SMPTE channel _assignment_ C/LFE is51 *	swapped to CEA LFE/FC.52 */53enum 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 67struct 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 76struct 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 82struct pcm_stream_info {83	struct snd_pcm_substream *substream;84	int substream_refcount;85};86 87/*88 * struct snd_intelhad - intelhad driver structure89 *90 * @card: ptr to hold card details91 * @connected: the monitor connection status92 * @stream_info: stream information93 * @eld: holds ELD info94 * @curr_buf: pointer to hold current active ring buf95 * @valid_buf_cnt: ring buffer count for stream96 * @had_spinlock: driver lock97 * @aes_bits: IEC958 status bits98 * @buff_done: id of current buffer done intr99 * @dev: platform device handle100 * @chmap: holds channel map info101 */102struct 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	struct snd_jack *jack;131};132 133struct snd_intelhad_card {134	struct snd_card	*card;135	struct device *dev;136 137	/* internal stuff */138	int irq;139	void __iomem *mmio_start;140	int num_pipes;141	int num_ports;142	struct snd_intelhad pcm_ctx[3]; /* one for each port */143};144 145#endif /* _INTEL_HDMI_AUDIO_ */146