| 1 |
/* linux/arch/arm/mach-msm/board-htcrhod-panel.c |
| 2 |
* Based on board-trout-panel.c by: Brian Swetland <swetland@google.com> |
| 3 |
* Remodelled based on board-supersonic-panel.c by: Jay Tu <jay_tu@htc.com> |
| 4 |
*/ |
| 5 |
|
| 6 |
#include <linux/kernel.h> |
| 7 |
#include <linux/init.h> |
| 8 |
#include <linux/platform_device.h> |
| 9 |
#include <linux/delay.h> |
| 10 |
#include <linux/leds.h> |
| 11 |
#include <linux/clk.h> |
| 12 |
#include <linux/err.h> |
| 13 |
#include <linux/microp-klt.h> |
| 14 |
|
| 15 |
#include <asm/io.h> |
| 16 |
#include <asm/gpio.h> |
| 17 |
#include <asm/mach-types.h> |
| 18 |
|
| 19 |
#include <mach/msm_fb.h> |
| 20 |
#include <mach/vreg.h> |
| 21 |
#include <linux/microp-klt.h> |
| 22 |
|
| 23 |
//#include "board-htctopaz.h" |
| 24 |
#include "board-htcrhodium.h" |
| 25 |
#include "proc_comm_wince.h" |
| 26 |
#include "devices.h" |
| 27 |
|
| 28 |
/* TAG JB 01/25/2011 */ |
| 29 |
#define PANEL_TYPE_AUO_ES1 0x1 |
| 30 |
#define PANEL_TYPE_HITACHI 0x5 |
| 31 |
#define PANEL_TYPE_SEID 0x7 // Named EID in Rhod400 |
| 32 |
#define PANEL_TYPE_SHARP_EVT 0xD |
| 33 |
#define PANEL_TYPE_TEMP 0x12 // same powerup sequence than Hitachi |
| 34 |
#define PANEL_TYPE_AUO_ES2 0x13 |
| 35 |
#define PANEL_TYPE_EID 0x14 // Named EID ES3 in Rhod400 |
| 36 |
#define PANEL_TYPE_SHARP_DVT 0x15 |
| 37 |
|
| 38 |
/* panel type, 1 = Auo_ES1 (AU Optronics), 7 = Seid (Sanyo), 0xD = Sharp EVT, 0x12 = Temp, 0x13 = Auo_ES2 (AU Optronics), 0x14 = Eid (Epson), 0x15 = Sharp DVT */ |
| 39 |
static int currentPanelType = 0; |
| 40 |
module_param(currentPanelType, int, S_IRUGO | S_IWUSR | S_IWGRP); |
| 41 |
|
| 42 |
struct mddi_table { |
| 43 |
uint16_t reg; |
| 44 |
uint16_t value; |
| 45 |
int sleep; |
| 46 |
}; |
| 47 |
|
| 48 |
static struct mddi_table mddi_PanelPowerOff_table[] = { |
| 49 |
/* Common to all panels except Temp panel */ |
| 50 |
{0x2800, 1, 0}, |
| 51 |
{0x5300,0x28, 0}, |
| 52 |
{0x5500,0, 0}, |
| 53 |
{0x5300,8, 0}, |
| 54 |
{0x5E03,0, 0}, |
| 55 |
{0x5300,0, 0}, |
| 56 |
{0x1000,1, 0}, |
| 57 |
}; |
| 58 |
|
| 59 |
static struct mddi_table mddi_Auo_ES1_table_part0[] = { |
| 60 |
{0x2200, 3, 0}, |
| 61 |
{0xF200,0xFC, 0}, |
| 62 |
{0xF207, 4, 0}, |
| 63 |
{0xB600,0x40, 1}, |
| 64 |
{0xF000,0x18, 0}, |
| 65 |
{0x6A02, 1, 0}, |
| 66 |
{0xF007,0x11, 0}, |
| 67 |
{0xC100,0x45, 0}, |
| 68 |
{0xC200,0x31, 0}, |
| 69 |
{0xC202,0x30, 0}, |
| 70 |
{0xC000,0x90, 0}, |
| 71 |
{0xC001, 0, 0}, |
| 72 |
{0xC002,0x6B, 0}, |
| 73 |
{0xC003, 0, 0}, |
| 74 |
{0xC700,0x83, 0}, |
| 75 |
{0xE000, 0, 0}, |
| 76 |
{0xE001, 5, 0}, |
| 77 |
{0xE002,0x15, 0}, |
| 78 |
{0xE003,0x24, 0}, |
| 79 |
{0xE004,0x1B, 0}, |
| 80 |
{0xE005,0x2F, 0}, |
| 81 |
{0xE006,0x60, 0}, |
| 82 |
{0xE007,0x27, 0}, |
| 83 |
{0xE008,0x20, 0}, |
| 84 |
{0xE009,0x27, 0}, |
| 85 |
{0xE00A,0x6F, 0}, |
| 86 |
{0xE00B,0x15, 0}, |
| 87 |
{0xE00C,0x39, 0}, |
| 88 |
{0xE00D,0x4E, 0}, |
| 89 |
{0xE00E,0x61, 0}, |
| 90 |
{0xE00F,0x82, 0}, |
| 91 |
{0xE010,0x2B, 0}, |
| 92 |
{0xE011,0x32, 0}, |
| 93 |
{0xE100, 0, 0}, |
| 94 |
{0xE101, 7, 0}, |
| 95 |
{0xE102,0x19, 0}, |
| 96 |
{0xE103,0x2B, 0}, |
| 97 |
{0xE104,0x1B, 0}, |
| 98 |
{0xE105,0x2E, 0}, |
| 99 |
{0xE106,0x60, 0}, |
| 100 |
{0xE107,0x3E, 0}, |
| 101 |
{0xE108,0x20, 0}, |
| 102 |
{0xE109,0x27, 0}, |
| 103 |
{0xE10A,0x8F, 0}, |
| 104 |
{0xE10B,0x15, 0}, |
| 105 |
{0xE10C,0x38, 0}, |
| 106 |
{0xE10D,0x4D, 0}, |
| 107 |
{0xE10E,0x90, 0}, |
| 108 |
{0xE10F,0xB4, 0}, |
| 109 |
{0xE110,0x63, 0}, |
| 110 |
{0xE111,0x69, 0}, |
| 111 |
{0xE200, 0, 0}, |
| 112 |
{0xE201, 5, 0}, |
| 113 |
{0xE202,0x15, 0}, |
| 114 |
{0xE203,0x24, 0}, |
| 115 |
{0xE204,0x1B, 0}, |
| 116 |
{0xE205,0x2F, 0}, |
| 117 |
{0xE206,0x60, 0}, |
| 118 |
{0xE207,0x27, 0}, |
| 119 |
{0xE208,0x20, 0}, |
| 120 |
{0xE209,0x27, 0}, |
| 121 |
{0xE20A,0x6F, 0}, |
| 122 |
{0xE20B,0x15, 0}, |
| 123 |
{0xE20C,0x39, 0}, |
| 124 |
{0xE20D,0x4E, 0}, |
| 125 |
{0xE20E,0x61, 0}, |
| 126 |
{0xE20F,0x82, 0}, |
| 127 |
{0xE210,0x2B, 0}, |
| 128 |
{0xE211,0x32, 0}, |
| 129 |
{0xE300, 0, 0}, |
| 130 |
{0xE301, 7, 0}, |
| 131 |
{0xE302,0x19, 0}, |
| 132 |
{0xE303,0x2B, 0}, |
| 133 |
{0xE304,0x1B, 0}, |
| 134 |
{0xE305,0x2E, 0}, |
| 135 |
{0xE306,0x60, 0}, |
| 136 |
{0xE307,0x3E, 0}, |
| 137 |
{0xE308,0x20, 0}, |
| 138 |
{0xE309,0x27, 0}, |
| 139 |
{0xE30A,0x8F, 0}, |
| 140 |
{0xE30B,0x15, 0}, |
| 141 |
{0xE30C,0x38, 0}, |
| 142 |
{0xE30D,0x4D, 0}, |
| 143 |
{0xE30E,0x90, 0}, |
| 144 |
{0xE30F,0xB4, 0}, |
| 145 |
{0xE310,0x63, 0}, |
| 146 |
{0xE311,0x69, 0}, |
| 147 |
{0xE400, 0, 0}, |
| 148 |
{0xE401, 5, 0}, |
| 149 |
{0xE402,0x15, 0}, |
| 150 |
{0xE403,0x24, 0}, |
| 151 |
{0xE404,0x1B, 0}, |
| 152 |
{0xE405,0x2F, 0}, |
| 153 |
{0xE406,0x60, 0}, |
| 154 |
{0xE407,0x27, 0}, |
| 155 |
{0xE408,0x20, 0}, |
| 156 |
{0xE409,0x27, 0}, |
| 157 |
{0xE40A,0x6F, 0}, |
| 158 |
{0xE40B,0x15, 0}, |
| 159 |
{0xE40C,0x39, 0}, |
| 160 |
{0xE40D,0x4E, 0}, |
| 161 |
{0xE40E,0x61, 0}, |
| 162 |
{0xE40F,0x82, 0}, |
| 163 |
{0xE410,0x2B, 0}, |
| 164 |
{0xE411,0x32, 0}, |
| 165 |
{0xE500, 0, 0}, |
| 166 |
{0xE501, 7, 0}, |
| 167 |
{0xE502,0x19, 0}, |
| 168 |
{0xE503,0x2B, 0}, |
| 169 |
{0xE504,0x1B, 0}, |
| 170 |
{0xE505,0x2E, 0}, |
| 171 |
{0xE506,0x60, 0}, |
| 172 |
{0xE507,0x3E, 0}, |
| 173 |
{0xE508,0x20, 0}, |
| 174 |
{0xE509,0x27, 0}, |
| 175 |
{0xE50A,0x8F, 0}, |
| 176 |
{0xE50B,0x15, 0}, |
| 177 |
{0xE50C,0x38, 0}, |
| 178 |
{0xE50D,0x4D, 0}, |
| 179 |
{0xE50E,0x90, 0}, |
| 180 |
{0xE50F,0xB4, 0}, |
| 181 |
{0xE510,0x63, 0}, |
| 182 |
{0xE511,0x69, 0}, |
| 183 |
}; |
| 184 |
|
| 185 |
static struct mddi_table mddi_Auo_ES1_table_part1[] = { |
| 186 |
{0x5100, 0, 0}, |
| 187 |
{0x1100, 1, 0x64}, |
| 188 |
|
| 189 |
{0x4E00,0, 0}, |
| 190 |
{0x3A00,5, 0}, |
| 191 |
{0x3500,2, 0}, |
| 192 |
{0x4400,0, 0}, |
| 193 |
{0x4401,0, 0}, |
| 194 |
{0x5E00,0, 0}, |
| 195 |
{0x6A01,0, 0}, |
| 196 |
{0x6A02,1, 0}, |
| 197 |
{0x5301,0x10, 0}, |
| 198 |
{0x5500,2, 0}, |
| 199 |
{0x6A17,1, 0}, |
| 200 |
{0x6A18,0xFF, 0}, |
| 201 |
{0x2900,1, 0}, |
| 202 |
{0x5300,0x2C, 0}, |
| 203 |
{0x5E03,1, 0}, |
| 204 |
}; |
| 205 |
|
| 206 |
static struct mddi_table mddi_Auo_ES2_table_part0[] = { |
| 207 |
{0xC000, 0x86, 0}, |
| 208 |
{0xC001, 0, 0}, |
| 209 |
{0xC002, 0x86, 0}, |
| 210 |
{0xC003, 0, 0}, |
| 211 |
{0xB600, 0x30, 0}, |
| 212 |
{0xB602, 0x30, 0}, |
| 213 |
{0xC100, 0x40, 0}, |
| 214 |
{0xC200, 0x21, 0}, |
| 215 |
{0xC202, 2, 0}, |
| 216 |
{0xE000, 0, 0}, |
| 217 |
{0xE001, 0x14, 0}, |
| 218 |
{0xE002, 0x29, 0}, |
| 219 |
{0xE003, 0x3A, 0}, |
| 220 |
{0xE004, 0x1D, 0}, |
| 221 |
{0xE005, 0x30, 0}, |
| 222 |
{0xE006, 0x61, 0}, |
| 223 |
{0xE007, 0x3E, 0}, |
| 224 |
{0xE008, 0x21, 0}, |
| 225 |
{0xE009, 0x28, 0}, |
| 226 |
{0xE00A, 0x85, 0}, |
| 227 |
{0xE00B, 0x16, 0}, |
| 228 |
{0xE00C, 0x3B, 0}, |
| 229 |
{0xE00D, 0x4C, 0}, |
| 230 |
{0xE00E, 0x78, 0}, |
| 231 |
{0xE00F, 0x96, 0}, |
| 232 |
{0xE010, 0x4A, 0}, |
| 233 |
{0xE011, 0x4D, 0}, |
| 234 |
{0xE100, 0, 0}, |
| 235 |
{0xE101, 0x14, 0}, |
| 236 |
{0xE102, 0x29, 0}, |
| 237 |
{0xE103, 0x3A, 0}, |
| 238 |
{0xE104, 0x1D, 0}, |
| 239 |
{0xE105, 0x30, 0}, |
| 240 |
{0xE106, 0x61, 0}, |
| 241 |
{0xE107, 0x3E, 0}, |
| 242 |
{0xE108, 0x21, 0}, |
| 243 |
{0xE109, 0x28, 0}, |
| 244 |
{0xE10A, 0x85, 0}, |
| 245 |
{0xE10B, 0x16, 0}, |
| 246 |
{0xE10C, 0x3B, 0}, |
| 247 |
{0xE10D, 0x4C, 0}, |
| 248 |
{0xE10E, 0x78, 0}, |
| 249 |
{0xE10F, 0x96, 0}, |
| 250 |
{0xE110, 0x4A, 0}, |
| 251 |
{0xE111, 0x4D, 0}, |
| 252 |
{0xE200, 0x60, 0}, |
| 253 |
{0xE201, 0x62, 0}, |
| 254 |
{0xE202, 0x68, 0}, |
| 255 |
{0xE203, 0x6F, 0}, |
| 256 |
{0xE204, 0x13, 0}, |
| 257 |
{0xE205, 0x26, 0}, |
| 258 |
{0xE206, 0x59, 0}, |
| 259 |
{0xE207, 0x49, 0}, |
| 260 |
{0xE208, 0x1E, 0}, |
| 261 |
{0xE209, 0x26, 0}, |
| 262 |
{0xE20A, 0x88, 0}, |
| 263 |
{0xE20B, 0xF, 0}, |
| 264 |
{0xE20C, 0x2A, 0}, |
| 265 |
{0xE20D, 0x3D, 0}, |
| 266 |
{0xE20E, 0x9C, 0}, |
| 267 |
{0xE20F, 0xC2, 0}, |
| 268 |
{0xE210, 0x4C, 0}, |
| 269 |
{0xE211, 0x4D, 0}, |
| 270 |
{0xE300, 0x60, 0}, |
| 271 |
{0xE301, 0x62, 0}, |
| 272 |
{0xE302, 0x68, 0}, |
| 273 |
{0xE303, 0x6F, 0}, |
| 274 |
{0xE304, 0x13, 0}, |
| 275 |
{0xE305, 0x26, 0}, |
| 276 |
{0xE306, 0x59, 0}, |
| 277 |
{0xE307, 0x49, 0}, |
| 278 |
{0xE308, 0x1E, 0}, |
| 279 |
{0xE309, 0x26, 0}, |
| 280 |
{0xE30A, 0x88, 0}, |
| 281 |
{0xE30B, 0xF, 0}, |
| 282 |
{0xE30C, 0x2A, 0}, |
| 283 |
{0xE30D, 0x3D, 0}, |
| 284 |
{0xE30E, 0x9C, 0}, |
| 285 |
{0xE30F, 0xC2, 0}, |
| 286 |
{0xE310, 0x4C, 0}, |
| 287 |
{0xE311, 0x4D, 0}, |
| 288 |
{0xE400, 0x7E, 0}, |
| 289 |
{0xE401, 0x7F, 0}, |
| 290 |
{0xE402, 0x80, 0}, |
| 291 |
{0xE403, 0x8C, 0}, |
| 292 |
{0xE404, 0x18, 0}, |
| 293 |
{0xE405, 0x27, 0}, |
| 294 |
{0xE406, 0x5A, 0}, |
| 295 |
{0xE407, 0x56, 0}, |
| 296 |
{0xE408, 0x1E, 0}, |
| 297 |
{0xE409, 0x26, 0}, |
| 298 |
{0xE40A, 0x8E, 0}, |
| 299 |
{0xE40B, 0x16, 0}, |
| 300 |
{0xE40C, 0x3B, 0}, |
| 301 |
{0xE40D, 0x5B, 0}, |
| 302 |
{0xE40E, 0x80, 0}, |
| 303 |
{0xE40F, 0x84, 0}, |
| 304 |
{0xE410, 6, 0}, |
| 305 |
{0xE411, 0x4D, 0}, |
| 306 |
{0xE500, 0x7E, 0}, |
| 307 |
{0xE501, 0x7F, 0}, |
| 308 |
{0xE502, 0x80, 0}, |
| 309 |
{0xE503, 0x8C, 0}, |
| 310 |
{0xE504, 0x18, 0}, |
| 311 |
{0xE505, 0x27, 0}, |
| 312 |
{0xE506, 0x5A, 0}, |
| 313 |
{0xE507, 0x56, 0}, |
| 314 |
{0xE508, 0x1E, 0}, |
| 315 |
{0xE509, 0x26, 0}, |
| 316 |
{0xE50A, 0x8E, 0}, |
| 317 |
{0xE50B, 0x16, 0}, |
| 318 |
{0xE50C, 0x3B, 0}, |
| 319 |
{0xE50D, 0x5B, 0}, |
| 320 |
{0xE50E, 0x80, 0}, |
| 321 |
{0xE50F, 0x84, 0}, |
| 322 |
{0xE510, 6, 0}, |
| 323 |
{0xE511, 0x4D, 0}, |
| 324 |
{0xF402, 0x14, 0}, |
| 325 |
{0xF100, 0xC, 0}, |
| 326 |
}; |
| 327 |
|
| 328 |
static struct mddi_table mddi_Auo_ES2_table_part1[] = { |
| 329 |
{0x5100, 0, 0}, |
| 330 |
{0x1100, 1, 0x64}, |
| 331 |
|
| 332 |
{0x4E00,0, 0}, |
| 333 |
{0x3A00,5, 1}, |
| 334 |
{0x3500,2, 0}, |
| 335 |
{0x4400,0, 0}, |
| 336 |
{0x4401,0, 0}, |
| 337 |
{0x5E00,0, 0}, |
| 338 |
{0x6A01,0, 0}, |
| 339 |
{0x6A02,1, 0}, |
| 340 |
{0x5301,0x10, 0}, |
| 341 |
{0x5500,2, 0}, |
| 342 |
{0x6A17,1, 0}, |
| 343 |
{0x6A18,0xFF, 0}, |
| 344 |
{0x2900,1, 0}, |
| 345 |
{0x5300,0x2C, 0}, |
| 346 |
{0x5E03,1, 0}, |
| 347 |
}; |
| 348 |
|
| 349 |
static struct mddi_table mddi_Eid_table[] = { |
| 350 |
{0x5100, 0, 0}, |
| 351 |
{0x1100, 1, 0x64}, |
| 352 |
|
| 353 |
{0x4E00,0, 0}, |
| 354 |
{0x180, 2, 0}, |
| 355 |
{0x880, 0, 0}, |
| 356 |
{0x2080, 0x33, 0}, |
| 357 |
{0x2680, 0x78, 0}, |
| 358 |
{0x2880, 0x3E, 0}, |
| 359 |
{0x2980, 4, 0}, |
| 360 |
{0x2C80, 0x22, 0}, |
| 361 |
{0x2E80, 0, 0}, |
| 362 |
{0xDE80, 2, 0}, |
| 363 |
{0x3A00, 0x55, 0}, |
| 364 |
|
| 365 |
{0x3500,0, 0}, |
| 366 |
{0x4400,0, 0}, |
| 367 |
{0x4401,0, 0}, |
| 368 |
{0x5E00,0, 0}, |
| 369 |
{0x6A01,0, 0}, |
| 370 |
{0x6A02,1, 0}, |
| 371 |
{0x5301,0x10, 0}, |
| 372 |
{0x5500,2, 0}, |
| 373 |
{0x6A17,1, 0}, |
| 374 |
{0x6A18,0xFF, 0}, |
| 375 |
{0x2900,1, 0}, |
| 376 |
{0x5300,0x2C, 0}, |
| 377 |
{0x5E03,1, 0}, |
| 378 |
}; |
| 379 |
|
| 380 |
static struct mddi_table mddi_Seid_table[] = { |
| 381 |
{0x5100, 0, 0}, |
| 382 |
{0x1100, 1, 0x64}, |
| 383 |
|
| 384 |
|
| 385 |
{0x680, 0x35, 0}, |
| 386 |
{0x2280, 0xC, 0}, |
| 387 |
{0x2480, 0x2B, 0}, |
| 388 |
{0x2580, 0x5B, 0}, |
| 389 |
{0x2680, 0x78, 0}, |
| 390 |
{0x2780, 0x5C, 0}, |
| 391 |
{0x2880, 0x3E, 0}, |
| 392 |
{0x2980, 4, 0}, |
| 393 |
{0xD080, 0x1A, 0}, |
| 394 |
{0xD180, 0x16, 0}, |
| 395 |
{0xD280, 6, 0}, |
| 396 |
{0xD380, 8, 0}, |
| 397 |
{0xD480, 0x57, 0}, |
| 398 |
{0xD580, 0x15, 0}, |
| 399 |
{0xD680, 0x5C, 0}, |
| 400 |
{0xD780, 2, 0}, |
| 401 |
{0xD880, 0xFC, 0}, |
| 402 |
{0xDC80, 6, 0}, |
| 403 |
{0xDD80, 2, 0}, |
| 404 |
{0xDE80, 2, 0}, |
| 405 |
{0x4080, 0, 0}, |
| 406 |
{0x4180, 0x13, 0}, |
| 407 |
{0x4280, 0x2C, 0}, |
| 408 |
{0x4380, 0x40, 0}, |
| 409 |
{0x4480, 0x1C, 0}, |
| 410 |
{0x4580, 0x30, 0}, |
| 411 |
{0x4680, 0x60, 0}, |
| 412 |
{0x4780, 0x54, 0}, |
| 413 |
{0x4880, 0x20, 0}, |
| 414 |
{0x4980, 0x27, 0}, |
| 415 |
{0x4A80, 0xAC, 0}, |
| 416 |
{0x4B80, 0x20, 0}, |
| 417 |
{0x4C80, 0x4B, 0}, |
| 418 |
{0x4D80, 0x63, 0}, |
| 419 |
{0x4E80, 0xA0, 0}, |
| 420 |
{0x4F80, 0xBC, 0}, |
| 421 |
{0x5080, 0x5A, 0}, |
| 422 |
{0x5180, 0x73, 0}, |
| 423 |
{0x5280, 0, 0}, |
| 424 |
{0x5880, 0, 0}, |
| 425 |
{0x5980, 0x18, 0}, |
| 426 |
{0x5A80, 0x36, 0}, |
| 427 |
{0x5B80, 0x52, 0}, |
| 428 |
{0x5C80, 0x1C, 0}, |
| 429 |
{0x5D80, 0x35, 0}, |
| 430 |
{0x5E80, 0x5F, 0}, |
| 431 |
{0x5F80, 0x46, 0}, |
| 432 |
{0x6080, 0x17, 0}, |
| 433 |
{0x6180, 0x1E, 0}, |
| 434 |
{0x6280, 0x9F, 0}, |
| 435 |
{0x6380, 0x1E, 0}, |
| 436 |
{0x6480, 0x4F, 0}, |
| 437 |
{0x6580, 0x63, 0}, |
| 438 |
{0x6680, 0xB2, 0}, |
| 439 |
{0x6780, 0xC6, 0}, |
| 440 |
{0x6880, 0x5F, 0}, |
| 441 |
{0x6980, 0x72, 0}, |
| 442 |
{0x6A80, 0, 0}, |
| 443 |
{0x7080, 0, 0}, |
| 444 |
{0x7180, 0x13, 0}, |
| 445 |
{0x7280, 0x2C, 0}, |
| 446 |
{0x7380, 0x40, 0}, |
| 447 |
{0x7480, 0x1C, 0}, |
| 448 |
{0x7580, 0x30, 0}, |
| 449 |
{0x7680, 0x60, 0}, |
| 450 |
{0x7780, 0x54, 0}, |
| 451 |
{0x7880, 0x20, 0}, |
| 452 |
{0x7980, 0x27, 0}, |
| 453 |
{0x7A80, 0xAC, 0}, |
| 454 |
{0x7B80, 0x20, 0}, |
| 455 |
{0x7C80, 0x4B, 0}, |
| 456 |
{0x7D80, 0x63, 0}, |
| 457 |
{0x7E80, 0xA0, 0}, |
| 458 |
{0x7F80, 0xBC, 0}, |
| 459 |
{0x8080, 0x5A, 0}, |
| 460 |
{0x8180, 0x73, 0}, |
| 461 |
{0x8280, 0, 0}, |
| 462 |
{0x8880, 0, 0}, |
| 463 |
{0x8980, 0x18, 0}, |
| 464 |
{0x8A80, 0x36, 0}, |
| 465 |
{0x8B80, 0x52, 0}, |
| 466 |
{0x8C80, 0x1C, 0}, |
| 467 |
{0x8D80, 0x35, 0}, |
| 468 |
{0x8E80, 0x5F, 0}, |
| 469 |
{0x8F80, 0x46, 0}, |
| 470 |
{0x9080, 0x17, 0}, |
| 471 |
{0x9180, 0x1E, 0}, |
| 472 |
{0x9280, 0x9F, 0}, |
| 473 |
{0x9380, 0x1E, 0}, |
| 474 |
{0x9480, 0x4F, 0}, |
| 475 |
{0x9580, 0x63, 0}, |
| 476 |
{0x9680, 0xB2, 0}, |
| 477 |
{0x9780, 0xC6, 0}, |
| 478 |
{0x9880, 0x5F, 0}, |
| 479 |
{0x9980, 0x72, 0}, |
| 480 |
{0x9A80, 0, 0}, |
| 481 |
{0xA080, 0, 0}, |
| 482 |
{0xA180, 0x10, 0}, |
| 483 |
{0xA280, 0x28, 0}, |
| 484 |
{0xA380, 0x3D, 0}, |
| 485 |
{0xA480, 0x14, 0}, |
| 486 |
{0xA580, 0x28, 0}, |
| 487 |
{0xA680, 0x5B, 0}, |
| 488 |
{0xA780, 0x47, 0}, |
| 489 |
{0xA880, 0x21, 0}, |
| 490 |
{0xA980, 0x29, 0}, |
| 491 |
{0xAA80, 0xA2, 0}, |
| 492 |
{0xAB80, 0x20, 0}, |
| 493 |
{0xAC80, 0x4B, 0}, |
| 494 |
{0xAD80, 0x62, 0}, |
| 495 |
{0xAE80, 0xA2, 0}, |
| 496 |
{0xAF80, 0xBC, 0}, |
| 497 |
{0xB080, 0x5A, 0}, |
| 498 |
{0xB180, 0x73, 0}, |
| 499 |
{0xB280, 0, 0}, |
| 500 |
{0xB880, 0, 0}, |
| 501 |
{0xB980, 0x19, 0}, |
| 502 |
{0xBA80, 0x37, 0}, |
| 503 |
{0xBB80, 0x51, 0}, |
| 504 |
{0xBC80, 0x1D, 0}, |
| 505 |
{0xBD80, 0x33, 0}, |
| 506 |
{0xBE80, 0x60, 0}, |
| 507 |
{0xBF80, 0x50, 0}, |
| 508 |
{0xC080, 0x17, 0}, |
| 509 |
{0xC180, 0x1E, 0}, |
| 510 |
{0xC280, 0xAC, 0}, |
| 511 |
{0xC380, 0x24, 0}, |
| 512 |
{0xC480, 0x58, 0}, |
| 513 |
{0xC580, 0x6B, 0}, |
| 514 |
{0xC680, 0xB5, 0}, |
| 515 |
{0xC780, 0xCA, 0}, |
| 516 |
{0xC880, 0x62, 0}, |
| 517 |
{0xC980, 0x72, 0}, |
| 518 |
{0xCA80, 0, 0}, |
| 519 |
|
| 520 |
/* Common to all panels ? see sharp power on table */ |
| 521 |
{0x4E00,0, 0}, |
| 522 |
{0x3A00, 5, 0}, |
| 523 |
{0x3500,0, 0}, |
| 524 |
{0x4400,0, 0}, |
| 525 |
{0x4401,0, 0}, |
| 526 |
{0x5E00,0, 0}, |
| 527 |
{0x6A01,0, 0}, |
| 528 |
{0x6A02,1, 0}, |
| 529 |
{0x5301,0x10, 0}, |
| 530 |
{0x5500,2, 0}, |
| 531 |
{0x6A17,1, 0}, |
| 532 |
{0x6A18,0xFF, 0}, |
| 533 |
{0x2900,1, 0}, |
| 534 |
{0x5300,0x2C, 0}, |
| 535 |
{0x5E03,1, 0}, |
| 536 |
}; |
| 537 |
|
| 538 |
static struct mddi_table mddi_Sharp_EVT_table[] = { |
| 539 |
{0x5100, 0, 0}, |
| 540 |
|
| 541 |
{0x2A00, 0, 0}, |
| 542 |
{0x2A01, 0, 0}, |
| 543 |
{0x2A02, 1, 0}, |
| 544 |
{0x2A03,0xDF, 0}, |
| 545 |
{0x2B00, 0, 0}, |
| 546 |
{0x2B01, 0, 0}, |
| 547 |
{0x2B02, 3, 0}, |
| 548 |
{0x2B03,0x1F, 0}, |
| 549 |
{0x2D00, 0, 0}, |
| 550 |
{0x2D01, 0, 0}, |
| 551 |
{0x2D02, 0, 0}, |
| 552 |
{0x2D03, 0, 0}, |
| 553 |
{0x3600, 0, 0}, |
| 554 |
{0x3601, 1, 0}, |
| 555 |
{0x180, 2, 0}, |
| 556 |
{0x2080,0x43, 0}, |
| 557 |
{0x2C80, 0, 0}, |
| 558 |
{0x2A80, 0, 0}, |
| 559 |
|
| 560 |
{0x2E80, 0, 0}, |
| 561 |
}; |
| 562 |
|
| 563 |
static struct mddi_table mddi_Sharp_DVT_table[] = { |
| 564 |
{0x5100, 0, 0}, |
| 565 |
|
| 566 |
{0x2A00, 0, 0}, |
| 567 |
{0x2A01, 0, 0}, |
| 568 |
{0x2A02, 1, 0}, |
| 569 |
{0x2A03,0xDF, 0}, |
| 570 |
{0x2B00, 0, 0}, |
| 571 |
{0x2B01, 0, 0}, |
| 572 |
{0x2B02, 3, 0}, |
| 573 |
{0x2B03,0x1F, 0}, |
| 574 |
{0x2D00, 0, 0}, |
| 575 |
{0x2D01, 0, 0}, |
| 576 |
{0x2D02, 0, 0}, |
| 577 |
{0x2D03, 0, 0}, |
| 578 |
{0x3600, 0, 0}, |
| 579 |
{0x3601, 1, 0}, |
| 580 |
{0x180, 2, 0,}, |
| 581 |
{0x2080,0x43, 0}, |
| 582 |
{0x2C80, 0, 0}, |
| 583 |
{0x2A80, 0, 0}, |
| 584 |
{0xF280,0x55, 0}, |
| 585 |
{0xF281,0xAA, 0}, |
| 586 |
{0xF282,0x66, 0}, |
| 587 |
{0xF38E,0x25, 0}, |
| 588 |
}; |
| 589 |
|
| 590 |
static struct mddi_table mddi_Sharp_Common_table[] = { |
| 591 |
{0x1100, 0, 0x64}, |
| 592 |
|
| 593 |
{0x4080,0x42, 0}, |
| 594 |
{0x4180,0x4F, 0}, |
| 595 |
{0x4280,0x57, 0}, |
| 596 |
{0x4380,0x61, 0}, |
| 597 |
{0x4480,0x1F, 0}, |
| 598 |
{0x4580,0x32, 0}, |
| 599 |
{0x4680,0x63, 0}, |
| 600 |
{0x4780,0x46, 0}, |
| 601 |
{0x4880,0x28, 0}, |
| 602 |
{0x4980,0x30, 0}, |
| 603 |
{0x4A80,0x88, 0}, |
| 604 |
{0x4B80,0x1D, 0}, |
| 605 |
{0x4C80,0x45, 0}, |
| 606 |
{0x4D80,0x50, 0}, |
| 607 |
{0x4E80,0x6F, 0}, |
| 608 |
{0x4F80,0x8D, 0}, |
| 609 |
{0x5080,0x39, 0}, |
| 610 |
{0x5180,0x5A, 0}, |
| 611 |
{0x5880,0x1D, 0}, |
| 612 |
{0x5980,0x3E, 0}, |
| 613 |
{0x5A80,0x6B, 0}, |
| 614 |
{0x5B80,0x88, 0}, |
| 615 |
{0x5C80,0x2F, 0}, |
| 616 |
{0x5D80,0x3D, 0}, |
| 617 |
{0x5E80,0x62, 0}, |
| 618 |
{0x5F80,0x74, 0}, |
| 619 |
{0x6080,0xF, 0}, |
| 620 |
{0x6180,0x17, 0}, |
| 621 |
{0x6280,0xB8, 0}, |
| 622 |
{0x6380,0x1D, 0}, |
| 623 |
{0x6480,0x4E, 0}, |
| 624 |
{0x6580,0x60, 0}, |
| 625 |
{0x6680,0x9F, 0}, |
| 626 |
{0x6780,0xA9, 0}, |
| 627 |
{0x6880,0x31, 0}, |
| 628 |
{0x6980,0x3E, 0}, |
| 629 |
{0x7080,0x63, 0}, |
| 630 |
{0x7180,0x6F, 0}, |
| 631 |
{0x7280,0x76, 0}, |
| 632 |
{0x7380,0x7F, 0}, |
| 633 |
{0x7480,0x1F, 0}, |
| 634 |
{0x7580,0x30, 0}, |
| 635 |
{0x7680,0x65, 0}, |
| 636 |
{0x7780,0x56, 0}, |
| 637 |
{0x7880,0x26, 0}, |
| 638 |
{0x7980,0x2F, 0}, |
| 639 |
{0x7A80,0x91, 0}, |
| 640 |
{0x7B80,0x1B, 0}, |
| 641 |
{0x7C80,0x3F, 0}, |
| 642 |
{0x7D80,0x51, 0}, |
| 643 |
{0x7E80,0x7A, 0}, |
| 644 |
{0x7F80,0x9C, 0}, |
| 645 |
{0x8080,0x52, 0}, |
| 646 |
{0x8180,0x5A, 0}, |
| 647 |
{0x8880,0x1D, 0}, |
| 648 |
{0x8980,0x25, 0}, |
| 649 |
{0x8A80,0x5B, 0}, |
| 650 |
{0x8B80,0x7E, 0}, |
| 651 |
{0x8C80,0x2E, 0}, |
| 652 |
{0x8D80,0x40, 0}, |
| 653 |
{0x8E80,0x65, 0}, |
| 654 |
{0x8F80,0x6A, 0}, |
| 655 |
{0x9080,0x10, 0}, |
| 656 |
{0x9180,0x18, 0}, |
| 657 |
{0x9280,0xA7, 0}, |
| 658 |
{0x9380,0x1D, 0}, |
| 659 |
{0x9480,0x4E, 0}, |
| 660 |
{0x9580,0x60, 0}, |
| 661 |
{0x9680,0x81, 0}, |
| 662 |
{0x9780,0x8A, 0}, |
| 663 |
{0x9880,0x11, 0}, |
| 664 |
{0x9980,0x1D, 0}, |
| 665 |
{0xA080,0x22, 0}, |
| 666 |
{0xA180,0x38, 0}, |
| 667 |
{0xA280,0x50, 0}, |
| 668 |
{0xA380,0x64, 0}, |
| 669 |
{0xA480,0x27, 0}, |
| 670 |
{0xA580,0x3D, 0}, |
| 671 |
{0xA680,0x69, 0}, |
| 672 |
{0xA780,0x5A, 0}, |
| 673 |
{0xA880,0x28, 0}, |
| 674 |
{0xA980,0x31, 0}, |
| 675 |
{0xAA80,0x97, 0}, |
| 676 |
{0xAB80,0x1B, 0}, |
| 677 |
{0xAC80,0x41, 0}, |
| 678 |
{0xAD80,0x50, 0}, |
| 679 |
{0xAE80,0x7B, 0}, |
| 680 |
{0xAF80,0x98, 0}, |
| 681 |
{0xB080,0x3C, 0}, |
| 682 |
{0xB180,0x5A, 0}, |
| 683 |
{0xB880,0x1D, 0}, |
| 684 |
{0xB980,0x3B, 0}, |
| 685 |
{0xBA80,0x5F, 0}, |
| 686 |
{0xBB80,0x7D, 0}, |
| 687 |
{0xBC80,0x2F, 0}, |
| 688 |
{0xBD80,0x3F, 0}, |
| 689 |
{0xBE80,0x64, 0}, |
| 690 |
{0xBF80,0x64, 0}, |
| 691 |
{0xC080,0xE, 0}, |
| 692 |
{0xC180,0x17, 0}, |
| 693 |
{0xC280,0xA3, 0}, |
| 694 |
{0xC380,0x17, 0}, |
| 695 |
{0xC480,0x43, 0}, |
| 696 |
{0xC580,0x58, 0}, |
| 697 |
{0xC680,0x9C, 0}, |
| 698 |
{0xC780,0xB0, 0}, |
| 699 |
{0xC880,0x49, 0}, |
| 700 |
{0xC980,0x5F, 0}, |
| 701 |
|
| 702 |
/* Common to all panels ? see seid power on table */ |
| 703 |
{0x4E00,0, 0}, |
| 704 |
{0x3A00, 5, 0}, |
| 705 |
{0x3500,0, 0}, |
| 706 |
{0x4400,0, 0}, |
| 707 |
{0x4401,0, 0}, |
| 708 |
{0x5E00,0, 0}, |
| 709 |
{0x6A01,0, 0}, |
| 710 |
{0x6A02,1, 0}, |
| 711 |
{0x5301,0x10, 0}, |
| 712 |
{0x5500,2, 0}, |
| 713 |
{0x6A17,1, 0}, |
| 714 |
{0x6A18,0xFF, 0}, |
| 715 |
{0x2900,1, 0}, |
| 716 |
{0x5300,0x2C, 0}, |
| 717 |
{0x5E03,1, 0}, |
| 718 |
}; |
| 719 |
|
| 720 |
static struct mddi_table mddi_Temp_table_part0[] = { |
| 721 |
{0x30, 0}, |
| 722 |
{0x18,0x3BF}, |
| 723 |
{0x20,0x3034}, |
| 724 |
{0x24,0x4011}, |
| 725 |
{0x28,0x32A}, |
| 726 |
{0x2C, 1}, |
| 727 |
|
| 728 |
{0x2C, 1, 2}, |
| 729 |
|
| 730 |
{0x84,0x208}, |
| 731 |
{0x88,0x37}, |
| 732 |
{0x8C,0x2113}, |
| 733 |
{0x90, 0}, |
| 734 |
{0x2C, 2, 2}, |
| 735 |
|
| 736 |
{0x2C, 3}, |
| 737 |
{0x100,0x3402}, |
| 738 |
{0x104,0x380}, |
| 739 |
{0x140,0x3E}, |
| 740 |
{0x144,0xEF}, |
| 741 |
{0x148, 9}, |
| 742 |
{0x14C, 4}, |
| 743 |
{0x150, 0}, |
| 744 |
{0x154,0x333}, |
| 745 |
{0x158,0x31F}, |
| 746 |
{0x15C, 8}, |
| 747 |
{0x160, 4}, |
| 748 |
{0x164, 0}, |
| 749 |
{0x168,0xE3}, |
| 750 |
{0x180,0x57}, |
| 751 |
{0x184,0xDB}, |
| 752 |
{0x188,0xE3}, |
| 753 |
{0x18C, 0}, |
| 754 |
{0x190, 0}, |
| 755 |
{0x200,0xA6}, |
| 756 |
{0x204, 0}, |
| 757 |
{0x208,0x13F}, |
| 758 |
{0x20C, 0}, |
| 759 |
{0x210, 0}, |
| 760 |
{0x214, 0}, |
| 761 |
{0x218, 0}, |
| 762 |
{0x21C,0x1DF}, |
| 763 |
{0x220, 0}, |
| 764 |
{0x224, 0}, |
| 765 |
{0x400,0x8000}, |
| 766 |
{0x404,0x1000}, |
| 767 |
{0x480,0x4001}, |
| 768 |
{0x484,0x62}, |
| 769 |
{0x500, 0}, |
| 770 |
{0x504,0x8000}, |
| 771 |
{0x508, 0}, |
| 772 |
{0x50C, 0}, |
| 773 |
{0x510, 0}, |
| 774 |
{0x514, 0}, |
| 775 |
{0x518,0x1E}, |
| 776 |
{0x51C,0xC7}, |
| 777 |
{0x520,0x1DF}, |
| 778 |
{0x524,0x31F}, |
| 779 |
{0x528, 0}, |
| 780 |
{0x52C, 0, 1}, |
| 781 |
|
| 782 |
{0x580, 0}, |
| 783 |
{0x584, 0}, |
| 784 |
{0x588,0xD2C}, |
| 785 |
{0x58C,0xFA0}, |
| 786 |
{0x590,0x10CC}, |
| 787 |
{0x594,0x34}, |
| 788 |
{0x598,0x77}, |
| 789 |
{0x59C,0x13F}, |
| 790 |
{0x5A0,0xEF}, |
| 791 |
{0x5A4, 0}, |
| 792 |
{0x5A8, 0, 1}, |
| 793 |
|
| 794 |
{0x600, 0}, |
| 795 |
{0x604,0x101}, |
| 796 |
{0x608, 0}, |
| 797 |
{0x60C,0x80}, |
| 798 |
{0x610, 0}, |
| 799 |
{0x648, 0}, |
| 800 |
{0x680,0x8000}, |
| 801 |
{0x684, 0}, |
| 802 |
{0x688,0x1E}, |
| 803 |
{0x68C,0xC7}, |
| 804 |
{0x690,0x1DF}, |
| 805 |
{0x694,0x31F}, |
| 806 |
{0x698, 0}, |
| 807 |
{0x69C, 0}, |
| 808 |
{0x6A0, 0}, |
| 809 |
{0x6A4, 0}, |
| 810 |
{0x6A8, 0}, |
| 811 |
{0x6AC,0x34}, |
| 812 |
{0x6B0,0x77}, |
| 813 |
{0x6B4,0x12B}, |
| 814 |
{0x6B8,0x31}, |
| 815 |
{0x6BC,0xF}, |
| 816 |
{0x6C0,0xF0}, |
| 817 |
{0x6C4, 0}, |
| 818 |
{0x6C8,0x96}, |
| 819 |
{0x700, 0}, |
| 820 |
{0x704,0x20A}, |
| 821 |
{0x708,0x400}, |
| 822 |
{0x70C,0x400}, |
| 823 |
{0x714,0xC00}, |
| 824 |
{0x718,0xD2C}, |
| 825 |
{0x71C,0xFA0}, |
| 826 |
{0x720,0x10CC}, |
| 827 |
{0x724,0x14}, |
| 828 |
{0x728,0x3B}, |
| 829 |
{0x72C,0x63}, |
| 830 |
{0x730,0x63}, |
| 831 |
{0x734, 0}, |
| 832 |
{0x738, 0}, |
| 833 |
{0x73C,0x32}, |
| 834 |
{0x740,0x32}, |
| 835 |
{0x744,0x95}, |
| 836 |
{0x748,0x95}, |
| 837 |
{0x800, 0}, |
| 838 |
{0x804,0x20A}, |
| 839 |
{0x808,0x400}, |
| 840 |
{0x80C,0x400}, |
| 841 |
{0x814,0xC00}, |
| 842 |
{0x818,0xD2C}, |
| 843 |
{0x81C,0xFA0}, |
| 844 |
{0x820,0x10CC}, |
| 845 |
{0x824,0x14}, |
| 846 |
{0x828,0x3B}, |
| 847 |
{0x82C,0x63}, |
| 848 |
{0x830,0x63}, |
| 849 |
{0x834,0x64}, |
| 850 |
{0x838,0x64}, |
| 851 |
{0x83C,0x64}, |
| 852 |
{0x840,0x64}, |
| 853 |
{0x844,0xC7}, |
| 854 |
{0x848,0xC7}, |
| 855 |
{0x900, 0}, |
| 856 |
{0x904, 0}, |
| 857 |
{0x908,0x13F}, |
| 858 |
{0x90C,0xEF}, |
| 859 |
{0x910, 0}, |
| 860 |
{0x914,0x13F}, |
| 861 |
{0x918, 0}, |
| 862 |
{0x91C,0xEF}, |
| 863 |
|
| 864 |
{0x4000, 0x600}, |
| 865 |
|
| 866 |
{0xB00, 3}, |
| 867 |
{0x300,0x3000}, |
| 868 |
{0x304, 0}, |
| 869 |
{0x308, 0}, |
| 870 |
{0x30C,0x4FFF}, |
| 871 |
{0x310,0x7FFF}, |
| 872 |
{0x314,0xFF}, |
| 873 |
{0x318,0x7FFF}, |
| 874 |
{0x31C,0xFFFF}, |
| 875 |
{0x320,0xFF}, |
| 876 |
{0x324,0x6FFF}, |
| 877 |
{0x328, 0}, |
| 878 |
{0x32C, 0, 2}, |
| 879 |
|
| 880 |
{0x4000, 0x600, 1}, |
| 881 |
{0x614, 0}, |
| 882 |
{0x618, 0}, |
| 883 |
{0x61C, 0}, |
| 884 |
{0x620, 0}, |
| 885 |
{0x624, 0}, |
| 886 |
{0x628, 0}, |
| 887 |
{0x62C, 0}, |
| 888 |
{0x630, 0}, |
| 889 |
{0x634, 0}, |
| 890 |
{0x638, 0}, |
| 891 |
{0x63C, 0}, |
| 892 |
{0x640, 0}, |
| 893 |
{0x644, 0}, |
| 894 |
{0x324, 0x3800, 0x14}, |
| 895 |
}; |
| 896 |
|
| 897 |
static struct mddi_table mddi_Temp_table_part1[] = { |
| 898 |
{0x324, 0x2800, 0x32}, |
| 899 |
{0x504, 1, 0xA}, |
| 900 |
}; |
| 901 |
|
| 902 |
static struct mddi_table mddi_Temp_off_table[] = { |
| 903 |
{0x324, 0x3800, 0x64}, |
| 904 |
}; |
| 905 |
|
| 906 |
/* Common MDDI client routines ----------------------------------------- */ |
| 907 |
|
| 908 |
/* This subroutine is the routines used by SPL to detect the panel type |
| 909 |
* It should not be called because SPL saves the panel type into SMI memory |
| 910 |
* @ addr = 0x81034. This routine gets called if the value in SMI is 0. |
| 911 |
* It might be used if one day, the WinMo SPL is thrown away. |
| 912 |
*/ |
| 913 |
static void Get_Panel_ID_SPL(struct msm_mddi_client_data *client_data) |
| 914 |
{ |
| 915 |
if(currentPanelType == 0) |
| 916 |
{ |
| 917 |
client_data->auto_hibernate(client_data, 0); |
| 918 |
/* |
| 919 |
printk("%s : readl(MSM_SHARED_RAM_BASE + 0xFC254) = %d\n", __func__, |
| 920 |
readl(MSM_SHARED_RAM_BASE + 0xFC254)); |
| 921 |
*/ |
| 922 |
|
| 923 |
switch ( readl(MSM_SHARED_RAM_BASE + 0xFC254) ) { |
| 924 |
case 0: |
| 925 |
if ( client_data->remote_read(client_data, 0x1380) != 0 ) { |
| 926 |
currentPanelType = PANEL_TYPE_AUO_ES2; |
| 927 |
} else { |
| 928 |
currentPanelType = PANEL_TYPE_AUO_ES1; |
| 929 |
} |
| 930 |
break; |
| 931 |
|
| 932 |
case 1: |
| 933 |
if ( client_data->remote_read(client_data, 0x1380) != 0 ) { |
| 934 |
currentPanelType = PANEL_TYPE_EID; |
| 935 |
} else { |
| 936 |
currentPanelType = PANEL_TYPE_SEID; |
| 937 |
} |
| 938 |
break; |
| 939 |
|
| 940 |
case 2: |
| 941 |
if ( client_data->remote_read(client_data, 0x2480) != 0x57 ) { |
| 942 |
currentPanelType = PANEL_TYPE_SHARP_DVT; |
| 943 |
} else { |
| 944 |
currentPanelType = PANEL_TYPE_SHARP_EVT; |
| 945 |
} |
| 946 |
break; |
| 947 |
|
| 948 |
case 3: |
| 949 |
/* On RHOD500, panel type TEMP is replaced by panel type HITACHI = 0x5 |
| 950 |
* But, as they used the same power sequences, don't need to make a test |
| 951 |
* on the variant */ |
| 952 |
currentPanelType = PANEL_TYPE_TEMP; |
| 953 |
break; |
| 954 |
|
| 955 |
default: |
| 956 |
break; |
| 957 |
} |
| 958 |
client_data->auto_hibernate(client_data, 1); |
| 959 |
} |
| 960 |
|
| 961 |
printk( KERN_INFO "%s - currentPanelType=0x%02x\r\n", __FUNCTION__, currentPanelType); |
| 962 |
/* TODO : Reenable this line if we need to save the panel type in the SMI as done by the |
| 963 |
* WinMo SPL. |
| 964 |
*/ |
| 965 |
//writel( MSM_INIT_BASE + 0x81034 , currentPanelType) ; |
| 966 |
} |
| 967 |
|
| 968 |
static void Get_Panel_ID(struct msm_mddi_client_data *client_data) |
| 969 |
{ |
| 970 |
int panelID = readl( MSM_INIT_BASE + 0x81034 ) ; |
| 971 |
printk("%s : Panel type (SMI) = %d\n", __func__, panelID); |
| 972 |
if ( panelID == 0 ) { |
| 973 |
printk("%s : panel needs to be detected\n", __func__); |
| 974 |
if ( client_data->remote_read != NULL ) { |
| 975 |
Get_Panel_ID_SPL(client_data); |
| 976 |
} |
| 977 |
} else { |
| 978 |
currentPanelType = panelID; |
| 979 |
} |
| 980 |
} |
| 981 |
|
| 982 |
static void htcrhod_process_mddi_table(struct msm_mddi_client_data *client_data, |
| 983 |
struct mddi_table *table, size_t count) |
| 984 |
{ |
| 985 |
int i; |
| 986 |
for(i = 0; i < count; i++) { |
| 987 |
uint32_t reg = cpu_to_le32(table[i].reg); |
| 988 |
uint32_t value = cpu_to_le32(table[i].value); |
| 989 |
uint32_t sleep = table[i].sleep; |
| 990 |
|
| 991 |
client_data->remote_write(client_data, value, reg); |
| 992 |
if ( sleep ) { |
| 993 |
msleep(sleep); |
| 994 |
} |
| 995 |
} |
| 996 |
} |
| 997 |
|
| 998 |
/* Panel dependent initialization -------------------------------------- */ |
| 999 |
static int htcrhod_mddi_auo_es1_panel_init( |
| 1000 |
struct msm_mddi_bridge_platform_data *bridge_data, |
| 1001 |
struct msm_mddi_client_data *client_data) |
| 1002 |
{ |
| 1003 |
client_data->auto_hibernate(client_data, 0); |
| 1004 |
//sub_100273A8(0); // TODO |
| 1005 |
htcrhod_process_mddi_table(client_data, mddi_Auo_ES1_table_part0, |
| 1006 |
ARRAY_SIZE(mddi_Auo_ES1_table_part0)); |
| 1007 |
//sub_100273A8(1); // TODO |
| 1008 |
htcrhod_process_mddi_table(client_data, mddi_Auo_ES1_table_part1, |
| 1009 |
ARRAY_SIZE(mddi_Auo_ES1_table_part1)); |
| 1010 |
client_data->auto_hibernate(client_data, 1); |
| 1011 |
return 0; |
| 1012 |
} |
| 1013 |
|
| 1014 |
static int htcrhod_mddi_auo_es2_panel_init( |
| 1015 |
struct msm_mddi_bridge_platform_data *bridge_data, |
| 1016 |
struct msm_mddi_client_data *client_data) |
| 1017 |
{ |
| 1018 |
client_data->auto_hibernate(client_data, 0); |
| 1019 |
//sub_100273A8(0); // TODO |
| 1020 |
htcrhod_process_mddi_table(client_data, mddi_Auo_ES2_table_part0, |
| 1021 |
ARRAY_SIZE(mddi_Auo_ES2_table_part0)); |
| 1022 |
//sub_100273A8(1); // TODO |
| 1023 |
htcrhod_process_mddi_table(client_data, mddi_Auo_ES2_table_part1, |
| 1024 |
ARRAY_SIZE(mddi_Auo_ES2_table_part1)); |
| 1025 |
client_data->auto_hibernate(client_data, 1); |
| 1026 |
return 0; |
| 1027 |
} |
| 1028 |
|
| 1029 |
static int htcrhod_mddi_sharp_evt_panel_init( |
| 1030 |
struct msm_mddi_bridge_platform_data *bridge_data, |
| 1031 |
struct msm_mddi_client_data *client_data) |
| 1032 |
{ |
| 1033 |
client_data->auto_hibernate(client_data, 0); |
| 1034 |
htcrhod_process_mddi_table(client_data, mddi_Sharp_EVT_table, |
| 1035 |
ARRAY_SIZE(mddi_Sharp_EVT_table)); |
| 1036 |
htcrhod_process_mddi_table(client_data, mddi_Sharp_Common_table, |
| 1037 |
ARRAY_SIZE(mddi_Sharp_Common_table)); |
| 1038 |
client_data->auto_hibernate(client_data, 1); |
| 1039 |
return 0; |
| 1040 |
} |
| 1041 |
|
| 1042 |
static int htcrhod_mddi_sharp_dvt_panel_init( |
| 1043 |
struct msm_mddi_bridge_platform_data *bridge_data, |
| 1044 |
struct msm_mddi_client_data *client_data) |
| 1045 |
{ |
| 1046 |
client_data->auto_hibernate(client_data, 0); |
| 1047 |
htcrhod_process_mddi_table(client_data, mddi_Sharp_DVT_table, |
| 1048 |
ARRAY_SIZE(mddi_Sharp_DVT_table)); |
| 1049 |
htcrhod_process_mddi_table(client_data, mddi_Sharp_Common_table, |
| 1050 |
ARRAY_SIZE(mddi_Sharp_Common_table)); |
| 1051 |
client_data->auto_hibernate(client_data, 1); |
| 1052 |
return 0; |
| 1053 |
} |
| 1054 |
|
| 1055 |
static int htcrhod_mddi_epson_panel_init( |
| 1056 |
struct msm_mddi_bridge_platform_data *bridge_data, |
| 1057 |
struct msm_mddi_client_data *client_data) |
| 1058 |
{ |
| 1059 |
client_data->auto_hibernate(client_data, 0); |
| 1060 |
htcrhod_process_mddi_table(client_data, mddi_Eid_table, |
| 1061 |
ARRAY_SIZE(mddi_Eid_table)); |
| 1062 |
client_data->auto_hibernate(client_data, 1); |
| 1063 |
return 0; |
| 1064 |
} |
| 1065 |
|
| 1066 |
static int htcrhod_mddi_sanyo_panel_init( |
| 1067 |
struct msm_mddi_bridge_platform_data *bridge_data, |
| 1068 |
struct msm_mddi_client_data *client_data) |
| 1069 |
{ |
| 1070 |
client_data->auto_hibernate(client_data, 0); |
| 1071 |
htcrhod_process_mddi_table(client_data, mddi_Seid_table, |
| 1072 |
ARRAY_SIZE(mddi_Seid_table)); |
| 1073 |
client_data->auto_hibernate(client_data, 1); |
| 1074 |
return 0; |
| 1075 |
} |
| 1076 |
|
| 1077 |
static int htcrhod_mddi_temp_panel_init( |
| 1078 |
struct msm_mddi_bridge_platform_data *bridge_data, |
| 1079 |
struct msm_mddi_client_data *client_data) |
| 1080 |
{ |
| 1081 |
client_data->auto_hibernate(client_data, 0); |
| 1082 |
htcrhod_process_mddi_table(client_data, mddi_Temp_table_part0, |
| 1083 |
ARRAY_SIZE(mddi_Temp_table_part0)); |
| 1084 |
// sub_10025210(); // TODO |
| 1085 |
htcrhod_process_mddi_table(client_data, mddi_Temp_table_part1, |
| 1086 |
ARRAY_SIZE(mddi_Temp_table_part1)); |
| 1087 |
client_data->auto_hibernate(client_data, 1); |
| 1088 |
return 0; |
| 1089 |
} |
| 1090 |
|
| 1091 |
static int htcrhod_mddi_temp_panel_uninit( |
| 1092 |
struct msm_mddi_bridge_platform_data *bridge_data, |
| 1093 |
struct msm_mddi_client_data *client_data) |
| 1094 |
{ |
| 1095 |
client_data->auto_hibernate(client_data, 0); |
| 1096 |
//msleep(0x3C); |
| 1097 |
htcrhod_process_mddi_table(client_data, mddi_Temp_off_table, |
| 1098 |
ARRAY_SIZE(mddi_Temp_off_table)); |
| 1099 |
client_data->auto_hibernate(client_data, 1); |
| 1100 |
return 0; |
| 1101 |
} |
| 1102 |
|
| 1103 |
|
| 1104 |
/* Common MDDI client initialization and panel init call --------------- */ |
| 1105 |
static int htcrhod_mddi_client_init( |
| 1106 |
struct msm_mddi_bridge_platform_data *bridge_data, |
| 1107 |
struct msm_mddi_client_data *client_data) |
| 1108 |
{ |
| 1109 |
// int i; |
| 1110 |
// unsigned reg, val; |
| 1111 |
printk("%s\n", __func__); |
| 1112 |
|
| 1113 |
return 0; |
| 1114 |
} |
| 1115 |
|
| 1116 |
static int htcrhod_mddi_client_uninit( |
| 1117 |
struct msm_mddi_bridge_platform_data *bridge_data, |
| 1118 |
struct msm_mddi_client_data *client_data) |
| 1119 |
{ |
| 1120 |
// int i; |
| 1121 |
// unsigned reg, val; |
| 1122 |
printk("%s\n", __func__); |
| 1123 |
|
| 1124 |
return 0; |
| 1125 |
} |
| 1126 |
|
| 1127 |
static int htcrhod_mddi_panel_blank( |
| 1128 |
struct msm_mddi_bridge_platform_data *bridge_data, |
| 1129 |
struct msm_mddi_client_data *client_data) |
| 1130 |
{ |
| 1131 |
printk("%s\n", __func__); |
| 1132 |
|
| 1133 |
#if 1 |
| 1134 |
if ( client_data->remote_write == NULL ) { |
| 1135 |
printk("%s : mddi client not yet initialized \n", __func__); |
| 1136 |
return 0; |
| 1137 |
} |
| 1138 |
|
| 1139 |
if ( currentPanelType == 0 ) { |
| 1140 |
|
| 1141 |
} else if ( currentPanelType == PANEL_TYPE_TEMP ) { |
| 1142 |
htcrhod_mddi_temp_panel_uninit(bridge_data,client_data); |
| 1143 |
} else { |
| 1144 |
client_data->auto_hibernate(client_data, 0); |
| 1145 |
htcrhod_process_mddi_table(client_data, mddi_PanelPowerOff_table, |
| 1146 |
ARRAY_SIZE(mddi_PanelPowerOff_table)); |
| 1147 |
client_data->auto_hibernate(client_data, 1); |
| 1148 |
} |
| 1149 |
#endif |
| 1150 |
micropklt_panel_suspend(); |
| 1151 |
//gpio_set_value(RHODIUM_LCD_PWR1, 0); |
| 1152 |
return 0; |
| 1153 |
} |
| 1154 |
|
| 1155 |
static int htcrhod_mddi_panel_unblank( |
| 1156 |
struct msm_mddi_bridge_platform_data *bridge_data, |
| 1157 |
struct msm_mddi_client_data *client_data) |
| 1158 |
{ |
| 1159 |
printk("%s\n", __func__); |
| 1160 |
|
| 1161 |
#if 1 |
| 1162 |
if ( client_data->remote_write == NULL ) { |
| 1163 |
printk("%s : mddi client not yet initialized \n", __func__); |
| 1164 |
return 0; |
| 1165 |
} |
| 1166 |
|
| 1167 |
client_data->auto_hibernate(client_data, 0); |
| 1168 |
|
| 1169 |
switch(currentPanelType) { |
| 1170 |
case PANEL_TYPE_AUO_ES1: |
| 1171 |
printk("init auo es1 panel\n"); |
| 1172 |
htcrhod_mddi_auo_es1_panel_init(bridge_data,client_data); |
| 1173 |
break; |
| 1174 |
|
| 1175 |
case PANEL_TYPE_AUO_ES2: |
| 1176 |
printk("init auo es2 panel\n"); |
| 1177 |
htcrhod_mddi_auo_es2_panel_init(bridge_data,client_data); |
| 1178 |
break; |
| 1179 |
|
| 1180 |
case PANEL_TYPE_SHARP_EVT: |
| 1181 |
printk("init sharp evt panel\n"); |
| 1182 |
htcrhod_mddi_sharp_evt_panel_init(bridge_data,client_data); |
| 1183 |
break; |
| 1184 |
|
| 1185 |
case PANEL_TYPE_SHARP_DVT: |
| 1186 |
printk("init sharp dvt panel\n"); |
| 1187 |
htcrhod_mddi_sharp_dvt_panel_init(bridge_data,client_data); |
| 1188 |
break; |
| 1189 |
|
| 1190 |
case PANEL_TYPE_EID: |
| 1191 |
printk("init epson panel\n"); |
| 1192 |
htcrhod_mddi_epson_panel_init(bridge_data,client_data); |
| 1193 |
break; |
| 1194 |
|
| 1195 |
case PANEL_TYPE_SEID: |
| 1196 |
printk("init sanyo panel\n"); |
| 1197 |
htcrhod_mddi_sanyo_panel_init(bridge_data,client_data); |
| 1198 |
break; |
| 1199 |
|
| 1200 |
case PANEL_TYPE_TEMP: |
| 1201 |
printk("init temp panel\n"); |
| 1202 |
htcrhod_mddi_temp_panel_init(bridge_data,client_data); |
| 1203 |
break; |
| 1204 |
|
| 1205 |
default: |
| 1206 |
break; |
| 1207 |
} |
| 1208 |
client_data->auto_hibernate(client_data, 1); |
| 1209 |
#endif |
| 1210 |
|
| 1211 |
//gpio_set_value(RHODIUM_LCD_PWR1, 1); |
| 1212 |
micropklt_panel_resume(); |
| 1213 |
//client_data->remote_write(client_data, 0x00, 0x2900); // display on |
| 1214 |
/* Already present in the init tables */ |
| 1215 |
//client_data->remote_write(client_data, 0x2c, 0x5300); // toggle autobl bit |
| 1216 |
return 0; |
| 1217 |
} |
| 1218 |
|
| 1219 |
static void htcrhod_mddi_power_client( |
| 1220 |
struct msm_mddi_client_data *client_data, |
| 1221 |
int on) |
| 1222 |
{ |
| 1223 |
struct msm_dex_command dex; |
| 1224 |
|
| 1225 |
printk("%s(%d)\n", __func__, on); |
| 1226 |
|
| 1227 |
/* don't power up/down if we don't know the panel type */ |
| 1228 |
if(currentPanelType == 0) { |
| 1229 |
/* don't power up/down if we don't know the panel type |
| 1230 |
* In fact, this avoid the screen to be resetted at first |
| 1231 |
* power on call during early boot. |
| 1232 |
*/ |
| 1233 |
Get_Panel_ID(client_data); |
| 1234 |
return; |
| 1235 |
} |
| 1236 |
|
| 1237 |
#if 1 |
| 1238 |
if(on) { |
| 1239 |
dex.cmd=PCOM_PMIC_REG_ON; |
| 1240 |
dex.has_data=1; |
| 1241 |
dex.data=0x800; |
| 1242 |
msm_proc_comm_wince(&dex,0); |
| 1243 |
|
| 1244 |
dex.data=0x2000; |
| 1245 |
msm_proc_comm_wince(&dex,0); |
| 1246 |
|
| 1247 |
mdelay(20); |
| 1248 |
|
| 1249 |
gpio_set_value(RHODIUM_LCD_PWR3, 1); |
| 1250 |
mdelay(10); |
| 1251 |
gpio_set_value(RHODIUM_LCD_PWR3, 0); |
| 1252 |
mdelay(1); |
| 1253 |
gpio_set_value(RHODIUM_LCD_PWR3, 1); |
| 1254 |
mdelay(25); |
| 1255 |
} else { |
| 1256 |
mdelay(104); |
| 1257 |
gpio_set_value(RHODIUM_LCD_PWR3, 0); |
| 1258 |
mdelay(25); |
| 1259 |
|
| 1260 |
dex.cmd=PCOM_PMIC_REG_OFF; |
| 1261 |
dex.has_data=1; |
| 1262 |
dex.data=0x2000; |
| 1263 |
msm_proc_comm_wince(&dex,0); |
| 1264 |
|
| 1265 |
dex.data=0x800; |
| 1266 |
msm_proc_comm_wince(&dex,0); |
| 1267 |
|
| 1268 |
mdelay(3); |
| 1269 |
} |
| 1270 |
#endif |
| 1271 |
} |
| 1272 |
|
| 1273 |
extern struct resource resources_msm_fb[]; |
| 1274 |
|
| 1275 |
static struct msm_mddi_bridge_platform_data novatec_client_data = { |
| 1276 |
.init = htcrhod_mddi_client_init, |
| 1277 |
.uninit = htcrhod_mddi_client_uninit, |
| 1278 |
.blank = htcrhod_mddi_panel_blank, |
| 1279 |
.unblank = htcrhod_mddi_panel_unblank, |
| 1280 |
.fb_data = { |
| 1281 |
.xres = 480, |
| 1282 |
.yres = 800, |
| 1283 |
.output_format = 0, |
| 1284 |
}, |
| 1285 |
}; |
| 1286 |
|
| 1287 |
static struct msm_mddi_platform_data mddi_pdata = { |
| 1288 |
.vsync_irq = MSM_GPIO_TO_INT(RHOD_LCD_VSYNC), |
| 1289 |
.power_client = htcrhod_mddi_power_client, |
| 1290 |
.fb_resource = resources_msm_fb, |
| 1291 |
.num_clients = 2, |
| 1292 |
.client_platform_data = { |
| 1293 |
{ |
| 1294 |
// rhod+topa |
| 1295 |
.product_id = (0xb9f6 << 16 | 0x5580), |
| 1296 |
.name = "mddi_c_b9f6_5582", |
| 1297 |
.id = 0, |
| 1298 |
.client_data = &novatec_client_data, |
| 1299 |
.clk_rate = 0, |
| 1300 |
}, |
| 1301 |
{ |
| 1302 |
// rhod+topa |
| 1303 |
.product_id = (0xb9f6 << 16 | 0x5582), |
| 1304 |
.name = "mddi_c_b9f6_5582", |
| 1305 |
.id = 0, |
| 1306 |
.client_data = &novatec_client_data, |
| 1307 |
.clk_rate = 0, |
| 1308 |
} |
| 1309 |
}, |
| 1310 |
}; |
| 1311 |
|
| 1312 |
int __init htcrhod_init_panel(void) |
| 1313 |
{ |
| 1314 |
int rc; |
| 1315 |
|
| 1316 |
if(!machine_is_htcrhodium()) { |
| 1317 |
printk(KERN_INFO "%s: panel does not apply to this device, aborted\n", __func__); |
| 1318 |
return 0; |
| 1319 |
} |
| 1320 |
|
| 1321 |
printk(KERN_INFO "%s: Initializing panel\n", __func__); |
| 1322 |
|
| 1323 |
rc = gpio_request(RHOD_LCD_VSYNC, "vsync"); |
| 1324 |
if (rc) |
| 1325 |
return rc; |
| 1326 |
rc = gpio_direction_input(RHOD_LCD_VSYNC); |
| 1327 |
if (rc) |
| 1328 |
return rc; |
| 1329 |
|
| 1330 |
rc = platform_device_register(&msm_device_mdp); |
| 1331 |
if (rc) |
| 1332 |
return rc; |
| 1333 |
msm_device_mddi0.dev.platform_data = &mddi_pdata; |
| 1334 |
return platform_device_register(&msm_device_mddi0); |
| 1335 |
} |
| 1336 |
|
| 1337 |
device_initcall(htcrhod_init_panel); |