summaryrefslogtreecommitdiff
path: root/ANDROID_3.4.5/drivers/video/wmt/devices
diff options
context:
space:
mode:
authorSrikant Patnaik2015-01-11 12:28:04 +0530
committerSrikant Patnaik2015-01-11 12:28:04 +0530
commit871480933a1c28f8a9fed4c4d34d06c439a7a422 (patch)
tree8718f573808810c2a1e8cb8fb6ac469093ca2784 /ANDROID_3.4.5/drivers/video/wmt/devices
parent9d40ac5867b9aefe0722bc1f110b965ff294d30d (diff)
downloadFOSSEE-netbook-kernel-source-871480933a1c28f8a9fed4c4d34d06c439a7a422.tar.gz
FOSSEE-netbook-kernel-source-871480933a1c28f8a9fed4c4d34d06c439a7a422.tar.bz2
FOSSEE-netbook-kernel-source-871480933a1c28f8a9fed4c4d34d06c439a7a422.zip
Moved, renamed, and deleted files
The original directory structure was scattered and unorganized. Changes are basically to make it look like kernel structure.
Diffstat (limited to 'ANDROID_3.4.5/drivers/video/wmt/devices')
-rwxr-xr-xANDROID_3.4.5/drivers/video/wmt/devices/Makefile26
-rwxr-xr-xANDROID_3.4.5/drivers/video/wmt/devices/cs8556.c627
-rwxr-xr-xANDROID_3.4.5/drivers/video/wmt/devices/lcd-AUO-A080SN01.c95
-rwxr-xr-xANDROID_3.4.5/drivers/video/wmt/devices/lcd-CHILIN-LW700at9003.c104
-rwxr-xr-xANDROID_3.4.5/drivers/video/wmt/devices/lcd-EKING-EK08009-70135.c103
-rwxr-xr-xANDROID_3.4.5/drivers/video/wmt/devices/lcd-HANNSTAR-HSD101PFW2.c103
-rwxr-xr-xANDROID_3.4.5/drivers/video/wmt/devices/lcd-INNOLUX-AT070TN83.c118
-rwxr-xr-xANDROID_3.4.5/drivers/video/wmt/devices/lcd-b079xan01.c363
-rwxr-xr-xANDROID_3.4.5/drivers/video/wmt/devices/lcd-gl5001w.c1412
-rwxr-xr-xANDROID_3.4.5/drivers/video/wmt/devices/lcd-lvds-1024x600.c94
-rwxr-xr-xANDROID_3.4.5/drivers/video/wmt/devices/lcd-oem.c430
-rwxr-xr-xANDROID_3.4.5/drivers/video/wmt/devices/lcd-setup.c311
-rwxr-xr-xANDROID_3.4.5/drivers/video/wmt/devices/lcd-spi.c786
-rwxr-xr-xANDROID_3.4.5/drivers/video/wmt/devices/lcd.c440
-rwxr-xr-xANDROID_3.4.5/drivers/video/wmt/devices/ts8224b.h446
-rwxr-xr-xANDROID_3.4.5/drivers/video/wmt/devices/vt1625.c946
-rwxr-xr-xANDROID_3.4.5/drivers/video/wmt/devices/vt1632.c157
17 files changed, 0 insertions, 6561 deletions
diff --git a/ANDROID_3.4.5/drivers/video/wmt/devices/Makefile b/ANDROID_3.4.5/drivers/video/wmt/devices/Makefile
deleted file mode 100755
index da55ae48..00000000
--- a/ANDROID_3.4.5/drivers/video/wmt/devices/Makefile
+++ /dev/null
@@ -1,26 +0,0 @@
-#
-# Makefile for the Wonder Media framebuffer driver
-#
-
-# wmt external video device
-obj-$(CONFIG_LCD_WMT) += lcd-oem.o
-obj-$(CONFIG_LCD_CHILIN_LW0700AT9003) += lcd-CHILIN-LW700at9003.o
-obj-$(CONFIG_LCD_INNOLUX_AT070TN83) += lcd-INNOLUX-AT070TN83.o
-obj-$(CONFIG_LCD_AUO_A080SN01) += lcd-AUO-A080SN01.o
-obj-$(CONFIG_LCD_EKING_EK08009) += lcd-EKING-EK08009-70135.o
-obj-$(CONFIG_LCD_HANNSTAR_HSD101PFW2) += lcd-HANNSTAR-HSD101PFW2.o
-obj-y += lcd-lvds-1024x600.o
-obj-y += lcd-gl5001w.o
-#obj-y += cs8556.o
-#obj-y += lcd-b079xan01.o
-obj-y += lcd-spi.o
-obj-y += lcd-setup.o
-
-obj-$(CONFIG_LCD_WMT) += lcd.o
-#obj-$(CONFIG_HDMI_SIL902X_WMT) += sil902x.o
-#obj-$(CONFIG_HDCP_SIL902X_WMT) += sil9024/
-obj-$(CONFIG_DVI_VT1632_WMT) += vt1632.o
-obj-$(CONFIG_TV_VT1625_WMT) += vt1625.o
-#obj-$(CONFIG_HDMI_CAT6610_WMT) += cat6612.o cat6610/
-#obj-$(CONFIG_HDMI_AD9389_WMT) += ad9389.o
-#obj-$(CONFIG_EXTTV_ADV7393_WMT) += ad7393.o
diff --git a/ANDROID_3.4.5/drivers/video/wmt/devices/cs8556.c b/ANDROID_3.4.5/drivers/video/wmt/devices/cs8556.c
deleted file mode 100755
index 72097685..00000000
--- a/ANDROID_3.4.5/drivers/video/wmt/devices/cs8556.c
+++ /dev/null
@@ -1,627 +0,0 @@
-/*++
- * linux/drivers/video/wmt/cs8556.c
- * WonderMedia video post processor (VPP) driver
- *
- * Copyright c 2013 WonderMedia Technologies, Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * 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.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- * WonderMedia Technologies, Inc.
- * 4F, 533, Chung-Cheng Road, Hsin-Tien, Taipei 231, R.O.C
---*/
-/*********************************************************************
-* REVISON HISTORY
-*
-* VERSION | DATE | AUTHORS | DESCRIPTION
-* 1.0 | 2013/08/24 | Howay Huo | First Release
-**********************************************************************/
-
-#define CS8556_C
-/* #define DEBUG */
-/*----------------------- DEPENDENCE -----------------------------------------*/
-#include <linux/i2c.h>
-#include <mach/hardware.h>
-#include <linux/irq.h>
-#include <linux/interrupt.h>
-#include <linux/gpio.h>
-#include <mach/wmt_iomux.h>
-#include "../vout.h"
-
-/*----------------------- PRIVATE MACRO --------------------------------------*/
-/* #define VT1632_XXXX xxxx *//*Example*/
-
-
-/*----------------------- PRIVATE CONSTANTS ----------------------------------*/
-/* #define VT1632_XXXX 1 *//*Example*/
-#define CS8556_ADDR 0x3d
-#define CS8556_NAME "CS8556"
-
-/*----------------------- PRIVATE TYPE --------------------------------------*/
-/* typedef xxxx vt1632_xxx_t; *//*Example*/
-struct avdetect_gpio_t {
- unsigned int flag;
- unsigned int gpiono;
- unsigned int act;
-};
-
-/*----------EXPORTED PRIVATE VARIABLES are defined in vt1632.h -------------*/
-/*----------------------- INTERNAL PRIVATE VARIABLES - -----------------------*/
-/* int vt1632_xxx; *//*Example*/
-static int s_cs8556_ready;
-static int s_cs8556_init;
-static struct i2c_client *s_cs8556_client;
-static enum vout_tvformat_t s_tvformat = TV_MAX;
-static int s_irq_init;
-static struct avdetect_gpio_t s_avdetect_gpio = {0, WMT_PIN_GP0_GPIO5, 1};
-
-static unsigned char s_CS8556_Original_Offset0[] = {
- 0xF0, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80,
- 0x80, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x01,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-};
-
-static unsigned char s_RGB888_To_PAL_Offset0[] = {
- 0x01, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00,
- 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x5F, 0x03, 0x3F, 0x00, 0x7D, 0x00, 0x53, 0x03,
- 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00,
- 0x70, 0x02, 0x04, 0x00, 0x2E, 0x00, 0x62, 0x02,
- 0x00, 0x00, 0x84, 0x00, 0x2B, 0x00, 0x36, 0x00,
- 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xBF, 0x06, 0x7F, 0x00, 0xFE, 0x00, 0xA4, 0x06,
- 0x00, 0x00, 0x2D, 0x11, 0x3C, 0x01, 0x3A, 0x01,
- 0x70, 0x02, 0x04, 0x00, 0x12, 0x00, 0x34, 0x01,
- 0x00, 0x00, 0x70, 0x70, 0x70, 0x00, 0x00, 0x00,
- 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x04, 0x41, 0x18, 0x09, 0x00, 0x00, 0x00, 0x02,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00,
- 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00,
- 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
- 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00,
- 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00,
- 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0x24, 0x1A, 0x00, 0x01, 0x03, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x04, 0x01, 0xA4, 0x06, 0x0B, 0x00, 0x07, 0x01,
- 0xF0, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x01
-};
-
-static unsigned char s_RGB888_To_NTSC_Offset0[] = {
- 0x01, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00,
- 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x59, 0x03, 0x3D, 0x00, 0x7E, 0x00, 0x49, 0x03,
- 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00,
- 0x0C, 0x02, 0x05, 0x00, 0x21, 0x00, 0x03, 0x02,
- 0x00, 0x00, 0x7A, 0x00, 0x23, 0x00, 0x16, 0x00,
- 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xB3, 0x06, 0x7F, 0x00, 0x00, 0x01, 0xA4, 0x06,
- 0x00, 0x00, 0x05, 0x50, 0x00, 0x01, 0x07, 0x01,
- 0x0C, 0x02, 0x02, 0x00, 0x12, 0x00, 0x07, 0x01,
- 0x00, 0x00, 0x70, 0x70, 0x70, 0x00, 0x00, 0x00,
- 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x04, 0x41, 0x18, 0x09, 0x00, 0x00, 0x00, 0x02,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00,
- 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00,
- 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
- 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00,
- 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00,
- 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0x24, 0x1A, 0x00, 0x01, 0x03, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x04, 0x01, 0xA4, 0x06, 0x0B, 0x00, 0x07, 0x01,
- 0xF0, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00
-};
-
-/*--------------------- INTERNAL PRIVATE FUNCTIONS ---------------------------*/
-/* void vt1632_xxx(void); *//*Example*/
-static int I2CMultiPageRead(unsigned char maddr, unsigned char page,
- unsigned char saddr, int number, unsigned char *value)
-{
- int ret;
- unsigned char wbuf[2];
- struct i2c_msg rd[2];
-
- wbuf[0] = page;
- wbuf[1] = saddr;
-
- rd[0].addr = maddr;
- rd[0].flags = 0;
- rd[0].len = 2;
- rd[0].buf = wbuf;
-
- rd[1].addr = maddr;
- rd[1].flags = I2C_M_RD;
- rd[1].len = number;
- rd[1].buf = value;
-
- ret = i2c_transfer(s_cs8556_client->adapter, rd, ARRAY_SIZE(rd));
-
- if (ret != ARRAY_SIZE(rd)) {
- DBG_ERR("fail\n");
- return -1;
- }
-
- return 0;
-}
-
-static int I2CMultiPageWrite(unsigned char maddr, unsigned char page,
- unsigned char saddr, int number, unsigned char *value)
-{
- int ret;
- unsigned char *pbuf;
- struct i2c_msg wr[1];
-
- pbuf = kmalloc(number + 2, GFP_KERNEL);
- if (!pbuf) {
- DBG_ERR("alloc memory fail\n");
- return -1;
- }
-
- *pbuf = page;
- *(pbuf + 1) = saddr;
-
- memcpy(pbuf + 2, value, number);
-
- wr[0].addr = maddr;
- wr[0].flags = 0;
- wr[0].len = number + 2;
- wr[0].buf = pbuf;
-
- ret = i2c_transfer(s_cs8556_client->adapter, wr, ARRAY_SIZE(wr));
-
- if (ret != ARRAY_SIZE(wr)) {
- DBG_ERR("fail\n");
- kfree(pbuf);
- return -1;
- }
-
- kfree(pbuf);
- return 0 ;
-}
-
-/************************ i2c device struct definition ************************/
-static int __devinit cs8556_i2c_probe(struct i2c_client *i2c,
- const struct i2c_device_id *id)
-{
- DBGMSG("cs8556_i2c_probe\n");
-
- return 0;
-}
-
-static int __devexit cs8556_i2c_remove(struct i2c_client *client)
-{
- DBGMSG("cs8556_i2c_remove\n");
-
- return 0;
-}
-
-
-static const struct i2c_device_id cs8556_i2c_id[] = {
- {CS8556_NAME, 0},
- { },
-};
-MODULE_DEVICE_TABLE(i2c, cs8556_i2c_id);
-
-static struct i2c_board_info __initdata cs8556_i2c_board_info[] = {
- {
- I2C_BOARD_INFO(CS8556_NAME, CS8556_ADDR),
- },
-};
-
-static struct i2c_driver cs8556_i2c_driver = {
- .driver = {
- .name = CS8556_NAME,
- .owner = THIS_MODULE,
- },
- .probe = cs8556_i2c_probe,
- .remove = __devexit_p(cs8556_i2c_remove),
- .id_table = cs8556_i2c_id,
-};
-
-/*----------------------- Function Body --------------------------------------*/
-static void avdetect_irq_enable(void)
-{
- wmt_gpio_unmask_irq(s_avdetect_gpio.gpiono);
-}
-
-static void avdetect_irq_disable(void)
-{
- wmt_gpio_mask_irq(s_avdetect_gpio.gpiono);
-}
-
-int avdetect_irq_hw_init(int resume)
-{
- int ret;
-
- if (!resume) {
- ret = gpio_request(s_avdetect_gpio.gpiono,
- "avdetect irq"); /* enable gpio */
- if (ret < 0) {
- DBG_ERR("gpio(%d) request fail for avdetect irq\n",
- s_avdetect_gpio.gpiono);
- return ret;
- }
- } else
- gpio_re_enabled(s_avdetect_gpio.gpiono); /* re-enable gpio */
-
- gpio_direction_input(s_avdetect_gpio.gpiono); /* gpio input */
-
- /* enable pull and pull-up */
- wmt_gpio_setpull(s_avdetect_gpio.gpiono, WMT_GPIO_PULL_UP);
-
- /* disable interrupt */
- wmt_gpio_mask_irq(s_avdetect_gpio.gpiono);
-
- /* rise edge and clear interrupt */
- wmt_gpio_set_irq_type(s_avdetect_gpio.gpiono, IRQ_TYPE_EDGE_BOTH);
-
- return 0;
-}
-
-/*
-static void avdetect_irq_hw_free(void)
-{
- gpio_free(AVDETECT_IRQ_PIN);
-
-}
-*/
-
-static irqreturn_t avdetect_irq_handler(int irq, void *dev_id)
-{
- /* DPRINT("avdetect_irq_handler\n"); */
-
- if (!gpio_irqstatus(s_avdetect_gpio.gpiono))
- return IRQ_NONE;
-
- wmt_gpio_ack_irq(s_avdetect_gpio.gpiono); /* clear interrupt */
-
- /* DPRINT("cvbs hotplug interrupt\n"); */
- if (!is_gpio_irqenable(s_avdetect_gpio.gpiono)) {
- /* pr_err("avdetect irq is disabled\n"); */
- return IRQ_HANDLED;
- } else
- return IRQ_WAKE_THREAD;
-}
-
-static irqreturn_t avdetect_irq_thread(int irq, void *dev)
-{
- /* DPRINT(cvbs_hotplug_irq_thread\n"); */
-
- if (s_avdetect_gpio.act == 1) {
- if (gpio_get_value(s_avdetect_gpio.gpiono))
- DPRINT("av plug in\n");
- else
- DPRINT("av plug out\n");
- } else {
- if (gpio_get_value(s_avdetect_gpio.gpiono))
- DPRINT("av plug out\n");
- else
- DPRINT("av plug in\n");
- }
-
- return IRQ_HANDLED;
-}
-
-int cs8556_check_plugin(int hotplug)
-{
- return 1;
-}
-
-int cs8556_init(struct vout_t *vo)
-{
- int ret;
- char buf[40] = {0};
- int varlen = 40;
- int no = 1; /* default i2c1 */
- int num;
- unsigned char rbuf[256] = {0};
- struct i2c_adapter *adapter = NULL;
-
- DPRINT("cs8556_init\n");
-
- if (s_tvformat == TV_MAX) {
- if (wmt_getsyspara("wmt.display.tvformat", buf, &varlen) == 0) {
- if (!strnicmp(buf, "PAL", 3))
- s_tvformat = TV_PAL;
- else if (!strnicmp(buf, "NTSC", 4))
- s_tvformat = TV_NTSC;
- else
- s_tvformat = TV_UNDEFINED;
- } else
- s_tvformat = TV_UNDEFINED;
- }
-
- if (s_tvformat == TV_UNDEFINED)
- goto err0;
-
- if (!s_cs8556_init) {
- if (wmt_getsyspara("wmt.cs8556.i2c", buf, &varlen) == 0) {
- if (strlen(buf) > 0)
- no = buf[0] - '0';
- }
-
- adapter = i2c_get_adapter(no);
- if (adapter == NULL) {
- DBG_ERR("Can't get i2c adapter,client address error\n");
- goto err0;
- }
-
- s_cs8556_client =
- i2c_new_device(adapter, cs8556_i2c_board_info);
- if (s_cs8556_client == NULL) {
- DBG_ERR("allocate i2c client failed\n");
- goto err0;
- }
-
- i2c_put_adapter(adapter);
-
- ret = i2c_add_driver(&cs8556_i2c_driver);
- if (ret != 0) {
- DBG_ERR("Failed register CS8556 I2C driver: %d\n", ret);
- goto err1;
- }
-
- if (wmt_getsyspara("wmt.io.avdetect", buf, &varlen) == 0) {
- num = sscanf(buf, "%d:%d:%d", &s_avdetect_gpio.flag,
- &s_avdetect_gpio.gpiono, &s_avdetect_gpio.act);
-
- if (num != 3)
- DBG_ERR("wmt.io.avdetect err. num = %d\n", num);
- else {
- if (s_avdetect_gpio.gpiono > 19)
- DBG_ERR("invalid avdetect gpio : %d\n",
- s_avdetect_gpio.gpiono);
- else {
- ret = avdetect_irq_hw_init(0);
- if (!ret) {
- ret = request_threaded_irq(
- IRQ_GPIO,
- avdetect_irq_handler,
- avdetect_irq_thread,
- IRQF_SHARED,
- CS8556_NAME,
- s_cs8556_client);
-
- if (ret)
- DBG_ERR("irq req %d\n",
- ret);
- else {
- s_irq_init = 1;
- DPRINT("avdetect irq");
- DPRINT("req success\n");
- }
- }
- }
- }
- }
-
- s_cs8556_init = 1;
- } else {
- if (s_irq_init)
- avdetect_irq_hw_init(1);
- }
-
- ret = I2CMultiPageRead(CS8556_ADDR, 0x00, 0x00, 256, rbuf);
- if (ret) {
- DBG_ERR("I2C address 0x%02X is not found\n", CS8556_ADDR);
- goto err0;
- }
-
- switch (s_tvformat) {
- case TV_PAL:
- ret = I2CMultiPageWrite(CS8556_ADDR, 0x00, 0x00, 256,
- s_RGB888_To_PAL_Offset0);
- if (ret) {
- DBG_ERR("PAL init fail\n");
- goto err0;
- }
- break;
- case TV_NTSC:
- ret = I2CMultiPageWrite(CS8556_ADDR, 0x00, 0x00, 256,
- s_RGB888_To_NTSC_Offset0);
- if (ret) {
- DBG_ERR("NTSC init fail\n");
- goto err0;
- }
- break;
- default:
- goto err0;
- break;
- }
-
- if (s_irq_init)
- avdetect_irq_enable();
-
- s_cs8556_ready = 1;
-
- return 0;
-#if 0
-err3:
- cvbs_hotplug_irq_disable();
- free_irq(IRQ_GPIO, s_cs8556_client);
- cvbs_hotplug_irq_hw_free();
-err2:
- i2c_del_driver(&cs8556_i2c_driver);
-#endif
-err1:
- i2c_unregister_device(s_cs8556_client);
-err0:
- s_cs8556_ready = 0;
- return -1;
-}
-
-static int cs8556_set_mode(unsigned int *option)
-{
- if (!s_cs8556_ready)
- return -1;
-
- return 0;
-}
-
-static void cs8556_set_power_down(int enable)
-{
- int ret;
- unsigned char rbuf[256] = {0};
-
- if (!s_cs8556_ready)
- return;
-
- DBGMSG("cs8556_set_power_down(%d)\n", enable);
-
- if (enable) {
- ret = I2CMultiPageWrite(CS8556_ADDR, 0x00, 0x00, 5,
- s_CS8556_Original_Offset0);
- if (ret)
- DBG_ERR("I2C write Original_Offset0 fail\n");
- else {
- if (s_irq_init)
- avdetect_irq_disable();
- }
- } else {
- ret = I2CMultiPageRead(CS8556_ADDR, 0x00, 0x00, 256, rbuf);
- if (ret) {
- DBG_ERR("I2C read Offset0 fail\n");
- return;
- }
-
- switch (s_tvformat) {
- case TV_PAL:
- if (memcmp(rbuf, s_RGB888_To_PAL_Offset0, 0x50) != 0) {
- ret = I2CMultiPageWrite(CS8556_ADDR, 0x00,
- 0x00, 256, s_RGB888_To_PAL_Offset0);
- if (ret)
- DBG_ERR("I2C write PAL_Offset0 fail\n");
- }
- break;
- case TV_NTSC:
- if (memcmp(rbuf, s_RGB888_To_NTSC_Offset0, 0x50) != 0) {
- ret = I2CMultiPageWrite(CS8556_ADDR, 0x00,
- 0x00, 256, s_RGB888_To_NTSC_Offset0);
- if (ret)
- DBG_ERR("I2C wr NTSC_Offset0 fail\n");
- }
- break;
- default:
- break;
- }
- }
-}
-
-static int cs8556_config(struct vout_info_t *info)
-{
- return 0;
-}
-
-static int cs8556_get_edid(char *buf)
-{
- return -1;
-}
-
-/*
-static int cs8556_interrupt(void)
-{
- return cs8556_check_plugin(1);
-}
-*/
-
-void cs8556_read(void)
-{
- int i, ret;
- unsigned char rbuf[256] = {0};
-
- ret = I2CMultiPageRead(CS8556_ADDR, 0x00, 0x00, 256, rbuf);
- if (!ret) {
- DPRINT("CS8556 Read offset0 data as follows:\n");
- for (i = 0; i < 256;) {
- DPRINT("0x%02X,", rbuf[i]);
- if ((++i) % 16 == 0)
- DPRINT("\n");
- }
- }
-}
-
-int cvbs_is_ready(void)
-{
- return s_cs8556_ready;
-}
-
-/*----------------------- vout device plugin ---------------------------------*/
-struct vout_dev_t cs8556_vout_dev_ops = {
- .name = CS8556_NAME,
- .mode = VOUT_INF_DVI,
-
- .init = cs8556_init,
- .set_power_down = cs8556_set_power_down,
- .set_mode = cs8556_set_mode,
- .config = cs8556_config,
- .check_plugin = cs8556_check_plugin,
- .get_edid = cs8556_get_edid,
-/* .interrupt = cs8556_interrupt, */
-};
-
-int cs8556_module_init(void)
-{
- vout_device_register(&cs8556_vout_dev_ops);
- return 0;
-} /* End of cs8556_module_init */
-module_init(cs8556_module_init);
-/*--------------------End of Function Body -----------------------------------*/
-#undef CS8556_C
diff --git a/ANDROID_3.4.5/drivers/video/wmt/devices/lcd-AUO-A080SN01.c b/ANDROID_3.4.5/drivers/video/wmt/devices/lcd-AUO-A080SN01.c
deleted file mode 100755
index f4602a16..00000000
--- a/ANDROID_3.4.5/drivers/video/wmt/devices/lcd-AUO-A080SN01.c
+++ /dev/null
@@ -1,95 +0,0 @@
-/*++
- * linux/drivers/video/wmt/lcd-AUO-A080SN01.c
- * WonderMedia video post processor (VPP) driver
- *
- * Copyright c 2014 WonderMedia Technologies, Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * 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.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- * WonderMedia Technologies, Inc.
- * 4F, 533, Chung-Cheng Road, Hsin-Tien, Taipei 231, R.O.C
---*/
-
-#define LCD_AUO_A080SN01_C
-/* #define DEBUG */
-/*----------------------- DEPENDENCE -----------------------------------------*/
-#include "../lcd.h"
-
-/*----------------------- PRIVATE MACRO --------------------------------------*/
-/* #define LCD_A080SN01_XXXX xxxx *//*Example*/
-
-/*----------------------- PRIVATE CONSTANTS ----------------------------------*/
-/* #define LCD_A080SN01_XXXX 1 *//*Example*/
-
-/*----------------------- PRIVATE TYPE --------------------------------------*/
-/* typedef xxxx lcd_xxx_t; *//*Example*/
-
-/*----------EXPORTED PRIVATE VARIABLES are defined in lcd.h -------------*/
-static void lcd_a080sn01_initial(void);
-
-/*----------------------- INTERNAL PRIVATE VARIABLES - -----------------------*/
-/* int lcd_xxx; *//*Example*/
-struct lcd_parm_t lcd_a080sn01_parm = {
- .bits_per_pixel = 24,
- .capability = 0,
- .vmode = {
- .name = "AUO A080SN01",
- .refresh = 60,
- .xres = 800,
- .yres = 600,
- .pixclock = KHZ2PICOS(40000),
- .left_margin = 88,
- .right_margin = 40,
- .upper_margin = 24,
- .lower_margin = 1,
- .hsync_len = 128,
- .vsync_len = 3,
- .sync = 0,
- .vmode = 0,
- .flag = 0,
- },
- .width = 162,
- .height = 121,
- .initial = lcd_a080sn01_initial,
-};
-
-/*--------------------- INTERNAL PRIVATE FUNCTIONS ---------------------------*/
-/* void lcd_xxx(void); *//*Example*/
-
-/*----------------------- Function Body --------------------------------------*/
-static void lcd_a080sn01_initial(void)
-{
- DPRINT("lcd_a080sn01_initial\n");
-
- /* TODO */
-}
-
-struct lcd_parm_t *lcd_a080sn01_get_parm(int arg)
-{
- return &lcd_a080sn01_parm;
-}
-
-int lcd_a080sn01_init(void)
-{
- int ret;
-
- ret = lcd_panel_register(LCD_AUO_A080SN01,
- (void *) lcd_a080sn01_get_parm);
- return ret;
-} /* End of lcd_a080sn01_init */
-module_init(lcd_a080sn01_init);
-
-/*--------------------End of Function Body -----------------------------------*/
-#undef LCD_AUO_A080SN01_C
-
diff --git a/ANDROID_3.4.5/drivers/video/wmt/devices/lcd-CHILIN-LW700at9003.c b/ANDROID_3.4.5/drivers/video/wmt/devices/lcd-CHILIN-LW700at9003.c
deleted file mode 100755
index af9752b3..00000000
--- a/ANDROID_3.4.5/drivers/video/wmt/devices/lcd-CHILIN-LW700at9003.c
+++ /dev/null
@@ -1,104 +0,0 @@
-/*++
- * linux/drivers/video/wmt/lcd-CHILIN-LW700at9003.c
- * WonderMedia video post processor (VPP) driver
- *
- * Copyright c 2014 WonderMedia Technologies, Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * 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.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- * WonderMedia Technologies, Inc.
- * 4F, 533, Chung-Cheng Road, Hsin-Tien, Taipei 231, R.O.C
---*/
-
-#define LCD_CHILIN_LW700AT9003_C
-/* #define DEBUG */
-/*----------------------- DEPENDENCE -----------------------------------------*/
-#include "../lcd.h"
-
-/*----------------------- PRIVATE MACRO --------------------------------------*/
-/* #define LCD_LW700AT9003_XXXX xxxx *//*Example*/
-
-
-/*----------------------- PRIVATE CONSTANTS ----------------------------------*/
-/* #define LCD_LW700AT9003_XXXX 1 *//*Example*/
-
-/*----------------------- PRIVATE TYPE --------------------------------------*/
-/* typedef xxxx lcd_xxx_t; *//*Example*/
-
-/*----------EXPORTED PRIVATE VARIABLES are defined in lcd.h -------------*/
-static void lcd_lw700at9003_power_on(void);
-static void lcd_lw700at9003_power_off(void);
-
-/*----------------------- INTERNAL PRIVATE VARIABLES ------------------------*/
-/* int lcd_xxx; *//*Example*/
-struct lcd_parm_t lcd_lw700at9003_parm = {
- .bits_per_pixel = 18,
- .capability = LCD_CAP_CLK_HI,
- .vmode = {
- .name = "CHILIN LW700AT9003",
- .refresh = 48,
- .xres = 800,
- .yres = 480,
- .pixclock = KHZ2PICOS(33260),
- .left_margin = 105,
- .right_margin = 105,
- .upper_margin = 23,
- .lower_margin = 22,
- .hsync_len = 40,
- .vsync_len = 5,
- .sync = 0,
- .vmode = 0,
- .flag = 0,
- },
- .width = 152,
- .height = 91,
- .initial = lcd_lw700at9003_power_on,
- .uninitial = lcd_lw700at9003_power_off,
-};
-
-/*--------------------- INTERNAL PRIVATE FUNCTIONS ---------------------------*/
-/* void lcd_xxx(void); *//*Example*/
-
-/*----------------------- Function Body --------------------------------------*/
-static void lcd_lw700at9003_power_on(void)
-{
- DPRINT("lcd_lw700at9003_power_on\n");
- /* TODO */
-}
-
-static void lcd_lw700at9003_power_off(void)
-{
- DPRINT("lcd_lw700at9003_power_off\n");
-
- /* TODO */
-}
-
-struct lcd_parm_t *lcd_lw700at9003_get_parm(int arg)
-{
- lcd_lw700at9003_parm.bits_per_pixel = arg;
- return &lcd_lw700at9003_parm;
-}
-
-int lcd_lw700at9003_init(void)
-{
- int ret;
-
- ret = lcd_panel_register(LCD_CHILIN_LW0700AT9003,
- (void *) lcd_lw700at9003_get_parm);
- return ret;
-} /* End of lcd_oem_init */
-module_init(lcd_lw700at9003_init);
-
-/*--------------------End of Function Body -----------------------------------*/
-#undef LCD_CHILIN_LW700AT9003_C
diff --git a/ANDROID_3.4.5/drivers/video/wmt/devices/lcd-EKING-EK08009-70135.c b/ANDROID_3.4.5/drivers/video/wmt/devices/lcd-EKING-EK08009-70135.c
deleted file mode 100755
index 1d401886..00000000
--- a/ANDROID_3.4.5/drivers/video/wmt/devices/lcd-EKING-EK08009-70135.c
+++ /dev/null
@@ -1,103 +0,0 @@
-/*++
- * linux/drivers/video/wmt/lcd-EKING_EK08009-70135.c
- * WonderMedia video post processor (VPP) driver
- *
- * Copyright c 2014 WonderMedia Technologies, Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * 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.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- * WonderMedia Technologies, Inc.
- * 4F, 533, Chung-Cheng Road, Hsin-Tien, Taipei 231, R.O.C
---*/
-
-#define LCD_EKING_EK08009_C
-/* #define DEBUG */
-/*----------------------- DEPENDENCE -----------------------------------------*/
-#include "../lcd.h"
-
-/*----------------------- PRIVATE MACRO --------------------------------------*/
-/* #define LCD_EK08009_XXXX xxxx *//*Example*/
-
-/*----------------------- PRIVATE CONSTANTS ----------------------------------*/
-/* #define LCD_EK08009_XXXX 1 *//*Example*/
-
-/*----------------------- PRIVATE TYPE --------------------------------------*/
-/* typedef xxxx lcd_xxx_t; *//*Example*/
-
-/*----------EXPORTED PRIVATE VARIABLES are defined in lcd.h -------------*/
-static void lcd_ek08009_power_on(void);
-static void lcd_ek08009_power_off(void);
-
-/*----------------------- INTERNAL PRIVATE VARIABLES - -----------------------*/
-/* int lcd_xxx; *//*Example*/
-struct lcd_parm_t lcd_ek08009_parm = {
- .bits_per_pixel = 18,
- .capability = LCD_CAP_CLK_HI,
- .vmode = {
- .name = "EKING EK08009",
- .refresh = 60,
- .xres = 800,
- .yres = 600,
- .pixclock = KHZ2PICOS(40000),
- .left_margin = 46,
- .right_margin = 210,
- .upper_margin = 24,
- .lower_margin = 12,
- .hsync_len = 1,
- .vsync_len = 1,
- .sync = 0,
- .vmode = 0,
- .flag = 0,
- },
- .width = 162,
- .height = 162,
- .initial = lcd_ek08009_power_on,
- .uninitial = lcd_ek08009_power_off,
-};
-
-/*--------------------- INTERNAL PRIVATE FUNCTIONS ---------------------------*/
-/* void lcd_xxx(void); *//*Example*/
-
-/*----------------------- Function Body --------------------------------------*/
-static void lcd_ek08009_power_on(void)
-{
- DPRINT("lcd_ek08009_power_on\n");
-
- /* TODO */
-}
-
-static void lcd_ek08009_power_off(void)
-{
- DPRINT("lcd_ek08009_power_off\n");
-
- /* TODO */
-}
-
-struct lcd_parm_t *lcd_ek08009_get_parm(int arg)
-{
- return &lcd_ek08009_parm;
-}
-
-int lcd_ek08009_init(void)
-{
- int ret;
-
- ret = lcd_panel_register(LCD_EKING_EK08009,
- (void *) lcd_ek08009_get_parm);
- return ret;
-} /* End of lcd_oem_init */
-module_init(lcd_ek08009_init);
-
-/*--------------------End of Function Body -----------------------------------*/
-#undef LCD_EKING_EK08009_C
diff --git a/ANDROID_3.4.5/drivers/video/wmt/devices/lcd-HANNSTAR-HSD101PFW2.c b/ANDROID_3.4.5/drivers/video/wmt/devices/lcd-HANNSTAR-HSD101PFW2.c
deleted file mode 100755
index 438e3fee..00000000
--- a/ANDROID_3.4.5/drivers/video/wmt/devices/lcd-HANNSTAR-HSD101PFW2.c
+++ /dev/null
@@ -1,103 +0,0 @@
-/*++
- * linux/drivers/video/wmt/lcd-HANNSTAR-HSD101PFW2.c
- * WonderMedia video post processor (VPP) driver
- *
- * Copyright c 2014 WonderMedia Technologies, Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * 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.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- * WonderMedia Technologies, Inc.
- * 4F, 533, Chung-Cheng Road, Hsin-Tien, Taipei 231, R.O.C
---*/
-
-#define LCD_EKING_HSD101PFW2_C
-/* #define DEBUG */
-/*----------------------- DEPENDENCE -----------------------------------------*/
-#include "../lcd.h"
-
-/*----------------------- PRIVATE MACRO --------------------------------------*/
-/* #define LCD_HSD101PFW2_XXXX xxxx *//*Example*/
-
-/*----------------------- PRIVATE CONSTANTS ----------------------------------*/
-/* #define LCD_HSD101PFW2_XXXX 1 *//*Example*/
-
-/*----------------------- PRIVATE TYPE --------------------------------------*/
-/* typedef xxxx lcd_xxx_t; *//*Example*/
-
-/*----------EXPORTED PRIVATE VARIABLES are defined in lcd.h -------------*/
-static void lcd_HSD101PFW2_power_on(void);
-static void lcd_HSD101PFW2_power_off(void);
-
-/*----------------------- INTERNAL PRIVATE VARIABLES - -----------------------*/
-/* int lcd_xxx; *//*Example*/
-struct lcd_parm_t lcd_HSD101PFW2_parm = {
- .bits_per_pixel = 18,
- .capability = 0,
- .vmode = {
- .name = "HANNSTAR HSD101PFW2",
- .refresh = 60,
- .xres = 1024,
- .yres = 600,
- .pixclock = KHZ2PICOS(45000),
- .left_margin = 44,
- .right_margin = 88,
- .upper_margin = 10,
- .lower_margin = 5,
- .hsync_len = 44,
- .vsync_len = 10,
- .sync = FB_SYNC_VERT_HIGH_ACT,
- .vmode = 0,
- .flag = 0,
- },
- .width = 222,
- .height = 125,
- .initial = lcd_HSD101PFW2_power_on,
- .uninitial = lcd_HSD101PFW2_power_off,
-};
-
-/*--------------------- INTERNAL PRIVATE FUNCTIONS ---------------------------*/
-/* void lcd_xxx(void); *//*Example*/
-
-/*----------------------- Function Body --------------------------------------*/
-static void lcd_HSD101PFW2_power_on(void)
-{
- DPRINT("lcd_HSD101PFW2_power_on\n");
-
- /* TODO */
-}
-
-static void lcd_HSD101PFW2_power_off(void)
-{
- DPRINT("lcd_HSD101PFW2_power_off\n");
-
- /* TODO */
-}
-
-struct lcd_parm_t *lcd_HSD101PFW2_get_parm(int arg)
-{
- return &lcd_HSD101PFW2_parm;
-}
-
-int lcd_HSD101PFW2_init(void)
-{
- int ret;
-
- ret = lcd_panel_register(LCD_HANNSTAR_HSD101PFW2,
- (void *) lcd_HSD101PFW2_get_parm);
- return ret;
-} /* End of lcd_oem_init */
-module_init(lcd_HSD101PFW2_init);
-
-/*--------------------End of Function Body -----------------------------------*/
-#undef LCD_EKING_HSD101PFW2_C
diff --git a/ANDROID_3.4.5/drivers/video/wmt/devices/lcd-INNOLUX-AT070TN83.c b/ANDROID_3.4.5/drivers/video/wmt/devices/lcd-INNOLUX-AT070TN83.c
deleted file mode 100755
index 7c1da494..00000000
--- a/ANDROID_3.4.5/drivers/video/wmt/devices/lcd-INNOLUX-AT070TN83.c
+++ /dev/null
@@ -1,118 +0,0 @@
-/*++
- * linux/drivers/video/wmt/lcd-INNOLUX-AT070TN83.c
- * WonderMedia video post processor (VPP) driver
- *
- * Copyright c 2014 WonderMedia Technologies, Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * 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.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- * WonderMedia Technologies, Inc.
- * 4F, 533, Chung-Cheng Road, Hsin-Tien, Taipei 231, R.O.C
---*/
-
-#define LCD_INNOLUX_AT070TN83_C
-/* #define DEBUG */
-/*----------------------- DEPENDENCE -----------------------------------------*/
-#include "../lcd.h"
-
-/*----------------------- PRIVATE MACRO --------------------------------------*/
-/* #define LCD_AT070TN83_XXXX xxxx *//*Example*/
-
-/*----------------------- PRIVATE CONSTANTS ----------------------------------*/
-/* #define LCD_AT070TN83_XXXX 1 *//*Example*/
-
-/*----------------------- PRIVATE TYPE --------------------------------------*/
-/* typedef xxxx lcd_xxx_t; *//*Example*/
-
-/*----------EXPORTED PRIVATE VARIABLES are defined in lcd.h -------------*/
-static void lcd_at070tn83_initial(void);
-static void lcd_at070tn83_uninitial(void);
-
-/*----------------------- INTERNAL PRIVATE VARIABLES - -----------------------*/
-/* int lcd_xxx; *//*Example*/
-struct lcd_parm_t lcd_at070tn83_parm = {
- .bits_per_pixel = 18,
- .capability = LCD_CAP_CLK_HI,
- .vmode = {
- .name = "INNOLUX AT707TN83",
- .refresh = 60,
- .xres = 800,
- .yres = 480,
- .pixclock = KHZ2PICOS(33333),
- .left_margin = 45,
- .right_margin = 210,
- .upper_margin = 22,
- .lower_margin = 22,
- .hsync_len = 1,
- .vsync_len = 1,
- .sync = 0,
- .vmode = 0,
- .flag = 0,
- },
- .width = 154,
- .height = 85,
- .initial = lcd_at070tn83_initial,
- .uninitial = lcd_at070tn83_uninitial,
-};
-
-/*--------------------- INTERNAL PRIVATE FUNCTIONS ---------------------------*/
-/* void lcd_xxx(void); *//*Example*/
-
-/*----------------------- Function Body --------------------------------------*/
-static void lcd_at070tn83_initial(void)
-{
-#if 0
- outl(inl(GPIO_BASE_ADDR + 0x80) | BIT0, GPIO_BASE_ADDR + 0x80);
- outl(inl(GPIO_BASE_ADDR + 0x4C) | BIT28, GPIO_BASE_ADDR + 0x4C);
- outl(inl(GPIO_BASE_ADDR + 0x8C) | BIT28, GPIO_BASE_ADDR + 0x8C);
- /* DVDD */
- /* T2 > 0ms */ /* AVDD/VCOM(NANDQS) */
- outl(inl(GPIO_BASE_ADDR + 0xCC) | BIT28, GPIO_BASE_ADDR + 0xCC);
- /* T4 > 0ms */
- /* VGH */
- /* 0 < T6 <= 10ms */
- lcd_enable_signal(1); /* signal, DVO enable */
- lcd_oem_enable_backlight(200); /* T12 > 200ms, BL(bit0) */
-#endif
-}
-
-static void lcd_at070tn83_uninitial(void)
-{
-#if 0
- /* BL(bit0) */
- outl(inl(GPIO_BASE_ADDR + 0xC0) & ~BIT0, GPIO_BASE_ADDR + 0xC0);
- mdelay(200); /* T12 > 200ms */
- lcd_enable_signal(0); /* singal, DVO enable */
- /* AVDD/VCOM(NANDQS) */
- outl(inl(GPIO_BASE_ADDR + 0xCC) & ~BIT28, GPIO_BASE_ADDR + 0xCC);
-#endif
-}
-
-struct lcd_parm_t *lcd_at070tn83_get_parm(int arg)
-{
- return &lcd_at070tn83_parm;
-}
-
-int lcd_at070tn83_init(void)
-{
- int ret;
-
- ret = lcd_panel_register(LCD_INNOLUX_AT070TN83,
- (void *) lcd_at070tn83_get_parm);
- return ret;
-} /* End of lcd_oem_init */
-module_init(lcd_at070tn83_init);
-
-/*--------------------End of Function Body -----------------------------------*/
-#undef LCD_INNOLUX_AT070TN83_C
diff --git a/ANDROID_3.4.5/drivers/video/wmt/devices/lcd-b079xan01.c b/ANDROID_3.4.5/drivers/video/wmt/devices/lcd-b079xan01.c
deleted file mode 100755
index 05a6e957..00000000
--- a/ANDROID_3.4.5/drivers/video/wmt/devices/lcd-b079xan01.c
+++ /dev/null
@@ -1,363 +0,0 @@
-/*++
- * linux/drivers/video/wmt/lcd-b079xan01.c
- * WonderMedia video post processor (VPP) driver
- *
- * Copyright c 2014 WonderMedia Technologies, Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * 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.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- * WonderMedia Technologies, Inc.
- * 4F, 533, Chung-Cheng Road, Hsin-Tien, Taipei 231, R.O.C
---*/
-
-#include <linux/delay.h>
-
-#include <mach/hardware.h>
-#include <linux/spi/spi.h>
-#include <mach/wmt-spi.h>
-
-#include <linux/gpio.h>
-#include <mach/wmt_iomux.h>
-
-#include "../lcd.h"
-
-#define DRIVERNAME "ssd2828"
-
-static struct lcd_parm_t lcd_b079xan01_parm = {
- .bits_per_pixel = 24,
- .capability = 0,
- .vmode = {
- .name = "B079XAN01",
- .refresh = 60,
- .xres = 768,
- .yres = 1024,
- .pixclock = KHZ2PICOS(64800),
- .left_margin = 56,
- .right_margin = 60,
- .upper_margin = 30,
- .lower_margin = 36,
- .hsync_len = 64,
- .vsync_len = 50,
- .sync = 0, /* FB_SYNC_VERT_HIGH_ACT | FB_SYNC_HOR_HIGH_ACT, */
- .vmode = 0,
- .flag = 0,
- },
- .width = 120,
- .height = 160,
-#if 0
- .initial = lcd_power_on,
- .uninitial = lcd_power_off,
-#endif
-};
-
-static struct lcd_parm_t *lcd_b079xan01_get_parm(int arg)
-{
- return &lcd_b079xan01_parm;
-}
-
-static int lcd_b079xan01_init(void)
-{
- return lcd_panel_register(LCD_B079XAN01,
- (void *) lcd_b079xan01_get_parm);
-}
-
-struct ssd2828_chip {
- struct spi_device *spi;
- int gpio_reset;
-};
-
-static int ssd2828_read(struct spi_device *spi, uint8_t reg)
-{
- int ret;
- uint8_t buf1[3] = { 0x70, 0x00, 0x00 };
- uint8_t buf2[3] = { 0x73, 0x00, 0x00 };
-
- buf1[2] = reg;
-
- ret = spi_write(spi, buf1, 3);
- if (ret) {
- pr_err("spi_write ret=%d\n", ret);
- return -EIO;
- }
-
- ret = spi_w8r16(spi, buf2[0]);
- if (ret < 0) {
- pr_err("spi_write ret=%d\n", ret);
- return ret;
- }
-
- return ret;
-}
-
-#if 0
-static int ssd2828_write(struct spi_device *spi, uint8_t reg, uint16_t data)
-{
- int ret;
- uint8_t buf_reg[3] = { 0x70, 0x00, 0x00 };
- uint8_t buf_data[3] = { 0x72, 0x00, 0x00 };
-
- buf_reg[2] = reg;
-
- buf_data[1] = (data >> 8) & 0xff;
- buf_data[2] = data & 0xff;
-
- ret = spi_write(spi, buf_reg, 3);
- if (ret) {
- pr_err("spi_write ret=%d,w cmd=0x%06x\n", ret, data);
- return ret;
- }
-
- ret = spi_write(spi, buf_data, 3);
- if (ret)
- pr_err("spi_write ret=%d,w cmd=0x%06x\n", ret, data);
-
- return ret;
-}
-#endif
-
-static inline int spi_write_24bit(struct spi_device *spi, uint32_t data)
-{
- int ret;
- uint8_t buf[3];
-
- buf[0] = (data >> 16) & 0xff;
- buf[1] = (data >> 8) & 0xff;
- buf[2] = data & 0xff;
-
- ret = spi_write(spi, buf, 3);
- if (ret)
- pr_err("spi_write ret=%d,w cmd=0x%06x\n", ret, data);
-
- return ret;
-}
-
-static const uint32_t ssd2828_init_sequence[] = {
- 0x7000B1, 0x723240, /* VSA=50, HAS=64 */
- 0x7000B2, 0x725078, /* VBP=30+50, HBP=56+64 */
- 0x7000B3, 0x72243C, /* VFP=36, HFP=60 */
- 0x7000B4, 0x720300, /* HACT=768 */
- 0x7000B5, 0x720400, /* VACT=1024 */
- 0x7000B6, 0x72000b, /* burst mode, 24bpp loosely packed */
- 0x7000DE, 0x720003, /* no of lane=4 */
- 0x7000D6, 0x720005, /* RGB order and packet number in blanking period */
- 0x7000B9, 0x720000, /* disable PLL */
-
- /* lane speed=576 (24MHz * 24 = 576) */
- /* may modify according to requirement, 500Mbps to 560Mbps */
- /* LP clock : 576 / 9 / 8 = 8 MHz */
- 0x7000BA, 0x728018,
- 0x7000BB, 0x720008,
-
- 0x7000B9, 0x720001, /* enable PPL */
- 0x7000C4, 0x720001, /* enable BTA */
- 0x7000B7, 0x720342, /* enter LP mode */
- 0x7000B8, 0x720000, /* VC */
- 0x7000BC, 0x720000, /* set packet size */
-
- 0x700011, 0xff0000 + 200, /* sleep out cmd */
- 0x700029, 0xff0000 + 200, /* display on */
- 0x7000B7, 0x72030b, /* video mode on */
-};
-
-static int ssd2828_hw_reset(struct ssd2828_chip *chip)
-{
- lcd_power_on(1);
- msleep(10);
-
- gpio_direction_output(chip->gpio_reset, 1);
- msleep(10);
- gpio_direction_output(chip->gpio_reset, 0);
- msleep(20);
- gpio_direction_output(chip->gpio_reset, 1);
- msleep(20);
- return 0;
-}
-
-static int ssd2828_hw_init(struct ssd2828_chip *chip)
-{
- int ret = 0;
- int i;
-
- ssd2828_hw_reset(chip);
-
- ret = ssd2828_read(chip->spi, 0xB0);
- if (ret < 0 || ret != 0x2828) {
- pr_err("Error: SSD2828 not found!\n");
- return -ENODEV;
- }
-
- for (i = 0; i < ARRAY_SIZE(ssd2828_init_sequence); i++) {
- if (ssd2828_init_sequence[i] & 0xff000000) {
- msleep(ssd2828_init_sequence[i] & 0xff);
- continue;
- }
- ret = spi_write_24bit(chip->spi, ssd2828_init_sequence[i]);
- if (ret)
- break;
- }
-
- return ret;
-}
-
-static ssize_t option_port_testmode_show(struct device *dev,
- struct device_attribute *attr,
- char *buf)
-{
- char *s = buf;
- int ret;
- int reg;
-
- struct spi_device *spi = container_of(dev, struct spi_device, dev);
-
- s += sprintf(s, "register value\n");
-
- for (reg = 0xb0; reg <= 0xff; reg++) {
- ret = ssd2828_read(spi, (uint8_t)reg);
- if (ret < 0)
- goto out;
- s += sprintf(s, "reg 0x%02X : 0x%04x\n", reg, ret);
- }
-
- s += sprintf(s, "=========\n");
-
-out:
- return s - buf;
-}
-
-static ssize_t option_port_testmode_store(struct device *dev,
- struct device_attribute *attr,
- const char *buf, size_t count)
-{
- return 0;
-}
-
-static DEVICE_ATTR(testmode, S_IRUGO,
- option_port_testmode_show,
- option_port_testmode_store);
-
-static int __devinit ssd2828_probe(struct spi_device *spi)
-{
- struct ssd2828_chip *chip;
- int gpio = WMT_PIN_GP0_GPIO0;
- int ret;
-
- ret = gpio_request(gpio, "SSD2828 Reset");
- if (ret) {
- dev_err(&spi->dev, "can not open GPIO %d\n", gpio);
- return ret;
- }
-
- ret = ssd2828_read(spi, 0xB0);
- if (ret < 0 || ret != 0x2828) {
- pr_err("Error: SSD2828 not found!\n");
- return -ENODEV;
- }
-
- chip = kzalloc(sizeof(*chip), GFP_KERNEL);
- if (!chip)
- return -ENOMEM;
-
- chip->spi = spi;
- chip->gpio_reset = gpio;
- spi_set_drvdata(spi, chip);
-
- ret = sysfs_create_file(&spi->dev.kobj, &dev_attr_testmode.attr);
- if (unlikely(ret))
- pr_err("ssd2828 sysfs_create_file failed\n");
-
- return ret;
-}
-
-static int ssd2828_spi_resume(struct spi_device *spi)
-{
- struct ssd2828_chip *chip = dev_get_drvdata(&spi->dev);
- return ssd2828_hw_init(chip);
-}
-
-static struct spi_driver ssd2828_driver = {
- .driver = {
- .name = DRIVERNAME,
- .owner = THIS_MODULE,
- },
- .probe = ssd2828_probe,
- .resume = ssd2828_spi_resume,
-#if 0
- .remove = __devexit_p(ssd2828_remove),
- .shutdown = ssd2828_shutdown,
-#endif
-};
-
-static struct spi_board_info ssd2828_spi_info[] __initdata = {
- {
- .modalias = DRIVERNAME,
- .bus_num = 1,
- .chip_select = 0,
- .max_speed_hz = 12000000,
- .irq = -1,
- .mode = SPI_CLK_MODE3,
- },
-};
-
-static int wmt_lcd_panel(void)
-{
- char buf[96];
- int len = sizeof(buf);
- int type, id = 0;
-
- if (wmt_getsyspara("wmt.display.param", buf, &len))
- return -ENODEV;
-
- sscanf(buf, "%d:%d", &type, &id);
- return id;
-}
-
-static int __init b079xan01_init(void)
-{
- int ret;
-
- if (wmt_lcd_panel() != LCD_B079XAN01) {
- pr_err("LCD B079XAN01 not found\n");
- return -EINVAL;
- }
-
- ret = spi_register_board_info(ssd2828_spi_info,
- ARRAY_SIZE(ssd2828_spi_info));
- if (ret) {
- pr_err("spi_register_board_info failed\n");
- return ret;
- }
-
- ret = spi_register_driver(&ssd2828_driver);
- if (ret) {
- pr_err("spi_register_driver failed\n");
- return -EIO;
- }
-
- if (lcd_b079xan01_init()) {
- spi_unregister_driver(&ssd2828_driver);
- return -ENODEV;
- }
-
- pr_info("spi %s register success\n", DRIVERNAME);
-
- return 0;
-}
-
-static void b079xan01_exit(void)
-{
- spi_unregister_driver(&ssd2828_driver);
-}
-
-module_init(b079xan01_init);
-module_exit(b079xan01_exit);
diff --git a/ANDROID_3.4.5/drivers/video/wmt/devices/lcd-gl5001w.c b/ANDROID_3.4.5/drivers/video/wmt/devices/lcd-gl5001w.c
deleted file mode 100755
index 03e3de29..00000000
--- a/ANDROID_3.4.5/drivers/video/wmt/devices/lcd-gl5001w.c
+++ /dev/null
@@ -1,1412 +0,0 @@
-/*++
- * linux/drivers/video/wmt/devices/lcd-gl5001w.c
- * WonderMedia video post processor (VPP) driver
- *
- * Copyright c 2012 WonderMedia Technologies, Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * 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.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- * WonderMedia Technologies, Inc.
- * 4F, 533, Chung-Cheng Road, Hsin-Tien, Taipei 231, R.O.C
---*/
-
-
-#include <linux/init.h>
-#include <linux/module.h>
-#include <linux/kernel.h>
-#include <linux/err.h>
-#include <linux/power_supply.h>
-#include <linux/i2c.h>
-#include <linux/slab.h>
-#include <linux/interrupt.h>
-#include <linux/proc_fs.h>
-#include <linux/gpio.h>//wangaq+
-#include "../lcd.h"
-
-//#include <mach/gpio-cs.h>
-//#include <mach/wmt_env.h>
-#include <mach/wmt_iomux.h>//wangaq+
-
-
-#include "../lcd.h"//yangchen add
-
-#define DRIVER_NAME "tc358768"
-#define I2C_ADDR 0x0E
-#define I2C_ADAPTER 0
-
-#define DTYPE_DCS_SWRITE_0P 0X05
-#define DTYPE_DCS_SWRITE_1P 0X15
-#define DTYPE_DCS_LWRITE 0X39
-#define DTYPE_GEN_LWRITE 0X29
-#define DTYPE_GEN_SWRITE_2P 0X23
-#define DTYPE_GEN_SWRITE_1P 0X13
-#define DTYPE_GEN_SWRITE_0P 0X03
-
-
-#define Gl5001w_Reset_Port WMT_PIN_GP62_SUSGPIO0
-#define Tc358768_Reset_Port WMT_PIN_GP1_GPIO8
-//#define BackLight_Power_PORT WMT_PIN_GP0_GPIO0
-
-static void lcd_set_power(int status);
-static int save=1;
-//static struct work_struct cw500_resume_work;
-struct cw500_data {
- struct work_struct cw500_resume_work;
-};
-struct cw500_data *data;
-
-#if 0
-#define lcd_debug printk
-#else
-#define lcd_debug(fmt...) do { } while (0)
-#endif
-
-#define __unused __attribute__ ((unused))
-
-static bool lcd_init_gl500 = false;
-
-
-typedef enum {
- //LCD_BTL504880,
- LCD_YT50F62C6,
- LCD_BT050TN,
- LCD_ILI9806,
- LCD_OTM8019A,
- LCD_MAX
-} lcd_panel_enum;
-
-struct lcd_deviceid_struct{
- unsigned short id;
- unsigned char addr;
- unsigned char read_start;
- unsigned char len;
-};
-
-static struct lcd_deviceid_struct lcd_deviceid[LCD_MAX]={
- //{0x8009,0xa1,6,2},
- {0x9805,0xd3,5,2},
- {0x8009,0xa1,6,2},
- {0x9816,0xd3,5,2},
- {0x8019,0xa1,6,2}
-};
-
-//LCD_YT50F62C6
-static unsigned char LCD_YT50F62C6_CMD_FF_3DATA[] = {0xFF,0xFF,0x98,0x05}; //EXTC Command Set enable register
-static unsigned char LCD_YT50F62C6_CMD_FD_4DATA[] = {0xFD,0x03,0x13,0x44,0x00};
-static unsigned char LCD_YT50F62C6_CMD_F8_15DATA[] = {0xF8,0x15,0x02,0x02,0x15,0x02,0x02,0x30,0x01,0x01,0x30,0x01,0x01,0x30,0x01,0x01};
-static unsigned char LCD_YT50F62C6_CMD_B8_1DATA[] = {0xB8,0x73}; //DBI Type B Interface Setting
-static unsigned char LCD_YT50F62C6_CMD_F1_1DATA[] = {0xF1,0x00}; //Gate Modulation
-static unsigned char LCD_YT50F62C6_CMD_F2_3DATA[] = {0xF2,0x00,0x58,0x41}; //CR/EQ/PC
-static unsigned char LCD_YT50F62C6_CMD_FC_3DATA[] = {0xFC,0x04,0x0F,0x01};
-static unsigned char LCD_YT50F62C6_CMD_FE_1DATA[] = {0xFE,0x19}; //SRAM Repair
-static unsigned char LCD_YT50F62C6_CMD_EB_2DATA[] = {0xEB,0x08,0x0F}; // 3 Gamma & Dithering
-static unsigned char LCD_YT50F62C6_CMD_E0_16DATA[] = {0xE0,0x00,0x02,0x07,0x10,0x10,0x1D,0x0F,0x0B,0x00,0x03,0x02,0x0B,0x0C,0x33,0x2F,0x00}; //P-Gamma
-static unsigned char LCD_YT50F62C6_CMD_E1_16DATA[] = {0xE1,0x00,0x02,0x07,0x10,0x10,0x17,0x0B,0x0B,0x00,0x03,0x02,0x0B,0x0C,0x33,0x2F,0x00}; //N-Gamma
-static unsigned char LCD_YT50F62C6_CMD_C1_4DATA[] = {0xC1,0x13,0x26,0x06,0x26}; //Power Control 1
-static unsigned char LCD_YT50F62C6_CMD_C7_1DATA[] = {0xC7,0xC4};
-static unsigned char LCD_YT50F62C6_CMD_B1_3DATA[] = {0xB1,0x00,0x12,0x14}; //Frame Rate Control
-static unsigned char LCD_YT50F62C6_CMD_B4_1DATA[] = {0xB4,0x02}; // 2 Dot Inversion
-static unsigned char LCD_YT50F62C6_CMD_36_1DATA[] = {0x36,0x0A}; //Memory Access
-static unsigned char LCD_YT50F62C6_CMD_3A_1DATA[] = {0x3A,0x77}; //16 & 18 & 24 bits
-static unsigned char LCD_YT50F62C6_CMD_21_0DATA[] = {0x21}; //Display Inv-On
-static unsigned char LCD_YT50F62C6_CMD_B0_1DATA[] = {0xB0,0x00}; //RGB I/F Polarity
-static unsigned char LCD_YT50F62C6_CMD_B6_1DATA[] = {0xB6,0x01}; //CPU/RGB I/F Select
-static unsigned char LCD_YT50F62C6_CMD_C2_1DATA[] = {0xC2,0x11};
-static unsigned char LCD_YT50F62C6_CMD_11_0DATA[] = {0x11}; //Sleep out
-static unsigned char LCD_YT50F62C6_CMD_29_0DATA[] = {0x29}; //Display on
-static unsigned char LCD_YT50F62C6_CMD_2C_0DATA[] = {0x2C}; //Memory write
-
-//LCD_BT050TN
-static unsigned char LCD_BT050TN_CMD_FF00_0DATA[] = {0x00,0x00};
-static unsigned char LCD_BT050TN_CMD_FF00_3DATA[] = {0xFF,0x80,0x09,0x01};
-static unsigned char LCD_BT050TN_CMD_FF80_0DATA[] = {0x00,0x80};
-static unsigned char LCD_BT050TN_CMD_FF80_2DATA[] = {0xFF,0x80,0x09};
-static unsigned char LCD_BT050TN_CMD_FF03_0DATA[] = {0x00,0x03};
-static unsigned char LCD_BT050TN_CMD_FF03_1DATA[] = {0xFF,0x01};
-static unsigned char LCD_BT050TN_CMD_2100_0DATA[] = {0x00,0x00};
-static unsigned char LCD_BT050TN_CMD_2100_1DATA[] = {0x21,0x00};
-static unsigned char LCD_BT050TN_CMD_D800_0DATA[] = {0x00,0x00};
-static unsigned char LCD_BT050TN_CMD_D800_2DATA[] = {0xD8,0x6F,0x6F};
-static unsigned char LCD_BT050TN_CMD_C582_0DATA[] = {0x00,0x82};
-static unsigned char LCD_BT050TN_CMD_C582_1DATA[] = {0xC5,0xA3};
-static unsigned char LCD_BT050TN_CMD_C181_0DATA[] = {0x00,0x81};
-static unsigned char LCD_BT050TN_CMD_C181_1DATA[] = {0xC1,0x66};
-static unsigned char LCD_BT050TN_CMD_C1A1_0DATA[] = {0x00,0xA1};
-static unsigned char LCD_BT050TN_CMD_C1A1_1DATA[] = {0xC1,0x08};
-static unsigned char LCD_BT050TN_CMD_B4C0_0DATA[] = {0x00,0xB4};
-static unsigned char LCD_BT050TN_CMD_B4C0_1DATA[] = {0xC0,0x50};
-static unsigned char LCD_BT050TN_CMD_C0A3_0DATA[] = {0x00,0xA3};
-static unsigned char LCD_BT050TN_CMD_C0A3_1DATA[] = {0xC0,0x00};
-static unsigned char LCD_BT050TN_CMD_C489_0DATA[] = {0x00,0x89};
-static unsigned char LCD_BT050TN_CMD_C489_1DATA[] = {0xC4,0x08};
-static unsigned char LCD_BT050TN_CMD_C481_0DATA[] = {0x00,0x81};
-static unsigned char LCD_BT050TN_CMD_C481_1DATA[] = {0xC4,0x83};
-static unsigned char LCD_BT050TN_CMD_C590_0DATA[] = {0x00,0x90};
-static unsigned char LCD_BT050TN_CMD_C590_3DATA[] = {0xC5,0x96,0xA7,0x01};
-static unsigned char LCD_BT050TN_CMD_C5B1_0DATA[] = {0x00,0xB1};
-static unsigned char LCD_BT050TN_CMD_C5B1_1DATA[] = {0xC5,0xA9};
-static unsigned char LCD_BT050TN_CMD_D900_0DATA[] = {0x00,0x00};
-static unsigned char LCD_BT050TN_CMD_D900_1DATA[] = {0xD9,0x15};
-static unsigned char LCD_BT050TN_CMD_E100_0DATA[] = {0x00,0x00};
-static unsigned char LCD_BT050TN_CMD_E100_16DATA[] = {0xE1,0x02,0x08,0x0E,0x10,0x09,0x1D,0x0E,0x0E,0x00,0x05,0x02,0x07,0x0E,0x24,0x23,0x1D};
-static unsigned char LCD_BT050TN_CMD_E200_0DATA[] = {0x00,0x00};
-static unsigned char LCD_BT050TN_CMD_E200_16DATA[] = {0xE2,0x02,0x08,0x0E,0x0F,0x09,0x1D,0x0E,0x0D,0x00,0x04,0x02,0x07,0x0E,0x25,0x23,0x1D};
-static unsigned char LCD_BT050TN_CMD_0000_0DATA[] = {0x00,0x00};
-static unsigned char LCD_BT050TN_CMD_0000_1DATA[] = {0x00,0x00};
-static unsigned char LCD_BT050TN_CMD_B3A1_0DATA[] = {0x00,0xA1};
-static unsigned char LCD_BT050TN_CMD_B3A1_1DATA[] = {0xB3,0x10};
-static unsigned char LCD_BT050TN_CMD_B3A7_0DATA[] = {0x00,0xA7};
-static unsigned char LCD_BT050TN_CMD_B3A7_1DATA[] = {0xB3,0x10};
-static unsigned char LCD_BT050TN_CMD_C090_0DATA[] = {0x00,0x90};
-static unsigned char LCD_BT050TN_CMD_C090_6DATA[] = {0xC0,0x00,0x44,0x00,0x00,0x00,0x03};
-static unsigned char LCD_BT050TN_CMD_C1A6_0DATA[] = {0x00,0xA6};
-static unsigned char LCD_BT050TN_CMD_C1A6_3DATA[] = {0xC1,0x00,0x00,0x00};
-static unsigned char LCD_BT050TN_CMD_CE80_0DATA[] = {0x00,0x80};
-static unsigned char LCD_BT050TN_CMD_CE80_6DATA[] = {0xCE,0x87,0x03,0x00,0x86,0x03,0x00};
-static unsigned char LCD_BT050TN_CMD_CE90_0DATA[] = {0x00,0x90};
-static unsigned char LCD_BT050TN_CMD_CE90_6DATA[] = {0xCE,0x33,0x1E,0x00,0x33,0x1F,0x00};
-static unsigned char LCD_BT050TN_CMD_CEA0_0DATA[] = {0x00,0xA0};
-static unsigned char LCD_BT050TN_CMD_CEA0_14DATA[] = {0xCE,0x38,0x03,0x03,0x20,0x00,0x00,0x00,0x38,0x02,0x03,0x21,0x00,0x00,0x00};
-static unsigned char LCD_BT050TN_CMD_CEB0_0DATA[] = {0x00,0xb0};
-static unsigned char LCD_BT050TN_CMD_CEB0_14DATA[] = {0xCE,0x38,0x01,0x03,0x22,0x00,0x00,0x00,0x38,0x00,0x03,0x23,0x00,0x00,0x00};
-static unsigned char LCD_BT050TN_CMD_CEC0_0DATA[] = {0x00,0xC0};
-static unsigned char LCD_BT050TN_CMD_CEC0_14DATA[] = {0xCE,0x30,0x00,0x03,0x24,0x00,0x00,0x00,0x30,0x01,0x03,0x25,0x00,0x00,0x00};
-static unsigned char LCD_BT050TN_CMD_CED0_0DATA[] = {0x00,0xD0};
-static unsigned char LCD_BT050TN_CMD_CED0_14DATA[] = {0xCE,0x30,0x02,0x03,0x26,0x00,0x00,0x00,0x30,0x03,0x03,0x27,0x00,0x00,0x00};
-static unsigned char LCD_BT050TN_CMD_CFC6_0DATA[] = {0x00,0xC6};
-static unsigned char LCD_BT050TN_CMD_CFC6_2DATA[] = {0xCF,0x01,0x80};
-static unsigned char LCD_BT050TN_CMD_CFC9_0DATA[] = {0x00,0xC9};
-static unsigned char LCD_BT050TN_CMD_CFC9_1DATA[] = {0xCF,0x00};
-static unsigned char LCD_BT050TN_CMD_CBC0_0DATA[] = {0x00,0xC0};
-static unsigned char LCD_BT050TN_CMD_CBC0_15DATA[] = {0xCB,0x00,0x04,0x04,0x04,0x04,0x00,0x00,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00};
-static unsigned char LCD_BT050TN_CMD_CBD0_0DATA[] = {0x00,0xD0};
-static unsigned char LCD_BT050TN_CMD_CBD0_15DATA[] = {0xCB,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0x00,0x00,0x04,0x04,0x04};
-static unsigned char LCD_BT050TN_CMD_CBE0_0DATA[] = {0x00,0xE0};
-static unsigned char LCD_BT050TN_CMD_CBE0_10DATA[] = {0xCB,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
-static unsigned char LCD_BT050TN_CMD_CC80_0DATA[] = {0x00,0x80};
-static unsigned char LCD_BT050TN_CMD_CC80_10DATA[] = {0xCC,0x00,0x26,0x25,0x02,0x06,0x00,0x00,0x0A,0x0E,0x0C};
-static unsigned char LCD_BT050TN_CMD_CC90_0DATA[] = {0x00,0x90};
-static unsigned char LCD_BT050TN_CMD_CC90_15DATA[] = {0xCC,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x26,0x25,0x01,0x05};
-static unsigned char LCD_BT050TN_CMD_CCA0_0DATA[] = {0x00,0xA0};
-static unsigned char LCD_BT050TN_CMD_CCA0_15DATA[] = {0xCC,0x00,0x00,0x09,0x0d,0x0b,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
-static unsigned char LCD_BT050TN_CMD_CCB0_0DATA[] = {0x00,0xB0};
-static unsigned char LCD_BT050TN_CMD_CCB0_10DATA[] = {0xCC,0x00,0x25,0x26,0x05,0x01,0x00,0x00,0x0F,0x0B,0x0D};
-static unsigned char LCD_BT050TN_CMD_CCC0_0DATA[] = {0x00,0xC0};
-static unsigned char LCD_BT050TN_CMD_CCC0_15DATA[] = {0xCC,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x25,0x26,0x06,0x02};
-static unsigned char LCD_BT050TN_CMD_CCD0_0DATA[] = {0x00,0xD0};
-static unsigned char LCD_BT050TN_CMD_CCD0_15DATA[] = {0xCC,0x00,0x00,0x10,0x0c,0x0e,0x0a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
-static unsigned char LCD_BT050TN_CMD_21_0DATA[] = {0x21};
-static unsigned char LCD_BT050TN_CMD_36_0DATA[] = {0x36};
-static unsigned char LCD_BT050TN_CMD_00_0DATA[] = {0x00};
-static unsigned char LCD_BT050TN_CMD_11_0DATA[] = {0x11};
-static unsigned char LCD_BT050TN_CMD_29_0DATA[] = {0x29};
-static unsigned char LCD_BT050TN_CMD_2C_0DATA[] = {0x2C};
-
-
-//LCD_ILI9806
-static unsigned char LCD_ILI9806_CMD_FF_3DATA[] = {0xFF,0xFF,0x98,0x16};
-static unsigned char LCD_ILI9806_CMD_BA_1DATA[] = {0xBA,0x60};
-static unsigned char LCD_ILI9806_CMD_F3_1DATA[] = {0xF3,0x70};
-static unsigned char LCD_ILI9806_CMD_F9_3DATA[] = {0xF9,0x04,0xFB,0x84};
-static unsigned char LCD_ILI9806_CMD_B0_1DATA[] = {0xB0,0x01};
-static unsigned char LCD_ILI9806_CMD_BC_23DATA[] = {0xBC,0x01,0x0F,0x61,0xFE,0x01,0x01,0x0B,0x11,0x6C,0x63,0xFF,0xFF,0x01,0x01,0x00,0x00,0x55,0x53,0x01,0x00,0x00,0x43,0x0B};
-static unsigned char LCD_ILI9806_CMD_BD_8DATA[] = {0xBD,0x01,0x23,0x45,0x67,0x01,0x23,0x45,0x67};
-static unsigned char LCD_ILI9806_CMD_BE_17DATA[] = {0xBE,0x13,0x11,0x00,0x22,0x22,0xBA,0xAB,0x22,0x22,0x22,0x66,0x22,0x22,0x22,0x22,0x22,0x22};
-static unsigned char LCD_ILI9806_CMD_ED_2DATA[] = {0xED,0x7F,0x0F};
-static unsigned char LCD_ILI9806_CMD_B4_3DATA[] = {0xB4,0x02,0x02,0x02};
-static unsigned char LCD_ILI9806_CMD_B5_4DATA[] = {0xB5,0x14,0x14,0x04,0x00};
-static unsigned char LCD_ILI9806_CMD_C0_3DATA[] = {0xC0,0x7F,0x0B,0x04};
-static unsigned char LCD_ILI9806_CMD_C1_4DATA[] = {0xC1,0x17,0x78,0x78,0x20};
-static unsigned char LCD_ILI9806_CMD_D7_1DATA[] = {0xD7,0x2A};
-static unsigned char LCD_ILI9806_CMD_D8_1DATA[] = {0xD8,0x28};
-static unsigned char LCD_ILI9806_CMD_FC_1DATA[] = {0xFC,0x05};
-static unsigned char LCD_ILI9806_CMD_E0_16DATA[] = {0xE0,0x00,0x03,0x0A,0x0E,0x11,0x15,0x0A,0x08,0x04,0x09,0x07,0x0D,0x0D,0x2E,0x28,0x00};
-static unsigned char LCD_ILI9806_CMD_E1_16DATA[] = {0xE1,0x00,0x02,0x09,0x0E,0x11,0x15,0x0A,0x09,0x04,0x09,0x08,0x0C,0x0D,0x2F,0x28,0x00};
-static unsigned char LCD_ILI9806_CMD_D5_8DATA[] = {0xD5,0x09,0x0A,0x0D,0x0B,0xCB,0xA5,0x01,0x04};
-static unsigned char LCD_ILI9806_CMD_F7_1DATA[] = {0xF7,0x89};
-static unsigned char LCD_ILI9806_CMD_C7_1DATA[] = {0xC7,0x43};
-static unsigned char LCD_ILI9806_CMD_36_1DATA[] = {0x36,0x00};
-static unsigned char LCD_ILI9806_CMD_51_1DATA[] = {0x51,0xFF};
-static unsigned char LCD_ILI9806_CMD_53_1DATA[] = {0x53,0x24};
-static unsigned char LCD_ILI9806_CMD_55_1DATA[] = {0x55,0x03};
-static unsigned char LCD_ILI9806_CMD_11_0DATA[] = {0x11};
-static unsigned char LCD_ILI9806_CMD_29_0DATA[] = {0x29};
-static unsigned char LCD_ILI9806_CMD_2C_0DATA[] = {0x2C}; //Memory write
-
-//OTM8019A
-static unsigned char LCD_OTM8019A_CMD_1[]= {0x00,0x00};
-static unsigned char LCD_OTM8019A_CMD_2[]= {0xFF,0x80,0x19,0x01};
-static unsigned char LCD_OTM8019A_CMD_3[]= {0x00,0x80};
-static unsigned char LCD_OTM8019A_CMD_4[]= {0xFF,0x80,0x19};
-static unsigned char LCD_OTM8019A_CMD_5[]= {0x00,0x90};
-static unsigned char LCD_OTM8019A_CMD_6[]= {0xB3,0x02};
-static unsigned char LCD_OTM8019A_CMD_7[]= {0x00,0x92};
-static unsigned char LCD_OTM8019A_CMD_8[]= {0xB3,0x45};
-static unsigned char LCD_OTM8019A_CMD_9[]= {0x00,0xA2};
-static unsigned char LCD_OTM8019A_CMD_10[]= {0xC0,0x04,0x00,0x02};
-static unsigned char LCD_OTM8019A_CMD_11[]= {0x00,0x80};
-static unsigned char LCD_OTM8019A_CMD_12[]= {0xC0,0x00,0x58,0x00,0x14,0x16};
-static unsigned char LCD_OTM8019A_CMD_13[]= {0x00,0x90};
-static unsigned char LCD_OTM8019A_CMD_14[]= {0xC0,0x00,0x15,0x00,0x00,0x00,0x03};
-static unsigned char LCD_OTM8019A_CMD_15[]= {0x00,0xB4};
-static unsigned char LCD_OTM8019A_CMD_16[]= {0xC0,0x70};//1+2 dot inversion
-static unsigned char LCD_OTM8019A_CMD_17[]= {0x00,0x81};
-static unsigned char LCD_OTM8019A_CMD_18[]= {0xC1,0x33};
-static unsigned char LCD_OTM8019A_CMD_19[]= {0x00,0x80};
-static unsigned char LCD_OTM8019A_CMD_20[]= {0xC4,0x30,0x83};
-static unsigned char LCD_OTM8019A_CMD_21[]= {0x00,0x89};
-static unsigned char LCD_OTM8019A_CMD_22[]= {0xC4,0x08};
-static unsigned char LCD_OTM8019A_CMD_23[]= {0x00,0x82};
-static unsigned char LCD_OTM8019A_CMD_24[]= {0xC5,0xB0};
-static unsigned char LCD_OTM8019A_CMD_25[]= {0x00,0x90};
-static unsigned char LCD_OTM8019A_CMD_26[]= {0xC5,0x4E,0x79,0x01,0x03};
-static unsigned char LCD_OTM8019A_CMD_27[]= {0x00,0xB1};
-static unsigned char LCD_OTM8019A_CMD_28[]= {0xC5,0xA9};
-static unsigned char LCD_OTM8019A_CMD_29[]= {0x00,0x80};
-static unsigned char LCD_OTM8019A_CMD_30[]= {0xCE,0x87,0x03,0x00,0x85,0x03,0x00,0x86,0x03,0x00,0x84,0x03,0x00};
-static unsigned char LCD_OTM8019A_CMD_31[]= {0x00,0xA0};
-static unsigned char LCD_OTM8019A_CMD_32[]= {0xCE,0x38,0x03,0x03,0x58,0x00,0x00,0x00,0x38,0x02,0x03,0x59,0x00,0x00,0x00};
-static unsigned char LCD_OTM8019A_CMD_33[]= {0x00,0xB0};
-static unsigned char LCD_OTM8019A_CMD_34[]= {0xCE,0x38,0x01,0x03,0x5A,0x00,0x00,0x00,0x38,0x00,0x03,0x5B,0x00,0x00,0x00};
-static unsigned char LCD_OTM8019A_CMD_35[]= {0x00,0xC0};
-static unsigned char LCD_OTM8019A_CMD_36[]= {0xCE,0x30,0x00,0x03,0x5C,0x00,0x00,0x00,0x30,0x01,0x03,0x5D,0x00,0x00,0x00};
-static unsigned char LCD_OTM8019A_CMD_37[]= {0x00,0xD0};
-static unsigned char LCD_OTM8019A_CMD_38[]= {0xCE,0x30,0x02,0x03,0x5E,0x00,0x00,0x00,0x30,0x03,0x03,0x5F,0x00,0x00,0x00};
-static unsigned char LCD_OTM8019A_CMD_39[]= {0x00,0xC7};
-static unsigned char LCD_OTM8019A_CMD_40[]= {0xCF,0x00};
-static unsigned char LCD_OTM8019A_CMD_41[]= {0x00,0xC9};
-static unsigned char LCD_OTM8019A_CMD_42[]= {0xCF,0x00};
-static unsigned char LCD_OTM8019A_CMD_43[]= {0x00,0xC4};
-static unsigned char LCD_OTM8019A_CMD_44[]= {0xCB,0x01,0x01,0x01,0x01,0x01,0x01};
-static unsigned char LCD_OTM8019A_CMD_45[]= {0x00,0xD9};
-static unsigned char LCD_OTM8019A_CMD_46[]= {0xCB,0x00,0x00,0x01,0x01,0x01,0x01};
-static unsigned char LCD_OTM8019A_CMD_47[]= {0x00,0xE0};
-static unsigned char LCD_OTM8019A_CMD_48[]= {0xCB,0x01,0x01};
-static unsigned char LCD_OTM8019A_CMD_49[]= {0x00,0x84};
-static unsigned char LCD_OTM8019A_CMD_50[]= {0xCC,0x0C,0x0A,0x10,0x0E,0x03,0x04};
-static unsigned char LCD_OTM8019A_CMD_51[]= {0x00,0x9E};
-static unsigned char LCD_OTM8019A_CMD_52[]= {0xCC,0x00};
-static unsigned char LCD_OTM8019A_CMD_53[]= {0x00,0xA0};
-static unsigned char LCD_OTM8019A_CMD_54[]= {0xCC,0x00,0x02,0x01,0x0d,0x0f,0x09,0x0b};
-static unsigned char LCD_OTM8019A_CMD_55[]= {0x00,0xB4};
-static unsigned char LCD_OTM8019A_CMD_56[]= {0xCC,0x0D,0x0F,0x09,0x0B,0x02,0x01};
-static unsigned char LCD_OTM8019A_CMD_57[]= {0x00,0xCE};
-static unsigned char LCD_OTM8019A_CMD_58[]= {0xCC,0x85};
-static unsigned char LCD_OTM8019A_CMD_59[]= {0x00,0xD0};
-static unsigned char LCD_OTM8019A_CMD_60[]= {0xCC,0x05,0x03,0x04,0x0c,0x0a,0x10,0x0e};
-static unsigned char LCD_OTM8019A_CMD_61[]= {0x00,0x00};
-static unsigned char LCD_OTM8019A_CMD_62[]= {0xD8,0x85,0x85};
-static unsigned char LCD_OTM8019A_CMD_63[]= {0x00,0x00};
-static unsigned char LCD_OTM8019A_CMD_64[]= {0xD9,0x61};
-static unsigned char LCD_OTM8019A_CMD_65[]= {0x00,0x00};
-static unsigned char LCD_OTM8019A_CMD_66[]= {0xE1,0x00,0x03,0x0a,0x1d,0x33,0x49,0x54,0x89,0x7a,0x8e,0x79,0x69,0x81,0x6d,0x73,0x6d,0x66,0x5d,0x52,0x00};
-static unsigned char LCD_OTM8019A_CMD_67[]= {0x00,0x00};
-static unsigned char LCD_OTM8019A_CMD_68[]= {0xE2,0x00,0x04,0x0a,0x1d,0x33,0x49,0x54,0x89,0x7a,0x8e,0x79,0x69,0x81,0x6d,0x73,0x6d,0x66,0x5d,0x52,0x00};
-static unsigned char LCD_OTM8019A_CMD_69[]= {0x00,0x80};
-static unsigned char LCD_OTM8019A_CMD_70[]= {0xC4,0x30};
-static unsigned char LCD_OTM8019A_CMD_71[]= {0x00,0x98};
-static unsigned char LCD_OTM8019A_CMD_72[]= {0xC0,0x00};
-static unsigned char LCD_OTM8019A_CMD_73[]= {0x00,0xa9};
-static unsigned char LCD_OTM8019A_CMD_74[]= {0xC0,0x06};
-static unsigned char LCD_OTM8019A_CMD_75[]= {0x00,0xb0};
-static unsigned char LCD_OTM8019A_CMD_76[]= {0xC1,0x20,0x00,0x00};
-static unsigned char LCD_OTM8019A_CMD_77[]= {0x00,0xe1};
-static unsigned char LCD_OTM8019A_CMD_78[]= {0xC0,0x40,0x18};
-static unsigned char LCD_OTM8019A_CMD_79[]= {0x00,0x80};
-static unsigned char LCD_OTM8019A_CMD_80[]= {0xC1,0x03,0x33};
-static unsigned char LCD_OTM8019A_CMD_81[]= {0x00,0xA0};
-static unsigned char LCD_OTM8019A_CMD_82[]= {0xC1,0xe8};
-static unsigned char LCD_OTM8019A_CMD_83[]= {0x00,0x90};
-static unsigned char LCD_OTM8019A_CMD_84[]= {0xb6,0xb4};
-static unsigned char LCD_OTM8019A_CMD_85[]= {0x00,0x00};
-static unsigned char LCD_OTM8019A_CMD_86[]= {0xfb,0x01};
-static unsigned char LCD_OTM8019A_CMD_87[]= {0x00,0x00};
-static unsigned char LCD_OTM8019A_CMD_88[]= {0xFF,0xFF,0xFF,0xFF};
-static unsigned char LCD_OTM8019A_CMD_89[]= {0x11,0x00};
-static unsigned char LCD_OTM8019A_CMD_90[]= {0x29,0x00};
-//End of
-static struct i2c_client *tc358768_client;
-
-static inline int tc358768_rd_reg_32bits(uint32_t reg_addr)
-{
- int ret;
- struct i2c_msg msgs[2];
- uint8_t buf[4];
- struct i2c_client *client = tc358768_client;
-
- buf[0] = (reg_addr >> 8) & 0xff;
- buf[1] = reg_addr & 0xff;
-
- msgs[0].addr = client->addr;
- msgs[0].flags = 0;
- msgs[0].len = 2;
- msgs[0].buf = buf;
-
- msgs[1].addr = client->addr;
- msgs[1].flags = I2C_M_RD;
- msgs[1].len = 2;
- msgs[1].buf = buf;
-
- ret = i2c_transfer(client->adapter, msgs, 2);
- if (ret < 0) {
- printk("%s:i2c_transfer fail =%d\n", __func__, ret);
- return -1;
- }
-
- ret = (buf[0] << 8) | buf[1];
-
- return ret;
-}
-
-static inline int tc358768_wr_reg_32bits(uint32_t value)
-{
- struct i2c_msg msgs;
- int ret = -1;
- uint8_t buf[4];
- struct i2c_client *client = tc358768_client;
-
- buf[0] = value>>24;
- buf[1] = value>>16;
- buf[2] = value>>8;
- buf[3] = value;
-
- msgs.addr = client->addr;
- msgs.flags = 0;
- msgs.len = 4;
- msgs.buf = buf;
-
- ret = i2c_transfer(client->adapter, &msgs, 1);
- if(ret < 0)
- printk("%d:i2c_transfer fail = %d\n",__LINE__, ret);
-
- return ret;
-}
-
-static int _tc358768_wr_regs_32bits(unsigned int reg_array[], int n)
-{
-
- int i = 0;
- lcd_debug("%s:%d\n", __func__, n);
- for(i = 0; i < n; i++) {
- if(reg_array[i] < 0x00020000) {
- if(reg_array[i] < 20000)
- udelay(reg_array[i]);
- else {
- mdelay(reg_array[i]/1000);
- }
- } else {
- tc358768_wr_reg_32bits(reg_array[i]);
- }
- }
- return 0;
-}
-
-#define tc358768_wr_regs_32bits(reg_array) \
- _tc358768_wr_regs_32bits(reg_array, ARRAY_SIZE(reg_array))
-
-static uint32_t initialize[] = {
- // **************************************************
- // Initizlize -> Display On after power-on
- // **************************************************
- // **************************************************
- // Power on TC358768XBG according to recommended power-on sequence
- // Relase reset (RESX="H")
- // Start input REFCK and PCLK
- // **************************************************
- // **************************************************
- // TC358768XBG Software Reset
- // **************************************************
- 0x00020001, //SYSctl, S/W Reset
- 10,
- 0x00020000, //SYSctl, S/W Reset release
-
- // **************************************************
- // TC358768XBG PLL,Clock Setting
- // **************************************************
- 0x00160063, //PLL Control Register 0 (PLL_PRD,PLL_FBD)
- 0x00180603, //PLL_FRS,PLL_LBWS, PLL oscillation enable
- 1000,
- 0x00180613, //PLL_FRS,PLL_LBWS, PLL clock out enable
-
- // **************************************************
- // TC358768XBG DPI Input Control
- // **************************************************
- 0x00060064, //FIFO Control Register
-
- // **************************************************
- // TC358768XBG D-PHY Setting
- // **************************************************
- 0x01400000, //D-PHY Clock lane enable
- 0x01420000, //
- 0x01440000, //D-PHY Data lane0 enable
- 0x01460000, //
- 0x01480000, //D-PHY Data lane1 enable
- 0x014A0000, //
- 0x014C0001, //
- 0x014E0001, //
- 0x01500001, //
- 0x01520001, //
-
- 0x01000002, //
- 0x01020000, //
- 0x01040000, //
- 0x01060002, //
- 0x01080002, //
- 0x010A0000, //
- 0x010C0002, //
- 0x010E0000, //
- 0x01100002, //
- 0x01120000, //
- // **************************************************
- // TC358768XBG DSI-TX PPI Control
- // **************************************************
- 0x02100A5A, //LINEINITCNT
- 0x02120000, //
- 0x02140002, //LPTXTIMECNT
- 0x02160000, //
- 0x02180E02, //TCLK_HEADERCNT
- 0x021A0000, //
- 0x021C0000, //TCLK_TRAILCNT
- 0x021E0000, //
- 0x02200002, //THS_HEADERCNT
- 0x02220000, //
- 0x02244650, //TWAKEUPCNT
- 0x02260000, //
- 0x02280000, //TCLK_POSTCNT
- 0x022A0000, //
- 0x022C0001, //THS_TRAILCNT
- 0x022E0000, //
- 0x02300005, //HSTXVREGCNT
- 0x02320000, //
- 0x02340007, //HSTXVREGEN enable
- 0x02360000, //
- 0x02380001, //DSI clock Enable/Disable during LP
- 0x023A0000, //
- 0x023C0002, //BTACNTRL1
- 0x023E0002, //
- 0x02040001, //STARTCNTRL
- 0x02060000, //
-
- // **************************************************
- // TC358768XBG DSI-TX Timing Control
- // **************************************************
- 0x06200001, //Sync Event mode setting Event mode
- 0x06220014, //V Control Register1 VBP
- 0x0624000C, //V Control Register2 not used
- 0x06260356, //V Control Register3 800
- 0x0628005E, //H Control Register1
- 0x062A003F, //H Control Register2
- //0x062C0438, //H Control Register3 (480*18)/8=1080
- 0x062C05A0, //H Control Register3 (480*24)/8=1440
-
- 0x05180001, //DSI Start
- 0x051A0000, //
-};
-
-static uint32_t start_dsi_hs_mode[] = {
-
- // **************************************************
- // Set to HS mode
- // **************************************************
- 0x05000083, //DSI lane setting, DSI mode=HS
- 0x0502A300, //bit set
- 0x05008000, //Switch to DSI mode
- 0x0502C300, //
-
- // **************************************************
- // Host: RGB(DPI) input start
- // **************************************************
-
- //0x00080047, //DSI-TX Format setting: RGB666
- 0x00080037, //DSI-TX Format setting//3 RGB888;4 RGB666
- //0x0050001E, //DSI-TX Pixel stream packet Data Type setting
- 0x0050003E, //Packed Pixel Stream, 24-bit RGB, 8-8-8 Format
- 0x00320000, //HSYNC Polarity
-
- 0x00040040, //Configuration Control Register
-
-};
-
-static inline void mipi_dsi_init(void)
-{
- tc358768_wr_regs_32bits(initialize);
-}
-
-static inline void mipi_dsi_hs_start(void)
-{
- tc358768_wr_regs_32bits(start_dsi_hs_mode);
-}
-
-static void tc_print(u32 addr)
-{
- lcd_debug("+++addr->%04x: %04x\n", addr, tc358768_rd_reg_32bits(addr));
-}
-
-static int tc358768_command_tx_less8bytes(unsigned char type,
- unsigned char *regs, int n)
-{
- int i = 0;
- unsigned int command[] = {
- 0x06020000,
- 0x06040000,
- 0x06100000,
- 0x06120000,
- 0x06140000,
- 0x06160000,
- };
-
- if(n <= 2)
- command[0] |= 0x1000; //short packet
- else {
- command[0] |= 0x4000; //long packet
- command[1] |= n; //word count byte
- }
- command[0] |= type; //data type
-
- lcd_debug("*cmd:\n");
- lcd_debug("0x%08x\n", command[0]);
- lcd_debug("0x%08x\n", command[1]);
-
- for(i = 0; i < (n + 1)/2; i++) {
- command[i+2] |= regs[i*2];
- if((i*2 + 1) < n)
- command[i+2] |= regs[i*2 + 1] << 8;
- lcd_debug("0x%08x\n", command[i+2]);
- }
-
- _tc358768_wr_regs_32bits(command, (n + 1)/2 + 2);
- tc358768_wr_reg_32bits(0x06000001); //Packet Transfer
- if(regs[0] == 0x29){
- //tc358768_wr_reg_32bits(0x06000001);
- }
- //wait until packet is out
- i = 100;
- while(tc358768_rd_reg_32bits(0x0600) & 0x01) {
- if(i-- == 0)
- break;
- tc_print(0x0600);
- }
-
- //udelay(50);
- return 0;
-}
-
-static int __unused tc358768_command_tx_more8bytes_hs(unsigned char type,
- unsigned char regs[], int n)
-{
-
- int i = 0;
- unsigned int dbg_data = 0x00E80000, temp = 0;
- unsigned int command[] = {
- 0x05000080, // HS data 4 lane, EOT is added
- 0x0502A300,
- 0x00080001,
- 0x00500000, // Data ID setting
- 0x00220000, // Transmission byte count= byte
- 0x00E08000, // Enable I2C/SPI write to VB
- 0x00E20048, // Total word count = 0x48 (max 0xFFF).
- // This value should be adjusted considering
- // trade off between transmission time and
- // transmission start/stop time delay
- 0x00E4007F, // Vertical blank line = 0x7F
- };
-
-
- command[3] |= type; //data type
- command[4] |= n & 0xffff; //Transmission byte count
-
- tc358768_wr_regs_32bits(command);
-
- for(i = 0; i < (n + 1)/2; i++) {
- temp = dbg_data | regs[i*2];
- if((i*2 + 1) < n)
- temp |= (regs[i*2 + 1] << 8);
- lcd_debug("0x%08x\n", temp);
- tc358768_wr_reg_32bits(temp);
- }
- if((n % 4 == 1) || (n % 4 == 2)) //4 bytes align
- tc358768_wr_reg_32bits(dbg_data);
-
- tc358768_wr_reg_32bits(0x00E0C000); //Start command transmisison
- tc358768_wr_reg_32bits(0x00E00000); //Stop command transmission. This setting should be done just after above setting to prevent multiple output
- udelay(200);
- //Re-Initialize
- //tc358768_wr_regs_32bits(re_initialize);
- return 0;
-}
-
-static int tc358768_command_tx_more8bytes_lp(unsigned char type,
- unsigned char regs[], int n)
-{
-
- int i = 0;
- unsigned int dbg_data = 0x00E80000, temp = 0;
- unsigned int command[] = {
- 0x00080001,
- 0x00500000, //Data ID setting
- 0x00220000, //Transmission byte count= byte
- 0x00E08000, //Enable I2C/SPI write to VB
- };
-
- command[1] |= type; //data type
- command[2] |= n & 0xffff; //Transmission byte count
-
- tc358768_wr_regs_32bits(command);
-
- for(i = 0; i < (n + 1)/2; i++) {
- temp = dbg_data | regs[i*2];
- if((i*2 + 1) < n)
- temp |= (regs[i*2 + 1] << 8);
- lcd_debug("0x%08x\n", temp);
- tc358768_wr_reg_32bits(temp);
-
- }
- if((n % 4 == 1) || (n % 4 == 2)) //4 bytes align
- tc358768_wr_reg_32bits(dbg_data);
-
- tc358768_wr_reg_32bits(0x00E0E000); //Start command transmisison
- udelay(1000);
- tc358768_wr_reg_32bits(0x00E02000); //Keep Mask High to prevent short packets send out
- tc358768_wr_reg_32bits(0x00E00000); //Stop command transmission. This setting should be done just after above setting to prevent multiple output
- udelay(10);
- return 0;
-}
-
-int _tc358768_send_packet(unsigned char type, unsigned char regs[], int n) {
-
- if(n <= 8) {
- tc358768_command_tx_less8bytes(type, regs, n);
- } else {
- //tc358768_command_tx_more8bytes_hs(type, regs, n);
- tc358768_command_tx_more8bytes_lp(type, regs, n);
- }
- return 0;
-}
-
-/*
- * The DCS is separated into two functional areas:
- * the User Command Set and the Manufacturer Command Set.
- * Each command is an eight-bit code with 00h to AFh assigned to
- * the User Command Set and all other codes assigned to
- * the Manufacturer Command Set.
- */
-int _mipi_dsi_send_dcs_packet(unsigned char regs[], int n) {
-
- unsigned char type = 0;
- if(n == 1) {
- type = DTYPE_DCS_SWRITE_0P;
- } else if (n == 2) {
- type = DTYPE_DCS_SWRITE_1P;
- } else if (n > 2) {
- type = DTYPE_DCS_LWRITE;
- }
- _tc358768_send_packet(type, regs, n);
- return 0;
-}
-
-static int tc358768_command_read_bytes(unsigned char addr,unsigned char *regs, int n)
-{
- unsigned short *data = (unsigned short *)regs,i;
- unsigned int command[] = {
- 0x06021037,
- 0x06040000,
- 0x06100000,
- 0x06000001,
- 0x06021000,
- 0x06040000,
- 0x06100000,
- 0x06000001,
- };
-
- lcd_debug("%s start addr=0x%x\n",__FUNCTION__,addr);
-
- command[2] |= 32;
- command[4] |= 0x14;
- command[6] |= addr;
-
- _tc358768_wr_regs_32bits(command,4);
- udelay(100);
- tc358768_wr_reg_32bits(0x05040010);
- tc358768_wr_reg_32bits(0x05060000);
- udelay(100);
- _tc358768_wr_regs_32bits(&command[4],4);
-
- while(n-- > 0){
- *data = (unsigned short)tc358768_rd_reg_32bits(0x0430);
- //printf("%s *data=0x%x\n",__FUNCTION__,*data);
- data++;
- *data = (unsigned short)tc358768_rd_reg_32bits(0x0432);
- //printf("%s *data=0x%x\n",__FUNCTION__,*data);
- data++;
- udelay(100);
- }
-
- return 0;
-}
-
-static lcd_panel_enum tc358768_check_lcd_type(void)
-{
- unsigned char data[50]={0},i=0;
- int lcd_id;
- for(i=0;i<LCD_MAX;i++)
- {
- tc358768_command_read_bytes(lcd_deviceid[i].addr,data,9);
- lcd_id = (data[lcd_deviceid[i].read_start]<<8) + data[lcd_deviceid[i].read_start+1];
- printk("%s lcd_id=0x%x,0x%x\n",__FUNCTION__,lcd_id,lcd_deviceid[i].id);
- if(lcd_id == lcd_deviceid[i].id)
- break;
- }
- return i;
-}
-
-#define mipi_dsi_send_packet(type, regs) \
- _tc358768_send_packet(type, regs, ARRAY_SIZE(regs))
-
-#define mipi_dsi_send_dcs_packet(regs) \
- _mipi_dsi_send_dcs_packet(regs, ARRAY_SIZE(regs))
-
-static int gl5001w_reset(void)
-{
- printk("wangaq:gl5001w_reset\n");
-
- gpio_direction_output(Gl5001w_Reset_Port,1);
- mdelay(2);
- gpio_direction_output(Gl5001w_Reset_Port,0);
- mdelay(15);
- gpio_direction_output(Gl5001w_Reset_Port,1);
- mdelay(5);
-
- return 0;
-}
-
-static int tc358768_reset(void)
-{
- printk("wangaq:tc358768_reset\n");
-
-
-
- gpio_direction_output(Tc358768_Reset_Port,0);
- mdelay(20);
- gpio_direction_output(Tc358768_Reset_Port,1);
- mdelay(20);
-
-
- return 0;
-}
-
-static void set_backlight_power(int on)
-{
- printk("set_backlight_power value=%d\n",on);
- //gpio_direction_output(BackLight_Power_PORT,on ? 1 : 0);
-
- printk("set_backlight_power oniff=%d\n",on ? 1 : 0);
-}
-
-static void inline backlight_on(void)
-{
- set_backlight_power(1);
-}
-
-static void inline backlight_off(void)
-{
- set_backlight_power(0);
-}
-
-static int gl5001w_hw_init(void)
-{
- lcd_panel_enum lcd_id;
-
- mipi_dsi_init();
- lcd_id = tc358768_check_lcd_type();
- //lcd init
- //Start of xiaogang.zhang modified on 2013-4-22 14:22 1.0
- if(lcd_id==LCD_YT50F62C6)
- {
- printk("gl5001w_hw_init LCD_YT50F62C6\n");
- mipi_dsi_send_dcs_packet(LCD_YT50F62C6_CMD_FF_3DATA);
- mipi_dsi_send_dcs_packet(LCD_YT50F62C6_CMD_FD_4DATA);
- mipi_dsi_send_dcs_packet(LCD_YT50F62C6_CMD_F8_15DATA);
- mipi_dsi_send_dcs_packet(LCD_YT50F62C6_CMD_B8_1DATA);
- mipi_dsi_send_dcs_packet(LCD_YT50F62C6_CMD_F1_1DATA);
- mipi_dsi_send_dcs_packet(LCD_YT50F62C6_CMD_F2_3DATA);
- mipi_dsi_send_dcs_packet(LCD_YT50F62C6_CMD_FC_3DATA);
- mipi_dsi_send_dcs_packet(LCD_YT50F62C6_CMD_FE_1DATA);
- msleep(360);
- mipi_dsi_send_dcs_packet(LCD_YT50F62C6_CMD_EB_2DATA);
- mipi_dsi_send_dcs_packet(LCD_YT50F62C6_CMD_E0_16DATA);
- mipi_dsi_send_dcs_packet(LCD_YT50F62C6_CMD_E1_16DATA);
- mipi_dsi_send_dcs_packet(LCD_YT50F62C6_CMD_C1_4DATA);
- mipi_dsi_send_dcs_packet(LCD_YT50F62C6_CMD_C7_1DATA);
- mipi_dsi_send_dcs_packet(LCD_YT50F62C6_CMD_B1_3DATA);
- mipi_dsi_send_dcs_packet(LCD_YT50F62C6_CMD_B4_1DATA);
- mipi_dsi_send_dcs_packet(LCD_YT50F62C6_CMD_36_1DATA);
- mipi_dsi_send_dcs_packet(LCD_YT50F62C6_CMD_3A_1DATA);
- mipi_dsi_send_dcs_packet(LCD_YT50F62C6_CMD_21_0DATA);
- mipi_dsi_send_dcs_packet(LCD_YT50F62C6_CMD_B0_1DATA);
- mipi_dsi_send_dcs_packet(LCD_YT50F62C6_CMD_B6_1DATA);
- mipi_dsi_send_dcs_packet(LCD_YT50F62C6_CMD_C2_1DATA);
-
- mipi_dsi_send_dcs_packet(LCD_YT50F62C6_CMD_11_0DATA);
- msleep(120);
- mipi_dsi_send_dcs_packet(LCD_YT50F62C6_CMD_29_0DATA);
-
- msleep(20);
- mipi_dsi_send_dcs_packet(LCD_YT50F62C6_CMD_2C_0DATA);
- }
- else if(lcd_id==LCD_BT050TN)
- {
- printk("gl5001w_hw_init LCD_BT050TN\n");
- mipi_dsi_send_dcs_packet(LCD_BT050TN_CMD_FF00_0DATA);
- mipi_dsi_send_dcs_packet(LCD_BT050TN_CMD_FF00_3DATA);
- mipi_dsi_send_dcs_packet(LCD_BT050TN_CMD_FF80_0DATA);
- mipi_dsi_send_dcs_packet(LCD_BT050TN_CMD_FF80_2DATA);
- mipi_dsi_send_dcs_packet(LCD_BT050TN_CMD_FF03_0DATA);
- mipi_dsi_send_dcs_packet(LCD_BT050TN_CMD_FF03_1DATA);
- mipi_dsi_send_dcs_packet(LCD_BT050TN_CMD_2100_0DATA);
- mipi_dsi_send_dcs_packet(LCD_BT050TN_CMD_2100_1DATA);
- mipi_dsi_send_dcs_packet(LCD_BT050TN_CMD_D800_0DATA);
- mipi_dsi_send_dcs_packet(LCD_BT050TN_CMD_D800_2DATA);
- mipi_dsi_send_dcs_packet(LCD_BT050TN_CMD_C582_0DATA);
- mipi_dsi_send_dcs_packet(LCD_BT050TN_CMD_C582_1DATA);
- mipi_dsi_send_dcs_packet(LCD_BT050TN_CMD_C181_0DATA);
- mipi_dsi_send_dcs_packet(LCD_BT050TN_CMD_C181_1DATA);
- mipi_dsi_send_dcs_packet(LCD_BT050TN_CMD_C1A1_0DATA);
- mipi_dsi_send_dcs_packet(LCD_BT050TN_CMD_C1A1_1DATA);
- mipi_dsi_send_dcs_packet(LCD_BT050TN_CMD_B4C0_0DATA);
- mipi_dsi_send_dcs_packet(LCD_BT050TN_CMD_B4C0_1DATA);
- mipi_dsi_send_dcs_packet(LCD_BT050TN_CMD_C0A3_0DATA);
- mipi_dsi_send_dcs_packet(LCD_BT050TN_CMD_C0A3_1DATA);
- mipi_dsi_send_dcs_packet(LCD_BT050TN_CMD_C489_0DATA);
- mipi_dsi_send_dcs_packet(LCD_BT050TN_CMD_C489_1DATA);
- mipi_dsi_send_dcs_packet(LCD_BT050TN_CMD_C481_0DATA);
- mipi_dsi_send_dcs_packet(LCD_BT050TN_CMD_C481_1DATA);
- mipi_dsi_send_dcs_packet(LCD_BT050TN_CMD_C590_0DATA);
- mipi_dsi_send_dcs_packet(LCD_BT050TN_CMD_C590_3DATA);
- mipi_dsi_send_dcs_packet(LCD_BT050TN_CMD_C5B1_0DATA);
- mipi_dsi_send_dcs_packet(LCD_BT050TN_CMD_C5B1_1DATA);
- mipi_dsi_send_dcs_packet(LCD_BT050TN_CMD_D900_0DATA);
- mipi_dsi_send_dcs_packet(LCD_BT050TN_CMD_D900_1DATA);
- mipi_dsi_send_dcs_packet(LCD_BT050TN_CMD_E100_0DATA);
- mipi_dsi_send_dcs_packet(LCD_BT050TN_CMD_E100_16DATA);
- mipi_dsi_send_dcs_packet(LCD_BT050TN_CMD_E200_0DATA);
- mipi_dsi_send_dcs_packet(LCD_BT050TN_CMD_E200_16DATA);
- mipi_dsi_send_dcs_packet(LCD_BT050TN_CMD_0000_0DATA);
- mipi_dsi_send_dcs_packet(LCD_BT050TN_CMD_0000_1DATA);
- mipi_dsi_send_dcs_packet(LCD_BT050TN_CMD_B3A1_0DATA);
- mipi_dsi_send_dcs_packet(LCD_BT050TN_CMD_B3A1_1DATA);
- mipi_dsi_send_dcs_packet(LCD_BT050TN_CMD_B3A7_0DATA);
- mipi_dsi_send_dcs_packet(LCD_BT050TN_CMD_B3A7_1DATA);
- mipi_dsi_send_dcs_packet(LCD_BT050TN_CMD_C090_0DATA);
- mipi_dsi_send_dcs_packet(LCD_BT050TN_CMD_C090_6DATA);
- mipi_dsi_send_dcs_packet(LCD_BT050TN_CMD_C1A6_0DATA);
- mipi_dsi_send_dcs_packet(LCD_BT050TN_CMD_C1A6_3DATA);
- mipi_dsi_send_dcs_packet(LCD_BT050TN_CMD_CE80_0DATA);
- mipi_dsi_send_dcs_packet(LCD_BT050TN_CMD_CE80_6DATA);
- mipi_dsi_send_dcs_packet(LCD_BT050TN_CMD_CE90_0DATA);
- mipi_dsi_send_dcs_packet(LCD_BT050TN_CMD_CE90_6DATA);
- mipi_dsi_send_dcs_packet(LCD_BT050TN_CMD_CEA0_0DATA);
- mipi_dsi_send_dcs_packet(LCD_BT050TN_CMD_CEA0_14DATA);
- mipi_dsi_send_dcs_packet(LCD_BT050TN_CMD_CEB0_0DATA);
- mipi_dsi_send_dcs_packet(LCD_BT050TN_CMD_CEB0_14DATA);
- mipi_dsi_send_dcs_packet(LCD_BT050TN_CMD_CEC0_0DATA);
- mipi_dsi_send_dcs_packet(LCD_BT050TN_CMD_CEC0_14DATA);
- mipi_dsi_send_dcs_packet(LCD_BT050TN_CMD_CED0_0DATA);
- mipi_dsi_send_dcs_packet(LCD_BT050TN_CMD_CED0_14DATA);
- mipi_dsi_send_dcs_packet(LCD_BT050TN_CMD_CFC6_0DATA);
- mipi_dsi_send_dcs_packet(LCD_BT050TN_CMD_CFC6_2DATA);
- mipi_dsi_send_dcs_packet(LCD_BT050TN_CMD_CFC9_0DATA);
- mipi_dsi_send_dcs_packet(LCD_BT050TN_CMD_CFC9_1DATA);
- mipi_dsi_send_dcs_packet(LCD_BT050TN_CMD_CBC0_0DATA);
- mipi_dsi_send_dcs_packet(LCD_BT050TN_CMD_CBC0_15DATA);
- mipi_dsi_send_dcs_packet(LCD_BT050TN_CMD_CBD0_0DATA);
- mipi_dsi_send_dcs_packet(LCD_BT050TN_CMD_CBD0_15DATA);
- mipi_dsi_send_dcs_packet(LCD_BT050TN_CMD_CBE0_0DATA);
- mipi_dsi_send_dcs_packet(LCD_BT050TN_CMD_CBE0_10DATA);
- mipi_dsi_send_dcs_packet(LCD_BT050TN_CMD_CC80_0DATA);
- mipi_dsi_send_dcs_packet(LCD_BT050TN_CMD_CC80_10DATA);
- mipi_dsi_send_dcs_packet(LCD_BT050TN_CMD_CC90_0DATA);
- mipi_dsi_send_dcs_packet(LCD_BT050TN_CMD_CC90_15DATA);
- mipi_dsi_send_dcs_packet(LCD_BT050TN_CMD_CCA0_0DATA);
- mipi_dsi_send_dcs_packet(LCD_BT050TN_CMD_CCA0_15DATA);
- mipi_dsi_send_dcs_packet(LCD_BT050TN_CMD_CCB0_0DATA);
- mipi_dsi_send_dcs_packet(LCD_BT050TN_CMD_CCB0_10DATA);
- mipi_dsi_send_dcs_packet(LCD_BT050TN_CMD_CCC0_0DATA);
- mipi_dsi_send_dcs_packet(LCD_BT050TN_CMD_CCC0_15DATA);
- mipi_dsi_send_dcs_packet(LCD_BT050TN_CMD_CCD0_0DATA);
- mipi_dsi_send_dcs_packet(LCD_BT050TN_CMD_CCD0_15DATA);
-
- mipi_dsi_send_dcs_packet(LCD_BT050TN_CMD_21_0DATA);
- mipi_dsi_send_dcs_packet(LCD_BT050TN_CMD_36_0DATA);
- mipi_dsi_send_dcs_packet(LCD_BT050TN_CMD_00_0DATA);
- mipi_dsi_send_dcs_packet(LCD_BT050TN_CMD_11_0DATA);
- msleep(120);
- mipi_dsi_send_dcs_packet(LCD_BT050TN_CMD_29_0DATA);
- msleep(20);
- mipi_dsi_send_dcs_packet(LCD_BT050TN_CMD_2C_0DATA);
- }
- else if(lcd_id==LCD_ILI9806)
- {
- printk("gl5001w_hw_init LCD_ILI9806\n");
-
- mipi_dsi_send_dcs_packet(LCD_ILI9806_CMD_FF_3DATA);
- mipi_dsi_send_dcs_packet(LCD_ILI9806_CMD_BA_1DATA);
- mipi_dsi_send_dcs_packet(LCD_ILI9806_CMD_F3_1DATA);
- mipi_dsi_send_dcs_packet(LCD_ILI9806_CMD_F9_3DATA);
- msleep(10);
- mipi_dsi_send_dcs_packet(LCD_ILI9806_CMD_B0_1DATA);
- mipi_dsi_send_dcs_packet(LCD_ILI9806_CMD_BC_23DATA);
- mipi_dsi_send_dcs_packet(LCD_ILI9806_CMD_BD_8DATA);
- mipi_dsi_send_dcs_packet(LCD_ILI9806_CMD_BE_17DATA);
- mipi_dsi_send_dcs_packet(LCD_ILI9806_CMD_ED_2DATA);
- mipi_dsi_send_dcs_packet(LCD_ILI9806_CMD_B4_3DATA);
- mipi_dsi_send_dcs_packet(LCD_ILI9806_CMD_B5_4DATA);
- mipi_dsi_send_dcs_packet(LCD_ILI9806_CMD_C0_3DATA);
- mipi_dsi_send_dcs_packet(LCD_ILI9806_CMD_C1_4DATA);
- mipi_dsi_send_dcs_packet(LCD_ILI9806_CMD_D7_1DATA);
- mipi_dsi_send_dcs_packet(LCD_ILI9806_CMD_D8_1DATA);
- mipi_dsi_send_dcs_packet(LCD_ILI9806_CMD_FC_1DATA);
- mipi_dsi_send_dcs_packet(LCD_ILI9806_CMD_E0_16DATA);
- mipi_dsi_send_dcs_packet(LCD_ILI9806_CMD_E1_16DATA);
- mipi_dsi_send_dcs_packet(LCD_ILI9806_CMD_D5_8DATA);
- mipi_dsi_send_dcs_packet(LCD_ILI9806_CMD_F7_1DATA);
- mipi_dsi_send_dcs_packet(LCD_ILI9806_CMD_C7_1DATA);
- msleep(10);
- mipi_dsi_send_dcs_packet(LCD_ILI9806_CMD_36_1DATA);
- mipi_dsi_send_dcs_packet(LCD_ILI9806_CMD_51_1DATA);
- mipi_dsi_send_dcs_packet(LCD_ILI9806_CMD_53_1DATA);
- mipi_dsi_send_dcs_packet(LCD_ILI9806_CMD_55_1DATA);
- mipi_dsi_send_dcs_packet(LCD_ILI9806_CMD_11_0DATA);
- msleep(120);
- mipi_dsi_send_dcs_packet(LCD_ILI9806_CMD_29_0DATA);
- msleep(20);
- mipi_dsi_send_dcs_packet(LCD_ILI9806_CMD_2C_0DATA);
- }
- else if(lcd_id==LCD_OTM8019A)
- {
- printk("gl5001w_hw_init LCD_OTM8019A\n");
-
- mipi_dsi_send_dcs_packet(LCD_OTM8019A_CMD_1);
- mipi_dsi_send_dcs_packet(LCD_OTM8019A_CMD_2);
- mipi_dsi_send_dcs_packet(LCD_OTM8019A_CMD_3);
- mipi_dsi_send_dcs_packet(LCD_OTM8019A_CMD_4);
- mipi_dsi_send_dcs_packet(LCD_OTM8019A_CMD_5);
- mipi_dsi_send_dcs_packet(LCD_OTM8019A_CMD_6);
- mipi_dsi_send_dcs_packet(LCD_OTM8019A_CMD_7);
- mipi_dsi_send_dcs_packet(LCD_OTM8019A_CMD_8);
- mipi_dsi_send_dcs_packet(LCD_OTM8019A_CMD_9);
- mipi_dsi_send_dcs_packet(LCD_OTM8019A_CMD_10);
- mipi_dsi_send_dcs_packet(LCD_OTM8019A_CMD_11);
- mipi_dsi_send_dcs_packet(LCD_OTM8019A_CMD_12);
- mipi_dsi_send_dcs_packet(LCD_OTM8019A_CMD_13);
- mipi_dsi_send_dcs_packet(LCD_OTM8019A_CMD_14);
- mipi_dsi_send_dcs_packet(LCD_OTM8019A_CMD_15);
- mipi_dsi_send_dcs_packet(LCD_OTM8019A_CMD_16);
- mipi_dsi_send_dcs_packet(LCD_OTM8019A_CMD_17);
- mipi_dsi_send_dcs_packet(LCD_OTM8019A_CMD_18);
- mipi_dsi_send_dcs_packet(LCD_OTM8019A_CMD_19);
- mipi_dsi_send_dcs_packet(LCD_OTM8019A_CMD_20);
- mipi_dsi_send_dcs_packet(LCD_OTM8019A_CMD_21);
- mipi_dsi_send_dcs_packet(LCD_OTM8019A_CMD_22);
- mipi_dsi_send_dcs_packet(LCD_OTM8019A_CMD_23);
- mipi_dsi_send_dcs_packet(LCD_OTM8019A_CMD_24);
- mipi_dsi_send_dcs_packet(LCD_OTM8019A_CMD_25);
- mipi_dsi_send_dcs_packet(LCD_OTM8019A_CMD_26);
- mipi_dsi_send_dcs_packet(LCD_OTM8019A_CMD_27);
- mipi_dsi_send_dcs_packet(LCD_OTM8019A_CMD_28);
- mipi_dsi_send_dcs_packet(LCD_OTM8019A_CMD_29);
- mipi_dsi_send_dcs_packet(LCD_OTM8019A_CMD_30);
- mipi_dsi_send_dcs_packet(LCD_OTM8019A_CMD_31);
- mipi_dsi_send_dcs_packet(LCD_OTM8019A_CMD_32);
- mipi_dsi_send_dcs_packet(LCD_OTM8019A_CMD_33);
- mipi_dsi_send_dcs_packet(LCD_OTM8019A_CMD_34);
- mipi_dsi_send_dcs_packet(LCD_OTM8019A_CMD_35);
- mipi_dsi_send_dcs_packet(LCD_OTM8019A_CMD_36);
- mipi_dsi_send_dcs_packet(LCD_OTM8019A_CMD_37);
- mipi_dsi_send_dcs_packet(LCD_OTM8019A_CMD_38);
- mipi_dsi_send_dcs_packet(LCD_OTM8019A_CMD_39);
- mipi_dsi_send_dcs_packet(LCD_OTM8019A_CMD_40);
- mipi_dsi_send_dcs_packet(LCD_OTM8019A_CMD_41);
- mipi_dsi_send_dcs_packet(LCD_OTM8019A_CMD_42);
- mipi_dsi_send_dcs_packet(LCD_OTM8019A_CMD_43);
- mipi_dsi_send_dcs_packet(LCD_OTM8019A_CMD_44);
- mipi_dsi_send_dcs_packet(LCD_OTM8019A_CMD_45);
- mipi_dsi_send_dcs_packet(LCD_OTM8019A_CMD_46);
- mipi_dsi_send_dcs_packet(LCD_OTM8019A_CMD_47);
- mipi_dsi_send_dcs_packet(LCD_OTM8019A_CMD_48);
- mipi_dsi_send_dcs_packet(LCD_OTM8019A_CMD_49);
- mipi_dsi_send_dcs_packet(LCD_OTM8019A_CMD_50);
- mipi_dsi_send_dcs_packet(LCD_OTM8019A_CMD_51);
- mipi_dsi_send_dcs_packet(LCD_OTM8019A_CMD_52);
- mipi_dsi_send_dcs_packet(LCD_OTM8019A_CMD_53);
- mipi_dsi_send_dcs_packet(LCD_OTM8019A_CMD_54);
- mipi_dsi_send_dcs_packet(LCD_OTM8019A_CMD_55);
- mipi_dsi_send_dcs_packet(LCD_OTM8019A_CMD_56);
- mipi_dsi_send_dcs_packet(LCD_OTM8019A_CMD_57);
- mipi_dsi_send_dcs_packet(LCD_OTM8019A_CMD_58);
- mipi_dsi_send_dcs_packet(LCD_OTM8019A_CMD_59);
- mipi_dsi_send_dcs_packet(LCD_OTM8019A_CMD_60);
- mipi_dsi_send_dcs_packet(LCD_OTM8019A_CMD_61);
- mipi_dsi_send_dcs_packet(LCD_OTM8019A_CMD_62);
- mipi_dsi_send_dcs_packet(LCD_OTM8019A_CMD_63);
- mipi_dsi_send_dcs_packet(LCD_OTM8019A_CMD_64);
- mipi_dsi_send_dcs_packet(LCD_OTM8019A_CMD_65);
- mipi_dsi_send_dcs_packet(LCD_OTM8019A_CMD_66);
- mipi_dsi_send_dcs_packet(LCD_OTM8019A_CMD_67);
- mipi_dsi_send_dcs_packet(LCD_OTM8019A_CMD_68);
- mipi_dsi_send_dcs_packet(LCD_OTM8019A_CMD_69);
- mipi_dsi_send_dcs_packet(LCD_OTM8019A_CMD_70);
- mipi_dsi_send_dcs_packet(LCD_OTM8019A_CMD_71);
- mipi_dsi_send_dcs_packet(LCD_OTM8019A_CMD_72);
- mipi_dsi_send_dcs_packet(LCD_OTM8019A_CMD_73);
- mipi_dsi_send_dcs_packet(LCD_OTM8019A_CMD_74);
- mipi_dsi_send_dcs_packet(LCD_OTM8019A_CMD_76);
- mipi_dsi_send_dcs_packet(LCD_OTM8019A_CMD_77);
- mipi_dsi_send_dcs_packet(LCD_OTM8019A_CMD_78);
- mipi_dsi_send_dcs_packet(LCD_OTM8019A_CMD_79);
- mipi_dsi_send_dcs_packet(LCD_OTM8019A_CMD_80);
- mipi_dsi_send_dcs_packet(LCD_OTM8019A_CMD_81);
- mipi_dsi_send_dcs_packet(LCD_OTM8019A_CMD_82);
- mipi_dsi_send_dcs_packet(LCD_OTM8019A_CMD_83);
- mipi_dsi_send_dcs_packet(LCD_OTM8019A_CMD_84);
- mipi_dsi_send_dcs_packet(LCD_OTM8019A_CMD_85);
- mipi_dsi_send_dcs_packet(LCD_OTM8019A_CMD_86);
- mipi_dsi_send_dcs_packet(LCD_OTM8019A_CMD_87);
- mipi_dsi_send_dcs_packet(LCD_OTM8019A_CMD_88);
- mipi_dsi_send_dcs_packet(LCD_OTM8019A_CMD_89);
- msleep(120);
- mipi_dsi_send_dcs_packet(LCD_OTM8019A_CMD_90);
- msleep(120);
-
- }
- else
- {
- printk("gl5001w_hw_init can't find lcd-\n");
- return 0;
- }
- msleep(1);
- mipi_dsi_hs_start();
- msleep(10);
-
- return 0;
-}
-
-
-static void lcd_gl5001w_power_on(void)
-{
- int ret;
-
- printk("lcd_gl5001w_power_on\n");
- gl5001w_reset();
- tc358768_reset();
-
- ret = tc358768_rd_reg_32bits(0);
- if(ret == 0x4401) {
- printk("+TC358768AXBG works ok\n");
- } else {
- printk("+TC358768AXBG error , read:0x%0x\n", ret);
- return;
- }
-
- gl5001w_hw_init();
-}
-
-static void lcd_gl5001w_power_off(void)
-{
- printk("lcd_gl5001w_power_off\n");
-
- gpio_direction_output(Gl5001w_Reset_Port,0);
-
- lcd_init_gl500 = true;
-}
-
-static int tc358768_probe(struct i2c_client *client,
- const struct i2c_device_id *did)
-{
- struct i2c_adapter *adapter = to_i2c_adapter(client->dev.parent);
- int ret = 0;
-
- if (!i2c_check_functionality(adapter, I2C_FUNC_I2C)) {
- dev_warn(&adapter->dev,
- "I2C-Adapter doesn't support I2C_FUNC_I2C\n");
- return -EIO;
- }
-
- tc358768_client = client;
- return ret;
-}
-
-static int tc358768_remove(struct i2c_client *client)
-{
- return 0;
-}
-
-static const struct i2c_device_id tc358768_id[] = {
- { DRIVER_NAME, 0 },
- {},
-};
-MODULE_DEVICE_TABLE(i2c, tc358768_id);
-
-
-
-
-
-
-static void cw500_resume_work_func(struct work_struct *work)
-{
- save=0;
- //printk("-cw500_resume_work_func-\n");
- lcd_set_enable(1);
- lcd_gl5001w_power_on();
- return NULL;
-}
-
-
-static int get_gpio_lcd_gl5001w(void)
-{
- int ret = 0;
- ret = gpio_request(Gl5001w_Reset_Port,"Gl5001w_Reset_Port");
- if (ret){
- printk("gpio_request Gl5001w_Reset_Port for GL5001W failed\n");
- goto err_get;
- }
-
- ret = gpio_request(Tc358768_Reset_Port,"Tc358768_Reset_Port");
- if (ret){
- printk("gpio_request Tc358768_Reset_Port for Tc358768 failed\n");
- goto err_get;
- }
- //ret = gpio_request(BackLight_Power_PORT,"BackLight_Power_PORT");
- //if (ret){
- // printk("gpio_request BackLight_Power_PORT for backlight failed\n");
- // goto err_get;
- //}
- return 0;
-err_get:
- return -1;
-}
-static void put_gpio_lcd_gl5001w(void)
-{
- gpio_free(Gl5001w_Reset_Port);
- gpio_free(Tc358768_Reset_Port);
- //gpio_free(BackLight_Power_PORT);
- return;
-}
-
-
-static int cw500_gl5001_suspend(struct i2c_client *c, pm_message_t state)
-{
- save=1;
- printk("-cw500_gl5001_suspend-\n");
- put_gpio_lcd_gl5001w();
- return 0;
-}
-
-
-static int cw500_gl5001_resume(struct i2c_client *c)
-{
-
- printk("-cw500_gl5001_resume\n");
- get_gpio_lcd_gl5001w();
- schedule_work(&data->cw500_resume_work);
- return 0;
-}
-
-static struct i2c_driver tc358768_driver = {
- .driver = {
- .name = DRIVER_NAME,
- },
- .probe = tc358768_probe,
- .remove = __devexit_p(tc358768_remove),
- .id_table = tc358768_id,
- .resume= cw500_gl5001_resume,
- .suspend= cw500_gl5001_suspend,
-};
-
-static void lcd_set_power(int status)
-{
-
-
- if (!lcd_init_gl500) {
- return;
- }
-
- if (save==0) {
- return;
- }
-
- if (status == LCD_POWER_ON)
- {
- lcd_gl5001w_power_on();
- lcd_init_gl500 = false;
- }
-}
-
-static struct lcd_parm_t lcd_gl5001w_parm = {
- //.name = "GL5001W",
- //.fps = 60, /* frame per second */
- .bits_per_pixel = 24,
- .capability = 0,
- .width = 480,
- .height = 854,
- .vmode = {
- .name = "GL5001W", // mipi_480x800
- .refresh = 60,
- .xres = 480,
- .yres = 854,
- .pixclock = KHZ2PICOS(26000), //pixel_clock
- .left_margin = 20, //hbp
- .right_margin = 30, //hfp
- .upper_margin = 12, //vbp
- .lower_margin = 8, //vfp
- .hsync_len = 10, //hsync
- .vsync_len = 8, //vsync
- .sync = 0, //?
- .vmode = 0,
- .flag = 0,
- },
- //.initial = dummy_call_path,
- //.uninitial = lcd_gl5001w_power_off,
- //.set_power = lcd_set_power,
-};
-
-static struct lcd_parm_t *lcd_gl5001w_get_parm(int arg)
-{
- return &lcd_gl5001w_parm;
-}
-
-static int wmt_check_devices(void)
-{
- int ret = 0;
- int param[7];
- char buf[96] = {0};
- int len = sizeof(buf);
-
- ret = wmt_getsyspara("wmt.display.fb0", buf, &len);
- if (ret) {
- pr_err("Read wmt.display.param Failed.\n");
- return -ENODEV;
- }
-
- ret = vpp_parse_param(buf, param, 6, 0);
- if (ret < 2)
- return -ENODEV;
-
- if (param[3] != LCD_GL5001W)
- return -ENODEV;
-
- return 0;
-}
-
-static struct i2c_board_info i2c_board_info = {
- I2C_BOARD_INFO(DRIVER_NAME, I2C_ADDR),
-};
-
-#if 0
-static int tc358768_proc(char *page, char **start, off_t off,
- int count, int *eof, void *data)
-{
- lcd_gl5001w_power_on();
- return 0;
-}
-#endif
-
-static int __init gl5001w_init(void)
-{
- int ret;
- struct i2c_client *client;
- struct i2c_adapter *adap;
- unsigned char buf[40];
- int buflen = 40;
- unsigned int value;
- char *endp;
-
- if(wmt_getsyspara("wmt.support.lcd.gl5001w", buf, &buflen) == 0) {
- value = simple_strtoul(buf, &endp, 0);
- if(value == 0)
- return -1;
- } else
- return -1;
-
- ret = gpio_request(Gl5001w_Reset_Port,"Gl5001w_Reset_Port");
- if (ret){
- printk("gpio_request Gl5001w_Reset_Port for GL5001W failed\n");
- goto err_get;
- }
-
- ret = gpio_request(Tc358768_Reset_Port,"Tc358768_Reset_Port");
- if (ret){
- printk("gpio_request Tc358768_Reset_Port for Tc358768 failed\n");
- goto err_get;
- }
- //ret = gpio_request(BackLight_Power_PORT,"BackLight_Power_PORT");
- //if (ret){
- // printk("gpio_request BackLight_Power_PORT for backlight failed\n");
- // goto err_get;
- //}
-
- data = kzalloc(sizeof(struct cw500_data), GFP_KERNEL);
-
- INIT_WORK(&data->cw500_resume_work, cw500_resume_work_func);
-
- ret = wmt_check_devices();
- if (ret) {
- pr_info("LCD GL5001W not found\n");
- return -ENODEV;
- }
-
- adap = i2c_get_adapter(I2C_ADAPTER);
- if (!adap)
- return -ENODEV;
- client = i2c_new_device(adap, &i2c_board_info);
- i2c_put_adapter(adap);
- if (!client) {
- printk("i2c_new_device error\n");
- return -ENODEV;
- }
-
- ret = i2c_add_driver(&tc358768_driver);
- if (ret) {
- return -EIO;
- }
-
- ret = lcd_panel_register(LCD_GL5001W,(void *) lcd_gl5001w_get_parm);
- if (ret) {
- i2c_del_driver(&tc358768_driver);
- return -ENODEV;
- }
-
- /* for debug */
- //create_proc_read_entry(DRIVER_NAME, 0666, NULL, tc358768_proc, NULL);
- return 0;
-err_get:
- return -1;
-}
-
-static void __exit gl5001w_exit(void)
-{
- struct i2c_client *client = tc358768_client;
- gpio_free(Gl5001w_Reset_Port);
- gpio_free(Tc358768_Reset_Port);
- //gpio_free(BackLight_Power_PORT);
- i2c_unregister_device(client);
- return i2c_del_driver(&tc358768_driver);
-}
-
-module_init(gl5001w_init);
-module_exit(gl5001w_exit);
-
-MODULE_DESCRIPTION("WonderMedia GL5001W LCD Driver");
-MODULE_LICENSE("GPL");
-MODULE_ALIAS("i2c:gl5001w");
-
diff --git a/ANDROID_3.4.5/drivers/video/wmt/devices/lcd-lvds-1024x600.c b/ANDROID_3.4.5/drivers/video/wmt/devices/lcd-lvds-1024x600.c
deleted file mode 100755
index 952a2761..00000000
--- a/ANDROID_3.4.5/drivers/video/wmt/devices/lcd-lvds-1024x600.c
+++ /dev/null
@@ -1,94 +0,0 @@
-/*++
- * linux/drivers/video/wmt/lcd-lvds-1024x600.c
- * WonderMedia video post processor (VPP) driver
- *
- * Copyright c 2014 WonderMedia Technologies, Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * 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.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- * WonderMedia Technologies, Inc.
- * 4F, 533, Chung-Cheng Road, Hsin-Tien, Taipei 231, R.O.C
---*/
-
-#define LCD_LVDS_1024x600_C
-/* #define DEBUG */
-/*----------------------- DEPENDENCE -----------------------------------------*/
-#include "../lcd.h"
-
-/*----------------------- PRIVATE MACRO --------------------------------------*/
-/* #define LCD_LVDS_1024x600_XXX xxxx *//*Example*/
-
-/*----------------------- PRIVATE CONSTANTS ----------------------------------*/
-/* #define LCD_LVDS_1024x600_XXXX 1 *//*Example*/
-
-/*----------------------- PRIVATE TYPE --------------------------------------*/
-/* typedef xxxx lcd_xxx_t; *//*Example*/
-
-/*----------EXPORTED PRIVATE VARIABLES are defined in lcd.h -------------*/
-static void lcd_LVDS_1024x600_initial(void);
-
-/*----------------------- INTERNAL PRIVATE VARIABLES - -----------------------*/
-/* int lcd_xxx; *//*Example*/
-struct lcd_parm_t lcd_LVDS_1024x600_parm = {
- .bits_per_pixel = 24,
- .capability = LCD_CAP_VSYNC_HI,
- .vmode = {
- .name = "ePAD 1024x600", /* LVDS_1024x600 */
- .refresh = 60,
- .xres = 1024,
- .yres = 600,
- .pixclock = KHZ2PICOS(45000),
- .left_margin = 50,
- .right_margin = 50,
- .upper_margin = 10,
- .lower_margin = 10,
- .hsync_len = 4,
- .vsync_len = 4,
- .sync = FB_SYNC_VERT_HIGH_ACT,
- .vmode = 0,
- .flag = 0,
- },
- .width = 222,
- .height = 125,
- .initial = lcd_LVDS_1024x600_initial,
-};
-
-/*--------------------- INTERNAL PRIVATE FUNCTIONS ---------------------------*/
-/* void lcd_xxx(void); *//*Example*/
-
-/*----------------------- Function Body --------------------------------------*/
-static void lcd_LVDS_1024x600_initial(void)
-{
- DPRINT("lcd_LVDS_1024x600_initial\n");
-
- /* TODO */
-}
-
-struct lcd_parm_t *lcd_LVDS_1024x600_get_parm(int arg)
-{
- return &lcd_LVDS_1024x600_parm;
-}
-
-int lcd_LVDS_1024x600_init(void)
-{
- int ret;
-
- ret = lcd_panel_register(LCD_LVDS_1024x600,
- (void *) lcd_LVDS_1024x600_get_parm);
- return ret;
-} /* End of lcd_oem_init */
-module_init(lcd_LVDS_1024x600_init);
-
-/*--------------------End of Function Body -----------------------------------*/
-#undef LCD_1024x600_C
diff --git a/ANDROID_3.4.5/drivers/video/wmt/devices/lcd-oem.c b/ANDROID_3.4.5/drivers/video/wmt/devices/lcd-oem.c
deleted file mode 100755
index c079505e..00000000
--- a/ANDROID_3.4.5/drivers/video/wmt/devices/lcd-oem.c
+++ /dev/null
@@ -1,430 +0,0 @@
-/*++
- * linux/drivers/video/wmt/lcd-oem.c
- * WonderMedia video post processor (VPP) driver
- *
- * Copyright c 2014 WonderMedia Technologies, Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * 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.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- * WonderMedia Technologies, Inc.
- * 4F, 533, Chung-Cheng Road, Hsin-Tien, Taipei 231, R.O.C
---*/
-
-#define LCD_OEM_C
-/* #define DEBUG */
-/*----------------------- DEPENDENCE -----------------------------------------*/
-#include "../lcd.h"
-
-/*----------------------- PRIVATE MACRO --------------------------------------*/
-/* #define LCD_OEM_XXXX xxxx *//*Example*/
-
-/*----------------------- PRIVATE CONSTANTS ----------------------------------*/
-/* #define LCD_OEM_XXXX 1 *//*Example*/
-
-/*----------------------- PRIVATE TYPE --------------------------------------*/
-/* typedef xxxx lcd_xxx_t; *//*Example*/
-
-/*----------EXPORTED PRIVATE VARIABLES are defined in lcd.h -------------*/
-
-/*----------------------- INTERNAL PRIVATE VARIABLES - -----------------------*/
-/* int lcd_xxx; *//*Example*/
-
-/*--------------------- INTERNAL PRIVATE FUNCTIONS ---------------------------*/
-/* void lcd_xxx(void); *//*Example*/
-#ifdef CONFIG_UBOOT
-int lcd_bl_time;
-void lcd_uboot_set_backlight(void)
-{
- int cur;
- do {
- wmt_read_ostc(&cur);
- } while (cur < lcd_bl_time);
- REG32_VAL(GPIO_BASE_ADDR + 0xC0) |= 0x800; /* BL( bit 11 ) */
-}
-
-#endif
-
-void lcd_oem_enable_backlight(int wait_ms)
-{
-#ifdef CONFIG_UBOOT
- wmt_read_ostc(&lcd_bl_time);
- lcd_bl_time += (wait_ms * 1000);
-#else
- mdelay(wait_ms);
- REG32_VAL(GPIO_BASE_ADDR + 0xC0) |= 0x800;
-#endif
-}
-
-#ifndef CONFIG_VPP_SHENZHEN
-static void lcd_oem_initial(void)
-{
- outl(inl(GPIO_BASE_ADDR + 0x80) | 0x801, GPIO_BASE_ADDR + 0x80);
- outl(inl(GPIO_BASE_ADDR + 0xC0) | 0x801, GPIO_BASE_ADDR + 0xC0);
- lcd_enable_signal(1);
-}
-
-static void lcd_oem_uninitial(void)
-{
- outl(inl(GPIO_BASE_ADDR + 0xC0) & ~0x801, GPIO_BASE_ADDR + 0xC0);
- lcd_enable_signal(0);
-}
-#endif
-
-struct lcd_parm_t lcd_oem_parm = {
- .bits_per_pixel = 24,
- .capability = LCD_CAP_VSYNC_HI,
- .vmode = {
- .name = "WonderMedia OEM LCD (VGA 1024x768)",
- .refresh = 60,
- .xres = 1024,
- .yres = 768,
- .pixclock = KHZ2PICOS(63500),
- .left_margin = 152,
- .right_margin = 48,
- .upper_margin = 23,
- .lower_margin = 3,
- .hsync_len = 104,
- .vsync_len = 4,
- .sync = FB_SYNC_VERT_HIGH_ACT,
- .vmode = 0,
- .flag = 0,
- },
- .width = 222,
- .height = 125,
-#ifndef CONFIG_VPP_SHENZHEN
- .initial = lcd_oem_initial,
- .uninitial = lcd_oem_uninitial
-#endif
-};
-
-#ifndef CONFIG_VPP_SHENZHEN
-static void lcd_oem_1024x600_initial(void)
-{
- outl(inl(GPIO_BASE_ADDR + 0x80) | 0x801, GPIO_BASE_ADDR + 0x80);
-
- /* DVDD */
- /* T2 > 0ms */ /* AVDD/VCOM( bit 0 ) */
- outl(inl(GPIO_BASE_ADDR + 0xC0) | 0x01, GPIO_BASE_ADDR + 0xC0);
- /* T4 > 0ms */
- /* VGH */
- /* 0 < T6 <= 10ms */
- lcd_enable_signal(1); /* singal, DVO enable */
- mdelay(200); /* T12 > 200ms */
- outl(inl(GPIO_BASE_ADDR + 0xC0) | 0x800, GPIO_BASE_ADDR + 0xC0);
-}
-
-static void lcd_oem_1024x600_uninitial(void)
-{
- /* BL( bit 11 ) */
- outl(inl(GPIO_BASE_ADDR + 0xC0) & ~0x800, GPIO_BASE_ADDR + 0xC0);
- mdelay(200); /* T12 > 200ms */
- lcd_enable_signal(0); /* singal, DVO enable */
- /* AVDD/VCOM( bit 0 ) */
- outl(inl(GPIO_BASE_ADDR + 0xC0) & ~0x01, GPIO_BASE_ADDR + 0xC0);
-}
-#endif
-
-struct lcd_parm_t lcd_oem_parm_1024x600 = {
- .bits_per_pixel = 24,
- .capability = LCD_CAP_VSYNC_HI,
- .vmode = {
-#if 1 /* 7" HHX070ML208CP21A */
- .name = "HHX070ML208CP21A",
- .refresh = 60,
- .xres = 1024,
- .yres = 600,
- .pixclock = KHZ2PICOS(51200),
- .left_margin = 140,
- .right_margin = 160,
- .upper_margin = 20,
- .lower_margin = 12,
- .hsync_len = 20,
- .vsync_len = 3,
- .sync = FB_SYNC_VERT_HIGH_ACT,
- .vmode = 0,
- .flag = 0,
-#else
- .name = "ePAD 1024x600", /* HannStar HSD070PFW3 */
- .refresh = 60,
- .xres = 1024,
- .yres = 600,
- .pixclock = KHZ2PICOS(45000),
- .left_margin = 50,
- .right_margin = 50,
- .upper_margin = 10,
- .lower_margin = 10,
- .hsync_len = 4,
- .vsync_len = 4,
- .sync = FB_SYNC_VERT_HIGH_ACT,
- .vmode = 0,
- .flag = 0,
-#endif
- },
-#ifndef CONFIG_VPP_SHENZHEN
- .initial = lcd_oem_1024x600_initial,
- .uninitial = lcd_oem_1024x600_uninitial,
-#endif
-};
-
-struct lcd_parm_t lcd_oem_parm_1024x768 = {
- .bits_per_pixel = 24,
- .capability = LCD_CAP_VSYNC_HI,
- .vmode = {
- .name = "OEM 1024x768", /* VGA 1024x768 */
- .refresh = 60,
- .xres = 1024,
- .yres = 768,
- .pixclock = KHZ2PICOS(63500),
- .left_margin = 152,
- .right_margin = 48,
- .upper_margin = 23,
- .lower_margin = 3,
- .hsync_len = 104,
- .vsync_len = 4,
- .sync = FB_SYNC_VERT_HIGH_ACT,
- .vmode = 0,
- .flag = 0,
- },
- .width = 222,
- .height = 125,
-#ifndef CONFIG_VPP_SHENZHEN
- .initial = lcd_oem_initial,
- .uninitial = lcd_oem_uninitial
-#endif
-};
-
-struct lcd_parm_t lcd_oem_parm_1366x768 = {
- .bits_per_pixel = 18,
- .capability = LCD_CAP_CLK_HI,
- .vmode = {
- .name = "OEM 1366X768",
- .refresh = 60,
- .xres = 1366,
- .yres = 768,
- .pixclock = KHZ2PICOS(75440),
- .left_margin = 98,
- .right_margin = 31,
- .upper_margin = 22,
- .lower_margin = 4,
- .hsync_len = 65,
- .vsync_len = 12,
- .sync = 0,
- .vmode = 0,
- .flag = 0,
- },
- .width = 293,
- .height = 164,
-#ifndef CONFIG_VPP_SHENZHEN
- .initial = lcd_oem_initial,
- .uninitial = lcd_oem_uninitial
-#endif
-};
-
-struct lcd_parm_t lcd_oem_parm_480x800 = {
- .bits_per_pixel = 18,
- .capability = LCD_CAP_CLK_HI,
- .vmode = {
- .name = "OEM 480x800",
- .refresh = 60,
- .xres = 480,
- .yres = 800,
- .pixclock = KHZ2PICOS(27000),
- .left_margin = 78,
- .right_margin = 78,
- .upper_margin = 60,
- .lower_margin = 60,
- .hsync_len = 4,
- .vsync_len = 4,
- .sync = 0,
- .vmode = 0,
- .flag = 0,
- },
-#ifndef CONFIG_VPP_SHENZHEN
- .initial = lcd_oem_initial,
- .uninitial = lcd_oem_uninitial
-#endif
-};
-
-struct lcd_parm_t lcd_oem_parm_800x480 = {
- .bits_per_pixel = 18,
- .capability = LCD_CAP_CLK_HI,
- .vmode = {
- .name = "OEM 800x480",
- .refresh = 48,
- .xres = 800,
- .yres = 480,
- .pixclock = KHZ2PICOS(27000),
- .left_margin = 50,
- .right_margin = 50,
- .upper_margin = 17,
- .lower_margin = 16,
- .hsync_len = 10,
- .vsync_len = 5,
- .sync = 0,
- .vmode = 0,
- .flag = 0,
- },
- .width = 154,
- .height = 85,
-#ifndef CONFIG_VPP_SHENZHEN
- .initial = lcd_oem_initial,
- .uninitial = lcd_oem_uninitial
-#endif
-};
-
-#ifndef CONFIG_VPP_SHENZHEN
-static void lcd_oem_1280x800_initial(void)
-{
- DBG_MSG("lcd 10 power sequence\n");
- outl(inl(GPIO_BASE_ADDR + 0x80) | 0x801, GPIO_BASE_ADDR + 0x80);
-
- /* VDD on */
- /* 0 < T < 50ms */
- lcd_enable_signal(1); /* singal on */
- /* VGH,VGL low */ /* AVDD/VCOM( bit 0 ) */
- outl(inl(GPIO_BASE_ADDR + 0xC0) | 0x01, GPIO_BASE_ADDR + 0xC0);
- mdelay(150); /* T5 > 120ms */
- outl(inl(GPIO_BASE_ADDR + 0xC0) | 0x800, GPIO_BASE_ADDR + 0xC0);
-}
-
-static void lcd_oem_1280x800_uninitial(void)
-{
- /* turn off backlight */
- outl(inl(GPIO_BASE_ADDR + 0xC0) & ~0x800, GPIO_BASE_ADDR + 0xC0);
- mdelay(150);
- /* turn off LCD */
- outl(inl(GPIO_BASE_ADDR + 0xC0) & ~0x01, GPIO_BASE_ADDR + 0xC0);
- lcd_enable_signal(0); /* turn off singal */
-}
-#endif
-
-struct lcd_parm_t lcd_oem_parm_800x1280 = {
- .bits_per_pixel = 24,
- .capability = LCD_CAP_CLK_HI,
- .vmode = {
- .name = "WY101ML369IN30A",
- .refresh = 60,
- .xres = 800,
- .yres = 1280,
- .pixclock = KHZ2PICOS(71100),
- .left_margin = 70,
- .right_margin = 80,
- .upper_margin = 10,
- .lower_margin = 10,
- .hsync_len = 10,
- .vsync_len = 3,
- .sync = 0,
- .vmode = 0,
- .flag = 0,
- },
- .width = 135,
- .height = 217,
-#ifndef CONFIG_VPP_SHENZHEN
- .initial = lcd_oem_1280x800_initial,
- .uninitial = lcd_oem_1280x800_uninitial,
-#endif
-};
-
-struct lcd_parm_t lcd_oem_parm_1280x800 = {
- .bits_per_pixel = 24,
- .capability = LCD_CAP_CLK_HI,
- .vmode = {
- .name = "WY101ML369IN30A",
- .refresh = 60,
- .xres = 1280,
- .yres = 800,
- .pixclock = KHZ2PICOS(71100),
- .left_margin = 70,
- .right_margin = 80,
- .upper_margin = 10,
- .lower_margin = 10,
- .hsync_len = 10,
- .vsync_len = 3,
- .sync = 0,
- .vmode = 0,
- .flag = 0,
- },
- .width = 217,
- .height = 135,
-#ifndef CONFIG_VPP_SHENZHEN
- .initial = lcd_oem_1280x800_initial,
- .uninitial = lcd_oem_1280x800_uninitial,
-#endif
-};
-
-struct lcd_parm_t lcd_oem_parm_768x1024 = {
- .bits_per_pixel = 24,
- .capability = LCD_CAP_CLK_HI,
- .vmode = {
- .name = "oem_768x1024",
- .refresh = 60,
- .xres = 768,
- .yres = 1024,
- .pixclock = KHZ2PICOS(59300),
- .left_margin = 80,
- .right_margin = 80,
- .upper_margin = 23,
- .lower_margin = 18,
- .hsync_len = 7,
- .vsync_len = 5,
- .sync = 0,
- .vmode = 0,
- .flag = 0,
- },
-};
-
-/*----------------------- Function Body --------------------------------------*/
-struct lcd_parm_t *lcd_oem_get_parm(int arg)
-{
- return &lcd_oem_parm;
-}
-
-int lcd_oem_init(void)
-{
- int ret;
-
- ret = lcd_panel_register(LCD_WMT_OEM, (void *)lcd_oem_get_parm);
- return ret;
-} /* End of lcd_oem_init */
-module_init(lcd_oem_init);
-
-struct lcd_parm_t *lcd_get_oem_parm(int resx, int resy)
-{
- struct lcd_parm_t *oem_parm[] = {
- &lcd_oem_parm_480x800,
- &lcd_oem_parm_1024x600,
- &lcd_oem_parm_1024x768,
- &lcd_oem_parm_1366x768,
- &lcd_oem_parm_800x480,
- &lcd_oem_parm_800x1280,
- &lcd_oem_parm_1280x800,
- &lcd_oem_parm_768x1024,
- 0
- };
- struct lcd_parm_t *p;
- int i;
-
- for (i = 0; ; i++) {
- p = oem_parm[i];
- if (p == 0) {
- p = oem_parm[0];
- break;
- }
- if ((resx == p->vmode.xres) && (resy == p->vmode.yres))
- break;
- }
- return p;
-}
-/*--------------------End of Function Body -----------------------------------*/
-#undef LCD_OEM_C
diff --git a/ANDROID_3.4.5/drivers/video/wmt/devices/lcd-setup.c b/ANDROID_3.4.5/drivers/video/wmt/devices/lcd-setup.c
deleted file mode 100755
index 798f020e..00000000
--- a/ANDROID_3.4.5/drivers/video/wmt/devices/lcd-setup.c
+++ /dev/null
@@ -1,311 +0,0 @@
-/*
- * ==========================================================================
- *
- * Filename: lcd-setup.c
- *
- * Description:
- *
- * Version: 0.01
- * Created: 2014.6.6
- *
- * Author: SamMei
- * Company:
- *
- * ==========================================================================
- */
-
-#include <linux/delay.h>
-#include <linux/spi/spi.h>
-#include <linux/i2c.h>
-#include <mach/hardware.h>
-#include <mach/wmt-spi.h>
-#include <linux/gpio.h>
-#include <mach/wmt_iomux.h>
-#include "../lcd.h"
-
-#define DRIVERNAME "lcd-setup"
-
-#undef pr_err
-#undef pr_info
-#undef pr_warning
-#define pr_err(fmt, args...) printk("[" DRIVERNAME "] " fmt, ##args)
-#define pr_info(fmt, args...) printk("[" DRIVERNAME "] " fmt, ##args)
-#define pr_warning(fmt, args...) printk("[" DRIVERNAME "] " fmt, ##args)
-
-enum {
- LCD_SETUP_TS8224B, /* spi init */
- LCD_SETUP_CHUNGHWA, /* i2c init */
- LCD_SETUP_MAX,
-};
-
-static int lcd_setup_id = -1;
-struct spi_device *g_spi_device;
-
-static int wmt_lcd_setup_id(void)
-{
- char buf[32];
- int len = sizeof(buf);
- int id;
-
- if (wmt_getsyspara("wmt.lcd.setup", buf, &len))
- id = -ENODEV;
- sscanf(buf, "%d", &id);
- return id;
-}
-
-static inline void spi_ctrl_9bit_tx(u8 val, int cmd_data)
-{
- uint8_t buf[2];
-
- if (cmd_data)
- buf[0] = (val >> 1) | BIT7;
- else
- buf[0] = (val >> 1) & 0x7f;
-
- buf[1] = (val << 7);
-
- spi_write(g_spi_device, buf, sizeof(buf));
-}
-
-static inline void spi_9bit_tx(u8 val, int cmd_data)
-{
- spi_ctrl_9bit_tx(val, cmd_data);
-}
-
-static inline int ts8224b_cmd(u8 cmd)
-{
- spi_9bit_tx(cmd, 0);
- return 0;
-}
-
-static inline int ts8224b_data(u8 data)
-{
- spi_9bit_tx(data, 1);
- return 0;
-}
-
-static int ts8224b_init(void)
-{
- static uint16_t settings[] = {
- #include "ts8224b.h"
- };
- int i;
-
- printk(" ## %s, %d\n", __func__, __LINE__);
-
- for (i = 0; i < ARRAY_SIZE(settings); i += 2) {
- ts8224b_cmd(settings[i] >> 8);
- ts8224b_data(settings[i+1]);
- }
-
- ts8224b_cmd(0x11);
- msleep(120);
-
- ts8224b_cmd(0x29);
- msleep(50);
- ts8224b_cmd(0x2c);
- return 0;
-}
-
-extern void lcd_power_on(bool on);
-
-//int lcd_spi_resume(struct spi_device *spi)
-int lcd_spi_resume(void)
-{
- //printk(" ## %s, %d\n", __func__, __LINE__);
- switch (lcd_setup_id) {
- case LCD_SETUP_TS8224B:
- printk(" ## %s, %d\n", __func__, __LINE__);
- lcd_power_on(1);
- mdelay(5);
- return ts8224b_init();
- default:
- return 0;
- }
-}
-
-static int __devinit lcd_spi_probe(struct spi_device *spi)
-{
- g_spi_device = spi;
-
- //lcd_spi_resume();
-
- return 0;
-}
-
-static struct spi_driver lcd_spi_driver = {
- .driver = {
- .name = DRIVERNAME,
- .owner = THIS_MODULE,
- },
- .probe = lcd_spi_probe,
- //.resume = lcd_spi_resume,
-};
-
-static struct spi_board_info lcd_spi_info[] __initdata = {
- {
- .modalias = DRIVERNAME,
- .bus_num = 0,
- .chip_select = 0,
- .max_speed_hz = 12000000,
- .irq = -1,
- .mode = SPI_CLK_MODE1,
- },
-};
-
-
-// I2C
-
-static int lcd_i2c_resume(struct i2c_client *client)
-{
- static uint8_t init_data[] = {
- 0x4b, 0x01,
- 0x0c, 0x01,
- 0x05, 0x03,
- 0x41, 0x03,
- 0x10, 0x06,
- 0x11, 0xE0,
- 0x12, 0x00,
- 0x13, 0x3C,
- 0x14, 0x06,
- 0x15, 0x40,
- 0x16, 0x03,
- 0x17, 0x9E,
- 0x18, 0x00,
- 0x19, 0x10,
- 0x1a, 0x03,
- 0x1b, 0x84,
- 0x1c, 0x80,
- 0x1d, 0x0A,
- 0x1e, 0x80,
- 0x1f, 0x06,
- 0x3c, 0x17,
- 0x3e, 0x16,
- 0x36, 0x00,
- 0x31, 0x00,
- 0x35, 0x41,
- 0x30, 0xB0,
- 0x30, 0xB1,
- 0x00, 0x0B,
- };
-
- int i, ret;
-
- printk(" ## %s, %d\n", __FUNCTION__, __LINE__);
- for (i = 0; i < ARRAY_SIZE(init_data); i += 2) {
- ret = i2c_master_send(client, &init_data[i], 2);
- if (ret < 0)
- return ret;
- }
- return 0;
-}
-
-static int __devinit lcd_i2c_probe(struct i2c_client *client,
- const struct i2c_device_id *id)
-{
- printk(" ## %s, %d\n", __FUNCTION__, __LINE__);
- return 0;
-}
-
-static const struct i2c_device_id lcd_i2c_id[] = {
- { "lcd-i2c", 0 },
- { },
-};
-
-static struct i2c_driver lcd_i2c_driver = {
- .driver = {
- .name = "lcd-i2c",
- .owner = THIS_MODULE,
- },
- .probe = lcd_i2c_probe,
-// .remove = __devexit_p(lcd_i2c_remove),
-// .suspend = lcd_i2c_suspend,
- .resume = lcd_i2c_resume,
-// .shutdown = lcd_i2c_shutdown,
- .id_table = lcd_i2c_id,
-};
-
-static struct i2c_board_info lcd_i2c_board_info = {
- .type = "lcd-i2c",
- .flags = 0x00,
- .addr = 0xe0 >> 1,
- .platform_data = NULL,
- .archdata = NULL,
- .irq = -1,
-};
-
-static struct i2c_client *i2c_client;
-static struct i2c_adapter *i2c_adap;
-
-static int __init lcd_setup_init(void)
-{
- int ret;
-
- lcd_setup_id = wmt_lcd_setup_id();
- switch (lcd_setup_id) {
-
- // SPI
- case LCD_SETUP_TS8224B:
- ret = spi_register_board_info(lcd_spi_info, ARRAY_SIZE(lcd_spi_info));
- if (ret) {
- pr_err("spi_register_board_info failed\n");
- return ret;
- }
-
- ret = spi_register_driver(&lcd_spi_driver);
- if (ret) {
- pr_err("spi_register_driver failed\n");
- return ret;
- }
-
- pr_info("spi %s register success\n", DRIVERNAME);
- return 0;
-
- // I2C
- case LCD_SETUP_CHUNGHWA:
- printk(" ## %s, %d\n", __FUNCTION__, __LINE__);
- i2c_adap = i2c_get_adapter(1);
- if (!i2c_adap) {
- pr_err("Cannot get i2c adapter 1\n");
- return -ENODEV;
- }
-
- i2c_client = i2c_new_device(i2c_adap, &lcd_i2c_board_info);
- if (!i2c_client) {
- pr_err("Unable to add I2C device for 0x%x\n",
- lcd_i2c_board_info.addr);
- return -ENODEV;
- }
-
- return i2c_add_driver(&lcd_i2c_driver);
-
- // INVALID
- default:
- return -EINVAL;
- }
-}
-
-static void lcd_setup_exit(void)
-{
- switch (lcd_setup_id) {
-
- // SPI
- case LCD_SETUP_TS8224B:
- spi_unregister_driver(&lcd_spi_driver);
- break;
-
- // I2C
- case LCD_SETUP_CHUNGHWA:
- i2c_put_adapter(i2c_adap);
- i2c_del_driver(&lcd_i2c_driver);
- i2c_unregister_device(i2c_client);
- break;
-
- // INVALID
- default:
- return;
- }
-}
-
-module_init(lcd_setup_init);
-module_exit(lcd_setup_exit);
diff --git a/ANDROID_3.4.5/drivers/video/wmt/devices/lcd-spi.c b/ANDROID_3.4.5/drivers/video/wmt/devices/lcd-spi.c
deleted file mode 100755
index 2782806a..00000000
--- a/ANDROID_3.4.5/drivers/video/wmt/devices/lcd-spi.c
+++ /dev/null
@@ -1,786 +0,0 @@
-#include <linux/wait.h>
-#include <linux/delay.h>
-#include <linux/gpio.h>
-#include <linux/kernel.h>
-#include <linux/module.h>
-#include <linux/fs.h>
-#include <linux/slab.h>
-#include <linux/init.h>
-#include <linux/list.h>
-#include <linux/irq.h>
-#include <linux/jiffies.h>
-#include <linux/uaccess.h>
-#include <linux/delay.h>
-#include <linux/interrupt.h>
-#include <linux/io.h>
-#include <linux/platform_device.h>
-#include <linux/gpio.h>
-#include <linux/miscdevice.h>
-#include <linux/spinlock.h>
-
-#include <mach/hardware.h>
-
-#include <linux/spi/spi.h>
-#include <mach/wmt_iomux.h>
-
-#define wmt_spi_lcd_err(fmt, args...) printk("[%s-%d] %s: " fmt, __FILE__,__LINE__,__FUNCTION__, ## args)
-#define wmt_spi_lcd_printk(fmt, ...) wmt_spi_lcd_err(fmt, ##__VA_ARGS__)
-
-#define WMT_SPI_READ_BUF_MAX_LEN 200
-#define WMT_SPI_LCD_SPI_MODE SPI_MODE_0
-
-#define WMT_SPI_LCD_A0_PIN WMT_PIN_GP1_GPIO10
-
-#define WMT_LCD_POWER_PIN WMT_PIN_GP0_GPIO0
-#define WMT_WIFI_POWER_PIN WMT_PIN_GP1_GPIO14
-#define WMT_AIT_POWER_PIN WMT_PIN_GP1_GPIO12
-#define WMT_PRINT_POWER_PIN WMT_PIN_GP62_WAKEUP4
-#define WMT_OTG_PRINT_SWITCH_PIN WMT_PIN_GP21_HDMIDCSDA
-
-#if 0
-typedef enum{
- WMT_SPI_LCD_STATE_NULL,
- WMT_SPI_LCD_STATE_HAPPY,
- WMT_SPI_LCD_STATE_SUN,
- WMT_SPI_LCD_STATE_CLOUDY,
- WMT_SPI_LCD_STATE_SAD,
- WMT_SPI_LCD_STATE_PRINT,
- WMT_SPI_LCD_STATE_MESSAGE,
- WMT_SPI_LCD_STATE_MAX
-}wmt_sub_lcd_state;
-#endif
-#define WMT_SPI_LCD_IOCTL_MAGIC 0x11
-#define WMT_SPI_LCD_STATE_HAPPY _IOW(WMT_SPI_LCD_IOCTL_MAGIC, 0, int)
-#define WMT_SPI_LCD_STATE_SUN _IOW(WMT_SPI_LCD_IOCTL_MAGIC, 1, int)
-#define WMT_SPI_LCD_STATE_CLOUDY _IOW(WMT_SPI_LCD_IOCTL_MAGIC, 2, int)
-#define WMT_SPI_LCD_STATE_SAD _IOW(WMT_SPI_LCD_IOCTL_MAGIC, 3, int)
-#define WMT_SPI_LCD_STATE_PRINT _IOW(WMT_SPI_LCD_IOCTL_MAGIC, 4, int)
-#define WMT_SPI_LCD_STATE_MESSAGE _IOW(WMT_SPI_LCD_IOCTL_MAGIC, 5, int)
-
-#define WMT_WIFI_POWER _IOW(WMT_SPI_LCD_IOCTL_MAGIC, 20, int)
-#define WMT_AIT_POWER _IOW(WMT_SPI_LCD_IOCTL_MAGIC, 21, int)
-#define WMT_PRINT_POWER _IOW(WMT_SPI_LCD_IOCTL_MAGIC, 22, int)
-#define WMT_SWITCH_OTG_PRINT _IOW(WMT_SPI_LCD_IOCTL_MAGIC, 23, int)
-
-#define WMT_GET_LCD_POWER _IOW(WMT_SPI_LCD_IOCTL_MAGIC, 30, int)
-#define WMT_GET_WIFI_POWER _IOW(WMT_SPI_LCD_IOCTL_MAGIC, 31, int)
-#define WMT_GET_AIT_POWER _IOW(WMT_SPI_LCD_IOCTL_MAGIC, 32, int)
-#define WMT_GET_PRINT_POWER _IOW(WMT_SPI_LCD_IOCTL_MAGIC, 33, int)
-#define WMT_GET_OTG_PRINT_STATE _IOW(WMT_SPI_LCD_IOCTL_MAGIC, 34, int)
-
-static int wmt_sub_lcd_display_state=WMT_SPI_LCD_STATE_HAPPY;
-
-struct wmt_spi_lcd_dev {
- wait_queue_head_t read_wq;
- struct mutex read_mutex;
- struct spi_device *spi;
- struct miscdevice sub_lcd_misc_device;
- struct kobject *kobj;
- bool irq_enabled;
- spinlock_t irq_enabled_lock;
- int lcd_val;
- int wifi_val;
- int ait_val;
- int print_val;
- int otg_print_state;
-};
-
-struct wmt_spi_lcd_dev *wmt_spi_lcd_pContext;
-
-const char wmt_spi_lcd_display_happy[][64]={
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xC0,0xE0,
- 0xF0,0xF0,0xF8,0xF8,0xF8,0x7C,0x7C,0x7C,0x3E,0x3E,0x3E,0x3E,0x1E,0x1F,0x1F,0x1F,
- 0x1F,0x1F,0x1F,0x1E,0x3E,0x3E,0x3E,0x3E,0x7E,0x7C,0x7C,0xFC,0xF8,0xF8,0xF0,0xF0,
- 0xE0,0xC0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0xF0,0xF8,0xFC,0xFE,0x7F,0x3F,0x1F,0x0F,0x07,
- 0x03,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x03,
- 0x07,0x0F,0x0F,0x1F,0x3F,0xFE,0xFC,0xF8,0xF0,0xE0,0xC0,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x80,0xF0,0xFC,0xFF,0xFF,0xFF,0x1F,0x07,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
- 0xC0,0xF0,0xF0,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF0,0xE0,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0xC0,0xF0,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF0,0xE0,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x07,0x1F,0x7F,0xFF,0xFF,0xFC,0xF0,0x80,0x00,
- 0xF0,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x07,0x1F,0x1F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x1F,0x0F,0x01,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x0F,0x1F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x1F,0x0F,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xFF,0xFF,0xFF,0xFF,0xF8,
- 0x0F,0xFF,0xFF,0xFF,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0xFF,0xFF,0x3F,
- 0x00,0x01,0x0F,0x3F,0xFF,0xFF,0xFE,0xF8,0xE0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x07,0x0F,0x3F,0x7F,0x7F,0xFC,0xF8,0xF0,0xF0,0xE0,0xE0,0xE0,0xE0,
- 0xE0,0xE0,0xE0,0xF0,0xF0,0xF8,0xFC,0x7F,0x7F,0x3F,0x0F,0x07,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xF0,0xFE,0xFF,0xFF,0x7F,0x1F,0x03,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x03,0x07,0x0F,0x3F,0x7F,0xFF,0xFC,0xF8,0xF0,0xE0,0xC0,
- 0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x03,0x03,0x03,0x03,0x03,
- 0x03,0x03,0x03,0x03,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,
- 0xC0,0xE0,0xF0,0xF8,0xFC,0xFE,0x7F,0x3F,0x1F,0x07,0x03,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x03,0x07,0x07,
- 0x0F,0x1F,0x1F,0x3F,0x3E,0x3E,0x7E,0x7C,0x7C,0x7C,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,
- 0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0x7C,0x7C,0x7C,0x7C,0x3E,0x3E,0x3F,0x1F,0x1F,0x0F,
- 0x0F,0x07,0x03,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
-};
-
-char wmt_spi_lcd_display_sad[][64]={
- /* ͼÏñ C:\Users\admin\Desktop\androd camera\yuhao\sad.bmp 64x64 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xE0,0xE0,
- 0xF0,0xF0,0xF8,0xF8,0x7C,0x7C,0x7E,0x3E,0x3E,0x3E,0x1E,0x1F,0x1F,0x1F,0x1F,0x1F,
- 0x1F,0x1F,0x1F,0x1F,0x1F,0x1E,0x3E,0x3E,0x3E,0x7E,0x7C,0x7C,0xF8,0xF8,0xF0,0xF0,
- 0xE0,0xE0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0xC0,0xE0,0xF0,0xFC,0xFE,0xFF,0x3F,0x1F,0x0F,0x07,0x07,
- 0x03,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,
- 0x07,0x07,0x0F,0x1F,0x3F,0xFF,0xFE,0xFC,0xF0,0xE0,0xC0,0x00,0x00,0x00,0x00,0x00,
- 0x00,0xC0,0xF0,0xFC,0xFF,0xFF,0x7F,0x0F,0x07,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
- 0xE0,0xF0,0xF8,0xF8,0xFC,0xFC,0xFC,0xF8,0xF8,0xF0,0xE0,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0xE0,0xF0,0xF8,0xF8,0xFC,0xFC,0xFC,0xF8,0xF8,0xF0,0xE0,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x07,0x0F,0x7F,0xFF,0xFF,0xFC,0xF0,0xC0,0x00,
- 0xF8,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x07,0x1F,0x1F,0x3F,0x3F,0x3F,0x3F,0x3F,0x1F,0x1F,0x07,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x07,0x1F,0x1F,0x3F,0x3F,0x3F,0x3F,0x3F,0x1F,0x1F,0x07,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xFF,0xFF,0xFF,0xFF,0xF8,
- 0x1F,0xFF,0xFF,0xFF,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xC0,0xC0,0xE0,0xE0,0xE0,0xE0,
- 0xE0,0xE0,0xC0,0xC0,0xC0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0xFF,0xFF,0x1F,
- 0x00,0x03,0x0F,0x3F,0xFF,0xFF,0xFE,0xF0,0xE0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x40,0xF0,0xFC,0xFE,0xFF,0x7F,0x1F,0x0F,0x07,0x07,0x03,0x03,0x03,0x03,
- 0x03,0x03,0x07,0x07,0x0F,0x1F,0x3F,0xFF,0xFE,0xFC,0xF8,0x60,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0xF0,0xFE,0xFF,0xFF,0x3F,0x0F,0x03,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x03,0x07,0x0F,0x3F,0x7F,0xFE,0xFC,0xF8,0xF0,0xE0,0xC0,
- 0xC0,0x80,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x80,0xC0,
- 0xC0,0xE0,0xF0,0xF8,0xFC,0xFE,0x7F,0x3F,0x1F,0x07,0x03,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x03,0x07,0x07,
- 0x0F,0x1F,0x1F,0x1F,0x3E,0x3E,0x7E,0x7C,0x7C,0x7C,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,
- 0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0x7C,0x7C,0x7C,0x7E,0x3E,0x3E,0x1F,0x1F,0x1F,0x0F,
- 0x07,0x07,0x03,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-};
-
-char wmt_spi_lcd_display_print[][64]={
- /* ͼÏñ C:\Users\admin\Desktop\androd camera\yuhao\print.bmp 64x64 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0x1F,
- 0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
- 0x1F,0x1F,0x1F,0x1F,0x1F,0xFF,0xFF,0xFF,0x1E,0x3C,0x78,0xF0,0xF0,0xE0,0xC0,0x80,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xE0,0xE0,0xE0,0xE0,0xE1,0xE3,0xE7,0xEF,
- 0xFF,0xFE,0xFC,0xF8,0xF0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0xF0,0xFC,0xFE,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFE,0xFC,0xF8,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x03,0x03,0x03,0x03,0x03,0x83,0x83,0x83,0x83,0x83,
- 0x83,0x83,0x83,0x83,0x83,0x83,0x83,0x83,0x83,0x83,0x83,0x83,0x83,0x83,0x83,0x83,
- 0x83,0x83,0x83,0x83,0x83,0x83,0x83,0x83,0x83,0x83,0x83,0x83,0x83,0x83,0x83,0x83,
- 0x83,0x83,0x83,0x83,0x83,0x03,0x03,0x03,0x03,0x03,0x03,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0x0F,
- 0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,
- 0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,
- 0x0F,0xFF,0xFF,0xFF,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0x01,0x07,0x0F,0x1F,0x1F,0x3F,0x3F,0x3F,0x3F,0x3F,0xBF,0xFF,0xFF,0xFF,0xFF,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0xFF,0xFF,0xFF,0xFF,0xBF,0x3F,0x3F,0x3F,0x3F,0x3F,0x1F,0x1F,0x0F,0x07,0x03,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xF0,
- 0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,
- 0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,
- 0xF0,0xFF,0xFF,0xFF,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-};
-
-char wmt_spi_lcd_display_message[][64]={
- /* ͼÏñ C:\Users\admin\Desktop\androd camera\yuhao\message.bmp 64x64 */
- 0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
- 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
- 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
- 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,
- 0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xBF,0xBF,0x3F,
- 0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
- 0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
- 0x3F,0xBF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFC,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x07,0x0F,0x1F,0x1F,0x3F,0x7F,0xFF,0xFF,
- 0xFE,0xFC,0xFC,0xF8,0xF0,0xF0,0xE0,0xC0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xC0,0xE0,0xF0,0xF8,0xF8,0xFC,0xFE,0xFF,
- 0xFF,0x7F,0x3F,0x3F,0x1F,0x0F,0x07,0x07,0x03,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x01,0x03,0x03,0x07,0x0F,0x1F,0x1F,0x3F,0x7F,0x7F,0xFF,0xFE,0xFC,0xFC,0xF8,0xF0,
- 0xF8,0xF8,0xFC,0xFE,0xFF,0xFF,0x7F,0x3F,0x3F,0x1F,0x0F,0x07,0x07,0x03,0x01,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x03,0x07,0x07,
- 0x07,0x07,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0x3F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,
- 0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,
- 0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,
- 0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x3F,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-};
-
-
-const char wmt_spi_lcd_display_sun[][64]={
- /* ͼÏñ C:\Users\admin\Desktop\androd camera\yuhao\sun.bmp 64x64 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,
- 0xF0,0xF0,0xF0,0xE0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFE,0xFF,
- 0xFF,0xFE,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0xF0,0xF0,0xF0,
- 0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
- 0x03,0x0F,0x3F,0x7F,0x7F,0x7E,0x78,0x00,0x00,0x00,0x00,0x80,0x80,0x87,0x8F,0x8F,
- 0x8F,0x8F,0x87,0x80,0x80,0x00,0x00,0x00,0x30,0x7C,0x7F,0x7F,0x7F,0x3F,0x0F,0x03,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x07,0x0F,0x0F,0x1F,0x1F,0x3F,0x7E,0x7E,0x7C,0x7C,0x78,0x00,
- 0x00,0xC0,0xE0,0xF0,0xF8,0xFC,0xFE,0x7E,0x3F,0x3F,0x1F,0x1F,0x0F,0x0F,0x0F,0x0F,
- 0x0F,0x0F,0x0F,0x0F,0x1F,0x1F,0x3F,0x7F,0x7E,0xFC,0xFC,0xF8,0xF0,0xE0,0x80,0x00,
- 0x30,0x78,0x7C,0x7C,0x7E,0x3F,0x3F,0x1F,0x1F,0x0F,0x0F,0x07,0x00,0x00,0x00,0x00,
- 0x80,0xC0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xC0,0x00,0x00,0x00,0xF8,
- 0xFF,0xFF,0xFF,0xFF,0x0F,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x1F,0xFF,0xFF,0xFF,0xFE,
- 0xF8,0x00,0x00,0x80,0xC0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xC0,0x80,
- 0x01,0x03,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x03,0x03,0x00,0x00,0x00,0x1F,
- 0xFF,0xFF,0xFF,0xFF,0xF0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xF8,0xFF,0xFF,0xFF,0x7F,
- 0x1F,0x00,0x00,0x01,0x03,0x03,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x03,0x03,0x01,
- 0x00,0x00,0x00,0x00,0xE0,0xF0,0xF0,0xF8,0xFC,0xFC,0x7E,0x7E,0x3F,0x3F,0x1E,0x00,
- 0x00,0x01,0x07,0x0F,0x1F,0x3F,0x3F,0x7E,0x7E,0xFC,0xF8,0xF8,0xF0,0xF0,0xF0,0xF0,
- 0xF0,0xF0,0xF0,0xF8,0xF8,0xF8,0xFC,0x7E,0x7F,0x3F,0x1F,0x1F,0x0F,0x03,0x01,0x00,
- 0x0C,0x1E,0x3F,0x3F,0x7E,0x7E,0xFC,0xF8,0xF8,0xF0,0xF0,0xE0,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,
- 0xE0,0xF0,0xFC,0xFE,0xFF,0x7F,0x1E,0x00,0x00,0x00,0x00,0x01,0x01,0xE1,0xF1,0xF9,
- 0xF9,0xF1,0xE1,0x01,0x01,0x00,0x00,0x00,0x0C,0x3E,0x7F,0xFF,0xFE,0xFC,0xF0,0xC0,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,
- 0x0F,0x0F,0x0F,0x07,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x7F,0xFF,
- 0xFF,0x7F,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x07,0x0F,0x0F,0x0F,
- 0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-};
-
-const char wmt_spi_lcd_display_cloudy[][64]={
- /* ͼÏñ C:\Users\admin\Desktop\androd camera\yuhao\cloudy.bmp 64x64 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0xE0,0xE0,0xE0,0xC0,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x87,0x8F,0x87,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0xC0,0xE0,0xE0,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x80,0x80,0x80,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC1,0xC1,0x81,0x80,0x80,0x18,0x38,
- 0x3C,0x1E,0x1E,0x0F,0x0F,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x0F,0x0F,0x1E,0x3E,
- 0x7C,0xF8,0xF0,0xE0,0xC0,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xF0,0xF8,0x7C,0x3C,0x1E,0x0F,0x0F,
- 0x07,0x07,0x03,0x03,0x03,0x03,0x01,0x01,0x03,0x03,0x03,0x03,0x07,0x07,0x0F,0x0F,
- 0x1E,0x3C,0x7C,0xF8,0xF0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x03,0xFF,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x20,0x70,0x70,0x70,0x70,0x20,
- 0x00,0x00,0x00,0x80,0xC0,0xE0,0xFC,0xFF,0xFF,0x0F,0x01,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x01,0x0F,0x1F,0x1F,0x0E,0x0F,0x0F,0x07,0x07,0x0F,0x0F,0x0F,0x1E,
- 0x1E,0x3C,0x78,0xF9,0xF3,0xC7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0xF8,0xFE,0xFF,0x1F,0x07,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x81,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x03,0x0F,0x1F,0x3F,0x7C,0xF0,0xF0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,
- 0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,
- 0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xF0,
- 0xF0,0x78,0x3E,0x3F,0x0F,0x07,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
- 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
- 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-};
-
-extern int wmt_getsyspara(char *varname, unsigned char *varval, int *varlen);
-
-void wmt_spi_lcd_write_n_data(const char *wbuf,int wbuf_len)
-{
- if(wbuf_len>=WMT_SPI_READ_BUF_MAX_LEN)
- {
- wmt_spi_lcd_err("error!!");
- return;
- }
- gpio_direction_output(WMT_SPI_LCD_A0_PIN,1);
- spi_write_then_read(wmt_spi_lcd_pContext->spi, wbuf, wbuf_len, NULL, 0);
-}
-
-void wmt_spi_lcd_write_data(unsigned char c)
-{
- wmt_spi_lcd_write_n_data(&c,1);
-}
-
-
-//-------------------------------------------------------------------------------
-//×Ó³ÌÐòÃû³Æ:lcdwc(unsigned char c).
-//¹¦ÄÜ:ÏòÒº¾§ÏÔʾ¿ØÖÆÆ÷ËÍÖ¸Áî.
-//-------------------------------------------------------------------------------
-void wmt_spi_lcd_write_command(unsigned char c)
-{
- gpio_direction_output(WMT_SPI_LCD_A0_PIN,0);
- spi_write_then_read(wmt_spi_lcd_pContext->spi, &c, 1, NULL, 0);
-}
-
-void wmt_spi_lcd_reset(void) //Òº¾§ÏÔʾ¿ØÖÆÆ÷³õʼ»¯×Ó³ÌÐò
-{
- #if 0
- gpio_direction_output(WMT_SPI_LCD_RESET_PIN,0);
- mdelay(200);
- gpio_direction_output(WMT_SPI_LCD_RESET_PIN,1);
- mdelay(200);
- #endif
- wmt_spi_lcd_write_command(0xe2);
- mdelay(100);
-
- wmt_spi_lcd_write_command(0x2c);/////set booster on
- wmt_spi_lcd_write_command(0x2e); ////voltage regulator circuit on
- wmt_spi_lcd_write_command(0x2f);//// voltage follower circuit on
-
- wmt_spi_lcd_write_command(0xa0);//
- wmt_spi_lcd_write_command(0xa6);//
- mdelay(3);
- wmt_spi_lcd_write_command(0xc8);//
- mdelay(3);
- wmt_spi_lcd_write_command(0xa2);//
- mdelay(3);
-
- wmt_spi_lcd_write_command(0xf8); //set booster ratio
- mdelay(2);
- wmt_spi_lcd_write_command(0x00); //set X2 X3 X4
- mdelay(2);
-
- wmt_spi_lcd_write_command(0x24);
- mdelay(2);
- wmt_spi_lcd_write_command(0x81);
- mdelay(2);
- wmt_spi_lcd_write_command(0x28);
- mdelay(2);
- wmt_spi_lcd_write_command(0xac);
- mdelay(2);
- wmt_spi_lcd_write_command(0x00);
- mdelay(2);
-
- wmt_spi_lcd_write_command(0xaf);
- wmt_spi_lcd_write_command(0xA4);
- mdelay(2);
-}
-
-
-void wmt_spi_lcd_display_picture(const char *picture)
-{
- int page,k;
- int skip=0;
- for(page=0xB0;page<0xB8;page++)
- {
- wmt_spi_lcd_write_command(page);
- wmt_spi_lcd_write_command(0x10);
- wmt_spi_lcd_write_command(0x00);
-
- for(k=0;k<8;k++)
- wmt_spi_lcd_write_n_data(picture+skip+k*8,8);
-
- skip+=64;
- }
-}
-
-void wmt_spi_lcd_display_state_picture(void)
-{
- switch(wmt_sub_lcd_display_state){
- case WMT_SPI_LCD_STATE_HAPPY:
- wmt_spi_lcd_display_picture(wmt_spi_lcd_display_happy[0]);
- break;
- case WMT_SPI_LCD_STATE_SUN:
- wmt_spi_lcd_display_picture(wmt_spi_lcd_display_sun[0]);
- break;
- case WMT_SPI_LCD_STATE_CLOUDY:
- wmt_spi_lcd_display_picture(wmt_spi_lcd_display_cloudy[0]);
- break;
- case WMT_SPI_LCD_STATE_SAD:
- wmt_spi_lcd_display_picture(wmt_spi_lcd_display_sad[0]);
- break;
- case WMT_SPI_LCD_STATE_PRINT:
- wmt_spi_lcd_display_picture(wmt_spi_lcd_display_print[0]);
- break;
- case WMT_SPI_LCD_STATE_MESSAGE:
- wmt_spi_lcd_display_picture(wmt_spi_lcd_display_message[0]);
- break;
-
- default:
- wmt_spi_lcd_printk("%s default wmt_sub_lcd_display_state=%d\n", __func__,wmt_sub_lcd_display_state);
- }
-}
-
-
-static int wmt_spi_lcd_open(struct inode *inode, struct file *filp)
-{
- struct wmt_spi_lcd_dev *spi_dev = container_of(filp->private_data,
- struct wmt_spi_lcd_dev,
- sub_lcd_misc_device);
- filp->private_data = spi_dev;
- wmt_spi_lcd_display_state_picture();
- // mdelay(3000);
-
- return 0;
-}
-
-static long wmt_spi_lcd_ioctl(struct file *file,
- unsigned int cmd, unsigned long arg)
-{
- void __user *argp = (void __user *)arg;
- int interval, val;
- struct wmt_spi_lcd_dev *spi_dev = file->private_data;
-
- wmt_sub_lcd_display_state = cmd;
- wmt_spi_lcd_display_state_picture();
-
- switch(cmd){
- case WMT_WIFI_POWER:
- if(copy_from_user(&val, argp, sizeof(val)))
- return -EFAULT;
- if(val > 1)
- return -EINVAL;
- if(val)
- {
- gpio_direction_output(WMT_WIFI_POWER_PIN,1);
- }
- else
- {
- gpio_direction_output(WMT_WIFI_POWER_PIN,0);
- }
- wmt_spi_lcd_printk("wmt_spi_lcd_ioctl WMT_WIFI_POWER_PIN val=%d\n",val);
- break;
- case WMT_AIT_POWER:
- if(copy_from_user(&val, argp, sizeof(val)))
- return -EFAULT;
- if(val > 1)
- return -EINVAL;
- if(val)
- {
- gpio_direction_output(WMT_AIT_POWER_PIN,1);
- }
- else
- {
- gpio_direction_output(WMT_AIT_POWER_PIN,0);
- }
- wmt_spi_lcd_printk("wmt_spi_lcd_ioctl WMT_AIT_POWER_PIN val=%d\n",val);
- break;
- case WMT_PRINT_POWER:
- if(copy_from_user(&val, argp, sizeof(val)))
- return -EFAULT;
- if(val > 1)
- return -EINVAL;
- if(val)
- {
- gpio_direction_output(WMT_PRINT_POWER_PIN,1);
- }
- else
- {
- gpio_direction_output(WMT_PRINT_POWER_PIN,0);
- }
-
- wmt_spi_lcd_printk("wmt_spi_lcd_ioctl WMT_PRINT_POWER_PIN val=%d\n",val);
- break;
- case WMT_SWITCH_OTG_PRINT:
- if(copy_from_user(&val, argp, sizeof(val)))
- return -EFAULT;
- if(val > 1)
- return -EINVAL;
- if(val)
- {
- gpio_direction_output(WMT_OTG_PRINT_SWITCH_PIN,1);
- }
- else
- {
- gpio_direction_output(WMT_OTG_PRINT_SWITCH_PIN,0);
- }
- wmt_spi_lcd_printk("wmt_spi_lcd_ioctl WMT_OTG_PRINT_SWITCH_PIN val=%d\n",val);
- break;
- case WMT_GET_LCD_POWER:
- spi_dev->lcd_val = wmt_gpio_getpull(WMT_LCD_POWER_PIN);
- wmt_spi_lcd_printk("wmt_spi_lcd_ioctl WMT_GET_LCD_POWER=%d\n", spi_dev->lcd_val);
- interval = spi_dev->lcd_val;
- if(copy_to_user(argp, &interval, sizeof(interval)))
- {
- wmt_spi_lcd_printk("wmt_spi_lcd_ioctl WMT_GET_LCD_POWER fail\n");
- return -EFAULT;
- }
- break;
-
- case WMT_GET_WIFI_POWER:
- spi_dev->wifi_val = wmt_gpio_getpull(WMT_WIFI_POWER_PIN);
- wmt_spi_lcd_printk("wmt_spi_lcd_ioctl WMT_GET_WIFI_POWER=%d\n", spi_dev->wifi_val);
- interval = spi_dev->wifi_val;
- if(copy_to_user(argp, &interval, sizeof(interval)))
- {
- wmt_spi_lcd_printk("wmt_spi_lcd_ioctl WMT_GET_WIFI_POWER fail\n");
- return -EFAULT;
- }
- break;
-
- case WMT_GET_AIT_POWER:
- spi_dev->ait_val = wmt_gpio_getpull(WMT_AIT_POWER_PIN);
- wmt_spi_lcd_printk("wmt_spi_lcd_ioctl WMT_GET_AIT_POWER=%d\n", spi_dev->ait_val);
- interval = spi_dev->ait_val;
- if(copy_to_user(argp, &interval, sizeof(interval)))
- {
- wmt_spi_lcd_printk("wmt_spi_lcd_ioctl WMT_GET_AIT_POWER fail\n");
- return -EFAULT;
- }
- break;
-
- case WMT_GET_PRINT_POWER:
- spi_dev->print_val = wmt_gpio_getpull(WMT_PRINT_POWER_PIN);
- wmt_spi_lcd_printk("wmt_spi_lcd_ioctl WMT_GET_PRINT_POWER=%d\n", spi_dev->print_val);
- interval = spi_dev->print_val;
- if(copy_to_user(argp, &interval, sizeof(interval)))
- {
- wmt_spi_lcd_printk("wmt_spi_lcd_ioctl WMT_GET_PRINT_POWER fail\n");
- return -EFAULT;
- }
- break;
- case WMT_GET_OTG_PRINT_STATE:
- spi_dev->otg_print_state = wmt_gpio_getpull(WMT_OTG_PRINT_SWITCH_PIN);
- wmt_spi_lcd_printk("wmt_spi_lcd_ioctl WMT_OTG_PRINT_SWITCH_PIN=%d\n", spi_dev->otg_print_state);
- interval = spi_dev->otg_print_state;
- if(copy_to_user(argp, &interval, sizeof(interval)))
- {
- wmt_spi_lcd_printk("wmt_spi_lcd_ioctl WMT_OTG_PRINT_SWITCH_PIN fail\n");
- return -EFAULT;
- }
- break;
-
- default:
- return -EINVAL;
- }
-
- return 0;
-}
-
-
-static const struct file_operations wmt_spi_lcd_fops = {
- .owner = THIS_MODULE,
- .llseek = no_llseek,
- .open = wmt_spi_lcd_open,
- .unlocked_ioctl = wmt_spi_lcd_ioctl,
-};
-
-
-static ssize_t wmt_spi_lcd_cat_dbg(struct device *dev, struct device_attribute *attr, char *buf)
-{
- return sprintf(buf, "%d\n", wmt_sub_lcd_display_state);
-}
-
-static ssize_t wmt_spi_lcd_echo_dbg(struct device *dev, struct device_attribute *attr, const char *buf, size_t count)
-{
- sscanf(buf,"%d", &wmt_sub_lcd_display_state);
- wmt_sub_lcd_display_state += WMT_SPI_LCD_STATE_HAPPY;
- wmt_spi_lcd_display_state_picture();
- return count;
-}
-
-static DEVICE_ATTR(dbg, S_IRUGO | S_IWUSR, wmt_spi_lcd_cat_dbg, wmt_spi_lcd_echo_dbg);
-
-static struct attribute *sub_lcd_attributes[] = {
- &dev_attr_dbg.attr,
- NULL
-};
-
-static const struct attribute_group wmt_spi_lcd_group = {
- .attrs = sub_lcd_attributes,
-};
-
-static int wmt_spi_lcd_sysfs_create_group(struct wmt_spi_lcd_dev *spi_dev, const struct attribute_group *group)
-{
- int err;
-
- spi_dev->kobj = kobject_create_and_add("wmt_spi_lcd", NULL) ;
- if(!spi_dev->kobj){
- wmt_spi_lcd_printk("kobj create failed.\n");
- return -ENOMEM;
- }
-
- /* Register sysfs hooks */
- err = sysfs_create_group(spi_dev->kobj, group);
- if (err < 0){
- kobject_del(spi_dev->kobj);
- wmt_spi_lcd_printk("Create sysfs group failed!\n");
- return -ENOMEM;
- }
-
- return 0;
-}
-
-static void wmt_spi_lcd_sysfs_remove_group(struct wmt_spi_lcd_dev *spi_dev, const struct attribute_group *group)
-{
- sysfs_remove_group(spi_dev->kobj, group);
- kobject_del(spi_dev->kobj);
- return;
-}
-static int wmt_spi_lcd_probe(struct spi_device *spi)
-{
- struct wmt_spi_lcd_dev *spi_dev = NULL;
- int ret = 0;
-
- ret = gpio_request(WMT_SPI_LCD_A0_PIN, "sub_lcd_control");
- if (ret)
- goto err_exit;
-
- spi_dev = kzalloc(sizeof(*spi_dev), GFP_KERNEL);
- if (spi_dev == NULL) {
- wmt_spi_lcd_printk("failed to allocate memory for module data\n");
- return -ENOMEM;
- }
-
- spi_dev->spi = spi;
- spi_set_drvdata(spi, spi_dev);
-
- ret = wmt_spi_lcd_sysfs_create_group(spi_dev, &wmt_spi_lcd_group);
- if(ret < 0){
- wmt_spi_lcd_printk("create sysfs group failed.\n");
- goto exit_create_group;
- }
-
- /* init mutex and queues */
- init_waitqueue_head(&spi_dev->read_wq);
- mutex_init(&spi_dev->read_mutex);
- spin_lock_init(&spi_dev->irq_enabled_lock);
-
- spi_dev->sub_lcd_misc_device.minor = MISC_DYNAMIC_MINOR;
- spi_dev->sub_lcd_misc_device.name = "wmt_spi_lcd";
- spi_dev->sub_lcd_misc_device.fops = &wmt_spi_lcd_fops;
-
- ret = misc_register(&spi_dev->sub_lcd_misc_device);
- if (ret) {
- wmt_spi_lcd_printk("%s : misc_register failed\n", __FILE__);
- goto err_misc_register;
- }
-
- wmt_spi_lcd_pContext = spi_dev;
-
- return 0;
-
-err_misc_register:
- mutex_destroy(&spi_dev->read_mutex);
- kfree(spi_dev);
-err_exit:
- gpio_free(WMT_SPI_LCD_A0_PIN);
-exit_create_group:
- destroy_workqueue(&spi_dev->read_wq);
-
- return ret;
-}
-
-static int wmt_spi_lcd_remove(struct spi_device *spi)
-{
- struct wmt_spi_lcd_dev *spi_dev = wmt_spi_lcd_pContext;
- misc_deregister(&spi_dev->sub_lcd_misc_device);
- mutex_destroy(&spi_dev->read_mutex);
- gpio_free(WMT_SPI_LCD_A0_PIN);
-
- wmt_spi_lcd_sysfs_remove_group(spi_dev, &wmt_spi_lcd_group);
- kfree(spi_dev);
-
- return 0;
-}
-
-static int wmt_spi_lcd_suspend(struct spi_device *spi, pm_message_t mesg)
-{
- printk("%s\n",__func__);
-
- return 0;
-}
-
-static int wmt_spi_lcd_resume(struct spi_device *spi)
-{
- printk("%s\n",__func__);
- wmt_spi_lcd_reset();
- wmt_spi_lcd_display_state_picture();
- return 0;
-}
-
-
-static struct spi_driver wmt_spi_lcd_driver = {
- .driver = {
- .name = "wmt_spi_lcd",
- .bus = &spi_bus_type,
- .owner = THIS_MODULE,
- },
- .probe = wmt_spi_lcd_probe,
- .remove = wmt_spi_lcd_remove,
- .suspend = wmt_spi_lcd_suspend,
- .resume = wmt_spi_lcd_resume,
-};
-
-static struct spi_board_info wmt_spi_lcd_board_info[] __initdata = {
- {
- .modalias = "wmt_spi_lcd",
- .bus_num = 0,
- .chip_select = 0,
- .max_speed_hz = 12000000,
- .irq = -1,
- .mode = SPI_MODE_0,
- .controller_data = NULL,
- },
-};
-
-static int wmt_spi_lcd_register_device (void)
-{
- int ret = 0;
- ret = spi_register_board_info(wmt_spi_lcd_board_info, ARRAY_SIZE(wmt_spi_lcd_board_info));
- return ret;
-}
-
-static int wmt_spi_lcd_init(void)
-{
- int ret = 0;
- unsigned char buf[40];
- int buflen = 40;
- unsigned int value;
- char *endp;
-
- if(wmt_getsyspara("wmt.support.lcd.spi", buf, &buflen) == 0) {
- value = simple_strtoul(buf, &endp, 0);
- if(value == 0)
- return -1;
- } else
- return -1;
-
- if (wmt_spi_lcd_register_device()<0)
- {
- wmt_spi_lcd_printk(" Error to run wmt_spi_lcd_register_device()!\n");
- return -1;
- }
-
- ret = spi_register_driver(&wmt_spi_lcd_driver);
- if (ret != 0)
- {
- wmt_spi_lcd_printk("failed to register wmt_spi_lcd SPI driver: %d\n", ret);
- goto out;
- }
-
-out:
- return ret;
-}
-
-static void wmt_spi_lcd_exit(void)
-{
- wmt_spi_lcd_printk("Unloading wmt_spi_lcd driver\n");
- spi_unregister_driver(&wmt_spi_lcd_driver);
-}
-
-module_init(wmt_spi_lcd_init);
-module_exit(wmt_spi_lcd_exit);
-
-MODULE_LICENSE("GPL");
-MODULE_DESCRIPTION(DRIVER_DESC);
diff --git a/ANDROID_3.4.5/drivers/video/wmt/devices/lcd.c b/ANDROID_3.4.5/drivers/video/wmt/devices/lcd.c
deleted file mode 100755
index a6099294..00000000
--- a/ANDROID_3.4.5/drivers/video/wmt/devices/lcd.c
+++ /dev/null
@@ -1,440 +0,0 @@
-/*++
- * linux/drivers/video/wmt/lcd.c
- * WonderMedia video post processor (VPP) driver
- *
- * Copyright c 2014 WonderMedia Technologies, Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * 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.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- * WonderMedia Technologies, Inc.
- * 4F, 533, Chung-Cheng Road, Hsin-Tien, Taipei 231, R.O.C
---*/
-
-#define LCD_C
-#undef DEBUG
-/* #define DEBUG */
-/* #define DEBUG_DETAIL */
-/*----------------------- DEPENDENCE -----------------------------------------*/
-#include "../lcd.h"
-#include "../vout.h"
-#ifdef CONFIG_KERNEL
-#include <linux/gpio.h>
-#endif
-
-#ifdef CONFIG_VPP_SHENZHEN
-#include <mach/wmt_iomux.h>
-#endif
-
-/*----------------------- PRIVATE MACRO --------------------------------------*/
-/* #define LCD_XXXX xxxx *//*Example*/
-
-/*----------------------- PRIVATE CONSTANTS ----------------------------------*/
-/* #define LCD_XXXX 1 *//*Example*/
-
-/*----------------------- PRIVATE TYPE --------------------------------------*/
-/* typedef xxxx lcd_xxx_t; *//*Example*/
-struct lcd_device_t {
- struct lcd_parm_t* (*get_parm)(int arg);
-};
-
-/*----------EXPORTED PRIVATE VARIABLES are defined in lcd.h -------------*/
-/*----------------------- INTERNAL PRIVATE VARIABLES - -----------------------*/
-/* int lcd_xxx; *//*Example*/
-struct lcd_device_t lcd_device_array[LCD_PANEL_MAX];
-int lcd_panel_on = 1;
-int lcd_pwm_enable;
-enum lcd_panel_t lcd_panel_id = LCD_PANEL_MAX;
-int lcd_panel_bpp = 24;
-
-struct vout_dev_t lcd_vout_dev_ops;
-
-/*--------------------- INTERNAL PRIVATE FUNCTIONS ---------------------------*/
-/* void lcd_xxx(void); *//*Example*/
-enum lcd_panel_t lcd_lvds_id = LCD_PANEL_MAX;
-int lcd_type;
-
-/*----------------------- Function Body --------------------------------------*/
-/*----------------------- Backlight --------------------------------------*/
-void lcd_set_type(int type)
-{
- lcd_type = type; /* 0-LCD, 1-LVDS */
-}
-
-int lcd_get_type(void)
-{
- return lcd_type;
-}
-
-#ifdef CONFIG_VPP_SHENZHEN
-
-#define MAX_LCD_GPIO_NUM 5
-
-static struct {
- int gpio;
- int active;
-} lcd_power[MAX_LCD_GPIO_NUM] = {{-1, 0}};
-
-static int parse_uboot_param(void)
-{
- char buf[64];
- unsigned int parm[32];
- int l = sizeof(buf);
- int ret, i, gpio_num;
-
- for(i = 0; i < MAX_LCD_GPIO_NUM; i++)
- lcd_power[i].gpio = -1;
-
- /*
- * In hardware, maybe there are several gpio to control LCD power
- * We can set the wmt.lcd.power as follows:
- * setenv wmt.lcd.power gpio0:active0,gpio1:active1,....,gpio4:active4
- */
- if (wmt_getsyspara("wmt.lcd.power", buf, &l)) {
- pr_err("please set wmt.lcd.power\n");
- return -EINVAL;
- }
-
- i = vpp_parse_param(buf, parm, 2 * MAX_LCD_GPIO_NUM, 0);
- gpio_num = i / 2;
-
- for(i = 0; i < gpio_num; i++) {
-
- lcd_power[i].gpio = parm[i * 2];
- lcd_power[i].active = parm[i * 2 + 1];
-
- ret = gpio_request(lcd_power[i].gpio, "lcd power");
- if (ret) {
- pr_err("request gpio %d failed for lcd power\n",
- lcd_power[i].gpio);
- return ret;
- }
-
- DPRINT("lcd power%d: gpio%d, active %d\n",
- i, lcd_power[i].gpio, lcd_power[i].active);
- }
-
- return 0;
-}
-
-void lcd_power_on(bool on)
-{
- int i;
-
- for(i = 0; i < MAX_LCD_GPIO_NUM; i++) {
- if (lcd_power[i].gpio < 0)
- return;
-
- gpio_direction_output(lcd_power[i].gpio, on ?
- lcd_power[i].active : !lcd_power[i].active);
-
- DBG_MSG("lcd_power_on: i = %d, on = %d, gpio = %d, active = %d\n",
- i, on, lcd_power[i].gpio, lcd_power[i].active);
- }
-}
-#endif
-
-void lcd_set_lvds_id(int id)
-{
- lcd_lvds_id = id;
-}
-
-int lcd_get_lvds_id(void)
-{
- return lcd_lvds_id;
-}
-
-void lcd_set_parm(int id, int bpp)
-{
- lcd_panel_id = id;
- lcd_panel_bpp = bpp;
-}
-
-struct lcd_parm_t *lcd_get_parm(enum lcd_panel_t id, unsigned int arg)
-{
- struct lcd_device_t *p;
-
- p = &lcd_device_array[id];
- if (p && p->get_parm)
- return p->get_parm(arg);
- return 0;
-}
-
-struct vout_dev_t *lcd_get_dev(void)
-{
- if (lcd_panel_id >= LCD_PANEL_MAX)
- return 0;
- return &lcd_vout_dev_ops;
-}
-
-#ifdef CONFIG_KERNEL
-static DEFINE_SEMAPHORE(lcd_sem);
-#endif
-void lcd_set_mutex(int lock)
-{
-#ifdef CONFIG_KERNEL
- if (lock)
- down(&lcd_sem);
- else
- up(&lcd_sem);
-#endif
-}
-
-void lcd_set_enable(int enable)
-{
- DBG_MSG("%d\n", enable);
- if (!p_lcd)
- return;
-
- lcd_set_mutex(1);
- if (enable) {
- if (p_lcd->initial)
- p_lcd->initial();
- else {
- lcd_enable_signal(1); /* singal enable */
-#ifndef CONFIG_VPP_SHENZHEN
- outl(inl(GPIO_BASE_ADDR + 0x80) | 0x801,
- GPIO_BASE_ADDR + 0x80);
- outl(inl(GPIO_BASE_ADDR + 0xC0) | 0x801,
- GPIO_BASE_ADDR + 0xC0);
-#endif
- }
- } else {
- if (p_lcd->uninitial)
- p_lcd->uninitial();
- else {
- lcd_enable_signal(0); /* singal disable */
-#ifndef CONFIG_VPP_SHENZHEN
- outl(inl(GPIO_BASE_ADDR + 0xC0) & ~0x801,
- GPIO_BASE_ADDR + 0xC0);
-#endif
- }
- }
- lcd_set_mutex(0);
-}
-
-void lcd_enable_signal(int enable)
-{
- int hdmi_off;
-
- DBG_MSG("%d\n", enable);
- if (lcd_get_type()) { /* LVDS */
- /* TODO */
- } else { /* LCD */
- govrh_set_dvo_enable(p_govrh2, enable);
- }
-
- hdmi_off = (govrh_get_MIF_enable(p_govrh)) ? 0 : 1;
- vpp_set_clock_enable(DEV_DVO, (hdmi_off && !enable) ? 0 : 1, 1);
-}
-
-#ifdef __KERNEL__
-/*----------------------- LCD --------------------------------------*/
-static int __init lcd_arg_panel_id
-(
- char *str /*!<; // argument string */
-)
-{
- sscanf(str, "%d", (int *) &lcd_panel_id);
- if (lcd_panel_id >= LCD_PANEL_MAX)
- lcd_panel_id = LCD_PANEL_MAX;
- DBGMSG(KERN_INFO "set lcd panel id = %d\n", lcd_panel_id);
- return 1;
-} /* End of lcd_arg_panel_id */
-
-__setup("lcdid=", lcd_arg_panel_id);
-#endif
-int lcd_panel_register(int no, void (*get_parm)(int mode))
-{
- struct lcd_device_t *p;
-
- if (no >= LCD_PANEL_MAX) {
- DBGMSG(KERN_ERR "*E* lcd device no max is %d !\n",
- LCD_PANEL_MAX);
- return -1;
- }
-
- p = &lcd_device_array[no];
- if (p->get_parm) {
- DBGMSG(KERN_ERR "*E* lcd device %d exist !\n", no);
- return -1;
- }
- p->get_parm = (void *) get_parm;
- return 0;
-} /* End of lcd_device_register */
-
-/*----------------------- vout device plugin --------------------------------*/
-void lcd_set_power_down(int enable)
-{
-#ifdef CONFIG_VPP_SHENZHEN
- static int save_state = -1;
-
- if (save_state != enable) {
- /* lcd enable control by user */
- lcd_power_on(enable ? false : true);
- lcd_set_enable(enable ? false : true);
- save_state = enable;
- }
-#endif
-}
-
-static void wmt_config_govrh_polar(struct vout_t *vo)
-{
- /* wmt.display.polar [clock polar]:[hsync polart]:[vsync polar]*/
- char buf[64];
- int l = sizeof(buf);
- int clk_pol, hsync_pol, vsync_pol;
- unsigned int parm[3];
-
- if (wmt_getsyspara("wmt.display.polar", buf, &l))
- return;
-
- vpp_parse_param(buf, (unsigned int *)parm, 3, 0);
- clk_pol = parm[0];
- hsync_pol = parm[1];
- vsync_pol = parm[2];
- DBG_MSG("govrh polar: clk-pol %d, hsync %d, vsync %d\n",
- clk_pol, hsync_pol, vsync_pol);
- govrh_set_dvo_clock_delay(vo->govr, clk_pol ? 0 : 1, 0);
- govrh_set_dvo_sync_polar(vo->govr,
- hsync_pol ? 0 : 1, vsync_pol ? 0 : 1);
-}
-
-int lcd_set_mode(unsigned int *option)
-{
- struct vout_t *vo;
- enum vout_inf_mode_t inf_mode;
-
- DBG_MSG("option %d,%d\n", option[0], option[1]);
-
- vo = lcd_vout_dev_ops.vout;
- inf_mode = vo->inf->mode;
- if (option) {
- unsigned int capability;
-
- if (lcd_panel_id == 0)
- p_lcd = lcd_get_oem_parm(vo->resx, vo->resy);
- else
- p_lcd = lcd_get_parm(lcd_panel_id, lcd_panel_bpp);
-
- if (!p_lcd) {
- DBG_ERR("lcd %d not support\n", lcd_panel_id);
- return -1;
- }
- DBG_MSG("[%s] %s (id %d,bpp %d)\n", vout_inf_str[inf_mode],
- p_lcd->vmode.name, lcd_panel_id, lcd_panel_bpp);
- capability = p_lcd->capability;
- switch (inf_mode) {
- case VOUT_INF_LVDS:
- lvds_set_sync_polar(
- (capability & LCD_CAP_HSYNC_HI) ? 0 : 1,
- (capability & LCD_CAP_VSYNC_HI) ? 0 : 1);
- lvds_set_rgb_type(lcd_panel_bpp);
- break;
- case VOUT_INF_DVI:
- govrh_set_dvo_clock_delay(vo->govr,
- (capability & LCD_CAP_CLK_HI) ? 0 : 1, 0);
- govrh_set_dvo_sync_polar(vo->govr,
- (capability & LCD_CAP_HSYNC_HI) ? 0 : 1,
- (capability & LCD_CAP_VSYNC_HI) ? 0 : 1);
- switch (lcd_panel_bpp) {
- case 15:
- govrh_IGS_set_mode(vo->govr, 0, 1, 1);
- break;
- case 16:
- govrh_IGS_set_mode(vo->govr, 0, 3, 1);
- break;
- case 18:
- govrh_IGS_set_mode(vo->govr, 0, 2, 1);
- break;
- case 24:
- govrh_IGS_set_mode(vo->govr, 0, 0, 0);
- break;
- default:
- break;
- }
- break;
- default:
- break;
- }
- } else
- p_lcd = 0;
-
- wmt_config_govrh_polar(vo);
- return 0;
-}
-
-int lcd_check_plugin(int hotplug)
-{
- return (p_lcd) ? 1 : 0;
-}
-
-int lcd_get_edid(char *buf)
-{
- return 1;
-}
-
-int lcd_config(struct vout_info_t *info)
-{
- info->resx = p_lcd->vmode.xres;
- info->resy = p_lcd->vmode.yres;
- info->fps = p_lcd->vmode.refresh;
- return 0;
-}
-
-int lcd_init(struct vout_t *vo)
-{
- DBG_MSG("%d\n", lcd_panel_id);
-
- /* vo_set_lcd_id(LCD_CHILIN_LW0700AT9003); */
- if (lcd_panel_id >= LCD_PANEL_MAX)
- return -1;
-
- if (lcd_panel_id == 0)
- p_lcd = lcd_get_oem_parm(vo->resx, vo->resy);
- else
- p_lcd = lcd_get_parm(lcd_panel_id, 24);
-
- if (p_lcd == 0)
- return -1;
-
- /* set default parameters */
- vo->resx = p_lcd->vmode.xres;
- vo->resy = p_lcd->vmode.yres;
- vo->pixclk = PICOS2KHZ(p_lcd->vmode.pixclock) * 1000;
- return 0;
-}
-
-struct vout_dev_t lcd_vout_dev_ops = {
- .name = "LCD",
- .mode = VOUT_INF_DVI,
- .capability = VOUT_DEV_CAP_FIX_RES + VOUT_DEV_CAP_FIX_PLUG,
-
- .init = lcd_init,
- .set_power_down = lcd_set_power_down,
- .set_mode = lcd_set_mode,
- .config = lcd_config,
- .check_plugin = lcd_check_plugin,
- .get_edid = lcd_get_edid,
-};
-
-int lcd_module_init(void)
-{
- parse_uboot_param();
-
- vout_device_register(&lcd_vout_dev_ops);
- return 0;
-} /* End of lcd_module_init */
-module_init(lcd_module_init);
-/*--------------------End of Function Body -----------------------------------*/
-#undef LCD_C
diff --git a/ANDROID_3.4.5/drivers/video/wmt/devices/ts8224b.h b/ANDROID_3.4.5/drivers/video/wmt/devices/ts8224b.h
deleted file mode 100755
index 87866284..00000000
--- a/ANDROID_3.4.5/drivers/video/wmt/devices/ts8224b.h
+++ /dev/null
@@ -1,446 +0,0 @@
-#ifndef _TS8224B_H_
-#define _TS8224B_H_
-
-//Enable Page1 hsd4.0
-0xFF00, 0x55,
-0xFF01, 0xAA,
-0xFF02, 0x52,
-0xFF03, 0x08,
-0xFF04, 0x80,
-
-0xF200, 0x00,
-0xF201, 0x84,
-0xF202, 0x02,
-
-0xF40A, 0x13,
-
-0xF000, 0x55,
-0xF001, 0xAA,
-0xF002, 0x52,
-0xF003, 0x08,
-0xF004, 0x01,
-
-0xB000, 0x0D,
-0xB001, 0x0D,
-0xB002, 0x0D,
-
-0xB600, 0x34,
-0xB601, 0x34,
-0xB602, 0x34,
-
-0xB100, 0x0D,
-0xB101, 0x0D,
-0xB102, 0x0D,
-
-// AVEE: manual, -6V : -2.5xVCI)
-0xB700, 0x34,
-0xB701, 0x34,
-0xB702, 0x34,
-
-//Power Control for VCL
-0xB200, 0x00,
-0xB201, 0x00,
-0xB202, 0x00,
-
-0xB800, 0x24,
-0xB801, 0x24,
-0xB802, 0x24,
-
-// VGH: Clamp Enable, 2*AVDD-AVEE, //11V
-0xBF00, 0X01,
-
-0xB300, 0x0F,
-0xB301, 0x0F,
-0xB302, 0x0F,
-
-0xB900, 0x34,//34
-0xB901, 0x34,
-0xB902, 0x34,
-
-// VGL_REG(VGLO):-10V
-0xB500, 0x08,
-0xB501, 0x08,
-0xB502, 0x08,
-
-0xC200, 0x03,
-
-//VGL(LVGL):
-0xBA00, 0x24,
-0xBA01, 0x24,
-0xBA02, 0x24,
-
-
-// VGMP/VGSP: 4.8v
-0xBC00, 0X00,
-0xBC01, 0x78,
-0xBC02, 0X00,
-
-// VGMN/VGSN -4.8v
-0xBD00, 0x00,
-0xBD01, 0x78,
-0xBD02, 0x00,
-
-// VCOM=-0.1
-0xBE00, 0x00,
-0xBE01, 0x80, //2f
-//R+
-0xD100, 0x00,
-0xD101, 0x05,
-0xD102, 0x00,
-0xD103, 0x06,
-0xD104, 0x00,
-0xD105, 0x0E,
-0xD106, 0x00,
-0xD107, 0x19,
-0xD108, 0x00,
-0xD109, 0x29,
-0xD10A, 0x00,
-0xD10B, 0x55,
-0xD10C, 0x00,
-0xD10D, 0x80,
-0xD10E, 0x00,
-0xD10F, 0xC7,
-0xD110, 0x00,
-0xD111, 0xFC,
-0xD112, 0x01,
-0xD113, 0x48,
-0xD114, 0x01,
-0xD115, 0x7C,
-0xD116, 0x01,
-0xD117, 0xC5,
-0xD118, 0x01,
-0xD119, 0xFE,
-0xD11A, 0x02,
-0xD11B, 0x00,
-0xD11C, 0x02,
-0xD11D, 0x30,
-0xD11E, 0x02,
-0xD11F, 0x60,
-0xD120, 0x02,
-0xD121, 0x7A,
-0xD122, 0x02,
-0xD123, 0x9A,
-0xD124, 0x02,
-0xD125, 0xAC,
-0xD126, 0x02,
-0xD127, 0xC4,
-0xD128, 0x02,
-0xD129, 0xD3,
-0xD12A, 0x02,
-0xD12B, 0xE9,
-0xD12C, 0x02,
-0xD12D, 0xF8,
-0xD12E, 0x03,
-0xD12F, 0x0D,
-0xD130, 0x03,
-0xD131, 0x3B,
-0xD132, 0x05,
-0xD133, 0xB5,
-//G+
-0xD200, 0x00,
-0xD201, 0x05,
-0xD202, 0x00,
-0xD203, 0x06,
-0xD204, 0x00,
-0xD205, 0x0E,
-0xD206, 0x00,
-0xD207, 0x19,
-0xD208, 0x00,
-0xD209, 0x29,
-0xD20A, 0x00,
-0xD20B, 0x55,
-0xD20C, 0x00,
-0xD20D, 0x80,
-0xD20E, 0x00,
-0xD20F, 0xC7,
-0xD210, 0x00,
-0xD211, 0xFC,
-0xD212, 0x01,
-0xD213, 0x48,
-0xD214, 0x01,
-0xD215, 0x7C,
-0xD216, 0x01,
-0xD217, 0xC5,
-0xD218, 0x01,
-0xD219, 0xFE,
-0xD21A, 0x02,
-0xD21B, 0x00,
-0xD21C, 0x02,
-0xD21D, 0x30,
-0xD21E, 0x02,
-0xD21F, 0x60,
-0xD220, 0x02,
-0xD221, 0x7A,
-0xD222, 0x02,
-0xD223, 0x9A,
-0xD224, 0x02,
-0xD225, 0xAC,
-0xD226, 0x02,
-0xD227, 0xC4,
-0xD228, 0x02,
-0xD229, 0xD3,
-0xD22A, 0x02,
-0xD22B, 0xE9,
-0xD22C, 0x02,
-0xD22D, 0xF8,
-0xD22E, 0x03,
-0xD22F, 0x0D,
-0xD230, 0x03,
-0xD231, 0x3B,
-0xD232, 0x05,
-0xD233, 0xB5,
-//B+
-0xD300, 0x00,
-0xD301, 0x05,
-0xD302, 0x00,
-0xD303, 0x06,
-0xD304, 0x00,
-0xD305, 0x0E,
-0xD306, 0x00,
-0xD307, 0x19,
-0xD308, 0x00,
-0xD309, 0x29,
-0xD30A, 0x00,
-0xD30B, 0x55,
-0xD30C, 0x00,
-0xD30D, 0x80,
-0xD30E, 0x00,
-0xD30F, 0xC7,
-0xD310, 0x00,
-0xD311, 0xFC,
-0xD312, 0x01,
-0xD313, 0x48,
-0xD314, 0x01,
-0xD315, 0x7C,
-0xD316, 0x01,
-0xD317, 0xC5,
-0xD318, 0x01,
-0xD319, 0xFE,
-0xD31A, 0x02,
-0xD31B, 0x00,
-0xD31C, 0x02,
-0xD31D, 0x30,
-0xD31E, 0x02,
-0xD31F, 0x60,
-0xD320, 0x02,
-0xD321, 0x7A,
-0xD322, 0x02,
-0xD323, 0x9A,
-0xD324, 0x02,
-0xD325, 0xAC,
-0xD326, 0x02,
-0xD327, 0xC4,
-0xD328, 0x02,
-0xD329, 0xD3,
-0xD32A, 0x02,
-0xD32B, 0xE9,
-0xD32C, 0x02,
-0xD32D, 0xF8,
-0xD32E, 0x03,
-0xD32F, 0x0D,
-0xD330, 0x03,
-0xD331, 0x3B,
-0xD332, 0x05,
-0xD333, 0xB5,
-//R-
-0xD400, 0x00,
-0xD401, 0x05,
-0xD402, 0x00,
-0xD403, 0x06,
-0xD404, 0x00,
-0xD405, 0x0E,
-0xD406, 0x00,
-0xD407, 0x19,
-0xD408, 0x00,
-0xD409, 0x29,
-0xD40A, 0x00,
-0xD40B, 0x55,
-0xD40C, 0x00,
-0xD40D, 0x80,
-0xD40E, 0x00,
-0xD40F, 0xC7,
-0xD410, 0x00,
-0xD411, 0xFC,
-0xD412, 0x01,
-0xD413, 0x48,
-0xD414, 0x01,
-0xD415, 0x7C,
-0xD416, 0x01,
-0xD417, 0xC5,
-0xD418, 0x01,
-0xD419, 0xFE,
-0xD41A, 0x02,
-0xD41B, 0x00,
-0xD41C, 0x02,
-0xD41D, 0x30,
-0xD41E, 0x02,
-0xD41F, 0x60,
-0xD420, 0x02,
-0xD421, 0x7A,
-0xD422, 0x02,
-0xD423, 0x9A,
-0xD424, 0x02,
-0xD425, 0xAC,
-0xD426, 0x02,
-0xD427, 0xC4,
-0xD428, 0x02,
-0xD429, 0xD3,
-0xD42A, 0x02,
-0xD42B, 0xE9,
-0xD42C, 0x02,
-0xD42D, 0xF8,
-0xD42E, 0x03,
-0xD42F, 0x0D,
-0xD430, 0x03,
-0xD431, 0x3B,
-0xD432, 0x05,
-0xD433, 0xB5,
-//G-
-0xD500, 0x00,
-0xD501, 0x05,
-0xD502, 0x00,
-0xD503, 0x06,
-0xD504, 0x00,
-0xD505, 0x0E,
-0xD506, 0x00,
-0xD507, 0x19,
-0xD508, 0x00,
-0xD509, 0x29,
-0xD50A, 0x00,
-0xD50B, 0x55,
-0xD50C, 0x00,
-0xD50D, 0x80,
-0xD50E, 0x00,
-0xD50F, 0xC7,
-0xD510, 0x00,
-0xD511, 0xFC,
-0xD512, 0x01,
-0xD513, 0x48,
-0xD514, 0x01,
-0xD515, 0x7C,
-0xD516, 0x01,
-0xD517, 0xC5,
-0xD518, 0x01,
-0xD519, 0xFE,
-0xD51A, 0x02,
-0xD51B, 0x00,
-0xD51C, 0x02,
-0xD51D, 0x30,
-0xD51E, 0x02,
-0xD51F, 0x60,
-0xD520, 0x02,
-0xD521, 0x7A,
-0xD522, 0x02,
-0xD523, 0x9A,
-0xD524, 0x02,
-0xD525, 0xAC,
-0xD526, 0x02,
-0xD527, 0xC4,
-0xD528, 0x02,
-0xD529, 0xD3,
-0xD52A, 0x02,
-0xD52B, 0xE9,
-0xD52C, 0x02,
-0xD52D, 0xF8,
-0xD52E, 0x03,
-0xD52F, 0x0D,
-0xD530, 0x03,
-0xD531, 0x3B,
-0xD532, 0x05,
-0xD533, 0xB5,
-//B-
-0xD600, 0x00,
-0xD601, 0x05,
-0xD602, 0x00,
-0xD603, 0x06,
-0xD604, 0x00,
-0xD605, 0x0E,
-0xD606, 0x00,
-0xD607, 0x19,
-0xD608, 0x00,
-0xD609, 0x29,
-0xD60A, 0x00,
-0xD60B, 0x55,
-0xD60C, 0x00,
-0xD60D, 0x80,
-0xD60E, 0x00,
-0xD60F, 0xC7,
-0xD610, 0x00,
-0xD611, 0xFC,
-0xD612, 0x01,
-0xD613, 0x48,
-0xD614, 0x01,
-0xD615, 0x7C,
-0xD616, 0x01,
-0xD617, 0xC5,
-0xD618, 0x01,
-0xD619, 0xFE,
-0xD61A, 0x02,
-0xD61B, 0x00,
-0xD61C, 0x02,
-0xD61D, 0x30,
-0xD61E, 0x02,
-0xD61F, 0x60,
-0xD620, 0x02,
-0xD621, 0x7A,
-0xD622, 0x02,
-0xD623, 0x9A,
-0xD624, 0x02,
-0xD625, 0xAC,
-0xD626, 0x02,
-0xD627, 0xC4,
-0xD628, 0x02,
-0xD629, 0xD3,
-0xD62A, 0x02,
-0xD62B, 0xE9,
-0xD62C, 0x02,
-0xD62D, 0xF8,
-0xD62E, 0x03,
-0xD62F, 0x0D,
-0xD630, 0x03,
-0xD631, 0x3B,
-0xD632, 0x05,
-0xD633, 0xB5,
-
-//Enable Page0
-0xF000, 0x55,
-0xF001, 0xAA,
-0xF002, 0x52,
-0xF003, 0x08,
-0xF004, 0x00,
-
-
-0xB100, 0xcc,
-0xB101, 0x00,
-
-0xB600, 0x05,
-
-//// Gate EQ:
-0xB700, 0x70,
-0xB701, 0x70,
-
-//// Source EQ:
-0xB800, 0x01,
-0xB801, 0x03,
-0xB802, 0x03,
-0xB803, 0x03,
-
-// #Inversion mode (2-dot)
-0xBC00, 0x02,
-0xBC01, 0x00,
-0xBC02, 0x00,
-
-// Timing control 4H w/ 4-delay
-0xC900, 0xD0,
-0xC901, 0x02,
-0xC902, 0x50,
-0xC903, 0x50,
-0xC904, 0x50,
-// Display Timing:
-
-0x3600, 0x00,
-0x3500, 0x00,
-
-0x3a00, 0x66,
-
-#endif
diff --git a/ANDROID_3.4.5/drivers/video/wmt/devices/vt1625.c b/ANDROID_3.4.5/drivers/video/wmt/devices/vt1625.c
deleted file mode 100755
index 83d1a403..00000000
--- a/ANDROID_3.4.5/drivers/video/wmt/devices/vt1625.c
+++ /dev/null
@@ -1,946 +0,0 @@
-/*++
- * linux/drivers/video/wmt/vt1625.c
- * WonderMedia video post processor (VPP) driver
- *
- * Copyright c 2014 WonderMedia Technologies, Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * 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.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- * WonderMedia Technologies, Inc.
- * 4F, 533, Chung-Cheng Road, Hsin-Tien, Taipei 231, R.O.C
---*/
-
-#define VT1625_C
-/* #define DEBUG */
-/* #define DEBUG_DETAIL */
-/*----------------------- DEPENDENCE -----------------------------------------*/
-#include "../vout.h"
-
-#ifdef CONFIG_KERNEL
-#include <linux/workqueue.h>
-#endif
-
-/*----------------------- PRIVATE MACRO --------------------------------------*/
-/* #define VT1625_XXXX xxxx *//*Example*/
-#ifdef CONFIG_KERNEL
-#define CONFIG_VT1625_INTERRUPT
-#endif
-#define CONFIG_VT1625_POWER
-#define CONFIG_VM700
-
-/*----------------------- PRIVATE CONSTANTS ----------------------------------*/
-/* #define VT1625_XXXX 1 *//*Example*/
-#define VT1625_ADDR 0x40
-
-enum {
- VT1625_INPUT_SELECTION = 0x00,
- VT1625_SYNC_SELECTION_0 = 0x01,
- VT1625_SYNC_SELECTION_1 = 0x02,
- VT1625_FILTER_SELECTION = 0x03,
- VT1625_OUTPUT_MODE = 0x04,
- VT1625_CLOCK_CONTROL = 0x05,
-
- /* start position & overflow */
- VT1625_OVERFLOW = 0x06,
- VT1625_START_ACTIVE_VIDEO = 0x07,
- VT1625_START_HORIZONTAL_POSITION = 0x08,
- VT1625_START_VERTICAL_POSITION = 0x09,
-
- /* amplitude factor */
- VT1625_CR_AMPLITUDE_FACTOR = 0x0A,
- VT1625_BLACK_LEVEL = 0x0B,
- VT1625_Y_AMPLITUDE_FACTOR = 0x0C,
- VT1625_CB_AMPLITUDE_FACTOR = 0x0D,
-
- VT1625_POWER_MANAGEMENT = 0x0E,
- VT1625_STATUS = 0x0F,
-
- /* Hue */
- VT1625_HUE_ADJUSTMENT = 0x10,
- VT1625_OVERFLOW_MISC = 0x11,
-
- /* PLL */
- VT1625_PLL_P2 = 0x12,
- VT1625_PLL_D = 0x13,
- VT1625_PLL_N = 0x14,
- VT1625_PLL_OVERFLOW = 0x15,
-
- /* Sub Carrier */
- VT1625_SUBCARRIER_VALUE_0 = 0x16,
- VT1625_SUBCARRIER_VALUE_1 = 0x17,
- VT1625_SUBCARRIER_VALUE_2 = 0x18,
- VT1625_SUBCARRIER_VALUE_3 = 0x19,
-
- VT1625_VERSION_ID = 0x1B,
- VT1625_DAC_OVERFLOW = 0x1C,
-
- /* test */
- VT1625_TEST_0 = 0x1D,
- VT1625_TEST_1 = 0x1E,
-
- VT1625_FILTER_SWITCH = 0x1F,
- VT1625_TV_SYNC_STEP = 0x20,
- VT1625_TV_BURST_ENVELOPE_STEP = 0x21,
- VT1625_TV_SUB_CARRIER_PHASE_ADJUST = 0x22,
- VT1625_TV_BLANK_LEVEL = 0x23,
- VT1625_TV_SIGNAL_OVERFLOW = 0x24,
-
- /* DAC & GPO */
- VT1625_DAC_SELECTION_0 = 0x4A,
- VT1625_DAC_SELECTION_1 = 0x4B,
- VT1625_GPO = 0x4C,
-
- VT1625_COLBAR_LUMA_DELAY = 0x4D,
- VT1625_UV_DELAY = 0x4E,
- VT1625_BURST_MAX_AMPLITUDE = 0x4F,
-
- /* Graphic timing */
- VT1625_GRAPHIC_H_TOTAL = 0x50,
- VT1625_GRAPHIC_H_ACTIVE = 0x51,
- VT1625_GRAPHIC_H_OVERFLOW = 0x52,
- VT1625_GRAPHIC_V_TOTAL = 0x53,
- VT1625_GRAPHIC_V_OVERFLOW = 0x54,
-
- /* TV timing */
- VT1625_TV_H_TOTAL = 0x55,
- VT1625_TV_H_ACTIVE = 0x56,
- VT1625_TV_H_SYNC_WIDTH = 0x57,
- VT1625_TV_H_OVERFLOW = 0x58,
- VT1625_TV_BURST_START = 0x59,
- VT1625_TV_BURST_END = 0x5A,
- VT1625_TV_VIDEO_START = 0x5B,
- VT1625_TV_VIDEO_END = 0x5C,
- VT1625_TV_VIDEO_OVERFLOW = 0x5D,
-
- /* scale factor */
- VT1625_V_SCALE_FACTOR = 0x5E,
- VT1625_H_SCALE_FACTOR = 0x5F,
- VT1625_SCALE_OVERFLOW = 0x60,
- VT1625_H_BLUR_SCALE_OVERFLOW = 0x61,
- VT1625_ADAPTIVE_DEFLICKER_THR = 0x62,
- VT1625_SCALE_H_TOTAL = 0x63,
- VT1625_SCALE_H_TOTAL_OVERFLOW = 0x64,
-
- /* Amplitude factor */
- VT1625_PY_AMP_FACTOR = 0x65,
- VT1625_PB_AMP_FACTOR = 0x66,
- VT1625_PR_AMP_FACTOR = 0x67,
-
- VT1625_POST_ADJUST = 0x68,
- VT1625_AUTO_CORRECT_SENSE = 0x69,
-
- /* WSS 0x6A - 0x73 */
- VT1625_INT_WSS_2 = 0x71,
-
- /* Close Caption 0x74 - 0x7A */
-
- /* Signature Value 0x7B - 0x82 */
-} vt1625_reg_t;
-
-/*----------------------- PRIVATE TYPE --------------------------------------*/
-/* typedef xxxx vt1625_xxx_t; *//*Example*/
-
-/*----------EXPORTED PRIVATE VARIABLES are defined in vt1625.h -------------*/
-/*----------------------- INTERNAL PRIVATE VARIABLES - -----------------------*/
-/* int vt1625_xxx; *//*Example*/
-
-static char vt1625_ntsc_param[] = {
- 0x03, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x82, /* 00 - 07 */
-#ifdef CONFIG_VM700
- 0x14, 0x05, 0x6E, 0x15, 0x51, 0x50, 0x37, 0xB7, /* 08 - 0f */
- 0x00, 0x80, 0x04, 0x08, 0x08, 0x90, 0xD6, 0x7B, /* 10 - 17 */
-#else
- 0x14, 0x05, 0x6E, 0x15, 0x52, 0x4E, 0x37, 0xB7, /* 08 - 0f */
- 0x08, 0x80, 0x04, 0x08, 0x08, 0x90, 0xD6, 0x7B, /* 10 - 17 */
-#endif
- 0xF0, 0x21, 0x02, 0x50, 0x43, 0x80, 0x00, 0xFC, /* 18 - 1f */
- 0x16, 0x08, 0xDC, 0x7D, 0x02, 0x56, 0x33, 0x8F, /* 20 - 27 */
- 0x58, 0x00, 0x00, 0xA6, 0x29, 0xD4, 0x81, 0x00, /* 28 - 2f */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 30 - 37 */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 38 - 3f */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 40 - 47 */
-#ifdef CONFIG_VM700
- 0x00, 0x00, 0xC5, 0x0F, 0x08, 0x01, 0x01, 0x43, /* 48 - 4f */
-#else
- 0x00, 0x00, 0xC5, 0x0F, 0x00, 0x01, 0x10, 0x44, /* 48 - 4f */
-#endif
- 0x59, 0xCF, 0x23, 0x0C, 0x02, 0x59, 0xCF, 0x7F, /* 50 - 57 */
- 0x23, 0x94, 0xD6, 0x00, 0x9C, 0x06, 0x00, 0x00, /* 58 - 5f */
- 0x80, 0x28, 0xFF, 0x59, 0x03, 0x55, 0x56, 0x56, /* 60 - 67 */
- 0x00, 0x90, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, /* 68 - 6f */
- 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 70 - 77 */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 78 - 7f */
- 0x00, 0x00, 0x00
-};
-
-static char vt1625_pal_param[] = {
- 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x8C, /* 00 - 07 */
-#ifdef CONFIG_VM700
- 0x0E, 0x01, 0x6E, 0x00, 0x51, 0x50, 0x37, 0xB7, /* 08 - 0f */
- 0x00, 0x80, 0x04, 0x08, 0x08, 0x90, 0xCB, 0x8A, /* 10 - 17 */
-#else
- 0x0E, 0x01, 0x7a, 0x00, 0x55, 0x58, 0x37, 0xB7, /* 08 - 0f */
- 0xff, 0x87, 0x04, 0x08, 0x08, 0x90, 0xCB, 0x8A, /* 10 - 17 */
-#endif
- 0x09, 0x2A, 0x06, 0x50, 0x41, 0x80, 0x00, 0xFC, /* 18 - 1f */
- 0x17, 0x0C, 0x4E, 0x76, 0x02, 0x5F, 0x34, 0x8C, /* 20 - 27 */
- 0x4F, 0x5E, 0x15, 0xA2, 0x22, 0x80, 0xD3, 0x10, /* 28 - 2f */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 30 - 37 */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 38 - 3f */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 40 - 47 */
-#ifdef CONFIG_VM700
- 0x00, 0x00, 0xC5, 0x0F, 0x08, 0x02, 0x01, 0x43, /* 48 - 4f */
-#else
- 0x00, 0x00, 0xC5, 0x0F, 0x00, 0x02, 0x10, 0x4C, /* 48 - 4f */
-#endif
- 0x5f, 0xCF, 0x23, 0x70, 0x02, 0x5F, 0xD0, 0x7F, /* 50 - 57 */
- 0x23, 0x92, 0xCE, 0xDF, 0xA0, 0x06, 0x00, 0x00, /* 58 - 5f */
- 0x80, 0x20, 0xFF, 0x5F, 0x03, 0x5f, 0x00, 0x00, /* 60 - 67 */
- 0x00, 0x90, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, /* 68 - 6f */
- 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 70 - 77 */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 78 - 7f */
- 0x00, 0x00, 0x00
-};
-
-enum vt1625_out_t {
- VT1625_OUT_CVBS,
- VT1625_OUT_YUV,
- VT1625_OUT_VGA,
- VT1625_OUT_MAX
-};
-
-enum vt1625_out_t vt1625_out_mode;
-
-int vt1625_tv_mode;
-vdo_color_fmt vt1625_colfmt;
-
-static int pre_plugin;
-
-/*
-* VT1625 U-Boot Env to Set Register
-*/
-typedef struct {
- unsigned char offset;
- unsigned char value;
-} vt1625_reg_env_t;
-
-#define VT1625_REG_MAX_OFFSET 0x82 /* Register Offset: 0x00 ~ 0x82 */
-/*
-* setenv wmt.vt1625.pal.reg regOffset1=regValue1,regOffset2=regValue2,...
-* for example:
-* setenv wmt.vt1625.pal.reg 0a=75,0c=53,23=7a,4f=48
-* setenv wmt.vt1625.ntsc.reg 0a=75,0c=53,23=7a,4f=48
-*/
-#define VT1625_PAL_REG_ENV "wmt.vt1625.pal.reg"
-#define VT1625_NTSC_REG_ENV "wmt.vt1625.ntsc.reg"
-
-/*
-* setenv wmt.vt1625.cvbs.always.turnon 1
-* The cvbs is always turned on event if the av line is pluged out
-* setenv wmt.vt1625.cvbs.always.turnon 0
-* The cvbs is turned on if the av line is pluged in.
-* And the cvbs is turned off if the av line is pluged out
-*/
-#define VT1625_CVBS_ALWAYS_TURNON "wmt.vt1625.cvbs.always.turnon"
-
-static int vt1625_cvbs_always_turnon;
-
-#ifdef CONFIG_KERNEL
-/*
-* VT1625 Timer to Monitor Register
-*/
-/*
-* Monitor the vt1625 register for avoiding the register is cleared.
-* setenv wmt.vt1625.reg.monitor 1
-*
-* If the wmt.vt1625.reg.monitor is Not set or set to 0,
-* it will not monitor the register
-*
-*/
-#define VT1625_REG_MONITOR_ENV "wmt.vt1625.reg.monitor"
-
-#define VT1625_TIMER_INTERVAL 1000 // 1000 ms
-
-static struct timer_list vt1625_timer;
-static struct work_struct vt1625_work;
-
-static void vt1625_set_tv_mode(int ntsc);
-
-#endif
-
-#ifdef CONFIG_UBOOT
-#define msleep mdelay
-#endif
-
-/*--------------------- INTERNAL PRIVATE FUNCTIONS ---------------------------*/
-/* void vt1625_xxx(void); *//*Example*/
-
-/*----------------------- Function Body --------------------------------------*/
-/*
-* Function: register_is_right()
-* Parametr:
-* ntsc = 0: PAL
-* ntsc = 1: NTSC
-* Return :
-* 0: the register's values is wrong
-* 1: the register's values is right
-*/
-static int register_is_right(int ntsc)
-{
- int i;
- char buf[32];
-
- vpp_i2c_read(VPP_DVI_I2C_ID, VT1625_ADDR,
- VT1625_INPUT_SELECTION, buf, 32);
-
- for(i = 0; i < 32; i++) {
- /*
- * reg 0x0E is power management register. Skip it
- * reg 0x0F is status register. it is volatile. Skip it
- */
- if(i == 14 || i == 15)
- continue;
-
-
- if(i == 0) {
- if(vt1625_colfmt == VDO_COL_FMT_YUV444) {
- if(buf[0] != 0x3A)
- break;
- } else {
- if(buf[0] != 0x03)
- break;
- }
- } else {
- if(ntsc) {
- /*
- * NTSC
- */
- if(buf[i] != vt1625_ntsc_param[i])
- break;
- } else {
- /*
- * PAL
- */
- if(buf[i] != vt1625_pal_param[i])
- break;
- }
- }
- }
-
- if(i != 32)
- return 0;
- else
- return 1;
-}
-
-#ifdef CONFIG_KERNEL
-static void vt1625_reconfig(struct work_struct *work)
-{
- int right;
-
- if(vt1625_tv_mode) {
- right = register_is_right((vt1625_tv_mode == 1) ? 1 : 0);
- if(right == 0) {
- DBG_ERR("VT1625 Reg Error, re-init the register\n");
-
- vt1625_set_tv_mode((vt1625_tv_mode == 1) ? 1 : 0);
- }
- }
-
- mod_timer(&vt1625_timer, jiffies + msecs_to_jiffies(VT1625_TIMER_INTERVAL));
-}
-
-static DECLARE_WORK(vt1625_work, vt1625_reconfig);
-
-static void vt1625_config_timer(unsigned long fcontext)
-{
- schedule_work(&vt1625_work);
-}
-
-static void init_vt1625_timer(void)
-{
- char buf[40];
- int varlen = 40;
- char *endp;
- int value, reg_monitor;
-
- reg_monitor = 0;
-
- if (wmt_getsyspara(VT1625_REG_MONITOR_ENV, buf, &varlen) == 0) {
- value = simple_strtoul(buf, &endp, 0);
- if( value != 0)
- reg_monitor = 1;
- }
-
- if(reg_monitor) {
- init_timer(&vt1625_timer);
- vt1625_timer.function = vt1625_config_timer;
- vt1625_timer.data = 0;
- } else
- vt1625_timer.function = NULL;
-
-}
-
-static void start_vt1625_timer(void)
-{
- if(vt1625_timer.function)
- mod_timer(&vt1625_timer, jiffies + msecs_to_jiffies(VT1625_TIMER_INTERVAL));
-}
-
-static void stop_vt1625_timer(void)
-{
- if(vt1625_timer.function)
- del_timer_sync(&vt1625_timer);
-}
-#endif
-
-/*
-* Function : vt1625_parse_reg_env
-* Parameter:
-* p_env : env name
-* p_reg : store the vt1625 register offset and value
-* p_regnum: register number
-* Return:
-* 0 : the env is set and the env's value is available
-* -1 : the env is Not set or the env's value is wrong
-* -12 : no memory for parsing register env
-*/
-static int vt1625_parse_reg_env(char *p_env,
- vt1625_reg_env_t *p_reg, int *p_regnum)
-{
- int i;
- char *buf;
- int buflen = 1024;
- unsigned int value;
- const char *p;
- char *endp;
-
- buf = kmalloc(buflen, GFP_KERNEL);
- if(buf == NULL) {
- DBG_ERR("kzalloc fail\n");
- return -12;
- }
-
- if(wmt_getsyspara(p_env, buf, &buflen) != 0) {
- kfree(buf);
- return -1;
- }
-
- *p_regnum = 0;
- p = buf;
-
- for(i = 0; i <= VT1625_REG_MAX_OFFSET; i++) {
- value = simple_strtoul(p, &endp, 16);
- if(value > VT1625_REG_MAX_OFFSET) {
- DBG_ERR("wrong register offset\n");
- kfree(buf);
- return -1;
- }
- (p_reg + i)->offset = value;
- /*
- * reg_offset must be followed reg_value
- * If reg_offset is NOT followed any reg_value, It is wrong format
- */
- if(*endp == '\0'|| *(endp + 1) == '\0') {
- DBG_ERR("wrong env(%s) format\n", p_env);
- kfree(buf);
- return -1;
- }
-
- p = endp + 1;
-
- value = simple_strtoul(p, &endp, 16);
- if(value > 0xFF) {
- DBG_ERR("wrong register value\n");
- kfree(buf);
- return -1;
- }
- (p_reg + i)->value = value;
- *p_regnum = *p_regnum + 1;
-
- if(*endp == '\0')
- break;
-
- p = endp + 1;
- }
-
- kfree(buf);
- return 0;
-}
-
-/*the define and struct i2c_msg were declared int linux/i2c.h*/
-void vt1625_reg_dump(void)
-{
- int i;
- char buf[256];
-
- vpp_i2c_read(VPP_DVI_I2C_ID, VT1625_ADDR, VT1625_INPUT_SELECTION,
- buf, 128);
- for (i = 0; i < 128; i += 8) {
- MSG("0x%02X : 0x%02X,0x%02X,0x%02X,0x%02X",
- i, buf[i], buf[i + 1], buf[i + 2], buf[i + 3]);
- MSG(",0x%02X,0x%02X,0x%02X,0x%02X\n",
- buf[i + 4], buf[i + 5], buf[i + 6], buf[i + 7]);
- }
-}
-
-static char vt1625_get_dac_val(enum vt1625_out_t mode)
-{
- char ret;
-
- switch (mode) {
- case VT1625_OUT_CVBS:
- ret = 0x37;
- break;
- case VT1625_OUT_VGA:
- ret = 0x38;
- break;
- case VT1625_OUT_YUV:
- default:
- ret = 0x0;
- break;
- }
- return ret;
-}
-
-static void vt1625_set_tv_mode(int ntsc)
-{
- char *p;
- char buf[10];
-
-/*
- vpp_i2c_read(VPP_DVI_I2C_ID, VT1625_ADDR,
- VT1625_INPUT_SELECTION, buf, 5);
- DBG_MSG("ntsc %d, 0x%x, 0x%x\n", ntsc, buf[0], buf[4]);
- vt1625_tv_mode = (ntsc) ? 1 : 2;
-#ifdef CONFIG_KERNEL
- if (buf[0] && (vt1625_out_mode != VT1625_OUT_MAX)) {
- if (ntsc && !(buf[4] & BIT0))
- return;
- if (!ntsc && (buf[4] & BIT0))
- return;
- }
-#endif
-*/
- vt1625_tv_mode = (ntsc) ? 1 : 2;
- if(register_is_right(ntsc))
- return;
-
- DBG_MSG("tv %s,mode %d\n", (ntsc) ? "NTSC" : "PAL", vt1625_out_mode);
-
- p = (char *)((ntsc) ? vt1625_ntsc_param : vt1625_pal_param);
- vpp_i2c_write(VPP_DVI_I2C_ID, VT1625_ADDR, VT1625_INPUT_SELECTION,
- &p[VT1625_INPUT_SELECTION], 0x71);
- if (vt1625_out_mode == VT1625_OUT_MAX) { /* not stable so no use */
- buf[0] = 0x0;
- vpp_i2c_write(VPP_DVI_I2C_ID, VT1625_ADDR,
- VT1625_POWER_MANAGEMENT, buf, 1);
- mdelay(10);
- vpp_i2c_read(VPP_DVI_I2C_ID, VT1625_ADDR,
- VT1625_STATUS, buf, 1);
- vt1625_out_mode = (buf[0] & 0x7) ?
- VT1625_OUT_CVBS : VT1625_OUT_VGA;
- DBG_MSG("get out mode %d, 0x%x\n", vt1625_out_mode, buf[0]);
- }
-
- if (vt1625_out_mode == VT1625_OUT_VGA) {
- vpp_i2c_read(VPP_DVI_I2C_ID, VT1625_ADDR,
- VT1625_SYNC_SELECTION_1, buf, 1);
- buf[0] |= 0xA0;
- vpp_i2c_write(VPP_DVI_I2C_ID, VT1625_ADDR,
- VT1625_SYNC_SELECTION_1, buf, 1);
-
- vpp_i2c_read(VPP_DVI_I2C_ID, VT1625_ADDR,
- VT1625_DAC_OVERFLOW, buf, 1);
- buf[0] |= 0x20;
- vpp_i2c_write(VPP_DVI_I2C_ID, VT1625_ADDR,
- VT1625_DAC_OVERFLOW, buf, 1);
-
- vpp_i2c_read(VPP_DVI_I2C_ID, VT1625_ADDR,
- VT1625_TEST_1, buf, 1);
- buf[0] |= 0x40;
- vpp_i2c_write(VPP_DVI_I2C_ID, VT1625_ADDR,
- VT1625_TEST_1, buf, 1);
- } else {
-#ifdef CONFIG_VT1625_INTERRUPT
- /* interrupt (VGA no work) */
- vpp_i2c_read(VPP_DVI_I2C_ID, VT1625_ADDR,
- VT1625_INT_WSS_2, buf, 1);
- buf[0] |= 0xA0; /* enable sense interrupt */
- vpp_i2c_write(VPP_DVI_I2C_ID, VT1625_ADDR,
- VT1625_INT_WSS_2, buf, 1);
-#endif
- }
-
- if (vt1625_colfmt == VDO_COL_FMT_YUV444) {
- /*
- * Force write reg0x00 and reg0x4C
- */
- buf[0] = 0x3A;
- vpp_i2c_write(VPP_DVI_I2C_ID, VT1625_ADDR,
- VT1625_INPUT_SELECTION, buf, 1);
- buf[0] = 0x08;
- vpp_i2c_write(VPP_DVI_I2C_ID, VT1625_ADDR,
- VT1625_GPO, buf, 1);
- }
-
-#ifdef CONFIG_VT1625_POWER
- buf[0] = vt1625_get_dac_val(vt1625_out_mode);
- vpp_i2c_write(VPP_DVI_I2C_ID, VT1625_ADDR,
- VT1625_POWER_MANAGEMENT, buf, 1);
-#endif
-}
-
-static int vt1625_check_plugin(int hotplug)
-{
- char buf[2];
- char cur[1];
- int plugin;
-
- /*
- * Enable VT1625 Power First
- */
- vpp_i2c_read(VPP_DVI_I2C_ID, VT1625_ADDR,
- VT1625_POWER_MANAGEMENT, cur, 1);
-
- buf[0] = vt1625_get_dac_val(vt1625_out_mode);
-
- if(cur[0] != buf[0]) {
- vpp_i2c_write(VPP_DVI_I2C_ID, VT1625_ADDR,
- VT1625_POWER_MANAGEMENT, buf, 1);
-
- msleep(10);
- }
-
- if((vt1625_out_mode == VT1625_OUT_CVBS) && vt1625_cvbs_always_turnon)
- return 1;
-
- vpp_i2c_read(VPP_DVI_I2C_ID, VT1625_ADDR, VT1625_POWER_MANAGEMENT,
- buf, 2);
- plugin = ~buf[1] & (~buf[0] & 0x3F);
- DBG_MSG("[VT1625] DAC A %d, B %d, C %d, D %d, E %d, F %d\n",
- (plugin & 0x20) ? 1 : 0, (plugin & 0x10) ? 1 : 0,
- (plugin & 0x08) ? 1 : 0, (plugin & 0x04) ? 1 : 0,
- (plugin & 0x02) ? 1 : 0, (plugin & 0x01) ? 1 : 0);
- return (plugin) ? 1 : 0;
-}
-
-static int vt1625_init(struct vout_t *vo)
-{
- char buf[40];
- int varlen = 40;
- char *endp;
- unsigned int value;
-
- DBG_MSG("\n");
- if (vt1625_tv_mode) { /* resume reinit */
- MSG("[VT1625] DVI reinit\n");
- vt1625_set_tv_mode((vt1625_tv_mode == 1) ? 1 : 0);
- if (govrh_get_dvo_enable(p_govrh2) == 0)
- govrh_set_dvo_enable(p_govrh2, VPP_FLAG_ENABLE);
- pre_plugin = 0;
- return 0;
- }
-
- vpp_i2c_read(VPP_DVI_I2C_ID, VT1625_ADDR, VT1625_VERSION_ID, buf, 1);
- if (buf[0] != 0x50) /* check version id */
- return -1;
-
- if (wmt_getsyspara("wmt.display.vt1625.mode", buf, &varlen) == 0) {
- if (memcmp(buf, "yuv", 3) == 0)
- vt1625_out_mode = VT1625_OUT_YUV;
- else if (memcmp(buf, "vga", 3) == 0)
- vt1625_out_mode = VT1625_OUT_VGA;
- else
- vt1625_out_mode = VT1625_OUT_CVBS;
- DPRINT("[VT1625] mode %d\n", vt1625_out_mode);
- } else
- vt1625_out_mode = VT1625_OUT_CVBS; /* VT1625_OUT_MAX; */
-
-#ifdef CONFIG_VM700
- vt1625_colfmt = VDO_COL_FMT_YUV444;
-#else
- vt1625_colfmt = VDO_COL_FMT_ARGB;
-#endif
- if (wmt_getsyspara("wmt.display.vt1625.colfmt", buf, &varlen) == 0) {
- if (memcmp(buf, "yuv", 3) == 0)
- vt1625_colfmt = VDO_COL_FMT_YUV444;
- else if (memcmp(buf, "rgb", 3) == 0)
- vt1625_colfmt = VDO_COL_FMT_ARGB;
- }
-
- vo->option[0] = (unsigned int) vt1625_colfmt;
- vo->option[1] = (unsigned int) VPP_DATAWIDHT_12;
-
- vpp_i2c_read(VPP_DVI_I2C_ID, VT1625_ADDR,
- VT1625_INPUT_SELECTION, buf, 5);
- if (buf[0])
- vt1625_tv_mode = (buf[4]) ? 2 : 1;
-
- p_govrh2->fb_p->csc_mode = VPP_CSC_RGB2YUV_SDTV_0_255;
-
- if (wmt_getsyspara(VT1625_CVBS_ALWAYS_TURNON, buf, &varlen) == 0) {
- value = simple_strtoul(buf, &endp, 0);
- if(value != 0)
- vt1625_cvbs_always_turnon = 1;
- else
- vt1625_cvbs_always_turnon = 0;
- } else
- vt1625_cvbs_always_turnon = 0;
-
-#ifdef CONFIG_KERNEL
- vt1625_set_tv_mode((vt1625_tv_mode == 1) ? 1 : 0);
-
- start_vt1625_timer();
-#endif
-
- MSG("[VT1625] DVI ext device\n");
- return 0;
-}
-
-static int vt1625_set_mode(unsigned int *option)
-{
-#ifdef CONFIG_VT1625_INTERRUPT
- char buf[1];
-#endif
-
- DBG_MSG("\n");
-#ifdef CONFIG_VT1625_INTERRUPT
- if (!g_vpp.dvi_int_disable) {
- vout_set_int_type(1);
- vout_set_int_enable(1);
-
- vpp_i2c_read(VPP_DVI_I2C_ID, VT1625_ADDR,
- VT1625_INT_WSS_2, buf, 1);
- buf[0] |= 0xA0; /* enable sense interrupt */
- vpp_i2c_write(VPP_DVI_I2C_ID, VT1625_ADDR,
- VT1625_INT_WSS_2, buf, 1);
- }
-#endif
- return 0;
-}
-
-static void vt1625_set_power_down(int enable)
-{
- struct vout_t *vo;
- char buf[1];
- char cur[1];
-
- /*
- bit 0-2 : DAC D/E/F - VGA
- bit 3 : DAC C - CVBS
- bit 3-5 : DAC A/B/C - YPbPr
- bit 6 : PLL
- bit 7 : IO pad
- */
- vo = vout_get_entry(VPP_VOUT_NUM_DVI);
- if (vo->status & (VPP_VOUT_STS_BLANK + VPP_VOUT_STS_POWERDN))
- enable = 1;
-
- /* power down for not support resolution */
-//#ifndef CONFIG_VT1625_INTERRUPT
- if ((vt1625_tv_mode != 0) && enable && g_vpp.dvi_int_disable)
- buf[0] = 0xFF;
- else
-//#endif
- buf[0] = vt1625_get_dac_val(vt1625_out_mode);
-
- vpp_i2c_read(VPP_DVI_I2C_ID, VT1625_ADDR,
- VT1625_POWER_MANAGEMENT, cur, 1);
-
- if (cur[0] == buf[0])
- return;
-
- DBG_MSG("enable %d,cur 0x%x,new 0x%x\n", enable, cur[0], buf[0]);
-#if 1
- if (enable == 0) {
- cur[0] &= ~0x40; /* turn on PLL */
- vpp_i2c_write(VPP_DVI_I2C_ID, VT1625_ADDR,
- VT1625_POWER_MANAGEMENT, cur, 1);
- mdelay(3);
-
- cur[0] &= ~0x80; /* turn on IO pad */
- vpp_i2c_write(VPP_DVI_I2C_ID, VT1625_ADDR,
- VT1625_POWER_MANAGEMENT, cur, 1);
- mdelay(3);
- }
-#endif
-#ifdef CONFIG_VT1625_POWER
- vpp_i2c_write(VPP_DVI_I2C_ID, VT1625_ADDR,
- VT1625_POWER_MANAGEMENT, buf, 1);
-#endif
-}
-
-static int vt1625_config(struct vout_info_t *info)
-{
- int ntsc = -1;
-
- DBG_MSG("%d,%d\n", info->resx, info->resy);
- if (info->resx == 720) {
- switch (info->resy) {
- case 480:
- ntsc = 1;
- break;
- case 576:
- ntsc = 0;
- break;
- default:
- break;
- }
- }
-
- if (ntsc != -1)
- vt1625_set_tv_mode(ntsc);
- else
- vt1625_tv_mode = 0;
- DBG_MSG("end\n");
- return 0;
-}
-
-static int vt1625_get_edid(char *buf)
-{
- return 0;
-}
-
-#ifdef CONFIG_VT1625_INTERRUPT
-static int vt1625_interrupt(void)
-{
- char buf[1];
-
- vppif_reg32_write(GPIO_BASE_ADDR + 0x4c0, 0x1 << VPP_VOINT_NO,
- VPP_VOINT_NO, 0x0); /* GPIO pull-up */
- /* interrupt */
- vpp_i2c_read(VPP_DVI_I2C_ID, VT1625_ADDR, VT1625_INT_WSS_2, buf, 1);
- DBG_MSG("0x%x\n", buf[0]);
- buf[0] &= ~0x40; /* clear interrupt */
- vpp_i2c_write(VPP_DVI_I2C_ID, VT1625_ADDR, VT1625_INT_WSS_2, buf, 1);
- return vt1625_check_plugin(1);
-}
-#endif
-
-static void vt1625_poll(void)
-{
- int plugin;
- char buf[1];
- char cur[1];
-
- if (govrh_get_dvo_enable(p_govrh2) == 0)
- govrh_set_dvo_enable(p_govrh2, VPP_FLAG_ENABLE);
-
- plugin = vt1625_check_plugin(0);
- if (plugin != pre_plugin) {
- struct vout_t *vo;
-
- vo = vout_get_entry(VPP_VOUT_NUM_DVI);
- vout_change_status(vo, VPP_VOUT_STS_PLUGIN, plugin);
-#ifdef CONFIG_KERNEL
- vpp_netlink_notify_plug(VPP_VOUT_NUM_DVI, plugin);
-#endif
- pre_plugin = plugin;
- DMSG("%d\n", plugin);
- }
-
- /*
- * Disable VT1625 Power if CVBS Not plugin
- */
- if(plugin == 0) {
- vpp_i2c_read(VPP_DVI_I2C_ID, VT1625_ADDR,
- VT1625_POWER_MANAGEMENT, cur, 1);
-
- buf[0] = 0xFF;
-
- if(cur[0] != buf[0]) {
- vpp_i2c_write(VPP_DVI_I2C_ID, VT1625_ADDR,
- VT1625_POWER_MANAGEMENT, buf, 1);
- }
- }
-}
-
-static int vt1625_suspend(void)
-{
- DMSG("\n");
-
-#ifdef CONFIG_KERNEL
- stop_vt1625_timer();
-#endif
-
- return 0;
-}
-
-static int vt1625_resume(void)
-{
- DMSG("\n");
-
-#ifdef CONFIG_KERNEL
- start_vt1625_timer();
-#endif
- return 0;
-}
-
-/*----------------------- vout device plugin ---------------------------------*/
-struct vout_dev_t vt1625_vout_dev_ops = {
- .name = "VT1625",
- .mode = VOUT_INF_DVI,
-
- .init = vt1625_init,
- .set_power_down = vt1625_set_power_down,
- .set_mode = vt1625_set_mode,
- .config = vt1625_config,
- .check_plugin = vt1625_check_plugin,
- .get_edid = vt1625_get_edid,
-#ifdef CONFIG_VT1625_INTERRUPT
- .interrupt = vt1625_interrupt,
-#endif
- .poll = vt1625_poll,
- .suspend = vt1625_suspend,
- .resume = vt1625_resume,
-};
-
-int vt1625_module_init(void)
-{
- vt1625_reg_env_t *p_reg;
- int i, ret, regnum;
-
- p_reg = kmalloc((VT1625_REG_MAX_OFFSET + 1) * sizeof(vt1625_reg_env_t),
- GFP_KERNEL);
- if(p_reg) {
- ret = vt1625_parse_reg_env(VT1625_PAL_REG_ENV, p_reg, &regnum);
- if(ret == 0) {
- for(i = 0; i < regnum; i++)
- vt1625_pal_param[(p_reg + i)->offset] =
- (p_reg + i)->value;
- }
-
- ret = vt1625_parse_reg_env(VT1625_NTSC_REG_ENV, p_reg, &regnum);
- if(ret == 0) {
- for(i = 0; i < regnum; i++)
- vt1625_ntsc_param[(p_reg + i)->offset] =
- (p_reg + i)->value;
- }
-
- kfree(p_reg);
- } else
- DBG_ERR("kzalloc fail\n");
-
-#ifdef CONFIG_KERNEL
- init_vt1625_timer();
-#endif
-
- vout_device_register(&vt1625_vout_dev_ops);
-
- return 0;
-}
-module_init(vt1625_module_init);
-/*--------------------End of Function Body -----------------------------------*/
-#undef VT1625_C
diff --git a/ANDROID_3.4.5/drivers/video/wmt/devices/vt1632.c b/ANDROID_3.4.5/drivers/video/wmt/devices/vt1632.c
deleted file mode 100755
index b3950c0f..00000000
--- a/ANDROID_3.4.5/drivers/video/wmt/devices/vt1632.c
+++ /dev/null
@@ -1,157 +0,0 @@
-/*++
- * linux/drivers/video/wmt/vt1632.c
- * WonderMedia video post processor (VPP) driver
- *
- * Copyright c 2014 WonderMedia Technologies, Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * 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.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- * WonderMedia Technologies, Inc.
- * 4F, 533, Chung-Cheng Road, Hsin-Tien, Taipei 231, R.O.C
---*/
-
-#define VT1632_C
-/* #define DEBUG */
-/*----------------------- DEPENDENCE -----------------------------------------*/
-#include "../vout.h"
-
-/*----------------------- PRIVATE MACRO --------------------------------------*/
-/* #define VT1632_XXXX xxxx *//*Example*/
-
-/*----------------------- PRIVATE CONSTANTS ----------------------------------*/
-/* #define VT1632_XXXX 1 *//*Example*/
-#define VT1632_ADDR 0x10
-
-/*----------------------- PRIVATE TYPE --------------------------------------*/
-/* typedef xxxx vt1632_xxx_t; *//*Example*/
-
-/*----------EXPORTED PRIVATE VARIABLES are defined in vt1632.h -------------*/
-/*----------------------- INTERNAL PRIVATE VARIABLES - -----------------------*/
-/* int vt1632_xxx; *//*Example*/
-static int vt1632_not_ready;
-
-/*--------------------- INTERNAL PRIVATE FUNCTIONS ---------------------------*/
-/* void vt1632_xxx(void); *//*Example*/
-
-/*----------------------- Function Body --------------------------------------*/
-
-/*the define and struct i2c_msg were declared int linux/i2c.h*/
-int vt1632_check_plugin(int hotplug)
-{
- char buf[1];
- int plugin;
-
- if (vt1632_not_ready)
- return 1;
-
- vpp_i2c_read(VPP_DVI_I2C_ID, VT1632_ADDR, 0x9, buf, 1);
- plugin = (buf[0] & 0x4) ? 1 : 0;
- DPRINT("[VT1632] DVI plug%s\n", (plugin) ? "in" : "out");
- vout_set_int_type(4);
- return plugin;
-}
-
-int vt1632_init(struct vout_t *vo)
-{
- char buf[16];
-
- vt1632_not_ready = 1;
- vpp_i2c_read(VPP_DVI_I2C_ID, VT1632_ADDR, 0x0, buf, 2);
- if ((buf[0] != 0x06) || (buf[1] != 0x11)) /* check vender id */
- return -1;
- vt1632_not_ready = 0;
-
- buf[0x0] = 0x37;
- buf[0x1] = 0x20;
- vpp_i2c_write(VPP_DVI_I2C_ID, VT1632_ADDR, 0x8, buf, 2);
- DPRINT("[VT1632] DVI ext device\n");
- return 0;
-}
-
-int vt1632_set_mode(unsigned int *option)
-{
- char buf[1];
- vpp_datawidht_t dwidth;
-
- if (vt1632_not_ready)
- return -1;
-
- dwidth = option[1] & BIT0;
- DBGMSG("vt1632_set_mode(%d)\n", (dwidth) ? 24 : 12);
-
- vpp_i2c_read(VPP_DVI_I2C_ID, VT1632_ADDR, 0x8, buf, 1);
- if (dwidth == VPP_DATAWIDHT_12) {
- buf[0] &= ~BIT2;
- buf[0] |= BIT3;
- } else {
- buf[0] |= BIT2;
- buf[0] &= ~BIT3;
- }
- vpp_i2c_write(VPP_DVI_I2C_ID, VT1632_ADDR, 0x8, buf, 1);
- return 0;
-}
-
-void vt1632_set_power_down(int enable)
-{
- char buf[1];
-
- if (vt1632_not_ready)
- return;
-
- DBGMSG("vt1632_set_power_down(%d)\n", enable);
-
- vpp_i2c_read(VPP_DVI_I2C_ID, VT1632_ADDR, 0x8, buf, 1);
- if (enable)
- buf[0] &= ~BIT0;
- else
- buf[0] |= BIT0;
- vpp_i2c_write(VPP_DVI_I2C_ID, VT1632_ADDR, 0x8, buf, 1);
-}
-
-int vt1632_config(struct vout_info_t *info)
-{
- return 0;
-}
-
-int vt1632_get_edid(char *buf)
-{
- return 0;
-}
-
-int vt1632_interrupt(void)
-{
- return vt1632_check_plugin(1);
-}
-/*----------------------- vout device plugin ---------------------------------*/
-struct vout_dev_t vt1632_vout_dev_ops = {
- .name = "VT1632",
- .mode = VOUT_INF_DVI,
-
- .init = vt1632_init,
- .set_power_down = vt1632_set_power_down,
- .set_mode = vt1632_set_mode,
- .config = vt1632_config,
- .check_plugin = vt1632_check_plugin,
- .get_edid = vt1632_get_edid,
- .interrupt = vt1632_interrupt,
-};
-
-int vt1632_module_init(void)
-{
- vout_device_register(&vt1632_vout_dev_ops);
- return 0;
-} /* End of vt1632_module_init */
-module_init(vt1632_module_init);
-/*--------------------End of Function Body -----------------------------------*/
-#undef VT1632_C