]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/blob - drivers/staging/intel_sst/intelmid.h
Staging: sst: Intel SST audio driver
[mirror_ubuntu-artful-kernel.git] / drivers / staging / intel_sst / intelmid.h
1 /*
2 * intelmid.h - Intel Sound card driver for MID
3 *
4 * Copyright (C) 2008-10 Intel Corp
5 * Authors: Harsha Priya <priya.harsha@intel.com>
6 * Vinod Koul <vinod.koul@intel.com>
7 * Dharageswari R <dharageswari.r@intel.com>
8 * KP Jeeja <jeeja.kp@intel.com>
9 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
10 *
11 * This program is free software; you can redistribute it and/or modify
12 * it under the terms of the GNU General Public License as published by
13 * the Free Software Foundation version 2 of the License.
14 *
15 * This program is distributed in the hope that it will be useful, but
16 * WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 * General Public License for more details.
19 *
20 * You should have received a copy of the GNU General Public License along
21 * with this program; if not, write to the Free Software Foundation, Inc.,
22 * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
23 *
24 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
25 * ALSA driver header for Intel MAD chipset
26 */
27 #ifndef __INTELMID_H
28 #define __INTELMID_H
29
30 #include <linux/time.h>
31
32 #define DRIVER_NAME_MFLD "msic_audio"
33 #define DRIVER_NAME_MRST "pmic_audio"
34 #define DRIVER_NAME "intelmid_audio"
35 #define PMIC_SOUND_IRQ_TYPE_MASK (1 << 15)
36 #define AUDINT_BASE (0xFFFFEFF8 + (6 * sizeof(u8)))
37 #define REG_IRQ
38 /* values #defined */
39 /* will differ for different hw - to be taken from config */
40 #define MAX_DEVICES 1
41 #define MIN_RATE 8000
42 #define MAX_RATE 48000
43 #define MAX_BUFFER (800*1024) /* for PCM */
44 #define MIN_BUFFER (800*1024)
45 #define MAX_PERIODS (1024*2)
46 #define MIN_PERIODS 1
47 #define MAX_PERIOD_BYTES MAX_BUFFER
48 #define MIN_PERIOD_BYTES 32
49 /*#define MIN_PERIOD_BYTES 160*/
50 #define MAX_MUTE 1
51 #define MIN_MUTE 0
52 #define MONO_CNTL 1
53 #define STEREO_CNTL 2
54 #define MIN_CHANNEL 1
55 #define MAX_CHANNEL_AMIC 2
56 #define MAX_CHANNEL_DMIC 4
57 #define FIFO_SIZE 0 /* fifo not being used */
58 #define INTEL_MAD "Intel MAD"
59 #define MAX_CTRL_MRST 7
60 #define MAX_CTRL_MFLD 2
61 #define MAX_CTRL 7
62 #define MAX_VENDORS 4
63 /* TODO +6 db */
64 #define MAX_VOL 64
65 /* TODO -57 db */
66 #define MIN_VOL 0
67 #define PLAYBACK_COUNT 1
68 #define CAPTURE_COUNT 1
69
70 extern int sst_card_vendor_id;
71
72 struct mad_jack {
73 struct snd_jack jack;
74 int jack_status;
75 struct timeval buttonpressed;
76 struct timeval buttonreleased;
77 };
78
79 struct mad_jack_msg_wq {
80 u8 intsts;
81 struct snd_intelmad *intelmaddata;
82 struct work_struct wq;
83
84 };
85
86 /**
87 * struct snd_intelmad - intelmad driver structure
88 *
89 * @card: ptr to the card details
90 * @card_index: sound card index
91 * @card_id: sound card id detected
92 * @sstdrv_ops: ptr to sst driver ops
93 * @pdev: ptr to platfrom device
94 * @irq: interrupt number detected
95 * @pmic_status: Device status of sound card
96 * @int_base: ptr to MMIO interrupt region
97 * @output_sel: device slected as o/p
98 * @input_sel: device slected as i/p
99 * @master_mute: master mute status
100 * @jack: jack status
101 * @playback_cnt: active pb streams
102 * @capture_cnt: active cp streams
103 * @mad_jack_msg: wq struct for jack interrupt processing
104 * @mad_jack_wq: wq for jack interrupt processing
105 * @jack_prev_state: Previos state of jack detected
106 * @cpu_id: current cpu id loaded for
107 */
108 struct snd_intelmad {
109 struct snd_card *card; /* ptr to the card details */
110 int card_index;/* card index */
111 char *card_id; /* card id */
112 struct intel_sst_card_ops *sstdrv_ops;/* ptr to sst driver ops */
113 struct platform_device *pdev;
114 int irq;
115 int pmic_status;
116 void __iomem *int_base;
117 int output_sel;
118 int input_sel;
119 int master_mute;
120 struct mad_jack jack[4];
121 int playback_cnt;
122 int capture_cnt;
123 struct mad_jack_msg_wq mad_jack_msg;
124 struct workqueue_struct *mad_jack_wq;
125 u8 jack_prev_state;
126 unsigned int cpu_id;
127 };
128
129 struct snd_control_val {
130 int playback_vol_max;
131 int playback_vol_min;
132 int capture_vol_max;
133 int capture_vol_min;
134 };
135
136 struct mad_stream_pvt {
137 int stream_status;
138 int stream_ops;
139 struct snd_pcm_substream *substream;
140 struct pcm_stream_info stream_info;
141 ssize_t dbg_cum_bytes;
142 enum snd_sst_device_type device;
143 };
144
145 enum mad_drv_status {
146 INIT = 1,
147 STARTED,
148 RUNNING,
149 PAUSED,
150 DROPPED,
151 };
152
153 enum mad_pmic_status {
154 PMIC_UNINIT = 1,
155 PMIC_INIT,
156 };
157 enum _widget_ctrl {
158 OUTPUT_SEL = 1,
159 INPUT_SEL,
160 PLAYBACK_VOL,
161 PLAYBACK_MUTE,
162 CAPTURE_VOL,
163 CAPTURE_MUTE,
164 MASTER_MUTE
165 };
166
167 void period_elapsed(void *mad_substream);
168 int snd_intelmad_alloc_stream(struct snd_pcm_substream *substream);
169 int snd_intelmad_init_stream(struct snd_pcm_substream *substream);
170
171 int sst_sc_reg_access(struct sc_reg_access *sc_access,
172 int type, int num_val);
173 #define CPU_CHIP_LINCROFT 1 /* System running lincroft */
174 #define CPU_CHIP_PENWELL 2 /* System running penwell */
175
176 extern struct snd_control_val intelmad_ctrl_val[];
177 extern struct snd_kcontrol_new snd_intelmad_controls_mrst[];
178 extern struct snd_kcontrol_new snd_intelmad_controls_mfld[];
179 extern struct snd_pmic_ops *intelmad_vendor_ops[];
180
181 /* This is an enabler hook as the platform detection logic isn't yet
182 present and depends on some firmware and DMI support to detect AAVA
183 devices. It will vanish once the AAVA platform support is merged */
184 #define is_aava() 0
185
186 #endif /* __INTELMID_H */