[alsa-devel] [PATCH] [RFC 12/13] Intel SST sound card headers
Vinod Koul
vinod.koul at intel.com
Fri Jul 3 08:24:38 CEST 2009
This adds header files of sound card driver, it defines some utility
functions and common declarations for vendor sound cards as well
Signed-off-by: Vinod Koul <vinod.koul at intel.com>
Signed-off-by: Harsha Priya <priya.harsha at intel.com>
new file: sound/pci/sst/intelmid.h
new file: sound/pci/sst/intelmid_pvt.h
new file: sound/pci/sst/intelmid_snd_control.h
---
sound/pci/sst/intelmid.h | 274 ++++++++++++++++++++++++++++++++++
sound/pci/sst/intelmid_pvt.h | 198 ++++++++++++++++++++++++
sound/pci/sst/intelmid_snd_control.h | 153 +++++++++++++++++++
3 files changed, 625 insertions(+), 0 deletions(-)
create mode 100644 sound/pci/sst/intelmid.h
create mode 100644 sound/pci/sst/intelmid_pvt.h
create mode 100644 sound/pci/sst/intelmid_snd_control.h
diff --git a/sound/pci/sst/intelmid.h b/sound/pci/sst/intelmid.h
new file mode 100644
index 0000000..938ad52
--- /dev/null
+++ b/sound/pci/sst/intelmid.h
@@ -0,0 +1,274 @@
+/*
+ * intelmid.c - Intel Sound card driver for MID
+ *
+ * Copyright (C) 2008-09 Intel Corp
+ * Authors: Vinod Koul <vinod.koul at intel.com>
+ * Harsha Priya <priya.harsha at intel.com>
+ *
+ * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+ *
+ * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ * ALSA driver header for Intel MAD chipset
+ */
+#ifndef __INTELMID_H
+#define __INTELMID_H
+
+#include <linux/time.h>
+#define DRIVER_NAME "pmic_audio"
+#define PMIC_SOUND_IRQ_TYPE_MASK (1 << 15)
+#define AUDINT_BASE (0xFFFFEFF8 + (6 * sizeof(u8)))
+/*#define FULL_CTRL*/
+/*#define REG_IRQ*/
+/*values #defined */
+/* will differ for different hw - to be taken from config */
+#define MAX_DEVICES 1
+#define MIN_RATE 8000
+#define MAX_RATE 48000
+#define MAX_BUFFER (320*1024)
+#define MIN_BUFFER (320*1024)
+#define MAX_PERIODS (1024*2)
+#define MIN_PERIODS 1
+#define MAX_PERIOD_BYTES MAX_BUFFER
+#define MIN_PERIOD_BYTES 32
+#define MAX_MUTE 1
+#define MIN_MUTE 0
+#define MONO_CNTL 1
+#define STEREO_CNTL 2
+#define MIN_CHANNEL 1
+#define MAX_CHANNEL 2
+#define FIFO_SIZE 0 /*fifo not being used*/
+#define INTEL_MAD "Intel MAD"
+#define MUTE_ALL_DEV 9
+/*TODO +6 db*/
+#define MAX_VOL 64
+/*TODO -57 db*/
+#define MIN_VOL 0
+#define PLAYBACK_COUNT 1
+#define CAPTURE_COUNT 1
+
+struct mad_device {
+ unsigned int mic_plugged:1;
+ unsigned int headphones_plugged:1;
+ unsigned int line_in_plugged:1;
+};
+
+struct mad_wq {
+ struct snd_pcm_substream *substream;
+ struct work_struct wq;
+ struct mutex wq_lock;
+};
+
+struct mad_capture_wq {
+ struct snd_pcm_substream *substream;
+ struct stream_buffer buffer_to_sst;
+ struct work_struct wq;
+};
+struct snd_intelmad {
+ struct snd_card *card; /*ptr to the card details*/
+ int card_index;/* card index */
+ char *card_id; /*card id*/
+ struct mad_device pin_sense; /*current pin sense */
+ struct intel_sst_card_ops *sstdrv_ops;/*ptr to sst driver ops*/
+ struct spi_device *spi;
+ int irq;
+ int pmic_status;
+ void __iomem *int_base;
+};
+
+struct snd_control_val {
+ int mic1_vol_max;
+ int mic1_vol_min;
+ int mic2_vol_max;
+ int mic2_vol_min;
+ int dmic_vol_max;
+ int dmic_vol_min;
+ int linein_vol_max;
+ int linein_vol_min;
+ int hp_vol_max;
+ int hp_vol_min;
+ int speaker_vol_max;
+ int speaker_vol_min;
+ int earpiece_vol_max;
+ int earpiece_vol_min;
+};
+
+struct mad_stream_pvt {
+ int stream_id;
+ int stream_status;
+ int stream_ops;
+ unsigned int stream_type; /*0:Audio 1:Voice Default:Audio*/
+ struct snd_pcm_substream *substream;
+ unsigned int pcm_size;
+ unsigned int pcm_jiffie;
+ unsigned int pcm_buf_pos;
+ struct snd_pcm_indirect pcm_indirect;
+ struct pcm_stream_info buf_ptr;
+ unsigned long period_elapsed_ptr;
+ struct mad_wq mad_msg_wq;
+ struct mad_capture_wq mad_capture_wq;
+};
+
+enum mad_drv_status {
+ INIT = 1,
+ STARTED,
+ RUNNING,
+ PAUSED,
+ DROPPED,
+};
+
+enum mad_pmic_status {
+ PMIC_UNINIT = 1,
+ PMIC_INIT,
+};
+#ifdef FULL_CTRL
+enum _widget_ctrl {
+ LINE_IN_VOL = 1,
+ LINE_IN_MUTE,
+ DMIC_VOL,
+ DMIC_MUTE,
+ MIC1_VOL,
+ MIC1_MUTE,
+ MIC2_VOL,
+ MIC2_MUTE,
+ INPUT_SEL,
+ HEADPHONES_VOL ,
+ HEADPHONES_MUTE,
+ INTERNAL_SPEAKERS_VOL,
+ INTERNAL_SPEAKERS_MUTE,
+ EARPIECE_VOL,
+ EARPIECE_MUTE,
+ OUTPUT_SEL,
+ MASTER_MUTE
+};
+#else
+enum _widget_ctrl {
+ HEADPHONES_VOL = 1 ,
+ HEADPHONES_MUTE,
+};
+#endif
+
+enum {
+ AUDIO_GENL_ATTR_UNSPEC = 0,
+ AUDIO_GENL_ATTR_EVENT, /* Audio event info needed by user space */
+ AUDIO_GENL_ATTR_MAX,
+};
+enum {
+ AUDIO_GENL_CMD_UNSPEC,
+ AUDIO_GENL_CMD_EVENT, /* kernel->user notifications for OSPM events */
+ AUDIO_GENL_CMD_MAX,
+};
+
+enum eaudio_events {
+ AUDIO_EVENT_HP_DETECT,
+ AUDIO_EVENT_HS_DETECT,
+ AUDIO_EVENT_SHORT_PRESS,
+ AUDIO_EVENT_LONG_PRESS,
+ AUDIO_EVENT_COUNT,
+};
+
+struct audio_genl_event {
+ u32 orig;
+ enum eaudio_events event;
+};
+
+struct snd_pmic_ops v[3] = {
+ {
+ .set_input_dev = fs_set_selected_input_dev,
+ .set_output_dev = fs_set_selected_output_dev,
+ .set_mute = fs_set_mute,
+ .get_mute = fs_get_mute,
+ .set_vol = fs_set_vol,
+ .get_vol = fs_get_vol,
+ .init_card = fs_init_card,
+ .set_pcm_params = fs_set_pcm_params,
+ .init_card_capture = fs_init_capture_card,
+ },
+ {
+ .set_input_dev = mx_set_selected_input_dev,
+ .set_output_dev = mx_set_selected_output_dev,
+ .set_mute = mx_set_mute,
+ .get_mute = mx_get_mute,
+ .set_vol = mx_set_vol,
+ .get_vol = mx_get_vol,
+ .init_card = mx_init_card,
+ .set_pcm_params = mx_set_pcm_params,
+ .init_card_capture = mx_init_capture_card,
+ },
+ {
+ .set_input_dev = nc_set_selected_input_dev,
+ .set_output_dev = nc_set_selected_output_dev,
+ .set_mute = nc_set_mute,
+ .get_mute = nc_get_mute,
+ .set_vol = nc_set_vol,
+ .get_vol = nc_get_vol,
+ .init_card = nc_init_card,
+ .set_pcm_params = nc_set_pcm_params,
+ .init_card_capture = nc_init_capture_card,
+ },
+};
+
+struct snd_control_val ctrl_val[3] = {
+ {
+ .mic1_vol_max = MAX_VOL,
+ .mic1_vol_min = MIN_VOL,
+ .mic2_vol_max = MAX_VOL,
+ .mic2_vol_min = MIN_VOL,
+ .dmic_vol_max = MAX_VOL,
+ .dmic_vol_min = MIN_VOL,
+ .linein_vol_max = MAX_VOL,
+ .linein_vol_min = MIN_VOL,
+ .hp_vol_max = MAX_VOL,
+ .hp_vol_min = MIN_VOL,
+ .speaker_vol_max = MAX_VOL,
+ .speaker_vol_min = MIN_VOL,
+ .earpiece_vol_max = MAX_VOL,
+ .earpiece_vol_min = MIN_VOL,
+ },
+ {
+ .mic1_vol_max = MAX_VOL,
+ .mic1_vol_min = MIN_VOL,
+ .mic2_vol_max = MAX_VOL,
+ .mic2_vol_min = MIN_VOL,
+ .dmic_vol_max = MAX_VOL,
+ .dmic_vol_min = MIN_VOL,
+ .linein_vol_max = MAX_VOL,
+ .linein_vol_min = MIN_VOL,
+ .hp_vol_max = MAX_VOL,
+ .hp_vol_min = MIN_VOL,
+ .speaker_vol_max = MAX_VOL,
+ .speaker_vol_min = MIN_VOL,
+ .earpiece_vol_max = MAX_VOL,
+ .earpiece_vol_min = MIN_VOL,
+ },
+ {
+ .mic1_vol_max = 30,
+ .mic1_vol_min = 10,
+ .mic2_vol_max = 30,
+ .mic2_vol_min = 10,
+ .dmic_vol_max = 0,
+ .dmic_vol_min = -63,
+ .linein_vol_max = MAX_VOL,
+ .linein_vol_min = MIN_VOL,
+ .hp_vol_max = 6,
+ .hp_vol_min = -25,
+ .speaker_vol_max = 6,
+ .speaker_vol_min = -25,
+ .earpiece_vol_max = 6,
+ .earpiece_vol_min = -25,
+ },
+};
+
+#endif /*__INTELMID_H*/
diff --git a/sound/pci/sst/intelmid_pvt.h b/sound/pci/sst/intelmid_pvt.h
new file mode 100644
index 0000000..73cb9b5
--- /dev/null
+++ b/sound/pci/sst/intelmid_pvt.h
@@ -0,0 +1,198 @@
+#ifndef __INTEL_MID_PVT_H__
+#define __INTEL_MID_PVT_H__
+/*
+ * intelmid_pvt.h - Intel Sound card driver for MID
+ *
+ * Copyright (C) 2008-09 Intel Corp
+ * Authors: Vinod Koul <vinod.koul at intel.com>
+ * Harsha Priya <priya.harsha at intel.com>
+ * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+ *
+ * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ * ALSA driver for Intel MID sound card chipset - holding private functions
+ */
+
+static int snd_intelmad_volume_info(struct snd_ctl_elem_info *uinfo,
+ int control_type, int max, int min)
+{
+ WARN_ON(!uinfo);
+
+ uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
+ uinfo->count = control_type;
+ uinfo->value.integer.min = min;
+ uinfo->value.integer.max = max;
+ return 0;
+}
+
+#ifdef FULL_CTRL
+/**
+* mute_all - mutes all the DAC and ADC controls
+* @kcontrol: pointer to the control of master mute switch
+* @uval: pointer to the structure where the control's info need
+* to be filled
+* This function is internally called from snd_intelmad_mute_set for master_mute
+*/
+static int mute_all(struct snd_kcontrol *kcontrol,
+ struct snd_ctl_elem_value *uval)
+{
+ int i = 0, value = 0, ret_val = 0;
+ struct snd_intelmad *intelmaddata = NULL;
+ struct snd_pmic_ops *scard_ops = NULL;
+ int cntl_list[MUTE_ALL_DEV] =
+ {PMIC_SND_LEFT_HP_MUTE,
+ PMIC_SND_RIGHT_HP_MUTE,
+ PMIC_SND_RIGHT_SPEAKER_MUTE,
+ PMIC_SND_LEFT_SPEAKER_MUTE,
+ PMIC_SND_MONO_EARPIECE_MUTE,
+ PMIC_SND_INPUT_MUTE_LINE_IN,
+ PMIC_SND_INPUT_MUTE_MIC1,
+ PMIC_SND_INPUT_MUTE_MIC2,
+ PMIC_SND_INPUT_MUTE_DMIC
+ };
+
+ sst_dbg("called\n");
+
+ WARN_ON(!uval);
+ WARN_ON(!kcontrol);
+
+ value = uval->value.integer.value[0];
+ if (value == 0)
+ value = 1;
+ else
+ value = 0;
+
+ intelmaddata = kcontrol->private_data;
+
+ WARN_ON(!intelmaddata->sstdrv_ops);
+
+ if (PMIC_UNINIT == intelmaddata->pmic_status) {
+ ret_val = intelmaddata->sstdrv_ops->scard_ops->init_card();
+ intelmaddata->pmic_status = PMIC_INIT;
+ }
+
+ if (0 != ret_val)
+ return ret_val;
+
+ scard_ops = intelmaddata->sstdrv_ops->scard_ops;
+
+ WARN_ON(!scard_ops);
+ sst_dbg("************uval::%ld\n", uval->value.integer.value[0]);
+ sst_dbg("************value::%d\n", value);
+ for (i = 0; i < MUTE_ALL_DEV; i++) {
+ ret_val = scard_ops->set_mute(cntl_list[i], value);
+ if (0 != ret_val)
+ return ret_val;
+ }
+ kcontrol->private_value = 0;
+ return ret_val;
+}
+#endif
+
+void period_elapsed(void *mad_substream)
+{
+ struct snd_pcm_substream *substream = mad_substream;
+ struct mad_stream_pvt *stream = substream->runtime->private_data;
+
+ sst_dbg("called\n");
+ if (stream->stream_status != RUNNING)
+ return;
+ sst_dbg("calling period elapsed\n");
+ snd_pcm_period_elapsed(substream);
+ return;
+}
+
+
+int snd_intelmad_alloc_stream(struct snd_pcm_substream *substream)
+{
+ struct snd_intelmad *intelmaddata = NULL;
+ struct mad_stream_pvt *stream = substream->runtime->private_data;
+ struct snd_sst_stream_params param = {{{0,},},};
+ struct snd_sst_params str_params = {0};
+ int ret_val = 0, stream_type = 0;
+ unsigned int bits_per_sec = 0;
+
+ intelmaddata = snd_pcm_substream_chip(substream);
+
+ if (SNDRV_PCM_FMTBIT_S8 == substream->runtime->format ||
+ SNDRV_PCM_FMTBIT_U8 == substream->runtime->format)
+ stream->stream_type = STREAM_TYPE_VOICE;
+ else
+ stream->stream_type = STREAM_TYPE_MUSIC;
+
+ stream_type = substream->stream;
+ sst_dbg("stream type = %d \n", stream_type);
+
+ bits_per_sec = (substream->runtime->sample_bits/8)
+ * (substream->runtime->channels)
+ * (substream->runtime->rate);
+ /*set codec params and inform SST driver the same*/
+
+ param.uc.pcm_params.codec = SST_CODEC_TYPE_PCM;
+ param.uc.pcm_params.brate = bits_per_sec;
+ param.uc.pcm_params.num_chan = substream->runtime->channels;
+ param.uc.pcm_params.sfreq = substream->runtime->rate;
+ param.uc.pcm_params.pcm_wd_sz = substream->runtime->sample_bits;
+ param.uc.pcm_params.frame_size = 0;
+ param.uc.pcm_params.samples_per_frame = 250;
+ param.uc.pcm_params.period_count = substream->runtime->period_size;
+ sst_dbg("period_count = %d\n", param.uc.pcm_params.period_count);
+ sst_dbg("sfreq= %d, wd_sz = %d\n", param.uc.pcm_params.sfreq,
+ param.uc.pcm_params.pcm_wd_sz);
+
+ str_params.sparams = param;
+ str_params.codec = SST_CODEC_TYPE_PCM;
+
+ if (SNDRV_PCM_STREAM_PLAYBACK == stream_type)
+ str_params.ops = STREAM_OPS_PLAYBACK;
+ else
+ str_params.ops = STREAM_OPS_CAPTURE;
+ ret_val = intelmaddata->sstdrv_ops->control_set(SST_SND_ALLOC,
+ &str_params);
+ sst_dbg("SST_SND_PLAY/CAPTURE ret_val = %x\n",
+ ret_val);
+ if (ret_val < 0)
+ return ret_val;
+
+ stream->stream_id = ret_val;
+ stream->stream_status = INIT;
+ stream->period_elapsed_ptr = 0;
+ stream->buf_ptr.buffer_ptr = 0;
+ sst_dbg("str id : %d\n", stream->stream_id);
+
+ return ret_val;
+}
+
+int snd_intelmad_init_stream(struct snd_pcm_substream *substream)
+{
+ struct mad_stream_pvt *stream = substream->runtime->private_data;
+ struct snd_intelmad *intelmaddata = NULL;
+ int ret_val = 0;
+
+ sst_dbg("setting buffer ptr param\n");
+ intelmaddata = snd_pcm_substream_chip(substream);
+ stream->buf_ptr.str_id = stream->stream_id;
+ stream->buf_ptr.period_elapsed = period_elapsed;
+ stream->buf_ptr.mad_substream = substream;
+ stream->buf_ptr.buffer_ptr = 0;
+ ret_val = intelmaddata->sstdrv_ops->control_set(SST_SND_STREAM_INIT,
+ &stream->buf_ptr);
+ if (0 != ret_val)
+ sst_err("error code = %d \n", ret_val);
+ return ret_val;
+
+}
+
+#endif
diff --git a/sound/pci/sst/intelmid_snd_control.h b/sound/pci/sst/intelmid_snd_control.h
new file mode 100644
index 0000000..49fdf9c
--- /dev/null
+++ b/sound/pci/sst/intelmid_snd_control.h
@@ -0,0 +1,153 @@
+#ifndef __INTELMID_SND_CTRL_H__
+#define __INTELMID_SND_CTRL_H__
+/*
+ * intelmid_snd_control.h - Intel Sound card driver for MID
+ *
+ * Copyright (C) 2008-09 Intel Corporation
+ * Authors: Vinod Koul <vinod.koul at intel.com>
+ * Harsha Priya <priya.harsha at intel.com>
+ * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+ *
+ * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ *
+ * This file defines all snd control functions
+ */
+
+/*
+Mask bits
+*/
+#define MASK0 0x01 /*0000 0001*/
+#define MASK1 0x02 /*0000 0010*/
+#define MASK2 0x04 /*0000 0100*/
+#define MASK3 0x08 /*0000 1000*/
+#define MASK4 0x10 /*0001 0000*/
+#define MASK5 0x20 /*0010 0000*/
+#define MASK6 0x40 /*0100 0000*/
+#define MASK7 0x80 /*1000 0000*/
+/*
+value bits
+*/
+#define VALUE0 0x01 /*0000 0001*/
+#define VALUE1 0x02 /*0000 0010*/
+#define VALUE2 0x04 /*0000 0100*/
+#define VALUE3 0x08 /*0000 1000*/
+#define VALUE4 0x10 /*0001 0000*/
+#define VALUE5 0x20 /*0010 0000*/
+#define VALUE6 0x40 /*0100 0000*/
+#define VALUE7 0x80 /*1000 0000*/
+
+#define MUTE 0 /* ALSA Passes 0 for mute */
+#define UNMUTE 1 /* ALSA Passes 1 for unmute */
+
+#define MAX_VOL_PMIC_VENDOR0 6 /* max volume in dB for stereo & voice DAC */
+#define MIN_VOL_PMIC_VENDOR0 (-57) /* min vol in dB for stereo & voice DAC*/
+/* Head phone volume control */
+#define MAX_HP_VOL_PMIC_VENDOR1 6 /* max volume in dB for HP */
+#define MIN_HP_VOL_PMIC_VENDOR1 (-84) /* min volume in dB for HP */
+#define MAX_HP_VOL_INDX_PMIC_VENDOR1 40 /* Number of HP volume control values */
+
+/* Mono Earpiece Volume control */
+#define MAX_EP_VOL_PMIC_VENDOR1 0 /* max volume in dB for EP */
+#define MIN_EP_VOL_PMIC_VENDOR1 (-75) /* min volume in dB for EP */
+#define MAX_EP_VOL_INDX_PMIC_VENDOR1 32 /* Number of EP volume control values */
+
+int nc_set_selected_input_dev(int value);
+int nc_get_selected_input_dev(int *value);
+int nc_set_selected_output_dev(int value);
+int nc_get_selected_output_dev(int *value);
+int nc_set_mute(int dev_id, int value);
+int nc_get_mute(int dev_id, int *value);
+int nc_set_vol(int dev_id, int value);
+int nc_get_vol(int dev_id, int *value);
+int nc_init_card(void);
+void nc_set_pcm_params(int sfreq, int word_size);
+int nc_init_capture_card(void);
+
+int fs_set_selected_input_dev(int value);
+int fs_get_selected_input_dev(int *value);
+int fs_set_selected_output_dev(int value);
+int fs_get_selected_output_dev(int *value);
+int fs_set_mute(int dev_id, int value);
+int fs_get_mute(int dev_id, int *value);
+int fs_set_vol(int dev_id, int value);
+int fs_get_vol(int dev_id, int *value);
+int fs_init_card(void);
+void fs_set_pcm_params(int sfreq, int word_size);
+int fs_init_capture_card(void);
+
+int mx_get_selected_input_dev(int *value);
+int mx_set_selected_input_dev(int value);
+int mx_set_selected_output_dev(int value);
+int mx_get_selected_output_dev(int *value);
+int mx_set_mute(int dev_id, int value);
+int mx_get_mute(int dev_id, int *value);
+int mx_set_vol(int dev_id, int value);
+int mx_get_vol(int dev_id, int *value);
+int mx_init_card(void);
+void mx_set_pcm_params(int sfreq, int word_size);
+int mx_init_capture_card(void);
+
+
+/*device*/
+enum SND_INPUT_DEVICE {
+ LINE_IN = 0,
+ MIC1,
+ MIC2,
+ DMIC,
+ IN_UNDEFINED
+};
+
+enum SND_OUTPUT_DEVICE {
+ MONO_HS = 0,
+ STEREO_HEADPHONE,
+ INTERNAL_SPKR,
+ OUT_UNDEFINED
+};
+
+enum SND_CARDS {
+ SND_FS = 0,
+ SND_MX,
+ SND_NC,
+};
+
+enum pmic_controls {
+ PMIC_SND_INPUT_MUTE_LINE_IN = 0x0001,
+ PMIC_SND_INPUT_MUTE_MIC1 = 0x0002,
+ PMIC_SND_INPUT_MUTE_MIC2 = 0x0003,
+ PMIC_SND_INPUT_MUTE_DMIC = 0x0004,
+ PMIC_SND_INPUT_VOL_MIC1 = 0x0005,
+ PMIC_SND_INPUT_VOL_MIC2 = 0x0006,
+ PMIC_SND_INPUT_VOL_DMIC = 0x0007,
+ PMIC_SND_INPUT_VOL_RIGHT_LINE_IN = 0x0008,
+ PMIC_SND_INPUT_VOL_LEFT_LINE_IN = 0x0009,
+/*Output controls*/
+ PMIC_SND_LEFT_HP_VOL = 0x0010,
+ PMIC_SND_RIGHT_HP_VOL = 0x0011,
+ PMIC_SND_LEFT_HP_MUTE = 0x0012,
+ PMIC_SND_RIGHT_HP_MUTE = 0x0013,
+ PMIC_SND_LEFT_SPEAKER_VOL = 0x0014,
+ PMIC_SND_RIGHT_SPEAKER_VOL = 0x0015,
+ PMIC_SND_LEFT_SPEAKER_MUTE = 0x0016,
+ PMIC_SND_RIGHT_SPEAKER_MUTE = 0x0017,
+ PMIC_SND_MONO_EARPIECE_VOL = 0x0018,
+ PMIC_SND_MONO_EARPIECE_MUTE = 0x0019,
+/*Other controls*/
+ PMIC_MAX_CONTROLS = 0x0019,
+};
+
+#endif /*__INTELMID_SND_CTRL_H__*/
+
+
--
1.5.4.5
More information about the Alsa-devel
mailing list