/*
Description:
AT command handler, handle command AT commands at*maudvol=P1,P2,P3
Parameters:
	pChip -- Pointer to chip data structure
	ParamCount -- Count of parameter array
	Params  --- P1,P2,...,P6
*/
int AtMaudVol(brcm_alsa_chip_t *pChip, Int32 ParamCount, Int32 *Params)
{
	int *pVolume;
	int mode, vol;

	aTrace(LOG_AUDIO_DRIVER, "%s P1-P6=%ld %ld %ld %ld %ld %ld cnt=%ld\n",
			__func__, Params[0], Params[1], Params[2],
			Params[3], Params[4], Params[5], ParamCount);

	csl_caph_ControlHWClock(TRUE);

	switch (Params[0]) {
	case 6:		/*at*maudvol=6 */
		mode = AUDCTRL_GetAudioMode();
		/*Get volume. Range -36 ~ 0 dB in Driver and DSP: */
		Params[0] =
		    AUDCTRL_GetTelephonySpkrVolume(AUDIO_GAIN_FORMAT_mB);
		Params[0] = Params[0] / 100;	/* dB */
		Params[0] += AudParmP()[mode].voice_volume_max;
		/* Range 0~36 dB shown in PCG */
		/*
		pVolume = pChip->streamCtl[
		CTL_STREAM_PANEL_VOICECALL -1].ctlLine[mode].iVolume;
		Params[0] = pVolume[0];
		*/
		aTrace(LOG_AUDIO_DRIVER,
				"%s pVolume[0] %ld\n", __func__, Params[0]);
		return 0;

	case 7:		/* at*maudvol=7,x    Range 0~36 dB in PCG */
		mode = AUDCTRL_GetAudioMode();
		/*
		   mode = pChip->streamCtl[
		   CTL_STREAM_PANEL_VOICECALL-1].iLineSelect[1];
		 */
		pVolume =
		    pChip->streamCtl[CTL_STREAM_PANEL_VOICECALL -
				     1].ctlLine[mode].iVolume;
		pVolume[0] = Params[1];
		pVolume[1] = Params[1];
		vol = Params[1];
		vol -= AudParmP()[mode].voice_volume_max;
		/* Range -36 ~ 0 dB in DSP */
		AUDCTRL_SetTelephonySpkrVolume(AUDIO_SINK_UNDEFINED,
					       (vol * 100),
					       AUDIO_GAIN_FORMAT_mB);

		aTrace(LOG_AUDIO_DRIVER, "%s pVolume[0] %d mode=%d vol %d\n",
				__func__, pVolume[0], mode, vol);
		return 0;

	default:
		aWarn("%s Unsupported cmd %ld\n", __func__,
				Params[0]);
		break;
	}
	return -1;
}
/*****************************************************************************
*
*  Function Name: hawaii_hw_free
*
*  Description: Dissable clocks, if both playback and capture is finished
*
*****************************************************************************/
static int hawaii_hw_free(struct snd_pcm_substream *substream)
{
    struct snd_soc_pcm_runtime *rtd = substream->private_data;
    struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
    struct caph_i2s *i2s = snd_soc_dai_get_drvdata(cpu_dai);

    if (i2s->fmTxRunning == 0 && i2s->fmRxRunning == 0 && useclk) {
        ssp_ControlHWClock(FALSE);
        csl_caph_ControlHWClock(FALSE);
        useclk = FALSE;
    }
    return 0;
}
/*****************************************************************************
*
*  Function Name: hawaii_hw_params
*
*  Description: Enable clocks
*
*****************************************************************************/
static int hawaii_hw_params(struct snd_pcm_substream *substream,
                            struct snd_pcm_hw_params *params)
{
    struct snd_soc_pcm_runtime *rtd = substream->private_data;
    struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
    struct caph_i2s *i2s = snd_soc_dai_get_drvdata(cpu_dai);

    if (i2s->fmTxRunning == 0 && i2s->fmRxRunning == 0 && !useclk) {
        csl_caph_ControlHWClock(TRUE);
        ssp_ControlHWClock(TRUE);
        useclk = TRUE;
    }
    return 0;
}
Exemple #4
0
void HandleAudioEventrespCb(RPC_Msg_t *pMsg,
			    ResultDataBufHandle_t dataBufHandle,
			    UInt32 userContextData)
{
	if (MSG_AUDIO_CALL_STATUS_IND == pMsg->msgId) {
		UInt32 *codecID = NULL;
		codecID = (UInt32 *) pMsg->dataBuf;

		aTrace(LOG_AUDIO_DRIVER,
				"HandleAudioEventrespCb : codecid=0x%lx \r\n",
				(*codecID));

		if ((*codecID) != 0)	/* Make sure codeid is not 0 */
			AUDDRV_Telephone_RequestRateChange((UInt8) (*codecID));
	}

	if (MSG_AUDIO_START_TUNING_IND == pMsg->msgId) {
		unsigned int addr = *((int *) pMsg->dataBuf);

		aTrace(LOG_AUDIO_DRIVER,
			"HandleAudioEventrespCb : start tuning addr=0x%x\r\n",
			addr);
		AUDDRV_SetTuningFlag(1);
		csl_caph_ControlHWClock(TRUE);
		csl_ControlHWClock_156m(TRUE);
		csl_ControlHWClock_2p4m(TRUE);
	}

	if (MSG_AUDIO_STOP_TUNING_IND == pMsg->msgId) {
		unsigned int addr = *((int *) pMsg->dataBuf);

		aTrace(LOG_AUDIO_DRIVER,
			"HandleAudioEventrespCb : stop tuning addr=0x%x\r\n",
			addr);
		AUDDRV_SetTuningFlag(0);
		if (csl_caph_hwctrl_allPathsDisabled() == TRUE) {
			csl_caph_ControlHWClock(FALSE);
			csl_ControlHWClock_156m(FALSE);
			csl_ControlHWClock_2p4m(FALSE);
		}
	}

	if (MSG_AUDIO_TUNING_SETPARM_IND == pMsg->msgId) {
		struct AudioTuningParamInd_st paramInd =
			*((struct AudioTuningParamInd_st *) pMsg->dataBuf);

		aTrace(LOG_AUDIO_DRIVER,
			"HandleAudioEventrespCb : mode %d, tune param=%d value=%d\r\n",
			(int)paramInd.audioModeApp,
			(int)paramInd.audioParamType,
			*((UInt16 *)&paramInd.param[0]));
	}

	if ((MSG_AUDIO_CTRL_GENERIC_RSP == pMsg->msgId) ||
		(MSG_AUDIO_CTRL_DSP_RSP == pMsg->msgId) ||
		(MSG_AUDIO_COMP_FILTER_RSP == pMsg->msgId)) {
		aTrace(LOG_AUDIO_DRIVER,
			"HandleAudioEventrespCb GENERIC_DSP_RSP: tid=%ld\n",
				pMsg->tid);
	}
	if (dataBufHandle)
		RPC_SYSFreeResultDataBuffer(dataBufHandle);
	else
		aTrace(LOG_AUDIO_DRIVER,
			"HandleAudioEventrespCb : dataBufHandle is NULL \r\n");
}
int AtMaudMode(brcm_alsa_chip_t *pChip, Int32 ParamCount, Int32 *Params)
{
	AUDIO_SOURCE_Enum_t mic = AUDIO_SOURCE_ANALOG_MAIN;
	AUDIO_SINK_Enum_t spk = AUDIO_SINK_HANDSET;
	AudioMode_t mode = AUDIO_SINK_HANDSET;
	AudioApp_t app = AUDIO_APP_VOICE_CALL, currapp;
	int rtn = 0;		/* 0 means Ok */
	static UInt8 loopback_status = 0, loopback_input = 0, loopback_output =
	    0, sidetone_mode = 0;
	static UInt8 loopback_api_input, loopback_api_output;
	Int32 pCurSel[2];

	aTrace(LOG_AUDIO_DRIVER, "%s P1-P6=%ld %ld %ld %ld %ld %ld cnt=%ld\n",
			__func__, Params[0], Params[1], Params[2],
			Params[3], Params[4], Params[5], ParamCount);

	csl_caph_ControlHWClock(TRUE);

	switch (Params[0]) {

	case 0:		/* at*maudmode 0 */
		break;

	case 1:		/* at*maudmode 1 mode */
		break;

	case 8:		/* at*maudmode=8 */
		Params[0] = loopback_status;
		aTrace(LOG_AUDIO_DRIVER,
				" %s loopback status is %d\n", __func__,
				loopback_status);
		DEBUG(" %s loopback status is %d\n", __func__, loopback_status);
		break;

	case 9:		/* at*maudmode=9,x.  x = 0 --> disable; x =1 enable */
		loopback_status = Params[1];
		if (loopback_status > 1)
			loopback_status = 1;

		aTrace(LOG_AUDIO_DRIVER,
				" %s set loopback status %d (1:ena 0:dis)\n",
				__func__, loopback_status);

		break;

	case 10:		/* at*maudmode=10  --> get loopback path */
		/* Per PCG request
		   if (loopback_output > 2) loopback_output = 2; */

		Params[0] = loopback_input;
		Params[1] = loopback_output;
		aTrace(LOG_AUDIO_DRIVER,
				"%s loopback path is from src %d to sink %d\n",
				__func__, loopback_input, loopback_output);
		break;

		/* at*maudmode=11,x,y  --> set loopback path. */
		/* mic: 0 = default mic, 1 = main mic */
		/* spk: 0 = handset, 1 = headset, 2 = loud speaker */
	case 11:
		loopback_input = loopback_api_input = Params[1];
		loopback_output = loopback_api_output = Params[2];
		sidetone_mode = Params[3];

		if (((loopback_input > 6) && (loopback_input != 11)) ||
		    ((loopback_output > 2) && (loopback_output != 9) &&
		     (loopback_output != 4))) {
			aError(
					"%s srr/sink exceeds its range.\n",
					__func__);
			rtn = -1;
			break;
		}
		if (loopback_output == 2)	/* use IHF */
			loopback_api_output = 4;
		if (loopback_input == 0)	/* default mic: use main mic */
			loopback_api_input = 1;

		loopback_status = 1;
		/* enable the HW loopback without DSP. */
		AUDCTRL_SetAudioLoopback(TRUE, loopback_api_input,
					 loopback_api_output, sidetone_mode);

		aTrace(LOG_AUDIO_DRIVER,
				"%s ena lpback: src %d sink %d sidetone %d\n",
				__func__, loopback_api_input,
			loopback_api_output, sidetone_mode);
		break;

	case 12:		/* at*maudmode=12  --> disable loopback path */
		loopback_status = 0;
		AUDCTRL_SetAudioLoopback(FALSE, loopback_api_input,
			loopback_api_output, sidetone_mode);
		aTrace(LOG_AUDIO_DRIVER,
				"%s dis lpback: src %d sink %d sidetone %d\n",
				__func__, loopback_api_input,
			loopback_api_output, sidetone_mode);
		break;

	case 13:		/* at*maudmode=13  --> Get call ID */
		aError(
				"%s get call ID is not supported\n", __func__);
		rtn = -1;
		break;
		/* at*maudmode=14  --> read current mode and app */
	case 14:
		Params[0] = AUDCTRL_GetAudioApp();
		Params[1] = AUDCTRL_GetAudioMode();
		aTrace(LOG_AUDIO_DRIVER, "%s app %ld mode %ld\n",
				__func__, Params[0], Params[1]);
		break;
		/* at*maudmode=15  --> set current mode and app */
	case 15:
		app = Params[1];
		mode = Params[2];
		AUDCTRL_GetSrcSinkByMode(mode, &mic, &spk);
		pCurSel[0] =
		    pChip->streamCtl[CTL_STREAM_PANEL_VOICECALL -
				     1].iLineSelect[0];
		/* save current setting */
		pCurSel[1] = pChip->
		    streamCtl[CTL_STREAM_PANEL_VOICECALL - 1].iLineSelect[1];

		/* Update 'VC-SEL' -- */
		pChip->streamCtl[CTL_STREAM_PANEL_VOICECALL - 1].
		    iLineSelect[0] = mic;
		pChip->streamCtl[CTL_STREAM_PANEL_VOICECALL - 1].
		    iLineSelect[1] = spk;
#ifdef CONFIG_BCM_MODEM
		RPC_SetProperty(RPC_PROP_AUDIO_MODE,
			(UInt32)(app * AUDIO_MODE_NUMBER + mode));
#endif
		/* for PCG to set new app */
		currapp = AUDCTRL_GetAudioApp();
		if (currapp != app) {
			/* Remove the current app
			before setting the new app */
			AUDCTRL_RemoveAudioApp(currapp);
			AUDCTRL_SaveAudioApp(app);
		}

		if (app == AUDIO_APP_VOICE_CALL
		    || app == AUDIO_APP_VOICE_CALL_WB
		    || app == AUDIO_APP_VT_CALL
		    || app == AUDIO_APP_VT_CALL_WB) {
			AUDCTRL_SetTelephonyMicSpkr(mic, spk, false);
			AUDCTRL_SetAudioMode(mode, app);
		} else if (app == AUDIO_APP_MUSIC) {
			if (AUDCTRL_InVoiceCall() == FALSE) {
				AUDCTRL_SwitchPlaySpk_forTuning(mode);
				AUDCTRL_SaveAudioMode(mode);
				AUDCTRL_SaveAudioApp(app);
			}
		} else {
			/* Handling all other apps cases */
			/* For PCG to set new Mode */
			AUDCTRL_SetAudioMode(mode, app);
		}

		aTrace(LOG_AUDIO_DRIVER, "%s mic %d spk %d mode %ld app %ld\n",
			__func__, mic, spk, Params[2],
			Params[1]);
		break;

	/* read back AUDIO_APP_NUMBER and AUDIO_APP_MM_NUMBER */
	/* needs to match to enum AudioTuneCommand_t in at_audtune.c */
	case 16:
		Params[0] = AUDIO_APP_NUMBER;
		Params[1] = AUDIO_APP_MM_NUMBER;
		break;

	case 99:		/* at*maudmode=99  --> stop tuning */
		break;

		/* at*maudmode=100  --> set external audio
		   amplifer gain in PMU */
		/* PCG and loadcal currently use Q13p2 gain format */
	case 100:
		{
		short gain;

		gain = (short)Params[3];

		if (Params[1] == 3) {
			aTrace(LOG_AUDIO_DRIVER, "Params[2] = %d, "
				"Params[3] %d, audio mode %d\n",
				(int)Params[2], (int)Params[3],
				AUDCTRL_GetAudioMode());
			if ((Params[2] == PARAM_PMU_SPEAKER_PGA_LEFT_CHANNEL)
			|| (Params[2] == PARAM_PMU_SPEAKER_PGA_RIGHT_CHANNEL)) {
				if (AUDCTRL_GetAudioMode() == AUDIO_MODE_HEADSET
					|| AUDCTRL_GetAudioMode() ==
					AUDIO_MODE_TTY) {
						aTrace(LOG_AUDIO_DRIVER,
						"%s ext headset "
						"speaker gain = %d\n",
						__func__, gain);

					if (Params[2] ==
					PARAM_PMU_SPEAKER_PGA_LEFT_CHANNEL)
						extern_hs_set_gain(gain*25,
						AUDIO_HS_LEFT);
					else if (Params[2] ==
					PARAM_PMU_SPEAKER_PGA_RIGHT_CHANNEL)
						extern_hs_set_gain(gain*25,
						AUDIO_HS_RIGHT);
				} else if (AUDCTRL_GetAudioMode() ==
					AUDIO_MODE_SPEAKERPHONE) {
					aTrace(LOG_AUDIO_DRIVER, "%s ext IHF "
						"speaker gain = %d\n",
						__func__, gain);
					extern_ihf_set_gain(gain*25);
				}

			}
			/* Params[2] checking */
			aTrace(LOG_AUDIO_DRIVER,
				    "Params[2] = %d, Params[3] %d,"
				     " audio mode %d\n",
				     (int)Params[2], (int)Params[3],
				     AUDCTRL_GetAudioMode());

			if (Params[2] == PARAM_PMU_HIGH_GAIN_MODE_FLAG) {
				if (AUDCTRL_GetAudioMode() ==
					AUDIO_MODE_SPEAKERPHONE) {
					aTrace(LOG_AUDIO_DRIVER,
						"ext IHF high gain "
						"mode = %d\n",
						(int)Params[3]);
					extern_ihf_en_hi_gain_mode(
						(int)Params[3]);
				} else if (AUDCTRL_GetAudioMode() ==
					AUDIO_MODE_HEADSET ||
					AUDCTRL_GetAudioMode() ==
					AUDIO_MODE_TTY) {
					aTrace(LOG_AUDIO_DRIVER,
						"ext HS high gain "
						"mode = %d\n",
						(int)Params[3]);
					extern_hs_en_hi_gain_mode(
						(int)Params[3]);
				}
			}
		}	/* if (Params[1] == 3) */
		}		/* case 100 */

		break;

	default:
		aWarn("%s Unsupported cmd %ld\n", __func__,
				Params[0]);
		rtn = -1;
		break;
	}

	return rtn;
}
int AtMaudTst(brcm_alsa_chip_t *pChip, Int32 ParamCount, Int32 *Params)
{
	aTrace(LOG_AUDIO_DRIVER, "%s P1-P6=%ld %ld %ld %ld %ld %ld cnt=%ld.\n",
			__func__, Params[0], Params[1], Params[2],
			Params[3], Params[4], Params[5], ParamCount);

	/* test command 110/101 is to control the HW clock.
	   In this case, dont enable the clock */
	if (Params[0] != 110 && Params[0] != 101)
		csl_caph_ControlHWClock(TRUE);

	switch (Params[0]) {
	case 50:	/* set audio debug level */
		gAudioDebugLevel = Params[1];
		break;

	case 51:	/* print audio debug level */
		pr_info("audio debug level is 0x%x\n", gAudioDebugLevel);
		break;

	case 98:
#ifdef CONFIG_BCM_MODEM
			DJB_GetStatistics();
#endif
		break;

	case 99:
		if (voip_running) {
			AUDTST_VoIP_Stop();
			voip_running = FALSE;
		}
		break;

	case 100:
		if (!voip_running) {
			/* Params[1] - Mic
			   Params[2] - speaker
			   Params[3] - Delay (msec)
			   Params[4] - Codectype:
			   Params[5] - Codec bit rate: */

			AUDTST_VoIP(Params[1],
				    Params[2], Params[3], Params[4], Params[5]);
			voip_running = TRUE;
		}
		break;

	case 110:
		if (Params[1] == 1) {
			aTrace(LOG_AUDIO_DRIVER, "Enable CAPH clock\n");
			csl_caph_ControlHWClock(TRUE);
		} else if (Params[1] == 0) {
			aTrace(LOG_AUDIO_DRIVER, "Disable CAPH clock\n");
			csl_caph_ControlHWClock(FALSE);
		}
		break;

	case 500:		/*at*maudtst=500, */
		{
			char *address;
			unsigned int value = 0, gain1 = 0, gain2 = 0,
			    gain3 = 0, gain4 = 0;
			unsigned int index;

#define CHAL_CAPH_SRCM_MAX_FIFOS      15
#define SRCMIXER_A	SRCMIXER_SRC_M1D1_CH1M_GAIN_CTRL_OFFSET
#define SRCMIXER_B	SRCMIXER_SRC_M1D0_CH1M_GAIN_CTRL_OFFSET
/* 4 bytes */
#define SRCMIXER_MIX_CH_GAIN_CTRL_OFFSET  ((SRCMIXER_A - SRCMIXER_B)/4)

			address = (char *)ioremap_nocache((UInt32)
							  (AUDIOH_BASE_ADDR +
				   AUDIOH_AUDIORX_VRX1_OFFSET),
							  sizeof(UInt32));
			if (!address) {
				pr_err(" address ioremap failed\n");
				return 0;
			}

			value = ioread32(address);

			iounmap(address);

			gain1 = value;
			gain1 &=
			    (AUDIOH_AUDIORX_VRX1_AUDIORX_VRX_GAINCTRL_MASK);
			gain1 >>=
			    (AUDIOH_AUDIORX_VRX1_AUDIORX_VRX_GAINCTRL_SHIFT);

			pr_err("AUDIOH_AUDIORX_VRX1=0x%x, AMIC_PGA=0x%x\n",
			       value, gain1);

			address = (char *)ioremap_nocache((UInt32)
							  (AUDIOH_BASE_ADDR +
					AUDIOH_VIN_FILTER_CTRL_OFFSET),
							  sizeof(UInt32));
			if (!address) {
				pr_err(" address ioremap failed\n");
				return 0;
			}

			value = ioread32(address);

			iounmap(address);

			gain1 = value;
			gain1 &=
			    (AUDIOH_VIN_FILTER_CTRL_DMIC1_CIC_BIT_SEL_MASK);
			gain1 >>=
			    (AUDIOH_VIN_FILTER_CTRL_DMIC1_CIC_BIT_SEL_SHIFT);

			gain2 = value;
			gain2 &=
			    (AUDIOH_VIN_FILTER_CTRL_DMIC1_CIC_FINE_SCL_MASK);
			gain2 >>=
			    (AUDIOH_VIN_FILTER_CTRL_DMIC1_CIC_FINE_SCL_SHIFT);

			gain3 = value;
			gain3 &=
			    (AUDIOH_VIN_FILTER_CTRL_DMIC2_CIC_BIT_SEL_MASK);
			gain3 >>=
			    (AUDIOH_VIN_FILTER_CTRL_DMIC2_CIC_BIT_SEL_SHIFT);

			gain4 = value;
			gain4 &=
			    (AUDIOH_VIN_FILTER_CTRL_DMIC2_CIC_FINE_SCL_MASK);
			gain4 >>=
			    (AUDIOH_VIN_FILTER_CTRL_DMIC2_CIC_FINE_SCL_SHIFT);

			pr_err(" AUDIOH_VIN_FILTER_CTRL=0x%x\n", value);
			pr_err("DMIC1_CIC_BIT_SEL=0x%x, DMIC1_CIC_FINE=0x%x\n",
			       gain1, gain2);
			pr_err("DMIC2_CIC_BIT_SEL=0x%x, "
			       "DMIC2_CIC_FINE_SCL=0x%x\n", gain3, gain4);

			address = (char *)ioremap_nocache((UInt32)
							  (AUDIOH_BASE_ADDR +
					AUDIOH_NVIN_FILTER_CTRL_OFFSET),
							  sizeof(UInt32));
			if (!address) {
				pr_err(" address ioremap failed\n");
				return 0;
			}

			value = ioread32(address);

			iounmap(address);

			gain1 = value;
			gain1 &=
			    (AUDIOH_NVIN_FILTER_CTRL_DMIC3_CIC_BIT_SEL_MASK);
			gain1 >>=
			    (AUDIOH_NVIN_FILTER_CTRL_DMIC3_CIC_BIT_SEL_SHIFT);

			gain2 = value;
			gain2 &=
			    (AUDIOH_NVIN_FILTER_CTRL_DMIC3_CIC_FINE_SCL_MASK);
			gain2 >>=
			    (AUDIOH_NVIN_FILTER_CTRL_DMIC3_CIC_FINE_SCL_SHIFT);

			gain3 = value;
			gain3 &=
			    (AUDIOH_NVIN_FILTER_CTRL_DMIC4_CIC_BIT_SEL_MASK);
			gain3 >>=
			    (AUDIOH_NVIN_FILTER_CTRL_DMIC4_CIC_BIT_SEL_SHIFT);

			gain4 = value;
			gain4 &=
			    (AUDIOH_NVIN_FILTER_CTRL_DMIC4_CIC_FINE_SCL_MASK);
			gain4 >>=
			    (AUDIOH_NVIN_FILTER_CTRL_DMIC4_CIC_FINE_SCL_SHIFT);

			pr_err(" AUDIOH_VIN_FILTER_CTRL=0x%x\n", value);
			pr_err("DMIC3_CIC_BIT_SEL=0x%x, DMIC3_CIC_FINE=0x%x\n",
			       gain1, gain2);
			pr_err("DMIC4_CIC_BIT_SEL=0x%x, "
			       "DMIC4_CIC_FINE_SCL=0x%x\n", gain3, gain4);

			address = (char *)
			    ioremap_nocache((UInt32)
					    (SRCMIXER_BASE_ADDR +
				SRCMIXER_SRC_M1D0_CH1M_GAIN_CTRL_OFFSET),
					    sizeof(UInt32));
			if (!address) {
				pr_err(" address ioremap failed\n");
				return 0;
			}
			value = ioread32(address);
			iounmap(address);

			gain1 = value;
			gain1 &=
	(SRCMIXER_SRC_M1D0_CH1M_GAIN_CTRL_SRC_M1D0_CH1M_GAIN_RAMPSTEP_MASK);
			gain1 >>=
	(SRCMIXER_SRC_M1D0_CH1M_GAIN_CTRL_SRC_M1D0_CH1M_GAIN_RAMPSTEP_SHIFT);

			gain2 = value;
			gain2 &=
	(SRCMIXER_SRC_M1D0_CH1M_GAIN_CTRL_SRC_M1D0_CH1M_TARGET_GAIN_MASK);
			gain2 >>=
	(SRCMIXER_SRC_M1D0_CH1M_GAIN_CTRL_SRC_M1D0_CH1M_TARGET_GAIN_SHIFT);

			pr_err("MIXER 1 D0, channel 1, Target_Gain"
			       "=0x%x, Gain_RampStep=0x%x\n", gain2, gain1);

			address = (char *)ioremap_nocache((UInt32)
							  (SRCMIXER_BASE_ADDR +
				   SRCMIXER_SRC_M1D0_CH2M_GAIN_CTRL_OFFSET),
							  sizeof(UInt32));
			value = ioread32(address);
			iounmap(address);

			gain1 = value;
			gain1 &=
	(SRCMIXER_SRC_M1D0_CH2M_GAIN_CTRL_SRC_M1D0_CH2M_GAIN_RAMPSTEP_MASK);
			gain1 >>=
	(SRCMIXER_SRC_M1D0_CH2M_GAIN_CTRL_SRC_M1D0_CH2M_GAIN_RAMPSTEP_SHIFT);

			gain2 = value;
			gain2 &=
	(SRCMIXER_SRC_M1D0_CH2M_GAIN_CTRL_SRC_M1D0_CH2M_TARGET_GAIN_MASK);
			gain2 >>=
	(SRCMIXER_SRC_M1D0_CH2M_GAIN_CTRL_SRC_M1D0_CH2M_TARGET_GAIN_SHIFT);

			pr_err("MIXER 1 D0, channel 2, Target_Gain"
			       "=0x%x, Gain_RampStep=0x%x\n", gain2, gain1);

			address = (char *)ioremap_nocache((UInt32)
							  (SRCMIXER_BASE_ADDR +
				   SRCMIXER_SRC_M1D0_CH3M_GAIN_CTRL_OFFSET),
							  sizeof(UInt32));
			value = ioread32(address);
			iounmap(address);

			gain1 = value;
			gain1 &=
	(SRCMIXER_SRC_M1D0_CH2M_GAIN_CTRL_SRC_M1D0_CH2M_GAIN_RAMPSTEP_MASK);
			gain1 >>=
	(SRCMIXER_SRC_M1D0_CH2M_GAIN_CTRL_SRC_M1D0_CH2M_GAIN_RAMPSTEP_SHIFT);

			gain2 = value;
			gain2 &=
	(SRCMIXER_SRC_M1D0_CH2M_GAIN_CTRL_SRC_M1D0_CH2M_TARGET_GAIN_MASK);
			gain2 >>=
	(SRCMIXER_SRC_M1D0_CH2M_GAIN_CTRL_SRC_M1D0_CH2M_TARGET_GAIN_SHIFT);

			pr_err("MIXER 1 D0, channel 3, Target_Gain"
			       "=0x%x, Gain_RampStep=0x%x\n", gain2, gain1);

			address = (char *)ioremap_nocache((UInt32)
							  (SRCMIXER_BASE_ADDR +
				   SRCMIXER_SRC_M1D0_CH4M_GAIN_CTRL_OFFSET),
							  sizeof(UInt32));
			value = ioread32(address);
			iounmap(address);

			gain1 = value;
			gain1 &=
	(SRCMIXER_SRC_M1D0_CH2M_GAIN_CTRL_SRC_M1D0_CH2M_GAIN_RAMPSTEP_MASK);
			gain1 >>=
	(SRCMIXER_SRC_M1D0_CH2M_GAIN_CTRL_SRC_M1D0_CH2M_GAIN_RAMPSTEP_SHIFT);

			gain2 = value;
			gain2 &=
	(SRCMIXER_SRC_M1D0_CH2M_GAIN_CTRL_SRC_M1D0_CH2M_TARGET_GAIN_MASK);
			gain2 >>=
	(SRCMIXER_SRC_M1D0_CH2M_GAIN_CTRL_SRC_M1D0_CH2M_TARGET_GAIN_SHIFT);

			pr_err("MIXER 1 D0, channel 4, Target_Gain"
			       "=0x%x, Gain_RampStep=0x%x\n", gain2, gain1);

			address = (char *)ioremap_nocache((UInt32)
							  (SRCMIXER_BASE_ADDR +
				   SRCMIXER_SRC_M1D0_CH5L_GAIN_CTRL_OFFSET),
							  sizeof(UInt32));
			value = ioread32(address);
			iounmap(address);

			gain1 = value;
			gain1 &=
	(SRCMIXER_SRC_M1D0_CH2M_GAIN_CTRL_SRC_M1D0_CH2M_GAIN_RAMPSTEP_MASK);
			gain1 >>=
	(SRCMIXER_SRC_M1D0_CH2M_GAIN_CTRL_SRC_M1D0_CH2M_GAIN_RAMPSTEP_SHIFT);

			gain2 = value;
			gain2 &=
	(SRCMIXER_SRC_M1D0_CH2M_GAIN_CTRL_SRC_M1D0_CH2M_TARGET_GAIN_MASK);
			gain2 >>=
	(SRCMIXER_SRC_M1D0_CH2M_GAIN_CTRL_SRC_M1D0_CH2M_TARGET_GAIN_SHIFT);

			pr_err("MIXER 1 D0, channel 5 left, "
			       "Target_Gain=0x%x, Gain_RampStep=0x%x\n",
			       gain2, gain1);

			address = (char *)ioremap_nocache((UInt32)
							  (SRCMIXER_BASE_ADDR +
				   SRCMIXER_SRC_M1D0_CH5R_GAIN_CTRL_OFFSET),
							  sizeof(UInt32));
			value = ioread32(address);
			iounmap(address);

			gain1 = value;
			gain1 &=
	(SRCMIXER_SRC_M1D0_CH2M_GAIN_CTRL_SRC_M1D0_CH2M_GAIN_RAMPSTEP_MASK);
			gain1 >>=
	(SRCMIXER_SRC_M1D0_CH2M_GAIN_CTRL_SRC_M1D0_CH2M_GAIN_RAMPSTEP_SHIFT);

			gain2 = value;
			gain2 &=
	(SRCMIXER_SRC_M1D0_CH2M_GAIN_CTRL_SRC_M1D0_CH2M_TARGET_GAIN_MASK);
			gain2 >>=
	(SRCMIXER_SRC_M1D0_CH2M_GAIN_CTRL_SRC_M1D0_CH2M_TARGET_GAIN_SHIFT);

			pr_err("MIXER 1 D0, channel 5 right, "
			       "Target_Gain=0x%x, Gain_RampStep=0x%x\n",
			       gain2, gain1);

			address = (char *)ioremap_nocache((UInt32)
							  (SRCMIXER_BASE_ADDR +
				   SRCMIXER_SRC_M1D0_CH6L_GAIN_CTRL_OFFSET),
							  sizeof(UInt32));
			value = ioread32(address);
			iounmap(address);

			gain1 = value;
			gain1 &=
	(SRCMIXER_SRC_M1D0_CH2M_GAIN_CTRL_SRC_M1D0_CH2M_GAIN_RAMPSTEP_MASK);
			gain1 >>=
	(SRCMIXER_SRC_M1D0_CH2M_GAIN_CTRL_SRC_M1D0_CH2M_GAIN_RAMPSTEP_SHIFT);

			gain2 = value;
			gain2 &=
	(SRCMIXER_SRC_M1D0_CH2M_GAIN_CTRL_SRC_M1D0_CH2M_TARGET_GAIN_MASK);
			gain2 >>=
	(SRCMIXER_SRC_M1D0_CH2M_GAIN_CTRL_SRC_M1D0_CH2M_TARGET_GAIN_SHIFT);

			pr_err("MIXER 1 D0, channel 6 left, "
			       "Target_Gain=0x%x, Gain_RampStep=0x%x\n",
			       gain2, gain1);

			address = (char *)ioremap_nocache((UInt32)
							  (SRCMIXER_BASE_ADDR +
			   SRCMIXER_SRC_M1D0_CH6R_GAIN_CTRL_OFFSET),
							  sizeof(UInt32));
			value = ioread32(address);
			iounmap(address);

			gain1 = value;
			gain1 &=
	(SRCMIXER_SRC_M1D0_CH2M_GAIN_CTRL_SRC_M1D0_CH2M_GAIN_RAMPSTEP_MASK);
			gain1 >>=
	(SRCMIXER_SRC_M1D0_CH2M_GAIN_CTRL_SRC_M1D0_CH2M_GAIN_RAMPSTEP_SHIFT);

			gain2 = value;
			gain2 &=
	(SRCMIXER_SRC_M1D0_CH2M_GAIN_CTRL_SRC_M1D0_CH2M_TARGET_GAIN_MASK);
			gain2 >>=
	(SRCMIXER_SRC_M1D0_CH2M_GAIN_CTRL_SRC_M1D0_CH2M_TARGET_GAIN_SHIFT);

			pr_err("MIXER 1 D0, channel 6 right, "
			       "Target_Gain=0x%x, Gain_RampStep=0x%x\n",
			       gain2, gain1);

			address = (char *)ioremap_nocache((UInt32)
							  (SRCMIXER_BASE_ADDR +
			   SRCMIXER_SRC_M1D0_CH7L_GAIN_CTRL_OFFSET),
							  sizeof(UInt32));
			value = ioread32(address);
			iounmap(address);

			gain1 = value;
			gain1 &=
	(SRCMIXER_SRC_M1D0_CH2M_GAIN_CTRL_SRC_M1D0_CH2M_GAIN_RAMPSTEP_MASK);
			gain1 >>=
	(SRCMIXER_SRC_M1D0_CH2M_GAIN_CTRL_SRC_M1D0_CH2M_GAIN_RAMPSTEP_SHIFT);

			gain2 = value;
			gain2 &=
	(SRCMIXER_SRC_M1D0_CH2M_GAIN_CTRL_SRC_M1D0_CH2M_TARGET_GAIN_MASK);
			gain2 >>=
	(SRCMIXER_SRC_M1D0_CH2M_GAIN_CTRL_SRC_M1D0_CH2M_TARGET_GAIN_SHIFT);

			pr_err("MIXER 1 D0, channel 7 left, "
			       "Target_Gain=0x%x, Gain_RampStep=0x%x\n",
			       gain2, gain1);

			address = (char *)ioremap_nocache((UInt32)
							  (SRCMIXER_BASE_ADDR +
			   SRCMIXER_SRC_M1D0_CH7R_GAIN_CTRL_OFFSET),
							  sizeof(UInt32));
			value = ioread32(address);
			iounmap(address);

			gain1 = value;
			gain1 &=
	(SRCMIXER_SRC_M1D0_CH2M_GAIN_CTRL_SRC_M1D0_CH2M_GAIN_RAMPSTEP_MASK);
			gain1 >>=
	(SRCMIXER_SRC_M1D0_CH2M_GAIN_CTRL_SRC_M1D0_CH2M_GAIN_RAMPSTEP_SHIFT);

			gain2 = value;
			gain2 &=
	(SRCMIXER_SRC_M1D0_CH2M_GAIN_CTRL_SRC_M1D0_CH2M_TARGET_GAIN_MASK);
			gain2 >>=
	(SRCMIXER_SRC_M1D0_CH2M_GAIN_CTRL_SRC_M1D0_CH2M_TARGET_GAIN_SHIFT);

			pr_err("MIXER 1 D0, channel 7 right, "
			       "Target_Gain=0x%x, Gain_RampStep=0x%x\n",
			       gain2, gain1);

		/********/
			address = (char *)ioremap_nocache((UInt32)
							  (SRCMIXER_BASE_ADDR +
			   SRCMIXER_SRC_M1D1_CH1M_GAIN_CTRL_OFFSET),
							  sizeof(UInt32));
			value = ioread32(address);
			iounmap(address);

			gain1 = value;
			gain1 &=
	(SRCMIXER_SRC_M1D0_CH1M_GAIN_CTRL_SRC_M1D0_CH1M_GAIN_RAMPSTEP_MASK);
			gain1 >>=
	(SRCMIXER_SRC_M1D0_CH1M_GAIN_CTRL_SRC_M1D0_CH1M_GAIN_RAMPSTEP_SHIFT);

			gain2 = value;
			gain2 &=
	(SRCMIXER_SRC_M1D0_CH1M_GAIN_CTRL_SRC_M1D0_CH1M_TARGET_GAIN_MASK);
			gain2 >>=
	(SRCMIXER_SRC_M1D0_CH1M_GAIN_CTRL_SRC_M1D0_CH1M_TARGET_GAIN_SHIFT);

			pr_err("MIXER 1 D1, channel 1, Target_Gain"
			       "=0x%x, Gain_RampStep=0x%x\n", gain2, gain1);

			address = (char *)ioremap_nocache((UInt32)
							  (SRCMIXER_BASE_ADDR +
			   SRCMIXER_SRC_M1D1_CH2M_GAIN_CTRL_OFFSET),
							  sizeof(UInt32));
			value = ioread32(address);
			iounmap(address);

			gain1 = value;
			gain1 &=
	(SRCMIXER_SRC_M1D0_CH2M_GAIN_CTRL_SRC_M1D0_CH2M_GAIN_RAMPSTEP_MASK);
			gain1 >>=
	(SRCMIXER_SRC_M1D0_CH2M_GAIN_CTRL_SRC_M1D0_CH2M_GAIN_RAMPSTEP_SHIFT);

			gain2 = value;
			gain2 &=
	(SRCMIXER_SRC_M1D0_CH2M_GAIN_CTRL_SRC_M1D0_CH2M_TARGET_GAIN_MASK);
			gain2 >>=
	(SRCMIXER_SRC_M1D0_CH2M_GAIN_CTRL_SRC_M1D0_CH2M_TARGET_GAIN_SHIFT);

			pr_err("MIXER 1 D1, channel 2, Target_Gain"
			       "=0x%x, Gain_RampStep=0x%x\n", gain2, gain1);

			address = (char *)ioremap_nocache((UInt32)
							  (SRCMIXER_BASE_ADDR +
			   SRCMIXER_SRC_M1D1_CH3M_GAIN_CTRL_OFFSET),
							  sizeof(UInt32));
			value = ioread32(address);
			iounmap(address);

			gain1 = value;
			gain1 &=
	(SRCMIXER_SRC_M1D0_CH2M_GAIN_CTRL_SRC_M1D0_CH2M_GAIN_RAMPSTEP_MASK);
			gain1 >>=
	(SRCMIXER_SRC_M1D0_CH2M_GAIN_CTRL_SRC_M1D0_CH2M_GAIN_RAMPSTEP_SHIFT);

			gain2 = value;
			gain2 &=
	(SRCMIXER_SRC_M1D0_CH2M_GAIN_CTRL_SRC_M1D0_CH2M_TARGET_GAIN_MASK);
			gain2 >>=
	(SRCMIXER_SRC_M1D0_CH2M_GAIN_CTRL_SRC_M1D0_CH2M_TARGET_GAIN_SHIFT);

			pr_err("MIXER 1 D1, channel 3, Target_Gain"
			       "=0x%x, Gain_RampStep=0x%x\n", gain2, gain1);

			address = (char *)ioremap_nocache((UInt32)
							  (SRCMIXER_BASE_ADDR +
			   SRCMIXER_SRC_M1D1_CH4M_GAIN_CTRL_OFFSET),
							  sizeof(UInt32));
			value = ioread32(address);
			iounmap(address);

			gain1 = value;
			gain1 &=
	(SRCMIXER_SRC_M1D0_CH2M_GAIN_CTRL_SRC_M1D0_CH2M_GAIN_RAMPSTEP_MASK);
			gain1 >>=
	(SRCMIXER_SRC_M1D0_CH2M_GAIN_CTRL_SRC_M1D0_CH2M_GAIN_RAMPSTEP_SHIFT);

			gain2 = value;
			gain2 &=
	(SRCMIXER_SRC_M1D0_CH2M_GAIN_CTRL_SRC_M1D0_CH2M_TARGET_GAIN_MASK);
			gain2 >>=
	(SRCMIXER_SRC_M1D0_CH2M_GAIN_CTRL_SRC_M1D0_CH2M_TARGET_GAIN_SHIFT);

			pr_err("MIXER 1 D1, channel 4, "
			       "Target_Gain=0x%x, Gain_RampStep=0x%x\n",
			       gain2, gain1);

			address = (char *)ioremap_nocache((UInt32)
							  (SRCMIXER_BASE_ADDR +
			   SRCMIXER_SRC_M1D1_CH5L_GAIN_CTRL_OFFSET),
							  sizeof(UInt32));
			value = ioread32(address);
			iounmap(address);

			gain1 = value;
			gain1 &=
	(SRCMIXER_SRC_M1D0_CH2M_GAIN_CTRL_SRC_M1D0_CH2M_GAIN_RAMPSTEP_MASK);
			gain1 >>=
	(SRCMIXER_SRC_M1D0_CH2M_GAIN_CTRL_SRC_M1D0_CH2M_GAIN_RAMPSTEP_SHIFT);

			gain2 = value;
			gain2 &=
	(SRCMIXER_SRC_M1D0_CH2M_GAIN_CTRL_SRC_M1D0_CH2M_TARGET_GAIN_MASK);
			gain2 >>=
	(SRCMIXER_SRC_M1D0_CH2M_GAIN_CTRL_SRC_M1D0_CH2M_TARGET_GAIN_SHIFT);

			pr_err("MIXER 1 D1, channel 5 left, "
			       "Target_Gain=0x%x, Gain_RampStep=0x%x\n",
			       gain2, gain1);

			address = (char *)ioremap_nocache((UInt32)
							  (SRCMIXER_BASE_ADDR +
				   SRCMIXER_SRC_M1D1_CH5R_GAIN_CTRL_OFFSET),
							  sizeof(UInt32));
			value = ioread32(address);
			iounmap(address);

			gain1 = value;
			gain1 &=
	(SRCMIXER_SRC_M1D0_CH2M_GAIN_CTRL_SRC_M1D0_CH2M_GAIN_RAMPSTEP_MASK);
			gain1 >>=
	(SRCMIXER_SRC_M1D0_CH2M_GAIN_CTRL_SRC_M1D0_CH2M_GAIN_RAMPSTEP_SHIFT);

			gain2 = value;
			gain2 &=
	(SRCMIXER_SRC_M1D0_CH2M_GAIN_CTRL_SRC_M1D0_CH2M_TARGET_GAIN_MASK);
			gain2 >>=
	(SRCMIXER_SRC_M1D0_CH2M_GAIN_CTRL_SRC_M1D0_CH2M_TARGET_GAIN_SHIFT);

			pr_err("MIXER 1 D1, channel 5 right, "
			       "Target_Gain=0x%x, Gain_RampStep=0x%x\n",
			       gain2, gain1);

			address = (char *)ioremap_nocache((UInt32)
							  (SRCMIXER_BASE_ADDR +
			   SRCMIXER_SRC_M1D1_CH6L_GAIN_CTRL_OFFSET),
							  sizeof(UInt32));
			value = ioread32(address);
			iounmap(address);

			gain1 = value;
			gain1 &=
	(SRCMIXER_SRC_M1D0_CH2M_GAIN_CTRL_SRC_M1D0_CH2M_GAIN_RAMPSTEP_MASK);
			gain1 >>=
	(SRCMIXER_SRC_M1D0_CH2M_GAIN_CTRL_SRC_M1D0_CH2M_GAIN_RAMPSTEP_SHIFT);

			gain2 = value;
			gain2 &=
	(SRCMIXER_SRC_M1D0_CH2M_GAIN_CTRL_SRC_M1D0_CH2M_TARGET_GAIN_MASK);
			gain2 >>=
	(SRCMIXER_SRC_M1D0_CH2M_GAIN_CTRL_SRC_M1D0_CH2M_TARGET_GAIN_SHIFT);

			pr_err("MIXER 1 D1, channel 6 left, "
			       "Target_Gain=0x%x, Gain_RampStep=0x%x\n",
			       gain2, gain1);

			address = (char *)ioremap_nocache((UInt32)
							  (SRCMIXER_BASE_ADDR +
			   SRCMIXER_SRC_M1D1_CH6R_GAIN_CTRL_OFFSET),
							  sizeof(UInt32));
			value = ioread32(address);
			iounmap(address);

			gain1 = value;
			gain1 &=
	(SRCMIXER_SRC_M1D0_CH2M_GAIN_CTRL_SRC_M1D0_CH2M_GAIN_RAMPSTEP_MASK);
			gain1 >>=
	(SRCMIXER_SRC_M1D0_CH2M_GAIN_CTRL_SRC_M1D0_CH2M_GAIN_RAMPSTEP_SHIFT);

			gain2 = value;
			gain2 &=
	(SRCMIXER_SRC_M1D0_CH2M_GAIN_CTRL_SRC_M1D0_CH2M_TARGET_GAIN_MASK);
			gain2 >>=
	(SRCMIXER_SRC_M1D0_CH2M_GAIN_CTRL_SRC_M1D0_CH2M_TARGET_GAIN_SHIFT);

			pr_err("MIXER 1 D1, channel 6 right, "
			       "Target_Gain=0x%x, Gain_RampStep=0x%x\n",
			       gain2, gain1);

			address = (char *)ioremap_nocache((UInt32)
							  (SRCMIXER_BASE_ADDR +
			   SRCMIXER_SRC_M1D1_CH7L_GAIN_CTRL_OFFSET),
							  sizeof(UInt32));
			value = ioread32(address);
			iounmap(address);

			gain1 = value;
			gain1 &=
	(SRCMIXER_SRC_M1D0_CH2M_GAIN_CTRL_SRC_M1D0_CH2M_GAIN_RAMPSTEP_MASK);
			gain1 >>=
	(SRCMIXER_SRC_M1D0_CH2M_GAIN_CTRL_SRC_M1D0_CH2M_GAIN_RAMPSTEP_SHIFT);

			gain2 = value;
			gain2 &=
	(SRCMIXER_SRC_M1D0_CH2M_GAIN_CTRL_SRC_M1D0_CH2M_TARGET_GAIN_MASK);
			gain2 >>=
	(SRCMIXER_SRC_M1D0_CH2M_GAIN_CTRL_SRC_M1D0_CH2M_TARGET_GAIN_SHIFT);

			pr_err("MIXER 1 D1, channel 7 left, "
			       "Target_Gain=0x%x, Gain_RampStep=0x%x\n",
			       gain2, gain1);

			address = (char *)ioremap_nocache((UInt32)
							  (SRCMIXER_BASE_ADDR +
				   SRCMIXER_SRC_M1D1_CH7R_GAIN_CTRL_OFFSET),
							  sizeof(UInt32));
			value = ioread32(address);
			iounmap(address);

			gain1 = value;
			gain1 &=
	(SRCMIXER_SRC_M1D0_CH2M_GAIN_CTRL_SRC_M1D0_CH2M_GAIN_RAMPSTEP_MASK);
			gain1 >>=
	(SRCMIXER_SRC_M1D0_CH2M_GAIN_CTRL_SRC_M1D0_CH2M_GAIN_RAMPSTEP_SHIFT);

			gain2 = value;
			gain2 &=
	(SRCMIXER_SRC_M1D0_CH2M_GAIN_CTRL_SRC_M1D0_CH2M_TARGET_GAIN_MASK);

			gain2 >>=
	(SRCMIXER_SRC_M1D0_CH2M_GAIN_CTRL_SRC_M1D0_CH2M_TARGET_GAIN_SHIFT);

			pr_err("MIXER 1 D1, channel 7 right, "
			       "Target_Gain=0x%x, Gain_RampStep=0x%x\n",
			       gain2, gain1);

		/**********/
			for (index = 0x00000160; index <= 0x00000270;
			     index = index + 4) {
				address = (char *)
				    ioremap_nocache((UInt32)
						    (SRCMIXER_BASE_ADDR +
						     index), sizeof(UInt32));
				value = ioread32(address);
				iounmap(address);
				pr_err("SRCMIXER_BASE_ADDR + offset 0x%x, "
				       "value = 0x%x\n", index, value);
			}

		}		/* 500 cmd */
		break;
	case 1000:		/*at*maudtst=1000,addr,len */
		{
			u32 value, index, phy_addr, size;
			char *addr;

			if (Params[2] == 0)
				size = 1;
			else
				size = Params[2] >> 2;

			phy_addr = Params[1];

			if (!phy_addr) {
				pr_err("invalid addr 0\n");
				return 0;
			}

			addr = ioremap_nocache(phy_addr, sizeof(u32));
			if (!addr) {
				pr_err(" addr ioremap failed\n");
				return 0;
			}

			pr_err("Read phy_addr 0x%08x (virtual %p), "
			       "size = 0x%08x bytes\n",
			       phy_addr, addr, size << 2);
			iounmap(addr);

			for (index = 0; index < size; index++) {
				addr = ioremap_nocache(phy_addr, sizeof(u32));
				if (addr) {
					value = ioread32(addr);
					iounmap(addr);
					pr_err("[%08x] = %08x\n", phy_addr,
					       value);
				}
				phy_addr += 4;
			}
		}
		break;

	default:
		aTrace(LOG_AUDIO_DRIVER,
			"%s Not supported command\n", __func__);
		return -1;
	}
	return 0;
}