📄 fipkernel.c.bak
字号:
/***************************************** * Copyright © 2001-2004 * 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 + -