1121 lines
43 KiB
C
1121 lines
43 KiB
C
/* Copyright (c) 2008-2010, The Linux Foundation. All rights reserved.
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License version 2 and
|
|
* only version 2 as published by the Free Software Foundation.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
*/
|
|
|
|
#include "msm_fb.h"
|
|
|
|
#include <linux/memory.h>
|
|
#include <linux/kernel.h>
|
|
#include <linux/sched.h>
|
|
#include <linux/time.h>
|
|
#include <linux/init.h>
|
|
#include <linux/interrupt.h>
|
|
#include "linux/proc_fs.h"
|
|
|
|
#include <linux/delay.h>
|
|
|
|
#include <mach/hardware.h>
|
|
#include <linux/io.h>
|
|
|
|
#include <asm/system.h>
|
|
#include <asm/mach-types.h>
|
|
|
|
/* #define TMD20QVGA_LCD_18BPP */
|
|
#define QVGA_WIDTH 240
|
|
#define QVGA_HEIGHT 320
|
|
|
|
#ifdef TMD20QVGA_LCD_18BPP
|
|
#define DISP_QVGA_18BPP(x) ((((x)<<2) & 0x3FC00)|(( (x)<<1)& 0x1FE))
|
|
#define DISP_REG(name) uint32 register_##name;
|
|
#define OUTPORT(x, y) outpdw(x, y)
|
|
#define INPORT(x) inpdw(x)
|
|
#else
|
|
#define DISP_QVGA_18BPP(x) (x)
|
|
#define DISP_REG(name) uint16 register_##name;
|
|
#define OUTPORT(x, y) outpw(x, y)
|
|
#define INPORT(x) intpw(x)
|
|
#endif
|
|
|
|
static void *DISP_CMD_PORT;
|
|
static void *DISP_DATA_PORT;
|
|
|
|
#define DISP_RNTI 0x10
|
|
|
|
#define DISP_CMD_OUT(cmd) OUTPORT(DISP_CMD_PORT, DISP_QVGA_18BPP(cmd))
|
|
#define DISP_DATA_OUT(data) OUTPORT(DISP_DATA_PORT, data)
|
|
#define DISP_DATA_IN() INPORT(DISP_DATA_PORT)
|
|
|
|
#if (defined(TMD20QVGA_LCD_18BPP))
|
|
#define DISP_DATA_OUT_16TO18BPP(x) \
|
|
DISP_DATA_OUT((((x)&0xf800)<<2|((x)&0x80000)>>3) \
|
|
| (((x)&0x7e0)<<1) \
|
|
| (((x)&0x1F)<<1|((x)&0x10)>>4))
|
|
#else
|
|
#define DISP_DATA_OUT_16TO18BPP(x) \
|
|
DISP_DATA_OUT(x)
|
|
#endif
|
|
|
|
#define DISP_WRITE_OUT(addr, data) \
|
|
register_##addr = DISP_QVGA_18BPP(data); \
|
|
DISP_CMD_OUT(addr); \
|
|
DISP_DATA_OUT(register_##addr);
|
|
|
|
#define DISP_UPDATE_VALUE(addr, bitmask, data) \
|
|
DISP_WRITE_OUT(##addr, (register_##addr & ~(bitmask)) | (data));
|
|
|
|
#define DISP_VAL_IF(bitvalue, bitmask) \
|
|
((bitvalue) ? (bitmask) : 0)
|
|
|
|
/* QVGA = 256 x 320 */
|
|
/* actual display is 240 x 320...offset by 0x10 */
|
|
#define DISP_ROW_COL_TO_ADDR(row, col) ((row) * 0x100 + col)
|
|
#define DISP_SET_RECT(ulhc_row, lrhc_row, ulhc_col, lrhc_col) \
|
|
{ \
|
|
DISP_WRITE_OUT(DISP_HORZ_RAM_ADDR_POS_1_ADDR, (ulhc_col) + tmd20qvga_panel_offset); \
|
|
DISP_WRITE_OUT(DISP_HORZ_RAM_ADDR_POS_2_ADDR, (lrhc_col) + tmd20qvga_panel_offset); \
|
|
DISP_WRITE_OUT(DISP_VERT_RAM_ADDR_POS_1_ADDR, (ulhc_row)); \
|
|
DISP_WRITE_OUT(DISP_VERT_RAM_ADDR_POS_2_ADDR, (lrhc_row)); \
|
|
DISP_WRITE_OUT(DISP_RAM_ADDR_SET_1_ADDR, (ulhc_col) + tmd20qvga_panel_offset); \
|
|
DISP_WRITE_OUT(DISP_RAM_ADDR_SET_2_ADDR, (ulhc_row)); \
|
|
}
|
|
|
|
#define WAIT_MSEC(msec) mdelay(msec)
|
|
|
|
/*
|
|
* TMD QVGA Address
|
|
*/
|
|
/* Display Control */
|
|
#define DISP_START_OSCILLATION_ADDR 0x000
|
|
DISP_REG(DISP_START_OSCILLATION_ADDR)
|
|
#define DISP_DRIVER_OUTPUT_CTL_ADDR 0x001
|
|
DISP_REG(DISP_DRIVER_OUTPUT_CTL_ADDR)
|
|
#define DISP_LCD_DRIVING_SIG_ADDR 0x002
|
|
DISP_REG(DISP_LCD_DRIVING_SIG_ADDR)
|
|
#define DISP_ENTRY_MODE_ADDR 0x003
|
|
DISP_REG(DISP_ENTRY_MODE_ADDR)
|
|
#define DISP_DISPLAY_CTL_1_ADDR 0x007
|
|
DISP_REG(DISP_DISPLAY_CTL_1_ADDR)
|
|
#define DISP_DISPLAY_CTL_2_ADDR 0x008
|
|
DISP_REG(DISP_DISPLAY_CTL_2_ADDR)
|
|
|
|
/* DISPLAY MODE 0x009 partial display not supported */
|
|
#define DISP_POWER_SUPPLY_INTF_ADDR 0x00A
|
|
DISP_REG(DISP_POWER_SUPPLY_INTF_ADDR)
|
|
|
|
/* DISPLAY MODE 0x00B xZoom feature is not supported */
|
|
#define DISP_EXT_DISPLAY_CTL_1_ADDR 0x00C
|
|
DISP_REG(DISP_EXT_DISPLAY_CTL_1_ADDR)
|
|
|
|
#define DISP_FRAME_CYCLE_CTL_ADDR 0x00D
|
|
DISP_REG(DISP_FRAME_CYCLE_CTL_ADDR)
|
|
|
|
#define DISP_EXT_DISPLAY_CTL_2_ADDR 0x00E
|
|
DISP_REG(DISP_EXT_DISPLAY_CTL_2_ADDR)
|
|
|
|
#define DISP_EXT_DISPLAY_CTL_3_ADDR 0x00F
|
|
DISP_REG(DISP_EXT_DISPLAY_CTL_3_ADDR)
|
|
|
|
#define DISP_LTPS_CTL_1_ADDR 0x012
|
|
DISP_REG(DISP_LTPS_CTL_1_ADDR)
|
|
#define DISP_LTPS_CTL_2_ADDR 0x013
|
|
DISP_REG(DISP_LTPS_CTL_2_ADDR)
|
|
#define DISP_LTPS_CTL_3_ADDR 0x014
|
|
DISP_REG(DISP_LTPS_CTL_3_ADDR)
|
|
#define DISP_LTPS_CTL_4_ADDR 0x018
|
|
DISP_REG(DISP_LTPS_CTL_4_ADDR)
|
|
#define DISP_LTPS_CTL_5_ADDR 0x019
|
|
DISP_REG(DISP_LTPS_CTL_5_ADDR)
|
|
#define DISP_LTPS_CTL_6_ADDR 0x01A
|
|
DISP_REG(DISP_LTPS_CTL_6_ADDR)
|
|
#define DISP_AMP_SETTING_ADDR 0x01C
|
|
DISP_REG(DISP_AMP_SETTING_ADDR)
|
|
#define DISP_MODE_SETTING_ADDR 0x01D
|
|
DISP_REG(DISP_MODE_SETTING_ADDR)
|
|
#define DISP_POFF_LN_SETTING_ADDR 0x01E
|
|
DISP_REG(DISP_POFF_LN_SETTING_ADDR)
|
|
/* Power Contol */
|
|
#define DISP_POWER_CTL_1_ADDR 0x100
|
|
DISP_REG(DISP_POWER_CTL_1_ADDR)
|
|
#define DISP_POWER_CTL_2_ADDR 0x101
|
|
DISP_REG(DISP_POWER_CTL_2_ADDR)
|
|
#define DISP_POWER_CTL_3_ADDR 0x102
|
|
DISP_REG(DISP_POWER_CTL_3_ADDR)
|
|
#define DISP_POWER_CTL_4_ADDR 0x103
|
|
DISP_REG(DISP_POWER_CTL_4_ADDR)
|
|
#define DISP_POWER_CTL_5_ADDR 0x104
|
|
DISP_REG(DISP_POWER_CTL_5_ADDR)
|
|
#define DISP_POWER_CTL_6_ADDR 0x105
|
|
DISP_REG(DISP_POWER_CTL_6_ADDR)
|
|
#define DISP_POWER_CTL_7_ADDR 0x106
|
|
DISP_REG(DISP_POWER_CTL_7_ADDR)
|
|
/* RAM Access */
|
|
#define DISP_RAM_ADDR_SET_1_ADDR 0x200
|
|
DISP_REG(DISP_RAM_ADDR_SET_1_ADDR)
|
|
#define DISP_RAM_ADDR_SET_2_ADDR 0x201
|
|
DISP_REG(DISP_RAM_ADDR_SET_2_ADDR)
|
|
#define DISP_CMD_RAMRD DISP_CMD_RAMWR
|
|
#define DISP_CMD_RAMWR 0x202
|
|
DISP_REG(DISP_CMD_RAMWR)
|
|
#define DISP_RAM_DATA_MASK_1_ADDR 0x203
|
|
DISP_REG(DISP_RAM_DATA_MASK_1_ADDR)
|
|
#define DISP_RAM_DATA_MASK_2_ADDR 0x204
|
|
DISP_REG(DISP_RAM_DATA_MASK_2_ADDR)
|
|
/* Gamma Control, Contrast, Gray Scale Setting */
|
|
#define DISP_GAMMA_CONTROL_1_ADDR 0x300
|
|
DISP_REG(DISP_GAMMA_CONTROL_1_ADDR)
|
|
#define DISP_GAMMA_CONTROL_2_ADDR 0x301
|
|
DISP_REG(DISP_GAMMA_CONTROL_2_ADDR)
|
|
#define DISP_GAMMA_CONTROL_3_ADDR 0x302
|
|
DISP_REG(DISP_GAMMA_CONTROL_3_ADDR)
|
|
#define DISP_GAMMA_CONTROL_4_ADDR 0x303
|
|
DISP_REG(DISP_GAMMA_CONTROL_4_ADDR)
|
|
#define DISP_GAMMA_CONTROL_5_ADDR 0x304
|
|
DISP_REG(DISP_GAMMA_CONTROL_5_ADDR)
|
|
/* Coordinate Control */
|
|
#define DISP_VERT_SCROLL_CTL_1_ADDR 0x400
|
|
DISP_REG(DISP_VERT_SCROLL_CTL_1_ADDR)
|
|
#define DISP_VERT_SCROLL_CTL_2_ADDR 0x401
|
|
DISP_REG(DISP_VERT_SCROLL_CTL_2_ADDR)
|
|
#define DISP_SCREEN_1_DRV_POS_1_ADDR 0x402
|
|
DISP_REG(DISP_SCREEN_1_DRV_POS_1_ADDR)
|
|
#define DISP_SCREEN_1_DRV_POS_2_ADDR 0x403
|
|
DISP_REG(DISP_SCREEN_1_DRV_POS_2_ADDR)
|
|
#define DISP_SCREEN_2_DRV_POS_1_ADDR 0x404
|
|
DISP_REG(DISP_SCREEN_2_DRV_POS_1_ADDR)
|
|
#define DISP_SCREEN_2_DRV_POS_2_ADDR 0x405
|
|
DISP_REG(DISP_SCREEN_2_DRV_POS_2_ADDR)
|
|
#define DISP_HORZ_RAM_ADDR_POS_1_ADDR 0x406
|
|
DISP_REG(DISP_HORZ_RAM_ADDR_POS_1_ADDR)
|
|
#define DISP_HORZ_RAM_ADDR_POS_2_ADDR 0x407
|
|
DISP_REG(DISP_HORZ_RAM_ADDR_POS_2_ADDR)
|
|
#define DISP_VERT_RAM_ADDR_POS_1_ADDR 0x408
|
|
DISP_REG(DISP_VERT_RAM_ADDR_POS_1_ADDR)
|
|
#define DISP_VERT_RAM_ADDR_POS_2_ADDR 0x409
|
|
DISP_REG(DISP_VERT_RAM_ADDR_POS_2_ADDR)
|
|
#define DISP_TMD_700_ADDR 0x700 /* 0x700 */
|
|
DISP_REG(DISP_TMD_700_ADDR)
|
|
#define DISP_TMD_015_ADDR 0x015 /* 0x700 */
|
|
DISP_REG(DISP_TMD_015_ADDR)
|
|
#define DISP_TMD_305_ADDR 0x305 /* 0x700 */
|
|
DISP_REG(DISP_TMD_305_ADDR)
|
|
|
|
/*
|
|
* TMD QVGA Bit Definations
|
|
*/
|
|
|
|
#define DISP_BIT_IB15 0x8000
|
|
#define DISP_BIT_IB14 0x4000
|
|
#define DISP_BIT_IB13 0x2000
|
|
#define DISP_BIT_IB12 0x1000
|
|
#define DISP_BIT_IB11 0x0800
|
|
#define DISP_BIT_IB10 0x0400
|
|
#define DISP_BIT_IB09 0x0200
|
|
#define DISP_BIT_IB08 0x0100
|
|
#define DISP_BIT_IB07 0x0080
|
|
#define DISP_BIT_IB06 0x0040
|
|
#define DISP_BIT_IB05 0x0020
|
|
#define DISP_BIT_IB04 0x0010
|
|
#define DISP_BIT_IB03 0x0008
|
|
#define DISP_BIT_IB02 0x0004
|
|
#define DISP_BIT_IB01 0x0002
|
|
#define DISP_BIT_IB00 0x0001
|
|
/*
|
|
* Display Control
|
|
* DISP_START_OSCILLATION_ADDR Start Oscillation
|
|
* DISP_DRIVER_OUTPUT_CTL_ADDR Driver Output Control
|
|
*/
|
|
#define DISP_BITMASK_SS DISP_BIT_IB08
|
|
#define DISP_BITMASK_NL5 DISP_BIT_IB05
|
|
#define DISP_BITMASK_NL4 DISP_BIT_IB04
|
|
#define DISP_BITMASK_NL3 DISP_BIT_IB03
|
|
#define DISP_BITMASK_NL2 DISP_BIT_IB02
|
|
#define DISP_BITMASK_NL1 DISP_BIT_IB01
|
|
#define DISP_BITMASK_NL0 DISP_BIT_IB00
|
|
/* DISP_LCD_DRIVING_SIG_ADDR LCD Driving Signal Setting */
|
|
#define DISP_BITMASK_BC DISP_BIT_IB09
|
|
/* DISP_ENTRY_MODE_ADDR Entry Mode */
|
|
#define DISP_BITMASK_TRI DISP_BIT_IB15
|
|
#define DISP_BITMASK_DFM1 DISP_BIT_IB14
|
|
#define DISP_BITMASK_DFM0 DISP_BIT_IB13
|
|
#define DISP_BITMASK_BGR DISP_BIT_IB12
|
|
#define DISP_BITMASK_HWM0 DISP_BIT_IB08
|
|
#define DISP_BITMASK_ID1 DISP_BIT_IB05
|
|
#define DISP_BITMASK_ID0 DISP_BIT_IB04
|
|
#define DISP_BITMASK_AM DISP_BIT_IB03
|
|
/* DISP_DISPLAY_CTL_1_ADDR Display Control (1) */
|
|
#define DISP_BITMASK_COL1 DISP_BIT_IB15
|
|
#define DISP_BITMASK_COL0 DISP_BIT_IB14
|
|
#define DISP_BITMASK_VLE2 DISP_BIT_IB10
|
|
#define DISP_BITMASK_VLE1 DISP_BIT_IB09
|
|
#define DISP_BITMASK_SPT DISP_BIT_IB08
|
|
#define DISP_BITMASK_PT1 DISP_BIT_IB07
|
|
#define DISP_BITMASK_PT0 DISP_BIT_IB06
|
|
#define DISP_BITMASK_REV DISP_BIT_IB02
|
|
/* DISP_DISPLAY_CTL_2_ADDR Display Control (2) */
|
|
#define DISP_BITMASK_FP3 DISP_BIT_IB11
|
|
#define DISP_BITMASK_FP2 DISP_BIT_IB10
|
|
#define DISP_BITMASK_FP1 DISP_BIT_IB09
|
|
#define DISP_BITMASK_FP0 DISP_BIT_IB08
|
|
#define DISP_BITMASK_BP3 DISP_BIT_IB03
|
|
#define DISP_BITMASK_BP2 DISP_BIT_IB02
|
|
#define DISP_BITMASK_BP1 DISP_BIT_IB01
|
|
#define DISP_BITMASK_BP0 DISP_BIT_IB00
|
|
/* DISP_POWER_SUPPLY_INTF_ADDR Power Supply IC Interface Control */
|
|
#define DISP_BITMASK_CSE DISP_BIT_IB12
|
|
#define DISP_BITMASK_TE DISP_BIT_IB08
|
|
#define DISP_BITMASK_IX3 DISP_BIT_IB03
|
|
#define DISP_BITMASK_IX2 DISP_BIT_IB02
|
|
#define DISP_BITMASK_IX1 DISP_BIT_IB01
|
|
#define DISP_BITMASK_IX0 DISP_BIT_IB00
|
|
/* DISP_EXT_DISPLAY_CTL_1_ADDR External Display Interface Control (1) */
|
|
#define DISP_BITMASK_RM DISP_BIT_IB08
|
|
#define DISP_BITMASK_DM1 DISP_BIT_IB05
|
|
#define DISP_BITMASK_DM0 DISP_BIT_IB04
|
|
#define DISP_BITMASK_RIM1 DISP_BIT_IB01
|
|
#define DISP_BITMASK_RIM0 DISP_BIT_IB00
|
|
/* DISP_FRAME_CYCLE_CTL_ADDR Frame Frequency Adjustment Control */
|
|
#define DISP_BITMASK_DIVI1 DISP_BIT_IB09
|
|
#define DISP_BITMASK_DIVI0 DISP_BIT_IB08
|
|
#define DISP_BITMASK_RTNI4 DISP_BIT_IB04
|
|
#define DISP_BITMASK_RTNI3 DISP_BIT_IB03
|
|
#define DISP_BITMASK_RTNI2 DISP_BIT_IB02
|
|
#define DISP_BITMASK_RTNI1 DISP_BIT_IB01
|
|
#define DISP_BITMASK_RTNI0 DISP_BIT_IB00
|
|
/* DISP_EXT_DISPLAY_CTL_2_ADDR External Display Interface Control (2) */
|
|
#define DISP_BITMASK_DIVE1 DISP_BIT_IB09
|
|
#define DISP_BITMASK_DIVE0 DISP_BIT_IB08
|
|
#define DISP_BITMASK_RTNE7 DISP_BIT_IB07
|
|
#define DISP_BITMASK_RTNE6 DISP_BIT_IB06
|
|
#define DISP_BITMASK_RTNE5 DISP_BIT_IB05
|
|
#define DISP_BITMASK_RTNE4 DISP_BIT_IB04
|
|
#define DISP_BITMASK_RTNE3 DISP_BIT_IB03
|
|
#define DISP_BITMASK_RTNE2 DISP_BIT_IB02
|
|
#define DISP_BITMASK_RTNE1 DISP_BIT_IB01
|
|
#define DISP_BITMASK_RTNE0 DISP_BIT_IB00
|
|
/* DISP_EXT_DISPLAY_CTL_3_ADDR External Display Interface Control (3) */
|
|
#define DISP_BITMASK_VSPL DISP_BIT_IB04
|
|
#define DISP_BITMASK_HSPL DISP_BIT_IB03
|
|
#define DISP_BITMASK_VPL DISP_BIT_IB02
|
|
#define DISP_BITMASK_EPL DISP_BIT_IB01
|
|
#define DISP_BITMASK_DPL DISP_BIT_IB00
|
|
/* DISP_LTPS_CTL_1_ADDR LTPS Interface Control (1) */
|
|
#define DISP_BITMASK_CLWI3 DISP_BIT_IB11
|
|
#define DISP_BITMASK_CLWI2 DISP_BIT_IB10
|
|
#define DISP_BITMASK_CLWI1 DISP_BIT_IB09
|
|
#define DISP_BITMASK_CLWI0 DISP_BIT_IB08
|
|
#define DISP_BITMASK_CLTI1 DISP_BIT_IB01
|
|
#define DISP_BITMASK_CLTI0 DISP_BIT_IB00
|
|
/* DISP_LTPS_CTL_2_ADDR LTPS Interface Control (2) */
|
|
#define DISP_BITMASK_OEVBI1 DISP_BIT_IB09
|
|
#define DISP_BITMASK_OEVBI0 DISP_BIT_IB08
|
|
#define DISP_BITMASK_OEVFI1 DISP_BIT_IB01
|
|
#define DISP_BITMASK_OEVFI0 DISP_BIT_IB00
|
|
/* DISP_LTPS_CTL_3_ADDR LTPS Interface Control (3) */
|
|
#define DISP_BITMASK_SHI1 DISP_BIT_IB01
|
|
#define DISP_BITMASK_SHI0 DISP_BIT_IB00
|
|
/* DISP_LTPS_CTL_4_ADDR LTPS Interface Control (4) */
|
|
#define DISP_BITMASK_CLWE5 DISP_BIT_IB13
|
|
#define DISP_BITMASK_CLWE4 DISP_BIT_IB12
|
|
#define DISP_BITMASK_CLWE3 DISP_BIT_IB11
|
|
#define DISP_BITMASK_CLWE2 DISP_BIT_IB10
|
|
#define DISP_BITMASK_CLWE1 DISP_BIT_IB09
|
|
#define DISP_BITMASK_CLWE0 DISP_BIT_IB08
|
|
#define DISP_BITMASK_CLTE3 DISP_BIT_IB03
|
|
#define DISP_BITMASK_CLTE2 DISP_BIT_IB02
|
|
#define DISP_BITMASK_CLTE1 DISP_BIT_IB01
|
|
#define DISP_BITMASK_CLTE0 DISP_BIT_IB00
|
|
/* DISP_LTPS_CTL_5_ADDR LTPS Interface Control (5) */
|
|
#define DISP_BITMASK_OEVBE3 DISP_BIT_IB11
|
|
#define DISP_BITMASK_OEVBE2 DISP_BIT_IB10
|
|
#define DISP_BITMASK_OEVBE1 DISP_BIT_IB09
|
|
#define DISP_BITMASK_OEVBE0 DISP_BIT_IB08
|
|
#define DISP_BITMASK_OEVFE3 DISP_BIT_IB03
|
|
#define DISP_BITMASK_OEVFE2 DISP_BIT_IB02
|
|
#define DISP_BITMASK_OEVFE1 DISP_BIT_IB01
|
|
#define DISP_BITMASK_OEVFE0 DISP_BIT_IB00
|
|
/* DISP_LTPS_CTL_6_ADDR LTPS Interface Control (6) */
|
|
#define DISP_BITMASK_SHE3 DISP_BIT_IB03
|
|
#define DISP_BITMASK_SHE2 DISP_BIT_IB02
|
|
#define DISP_BITMASK_SHE1 DISP_BIT_IB01
|
|
#define DISP_BITMASK_SHE0 DISP_BIT_IB00
|
|
/* DISP_AMP_SETTING_ADDR Amplify Setting */
|
|
#define DISP_BITMASK_ABSW1 DISP_BIT_IB01
|
|
#define DISP_BITMASK_ABSW0 DISP_BIT_IB00
|
|
/* DISP_MODE_SETTING_ADDR Mode Setting */
|
|
#define DISP_BITMASK_DSTB DISP_BIT_IB02
|
|
#define DISP_BITMASK_STB DISP_BIT_IB00
|
|
/* DISP_POFF_LN_SETTING_ADDR Power Off Line Setting */
|
|
#define DISP_BITMASK_POFH3 DISP_BIT_IB03
|
|
#define DISP_BITMASK_POFH2 DISP_BIT_IB02
|
|
#define DISP_BITMASK_POFH1 DISP_BIT_IB01
|
|
#define DISP_BITMASK_POFH0 DISP_BIT_IB00
|
|
|
|
/* Power Contol */
|
|
/* DISP_POWER_CTL_1_ADDR Power Control (1) */
|
|
#define DISP_BITMASK_PO DISP_BIT_IB11
|
|
#define DISP_BITMASK_VCD DISP_BIT_IB09
|
|
#define DISP_BITMASK_VSC DISP_BIT_IB08
|
|
#define DISP_BITMASK_CON DISP_BIT_IB07
|
|
#define DISP_BITMASK_ASW1 DISP_BIT_IB06
|
|
#define DISP_BITMASK_ASW0 DISP_BIT_IB05
|
|
#define DISP_BITMASK_OEV DISP_BIT_IB04
|
|
#define DISP_BITMASK_OEVE DISP_BIT_IB03
|
|
#define DISP_BITMASK_FR DISP_BIT_IB02
|
|
#define DISP_BITMASK_D1 DISP_BIT_IB01
|
|
#define DISP_BITMASK_D0 DISP_BIT_IB00
|
|
/* DISP_POWER_CTL_2_ADDR Power Control (2) */
|
|
#define DISP_BITMASK_DC4 DISP_BIT_IB15
|
|
#define DISP_BITMASK_DC3 DISP_BIT_IB14
|
|
#define DISP_BITMASK_SAP2 DISP_BIT_IB13
|
|
#define DISP_BITMASK_SAP1 DISP_BIT_IB12
|
|
#define DISP_BITMASK_SAP0 DISP_BIT_IB11
|
|
#define DISP_BITMASK_BT2 DISP_BIT_IB10
|
|
#define DISP_BITMASK_BT1 DISP_BIT_IB09
|
|
#define DISP_BITMASK_BT0 DISP_BIT_IB08
|
|
#define DISP_BITMASK_DC2 DISP_BIT_IB07
|
|
#define DISP_BITMASK_DC1 DISP_BIT_IB06
|
|
#define DISP_BITMASK_DC0 DISP_BIT_IB05
|
|
#define DISP_BITMASK_AP2 DISP_BIT_IB04
|
|
#define DISP_BITMASK_AP1 DISP_BIT_IB03
|
|
#define DISP_BITMASK_AP0 DISP_BIT_IB02
|
|
/* DISP_POWER_CTL_3_ADDR Power Control (3) */
|
|
#define DISP_BITMASK_VGL4 DISP_BIT_IB10
|
|
#define DISP_BITMASK_VGL3 DISP_BIT_IB09
|
|
#define DISP_BITMASK_VGL2 DISP_BIT_IB08
|
|
#define DISP_BITMASK_VGL1 DISP_BIT_IB07
|
|
#define DISP_BITMASK_VGL0 DISP_BIT_IB06
|
|
#define DISP_BITMASK_VGH4 DISP_BIT_IB04
|
|
#define DISP_BITMASK_VGH3 DISP_BIT_IB03
|
|
#define DISP_BITMASK_VGH2 DISP_BIT_IB02
|
|
#define DISP_BITMASK_VGH1 DISP_BIT_IB01
|
|
#define DISP_BITMASK_VGH0 DISP_BIT_IB00
|
|
/* DISP_POWER_CTL_4_ADDR Power Control (4) */
|
|
#define DISP_BITMASK_VC2 DISP_BIT_IB02
|
|
#define DISP_BITMASK_VC1 DISP_BIT_IB01
|
|
#define DISP_BITMASK_VC0 DISP_BIT_IB00
|
|
/* DISP_POWER_CTL_5_ADDR Power Control (5) */
|
|
#define DISP_BITMASK_VRL3 DISP_BIT_IB11
|
|
#define DISP_BITMASK_VRL2 DISP_BIT_IB10
|
|
#define DISP_BITMASK_VRL1 DISP_BIT_IB09
|
|
#define DISP_BITMASK_VRL0 DISP_BIT_IB08
|
|
#define DISP_BITMASK_PON DISP_BIT_IB04
|
|
#define DISP_BITMASK_VRH3 DISP_BIT_IB03
|
|
#define DISP_BITMASK_VRH2 DISP_BIT_IB02
|
|
#define DISP_BITMASK_VRH1 DISP_BIT_IB01
|
|
#define DISP_BITMASK_VRH0 DISP_BIT_IB00
|
|
/* DISP_POWER_CTL_6_ADDR Power Control (6) */
|
|
#define DISP_BITMASK_VCOMG DISP_BIT_IB13
|
|
#define DISP_BITMASK_VDV4 DISP_BIT_IB12
|
|
#define DISP_BITMASK_VDV3 DISP_BIT_IB11
|
|
#define DISP_BITMASK_VDV2 DISP_BIT_IB10
|
|
#define DISP_BITMASK_VDV1 DISP_BIT_IB09
|
|
#define DISP_BITMASK_VDV0 DISP_BIT_IB08
|
|
#define DISP_BITMASK_VCM4 DISP_BIT_IB04
|
|
#define DISP_BITMASK_VCM3 DISP_BIT_IB03
|
|
#define DISP_BITMASK_VCM2 DISP_BIT_IB02
|
|
#define DISP_BITMASK_VCM1 DISP_BIT_IB01
|
|
#define DISP_BITMASK_VCM0 DISP_BIT_IB00
|
|
/* RAM Access */
|
|
/* DISP_RAM_ADDR_SET_1_ADDR RAM Address Set (1) */
|
|
#define DISP_BITMASK_AD7 DISP_BIT_IB07
|
|
#define DISP_BITMASK_AD6 DISP_BIT_IB06
|
|
#define DISP_BITMASK_AD5 DISP_BIT_IB05
|
|
#define DISP_BITMASK_AD4 DISP_BIT_IB04
|
|
#define DISP_BITMASK_AD3 DISP_BIT_IB03
|
|
#define DISP_BITMASK_AD2 DISP_BIT_IB02
|
|
#define DISP_BITMASK_AD1 DISP_BIT_IB01
|
|
#define DISP_BITMASK_AD0 DISP_BIT_IB00
|
|
/* DISP_RAM_ADDR_SET_2_ADDR RAM Address Set (2) */
|
|
#define DISP_BITMASK_AD16 DISP_BIT_IB08
|
|
#define DISP_BITMASK_AD15 DISP_BIT_IB07
|
|
#define DISP_BITMASK_AD14 DISP_BIT_IB06
|
|
#define DISP_BITMASK_AD13 DISP_BIT_IB05
|
|
#define DISP_BITMASK_AD12 DISP_BIT_IB04
|
|
#define DISP_BITMASK_AD11 DISP_BIT_IB03
|
|
#define DISP_BITMASK_AD10 DISP_BIT_IB02
|
|
#define DISP_BITMASK_AD9 DISP_BIT_IB01
|
|
#define DISP_BITMASK_AD8 DISP_BIT_IB00
|
|
/*
|
|
* DISP_CMD_RAMWR RAM Data Read/Write
|
|
* Use Data Bit Configuration
|
|
*/
|
|
/* DISP_RAM_DATA_MASK_1_ADDR RAM Write Data Mask (1) */
|
|
#define DISP_BITMASK_WM11 DISP_BIT_IB13
|
|
#define DISP_BITMASK_WM10 DISP_BIT_IB12
|
|
#define DISP_BITMASK_WM9 DISP_BIT_IB11
|
|
#define DISP_BITMASK_WM8 DISP_BIT_IB10
|
|
#define DISP_BITMASK_WM7 DISP_BIT_IB09
|
|
#define DISP_BITMASK_WM6 DISP_BIT_IB08
|
|
#define DISP_BITMASK_WM5 DISP_BIT_IB05
|
|
#define DISP_BITMASK_WM4 DISP_BIT_IB04
|
|
#define DISP_BITMASK_WM3 DISP_BIT_IB03
|
|
#define DISP_BITMASK_WM2 DISP_BIT_IB02
|
|
#define DISP_BITMASK_WM1 DISP_BIT_IB01
|
|
#define DISP_BITMASK_WM0 DISP_BIT_IB00
|
|
/* DISP_RAM_DATA_MASK_2_ADDR RAM Write Data Mask (2) */
|
|
#define DISP_BITMASK_WM17 DISP_BIT_IB05
|
|
#define DISP_BITMASK_WM16 DISP_BIT_IB04
|
|
#define DISP_BITMASK_WM15 DISP_BIT_IB03
|
|
#define DISP_BITMASK_WM14 DISP_BIT_IB02
|
|
#define DISP_BITMASK_WM13 DISP_BIT_IB01
|
|
#define DISP_BITMASK_WM12 DISP_BIT_IB00
|
|
/*Gamma Control */
|
|
/* DISP_GAMMA_CONTROL_1_ADDR Gamma Control (1) */
|
|
#define DISP_BITMASK_PKP12 DISP_BIT_IB10
|
|
#define DISP_BITMASK_PKP11 DISP_BIT_IB08
|
|
#define DISP_BITMASK_PKP10 DISP_BIT_IB09
|
|
#define DISP_BITMASK_PKP02 DISP_BIT_IB02
|
|
#define DISP_BITMASK_PKP01 DISP_BIT_IB01
|
|
#define DISP_BITMASK_PKP00 DISP_BIT_IB00
|
|
/* DISP_GAMMA_CONTROL_2_ADDR Gamma Control (2) */
|
|
#define DISP_BITMASK_PKP32 DISP_BIT_IB10
|
|
#define DISP_BITMASK_PKP31 DISP_BIT_IB09
|
|
#define DISP_BITMASK_PKP30 DISP_BIT_IB08
|
|
#define DISP_BITMASK_PKP22 DISP_BIT_IB02
|
|
#define DISP_BITMASK_PKP21 DISP_BIT_IB01
|
|
#define DISP_BITMASK_PKP20 DISP_BIT_IB00
|
|
/* DISP_GAMMA_CONTROL_3_ADDR Gamma Control (3) */
|
|
#define DISP_BITMASK_PKP52 DISP_BIT_IB10
|
|
#define DISP_BITMASK_PKP51 DISP_BIT_IB09
|
|
#define DISP_BITMASK_PKP50 DISP_BIT_IB08
|
|
#define DISP_BITMASK_PKP42 DISP_BIT_IB02
|
|
#define DISP_BITMASK_PKP41 DISP_BIT_IB01
|
|
#define DISP_BITMASK_PKP40 DISP_BIT_IB00
|
|
/* DISP_GAMMA_CONTROL_4_ADDR Gamma Control (4) */
|
|
#define DISP_BITMASK_PRP12 DISP_BIT_IB10
|
|
#define DISP_BITMASK_PRP11 DISP_BIT_IB08
|
|
#define DISP_BITMASK_PRP10 DISP_BIT_IB09
|
|
#define DISP_BITMASK_PRP02 DISP_BIT_IB02
|
|
#define DISP_BITMASK_PRP01 DISP_BIT_IB01
|
|
#define DISP_BITMASK_PRP00 DISP_BIT_IB00
|
|
/* DISP_GAMMA_CONTROL_5_ADDR Gamma Control (5) */
|
|
#define DISP_BITMASK_VRP14 DISP_BIT_IB12
|
|
#define DISP_BITMASK_VRP13 DISP_BIT_IB11
|
|
#define DISP_BITMASK_VRP12 DISP_BIT_IB10
|
|
#define DISP_BITMASK_VRP11 DISP_BIT_IB08
|
|
#define DISP_BITMASK_VRP10 DISP_BIT_IB09
|
|
#define DISP_BITMASK_VRP03 DISP_BIT_IB03
|
|
#define DISP_BITMASK_VRP02 DISP_BIT_IB02
|
|
#define DISP_BITMASK_VRP01 DISP_BIT_IB01
|
|
#define DISP_BITMASK_VRP00 DISP_BIT_IB00
|
|
/* DISP_GAMMA_CONTROL_6_ADDR Gamma Control (6) */
|
|
#define DISP_BITMASK_PKN12 DISP_BIT_IB10
|
|
#define DISP_BITMASK_PKN11 DISP_BIT_IB08
|
|
#define DISP_BITMASK_PKN10 DISP_BIT_IB09
|
|
#define DISP_BITMASK_PKN02 DISP_BIT_IB02
|
|
#define DISP_BITMASK_PKN01 DISP_BIT_IB01
|
|
#define DISP_BITMASK_PKN00 DISP_BIT_IB00
|
|
/* DISP_GAMMA_CONTROL_7_ADDR Gamma Control (7) */
|
|
#define DISP_BITMASK_PKN32 DISP_BIT_IB10
|
|
#define DISP_BITMASK_PKN31 DISP_BIT_IB08
|
|
#define DISP_BITMASK_PKN30 DISP_BIT_IB09
|
|
#define DISP_BITMASK_PKN22 DISP_BIT_IB02
|
|
#define DISP_BITMASK_PKN21 DISP_BIT_IB01
|
|
#define DISP_BITMASK_PKN20 DISP_BIT_IB00
|
|
/* DISP_GAMMA_CONTROL_8_ADDR Gamma Control (8) */
|
|
#define DISP_BITMASK_PKN52 DISP_BIT_IB10
|
|
#define DISP_BITMASK_PKN51 DISP_BIT_IB08
|
|
#define DISP_BITMASK_PKN50 DISP_BIT_IB09
|
|
#define DISP_BITMASK_PKN42 DISP_BIT_IB02
|
|
#define DISP_BITMASK_PKN41 DISP_BIT_IB01
|
|
#define DISP_BITMASK_PKN40 DISP_BIT_IB00
|
|
/* DISP_GAMMA_CONTROL_9_ADDR Gamma Control (9) */
|
|
#define DISP_BITMASK_PRN12 DISP_BIT_IB10
|
|
#define DISP_BITMASK_PRN11 DISP_BIT_IB08
|
|
#define DISP_BITMASK_PRN10 DISP_BIT_IB09
|
|
#define DISP_BITMASK_PRN02 DISP_BIT_IB02
|
|
#define DISP_BITMASK_PRN01 DISP_BIT_IB01
|
|
#define DISP_BITMASK_PRN00 DISP_BIT_IB00
|
|
/* DISP_GAMMA_CONTROL_10_ADDR Gamma Control (10) */
|
|
#define DISP_BITMASK_VRN14 DISP_BIT_IB12
|
|
#define DISP_BITMASK_VRN13 DISP_BIT_IB11
|
|
#define DISP_BITMASK_VRN12 DISP_BIT_IB10
|
|
#define DISP_BITMASK_VRN11 DISP_BIT_IB08
|
|
#define DISP_BITMASK_VRN10 DISP_BIT_IB09
|
|
#define DISP_BITMASK_VRN03 DISP_BIT_IB03
|
|
#define DISP_BITMASK_VRN02 DISP_BIT_IB02
|
|
#define DISP_BITMASK_VRN01 DISP_BIT_IB01
|
|
#define DISP_BITMASK_VRN00 DISP_BIT_IB00
|
|
/* Coordinate Control */
|
|
/* DISP_VERT_SCROLL_CTL_1_ADDR Vertical Scroll Control (1) */
|
|
#define DISP_BITMASK_VL18 DISP_BIT_IB08
|
|
#define DISP_BITMASK_VL17 DISP_BIT_IB07
|
|
#define DISP_BITMASK_VL16 DISP_BIT_IB06
|
|
#define DISP_BITMASK_VL15 DISP_BIT_IB05
|
|
#define DISP_BITMASK_VL14 DISP_BIT_IB04
|
|
#define DISP_BITMASK_VL13 DISP_BIT_IB03
|
|
#define DISP_BITMASK_VL12 DISP_BIT_IB02
|
|
#define DISP_BITMASK_VL11 DISP_BIT_IB01
|
|
#define DISP_BITMASK_VL10 DISP_BIT_IB00
|
|
/* DISP_VERT_SCROLL_CTL_2_ADDR Vertical Scroll Control (2) */
|
|
#define DISP_BITMASK_VL28 DISP_BIT_IB08
|
|
#define DISP_BITMASK_VL27 DISP_BIT_IB07
|
|
#define DISP_BITMASK_VL26 DISP_BIT_IB06
|
|
#define DISP_BITMASK_VL25 DISP_BIT_IB05
|
|
#define DISP_BITMASK_VL24 DISP_BIT_IB04
|
|
#define DISP_BITMASK_VL23 DISP_BIT_IB03
|
|
#define DISP_BITMASK_VL22 DISP_BIT_IB02
|
|
#define DISP_BITMASK_VL21 DISP_BIT_IB01
|
|
#define DISP_BITMASK_VL20 DISP_BIT_IB00
|
|
/* DISP_SCREEN_1_DRV_POS_1_ADDR First Screen Driving Position (1) */
|
|
#define DISP_BITMASK_SS18 DISP_BIT_IB08
|
|
#define DISP_BITMASK_SS17 DISP_BIT_IB07
|
|
#define DISP_BITMASK_SS16 DISP_BIT_IB06
|
|
#define DISP_BITMASK_SS15 DISP_BIT_IB05
|
|
#define DISP_BITMASK_SS14 DISP_BIT_IB04
|
|
#define DISP_BITMASK_SS13 DISP_BIT_IB03
|
|
#define DISP_BITMASK_SS12 DISP_BIT_IB02
|
|
#define DISP_BITMASK_SS11 DISP_BIT_IB01
|
|
#define DISP_BITMASK_SS10 DISP_BIT_IB00
|
|
/* DISP_SCREEN_1_DRV_POS_2_ADDR First Screen Driving Position (2) */
|
|
#define DISP_BITMASK_SE18 DISP_BIT_IB08
|
|
#define DISP_BITMASK_SE17 DISP_BIT_IB07
|
|
#define DISP_BITMASK_SE16 DISP_BIT_IB06
|
|
#define DISP_BITMASK_SE15 DISP_BIT_IB05
|
|
#define DISP_BITMASK_SE14 DISP_BIT_IB04
|
|
#define DISP_BITMASK_SE13 DISP_BIT_IB03
|
|
#define DISP_BITMASK_SE12 DISP_BIT_IB02
|
|
#define DISP_BITMASK_SE11 DISP_BIT_IB01
|
|
#define DISP_BITMASK_SE10 DISP_BIT_IB00
|
|
/* DISP_SCREEN_2_DRV_POS_1_ADDR Second Screen Driving Position (1) */
|
|
#define DISP_BITMASK_SS28 DISP_BIT_IB08
|
|
#define DISP_BITMASK_SS27 DISP_BIT_IB07
|
|
#define DISP_BITMASK_SS26 DISP_BIT_IB06
|
|
#define DISP_BITMASK_SS25 DISP_BIT_IB05
|
|
#define DISP_BITMASK_SS24 DISP_BIT_IB04
|
|
#define DISP_BITMASK_SS23 DISP_BIT_IB03
|
|
#define DISP_BITMASK_SS22 DISP_BIT_IB02
|
|
#define DISP_BITMASK_SS21 DISP_BIT_IB01
|
|
#define DISP_BITMASK_SS20 DISP_BIT_IB00
|
|
/* DISP_SCREEN_3_DRV_POS_2_ADDR Second Screen Driving Position (2) */
|
|
#define DISP_BITMASK_SE28 DISP_BIT_IB08
|
|
#define DISP_BITMASK_SE27 DISP_BIT_IB07
|
|
#define DISP_BITMASK_SE26 DISP_BIT_IB06
|
|
#define DISP_BITMASK_SE25 DISP_BIT_IB05
|
|
#define DISP_BITMASK_SE24 DISP_BIT_IB04
|
|
#define DISP_BITMASK_SE23 DISP_BIT_IB03
|
|
#define DISP_BITMASK_SE22 DISP_BIT_IB02
|
|
#define DISP_BITMASK_SE21 DISP_BIT_IB01
|
|
#define DISP_BITMASK_SE20 DISP_BIT_IB00
|
|
/* DISP_HORZ_RAM_ADDR_POS_1_ADDR Horizontal RAM Address Position (1) */
|
|
#define DISP_BITMASK_HSA7 DISP_BIT_IB07
|
|
#define DISP_BITMASK_HSA6 DISP_BIT_IB06
|
|
#define DISP_BITMASK_HSA5 DISP_BIT_IB05
|
|
#define DISP_BITMASK_HSA4 DISP_BIT_IB04
|
|
#define DISP_BITMASK_HSA3 DISP_BIT_IB03
|
|
#define DISP_BITMASK_HSA2 DISP_BIT_IB02
|
|
#define DISP_BITMASK_HSA1 DISP_BIT_IB01
|
|
#define DISP_BITMASK_HSA0 DISP_BIT_IB00
|
|
/* DISP_HORZ_RAM_ADDR_POS_2_ADDR Horizontal RAM Address Position (2) */
|
|
#define DISP_BITMASK_HEA7 DISP_BIT_IB07
|
|
#define DISP_BITMASK_HEA6 DISP_BIT_IB06
|
|
#define DISP_BITMASK_HEA5 DISP_BIT_IB05
|
|
#define DISP_BITMASK_HEA4 DISP_BIT_IB04
|
|
#define DISP_BITMASK_HEA3 DISP_BIT_IB03
|
|
#define DISP_BITMASK_HEA2 DISP_BIT_IB02
|
|
#define DISP_BITMASK_HEA1 DISP_BIT_IB01
|
|
#define DISP_BITMASK_HEA0 DISP_BIT_IB00
|
|
/* DISP_VERT_RAM_ADDR_POS_1_ADDR Vertical RAM Address Position (1) */
|
|
#define DISP_BITMASK_VSA8 DISP_BIT_IB08
|
|
#define DISP_BITMASK_VSA7 DISP_BIT_IB07
|
|
#define DISP_BITMASK_VSA6 DISP_BIT_IB06
|
|
#define DISP_BITMASK_VSA5 DISP_BIT_IB05
|
|
#define DISP_BITMASK_VSA4 DISP_BIT_IB04
|
|
#define DISP_BITMASK_VSA3 DISP_BIT_IB03
|
|
#define DISP_BITMASK_VSA2 DISP_BIT_IB02
|
|
#define DISP_BITMASK_VSA1 DISP_BIT_IB01
|
|
#define DISP_BITMASK_VSA0 DISP_BIT_IB00
|
|
/* DISP_VERT_RAM_ADDR_POS_2_ADDR Vertical RAM Address Position (2) */
|
|
#define DISP_BITMASK_VEA8 DISP_BIT_IB08
|
|
#define DISP_BITMASK_VEA7 DISP_BIT_IB07
|
|
#define DISP_BITMASK_VEA6 DISP_BIT_IB06
|
|
#define DISP_BITMASK_VEA5 DISP_BIT_IB05
|
|
#define DISP_BITMASK_VEA4 DISP_BIT_IB04
|
|
#define DISP_BITMASK_VEA3 DISP_BIT_IB03
|
|
#define DISP_BITMASK_VEA2 DISP_BIT_IB02
|
|
#define DISP_BITMASK_VEA1 DISP_BIT_IB01
|
|
#define DISP_BITMASK_VEA0 DISP_BIT_IB00
|
|
static word disp_area_start_row;
|
|
static word disp_area_end_row;
|
|
static boolean disp_initialized = FALSE;
|
|
/* For some reason the contrast set at init time is not good. Need to do
|
|
* it again
|
|
*/
|
|
static boolean display_on = FALSE;
|
|
|
|
static uint32 tmd20qvga_lcd_rev;
|
|
uint16 tmd20qvga_panel_offset;
|
|
|
|
#ifdef DISP_DEVICE_8BPP
|
|
static word convert_8_to_16_tbl[256] = {
|
|
0x0000, 0x2000, 0x4000, 0x6000, 0x8000, 0xA000, 0xC000, 0xE000,
|
|
0x0100, 0x2100, 0x4100, 0x6100, 0x8100, 0xA100, 0xC100, 0xE100,
|
|
0x0200, 0x2200, 0x4200, 0x6200, 0x8200, 0xA200, 0xC200, 0xE200,
|
|
0x0300, 0x2300, 0x4300, 0x6300, 0x8300, 0xA300, 0xC300, 0xE300,
|
|
0x0400, 0x2400, 0x4400, 0x6400, 0x8400, 0xA400, 0xC400, 0xE400,
|
|
0x0500, 0x2500, 0x4500, 0x6500, 0x8500, 0xA500, 0xC500, 0xE500,
|
|
0x0600, 0x2600, 0x4600, 0x6600, 0x8600, 0xA600, 0xC600, 0xE600,
|
|
0x0700, 0x2700, 0x4700, 0x6700, 0x8700, 0xA700, 0xC700, 0xE700,
|
|
0x0008, 0x2008, 0x4008, 0x6008, 0x8008, 0xA008, 0xC008, 0xE008,
|
|
0x0108, 0x2108, 0x4108, 0x6108, 0x8108, 0xA108, 0xC108, 0xE108,
|
|
0x0208, 0x2208, 0x4208, 0x6208, 0x8208, 0xA208, 0xC208, 0xE208,
|
|
0x0308, 0x2308, 0x4308, 0x6308, 0x8308, 0xA308, 0xC308, 0xE308,
|
|
0x0408, 0x2408, 0x4408, 0x6408, 0x8408, 0xA408, 0xC408, 0xE408,
|
|
0x0508, 0x2508, 0x4508, 0x6508, 0x8508, 0xA508, 0xC508, 0xE508,
|
|
0x0608, 0x2608, 0x4608, 0x6608, 0x8608, 0xA608, 0xC608, 0xE608,
|
|
0x0708, 0x2708, 0x4708, 0x6708, 0x8708, 0xA708, 0xC708, 0xE708,
|
|
0x0010, 0x2010, 0x4010, 0x6010, 0x8010, 0xA010, 0xC010, 0xE010,
|
|
0x0110, 0x2110, 0x4110, 0x6110, 0x8110, 0xA110, 0xC110, 0xE110,
|
|
0x0210, 0x2210, 0x4210, 0x6210, 0x8210, 0xA210, 0xC210, 0xE210,
|
|
0x0310, 0x2310, 0x4310, 0x6310, 0x8310, 0xA310, 0xC310, 0xE310,
|
|
0x0410, 0x2410, 0x4410, 0x6410, 0x8410, 0xA410, 0xC410, 0xE410,
|
|
0x0510, 0x2510, 0x4510, 0x6510, 0x8510, 0xA510, 0xC510, 0xE510,
|
|
0x0610, 0x2610, 0x4610, 0x6610, 0x8610, 0xA610, 0xC610, 0xE610,
|
|
0x0710, 0x2710, 0x4710, 0x6710, 0x8710, 0xA710, 0xC710, 0xE710,
|
|
0x0018, 0x2018, 0x4018, 0x6018, 0x8018, 0xA018, 0xC018, 0xE018,
|
|
0x0118, 0x2118, 0x4118, 0x6118, 0x8118, 0xA118, 0xC118, 0xE118,
|
|
0x0218, 0x2218, 0x4218, 0x6218, 0x8218, 0xA218, 0xC218, 0xE218,
|
|
0x0318, 0x2318, 0x4318, 0x6318, 0x8318, 0xA318, 0xC318, 0xE318,
|
|
0x0418, 0x2418, 0x4418, 0x6418, 0x8418, 0xA418, 0xC418, 0xE418,
|
|
0x0518, 0x2518, 0x4518, 0x6518, 0x8518, 0xA518, 0xC518, 0xE518,
|
|
0x0618, 0x2618, 0x4618, 0x6618, 0x8618, 0xA618, 0xC618, 0xE618,
|
|
0x0718, 0x2718, 0x4718, 0x6718, 0x8718, 0xA718, 0xC718, 0xE718
|
|
};
|
|
#endif /* DISP_DEVICE_8BPP */
|
|
|
|
static void tmd20qvga_disp_set_rect(int x, int y, int xres, int yres);
|
|
static void tmd20qvga_disp_init(struct platform_device *pdev);
|
|
static void tmd20qvga_disp_set_contrast(void);
|
|
static void tmd20qvga_disp_set_display_area(word start_row, word end_row);
|
|
static int tmd20qvga_disp_off(struct platform_device *pdev);
|
|
static int tmd20qvga_disp_on(struct platform_device *pdev);
|
|
static void tmd20qvga_set_revId(int);
|
|
|
|
/* future use */
|
|
void tmd20qvga_disp_clear_screen_area(word start_row, word end_row,
|
|
word start_column, word end_column);
|
|
|
|
static void tmd20qvga_set_revId(int id)
|
|
{
|
|
|
|
tmd20qvga_lcd_rev = id;
|
|
|
|
if (tmd20qvga_lcd_rev == 1)
|
|
tmd20qvga_panel_offset = 0x10;
|
|
else
|
|
tmd20qvga_panel_offset = 0;
|
|
}
|
|
|
|
static void tmd20qvga_disp_init(struct platform_device *pdev)
|
|
{
|
|
struct msm_fb_data_type *mfd;
|
|
|
|
if (disp_initialized)
|
|
return;
|
|
|
|
mfd = platform_get_drvdata(pdev);
|
|
|
|
DISP_CMD_PORT = mfd->cmd_port;
|
|
DISP_DATA_PORT = mfd->data_port;
|
|
|
|
#ifdef TMD20QVGA_LCD_18BPP
|
|
tmd20qvga_set_revId(2);
|
|
#else
|
|
tmd20qvga_set_revId(1);
|
|
#endif
|
|
|
|
disp_initialized = TRUE;
|
|
tmd20qvga_disp_set_contrast();
|
|
tmd20qvga_disp_set_display_area(0, QVGA_HEIGHT - 1);
|
|
}
|
|
|
|
static void tmd20qvga_disp_set_rect(int x, int y, int xres, int yres)
|
|
{
|
|
if (!disp_initialized)
|
|
return;
|
|
|
|
DISP_SET_RECT(y, y + yres - 1, x, x + xres - 1);
|
|
|
|
DISP_CMD_OUT(DISP_CMD_RAMWR);
|
|
}
|
|
|
|
static void tmd20qvga_disp_set_display_area(word start_row, word end_row)
|
|
{
|
|
word start_driving = start_row;
|
|
word end_driving = end_row;
|
|
|
|
if (!disp_initialized)
|
|
return;
|
|
|
|
/* Range checking
|
|
*/
|
|
if (end_driving >= QVGA_HEIGHT)
|
|
end_driving = QVGA_HEIGHT - 1;
|
|
if (start_driving > end_driving) {
|
|
/* Probably Backwards Switch */
|
|
start_driving = end_driving;
|
|
end_driving = start_row; /* Has not changed */
|
|
if (end_driving >= QVGA_HEIGHT)
|
|
end_driving = QVGA_HEIGHT - 1;
|
|
}
|
|
|
|
if ((start_driving == disp_area_start_row)
|
|
&& (end_driving == disp_area_end_row))
|
|
return;
|
|
|
|
disp_area_start_row = start_driving;
|
|
disp_area_end_row = end_driving;
|
|
|
|
DISP_WRITE_OUT(DISP_SCREEN_1_DRV_POS_1_ADDR,
|
|
DISP_VAL_IF(start_driving & 0x100,
|
|
DISP_BITMASK_SS18) |
|
|
DISP_VAL_IF(start_driving & 0x080,
|
|
DISP_BITMASK_SS17) |
|
|
DISP_VAL_IF(start_driving & 0x040,
|
|
DISP_BITMASK_SS16) |
|
|
DISP_VAL_IF(start_driving & 0x020,
|
|
DISP_BITMASK_SS15) |
|
|
DISP_VAL_IF(start_driving & 0x010,
|
|
DISP_BITMASK_SS14) |
|
|
DISP_VAL_IF(start_driving & 0x008,
|
|
DISP_BITMASK_SS13) |
|
|
DISP_VAL_IF(start_driving & 0x004,
|
|
DISP_BITMASK_SS12) |
|
|
DISP_VAL_IF(start_driving & 0x002,
|
|
DISP_BITMASK_SS11) |
|
|
DISP_VAL_IF(start_driving & 0x001, DISP_BITMASK_SS10));
|
|
|
|
DISP_WRITE_OUT(DISP_SCREEN_1_DRV_POS_2_ADDR,
|
|
DISP_VAL_IF(end_driving & 0x100, DISP_BITMASK_SE18) |
|
|
DISP_VAL_IF(end_driving & 0x080, DISP_BITMASK_SE17) |
|
|
DISP_VAL_IF(end_driving & 0x040, DISP_BITMASK_SE16) |
|
|
DISP_VAL_IF(end_driving & 0x020, DISP_BITMASK_SE15) |
|
|
DISP_VAL_IF(end_driving & 0x010, DISP_BITMASK_SE14) |
|
|
DISP_VAL_IF(end_driving & 0x008, DISP_BITMASK_SE13) |
|
|
DISP_VAL_IF(end_driving & 0x004, DISP_BITMASK_SE12) |
|
|
DISP_VAL_IF(end_driving & 0x002, DISP_BITMASK_SE11) |
|
|
DISP_VAL_IF(end_driving & 0x001, DISP_BITMASK_SE10));
|
|
}
|
|
|
|
static int tmd20qvga_disp_off(struct platform_device *pdev)
|
|
{
|
|
if (!disp_initialized)
|
|
tmd20qvga_disp_init(pdev);
|
|
|
|
if (display_on) {
|
|
if (tmd20qvga_lcd_rev == 2) {
|
|
DISP_WRITE_OUT(DISP_POFF_LN_SETTING_ADDR, 0x000A);
|
|
DISP_WRITE_OUT(DISP_POWER_CTL_1_ADDR, 0xFFEE);
|
|
WAIT_MSEC(40);
|
|
DISP_WRITE_OUT(DISP_POWER_CTL_1_ADDR, 0xF812);
|
|
WAIT_MSEC(40);
|
|
DISP_WRITE_OUT(DISP_POWER_CTL_1_ADDR, 0xE811);
|
|
WAIT_MSEC(40);
|
|
DISP_WRITE_OUT(DISP_POWER_CTL_1_ADDR, 0xC011);
|
|
WAIT_MSEC(40);
|
|
DISP_WRITE_OUT(DISP_POWER_CTL_1_ADDR, 0x4011);
|
|
WAIT_MSEC(20);
|
|
DISP_WRITE_OUT(DISP_POWER_CTL_1_ADDR, 0x0010);
|
|
|
|
} else {
|
|
DISP_WRITE_OUT(DISP_POFF_LN_SETTING_ADDR, 0x000F);
|
|
DISP_WRITE_OUT(DISP_POWER_CTL_1_ADDR, 0x0BFE);
|
|
DISP_WRITE_OUT(DISP_POWER_SUPPLY_INTF_ADDR, 0x0100);
|
|
WAIT_MSEC(40);
|
|
DISP_WRITE_OUT(DISP_POWER_CTL_1_ADDR, 0x0BED);
|
|
DISP_WRITE_OUT(DISP_POWER_SUPPLY_INTF_ADDR, 0x0100);
|
|
WAIT_MSEC(40);
|
|
DISP_WRITE_OUT(DISP_POWER_CTL_1_ADDR, 0x00CD);
|
|
DISP_WRITE_OUT(DISP_POWER_SUPPLY_INTF_ADDR, 0x0100);
|
|
WAIT_MSEC(20);
|
|
DISP_WRITE_OUT(DISP_START_OSCILLATION_ADDR, 0x0);
|
|
}
|
|
|
|
DISP_WRITE_OUT(DISP_MODE_SETTING_ADDR, 0x0004);
|
|
DISP_WRITE_OUT(DISP_MODE_SETTING_ADDR, 0x0000);
|
|
|
|
display_on = FALSE;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
static int tmd20qvga_disp_on(struct platform_device *pdev)
|
|
{
|
|
if (!disp_initialized)
|
|
tmd20qvga_disp_init(pdev);
|
|
|
|
if (!display_on) {
|
|
/* Deep Stand-by -> Stand-by */
|
|
DISP_CMD_OUT(DISP_START_OSCILLATION_ADDR);
|
|
WAIT_MSEC(1);
|
|
DISP_CMD_OUT(DISP_START_OSCILLATION_ADDR);
|
|
WAIT_MSEC(1);
|
|
DISP_CMD_OUT(DISP_START_OSCILLATION_ADDR);
|
|
WAIT_MSEC(1);
|
|
|
|
/* OFF -> Deep Stan-By -> Stand-by */
|
|
/* let's change the state from "Stand-by" to "Sleep" */
|
|
DISP_WRITE_OUT(DISP_MODE_SETTING_ADDR, 0x0005);
|
|
WAIT_MSEC(1);
|
|
|
|
/* Sleep -> Displaying */
|
|
DISP_WRITE_OUT(DISP_START_OSCILLATION_ADDR, 0x0001);
|
|
DISP_WRITE_OUT(DISP_DRIVER_OUTPUT_CTL_ADDR, 0x0127);
|
|
DISP_WRITE_OUT(DISP_LCD_DRIVING_SIG_ADDR, 0x200);
|
|
/* fast write mode */
|
|
DISP_WRITE_OUT(DISP_ENTRY_MODE_ADDR, 0x0130);
|
|
if (tmd20qvga_lcd_rev == 2)
|
|
DISP_WRITE_OUT(DISP_TMD_700_ADDR, 0x0003);
|
|
/* back porch = 14 + front porch = 2 --> 16 lines */
|
|
if (tmd20qvga_lcd_rev == 2) {
|
|
#ifdef TMD20QVGA_LCD_18BPP
|
|
/* 256k color */
|
|
DISP_WRITE_OUT(DISP_DISPLAY_CTL_1_ADDR, 0x0000);
|
|
#else
|
|
/* 65k color */
|
|
DISP_WRITE_OUT(DISP_DISPLAY_CTL_1_ADDR, 0x4000);
|
|
#endif
|
|
DISP_WRITE_OUT(DISP_DISPLAY_CTL_2_ADDR, 0x0302);
|
|
} else {
|
|
#ifdef TMD20QVGA_LCD_18BPP
|
|
/* 256k color */
|
|
DISP_WRITE_OUT(DISP_DISPLAY_CTL_1_ADDR, 0x0004);
|
|
#else
|
|
/* 65k color */
|
|
DISP_WRITE_OUT(DISP_DISPLAY_CTL_1_ADDR, 0x4004);
|
|
#endif
|
|
DISP_WRITE_OUT(DISP_DISPLAY_CTL_2_ADDR, 0x020E);
|
|
}
|
|
/* 16 bit one transfer */
|
|
if (tmd20qvga_lcd_rev == 2) {
|
|
DISP_WRITE_OUT(DISP_EXT_DISPLAY_CTL_1_ADDR, 0x0000);
|
|
DISP_WRITE_OUT(DISP_FRAME_CYCLE_CTL_ADDR, 0x0010);
|
|
DISP_WRITE_OUT(DISP_LTPS_CTL_1_ADDR, 0x0302);
|
|
DISP_WRITE_OUT(DISP_LTPS_CTL_2_ADDR, 0x0102);
|
|
DISP_WRITE_OUT(DISP_LTPS_CTL_3_ADDR, 0x0000);
|
|
DISP_WRITE_OUT(DISP_TMD_015_ADDR, 0x2000);
|
|
|
|
DISP_WRITE_OUT(DISP_AMP_SETTING_ADDR, 0x0000);
|
|
DISP_WRITE_OUT(DISP_GAMMA_CONTROL_1_ADDR, 0x0403);
|
|
DISP_WRITE_OUT(DISP_GAMMA_CONTROL_2_ADDR, 0x0304);
|
|
DISP_WRITE_OUT(DISP_GAMMA_CONTROL_3_ADDR, 0x0403);
|
|
DISP_WRITE_OUT(DISP_GAMMA_CONTROL_4_ADDR, 0x0303);
|
|
DISP_WRITE_OUT(DISP_GAMMA_CONTROL_5_ADDR, 0x0101);
|
|
DISP_WRITE_OUT(DISP_TMD_305_ADDR, 0);
|
|
|
|
DISP_WRITE_OUT(DISP_SCREEN_1_DRV_POS_1_ADDR, 0x0000);
|
|
DISP_WRITE_OUT(DISP_SCREEN_1_DRV_POS_2_ADDR, 0x013F);
|
|
|
|
DISP_WRITE_OUT(DISP_POWER_CTL_3_ADDR, 0x077D);
|
|
|
|
DISP_WRITE_OUT(DISP_POWER_CTL_4_ADDR, 0x0005);
|
|
DISP_WRITE_OUT(DISP_POWER_CTL_5_ADDR, 0x0000);
|
|
DISP_WRITE_OUT(DISP_POWER_CTL_6_ADDR, 0x0015);
|
|
DISP_WRITE_OUT(DISP_POWER_CTL_1_ADDR, 0xC010);
|
|
WAIT_MSEC(1);
|
|
|
|
DISP_WRITE_OUT(DISP_POWER_CTL_2_ADDR, 0x0001);
|
|
DISP_WRITE_OUT(DISP_POWER_CTL_1_ADDR, 0xFFFE);
|
|
WAIT_MSEC(60);
|
|
} else {
|
|
DISP_WRITE_OUT(DISP_EXT_DISPLAY_CTL_1_ADDR, 0x0001);
|
|
DISP_WRITE_OUT(DISP_FRAME_CYCLE_CTL_ADDR, 0x0010);
|
|
DISP_WRITE_OUT(DISP_LTPS_CTL_1_ADDR, 0x0301);
|
|
DISP_WRITE_OUT(DISP_LTPS_CTL_2_ADDR, 0x0001);
|
|
DISP_WRITE_OUT(DISP_LTPS_CTL_3_ADDR, 0x0000);
|
|
DISP_WRITE_OUT(DISP_AMP_SETTING_ADDR, 0x0000);
|
|
DISP_WRITE_OUT(DISP_GAMMA_CONTROL_1_ADDR, 0x0507);
|
|
DISP_WRITE_OUT(DISP_GAMMA_CONTROL_2_ADDR, 0x0405);
|
|
DISP_WRITE_OUT(DISP_GAMMA_CONTROL_3_ADDR, 0x0607);
|
|
DISP_WRITE_OUT(DISP_GAMMA_CONTROL_4_ADDR, 0x0502);
|
|
DISP_WRITE_OUT(DISP_GAMMA_CONTROL_5_ADDR, 0x0301);
|
|
DISP_WRITE_OUT(DISP_SCREEN_1_DRV_POS_1_ADDR, 0x0000);
|
|
DISP_WRITE_OUT(DISP_SCREEN_1_DRV_POS_2_ADDR, 0x013F);
|
|
DISP_WRITE_OUT(DISP_POWER_CTL_3_ADDR, 0x0795);
|
|
|
|
DISP_WRITE_OUT(DISP_POWER_SUPPLY_INTF_ADDR, 0x0102);
|
|
WAIT_MSEC(1);
|
|
|
|
DISP_WRITE_OUT(DISP_POWER_CTL_4_ADDR, 0x0450);
|
|
DISP_WRITE_OUT(DISP_POWER_SUPPLY_INTF_ADDR, 0x0103);
|
|
WAIT_MSEC(1);
|
|
|
|
DISP_WRITE_OUT(DISP_POWER_CTL_5_ADDR, 0x0008);
|
|
DISP_WRITE_OUT(DISP_POWER_SUPPLY_INTF_ADDR, 0x0104);
|
|
WAIT_MSEC(1);
|
|
|
|
DISP_WRITE_OUT(DISP_POWER_CTL_6_ADDR, 0x0C00);
|
|
DISP_WRITE_OUT(DISP_POWER_SUPPLY_INTF_ADDR, 0x0105);
|
|
WAIT_MSEC(1);
|
|
|
|
DISP_WRITE_OUT(DISP_POWER_CTL_7_ADDR, 0x0000);
|
|
DISP_WRITE_OUT(DISP_POWER_SUPPLY_INTF_ADDR, 0x0106);
|
|
WAIT_MSEC(1);
|
|
|
|
DISP_WRITE_OUT(DISP_POWER_CTL_1_ADDR, 0x0801);
|
|
DISP_WRITE_OUT(DISP_POWER_SUPPLY_INTF_ADDR, 0x0100);
|
|
WAIT_MSEC(1);
|
|
|
|
DISP_WRITE_OUT(DISP_POWER_CTL_2_ADDR, 0x001F);
|
|
DISP_WRITE_OUT(DISP_POWER_SUPPLY_INTF_ADDR, 0x0101);
|
|
WAIT_MSEC(60);
|
|
|
|
DISP_WRITE_OUT(DISP_POWER_CTL_2_ADDR, 0x009F);
|
|
DISP_WRITE_OUT(DISP_POWER_SUPPLY_INTF_ADDR, 0x0101);
|
|
WAIT_MSEC(10);
|
|
|
|
DISP_WRITE_OUT(DISP_HORZ_RAM_ADDR_POS_1_ADDR, 0x0010);
|
|
DISP_WRITE_OUT(DISP_HORZ_RAM_ADDR_POS_2_ADDR, 0x00FF);
|
|
DISP_WRITE_OUT(DISP_VERT_RAM_ADDR_POS_1_ADDR, 0x0000);
|
|
DISP_WRITE_OUT(DISP_VERT_RAM_ADDR_POS_2_ADDR, 0x013F);
|
|
/* RAM starts at address 0x10 */
|
|
DISP_WRITE_OUT(DISP_RAM_ADDR_SET_1_ADDR, 0x0010);
|
|
DISP_WRITE_OUT(DISP_RAM_ADDR_SET_2_ADDR, 0x0000);
|
|
|
|
/* lcd controller uses internal clock, not ext. vsync */
|
|
DISP_CMD_OUT(DISP_CMD_RAMWR);
|
|
|
|
DISP_WRITE_OUT(DISP_POWER_CTL_1_ADDR, 0x0881);
|
|
DISP_WRITE_OUT(DISP_POWER_SUPPLY_INTF_ADDR, 0x0100);
|
|
WAIT_MSEC(40);
|
|
|
|
DISP_WRITE_OUT(DISP_POWER_CTL_1_ADDR, 0x0BE1);
|
|
DISP_WRITE_OUT(DISP_POWER_SUPPLY_INTF_ADDR, 0x0100);
|
|
WAIT_MSEC(40);
|
|
|
|
DISP_WRITE_OUT(DISP_POWER_CTL_1_ADDR, 0x0BFF);
|
|
DISP_WRITE_OUT(DISP_POWER_SUPPLY_INTF_ADDR, 0x0100);
|
|
}
|
|
display_on = TRUE;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
static void tmd20qvga_disp_set_contrast(void)
|
|
{
|
|
#if (defined(TMD20QVGA_LCD_18BPP))
|
|
|
|
DISP_WRITE_OUT(DISP_GAMMA_CONTROL_1_ADDR, 0x0403);
|
|
DISP_WRITE_OUT(DISP_GAMMA_CONTROL_2_ADDR, 0x0302);
|
|
DISP_WRITE_OUT(DISP_GAMMA_CONTROL_3_ADDR, 0x0403);
|
|
DISP_WRITE_OUT(DISP_GAMMA_CONTROL_4_ADDR, 0x0303);
|
|
DISP_WRITE_OUT(DISP_GAMMA_CONTROL_5_ADDR, 0x0F07);
|
|
|
|
#else
|
|
int newcontrast = 0x46;
|
|
|
|
DISP_WRITE_OUT(DISP_GAMMA_CONTROL_1_ADDR, 0x0403);
|
|
|
|
DISP_WRITE_OUT(DISP_GAMMA_CONTROL_2_ADDR,
|
|
DISP_VAL_IF(newcontrast & 0x0001, DISP_BITMASK_PKP20) |
|
|
DISP_VAL_IF(newcontrast & 0x0002, DISP_BITMASK_PKP21) |
|
|
DISP_VAL_IF(newcontrast & 0x0004, DISP_BITMASK_PKP22) |
|
|
DISP_VAL_IF(newcontrast & 0x0010, DISP_BITMASK_PKP30) |
|
|
DISP_VAL_IF(newcontrast & 0x0020, DISP_BITMASK_PKP31) |
|
|
DISP_VAL_IF(newcontrast & 0x0040, DISP_BITMASK_PKP32));
|
|
|
|
DISP_WRITE_OUT(DISP_GAMMA_CONTROL_3_ADDR,
|
|
DISP_VAL_IF(newcontrast & 0x0010, DISP_BITMASK_PKP40) |
|
|
DISP_VAL_IF(newcontrast & 0x0020, DISP_BITMASK_PKP41) |
|
|
DISP_VAL_IF(newcontrast & 0x0040, DISP_BITMASK_PKP42) |
|
|
DISP_VAL_IF(newcontrast & 0x0001, DISP_BITMASK_PKP50) |
|
|
DISP_VAL_IF(newcontrast & 0x0002, DISP_BITMASK_PKP51) |
|
|
DISP_VAL_IF(newcontrast & 0x0004, DISP_BITMASK_PKP52));
|
|
|
|
DISP_WRITE_OUT(DISP_GAMMA_CONTROL_4_ADDR, 0x0303);
|
|
DISP_WRITE_OUT(DISP_GAMMA_CONTROL_5_ADDR, 0x0F07);
|
|
|
|
#endif /* defined(TMD20QVGA_LCD_18BPP) */
|
|
|
|
} /* End disp_set_contrast */
|
|
|
|
void tmd20qvga_disp_clear_screen_area
|
|
(word start_row, word end_row, word start_column, word end_column) {
|
|
int32 i;
|
|
|
|
/* Clear the display screen */
|
|
DISP_SET_RECT(start_row, end_row, start_column, end_column);
|
|
DISP_CMD_OUT(DISP_CMD_RAMWR);
|
|
i = (end_row - start_row + 1) * (end_column - start_column + 1);
|
|
for (; i > 0; i--)
|
|
DISP_DATA_OUT_16TO18BPP(0x0);
|
|
}
|
|
|
|
static int __init tmd20qvga_probe(struct platform_device *pdev)
|
|
{
|
|
msm_fb_add_device(pdev);
|
|
|
|
return 0;
|
|
}
|
|
|
|
static struct platform_driver this_driver = {
|
|
.probe = tmd20qvga_probe,
|
|
.driver = {
|
|
.name = "ebi2_tmd_qvga",
|
|
},
|
|
};
|
|
|
|
static struct msm_fb_panel_data tmd20qvga_panel_data = {
|
|
.on = tmd20qvga_disp_on,
|
|
.off = tmd20qvga_disp_off,
|
|
.set_rect = tmd20qvga_disp_set_rect,
|
|
};
|
|
|
|
static struct platform_device this_device = {
|
|
.name = "ebi2_tmd_qvga",
|
|
.id = 0,
|
|
.dev = {
|
|
.platform_data = &tmd20qvga_panel_data,
|
|
}
|
|
};
|
|
|
|
static int __init tmd20qvga_init(void)
|
|
{
|
|
int ret;
|
|
struct msm_panel_info *pinfo;
|
|
|
|
ret = platform_driver_register(&this_driver);
|
|
if (!ret) {
|
|
pinfo = &tmd20qvga_panel_data.panel_info;
|
|
pinfo->xres = 240;
|
|
pinfo->yres = 320;
|
|
MSM_FB_SINGLE_MODE_PANEL(pinfo);
|
|
pinfo->type = EBI2_PANEL;
|
|
pinfo->pdest = DISPLAY_1;
|
|
pinfo->wait_cycle = 0x808000;
|
|
#ifdef TMD20QVGA_LCD_18BPP
|
|
pinfo->bpp = 18;
|
|
#else
|
|
pinfo->bpp = 16;
|
|
#endif
|
|
pinfo->fb_num = 2;
|
|
pinfo->lcd.vsync_enable = TRUE;
|
|
pinfo->lcd.refx100 = 6000;
|
|
pinfo->lcd.v_back_porch = 16;
|
|
pinfo->lcd.v_front_porch = 4;
|
|
pinfo->lcd.v_pulse_width = 0;
|
|
pinfo->lcd.hw_vsync_mode = FALSE;
|
|
pinfo->lcd.vsync_notifier_period = 0;
|
|
|
|
ret = platform_device_register(&this_device);
|
|
if (ret)
|
|
platform_driver_unregister(&this_driver);
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
|
|
module_init(tmd20qvga_init);
|
|
|