📄 1013.frequency.patch
字号:
++#define FIP_DIVIDER 27 /* default value */+#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++#define FIP_DISPLAY_MODE 0xa+#define MAX_FIP_RAM 23+#define NUM_SYMBOLS 23+#define NUM_CHARACTERS 72+#define NUM_DIGITS 7++#define L_OFF -1 //means light is or should be off+#define FIP_NO_CLEAR 0x0004++/* Valid symbols */+#define DVD_FIP_ON 0+#define PLAY_FIP_ON 1+#define DTS_FIP_ON 2+#define MP3_FIP_ON 3+#define DOLBYDIGITAL_FIP_ON 4+#define MPEG4_FIP_ON 5+#define PAUSE_FIP_ON 6+#define DVI_FIP_ON 7+#define TWIRL_1_FIP_ON 8+#define TWIRL_2_FIP_ON 9+#define TWIRL_3_FIP_ON 10+#define TWIRL_4_FIP_ON 11+#define TWIRL_5_FIP_ON 12+#define TWIRL_6_FIP_ON 13+#define ALL_FIP_ON 14+#define REPEAT_FIP_ON 15+#define COLON_MIN_SEC_FIP_ON 16+#define R1080_FIP_ON 17+#define R720_FIP_ON 18+#define COLON_HOUR_MIN_FIP_ON 19+#define R480_FIP_ON 20+#define PAL_FIP_ON 21+#define NTSC_FIP_ON 22++/* Alignment */+#define FIP_LEFT 0x0000 /* flags for fip_write_text() */+#define FIP_CENTER 0x0001+#define FIP_RIGHT 0x0002++/*+ 14 SEGMENT LCD (EXTENDED CHARACTERS MAP)++ a + -----+f |\j| /| b + |i\|/k|+ g-- --h+e |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|_";++/* we use the inverted mask for clearing a digit without clearing other things */+static const char fipcharactermask[2] = {+ DIGIT_L(1,1,0,0,0,0,0,0), + DIGIT_H(0,0,0,0,0,0,0,0)+};++/* 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)} // _+};++/* 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 */+};++/* Default brightness level */+#define BRIGHTNESS 0x7++static const unsigned long fip_base = (unsigned long)KSEG1ADDR(FIP_BASE);+static char fipram[MAX_FIP_RAM] = {0};+static int brightness = BRIGHTNESS;++static void fip_write_reg(unsigned int offset, unsigned int val);+static unsigned int fip_read_reg(unsigned int offset);++static unsigned long fip_config = 0;++#define ABS(x) (((x) >= 0) ? (x) : -(x))+#define DIVIDE_FACTOR 2++static int strlen(const char *str)+{+ register int i;+ for (i = 0; *str != '\0'; i++, str++);+ return(i);+}++static void fip_usleep(int usec)+{+ unsigned long start, end;+ start = *((volatile unsigned long *)KSEG1ADDR(REG_BASE_system_block + SYS_xtal_in_cnt));+ end = start + (usec * 27);+ + if (end <= start) + while (*((volatile unsigned long *)KSEG1ADDR(REG_BASE_system_block + SYS_xtal_in_cnt)) > start);+ while (*((volatile unsigned long *)KSEG1ADDR(REG_BASE_system_block + SYS_xtal_in_cnt)) < end);+}++static unsigned int fip_read_reg(unsigned int offset)+{+ unsigned int val = *((volatile unsigned int *)(fip_base + offset));+ return(val);+}++static void fip_write_reg(unsigned int offset, unsigned int val)+{+ *((volatile unsigned int *)(fip_base + offset)) = val;+ __sync();+}++static int is_fip_busy(void)+{+ fip_usleep(10);+ return((fip_read_reg(FIP_CONFIG) & FIP_BUSY) != 0);+}++static void fip_wait_ready(void)+{+ while (is_fip_busy());+}++static void fip_user_display(int adr, int data)+{+ fip_wait_ready();+ fip_write_reg(FIP_DISPLAY_DATA, data);+ fip_write_reg(FIP_COMMAND, FIP_CMD_ADR_SETTING | (adr));+}++static int fip_display_character(const int position, const char character) +{+ int i, byte1, byte2;+ unsigned char current_contents0, current_contents1;+ + if ((position < 1) || (position > NUM_DIGITS)) + return(0);++ for (i = 0; i < NUM_CHARACTERS; i++) {+ if (character == fipcharactersmap[i]) {+ byte1 = 24 - (3 * position);+ byte2 = 25 - (3 * position);++ current_contents0 = fipram[byte1];+ current_contents1 = fipram[byte2];++ /* clear */ + fipram[byte1] &= fipcharactermask[0];+ fipram[byte2] &= fipcharactermask[1];+ + /* set new bits */+ fipram[byte1] |= fipcharacters[i][0];+ fipram[byte2] |= fipcharacters[i][1];++ /* display if necessary */+ if (current_contents0 != fipram[byte1])+ fip_user_display(byte1, fipram[byte1]);+ if (current_contents1 != fipram[byte2])+ fip_user_display(byte2, fipram[byte2]);+ return(1);+ }+ }+ return(0);+}++static void fip_clear(void)+{+ register int i;++ for (i = 0; i < MAX_FIP_RAM; i++) {+ fipram[i] = 0;+ fip_user_display(i, fipram[i]);+ }+}++static void fip_display_raw(const int byte, const int bit, const int on) +{+ unsigned char current_contents;+ current_contents = fipram[byte];+ if (on != 0)+ fipram[byte] |= (1 << bit);+ else+ fipram[byte] &= ~(1 << bit);++ /* display only if necessary */+ if (current_contents != fipram[byte])+ fip_user_display(byte, fipram[byte]);+}++static void fip_display_symbol(const int symbol, const int on) +{+ if ((symbol < 0) || (symbol >= NUM_SYMBOLS)) + return;+ fip_display_raw(fipsymbols[symbol][0], fipsymbols[symbol][1], on);+}++static void fip_write_text(const int position, const char *text, const int flags) +{+ int x, i, j;+ int textLen = strlen(text);++ if (flags & FIP_CENTER)+ x = (position > 0) ? position - textLen / 2 : (NUM_DIGITS - textLen) / 2 + 1;+ else if (flags & FIP_RIGHT)+ x = (position > 0) ? position - textLen : NUM_DIGITS - textLen + 1;+ else + x = (position > 0) ? position : 1;+ if (x < 1) x = 1;++ if ((flags & FIP_NO_CLEAR) == 0) {+ /* clear colons */+ fip_display_symbol(COLON_HOUR_MIN_FIP_ON, 0);+ fip_display_symbol(COLON_MIN_SEC_FIP_ON, 0);+ }++ /* show/write text */+ j = 0;+ for (i = 1; i <= NUM_DIGITS; i++) {+ if ((i < x) || (i >= (x+textLen)))+ fip_display_character(i, ' ');+ else if (!fip_display_character(i, text[j++])) {+ break;+ }+ }+}++unsigned long fip_poll_key(unsigned long *table, unsigned long size)+{+ unsigned long key = 0L;++ fip_wait_ready();+ fip_write_reg(FIP_COMMAND, FIP_CMD_DATA_SET_RW_MODE_READ_KEYS);+ fip_wait_ready();+ key = fip_read_reg(FIP_KEY_DATA1); ++ if ((key == 0) || (table == 0) || (*table == 0)) {+#ifdef FC_DEBUG+ if (table == 0)+ uart_puts("NULL table\n");+ if (*table == 0)+ uart_puts("NULL content\n");+ if (key != 0)+ uart_puts("Got any FIP key\n");+#endif+ return(key);+ } else {+ unsigned int i;+ for (i = 0; i < size; i++, table++) {+ if (*table == 0)+ break;+ else if (key == *table) {+#ifdef FC_DEBUG+ uart_puts("Got defined FIP key\n");+#endif+ return(key);+ }+ }+ return(0);+ }+}++int fip_open(void)+{+ unsigned long key = 0L;++#ifdef FC_DEBUG+ uart_puts("Polling for FIP key.\n");+#endif+ fip_config = fip_read_reg(FIP_CONFIG);++ if ((fip_config & FIP_ENABLE) == 0) {+ fip_write_reg(FIP_CONFIG, (FIP_DIVIDER | FIP_ENABLE));+ fip_wait_ready();++ /* Clear exisiting IRQ, if any */+ fip_write_reg(FIP_INT, 0x3);+ fip_wait_ready();++ /* select display mode */+ fip_write_reg(FIP_COMMAND, FIP_DISPLAY_MODE);+ fip_wait_ready();++ /* select brightness of display and turn it on */+ fip_write_reg(FIP_COMMAND, FIP_CMD_DISP_CTRL_TURN_DISPLAY_ON | brightness);+ fip_wait_ready();++ /* select write to display and fixed addressing */+ fip_write_reg(FIP_COMMAND, FIP_CMD_DATA_SET_ADR_MODE_FIXED_ADR);+ fip_wait_ready();++ fip_clear();+ fip_write_text(0, "STANDBY", FIP_CENTER);++ /* Flush buffer */+ while ((key = fip_poll_key(0, 0)) != 0);+ }++ return(0);+}++int fip_close(void)+{+#ifdef FC_DEBUG+ uart_puts("Stop polling for FIP key.\n");+#endif+ fip_write_reg(FIP_CONFIG, fip_config);+ udelay(1000);+ return(0);+}+diff -Naur --exclude=CVS --exclude='*.o' --exclude='*.a' --exclude='*.so' --exclude='*.elf' --exclude=System.map --exclude=Makefile.d --exclude='*log' --exclude='*log2' --exclude='*~' --exclude='.*~' --exclude='.#*' --exclude='*.bak' --exclude='*.orig' --exclude='*.rej' --exclude='core.[0-9]*' --exclude=.depend --exclude='.*.o.flags' --exclude='*.gz' --exclude=.depend --exclude='.*.o.flags' --exclude='*.gz' --exclude=vmlinux --exclude=vmlinux.bin --exclude=yamon-02.06-SIGMADESIGNS-01_el.bin linux-2.6.15.ref/arch/mips/tangox/fctrl/lib/fc/ir.c linux-2.6.15/arch/mips/tangox/fctrl/lib/fc/ir.c--- linux-2.6.15.ref/arch/mips/tangox/fctrl/lib/fc/ir.c 1969-12-31 16:00:00.000000000 -0800+++ linux-2.6.15/arch/mips/tangox/fctrl/lib/fc/ir.c 2007-07-06 10:25:03.000000000 -0700@@ -0,0 +1,262 @@+/*****************************************+ * Copyright
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -