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

📄 board.c

📁 1. 8623L平台
💻 C
字号:
/* * * Copyright (c) 2001-2007 Sigma Designs, Inc.  * All Rights Reserved. Proprietary and Confidential. * *//**	@file   board.c	@brief  board-specific configurations for rmcapture. User have to create this input map and chip info.		@author Christian Wolff Sean.Sekwon.Choi*/// to enable or disable the debug messages of this source file, put 1 or 0 below#if 1#define LOCALDBG ENABLE#else#define LOCALDBG DISABLE#endif#include "common.h"#include "board.h"#include "TW9919.h"#define I2C_ADDR_SiI9031_PRI 0x60#define I2C_ADDR_SiI9031_SEC 0x62#define I2C_ADDR_AD9380  0x98#define I2C_ADDR_AD9883  0x4C#define I2C_ADDR_SAA7119 0x40#define I2C_ADDR_WM8775  0x34#define I2C_ADDR_MSP34x5 0x80#define I2C_ADDR_TW9919  0x88/* ******************************************************************************** * DTV8634 board set configuration  *********************************************************************************/struct cap_video_input_map DTV8634_VideoInputMap[] = {	{cap_video_input_none, 0,      3, 0}, 	{cap_video_input_tuner, 1,     1, 1},	{cap_video_input_tuner, 2,     1, 2},	{cap_video_input_cvbs, 1,      1, 3},	{cap_video_input_cvbs, 2,      1, 4},	{cap_video_input_svideo, 1,    1, 3},	{cap_video_input_svideo, 2,    1, 4},	{cap_video_input_component, 1, 0, 3},	{cap_video_input_component, 2, 0, 4},	{cap_video_input_scart, 1,     1, 3},	{cap_video_input_scart, 2,     1, 4},	{cap_video_input_vga, 1,       0, 5},	{cap_video_input_dvi, 1,       0, 5},	{cap_video_input_hdmi, 1,      0, 6},	{cap_video_input_hdmi, 2,      0, 7},	{cap_video_input_hdmi, 3,      0, 8},		{cap_video_input_last, 0, cap_chip_last}};struct cap_audio_input_map DTV8634_AudioInputMap[] = {	{cap_audio_input_none, 0,   3}, 	{cap_audio_input_tuner, 1,  2},	{cap_audio_input_tuner, 2,  2},	{cap_audio_input_stereo, 1, 2},	{cap_audio_input_stereo, 2, 2},	{cap_audio_input_stereo, 3, 2},		{cap_audio_input_hdmi, 1,   0},	{cap_audio_input_hdmi, 2,   0},	{cap_audio_input_hdmi, 3,   0},		{cap_audio_input_last, 0, cap_chip_last}};struct cap_chip_info DTV8634_ChipInfo[4] = {	{  // Index: 0		chip: cap_chip_AD9380,		I2CModule: 1,		I2CDevice: {			APIVersion: 1,       			Clock: GPIOId_Sys_0, 			Data: GPIOId_Sys_1,  			DevAddr: I2C_ADDR_AD9380, 			Delay: 0,           			Speed: 100          		}			},	{  // Index: 1		chip: cap_chip_TW9919,		I2CModule: 1,		I2CDevice: {			APIVersion: 1,       // set to 1			Clock: GPIOId_Sys_0, // GPIO of the I2C data line			Data: GPIOId_Sys_1,  // GPIO of the I2C clock line			DevAddr: I2C_ADDR_TW9919,       // I2C device address (write uses DevAddr, read uses DevAddr + 1)			Delay: 0,            // I2C delay, in uSec			Speed: 100  		}	},	{	  // Index: 2		chip: cap_chip_MSP34x5,		I2CModule: 1,		I2CDevice: {			APIVersion: 1,       // set to 1			Clock: GPIOId_Sys_0, // GPIO of the I2C data line			Data: GPIOId_Sys_1,  // GPIO of the I2C clock line			DevAddr: I2C_ADDR_MSP34x5,       // I2C device address (write uses DevAddr, read uses DevAddr + 1)			Delay: 0,            // I2C delay, in uSec			Speed: 100  		}	},	{  // Index: 3		chip: cap_chip_last	}};struct cap_board_info DTV8634_BoardInfo = {	board: cap_board_sigma904e1dtv8634, 	clock: 2700000, 	p_video_input_map: DTV8634_VideoInputMap, 	p_audio_input_map: DTV8634_AudioInputMap, 	p_chip_info: DTV8634_ChipInfo};/* ******************************************************************************** * DTV8624 board set configuration  *********************************************************************************/struct cap_video_input_map DTV8624_VideoInputMap[] = {	{cap_video_input_none, 0,      5, 0}, 	{cap_video_input_tuner, 1,     1, 1}, 	{cap_video_input_tuner, 2,     1, 2}, 	{cap_video_input_cvbs, 1,      1, 3}, 	{cap_video_input_cvbs, 2,      1, 4}, 	{cap_video_input_svideo, 1,    1, 3}, 	{cap_video_input_svideo, 2,    1, 4}, 	{cap_video_input_component, 1, 1, 3},  // SDTV component 1	{cap_video_input_component, 2, 1, 4},  // SDTV component 2	{cap_video_input_component, 3, 2, 3},   // HDTV component 1	{cap_video_input_component, 4, 2, 4},   // HDTV component 2	{cap_video_input_scart, 1,     1, 3}, 	{cap_video_input_scart, 2,     1, 4}, 	{cap_video_input_vga, 1,       2, 5}, 	{cap_video_input_dvi, 1,       0, 5}, 	{cap_video_input_hdmi, 1,      0, 6}, 	{cap_video_input_hdmi, 2,      0, 7}, 		{cap_video_input_last, 0, cap_chip_last}};struct cap_audio_input_map DTV8624_AudioInputMap[] = {	{cap_audio_input_none, 0,   5}, 	{cap_audio_input_tuner, 1,  3}, 	{cap_audio_input_tuner, 2,  3}, 	{cap_audio_input_stereo, 1, 4}, 	{cap_audio_input_stereo, 2, 4}, 	{cap_audio_input_stereo, 3, 4},		{cap_audio_input_hdmi, 1,   0}, 	{cap_audio_input_hdmi, 2,   0}, 		{cap_audio_input_last, 0, cap_chip_last}};// List of all aquisition chips on the board and how to access themstruct cap_chip_info DTV8624_ChipInfo[6] = {	{  // Index: 0		chip: cap_chip_SiI9031,  // capture chip specification		I2CModule: 1,        // emhwlib Module ID of the I2C bus access		I2CDevice: {			APIVersion: 1,       // set to 1			Clock: GPIOId_Sys_0, // GPIO of the I2C data line			Data: GPIOId_Sys_1,  // GPIO of the I2C clock line			DevAddr: I2C_ADDR_SiI9031_PRI,       // I2C device address (write uses DevAddr, read uses DevAddr + 1)			Delay: 0,            // I2C delay, in uSec			Speed: 100           // frequency of the I2C bit transfer, in kHz (e.g. 100 or 400)		}	},	{  // Index: 1		chip: cap_chip_SAA7119,		I2CModule: 1,		I2CDevice: {			APIVersion: 1,       // set to 1			Clock: GPIOId_Sys_0, // GPIO of the I2C data line			Data: GPIOId_Sys_1,  // GPIO of the I2C clock line			DevAddr: I2C_ADDR_SAA7119,       // I2C device address (write uses DevAddr, read uses DevAddr + 1)			Delay: 0,            // I2C delay, in uSec			Speed: 100  		}	},	{  // Index: 2		chip: cap_chip_AD9883,		I2CModule: 1,		I2CDevice: {			APIVersion: 1,       // set to 1			Clock: GPIOId_Sys_0, // GPIO of the I2C data line			Data: GPIOId_Sys_1,  // GPIO of the I2C clock line			DevAddr: I2C_ADDR_AD9883,  // I2C device address (write uses DevAddr, read uses DevAddr + 1)			Delay: 0,            // I2C delay, in uSec			Speed: 100  		}	},	{	  // Index: 3		chip: cap_chip_MSP34x5,		I2CModule: 1,		I2CDevice: {			APIVersion: 1,       // set to 1			Clock: GPIOId_Sys_0, // GPIO of the I2C data line			Data: GPIOId_Sys_1,  // GPIO of the I2C clock line			DevAddr: I2C_ADDR_MSP34x5,       // I2C device address (write uses DevAddr, read uses DevAddr + 1)			Delay: 0,            // I2C delay, in uSec			Speed: 100  		}	},	{  // Index: 4		chip: cap_chip_WM8775,		I2CModule: 1,		I2CDevice: {			APIVersion: 1,       // set to 1			Clock: GPIOId_Sys_0, // GPIO of the I2C data line			Data: GPIOId_Sys_1,  // GPIO of the I2C clock line			DevAddr: I2C_ADDR_WM8775,       // I2C device address (write uses DevAddr, read uses DevAddr + 1)			Delay: 0,            // I2C delay, in uSec			Speed: 100  		}	},	{  // Index: 5		chip: cap_chip_last	}};struct cap_board_info DTV8624_BoardInfo = {	board: cap_board_sigma844e1dtv8624, 	clock: 2700000, 	p_video_input_map: DTV8624_VideoInputMap, 	p_audio_input_map: DTV8624_AudioInputMap, 	p_chip_info: DTV8624_ChipInfo};/* ******************************************************************************** * board specific function *********************************************************************************/RMstatus cap_board_specific_setup(	struct rmcapture_instance *pCapture, 	struct RUA* pRUA, 	struct cap_board_info* p_board_info,	enum cap_video_input current_video_input, 	RMuint32 current_video_input_num){	struct SystemBlock_GPIO_type gpio, gpio_16, gpio_17, gpio_18;	RMstatus err = RM_OK;	RMDBGLOG((FUNCNAME, "%s\n",__func__));		RMDBGLOG((LOCALDBG, "video input %d, video input number%d\n",current_video_input, current_video_input_num));	// this is board specific setting - have to figure out how to handle for multiple board.	switch (p_board_info->board) {	case cap_board_sigma844e1dtv8624:		RMDBGLOG((LOCALDBG, "Setting up board #844, Rev.E1, EM8624 DTV eval.\n"));		gpio.Bit = GPIOId_Sys_15;		gpio.Data = FALSE;  // select HDMI audio		RUASetProperty(pRUA, SystemBlock, RMSystemBlockPropertyID_GPIO, &gpio, sizeof(gpio), 0);		break;			case cap_board_sigma904e1dtv8634:		RMDBGLOG((LOCALDBG, "Setting up board #904, Rev.E1, SMP8634 DTV eval.\n"));		// 0. power up AD9380		gpio.Bit = GPIOId_Eth_34;		gpio.Data = TRUE;  // power up		RUASetProperty(pRUA, SystemBlock, RMSystemBlockPropertyID_GPIO, &gpio, sizeof(gpio), 0);				// 1. audio input MUX setting		gpio.Bit = GPIOId_Eth_23;		gpio.Data = FALSE;  // route HDMI audio to I2S input		RUASetProperty(pRUA, SystemBlock, RMSystemBlockPropertyID_GPIO, &gpio, sizeof(gpio), 0);				// 2. HDMI input MUX setting		gpio_16.Bit = GPIOId_Eth_18;		gpio_16.Data = FALSE;  // route analog audio to I2S input				gpio_17.Bit = GPIOId_Eth_19;		gpio_17.Data = FALSE;  // route analog audio to I2S input				gpio_18.Bit = GPIOId_Eth_20;		gpio_18.Data = FALSE;  // route analog audio to I2S input				switch (current_video_input) {		case cap_video_input_hdmi:			switch (current_video_input_num) {			case 1:				gpio_16.Data = TRUE;  // route analog audio to I2S input				break;			case 2:				gpio_17.Data = TRUE;  // route analog audio to I2S input				break;			case 3:				gpio_18.Data = TRUE;  // route analog audio to I2S input				break;			default:				break;			}			break;		default:			break;		}				RUASetProperty(pRUA, SystemBlock, 			RMSystemBlockPropertyID_GPIO, 			&gpio_16, sizeof(gpio_16), 0);				RUASetProperty(pRUA, SystemBlock, 			RMSystemBlockPropertyID_GPIO, 			&gpio_17, sizeof(gpio_17), 0);				RUASetProperty(pRUA, SystemBlock, 			RMSystemBlockPropertyID_GPIO, 			&gpio_18, sizeof(gpio_18), 0);				// DTV8634 board gets MCLK from TW9919		// analog video chip should be power on to feed MCLK		{			RMuint32 i = 0;			struct cap_chip_instance* pChip;						while (p_board_info->p_chip_info[i].chip != cap_chip_last) {            // for each chip of this board,				if (p_board_info->p_chip_info[i].chip == cap_chip_TW9919) {         // if it is a TW9919, 					pChip = rmcapture_get_chip_handle(pCapture, cap_chip_last, i);  // get chip handle.					if (pChip) {                                                    // if handle is open, 						cap_TW9919_setup_audio_mclk(pChip->instance.pTW9919);       // set up audio clock.						RMDBGLOG((ENABLE, "Chip #%lu (TW9919): audio clocks set up\n", i));					} else {						RMDBGLOG((ENABLE, "Chip #%lu (TW9919) not open!\n", i));					}				}				i++;			}		}		break;			default:		RMDBGLOG((ENABLE, "No board-specific initialisation for this board!\n"));	}		return err;}/* ******************************************************************************** * helper functions *********************************************************************************/struct cap_board_info* cap_get_board_info(enum cap_board board){	switch (board) {	case cap_board_sigma844e1dtv8624: 		return &DTV8624_BoardInfo;	case cap_board_sigma904e1dtv8634: 		return &DTV8634_BoardInfo;	default: 		RMDBGLOG((ENABLE, "No board-specific information for this board defined!\n"));		return NULL;	}}

⌨️ 快捷键说明

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