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

📄 wm8775.c

📁 1. 8623L平台
💻 C
字号:
/* * * Copyright (c) 2001-2007 Sigma Designs, Inc.  * All Rights Reserved. Proprietary and Confidential. * *//**	@file   WM8775.c	@brief  device specific functions for main application		@author Christian Wolff Sean.Sekwon.Choi*/// to enable or disable the debug messages of this source file, put 1 or 0 below#if 0#define LOCALDBG ENABLE#else#define LOCALDBG DISABLE#endif#include "common.h"#include "WM8775.h"#include "i2c.h"//////////////////////////////////////////////////////////////////////////////////// WM8775//////////////////////////////////////////////////////////////////////////////////enum WM8775_audio_port{	AIN1,	AIN2,	AIN3,	AIN4,};static RMuint32 GetAudioPort(enum cap_board board,			     enum cap_audio_input audio_input, 			     RMuint32 audio_input_num ){	/*	 * Board Specific Info	 */	/*	 * sigma DTV8624 board: you have to check schematics to see what is connected to where	 */	if(board == cap_board_sigma844e1dtv8624){		switch(audio_input){		case cap_audio_input_tuner: 			return AIN4;			break;		case cap_audio_input_stereo:			switch(audio_input_num){			case 0:				return AIN1;				break;			case 1:				return AIN2;				break;			case 2:				return AIN3;				break;			default:				break;			}			break;		default:			return AIN1;			break;		}	}		return AIN1; // default}struct cap_WM8775_instance {	struct RUA *pRUA;	RMuint32 I2CModuleID;	struct EMhwlibI2CDeviceParameter I2CDevice;	RMuint8 BaseDevice;};RMstatus cap_WM8775_open(struct RUA *pRUA, 			 struct cap_WM8775_instance **ppWM8775, 			 RMuint32 I2CModuleID, 			 struct EMhwlibI2CDeviceParameter *pI2CDevice){	struct cap_WM8775_instance *pWM8775;		RMDBGLOG((FUNCNAME, "%s\n",__func__));	// Sanity checks	if (ppWM8775 == NULL) return RM_FATALINVALIDPOINTER;	*ppWM8775 = NULL;	if (pRUA == NULL) return RM_FATALINVALIDPOINTER;		// Allocate and clear local instance	pWM8775 = (struct cap_WM8775_instance *)RMMalloc(sizeof(struct cap_WM8775_instance));	if (pWM8775 == NULL) {		RMDBGLOG((ENABLE, "FATAL! Not enough memory for struct cap_WM8775_instance!\n"));		return RM_FATALOUTOFMEMORY;	}	RMMemset(pWM8775, 0, sizeof(struct cap_WM8775_instance));	*ppWM8775 = pWM8775;		// Set default and startup values	pWM8775->pRUA = pRUA;	pWM8775->I2CModuleID = I2CModuleID;	pWM8775->I2CDevice = *pI2CDevice;	pWM8775->BaseDevice = pI2CDevice->DevAddr;		return RM_OK;}RMstatus cap_WM8775_close(struct cap_WM8775_instance *pWM8775){	RMDBGLOG((FUNCNAME, "%s\n",__func__));		// Sanity checks	if (pWM8775 == NULL) return RM_FATALINVALIDPOINTER;		// Free all ressources	RMFree(pWM8775);		return RM_OK;}RMstatus cap_WM8775_tristate(struct cap_WM8775_instance *pWM8775){	int i;	RMuint16 i2c_data[][2]= {		{0x0D, ((0x0D<<1) | (0x0020<<8))},  // bit 6 Analog input disable		{0x0D, ((0x0D<<1) | (0x0002<<8))},  // bit 1 ADC power down		{0x0D, ((0x0D<<1) | (0x0001<<8))},  // bit 0 power down	};	RMDBGLOG((FUNCNAME, "%s\n",__func__));	for(i = 0; i<3; i++){		cap_i2c_write_data(pWM8775, pWM8775->BaseDevice, i2c_data[i][0], &i2c_data[i][1], 2);	}	return RM_OK;}RMstatus cap_WM8775_init_capture(struct cap_WM8775_instance *pWM8775,				 enum cap_board board,				 enum cap_audio_input audio_input, 				 RMuint32 audio_input_num ){	RMuint32 audio_port;	RMuint16 input, i;	// Wolfson WM8775 setup	RMuint16 i2c_data[][2] = {		{0x17, ((0x17<<1) | (0x0000 <<8) )},  // 0  reset		{0x0D, ((0x0D<<1) | (0x0000 <<8) )},  // 1  power up		{0x0C, ((0x0C<<1) | (0x0002 <<8) )},  // 2  256fs, slave mode		{0x0B, ((0x0B<<1) | (0x0022 <<8) )},  // 3  i2s, 24bit		{0x15, ((0x15<<1) | (0x000f <<8) )},  // 4  all inputs	};	RMDBGLOG((FUNCNAME, "%s\n",__func__));	audio_port = GetAudioPort(board, audio_input, audio_input_num);	switch(audio_port){	case AIN1:input = ((0x15<<1) | (0x0001<<8));break;	case AIN2:input = ((0x15<<1) | (0x0002<<8));break;	case AIN3:input = ((0x15<<1) | (0x0004<<8));break;	case AIN4:input = ((0x15<<1) | (0x0008<<8));break;	default:input = 0;break;	}	i2c_data[4][1] = input;	for(i = 0; i<5; i++){		cap_i2c_write_data(pWM8775, pWM8775->BaseDevice, (RMuint8)i2c_data[i][0], &i2c_data[i][1], 2);	}	return RM_OK;}RMstatus cap_WM8775_setup_output(struct cap_WM8775_instance *pWM8775, 				 struct cap_update *pUpdate){	RMDBGLOG((FUNCNAME, "%s\n",__func__));			/* WM8775 is used as slave mode */	/* need to figure out how to change AIN# when user change line in on the fly */	return RM_OK;}RMstatus cap_WM8775_check_int(struct cap_WM8775_instance *pWM8775){	RMDBGLOG((FUNCNAME, "%s\n",__func__));		return RM_OK;}RMstatus cap_WM8775_handle_int(struct cap_WM8775_instance *pWM8775, 			       struct cap_update *pUpdate){	RMDBGLOG((FUNCNAME, "%s\n",__func__));		return RM_OK;}

⌨️ 快捷键说明

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