| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 1 | /* | 
 | 2 |  * LED, LCD and Button panel driver for Cobalt | 
 | 3 |  * | 
 | 4 |  * This file is subject to the terms and conditions of the GNU General Public | 
 | 5 |  * License.  See the file "COPYING" in the main directory of this archive | 
 | 6 |  * for more details. | 
 | 7 |  * | 
 | 8 |  * Copyright (C) 1996, 1997 by Andrew Bose | 
 | 9 |  * | 
 | 10 |  * Linux kernel version history: | 
 | 11 |  *       March 2001: Ported from 2.0.34  by Liam Davies | 
 | 12 |  * | 
 | 13 |  */ | 
 | 14 |  | 
 | 15 | // function headers | 
 | 16 |  | 
 | 17 | static int dqpoll(volatile unsigned long, volatile unsigned char ); | 
 | 18 | static int timeout(volatile unsigned long); | 
 | 19 |  | 
 | 20 | #define LCD_CHARS_PER_LINE 40 | 
 | 21 | #define FLASH_SIZE 524288 | 
 | 22 | #define MAX_IDLE_TIME 120 | 
 | 23 |  | 
 | 24 | struct lcd_display { | 
| Ralf Baechle | c4ed38a | 2005-02-21 16:18:36 +0000 | [diff] [blame] | 25 |         unsigned buttons; | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 26 |         int size1; | 
 | 27 |         int size2; | 
 | 28 |         unsigned char line1[LCD_CHARS_PER_LINE]; | 
 | 29 |         unsigned char line2[LCD_CHARS_PER_LINE]; | 
 | 30 |         unsigned char cursor_address; | 
 | 31 |         unsigned char character; | 
 | 32 |         unsigned char leds; | 
 | 33 |         unsigned char *RomImage; | 
 | 34 | }; | 
 | 35 |  | 
 | 36 |  | 
 | 37 |  | 
 | 38 | #define LCD_DRIVER	"Cobalt LCD Driver v2.10" | 
 | 39 |  | 
 | 40 | #define LCD		"lcd: " | 
 | 41 |  | 
 | 42 | #define kLCD_IR		0x0F000000 | 
 | 43 | #define kLCD_DR		0x0F000010 | 
 | 44 | #define kGPI		0x0D000000 | 
 | 45 | #define kLED		0x0C000000 | 
 | 46 |  | 
 | 47 | #define kDD_R00         0x00 | 
 | 48 | #define kDD_R01         0x27 | 
 | 49 | #define kDD_R10         0x40 | 
 | 50 | #define kDD_R11         0x67 | 
 | 51 |  | 
 | 52 | #define kLCD_Addr       0x00000080 | 
 | 53 |  | 
 | 54 | #define LCDTimeoutValue	0xfff | 
 | 55 |  | 
 | 56 |  | 
 | 57 | // Flash definitions AMD 29F040 | 
 | 58 | #define kFlashBase	0x0FC00000 | 
 | 59 |  | 
 | 60 | #define kFlash_Addr1    0x5555 | 
 | 61 | #define kFlash_Addr2    0x2AAA | 
 | 62 | #define kFlash_Data1    0xAA | 
 | 63 | #define kFlash_Data2    0x55 | 
 | 64 | #define kFlash_Prog     0xA0 | 
 | 65 | #define kFlash_Erase3   0x80 | 
 | 66 | #define kFlash_Erase6   0x10 | 
 | 67 | #define kFlash_Read     0xF0 | 
 | 68 |  | 
 | 69 | #define kFlash_ID       0x90 | 
 | 70 | #define kFlash_VenAddr  0x00 | 
 | 71 | #define kFlash_DevAddr  0x01 | 
 | 72 | #define kFlash_VenID    0x01 | 
 | 73 | #define kFlash_DevID    0xA4    // 29F040 | 
 | 74 | //#define kFlash_DevID  0xAD    // 29F016 | 
 | 75 |  | 
 | 76 |  | 
 | 77 | // Macros | 
 | 78 |  | 
 | 79 | #define LCDWriteData(x)	outl((x << 24), kLCD_DR) | 
 | 80 | #define LCDWriteInst(x)	outl((x << 24), kLCD_IR) | 
 | 81 |  | 
 | 82 | #define LCDReadData	(inl(kLCD_DR) >> 24) | 
 | 83 | #define LCDReadInst	(inl(kLCD_IR) >> 24) | 
 | 84 |  | 
 | 85 | #define GPIRead		(inl(kGPI) >> 24) | 
 | 86 |  | 
 | 87 | #define LEDSet(x)	outb((char)x, kLED) | 
 | 88 |  | 
 | 89 | #define WRITE_GAL(x,y)	outl(y, 0x04000000 | (x)) | 
 | 90 | #define BusyCheck()	while ((LCDReadInst & 0x80) == 0x80) | 
 | 91 |  | 
 | 92 | #define WRITE_FLASH(x,y) outb((char)y, kFlashBase | (x)) | 
 | 93 | #define READ_FLASH(x)	(inb(kFlashBase | (x))) | 
 | 94 |  | 
 | 95 |  | 
 | 96 |  | 
 | 97 | /* | 
 | 98 |  * Function command codes for io_ctl. | 
 | 99 |  */ | 
 | 100 | #define LCD_On			1 | 
 | 101 | #define LCD_Off			2 | 
 | 102 | #define LCD_Clear		3 | 
 | 103 | #define LCD_Reset		4 | 
 | 104 | #define LCD_Cursor_Left		5 | 
 | 105 | #define LCD_Cursor_Right	6 | 
 | 106 | #define LCD_Disp_Left		7 | 
 | 107 | #define LCD_Disp_Right		8 | 
 | 108 | #define LCD_Get_Cursor		9 | 
 | 109 | #define LCD_Set_Cursor		10 | 
 | 110 | #define LCD_Home		11 | 
 | 111 | #define LCD_Read		12 | 
 | 112 | #define LCD_Write		13 | 
 | 113 | #define LCD_Cursor_Off		14 | 
 | 114 | #define LCD_Cursor_On		15 | 
 | 115 | #define LCD_Get_Cursor_Pos	16 | 
 | 116 | #define LCD_Set_Cursor_Pos	17 | 
 | 117 | #define LCD_Blink_Off           18 | 
 | 118 |  | 
 | 119 | #define LED_Set			40 | 
 | 120 | #define LED_Bit_Set		41 | 
 | 121 | #define LED_Bit_Clear		42 | 
 | 122 |  | 
 | 123 |  | 
 | 124 | //  Button defs | 
 | 125 | #define BUTTON_Read             50 | 
 | 126 |  | 
 | 127 | //  Flash command codes | 
 | 128 | #define FLASH_Erase		60 | 
 | 129 | #define FLASH_Burn		61 | 
 | 130 | #define FLASH_Read		62 | 
 | 131 |  | 
 | 132 |  | 
 | 133 | // Ethernet LINK check hackaroo | 
 | 134 | #define LINK_Check              90 | 
 | 135 | #define LINK_Check_2		91 | 
 | 136 |  | 
 | 137 | //  Button patterns  _B - single layer lcd boards | 
 | 138 |  | 
 | 139 | #define BUTTON_NONE               0x3F | 
 | 140 | #define BUTTON_NONE_B             0xFE | 
 | 141 |  | 
 | 142 | #define BUTTON_Left               0x3B | 
 | 143 | #define BUTTON_Left_B             0xFA | 
 | 144 |  | 
 | 145 | #define BUTTON_Right              0x37 | 
 | 146 | #define BUTTON_Right_B            0xDE | 
 | 147 |  | 
 | 148 | #define BUTTON_Up                 0x2F | 
 | 149 | #define BUTTON_Up_B               0xF6 | 
 | 150 |  | 
 | 151 | #define BUTTON_Down               0x1F | 
 | 152 | #define BUTTON_Down_B             0xEE | 
 | 153 |  | 
 | 154 | #define BUTTON_Next               0x3D | 
 | 155 | #define BUTTON_Next_B             0x7E | 
 | 156 |  | 
 | 157 | #define BUTTON_Enter              0x3E | 
 | 158 | #define BUTTON_Enter_B            0xBE | 
 | 159 |  | 
 | 160 | #define BUTTON_Reset_B            0xFC | 
 | 161 |  | 
 | 162 |  | 
 | 163 | // debounce constants | 
 | 164 |  | 
 | 165 | #define BUTTON_SENSE            160000 | 
 | 166 | #define BUTTON_DEBOUNCE		5000 | 
 | 167 |  | 
 | 168 |  | 
 | 169 | //  Galileo register stuff | 
 | 170 |  | 
 | 171 | #define kGal_DevBank2Cfg        0x1466DB33 | 
 | 172 | #define kGal_DevBank2PReg       0x464 | 
 | 173 | #define kGal_DevBank3Cfg        0x146FDFFB | 
 | 174 | #define kGal_DevBank3PReg       0x468 | 
 | 175 |  | 
 | 176 | // Network | 
 | 177 |  | 
 | 178 | #define kIPADDR			1 | 
 | 179 | #define kNETMASK		2 | 
 | 180 | #define kGATEWAY		3 | 
 | 181 | #define kDNS			4 | 
 | 182 |  | 
 | 183 | #define kClassA			5 | 
 | 184 | #define kClassB			6 | 
 | 185 | #define kClassC			7 | 
 | 186 |  |