Exemplo n.º 1
0
/*
 * Set the audio decoder volume for both channels.
 * 0 is lowest volume, MVAUD_NUM_VOLUME_STEPS-1 is the highest volume.
 */
void
cs42l51_vol_set(MV_U8 *vol_list)
{
    MV_AUDIO_CODEC_DEV  codec_params;
    MV_U32  vol_idx;

    codec_params.ADCMode = MV_I2S_MODE;
    codec_params.DACDigitalIFFormat = MV_I2S_UP_TO_24_BIT;
    codec_params.twsiSlave.moreThen256 = MV_FALSE;
    codec_params.twsiSlave.validOffset = MV_TRUE;
    codec_params.twsiSlave.slaveAddr.address = mvBoardA2DTwsiAddrGet();
    codec_params.twsiSlave.slaveAddr.type = mvBoardA2DTwsiAddrTypeGet();

   
    for(vol_idx = 0; vol_idx < 2; vol_idx++)
    {
        /*printk("\tvol_list[%d] = %d.\n",vol_idx,
                                vol_list[vol_idx]);*/

        if(vol_list[vol_idx] >= MVAUD_NUM_VOLUME_STEPS)
		vol_list[vol_idx] = MVAUD_NUM_VOLUME_STEPS -1;

        mvCLAudioCodecRegSet(&codec_params,0x16 + vol_idx,
                             auddec_volume_mapping[vol_list[vol_idx]]);

        /*printk("\tVolume was set to 0x%x.\n",
                                auddec_volume_mapping[vol_list[vol_idx]]);*/
    }

    return;
}
Exemplo n.º 2
0
/*******************************************************************************
* mvSysAudioCodecRegWrite
*
* DESCRIPTION:
*	System interface for writing an Audio codec register.
*
* INPUT:
*       codecHandle: Handle passed by OS glue by which an audio codec is
*		     identified.
*       regOffset:   Offset of codec register to be written. 
*       regData:     Register data to write.
*
* OUTPUT:
*	None.
*
* RETURN:
*	MV_OK on success,
*	MV_ERROR otherwise.
*
*******************************************************************************/
MV_STATUS mvSysAudioCodecRegWrite(MV_VOID *codecHandle, MV_U32  regOffset, MV_U32 regData)
{
	MV_TWSI_SLAVE slave;

	slave.slaveAddr.address = mvBoardA2DTwsiAddrGet(0);
	slave.slaveAddr.type = mvBoardA2DTwsiAddrTypeGet(0);
    	slave.validOffset = MV_TRUE;
    	slave.offset = regOffset;
    	slave.moreThen256 = MV_FALSE;	

	return	mvTwsiWrite(mvBoardA2DTwsiChanNumGet(0), &slave, (MV_U8*)&regData, 1);
}
Exemplo n.º 3
0
/*
 * Initialize the audio decoder.
 */
int
cs42l51_init(void)
{
    MV_AUDIO_CODEC_DEV codec_params;
    unsigned char reg_data;
    

    codec_params.ADCMode = MV_I2S_MODE;
    codec_params.DACDigitalIFFormat = MV_I2S_UP_TO_24_BIT;
    codec_params.twsiSlave.moreThen256 = MV_FALSE;
    codec_params.twsiSlave.validOffset = MV_TRUE;
    codec_params.twsiSlave.slaveAddr.address = mvBoardA2DTwsiAddrGet();
    codec_params.twsiSlave.slaveAddr.type = mvBoardA2DTwsiAddrTypeGet();
    if(mvCLAudioCodecInit(&codec_params) == MV_FALSE)
    {
        printk("Error - Cannot initialize audio decoder.at address =0x%x",
				codec_params.twsiSlave.slaveAddr.address);
        return -1;
    }

    /* Use the signal processor.               */
    mvCLAudioCodecRegSet(&codec_params,0x9,0x40);
    
    /* Unmute PCM-A & PCM-B and set default      */
    mvCLAudioCodecRegSet(&codec_params,0x10,0x60);
    mvCLAudioCodecRegSet(&codec_params,0x11,0x60);

    /* default for AOUTx*/
    mvCLAudioCodecRegSet(&codec_params,0x16,0x05);
    mvCLAudioCodecRegSet(&codec_params,0x17,0x05);

    /* swap channels */
    mvCLAudioCodecRegSet(&codec_params,0x18,0xff);
    if (0) {
	    int i;
	    for (i=1; i<= 0x21 ; i++) {
		    reg_data = mvCLAudioCodecRegGet(&codec_params,i);
		    printk("CLS reg=0x%02x val=0x%02x\n",i,reg_data);
	    }
	    
    }
    
    return 0;
}
Exemplo n.º 4
0
void
cs42l51_vol_get(MV_U8 *vol_list)
{
    MV_AUDIO_CODEC_DEV  codec_params;
    MV_U8   reg_data;
    MV_U32  i;
    MV_U32  vol_idx;

    codec_params.ADCMode = MV_I2S_MODE;
    codec_params.DACDigitalIFFormat = MV_I2S_UP_TO_24_BIT;
    codec_params.twsiSlave.moreThen256 = MV_FALSE;
    codec_params.twsiSlave.validOffset = MV_TRUE;
	codec_params.twsiSlave.slaveAddr.address = mvBoardA2DTwsiAddrGet();
	codec_params.twsiSlave.slaveAddr.type = mvBoardA2DTwsiAddrTypeGet();


    for(vol_idx = 0; vol_idx < 2; vol_idx++)
    {
        reg_data = mvCLAudioCodecRegGet(&codec_params,0x16 + vol_idx);

       /*printk("\tVolume was get: 0x%x.\n",
                                reg_data);*/

        /* Look for the index that mapps to this dB value.  */
        for(i = 0; i < MVAUD_NUM_VOLUME_STEPS; i++)
        {
		if (reg_data == auddec_volume_mapping[i])
			break;
		if (( auddec_volume_mapping[i] > auddec_volume_mapping[MVAUD_NUM_VOLUME_STEPS-1]) 
					&& (reg_data > auddec_volume_mapping[i]) 
					&& (reg_data < auddec_volume_mapping[i+1]))
			break;
		 
        }

        vol_list[vol_idx] = i;
       /*printk("\tvol_list[%d] = %d.\n",vol_idx,
                                vol_list[vol_idx]);*/

    }

    return;
}