⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wm8775.c

📁 sigma_designs的tuner驱动
💻 C
字号:
#include <stdio.h>//Standard 86xx includes#define ALLOW_OS_CODE 1#include "rmdef/rmdef.h"#include "llad/include/gbus.h"//helper includes#include "../helper/helper.h"#include "wm8775.h"static RMstatus wm_wReg(WM8775_CONFIG* pC, RMuint8 reg, RMuint16 data){	RMuint8 b[2];	RMuint32 byteCount = 2;		b[0] = ((reg & 0x1F) << 1) | ((data & 0x0100)?1:0);	b[1] = data & 0xFF;	printf("0x%x 0x%x\n", b[0], b[1]);	return I2Cal_Write( pC->pI2Cal_Context, I2C_WR_ADDR(pC->uI2CAddress), b, &byteCount );}// External API//------------------------------------------------------------------------------RMstatus wm8775_reset(WM8775_CONFIG *pW){	return wm_wReg(pW, 0x17, 0);}RMstatus wm8775_powerDown(WM8775_CONFIG *pW, RMuint8 powerDown){	RMstatus s;		if( powerDown )	{		if( (s = wm_wReg(pW, 0x0D, 0x42)) != RM_OK )		{			DPRINT(("wm8775_power() powerdown ADC and input Mux failed\n"));			return s;		}		// power down ALL		return wm_wReg(pW, 0x0D, 0x43);	}	else	{		// power up ALL		return wm_wReg(pW, 0x0D, 0x00);			}}RMstatus wm8775_mode(WM8775_CONFIG *pW, RMbool masterMode, WM8775_ADCRATE adcRate, RMbool setOversampleFrom128xTo64x){	RMuint16 controlw = 0x0000;		switch( adcRate )	{	case wm8775_adc_256fs:		controlw = 0x02;		break;	case wm8775_adc_384fs:		controlw = 0x03;		break;	case wm8775_adc_512fs:		controlw = 0x04;		break;	case wm8775_adc_768fs:		controlw = 0x05;		break;	default:		return RM_INVALID_PARAMETER;	}	if( setOversampleFrom128xTo64x )		controlw |= 0x0008;			if( masterMode )		controlw |= 0x0100;		return wm_wReg(pW, 0x0C, controlw);}RMstatus wm8775_audioInterface(WM8775_CONFIG *pW, WM8775_INTERFACE_FORMAT format, RMbool bitclkPolarityInvert, WM8775_WORD_LENGTH wl, RMbool adcHighPassFilterDisable){	RMuint16 controlw = 0x0000;	switch( format)	{	case wm8775_if_rightjust:		controlw = 0x0000;		break;	case wm8775_if_leftjust:		controlw = 0x0001;		break;	case wm8775_if_i2s:		controlw = 0x0002;		break;	case wm8775_if_dsp_early:		controlw = 0x0003;		break;	case wm8775_if_rightjust_adclrcInv:		controlw = 0x0004;		break;	case wm8775_if_leftjust_adclrcInv:		controlw = 0x0005;		break;	case wm8775_if_i2s_adclrcInv:		controlw = 0x0006;		break;	case wm8775_if_dsp_late:		controlw = 0x0007;		break;	default:		return RM_INVALID_PARAMETER;	}		switch (wl)	{	case wm8775_wl_16bit:		break;	case wm8775_wl_20bit:		controlw |= (0x01 << 4);		break;	case wm8775_wl_24bit:		controlw |= (0x02 << 4);		break;	case wm8775_wl_32bit:		if( (format == wm8775_if_rightjust) ||		    (format == wm8775_if_rightjust_adclrcInv) )		{			DPRINT(("wm8775_interface() right justified + 32 bit Mode not supported\n"));			return RM_INVALID_PARAMETER;		}		controlw |= (0x03 << 4);		break;		default:		return RM_INVALID_PARAMETER;	}	if( bitclkPolarityInvert )		controlw |= 0x0008;		if( adcHighPassFilterDisable )		controlw |= 0x0100;		return wm_wReg(pW, 0x0B, controlw);}RMstatus wm8775_gain(WM8775_CONFIG *pW, RMuint8 leftGain, RMuint8 rightGain, RMbool enaLeftZeroX, RMbool enaRightZeroX){	RMstatus s;	RMuint16 word = leftGain;		if( (s = wm_wReg(pW, 0x19, word | ((enaLeftZeroX?1:0) << 8))) != RM_OK )		return s; //left		word = rightGain;	return wm_wReg(pW, 0x1A, word | ((enaRightZeroX?1:0) << 8) ); // right}RMstatus wm8775_inputMuxControl(WM8775_CONFIG *pW, RMuint8 inputMask, RMbool leftMute, RMbool rightMute, RMbool linkRight2LeftGain){	RMuint16 controlw = 0x0000;		if( inputMask & 0xF0 )		return RM_INVALID_PARAMETER;	else		controlw = inputMask;	if( leftMute ) 		controlw |= 0x0080;			if( rightMute )		controlw |= 0x0040;			if( linkRight2LeftGain )		controlw |= 0x0100;			return wm_wReg(pW, 0x15, controlw);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -