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

📄 fipkernel.c

📁 1. 8623L平台
💻 C
📖 第 1 页 / 共 3 页
字号:
/***************************************** *  Copyright © 2001-2007 *  Sigma Designs, Inc. All Rights Reserved *  Proprietary and Confidential *  Modified for KiSS Front Panel support *  By Stefan Hallas Andersen ******************************************/#ifdef __KERNEL__ #include <linux/init.h>#include <linux/slab.h>#include <linux/irq.h>#include <linux/devfs_fs_kernel.h>#include <linux/poll.h>#include <linux/interrupt.h>#include <linux/timer.h>#include <asm/hardware.h>#include <asm/delay.h>#else#include "version.h"#include "config.h"#endif /* __KERNEL__ */#include "fip.h"/* chip specific register definitions *//* EM85XX */#if 0#define	FIP_BASE				0x00500D00#define	FIP_COMMAND				0x00#define	FIP_DISPLAY_DATA			0x04#define	FIP_LED_DATA				0x08#define	FIP_KEY_DATA1				0x0C#define	FIP_KEY_DATA2				0x10#define	FIP_SWITCH_DATA				0x14#define	FIP_CLK_DIV				0x20#define	FIP_TRISTATE_MODE			0x24#define FIP_TRISTATE_MODE_MASK			0x2#define FIP_DIVIDER				40#endif#ifndef CONFIG_ARCH_TANGO#error "Only Tango is supported/tested."#endif/* EM86XX */#define	FIP_BASE				0x10500#define	FIP_COMMAND				0x40#define	FIP_DISPLAY_DATA			0x44#define	FIP_LED_DATA				0x48#define	FIP_KEY_DATA1				0x4c#define	FIP_KEY_DATA2				0x50#define	FIP_SWITCH_DATA				0x54#define FIP_CONFIG				0x58#define FIP_INT					0x5c#if defined(CONFIG_EM86XX_FIP_REF1)#define FIP_DIVIDER				27	/* default value */#elif defined(CONFIG_EM86XX_FIP_REF2)#define FIP_DIVIDER				54	/* default value */#endif#define FIP_BUSY				0x200#define FIP_ENABLE				0x400/* FIP commands							*/#define	FIP_CMD_DISP_MODE_08DIGITS_20SEGMENTS		0x00#define	FIP_CMD_DISP_MODE_09DIGITS_19SEGMENTS		0x08#define	FIP_CMD_DISP_MODE_10DIGITS_18SEGMENTS		0x09#define	FIP_CMD_DISP_MODE_11DIGITS_17SEGMENTS		0x0a#define	FIP_CMD_DISP_MODE_12DIGITS_16SEGMENTS		0x0b#define	FIP_CMD_DISP_MODE_13DIGITS_15SEGMENTS		0x0c#define	FIP_CMD_DISP_MODE_14DIGITS_14SEGMENTS		0x0d#define	FIP_CMD_DISP_MODE_15DIGITS_13SEGMENTS		0x0e#define	FIP_CMD_DISP_MODE_16DIGITS_12SEGMENTS		0x0f#define	FIP_CMD_DATA_SET_RW_MODE_WRITE_DISPLAY		0x40#define	FIP_CMD_DATA_SET_RW_MODE_WRITE_LED_PORT		0x41#define	FIP_CMD_DATA_SET_RW_MODE_READ_KEYS		0x42#define	FIP_CMD_DATA_SET_RW_MODE_READ_SWITCHES		0x43#define	FIP_CMD_DATA_SET_ADR_MODE_INCREMENT_ADR		0x40#define	FIP_CMD_DATA_SET_ADR_MODE_FIXED_ADR		0x44#define	FIP_CMD_DATA_SET_OP_MODE_NORMAL_OPERATION	0x40#define	FIP_CMD_DATA_SET_OP_MODE_TEST_MODE		0x48#define	FIP_CMD_ADR_SETTING				0xC0#define	FIP_CMD_DISP_CTRL_PULSE_WIDTH_1_16		0x80#define	FIP_CMD_DISP_CTRL_PULSE_WIDTH_2_16		0x81#define	FIP_CMD_DISP_CTRL_PULSE_WIDTH_4_16		0x82#define	FIP_CMD_DISP_CTRL_PULSE_WIDTH_10_16		0x83#define	FIP_CMD_DISP_CTRL_PULSE_WIDTH_11_16		0x84#define	FIP_CMD_DISP_CTRL_PULSE_WIDTH_12_16		0x85#define	FIP_CMD_DISP_CTRL_PULSE_WIDTH_13_16		0x86#define	FIP_CMD_DISP_CTRL_PULSE_WIDTH_14_16		0x87#define	FIP_CMD_DISP_CTRL_TURN_DISPLAY_OFF_MASK		0x87#define	FIP_CMD_DISP_CTRL_TURN_DISPLAY_ON		0x88#if defined(CONFIG_EM86XX_FIP_REF1)#define FIP_DISPLAY_MODE	0xa#define MAX_FIP_RAM		23#define NUM_SYMBOLS		23#define NUM_CHARACTERS		72#define NUM_DIGITS		7#elif defined(CONFIG_EM86XX_FIP_REF2)#define FIP_DISPLAY_MODE	0x0a#define MAX_FIP_RAM		0x2f#define NUM_SYMBOLS		206#define NUM_CHARACTERS		69#define NUM_X_CHARACTERS	12#define NUM_DIGITS		8#define NUM_X_DIGITS		4#endif#define L_OFF			-1	//means light is or should be off#define FIP_NO_CLEAR		0x0004#if defined(CONFIG_EM86XX_FIP_REF1)/*  14 SEGMENT LCD (EXTENDED CHARACTERS MAP)     a    -----f |\j| /| b   |i\|/k|  g-- --he |n/|\l| c  |/m| \|   -----     d   */#define DIGIT_L(b7,b6,c,l,m,n,e,d)	((b7 << 7) | (b6 << 6) | (c << 5) | (l << 4) | (m << 3) | (n << 2) | (e << 1) | d)#define DIGIT_H(g,h,i,j,k,a,b,f)	((g << 7) | (h << 6) | (i << 5) | (j << 4) | (k << 3) | (a << 2) | (b << 1) | f)/* sequence must match fipcharacters */static const char fipcharactersmap[NUM_CHARACTERS+1] = " +-/0123456789<>ABCDEFGHIJKLMNOPQRSTUVWXYZ\\-abcdefghijklmnopqrstuvwxyz|_";#elif defined(CONFIG_EM86XX_FIP_REF2)#define DIGIT_L(M,C,E,R,P,B,D,U)	((M << 7) | (C << 6) | (E << 5) | (R << 4) | (P << 3) | (B << 2) | (D << 1) | U)#define DIGIT_H(A,B,F,H,J,K,G,S)	((A << 7) | (B << 6) | (F << 5) | (H << 4) | (J << 3) | (K << 2) | (G << 1) | S)// Following definition is for Title/Track/Chaspter digits#define DIGIT_X(A,B,F,G,C,E,D,U)		((A << 7) | (B << 6) | (F << 5) | (G << 4) | (C << 3) | (E << 2) | (D << 1) | U) static const char fipcharactersmap[NUM_CHARACTERS+1] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ !\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~";static const char fipxcharactersmap[NUM_X_CHARACTERS+1] = "0123456789- ";#endif/* we use the inverted mask for clearing a digit without clearing other things */static const char fipcharactermask[2] = {#if defined(CONFIG_EM86XX_FIP_REF1)	DIGIT_L(1,1,0,0,0,0,0,0), 	DIGIT_H(0,0,0,0,0,0,0,0)#elif defined(CONFIG_EM86XX_FIP_REF2)	DIGIT_L(0,0,0,0,0,0,0,0), 	DIGIT_H(0,0,0,0,0,0,0,0)#endif};#if defined(CONFIG_EM86XX_FIP_REF1)/* the format is lower byte, higher byte */static const char fipcharacters[NUM_CHARACTERS][2] = {	{DIGIT_L(0,0,0,0,0,0,0,0), DIGIT_H(0,0,0,0,0,0,0,0)},	//	{DIGIT_L(0,0,0,0,1,0,0,0), DIGIT_H(1,1,0,1,0,0,0,0)},	// +	{DIGIT_L(0,0,0,0,0,0,0,0), DIGIT_H(1,1,0,0,0,0,0,0)},	// -	{DIGIT_L(0,0,0,0,1,0,0,0), DIGIT_H(0,0,0,0,1,0,0,0)},	// /	{DIGIT_L(0,0,1,0,0,0,1,1), DIGIT_H(0,0,0,0,0,1,1,1)},	// 0	{DIGIT_L(0,0,0,0,1,0,0,0), DIGIT_H(0,0,0,1,0,0,0,0)},	// 1	{DIGIT_L(0,0,0,0,0,0,1,1), DIGIT_H(1,1,0,0,0,1,1,0)},	// 2	{DIGIT_L(0,0,1,0,0,0,0,1), DIGIT_H(1,1,0,0,0,1,1,0)},	// 3	{DIGIT_L(0,0,1,0,0,0,0,0), DIGIT_H(1,1,0,0,0,0,1,1)},	// 4	{DIGIT_L(0,0,1,0,0,0,0,1), DIGIT_H(1,1,0,0,0,1,0,1)},	// 5	{DIGIT_L(0,0,1,0,0,0,1,1), DIGIT_H(1,1,0,0,0,1,0,1)},	// 6	{DIGIT_L(0,0,1,0,0,0,0,0), DIGIT_H(0,0,0,0,0,1,1,0)},	// 7	{DIGIT_L(0,0,1,0,0,0,1,1), DIGIT_H(1,1,0,0,0,1,1,1)},	// 8	{DIGIT_L(0,0,1,0,0,0,0,1), DIGIT_H(1,1,0,0,0,1,1,1)},	// 9	{DIGIT_L(0,0,0,1,0,0,0,0), DIGIT_H(0,0,0,0,1,0,0,0)},	// <	{DIGIT_L(0,0,0,0,0,1,0,0), DIGIT_H(0,0,0,1,0,0,0,0)},	// >	{DIGIT_L(0,0,1,0,0,0,1,0), DIGIT_H(1,1,0,0,0,1,1,1)},	// A	{DIGIT_L(0,0,1,0,1,0,0,1), DIGIT_H(0,1,0,1,0,1,1,0)},	// B	{DIGIT_L(0,0,0,0,0,0,1,1), DIGIT_H(0,0,0,0,0,1,0,1)},	// C	{DIGIT_L(0,0,1,0,1,0,0,1), DIGIT_H(0,0,0,1,0,1,1,0)},	// D	{DIGIT_L(0,0,0,0,0,0,1,1), DIGIT_H(1,1,0,0,0,1,0,1)},	// E	{DIGIT_L(0,0,0,0,0,0,1,0), DIGIT_H(1,1,0,0,0,1,0,1)},	// F	{DIGIT_L(0,0,1,0,0,0,1,1), DIGIT_H(1,1,0,0,0,1,0,1)},	// G	{DIGIT_L(0,0,1,0,0,0,1,0), DIGIT_H(1,1,0,0,0,0,1,1)},	// H	{DIGIT_L(0,0,0,0,1,0,0,1), DIGIT_H(0,0,0,1,0,1,0,0)},	// I	{DIGIT_L(0,0,1,0,0,0,0,1), DIGIT_H(0,0,0,0,0,0,1,0)},	// J	{DIGIT_L(0,0,0,1,0,0,1,0), DIGIT_H(1,0,0,0,1,0,0,1)},	// K	{DIGIT_L(0,0,0,0,0,0,1,1), DIGIT_H(0,0,0,0,0,0,0,1)},	// L	{DIGIT_L(0,0,1,0,0,0,1,0), DIGIT_H(0,0,1,0,1,0,1,1)},	// M	{DIGIT_L(0,0,1,1,0,0,1,0), DIGIT_H(0,0,1,0,0,0,1,1)},	// N	{DIGIT_L(0,0,1,0,0,0,1,1), DIGIT_H(0,0,0,0,0,1,1,1)},	// O	{DIGIT_L(0,0,0,0,0,0,1,0), DIGIT_H(1,1,0,0,0,1,1,1)},	// P	{DIGIT_L(0,0,1,1,0,0,1,1), DIGIT_H(0,0,0,0,0,1,1,1)},	// Q	{DIGIT_L(0,0,0,1,0,0,1,0), DIGIT_H(1,1,0,0,0,1,1,1)},	// R	{DIGIT_L(0,0,1,0,0,0,0,1), DIGIT_H(1,1,0,0,0,1,0,1)},	// S	{DIGIT_L(0,0,0,0,1,0,0,0), DIGIT_H(0,0,0,1,0,1,0,0)},	// T	{DIGIT_L(0,0,1,0,0,0,1,1), DIGIT_H(0,0,0,0,0,0,1,1)},	// U	{DIGIT_L(0,0,1,1,0,0,0,0), DIGIT_H(0,0,1,0,0,0,1,0)},	// V	{DIGIT_L(0,0,1,1,0,1,1,0), DIGIT_H(0,0,0,0,0,0,1,1)},	// W	{DIGIT_L(0,0,0,1,0,1,0,0), DIGIT_H(0,0,1,0,1,0,0,0)},	// X	{DIGIT_L(0,0,0,0,1,0,0,0), DIGIT_H(0,0,1,0,1,0,0,0)},	// Y	{DIGIT_L(0,0,0,0,0,1,0,1), DIGIT_H(0,0,0,0,1,1,0,0)},	// Z	{DIGIT_L(0,0,0,1,0,0,0,0), DIGIT_H(0,0,1,0,0,0,0,0)},	// Slash	{DIGIT_L(0,0,0,0,0,0,0,0), DIGIT_H(1,1,0,0,0,0,0,0)},	// -	{DIGIT_L(0,0,1,0,0,0,1,1), DIGIT_H(1,1,0,0,0,0,0,0)},	// a	{DIGIT_L(0,0,1,0,0,0,1,1), DIGIT_H(1,1,0,0,0,0,0,1)},	// b	{DIGIT_L(0,0,0,0,0,0,1,1), DIGIT_H(1,1,0,0,0,0,0,0)},	// c	{DIGIT_L(0,0,1,0,0,0,1,1), DIGIT_H(1,1,0,0,0,0,1,0)},	// d	{DIGIT_L(0,0,0,0,0,0,1,1), DIGIT_H(1,1,0,0,0,1,1,1)},	// e	{DIGIT_L(0,0,0,0,0,0,1,0), DIGIT_H(1,0,0,0,0,1,0,1)},	// f	{DIGIT_L(0,0,1,0,0,0,0,1), DIGIT_H(1,1,0,0,0,1,1,1)},	// g	{DIGIT_L(0,0,1,0,0,0,1,0), DIGIT_H(1,1,0,0,0,0,0,1)},	// h	{DIGIT_L(0,0,0,0,1,0,0,0), DIGIT_H(0,0,0,0,0,0,0,0)},	// i	{DIGIT_L(0,0,1,0,0,0,0,1), DIGIT_H(0,0,0,0,0,0,0,0)},	// j	{DIGIT_L(0,0,0,1,1,0,0,0), DIGIT_H(0,1,0,1,0,0,0,0)},	// k	{DIGIT_L(0,0,0,0,0,0,1,1), DIGIT_H(0,0,0,0,0,0,0,1)},	// l	{DIGIT_L(0,0,1,0,1,0,1,0), DIGIT_H(1,1,0,0,0,0,0,0)},	// m	{DIGIT_L(0,0,1,0,0,0,1,0), DIGIT_H(1,1,0,0,0,0,0,0)},	// n	{DIGIT_L(0,0,1,0,0,0,1,1), DIGIT_H(1,1,0,0,0,0,0,0)},	// o	{DIGIT_L(0,0,0,0,0,0,1,0), DIGIT_H(1,1,0,0,0,1,1,1)},	// p	{DIGIT_L(0,0,1,0,0,0,0,0), DIGIT_H(1,1,0,0,0,1,1,1)},	// q	{DIGIT_L(0,0,0,0,0,0,1,0), DIGIT_H(1,0,0,0,0,0,0,0)},	// r	{DIGIT_L(0,0,1,0,0,0,0,1), DIGIT_H(1,1,0,0,0,1,0,1)},	// s	{DIGIT_L(0,0,0,0,0,0,1,1), DIGIT_H(1,0,0,0,0,0,0,1)},	// t	{DIGIT_L(0,0,1,0,0,0,1,1), DIGIT_H(0,0,0,0,0,0,0,0)},	// u	{DIGIT_L(0,0,1,1,0,0,0,0), DIGIT_H(0,0,0,0,0,0,0,0)},	// v	{DIGIT_L(0,0,1,1,0,1,1,0), DIGIT_H(0,0,0,0,0,0,0,0)},	// w	{DIGIT_L(0,0,0,1,1,0,0,0), DIGIT_H(1,1,0,0,0,0,0,0)},	// x	{DIGIT_L(0,0,0,0,1,0,0,0), DIGIT_H(0,0,0,1,1,0,0,0)},	// y	{DIGIT_L(0,0,0,0,1,0,0,1), DIGIT_H(1,1,0,0,0,0,0,0)},	// z	{DIGIT_L(0,0,0,0,1,0,0,0), DIGIT_H(0,0,0,1,0,0,0,0)},	// |	{DIGIT_L(0,0,0,0,0,0,0,1), DIGIT_H(0,0,0,0,0,0,0,0)}	// _};#elif defined(CONFIG_EM86XX_FIP_REF2)/* the format is lower byte, higher byte */static const char fipcharacters[NUM_CHARACTERS][2] = {	{DIGIT_L(0,1,1,0,0,0,1,1), DIGIT_H(1,1,1,0,0,0,0,0)},	// 0	{DIGIT_L(0,0,0,0,1,0,0,1), DIGIT_H(0,0,0,0,1,0,0,1)},	// 1	{DIGIT_L(1,0,1,0,0,0,1,1), DIGIT_H(1,1,0,0,0,0,1,1)},	// 2	{DIGIT_L(1,1,0,0,0,0,1,1), DIGIT_H(1,1,0,0,0,0,0,0)},	// 3	{DIGIT_L(1,1,0,0,0,0,0,1), DIGIT_H(0,1,1,0,0,0,1,1)},	// 4	{DIGIT_L(1,1,0,0,0,0,1,1), DIGIT_H(1,0,1,0,0,0,1,1)},	// 5	{DIGIT_L(1,1,1,0,0,0,1,1), DIGIT_H(1,0,1,0,0,0,1,1)},	// 6	{DIGIT_L(0,1,0,0,0,0,0,1), DIGIT_H(1,1,0,0,0,0,0,0)},	// 7	{DIGIT_L(1,1,1,0,0,0,1,1), DIGIT_H(1,1,1,0,0,0,1,1)},	// 8	{DIGIT_L(1,1,0,0,0,0,0,1), DIGIT_H(1,1,1,0,0,0,1,1)},	// 9	{DIGIT_L(1,1,1,0,0,0,0,0), DIGIT_H(1,1,1,0,0,0,1,1)},	// A	{DIGIT_L(1,1,0,0,1,0,1,0), DIGIT_H(1,1,0,0,1,0,0,1)},	// B	{DIGIT_L(0,0,1,0,0,0,1,0), DIGIT_H(1,0,1,0,0,0,0,0)},	// C	{DIGIT_L(0,1,0,0,1,0,1,0), DIGIT_H(1,1,0,0,1,0,0,1)},	// D	{DIGIT_L(1,0,1,0,0,0,1,0), DIGIT_H(1,0,1,0,0,0,1,1)},	// E	{DIGIT_L(0,0,1,0,0,0,0,0), DIGIT_H(1,0,1,0,0,0,1,1)},	// F	{DIGIT_L(1,1,1,0,0,0,1,0), DIGIT_H(1,0,1,0,0,0,0,0)},	// G	{DIGIT_L(1,1,1,0,0,0,0,0), DIGIT_H(0,1,1,0,0,0,1,1)},	// H	{DIGIT_L(0,0,0,0,1,0,0,0), DIGIT_H(0,0,0,0,1,0,0,1)},	// I	{DIGIT_L(0,1,1,0,0,0,1,0), DIGIT_H(0,1,0,0,0,0,0,0)},	// J	{DIGIT_L(0,0,1,0,0,1,0,0), DIGIT_H(0,0,1,0,0,1,1,1)},	// K	{DIGIT_L(0,0,1,0,0,0,1,0), DIGIT_H(0,0,1,0,0,0,0,0)},	// L	{DIGIT_L(0,1,1,0,0,0,0,0), DIGIT_H(0,1,1,1,0,1,0,1)},	// M	{DIGIT_L(0,1,1,0,0,1,0,0), DIGIT_H(0,1,1,1,0,0,0,1)},	// N	{DIGIT_L(0,1,1,0,0,0,1,0), DIGIT_H(1,1,1,0,0,0,0,0)},	// O	{DIGIT_L(1,0,1,0,0,0,0,0), DIGIT_H(1,1,1,0,0,0,1,1)},	// P	{DIGIT_L(0,1,1,0,0,1,1,0), DIGIT_H(1,1,1,0,0,0,0,0)},	// Q	{DIGIT_L(1,0,1,0,0,1,0,0), DIGIT_H(1,1,1,0,0,0,1,1)},	// R	{DIGIT_L(1,1,0,0,0,0,1,0), DIGIT_H(1,0,1,0,0,0,1,1)},	// S	{DIGIT_L(0,0,0,0,1,0,0,0), DIGIT_H(1,0,0,0,1,0,0,1)},	// T	{DIGIT_L(0,1,1,0,0,0,1,0), DIGIT_H(0,1,1,0,0,0,0,0)},	// U	{DIGIT_L(0,0,1,1,0,0,0,0), DIGIT_H(0,0,1,0,0,1,0,1)},	// V	{DIGIT_L(0,1,1,1,0,1,0,0), DIGIT_H(0,1,1,0,0,0,0,1)},	// W	{DIGIT_L(0,0,0,1,0,1,0,0), DIGIT_H(0,0,0,1,0,1,0,0)},	// X	{DIGIT_L(0,0,0,0,1,0,0,0), DIGIT_H(0,0,0,1,0,1,0,1)},	// Y	{DIGIT_L(0,0,0,1,0,0,1,0), DIGIT_H(1,0,0,0,0,1,0,1)},	// Z	{0,0},							// Space	{DIGIT_L(0,0,0,0,1,0,0,0), DIGIT_H(0,0,0,0,1,0,0,1)},	// !	{DIGIT_L(0,0,0,0,0,0,0,0), DIGIT_H(0,0,1,0,1,0,0,0)},	// "	{DIGIT_L(1,0,0,1,1,0,0,0), DIGIT_H(0,0,0,1,1,0,1,1)},	// #	{DIGIT_L(1,1,0,0,1,0,1,0), DIGIT_H(1,0,1,0,1,0,1,1)},	// $	{DIGIT_L(0,1,0,1,0,0,0,0), DIGIT_H(0,0,1,0,0,1,0,1)},	// %	{DIGIT_L(0,0,1,0,1,0,1,0), DIGIT_H(1,0,0,1,0,1,1,1)},	// &	{DIGIT_L(0,0,0,0,0,0,0,0), DIGIT_H(0,0,0,0,0,1,0,0)},	// '	{DIGIT_L(0,0,0,0,0,1,0,0), DIGIT_H(0,0,0,0,0,1,0,0)}, 	// (	{DIGIT_L(0,0,0,1,0,0,0,0), DIGIT_H(0,0,0,1,0,0,0,0)}, 	// )	{DIGIT_L(1,0,0,1,1,1,0,0), DIGIT_H(0,0,0,1,1,1,1,1)}, 	// *	{DIGIT_L(1,0,0,0,1,0,0,0), DIGIT_H(0,0,0,0,1,0,1,1)}, 	// +	{DIGIT_L(0,0,0,1,0,0,0,0), DIGIT_H(0,0,0,0,0,0,0,0)}, 	// ,	{DIGIT_L(1,0,0,0,0,0,0,0), DIGIT_H(0,0,0,0,0,0,1,1)}, 	// -	{DIGIT_L(0,0,0,0,0,0,0,0), DIGIT_H(0,0,0,0,0,0,0,1)}, 	// .	{DIGIT_L(0,0,0,1,0,0,0,0), DIGIT_H(0,0,0,0,0,1,0,1)}, 	// /	{DIGIT_L(0,0,0,0,1,0,0,0), DIGIT_H(0,0,0,0,0,0,0,1)}, 	// :	{DIGIT_L(0,0,0,1,0,0,0,0), DIGIT_H(0,0,0,0,0,0,0,1)}, 	// ;	{DIGIT_L(0,0,0,0,0,1,0,0), DIGIT_H(0,0,0,0,0,1,0,1)}, 	// <	{DIGIT_L(1,0,0,0,0,0,1,0), DIGIT_H(0,0,0,0,0,0,1,1)}, 	// =	{DIGIT_L(0,0,0,1,0,0,0,0), DIGIT_H(0,0,0,1,0,0,0,1)}, 	// >	{DIGIT_L(0,0,0,0,1,0,0,0), DIGIT_H(1,0,1,0,0,1,0,1)}, 	// ?	{DIGIT_L(1,0,1,0,0,0,1,0), DIGIT_H(1,1,1,0,1,1,0,1)}, 	// @	{DIGIT_L(0,0,0,1,0,0,1,0), DIGIT_H(1,0,0,1,0,0,0,0)}, 	// [	{DIGIT_L(0,0,0,0,0,1,0,0), DIGIT_H(0,0,0,1,0,0,0,1)}, 	// / 	{DIGIT_L(0,1,0,0,0,0,1,0), DIGIT_H(1,1,0,0,0,0,0,0)}, 	// ]	{DIGIT_L(0,0,0,1,0,1,0,0), DIGIT_H(0,0,0,0,0,0,0,1)}, 	// ^	{DIGIT_L(0,0,0,0,0,0,1,0), DIGIT_H(0,0,0,0,0,0,0,0)}, 	// _	{DIGIT_L(0,0,0,0,0,0,0,0), DIGIT_H(0,0,0,1,0,0,0,0)}, 	// `	{DIGIT_L(0,0,0,1,0,0,1,0), DIGIT_H(1,0,0,1,0,0,1,0)}, 	// {	{DIGIT_L(0,0,0,0,1,0,0,0), DIGIT_H(0,0,0,0,1,0,0,1)}, 	// |	{DIGIT_L(1,0,0,0,0,1,1,0), DIGIT_H(1,0,0,0,0,1,0,1)}, 	// }	{DIGIT_L(1,0,0,0,0,0,0,0), DIGIT_H(0,0,0,0,0,0,1,0)}	// ~};static const char fipxcharacters[NUM_X_CHARACTERS] = {	DIGIT_X(1,1,1,0,1,1,1,1),	// 0	DIGIT_X(0,1,0,0,1,0,0,1),	// 1	DIGIT_X(1,1,0,1,0,1,1,1),	// 2	DIGIT_X(1,1,0,1,1,0,1,1),	// 3	DIGIT_X(0,1,1,1,1,0,0,1),	// 4	DIGIT_X(1,0,1,1,1,0,1,1),	// 5	DIGIT_X(1,0,1,1,1,1,1,1),	// 6	DIGIT_X(1,1,0,0,1,0,0,1),	// 7	DIGIT_X(1,1,1,1,1,1,1,1),	// 8	DIGIT_X(1,1,1,1,1,0,1,1),	// 9	DIGIT_X(0,0,0,1,0,0,0,0),	// -	DIGIT_X(0,0,0,0,0,0,0,0)	// };#endif#if defined(CONFIG_EM86XX_FIP_REF1)/* this array is used to display individual symbols   the format is [byte position][bit to turn on] - both zero based */static const char fipsymbols[NUM_SYMBOLS][2] = {	{0, 0}, 	/* DVD */	{0, 1}, 	/* PLAY */	{0, 2}, 	/* DTS */	{0, 3}, 	/* MP3 */	{0, 4}, 	/* DOLBY DIGITAL */	{0, 5}, 	/* MPEG4 */	{0, 6},		/* PAUSE */	{0, 7}, 	/* DVI */	{1, 0}, 	/* TWIRL1 */	{1, 1}, 	/* TWIRL2 */	{1, 2}, 	/* TWIRL3 */	{1, 3}, 	/* TWIRL4 */	{1, 4}, 	/* TWIRL5 */	{1, 5}, 	/* TWIRL6 */	{1, 6}, 	/* ALL */	{1, 7}, 	/* REPEAT */	{9, 6},		/* COLON_MIN_SEC */	{9, 7}, 	/* R1080 */	{12, 7}, 	/* R720 */	{15, 6}, 	/* COLON_HOUR_MIN */	{15, 7}, 	/* R480 */	{18, 7}, 	/* PAL */	{21, 7},	/* NTSC */};#elif defined(CONFIG_EM86XX_FIP_REF2)/* this array is used to display individual symbols   the format is [byte position][bit to turn on] - both zero based */static const char fipsymbols[NUM_SYMBOLS][2] = {	{0, 1},		// DVD	{0, 2},		// VCD	{0, 4},		// MP3	{0, 8}, 	// CD	{29, 1}, 	// Title	{27, 1}		// Track};#endif/* The buffer size defines the size of circular buffer to keep the FIP keys */#define BUF_SIZE		2/* Wait period, to avoid bouncing or repeatation? */#define WAIT_PERIOD		100/* Default brightness level */#define BRIGHTNESS		0x7/* The number of key polling per second */#define POLL_PER_SECOND		10#ifdef __KERNEL__/* The major device number and name */#ifdef CONFIG_DEVFS_FS#define FIP_DEV_MAJOR		0#else#define FIP_DEV_MAJOR		128	/* May need to be changed?? */#endif MODULE_DESCRIPTION("EM86xx front panel fip driver\n");MODULE_AUTHOR("Mambo standalone team");MODULE_LICENSE("Proprietary, Copyright (c) 2004 Sigma Designs Inc. "		"All rights reserved.");/* Wait queue, may be used if block mode is on */DECLARE_WAIT_QUEUE_HEAD(fip_wq);MODULE_PARM(buffer_size, "i");MODULE_PARM(wait_period, "i");MODULE_PARM(brightness, "i");MODULE_PARM(poll_per_sec, "i");/* Some prototypes */static int fip_open(struct inode *, struct file *);static int fip_release(struct inode *, struct file *);static int fip_read(struct file *, char *, size_t, loff_t *);static int fip_write(struct file *, const char *, size_t, loff_t *);static int fip_ioctl(struct inode *, struct file *, unsigned int, unsigned long);static unsigned int fip_poll(struct file *, struct poll_table_struct *);static int buffer_size = BUF_SIZE;static int wait_period = WAIT_PERIOD;static unsigned int poll_per_sec = POLL_PER_SECOND;static int fip_irq = IRQ_FRONTPANEL;static void fip_isr(int irq, void *dev_id, struct pt_regs *regs);static void fip_poll_key(unsigned long devid);static struct timer_list fip_timer;#if 0static struct tq_struct immediate;#endifstatic void fip_write_text(const int position, const char *text, const int flags);static int fip_show_hms(int hour, int minute, int second);static void fip_display_symbol(const int symbol, const int on);static int fip_display_character(const int position, const char character);static void fip_display_raw(const int byte, const int bit, const int on); static int is_fip_busy(void);static int is_fip_busy_nowait(void);static void fip_clear(void);#else /* For Bootloader */void fip_write_text(const int position, const char *text, const int flags);void fip_display_symbol(const int symbol, const int on);int fip_display_character(const int position, const char character);void fip_display_raw(const int byte, const int bit, const int on); int is_fip_busy(void);void fip_clear(void);

⌨️ 快捷键说明

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