aboutsummaryrefslogtreecommitdiffstats
path: root/sound/soc/codecs/ymu831/ymu831_priv.h
diff options
context:
space:
mode:
Diffstat (limited to 'sound/soc/codecs/ymu831/ymu831_priv.h')
-rw-r--r--sound/soc/codecs/ymu831/ymu831_priv.h345
1 files changed, 345 insertions, 0 deletions
diff --git a/sound/soc/codecs/ymu831/ymu831_priv.h b/sound/soc/codecs/ymu831/ymu831_priv.h
new file mode 100644
index 0000000..8e83635
--- /dev/null
+++ b/sound/soc/codecs/ymu831/ymu831_priv.h
@@ -0,0 +1,345 @@
+/*
+ * YMU831 ASoC codec driver - private header
+ *
+ * Copyright (c) 2012-2013 Yamaha Corporation
+ *
+ * This software is provided 'as-is', without any express or implied
+ * warranty. In no event will the authors be held liable for any damages
+ * arising from the use of this software.
+ *
+ * Permission is granted to anyone to use this software for any purpose,
+ * including commercial applications, and to alter it and redistribute it
+ * freely, subject to the following restrictions:
+ *
+ * 1. The origin of this software must not be misrepresented; you must not
+ * claim that you wrote the original software. If you use this software
+ * in a product, an acknowledgment in the product documentation would be
+ * appreciated but is not required.
+ * 2. Altered source versions must be plainly marked as such, and must not be
+ * misrepresented as being the original software.
+ * 3. This notice may not be removed or altered from any source distribution.
+ */
+
+#ifndef YMU831_PRIV_H
+#define YMU831_PRIV_H
+
+#include <sound/soc.h>
+#include "mcdriver.h"
+
+#undef MC_ASOC_TEST
+
+/*
+ * Virtual registers
+ */
+enum {
+ MC_ASOC_DVOL_MUSICIN,
+ MC_ASOC_DVOL_EXTIN,
+ MC_ASOC_DVOL_VOICEIN,
+ MC_ASOC_DVOL_REFIN,
+ MC_ASOC_DVOL_ADIF0IN,
+ MC_ASOC_DVOL_ADIF1IN,
+ MC_ASOC_DVOL_ADIF2IN,
+ MC_ASOC_DVOL_MUSICOUT,
+ MC_ASOC_DVOL_EXTOUT,
+ MC_ASOC_DVOL_VOICEOUT,
+ MC_ASOC_DVOL_REFOUT,
+ MC_ASOC_DVOL_DAC0OUT,
+ MC_ASOC_DVOL_DAC1OUT,
+ MC_ASOC_DVOL_DPATHDA,
+ MC_ASOC_DVOL_DPATHAD,
+ MC_ASOC_AVOL_LINEIN1,
+ MC_ASOC_AVOL_MIC1,
+ MC_ASOC_AVOL_MIC2,
+ MC_ASOC_AVOL_MIC3,
+ MC_ASOC_AVOL_MIC4,
+ MC_ASOC_AVOL_HP,
+ MC_ASOC_AVOL_SP,
+ MC_ASOC_AVOL_RC,
+ MC_ASOC_AVOL_LINEOUT1,
+ MC_ASOC_AVOL_LINEOUT2,
+ MC_ASOC_AVOL_SP_GAIN,
+
+ MC_ASOC_DVOL_MASTER,
+ MC_ASOC_DVOL_VOICE,
+ MC_ASOC_DVOL_APLAY_A,
+ MC_ASOC_DVOL_APLAY_D,
+
+ MC_ASOC_VOICE_RECORDING,
+
+ MC_ASOC_AUDIO_MODE_PLAY,
+ MC_ASOC_AUDIO_MODE_CAP,
+ MC_ASOC_OUTPUT_PATH,
+ MC_ASOC_INPUT_PATH,
+ MC_ASOC_INCALL_MIC_SP,
+ MC_ASOC_INCALL_MIC_RC,
+ MC_ASOC_INCALL_MIC_HP,
+ MC_ASOC_INCALL_MIC_LO1,
+ MC_ASOC_INCALL_MIC_LO2,
+
+ MC_ASOC_MAINMIC_PLAYBACK_PATH,
+ MC_ASOC_SUBMIC_PLAYBACK_PATH,
+ MC_ASOC_2MIC_PLAYBACK_PATH,
+ MC_ASOC_HSMIC_PLAYBACK_PATH,
+ MC_ASOC_BTMIC_PLAYBACK_PATH,
+ MC_ASOC_LIN1_PLAYBACK_PATH,
+
+ MC_ASOC_DTMF_CONTROL,
+ MC_ASOC_DTMF_OUTPUT,
+
+ MC_ASOC_SWITCH_CLOCK,
+
+ MC_ASOC_EXT_MASTERSLAVE,
+ MC_ASOC_EXT_RATE,
+ MC_ASOC_EXT_BITCLOCK_RATE,
+ MC_ASOC_EXT_INTERFACE,
+ MC_ASOC_EXT_BITCLOCK_INVERT,
+ MC_ASOC_EXT_INPUT_DA_BIT_WIDTH,
+ MC_ASOC_EXT_INPUT_DA_FORMAT,
+ MC_ASOC_EXT_INPUT_PCM_MONOSTEREO,
+ MC_ASOC_EXT_INPUT_PCM_BIT_ORDER,
+ MC_ASOC_EXT_INPUT_PCM_FORMAT,
+ MC_ASOC_EXT_INPUT_PCM_BIT_WIDTH,
+ MC_ASOC_EXT_OUTPUT_DA_BIT_WIDTH,
+ MC_ASOC_EXT_OUTPUT_DA_FORMAT,
+ MC_ASOC_EXT_OUTPUT_PCM_MONOSTEREO,
+ MC_ASOC_EXT_OUTPUT_PCM_BIT_ORDER,
+ MC_ASOC_EXT_OUTPUT_PCM_FORMAT,
+ MC_ASOC_EXT_OUTPUT_PCM_BIT_WIDTH,
+
+ MC_ASOC_VOICE_MASTERSLAVE,
+ MC_ASOC_VOICE_RATE,
+ MC_ASOC_VOICE_BITCLOCK_RATE,
+ MC_ASOC_VOICE_INTERFACE,
+ MC_ASOC_VOICE_BITCLOCK_INVERT,
+ MC_ASOC_VOICE_INPUT_DA_BIT_WIDTH,
+ MC_ASOC_VOICE_INPUT_DA_FORMAT,
+ MC_ASOC_VOICE_INPUT_PCM_MONOSTEREO,
+ MC_ASOC_VOICE_INPUT_PCM_BIT_ORDER,
+ MC_ASOC_VOICE_INPUT_PCM_FORMAT,
+ MC_ASOC_VOICE_INPUT_PCM_BIT_WIDTH,
+ MC_ASOC_VOICE_OUTPUT_DA_BIT_WIDTH,
+ MC_ASOC_VOICE_OUTPUT_DA_FORMAT,
+ MC_ASOC_VOICE_OUTPUT_PCM_MONOSTEREO,
+ MC_ASOC_VOICE_OUTPUT_PCM_BIT_ORDER,
+ MC_ASOC_VOICE_OUTPUT_PCM_FORMAT,
+ MC_ASOC_VOICE_OUTPUT_PCM_BIT_WIDTH,
+
+ MC_ASOC_MUSIC_PHYSICAL_PORT,
+ MC_ASOC_EXT_PHYSICAL_PORT,
+ MC_ASOC_VOICE_PHYSICAL_PORT,
+ MC_ASOC_HIFI_PHYSICAL_PORT,
+
+ MC_ASOC_ADIF0_SWAP,
+ MC_ASOC_ADIF1_SWAP,
+ MC_ASOC_ADIF2_SWAP,
+
+ MC_ASOC_DAC0_SWAP,
+ MC_ASOC_DAC1_SWAP,
+
+ MC_ASOC_MUSIC_OUT0_SWAP,
+
+ MC_ASOC_MUSIC_IN0_SWAP,
+ MC_ASOC_MUSIC_IN1_SWAP,
+ MC_ASOC_MUSIC_IN2_SWAP,
+
+ MC_ASOC_EXT_IN_SWAP,
+
+ MC_ASOC_VOICE_IN_SWAP,
+
+ MC_ASOC_MUSIC_OUT1_SWAP,
+ MC_ASOC_MUSIC_OUT2_SWAP,
+
+ MC_ASOC_EXT_OUT_SWAP,
+
+ MC_ASOC_VOICE_OUT_SWAP,
+
+ MC_ASOC_ADIF0_SOURCE,
+ MC_ASOC_ADIF1_SOURCE,
+ MC_ASOC_ADIF2_SOURCE,
+
+ MC_ASOC_CLEAR_DSP_PARAM,
+
+ MC_ASOC_PARAMETER_SETTING,
+
+ MC_ASOC_MAIN_MIC,
+ MC_ASOC_SUB_MIC,
+ MC_ASOC_HS_MIC,
+#ifdef MC_ASOC_TEST
+ MC_ASOC_MIC1_BIAS,
+ MC_ASOC_MIC2_BIAS,
+ MC_ASOC_MIC3_BIAS,
+ MC_ASOC_MIC4_BIAS,
+#endif
+
+ MC_ASOC_N_REG
+};
+#define MC_ASOC_N_VOL_REG (MC_ASOC_DVOL_APLAY_D+1)
+
+
+#define MC_ASOC_AUDIO_MODE_OFF (0)
+#define MC_ASOC_AUDIO_MODE_AUDIO (1)
+#define MC_ASOC_AUDIO_MODE_INCALL (2)
+#define MC_ASOC_AUDIO_MODE_AUDIO_INCALL (3)
+#define MC_ASOC_AUDIO_MODE_INCOMM (4)
+#define MC_ASOC_AUDIO_MODE_KARAOKE (5)
+#define MC_ASOC_AUDIO_MODE_INCALL2 (6)
+#define MC_ASOC_AUDIO_MODE_AUDIO_INCALL2 (7)
+#define MC_ASOC_AUDIO_MODE_INCOMM2 (8)
+#define MC_ASOC_AUDIO_MODE_INCALL3 (9)
+#define MC_ASOC_AUDIO_MODE_AUDIO_INCALL3 (10)
+#define MC_ASOC_AUDIO_MODE_INCALL4 (11)
+#define MC_ASOC_AUDIO_MODE_AUDIO_INCALL4 (12)
+
+#define MC_ASOC_AUDIO_MODE_AUDIOEX (5)
+#define MC_ASOC_AUDIO_MODE_AUDIOVR (6)
+
+#define MC_ASOC_OUTPUT_PATH_SP (0)
+#define MC_ASOC_OUTPUT_PATH_RC (1)
+#define MC_ASOC_OUTPUT_PATH_HP (2)
+#define MC_ASOC_OUTPUT_PATH_HS (3)
+#define MC_ASOC_OUTPUT_PATH_LO1 (4)
+#define MC_ASOC_OUTPUT_PATH_LO2 (5)
+#define MC_ASOC_OUTPUT_PATH_BT (6)
+#define MC_ASOC_OUTPUT_PATH_SP_RC (7)
+#define MC_ASOC_OUTPUT_PATH_SP_HP (8)
+#define MC_ASOC_OUTPUT_PATH_SP_LO1 (9)
+#define MC_ASOC_OUTPUT_PATH_SP_LO2 (10)
+#define MC_ASOC_OUTPUT_PATH_SP_BT (11)
+#define MC_ASOC_OUTPUT_PATH_LO1_RC (12)
+#define MC_ASOC_OUTPUT_PATH_LO1_HP (13)
+#define MC_ASOC_OUTPUT_PATH_LO1_BT (14)
+#define MC_ASOC_OUTPUT_PATH_LO2_RC (15)
+#define MC_ASOC_OUTPUT_PATH_LO2_HP (16)
+#define MC_ASOC_OUTPUT_PATH_LO2_BT (17)
+#define MC_ASOC_OUTPUT_PATH_LO1_LO2 (18)
+#define MC_ASOC_OUTPUT_PATH_LO2_LO1 (19)
+
+#define MC_ASOC_INPUT_PATH_MAINMIC (0)
+#define MC_ASOC_INPUT_PATH_SUBMIC (1)
+#define MC_ASOC_INPUT_PATH_2MIC (2)
+#define MC_ASOC_INPUT_PATH_HS (3)
+#define MC_ASOC_INPUT_PATH_BT (4)
+#define MC_ASOC_INPUT_PATH_VOICECALL (5)
+#define MC_ASOC_INPUT_PATH_VOICEUPLINK (6)
+#define MC_ASOC_INPUT_PATH_VOICEDOWNLINK (7)
+#define MC_ASOC_INPUT_PATH_LIN1 (8)
+
+#define MC_ASOC_INCALL_MIC_MAINMIC (0)
+#define MC_ASOC_INCALL_MIC_SUBMIC (1)
+#define MC_ASOC_INCALL_MIC_2MIC (2)
+
+#define MC_ASOC_DTMF_OUTPUT_SP (0)
+#define MC_ASOC_DTMF_OUTPUT_NORMAL (1)
+
+
+/*
+ * Driver private data structure
+ */
+struct mc_asoc_setup {
+ struct MCDRV_INIT_INFO init;
+ struct MCDRV_INIT2_INFO init2;
+ unsigned char rslot[3];
+ unsigned char tslot[3];
+};
+
+struct mc_asoc_port_params {
+ UINT8 rate;
+ UINT8 bits[SNDRV_PCM_STREAM_LAST+1];
+ UINT8 pcm_mono[SNDRV_PCM_STREAM_LAST+1];
+ UINT8 pcm_order[SNDRV_PCM_STREAM_LAST+1];
+ UINT8 pcm_law[SNDRV_PCM_STREAM_LAST+1];
+ UINT8 master;
+ UINT8 inv;
+ UINT8 srcthru;
+ UINT8 format;
+ UINT8 bckfs;
+ UINT8 channels;
+ UINT8 stream; /* bit0: Playback, bit1: Capture */
+};
+
+struct mc_asoc_dsp_param {
+ UINT8 *pabParam;
+ UINT32 dSize;
+ struct mc_asoc_dsp_param *next;
+};
+
+struct mc_asoc_jack {
+ struct snd_soc_jack *hs_jack;
+#ifdef CONFIG_SWITCH
+ struct switch_dev *h2w_sdev;
+#endif
+};
+
+struct mc_asoc_platform_data {
+ void (*set_ext_micbias)(int en);
+ void (*set_ext_sub_micbias)(int en);
+ void (*set_codec_ldod)(int status);
+ void (*set_codec_mclk)(bool enable, bool forced);
+};
+
+struct mc_asoc_data {
+ struct mutex mutex;
+ struct mc_asoc_setup setup;
+ struct mc_asoc_port_params port;
+ struct snd_hwdep *hwdep;
+ struct MCDRV_CLOCKSW_INFO clocksw_store;
+ struct MCDRV_PATH_INFO path_store;
+ struct MCDRV_VOL_INFO vol_store;
+ struct MCDRV_DIO_INFO dio_store;
+ struct MCDRV_DIOPATH_INFO diopath_store;
+ struct MCDRV_SWAP_INFO swap_store;
+ struct MCDRV_HSDET_INFO hsdet_store;
+ struct MCDRV_HSDET2_INFO hsdet2_store;
+ struct mc_asoc_dsp_param param_store[4][2];
+ struct mc_asoc_jack jack;
+ struct mc_asoc_platform_data *pdata;
+};
+
+struct mc_asoc_priv {
+ struct mc_asoc_data data;
+};
+
+extern void mc_asoc_write_data(UINT8 bSlaveAdr,
+ const UINT8 *pbData,
+ UINT32 dSize);
+extern void mc_asoc_read_data(UINT8 bSlaveAdr,
+ UINT32 dAddress,
+ UINT8 *pbData,
+ UINT32 dSize);
+extern void mc_asoc_set_codec_ldod(int status);
+
+
+/*
+ * For debugging
+ */
+#ifdef CONFIG_SND_SOC_YAMAHA_YMU831_DEBUG
+
+#define SHOW_REG_ACCESS
+#define dbg_info(format, arg...) snd_printd(KERN_INFO format, ## arg)
+#define TRACE_FUNC() snd_printd(KERN_INFO "<trace> %s()\n", __func__)
+#define _McDrv_Ctrl McDrv_Ctrl_dbg
+
+extern SINT32 McDrv_Ctrl_dbg(
+ UINT32 dCmd, void *pvPrm1, void *pvPrm2, UINT32 dPrm);
+
+#else
+
+#ifdef CONFIG_SAMSUNG_PRODUCT_SHIP
+
+#define dbg_info(format, arg...)
+#define TRACE_FUNC()
+#define _McDrv_Ctrl McDrv_Ctrl
+
+#else
+
+#define dbg_info(format, arg...) printk(KERN_DEBUG "ymu831 " \
+ format, ## arg)
+#define TRACE_FUNC() printk(KERN_INFO "ymu831 %s\n", __func__)
+#define _McDrv_Ctrl McDrv_Ctrl_dbg_sec
+
+extern SINT32 McDrv_Ctrl_dbg_sec(
+ UINT32 dCmd, void *pvPrm1, void *pvPrm2, UINT32 dPrm);
+#endif
+#endif /* CONFIG_SND_SOC_YAMAHA_YMU831_DEBUG */
+
+#endif /* YMU831_PRIV_H */