导航

    全志在线开发者论坛

    • 注册
    • 登录
    • 搜索
    • 版块
    • 话题
    • 在线文档
    • 社区主页

    D1 / D1s 可以用的 5.5元的 1280*400 长条形MIPI屏, 未验证

    MR Series
    4
    9
    4004
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • tigger
      tigger LV 7 最后由 whycan 编辑

      购买链接: https://item.taobao.com/item.htm?id=669390481038

      未验证
      未验证
      未验证

      1 条回复 最后回复 回复 引用 分享 0
      • tigger
        tigger LV 7 最后由 编辑

        某网站下载的初始化驱动 mipi_ota7290b.c:

        /*
         * drivers/video/mmp/panel/mipi_ota7290b.c
         * active panel using DSI interface to do init
         *
         * Copyright (C) 2013 Marvell Technology Group Ltd.
         * Authors: Yonghai Huang <huangyh@marvell.com>
         *		Xiaolong Ye <yexl@marvell.com>
         *          Guoqing Li <ligq@marvell.com>
         *          Lisa Du <cldu@marvell.com>
         *          Zhou Zhu <zzhu3@marvell.com>
         *          Jing Xiang <jxiang@marvell.com>
         *
         * 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/>.
         *
         */
        
        #include <linux/module.h>
        #include <linux/moduleparam.h>
        #include <linux/kernel.h>
        #include <linux/errno.h>
        #include <linux/string.h>
        #include <linux/delay.h>
        #include <linux/platform_device.h>
        #include <linux/err.h>
        #include <linux/of.h>
        #include <linux/kthread.h>
        #include <linux/of_gpio.h>
        #include <linux/regulator/consumer.h>
        #include <linux/slab.h>
        #include <linux/fb.h>
        #include <video/mmp_disp.h>
        #include <video/mipi_display.h>
        #include <video/mmp_esd.h>
        
        #define TRACE pr_err("@@ %s, %d\n", __func__, __LINE__);
        
        static int vcom_pwm = 0;
        //static struct task_struct *vcom_task = NULL;
        
        struct ota7290b_plat_data {
        	struct mmp_panel *panel;
        	u32 esd_enable;
        	int vcom_pin;
        	int power_pin;
        	void (*plat_onoff)(int status);
        	void (*plat_set_backlight)(struct mmp_panel *panel, int level);
        };
        
        static char exit_sleep[] = {0x11};
        static char display_on[] = {0x29};
        
        #define OTA7290B_ID 0xE3
        #define HSM 0
        #define LPM 1
        
        
        static char ota7290b_on_cmd0[] = {0xB0,0x5A};
        
        static char ota7290b_on_cmd1[] = {0xB1,0x00};
        static char ota7290b_on_cmd2[] = {0x89,0x01};
        static char ota7290b_on_cmd3[] = {0x91,0x17};
        static char ota7290b_on_cmd4[] = {0xB1,0x03};
        static char ota7290b_on_cmd5[] = {0x2C,0x28};
        
        static char ota7290b_on_cmd6[] = {0x00,0xB7};
        static char ota7290b_on_cmd7[] = {0x01,0x1B};
        static char ota7290b_on_cmd8[] = {0x02,0x00};
        static char ota7290b_on_cmd9[] = {0x03,0x00};
        static char ota7290b_on_cmd10[] = {0x04,0x00};
        static char ota7290b_on_cmd11[] = {0x05,0x00};
        static char ota7290b_on_cmd12[] = {0x06,0x00};
        static char ota7290b_on_cmd13[] = {0x07,0x00};
        static char ota7290b_on_cmd14[] = {0x08,0x00};
        static char ota7290b_on_cmd15[] = {0x09,0x00};
        static char ota7290b_on_cmd16[] = {0x0A,0x01};
        static char ota7290b_on_cmd17[] = {0x0B,0x01};
        static char ota7290b_on_cmd18[] = {0x0C,0x00};
        static char ota7290b_on_cmd19[] = {0x0D,0x00};
        static char ota7290b_on_cmd20[] = {0x0E,0x24};
        static char ota7290b_on_cmd21[] = {0x0F,0x1C};
        static char ota7290b_on_cmd22[] = {0x10,0xC9};
        static char ota7290b_on_cmd23[] = {0x11,0x60};
        static char ota7290b_on_cmd24[] = {0x12,0x70};
        static char ota7290b_on_cmd25[] = {0x13,0x01};
        static char ota7290b_on_cmd26[] = {0x14,0xE7};
        static char ota7290b_on_cmd27[] = {0x15,0xFF};
        static char ota7290b_on_cmd28[] = {0x16,0x3D};
        static char ota7290b_on_cmd29[] = {0x17,0x0E};
        static char ota7290b_on_cmd30[] = {0x18,0x01};
        static char ota7290b_on_cmd31[] = {0x19,0x00};
        static char ota7290b_on_cmd32[] = {0x1A,0x00};
        static char ota7290b_on_cmd33[] = {0x1B,0xFC};
        static char ota7290b_on_cmd34[] = {0x1C,0x0B};
        static char ota7290b_on_cmd35[] = {0x1D,0xA0};
        static char ota7290b_on_cmd36[] = {0x1E,0x03};
        static char ota7290b_on_cmd37[] = {0x1F,0x04};
        static char ota7290b_on_cmd38[] = {0x20,0x0C};
        static char ota7290b_on_cmd39[] = {0x21,0x00};
        static char ota7290b_on_cmd40[] = {0x22,0x04};
        static char ota7290b_on_cmd41[] = {0x23,0x81};
        static char ota7290b_on_cmd42[] = {0x24,0x1F};
        static char ota7290b_on_cmd43[] = {0x25,0x10};
        static char ota7290b_on_cmd44[] = {0x26,0x9B};
        static char ota7290b_on_cmd45[] = {0x2D,0x01};
        static char ota7290b_on_cmd46[] = {0x2E,0x84};
        static char ota7290b_on_cmd47[] = {0x2F,0x00};
        static char ota7290b_on_cmd48[] = {0x30,0x02};
        static char ota7290b_on_cmd49[] = {0x31,0x08};
        static char ota7290b_on_cmd50[] = {0x32,0x01};
        static char ota7290b_on_cmd51[] = {0x33,0x1C};
        static char ota7290b_on_cmd52[] = {0x34,0x40};
        static char ota7290b_on_cmd53[] = {0x35,0xFF};
        static char ota7290b_on_cmd54[] = {0x36,0xFF};
        static char ota7290b_on_cmd55[] = {0x37,0xFF};
        static char ota7290b_on_cmd56[] = {0x38,0xFF};
        static char ota7290b_on_cmd57[] = {0x39,0xFF};
        static char ota7290b_on_cmd58[] = {0x3A,0x05};
        static char ota7290b_on_cmd59[] = {0x3B,0x00};
        static char ota7290b_on_cmd60[] = {0x3C,0x00};
        static char ota7290b_on_cmd61[] = {0x3D,0x00};
        static char ota7290b_on_cmd62[] = {0x3E,0xCF};
        static char ota7290b_on_cmd63[] = {0x3F,0x84};
        static char ota7290b_on_cmd64[] = {0x40,0x2F};
        static char ota7290b_on_cmd65[] = {0x41,0xFC};
        static char ota7290b_on_cmd66[] = {0x42,0x01};
        static char ota7290b_on_cmd67[] = {0x43,0x40};
        static char ota7290b_on_cmd68[] = {0x44,0x05};
        static char ota7290b_on_cmd69[] = {0x45,0xE8};
        static char ota7290b_on_cmd70[] = {0x46,0x16};
        static char ota7290b_on_cmd71[] = {0x47,0x00};
        static char ota7290b_on_cmd72[] = {0x48,0x00};
        static char ota7290b_on_cmd73[] = {0x49,0x88};
        static char ota7290b_on_cmd74[] = {0x4A,0x08};
        static char ota7290b_on_cmd75[] = {0x4B,0x05};
        static char ota7290b_on_cmd76[] = {0x4C,0x03};
        static char ota7290b_on_cmd77[] = {0x4D,0xD0};
        static char ota7290b_on_cmd78[] = {0x4E,0x13};
        static char ota7290b_on_cmd79[] = {0x4F,0xFF};
        static char ota7290b_on_cmd80[] = {0x50,0x0A};
        static char ota7290b_on_cmd81[] = {0x51,0x53};
        static char ota7290b_on_cmd82[] = {0x52,0x26};
        static char ota7290b_on_cmd83[] = {0x53,0x22};
        static char ota7290b_on_cmd84[] = {0x54,0x09};
        static char ota7290b_on_cmd85[] = {0x55,0x22};
        static char ota7290b_on_cmd86[] = {0x56,0x00};
        static char ota7290b_on_cmd87[] = {0x57,0x1C};
        static char ota7290b_on_cmd88[] = {0x58,0x03};
        static char ota7290b_on_cmd89[] = {0x59,0x3F};
        static char ota7290b_on_cmd90[] = {0x5A,0x28};
        static char ota7290b_on_cmd91[] = {0x5B,0x01};
        static char ota7290b_on_cmd92[] = {0x5C,0xCC};
        static char ota7290b_on_cmd93[] = {0x5D,0x21};
        static char ota7290b_on_cmd94[] = {0x5E,0x84};
        static char ota7290b_on_cmd95[] = {0x5F,0x10};
        static char ota7290b_on_cmd96[] = {0x60,0x42};
        static char ota7290b_on_cmd97[] = {0x61,0x08};
        static char ota7290b_on_cmd98[] = {0x62,0x21};
        static char ota7290b_on_cmd99[] = {0x63,0x84};
        static char ota7290b_on_cmd100[] = {0x64,0x80};
        static char ota7290b_on_cmd101[] = {0x65,0x0C};
        static char ota7290b_on_cmd102[] = {0x66,0x74};
        static char ota7290b_on_cmd103[] = {0x67,0x4C};
        static char ota7290b_on_cmd104[] = {0x68,0x09};
        static char ota7290b_on_cmd105[] = {0x69,0x12};
        static char ota7290b_on_cmd106[] = {0x6A,0x42};
        static char ota7290b_on_cmd107[] = {0x6B,0x08};
        static char ota7290b_on_cmd108[] = {0x6C,0x21};
        static char ota7290b_on_cmd109[] = {0x6D,0x84};
        static char ota7290b_on_cmd110[] = {0x6E,0x10};
        static char ota7290b_on_cmd111[] = {0x6F,0x42};
        static char ota7290b_on_cmd112[] = {0x70,0x08};
        static char ota7290b_on_cmd113[] = {0x71,0xE9};
        static char ota7290b_on_cmd114[] = {0x72,0xC4};
        static char ota7290b_on_cmd115[] = {0x73,0xD7};
        static char ota7290b_on_cmd116[] = {0x74,0xD6};
        static char ota7290b_on_cmd117[] = {0x75,0x28};
        static char ota7290b_on_cmd118[] = {0x76,0x00};
        static char ota7290b_on_cmd119[] = {0x77,0x00};
        static char ota7290b_on_cmd120[] = {0x78,0x0F};
        static char ota7290b_on_cmd121[] = {0x79,0xE0};
        static char ota7290b_on_cmd122[] = {0x7A,0x01};
        static char ota7290b_on_cmd123[] = {0x7B,0xFF};
        static char ota7290b_on_cmd124[] = {0x7C,0xFF};
        static char ota7290b_on_cmd125[] = {0x7D,0x0F};
        static char ota7290b_on_cmd126[] = {0x7E,0x41};
        static char ota7290b_on_cmd127[] = {0x7F,0xFE};
        
        static char ota7290b_on_cmd128[] = {0xB1,0x02};
        static char ota7290b_on_cmd129[] = {0x00,0xFF};
        static char ota7290b_on_cmd130[] = {0x01,0x05};
        static char ota7290b_on_cmd131[] = {0x02,0xF0};
        static char ota7290b_on_cmd132[] = {0x03,0x00};
        static char ota7290b_on_cmd133[] = {0x04,0x94};
        static char ota7290b_on_cmd134[] = {0x05,0x48};
        static char ota7290b_on_cmd135[] = {0x06,0xC8};
        static char ota7290b_on_cmd136[] = {0x07,0x0A};
        static char ota7290b_on_cmd137[] = {0x08,0x00};
        static char ota7290b_on_cmd138[] = {0x09,0x00};
        static char ota7290b_on_cmd139[] = {0x0A,0x00};
        static char ota7290b_on_cmd140[] = {0x0B,0x10};
        static char ota7290b_on_cmd141[] = {0x0C,0xE6};
        static char ota7290b_on_cmd142[] = {0x0D,0x0D};
        static char ota7290b_on_cmd143[] = {0x0F,0x00};
        static char ota7290b_on_cmd144[] = {0x10,0xF9};
        static char ota7290b_on_cmd145[] = {0x11,0x4D};
        static char ota7290b_on_cmd146[] = {0x12,0x9E};
        static char ota7290b_on_cmd147[] = {0x13,0x8F};
        static char ota7290b_on_cmd148[] = {0x14,0xDF};
        static char ota7290b_on_cmd149[] = {0x15,0x15};
        static char ota7290b_on_cmd150[] = {0x16,0xE4};
        static char ota7290b_on_cmd151[] = {0x17,0x6A};
        static char ota7290b_on_cmd152[] = {0x18,0xAB};
        static char ota7290b_on_cmd153[] = {0x19,0xD7};
        static char ota7290b_on_cmd154[] = {0x1A,0x78};
        static char ota7290b_on_cmd155[] = {0x1B,0xFE};
        static char ota7290b_on_cmd156[] = {0x1C,0xFF};
        static char ota7290b_on_cmd157[] = {0x1D,0xFF};
        static char ota7290b_on_cmd158[] = {0x1E,0xFF};
        static char ota7290b_on_cmd159[] = {0x1F,0xFF};
        static char ota7290b_on_cmd160[] = {0x20,0xFF};
        static char ota7290b_on_cmd161[] = {0x21,0xFF};
        static char ota7290b_on_cmd162[] = {0x22,0xFF};
        static char ota7290b_on_cmd163[] = {0x23,0xFF};
        static char ota7290b_on_cmd164[] = {0x24,0xFF};
        static char ota7290b_on_cmd165[] = {0x25,0xFF};
        static char ota7290b_on_cmd166[] = {0x26,0xFF};
        static char ota7290b_on_cmd167[] = {0x27,0x1F};
        static char ota7290b_on_cmd168[] = {0x28,0xFF};
        static char ota7290b_on_cmd169[] = {0x29,0xFF};
        static char ota7290b_on_cmd170[] = {0x2A,0xFF};
        static char ota7290b_on_cmd171[] = {0x2B,0xFF};
        static char ota7290b_on_cmd172[] = {0x2C,0xFF};
        static char ota7290b_on_cmd173[] = {0x2D,0x07};
        static char ota7290b_on_cmd174[] = {0x33,0x3F};
        static char ota7290b_on_cmd175[] = {0x35,0x7F};
        static char ota7290b_on_cmd176[] = {0x36,0x3F};
        static char ota7290b_on_cmd177[] = {0x38,0xFF};
        static char ota7290b_on_cmd178[] = {0x3A,0x80};
        static char ota7290b_on_cmd179[] = {0x3B,0x01};
        static char ota7290b_on_cmd180[] = {0x3C,0x00};
        static char ota7290b_on_cmd181[] = {0x3D,0x2F};
        static char ota7290b_on_cmd182[] = {0x3E,0x00};
        static char ota7290b_on_cmd183[] = {0x3F,0xE0};
        static char ota7290b_on_cmd184[] = {0x40,0x05};
        static char ota7290b_on_cmd185[] = {0x41,0x00};
        static char ota7290b_on_cmd186[] = {0x42,0xBC};
        static char ota7290b_on_cmd187[] = {0x43,0x00};
        static char ota7290b_on_cmd188[] = {0x44,0x80};
        static char ota7290b_on_cmd189[] = {0x45,0x07};
        static char ota7290b_on_cmd190[] = {0x46,0x00};
        static char ota7290b_on_cmd191[] = {0x47,0x00};
        static char ota7290b_on_cmd192[] = {0x48,0x9B};
        static char ota7290b_on_cmd193[] = {0x49,0xD2};
        static char ota7290b_on_cmd194[] = {0x4A,0xC1};
        static char ota7290b_on_cmd195[] = {0x4B,0x83};
        static char ota7290b_on_cmd196[] = {0x4C,0x17};
        static char ota7290b_on_cmd197[] = {0x4D,0xC0};
        static char ota7290b_on_cmd198[] = {0x4E,0x0F};
        static char ota7290b_on_cmd199[] = {0x4F,0xF1};
        static char ota7290b_on_cmd200[] = {0x50,0x78};
        static char ota7290b_on_cmd201[] = {0x51,0x7A};
        static char ota7290b_on_cmd202[] = {0x52,0x34};
        static char ota7290b_on_cmd203[] = {0x53,0x99};
        static char ota7290b_on_cmd204[] = {0x54,0xA2};
        static char ota7290b_on_cmd205[] = {0x55,0x02};
        static char ota7290b_on_cmd206[] = {0x56,0x14};
        static char ota7290b_on_cmd207[] = {0x57,0xB8};
        static char ota7290b_on_cmd208[] = {0x58,0xDC};
        static char ota7290b_on_cmd209[] = {0x59,0xD4};
        static char ota7290b_on_cmd210[] = {0x5A,0xEF};
        static char ota7290b_on_cmd211[] = {0x5B,0xF7};
        static char ota7290b_on_cmd212[] = {0x5C,0xFB};
        static char ota7290b_on_cmd213[] = {0x5D,0xFD};
        static char ota7290b_on_cmd214[] = {0x5E,0x7E};
        static char ota7290b_on_cmd215[] = {0x5F,0xBF};
        static char ota7290b_on_cmd216[] = {0x60,0xEF};
        static char ota7290b_on_cmd217[] = {0x61,0xE6};
        static char ota7290b_on_cmd218[] = {0x62,0x76};
        static char ota7290b_on_cmd219[] = {0x63,0x73};
        static char ota7290b_on_cmd220[] = {0x64,0xBB};
        static char ota7290b_on_cmd221[] = {0x65,0xDD};
        static char ota7290b_on_cmd222[] = {0x66,0x6E};
        static char ota7290b_on_cmd223[] = {0x67,0x37};
        static char ota7290b_on_cmd224[] = {0x68,0x8C};
        static char ota7290b_on_cmd225[] = {0x69,0x08};
        static char ota7290b_on_cmd226[] = {0x6A,0x31};
        static char ota7290b_on_cmd227[] = {0x6B,0xB8};
        static char ota7290b_on_cmd228[] = {0x6C,0xB8};
        static char ota7290b_on_cmd229[] = {0x6D,0xB8};
        static char ota7290b_on_cmd230[] = {0x6E,0xB8};
        static char ota7290b_on_cmd231[] = {0x6F,0xB8};
        static char ota7290b_on_cmd232[] = {0x70,0x5C};
        static char ota7290b_on_cmd233[] = {0x71,0x2E};
        static char ota7290b_on_cmd234[] = {0x72,0x17};
        static char ota7290b_on_cmd235[] = {0x73,0x00};
        static char ota7290b_on_cmd236[] = {0x74,0x00};
        static char ota7290b_on_cmd237[] = {0x75,0x00};
        static char ota7290b_on_cmd238[] = {0x76,0x00};
        static char ota7290b_on_cmd239[] = {0x77,0x00};
        static char ota7290b_on_cmd240[] = {0x78,0x00};
        static char ota7290b_on_cmd241[] = {0x79,0x00};
        static char ota7290b_on_cmd242[] = {0x7A,0xDC};
        static char ota7290b_on_cmd243[] = {0x7B,0xDC};
        static char ota7290b_on_cmd244[] = {0x7C,0xDC};
        static char ota7290b_on_cmd245[] = {0x7D,0xDC};
        static char ota7290b_on_cmd246[] = {0x7E,0xDC};
        static char ota7290b_on_cmd247[] = {0x7F,0x6E};
        static char ota7290b_on_cmd248[] = {0x0B,0x00};
        static char ota7290b_on_cmd249[] = {0xB1,0x03};
        static char ota7290b_on_cmd250[] = {0x2C,0x2C};
        static char ota7290b_on_cmd251[] = {0xB1,0x00};
        static char ota7290b_on_cmd252[] = {0x89,0x03};
        
        
        static struct mmp_dsi_cmd_desc ota7290b_cpt_display_on_cmds[] = {
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd0),ota7290b_on_cmd0},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd1),ota7290b_on_cmd1},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd2),ota7290b_on_cmd2},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd3),ota7290b_on_cmd3},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd4),ota7290b_on_cmd4},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd5),ota7290b_on_cmd5},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd6),ota7290b_on_cmd6},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd7),ota7290b_on_cmd7},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd8),ota7290b_on_cmd8},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd9),ota7290b_on_cmd9},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd10),ota7290b_on_cmd10},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd11),ota7290b_on_cmd11},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd12),ota7290b_on_cmd12},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd13),ota7290b_on_cmd13},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd14),ota7290b_on_cmd14},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd15),ota7290b_on_cmd15},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd16),ota7290b_on_cmd16},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd17),ota7290b_on_cmd17},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd18),ota7290b_on_cmd18},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd19),ota7290b_on_cmd19},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd20),ota7290b_on_cmd20},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd21),ota7290b_on_cmd21},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd22),ota7290b_on_cmd22},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd23),ota7290b_on_cmd23},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd24),ota7290b_on_cmd24},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd25),ota7290b_on_cmd25},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd26),ota7290b_on_cmd26},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd27),ota7290b_on_cmd27},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd28),ota7290b_on_cmd28},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd29),ota7290b_on_cmd29},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd30),ota7290b_on_cmd30},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd31),ota7290b_on_cmd31},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd32),ota7290b_on_cmd32},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd33),ota7290b_on_cmd33},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd34),ota7290b_on_cmd34},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd35),ota7290b_on_cmd35},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd36),ota7290b_on_cmd36},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd37),ota7290b_on_cmd37},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd38),ota7290b_on_cmd38},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd39),ota7290b_on_cmd39},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd40),ota7290b_on_cmd40},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd41),ota7290b_on_cmd41},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd42),ota7290b_on_cmd42},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd43),ota7290b_on_cmd43},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd44),ota7290b_on_cmd44},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd45),ota7290b_on_cmd45},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd46),ota7290b_on_cmd46},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd47),ota7290b_on_cmd47},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd48),ota7290b_on_cmd48},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd49),ota7290b_on_cmd49},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd50),ota7290b_on_cmd50},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd51),ota7290b_on_cmd51},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd52),ota7290b_on_cmd52},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd53),ota7290b_on_cmd53},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd54),ota7290b_on_cmd54},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd55),ota7290b_on_cmd55},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd56),ota7290b_on_cmd56},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd57),ota7290b_on_cmd57},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd58),ota7290b_on_cmd58},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd59),ota7290b_on_cmd59},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd60),ota7290b_on_cmd60},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd61),ota7290b_on_cmd61},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd62),ota7290b_on_cmd62},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd63),ota7290b_on_cmd63},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd64),ota7290b_on_cmd64},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd65),ota7290b_on_cmd65},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd66),ota7290b_on_cmd66},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd67),ota7290b_on_cmd67},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd68),ota7290b_on_cmd68},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd69),ota7290b_on_cmd69},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd70),ota7290b_on_cmd70},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd71),ota7290b_on_cmd71},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd72),ota7290b_on_cmd72},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd73),ota7290b_on_cmd73},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd74),ota7290b_on_cmd74},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd75),ota7290b_on_cmd75},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd76),ota7290b_on_cmd76},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd77),ota7290b_on_cmd77},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd78),ota7290b_on_cmd78},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd79),ota7290b_on_cmd79},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd80),ota7290b_on_cmd80},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd81),ota7290b_on_cmd81},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd82),ota7290b_on_cmd82},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd83),ota7290b_on_cmd83},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd84),ota7290b_on_cmd84},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd85),ota7290b_on_cmd85},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd86),ota7290b_on_cmd86},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd87),ota7290b_on_cmd87},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd88),ota7290b_on_cmd88},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd89),ota7290b_on_cmd89},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd90),ota7290b_on_cmd90},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd91),ota7290b_on_cmd91},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd92),ota7290b_on_cmd92},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd93),ota7290b_on_cmd93},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd94),ota7290b_on_cmd94},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd95),ota7290b_on_cmd95},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd96),ota7290b_on_cmd96},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd97),ota7290b_on_cmd97},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd98),ota7290b_on_cmd98},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd99),ota7290b_on_cmd99},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd100),ota7290b_on_cmd100},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd101),ota7290b_on_cmd101},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd102),ota7290b_on_cmd102},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd103),ota7290b_on_cmd103},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd104),ota7290b_on_cmd104},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd105),ota7290b_on_cmd105},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd106),ota7290b_on_cmd106},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd107),ota7290b_on_cmd107},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd108),ota7290b_on_cmd108},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd109),ota7290b_on_cmd109},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd110),ota7290b_on_cmd110},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd111),ota7290b_on_cmd111},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd112),ota7290b_on_cmd112},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd113),ota7290b_on_cmd113},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd114),ota7290b_on_cmd114},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd115),ota7290b_on_cmd115},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd116),ota7290b_on_cmd116},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd117),ota7290b_on_cmd117},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd118),ota7290b_on_cmd118},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd119),ota7290b_on_cmd119},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd120),ota7290b_on_cmd120},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd121),ota7290b_on_cmd121},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd122),ota7290b_on_cmd122},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd123),ota7290b_on_cmd123},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd124),ota7290b_on_cmd124},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd125),ota7290b_on_cmd125},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd126),ota7290b_on_cmd126},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd127),ota7290b_on_cmd127},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd128),ota7290b_on_cmd128},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd129),ota7290b_on_cmd129},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd130),ota7290b_on_cmd130},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd131),ota7290b_on_cmd131},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd132),ota7290b_on_cmd132},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd133),ota7290b_on_cmd133},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd134),ota7290b_on_cmd134},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd135),ota7290b_on_cmd135},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd136),ota7290b_on_cmd136},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd137),ota7290b_on_cmd137},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd138),ota7290b_on_cmd138},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd139),ota7290b_on_cmd139},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd140),ota7290b_on_cmd140},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd141),ota7290b_on_cmd141},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd142),ota7290b_on_cmd142},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd143),ota7290b_on_cmd143},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd144),ota7290b_on_cmd144},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd145),ota7290b_on_cmd145},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd146),ota7290b_on_cmd146},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd147),ota7290b_on_cmd147},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd148),ota7290b_on_cmd148},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd149),ota7290b_on_cmd149},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd150),ota7290b_on_cmd150},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd151),ota7290b_on_cmd151},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd152),ota7290b_on_cmd152},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd153),ota7290b_on_cmd153},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd154),ota7290b_on_cmd154},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd155),ota7290b_on_cmd155},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd156),ota7290b_on_cmd156},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd157),ota7290b_on_cmd157},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd158),ota7290b_on_cmd158},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd159),ota7290b_on_cmd159},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd160),ota7290b_on_cmd160},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd161),ota7290b_on_cmd161},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd162),ota7290b_on_cmd162},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd163),ota7290b_on_cmd163},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd164),ota7290b_on_cmd164},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd165),ota7290b_on_cmd165},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd166),ota7290b_on_cmd166},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd167),ota7290b_on_cmd167},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd168),ota7290b_on_cmd168},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd169),ota7290b_on_cmd169},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd170),ota7290b_on_cmd170},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd171),ota7290b_on_cmd171},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd172),ota7290b_on_cmd172},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd173),ota7290b_on_cmd173},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd174),ota7290b_on_cmd174},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd175),ota7290b_on_cmd175},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd176),ota7290b_on_cmd176},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd177),ota7290b_on_cmd177},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd178),ota7290b_on_cmd178},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd179),ota7290b_on_cmd179},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd180),ota7290b_on_cmd180},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd181),ota7290b_on_cmd181},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd182),ota7290b_on_cmd182},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd183),ota7290b_on_cmd183},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd184),ota7290b_on_cmd184},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd185),ota7290b_on_cmd185},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd186),ota7290b_on_cmd186},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd187),ota7290b_on_cmd187},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd188),ota7290b_on_cmd188},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd189),ota7290b_on_cmd189},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd190),ota7290b_on_cmd190},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd191),ota7290b_on_cmd191},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd192),ota7290b_on_cmd192},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd193),ota7290b_on_cmd193},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd194),ota7290b_on_cmd194},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd195),ota7290b_on_cmd195},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd196),ota7290b_on_cmd196},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd197),ota7290b_on_cmd197},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd198),ota7290b_on_cmd198},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd199),ota7290b_on_cmd199},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd200),ota7290b_on_cmd200},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd201),ota7290b_on_cmd201},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd202),ota7290b_on_cmd202},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd203),ota7290b_on_cmd203},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd204),ota7290b_on_cmd204},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd205),ota7290b_on_cmd205},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd206),ota7290b_on_cmd206},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd207),ota7290b_on_cmd207},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd208),ota7290b_on_cmd208},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd209),ota7290b_on_cmd209},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd210),ota7290b_on_cmd210},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd211),ota7290b_on_cmd211},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd212),ota7290b_on_cmd212},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd213),ota7290b_on_cmd213},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd214),ota7290b_on_cmd214},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd215),ota7290b_on_cmd215},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd216),ota7290b_on_cmd216},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd217),ota7290b_on_cmd217},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd218),ota7290b_on_cmd218},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd219),ota7290b_on_cmd219},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd220),ota7290b_on_cmd220},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd221),ota7290b_on_cmd221},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd222),ota7290b_on_cmd222},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd223),ota7290b_on_cmd223},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd224),ota7290b_on_cmd224},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd225),ota7290b_on_cmd225},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd226),ota7290b_on_cmd226},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd227),ota7290b_on_cmd227},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd228),ota7290b_on_cmd228},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd229),ota7290b_on_cmd229},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd230),ota7290b_on_cmd230},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd231),ota7290b_on_cmd231},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd232),ota7290b_on_cmd232},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd233),ota7290b_on_cmd233},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd234),ota7290b_on_cmd234},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd235),ota7290b_on_cmd235},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd236),ota7290b_on_cmd236},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd237),ota7290b_on_cmd237},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd238),ota7290b_on_cmd238},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd239),ota7290b_on_cmd239},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd240),ota7290b_on_cmd240},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd241),ota7290b_on_cmd241},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd242),ota7290b_on_cmd242},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd243),ota7290b_on_cmd243},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd244),ota7290b_on_cmd244},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd245),ota7290b_on_cmd245},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd246),ota7290b_on_cmd246},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd247),ota7290b_on_cmd247},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd248),ota7290b_on_cmd248},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd249),ota7290b_on_cmd249},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd250),ota7290b_on_cmd250},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd251),ota7290b_on_cmd251},
        {MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_on_cmd252),ota7290b_on_cmd252},
        {MIPI_DSI_DCS_SHORT_WRITE, 1, 120, sizeof(exit_sleep),exit_sleep},
        {MIPI_DSI_DCS_SHORT_WRITE, 1, 150, sizeof(display_on),display_on},
        };
        
        static char enter_sleep[] = {0x10};
        static char display_off[] = {0x28};
        
        static struct mmp_dsi_cmd_desc ota7290b_display_off_cmds[] = {
        
        	{MIPI_DSI_DCS_SHORT_WRITE, 1, 10,
        		sizeof(display_off), display_off},
        			{MIPI_DSI_DCS_SHORT_WRITE, 1, 200,
        		sizeof(enter_sleep), enter_sleep},
        };
        
        static void ota7290b_panel_on(struct mmp_panel *panel, int status)
        {
        	if (status) {
        		mmp_panel_dsi_ulps_set_on(panel, 0);
        		mmp_panel_dsi_tx_cmd_array(panel, ota7290b_cpt_display_on_cmds,
        			ARRAY_SIZE(ota7290b_cpt_display_on_cmds));
        	} else {
        		mmp_panel_dsi_tx_cmd_array(panel, ota7290b_display_off_cmds,
        			ARRAY_SIZE(ota7290b_display_off_cmds));
        		mmp_panel_dsi_ulps_set_on(panel, 1);
        	}
        }
        
        static ssize_t vcom_pwm_show(struct device *dev,
        		struct device_attribute *attr, char *buf)
        {
        	return sprintf(buf, "%d\n", vcom_pwm);
        }
        
        static ssize_t vcom_pwm_store(struct device *dev,
        		struct device_attribute *attr,
        		const char *buf, size_t count)
        {
        	unsigned long data = 0;
        	int error = 0;
        
        	error = strict_strtoul(buf, 10, &data);
        	if (error)
        		return error;
        
        	if((data < 0)||(data > 100))
        		return -EINVAL;
        
        	vcom_pwm = data;
        
        	return count;
        }
        
        
        static DEVICE_ATTR(vcom, S_IRUGO|S_IWUSR|S_IWGRP|S_IWOTH,
        			vcom_pwm_show    , vcom_pwm_store);
        
        static struct attribute *vcom_attributes[] = {
        	&dev_attr_vcom.attr,
        	NULL
        };
        
        static struct attribute_group vcom_attribute_group= {
        	.attrs = vcom_attributes
        };
        
        
        int vcom_task_func(void *data)
        {
        	int interval = 0;
        	struct ota7290b_plat_data *plat = data;
        
        	if((vcom_pwm >100)||(vcom_pwm < 0)){
        		return -EFAULT;
        	}
        	while(!kthread_should_stop()){
        		set_current_state(TASK_UNINTERRUPTIBLE);
        
        		if(vcom_pwm)
        		{
        			interval = vcom_pwm/5;
        			gpio_set_value(plat->vcom_pin, 1);
        			msleep(interval);
        //			msleep(vcom_freq);
        			gpio_set_value(plat->vcom_pin, 0);
        //			msleep(vcom_freq);
        			msleep(20 - interval);
        		}
        		else{
        			gpio_set_value(plat->vcom_pin, 0);
        			schedule_timeout(1*HZ);
        		}
        	}
        	return 0;
        }
        
        #ifdef CONFIG_OF
        static void ota7290b_panel_power(struct mmp_panel *panel, int skip_on, int on)
        {
        	static struct regulator *lcd_iovdd, *lcd_avdd, *lcd_ldo;
        	struct ota7290b_plat_data *plat = panel->plat_data;
        	int lcd_rst_n, ret = 0;
        
        	pr_debug("%s on=%d skip=%d +\n", __func__, on, skip_on);
        
        
        	lcd_rst_n = of_get_named_gpio(panel->dev->of_node, "rst_gpio", 0);
        	if (lcd_rst_n < 0) {
        		pr_err("%s: of_get_named_gpio failed\n", __func__);
        		return;
        	}
        
        	if (gpio_request(lcd_rst_n, "lcd reset gpio")) {
        		pr_err("gpio %d request failed\n", lcd_rst_n);
        		return;
        	}
        
        	/* FIXME: LCD_IOVDD, 1.8V from buck2 */
        	if (panel->is_iovdd && (!lcd_iovdd)) {
        		lcd_iovdd = regulator_get(panel->dev, "iovdd");
        		if (IS_ERR(lcd_iovdd)) {
        			pr_err("%s regulator get error!\n", __func__);
        			ret = -EIO;
        			goto regu_lcd_iovdd;
        		}
        	}
        	if (panel->is_avdd && (!lcd_avdd)) {
        		lcd_avdd = regulator_get(panel->dev, "avdd");
        		if (IS_ERR(lcd_avdd)) {
        			pr_err("%s regulator get error!\n", __func__);
        			ret = -EIO;
        			goto regu_lcd_iovdd;
        		}
        	}
        	
        		if (panel->is_ldo && (!lcd_ldo)) {
        		lcd_ldo = regulator_get(panel->dev, "ldo");
        		if (IS_ERR(lcd_ldo)) {
        			pr_err("%s regulator get error!\n", __func__);
        			ret = -EIO;
        			goto regu_lcd_iovdd;
        		}
        	}
        
        	if (on) {
        
        		if (panel->is_avdd && lcd_avdd) {
        			regulator_set_voltage(lcd_avdd, 3300000, 3300000);
        			ret = regulator_enable(lcd_avdd);
        			if (ret < 0)
        				goto regu_lcd_iovdd;
        		}
        
        		if (panel->is_iovdd && lcd_iovdd) {
        			regulator_set_voltage(lcd_iovdd, 1800000, 1800000);
        			ret = regulator_enable(lcd_iovdd);
        			if (ret < 0)
        				goto regu_lcd_iovdd;
        		}
        		usleep_range(20000, 21000);
        		
        	 	if (panel->is_ldo && lcd_ldo) {
        			regulator_set_voltage(lcd_ldo, 1800000, 1800000);
        			ret = regulator_enable(lcd_ldo);
        			if (ret < 0)
        				goto regu_lcd_iovdd;
        		}
        		usleep_range(15000, 16000);
        	
        		gpio_set_value(plat->power_pin, 1);
        //		vcom_pwm = 85;
        		gpio_set_value(plat->vcom_pin, 1);
        
        		if (!skip_on) {
        			gpio_direction_output(lcd_rst_n, 1);
        			usleep_range(10000, 11000);
        			gpio_direction_output(lcd_rst_n, 0);
        			usleep_range(10000, 12000);
        			gpio_direction_output(lcd_rst_n, 1);
        			msleep(120);
        		}
        	} else {
        		/* set panel reset */
        		gpio_direction_output(lcd_rst_n, 0);
        
        		gpio_set_value(plat->power_pin, 0);
        //		vcom_pwm = 0;
        		gpio_set_value(plat->vcom_pin, 0);
        		/* disable LCD_IOVDD 1.8v */
        		if (panel->is_iovdd && lcd_iovdd)
        			regulator_disable(lcd_iovdd);
        		if (panel->is_avdd && lcd_avdd)
        			regulator_disable(lcd_avdd);
        		if (panel->is_ldo && lcd_ldo)
        			regulator_disable(lcd_ldo);
        	}
        
        regu_lcd_iovdd:
        	gpio_free(lcd_rst_n);
        	if (ret < 0) {
        		lcd_iovdd = NULL;
        		lcd_avdd = NULL;
        	}
        }
        #else
        static void ota7290b_panel_power(struct mmp_panel *panel, int skip_on, int on) {}
        #endif
        
        static void ota7290b_set_status(struct mmp_panel *panel, int status)
        {
        	struct ota7290b_plat_data *plat = panel->plat_data;
        	int skip_on = (status == MMP_ON_REDUCED);
        
        	if (status_is_on(status)) {
        		/* power on */
        		if (plat->plat_onoff)
        			plat->plat_onoff(1);
        		else
        			ota7290b_panel_power(panel, skip_on, 1);
        		if (!skip_on)
        			ota7290b_panel_on(panel, 1);
        	} else if (status_is_off(status)) {
        		ota7290b_panel_on(panel, 0);
        		/* power off */
        		if (plat->plat_onoff)
        			plat->plat_onoff(0);
        		else
        			ota7290b_panel_power(panel, 0, 0);
        	} else
        		dev_warn(panel->dev, "set status %s not supported\n",
        					status_name(status));
        }
        
        static void ota7290b_esd_onoff(struct mmp_panel *panel, int status)
        {
        	struct ota7290b_plat_data *plat = panel->plat_data;
        
        	if (status) {
        		if (plat->esd_enable)
        			esd_start(&panel->esd);
        	} else {
        		if (plat->esd_enable)
        			esd_stop(&panel->esd);
        	}
        }
        
        static void ota7290b_esd_recover(struct mmp_panel *panel)
        {
        	struct mmp_path *path = mmp_get_path(panel->plat_path_name);
        	static int count = 1;
        
        	/*
        	 * FIXME: skip the first esd_recover
        	 * since the first esd check will fail.
        	 */
        	if (count++ > 1)
        		esd_panel_recover(path);
        }
        
        /*
         * OTA7290B read id
         */
        static char ota7290ba_pkt_size_cmd[] = {0x01};
        static char ota7290b_manufacetrue_init[] = {0xB0, 0x5A, 0x03};
        static char read_id_ota7290b[] = {0x14};
        
        static struct mmp_dsi_cmd_desc ota7290ba_read_id_cmds[] = {
        	{MIPI_DSI_DCS_SHORT_WRITE_PARAM, 1, 0, sizeof(ota7290b_manufacetrue_init),
        		ota7290b_manufacetrue_init},
        	{MIPI_DSI_SET_MAXIMUM_RETURN_PACKET_SIZE, 1, 0,
        		sizeof(ota7290ba_pkt_size_cmd), ota7290ba_pkt_size_cmd},
        	{MIPI_DSI_DCS_READ, 1, 0,
        		sizeof(read_id_ota7290b), read_id_ota7290b},
        };
        
        static int ota7290b_get_status(struct mmp_panel *panel)
        {
        	struct mmp_dsi_buf dbuf;
        	u32 read_id = 0;
        	int ret;
        
        	return 0;
        
        	ret = mmp_panel_dsi_rx_cmd_array(panel, &dbuf,
        		ota7290ba_read_id_cmds,
        		ARRAY_SIZE(ota7290ba_read_id_cmds));
        	if (ret < 0) {
        		pr_err("[ERROR] DSI receive failure!\n");
        		return 1;
        	}
        
        	read_id = dbuf.data[0];
        
        
        	if (read_id != OTA7290B_ID) {
        		pr_err("[ERROR] panel status is 0x%x\n", read_id);
        		return 1;
        	} else {
        		pr_debug("panel status is 0x%x\n", read_id);
        	}
        
        }
        
        static struct mmp_mode mmp_modes_ota7290b[] = {
        	[0] = {
        		.pixclock_freq = 51797760,
        		.refresh = 60,
        		.xres = 480,
        		.yres = 1280,
        		.real_xres = 480,
        		.real_yres = 1280,
        		.hsync_len = 2,
        		.left_margin = 30,
        		.right_margin = 146,
        		.vsync_len = 2,
        		.upper_margin = 14,
        		.lower_margin = 16,
        		.invert_pixclock = 0,
        		.pix_fmt_out = PIXFMT_BGR888PACK,
        		.hsync_invert = 0,
        		.vsync_invert = 0,
        		.height = 90,
        		.width = 50,
        	},
        };
        
        static int ota7290b_get_modelist(struct mmp_panel *panel,
        		struct mmp_mode **modelist)
        {
        	*modelist = mmp_modes_ota7290b;
        	return 1;
        }
        
        static struct mmp_panel panel_ota7290b = {
        	.name = "ota7290b",
        	.panel_type = PANELTYPE_DSI_VIDEO,
        	.is_iovdd = 0,
        	.is_avdd = 0,
        	.is_ldo = 0,
        	.get_modelist = ota7290b_get_modelist,
        	.set_status = ota7290b_set_status,
        	//.get_status = ota7290b_get_status,
        	//.panel_esd_recover = ota7290b_esd_recover,
        	//.esd_set_onoff = ota7290b_esd_onoff,
        };
        
        static int ota7290b_bl_update_status(struct backlight_device *bl)
        {
        	struct ota7290b_plat_data *data = dev_get_drvdata(&bl->dev);
        	struct mmp_panel *panel = data->panel;
        	int level;
        
        	if (bl->props.fb_blank == FB_BLANK_UNBLANK &&
        			bl->props.power == FB_BLANK_UNBLANK)
        		level = bl->props.brightness;
        	else
        		level = 0;
        
        	/* If there is backlight function of board, use it */
        	if (data && data->plat_set_backlight) {
        		data->plat_set_backlight(panel, level);
        		return 0;
        	}
        
        	if (panel && panel->set_brightness)
        		panel->set_brightness(panel, level);
        
        	return 0;
        }
        
        static int ota7290b_bl_get_brightness(struct backlight_device *bl)
        {
        	if (bl->props.fb_blank == FB_BLANK_UNBLANK &&
        			bl->props.power == FB_BLANK_UNBLANK)
        		return bl->props.brightness;
        
        	return 0;
        }
        
        static DEFINE_SPINLOCK(bl_lock);
        static void ota7290b_panel_set_bl(struct mmp_panel *panel, int intensity)
        {
        	int gpio_bl, bl_level, p_num;
        	unsigned long flags;
        	/*
        	 * FIXME
        	 * the initial value of bl_level_last is the
        	 * uboot backlight level, it should be aligned.
        	 */
        	static int bl_level_last = 17;
        
        	gpio_bl = of_get_named_gpio(panel->dev->of_node, "bl_gpio", 0);
        	if (gpio_bl < 0) {
        		pr_err("%s: of_get_named_gpio failed\n", __func__);
        		return;
        	}
        
        	if (gpio_request(gpio_bl, "lcd backlight")) {
        		pr_err("gpio %d request failed\n", gpio_bl);
        		return;
        	}
        
        	/*
        	 * Brightness is controlled by a series of pulses
        	 * generated by gpio. It has 32 leves and level 1
        	 * is the brightest. Pull low for 3ms makes
        	 * backlight shutdown
        	 */
        	bl_level = (100 - intensity) * 32 / 100 + 1;
        
        	if (bl_level == bl_level_last)
        		goto set_bl_return;
        
        	if (bl_level == 33) {
        		/* shutdown backlight */
        		gpio_direction_output(gpio_bl, 0);
        		goto set_bl_return;
        	}
        
        	if (bl_level > bl_level_last)
        		p_num = bl_level - bl_level_last;
        	else
        		p_num = bl_level + 32 - bl_level_last;
        
        	while (p_num--) {
        		spin_lock_irqsave(&bl_lock, flags);
        		gpio_direction_output(gpio_bl, 0);
        		udelay(1);
        		gpio_direction_output(gpio_bl, 1);
        		spin_unlock_irqrestore(&bl_lock, flags);
        		udelay(1);
        	}
        
        set_bl_return:
        	if (bl_level == 33)
        		bl_level_last = 0;
        	else
        		bl_level_last = bl_level;
        	gpio_free(gpio_bl);
        }
        
        static const struct backlight_ops ota7290b_bl_ops = {
        	.get_brightness = ota7290b_bl_get_brightness,
        	.update_status  = ota7290b_bl_update_status,
        };
        
        static int ota7290b_probe(struct platform_device *pdev)
        {
        	struct mmp_mach_panel_info *mi;
        	struct ota7290b_plat_data *plat_data;
        	struct device_node *np = pdev->dev.of_node;
        	const char *path_name;
        	struct backlight_properties props;
        	struct backlight_device *bl;
        	int ret;
        	u32 esd_enable;
        
        	plat_data = devm_kzalloc(&pdev->dev, sizeof(*plat_data), GFP_KERNEL);
        	if (!plat_data)
        		return -ENOMEM;
        
        	if (IS_ENABLED(CONFIG_OF)) {
        		ret = of_property_read_string(np, "marvell,path-name",
        				&path_name);
        		if (ret < 0) {
        			kfree(plat_data);
        			return ret;
        		}
        		panel_ota7290b.plat_path_name = path_name;
        
        		if (of_find_property(np, "iovdd-supply", NULL))
        			panel_ota7290b.is_iovdd = 1;
        
        		if (of_find_property(np, "avdd-supply", NULL))
        			panel_ota7290b.is_avdd = 1;
        			
        		if (of_find_property(np, "ldo-supply", NULL))
        			panel_ota7290b.is_ldo = 1;
        
        		if (of_property_read_u32(np, "panel_esd", &esd_enable))
        			plat_data->esd_enable = 0;
        
        		plat_data->esd_enable = esd_enable;
        
        		if (of_get_named_gpio(np, "bl_gpio", 0) < 0)
        			pr_debug("%s: get bl_gpio failed\n", __func__);
        		else
        			plat_data->plat_set_backlight = ota7290b_panel_set_bl;
        
        		plat_data->power_pin = of_get_named_gpio(np, "power_gpio", 0);
        		if(plat_data->power_pin < 0) {
        			pr_debug("%s: get power pin failed\n",__func__);
        		}
        
        		if(devm_gpio_request(&pdev->dev, plat_data->power_pin, "lcd power pin")) {
        			pr_err("%s request power pin failed!\n",__func__);
        			return -EINVAL;
        		}
        		gpio_direction_output(plat_data->power_pin, 1);
        		
        		plat_data->vcom_pin = of_get_named_gpio(np, "vcom_gpio", 0);
        		if(plat_data->vcom_pin < 0) {
        			pr_debug("%s: get vcom control pin failed\n",__func__);
        		}
        
        		if(devm_gpio_request(&pdev->dev, plat_data->vcom_pin, "lcd vcom pin")) {
        			pr_err("%s request vcom control pin failed!\n",__func__);
        			return -EINVAL;
        		}
        		gpio_direction_output(plat_data->vcom_pin, 1);
        
        //		vcom_task = kthread_create(vcom_task_func, plat_data, "vcom_task func");
        //		if(IS_ERR(vcom_task))
        //		{
        //			pr_err("Can't create thread vcom_task\n");
        //			vcom_task = NULL;
        //			return -1;
        //		}
        
        
        	} else {
        		/* get configs from platform data */
        		mi = pdev->dev.platform_data;
        		if (mi == NULL) {
        			dev_err(&pdev->dev, "no platform data defined\n");
        			kfree(plat_data);
        			return -EINVAL;
        		}
        		plat_data->plat_onoff = mi->plat_set_onoff;
        		panel_ota7290b.plat_path_name = mi->plat_path_name;
        		plat_data->plat_set_backlight = mi->plat_set_backlight;
        		plat_data->esd_enable = mi->esd_enable;
        	}
        
        //	ret = sysfs_create_group(&pdev->dev.kobj,
        //			&vcom_attribute_group);
        //	if (ret < 0) {
        //		pr_err("%s: create group fail!\n", __func__);
        //		return ret;
        //	}
        
        	plat_data->panel = &panel_ota7290b;
        	panel_ota7290b.plat_data = plat_data;
        	panel_ota7290b.dev = &pdev->dev;
        	mmp_register_panel(&panel_ota7290b);
        
        	if (plat_data->esd_enable)
        		esd_init(&panel_ota7290b);
        
        	/*
        	 * if no panel or plat associate backlight control,
        	 * don't register backlight device here.
        	 */
        	if (!panel_ota7290b.set_brightness && !plat_data->plat_set_backlight)
        		return 0;
        
        	memset(&props, 0, sizeof(struct backlight_properties));
        	props.max_brightness = 100;
        	props.type = BACKLIGHT_RAW;
        
        	bl = backlight_device_register("lcd-bl", &pdev->dev, plat_data,
        			&ota7290b_bl_ops, &props);
        	if (IS_ERR(bl)) {
        		ret = PTR_ERR(bl);
        		dev_err(&pdev->dev, "failed to register lcd-backlight\n");
        		return ret;
        	}
        
        	bl->props.fb_blank = FB_BLANK_UNBLANK;
        	bl->props.power = FB_BLANK_UNBLANK;
        	bl->props.brightness = 40;
        
        	return 0;
        }
        
        static int ota7290b_remove(struct platform_device *dev)
        {
        	mmp_unregister_panel(&panel_ota7290b);
        	kfree(panel_ota7290b.plat_data);
        
        	return 0;
        }
        
        #ifdef CONFIG_OF
        static const struct of_device_id mmp_ota7290b_dt_match[] = {
        	{ .compatible = "marvell,mmp-ota7290b" },
        	{},
        };
        #endif
        
        static struct platform_driver ota7290b_driver = {
        	.driver		= {
        		.name	= "mmp-ota7290b",
        		.owner	= THIS_MODULE,
        		.of_match_table = of_match_ptr(mmp_ota7290b_dt_match),
        	},
        	.probe		= ota7290b_probe,
        	.remove		= ota7290b_remove,
        };
        
        static int ota7290b_init(void)
        {
        	return platform_driver_register(&ota7290b_driver);
        }
        static void ota7290b_exit(void)
        {
        	platform_driver_unregister(&ota7290b_driver);
        }
        module_init(ota7290b_init);
        module_exit(ota7290b_exit);
        
        MODULE_AUTHOR("Yonghai Huang <huangyh@marvell.com>");
        MODULE_DESCRIPTION("Panel driver for MIPI panel ILI9806E");
        MODULE_LICENSE("GPL");
        
        1 条回复 最后回复 回复 引用 分享 0
        • tigger
          tigger LV 7 最后由 编辑

          WTL068601G04-12M.jpg

          1 条回复 最后回复 回复 引用 分享 0
          • tigger
            tigger LV 7 最后由 编辑

            引脚定义: WTL078401G08-18M接口定义.xls

            芯片手册: OTA7290B_datasheet.pdf

            LCD手册: C078SWW2 R0.pdf

            1 条回复 最后回复 回复 引用 分享 0
            • YuzukiTsuru
              柚木 鉉 LV 9 最后由 编辑

              已下单,D1s正好点

              1 条回复 最后回复 回复 引用 分享 1
              • YuzukiTsuru
                柚木 鉉 LV 9 最后由 编辑

                到货了,屏没法拆下来,全贴合的(不要问我怎么知道

                1 条回复 最后回复 回复 引用 分享 0
                • YuzukiTsuru
                  柚木 鉉 LV 9 最后由 编辑

                  {0xB0, 1, {0x5A}},
                  
                  {0xB1, 1, {0x00}},
                  {0x89, 1, {0x01}},
                  {0x91, 1, {0x17}},
                  {0xB1, 1, {0x03}},
                  {0x2C, 1, {0x28}},
                  
                  {0x00, 1, {0xB7}},
                  {0x01, 1, {0x1B}},
                  {0x02, 1, {0x00}},
                  {0x03, 1, {0x00}},
                  {0x04, 1, {0x00}},
                  {0x05, 1, {0x00}},
                  {0x06, 1, {0x00}},
                  {0x07, 1, {0x00}},
                  {0x08, 1, {0x00}},
                  {0x09, 1, {0x00}},
                  {0x0A, 1, {0x01}},
                  {0x0B, 1, {0x01}},
                  {0x0C, 1, {0x00}},
                  {0x0D, 1, {0x00}},
                  {0x0E, 1, {0x24}},
                  {0x0F, 1, {0x1C}},
                  {0x10, 1, {0xC9}},
                  {0x11, 1, {0x60}},
                  {0x12, 1, {0x70}},
                  {0x13, 1, {0x01}},
                  {0x14, 1, {0xE7}},
                  {0x15, 1, {0xFF}},
                  {0x16, 1, {0x3D}},
                  {0x17, 1, {0x0E}},
                  {0x18, 1, {0x01}},
                  {0x19, 1, {0x00}},
                  {0x1A, 1, {0x00}},
                  {0x1B, 1, {0xFC}},
                  {0x1C, 1, {0x0B}},
                  {0x1D, 1, {0xA0}},
                  {0x1E, 1, {0x03}},
                  {0x1F, 1, {0x04}},
                  {0x20, 1, {0x0C}},
                  {0x21, 1, {0x00}},
                  {0x22, 1, {0x04}},
                  {0x23, 1, {0x81}},
                  {0x24, 1, {0x1F}},
                  {0x25, 1, {0x10}},
                  {0x26, 1, {0x9B}},
                  {0x2D, 1, {0x01}},
                  {0x2E, 1, {0x84}},
                  {0x2F, 1, {0x00}},
                  {0x30, 1, {0x02}},
                  {0x31, 1, {0x08}},
                  {0x32, 1, {0x01}},
                  {0x33, 1, {0x1C}},
                  {0x34, 1, {0x40}},
                  {0x35, 1, {0xFF}},
                  {0x36, 1, {0xFF}},
                  {0x37, 1, {0xFF}},
                  {0x38, 1, {0xFF}},
                  {0x39, 1, {0xFF}},
                  {0x3A, 1, {0x05}},
                  {0x3B, 1, {0x00}},
                  {0x3C, 1, {0x00}},
                  {0x3D, 1, {0x00}},
                  {0x3E, 1, {0xCF}},
                  {0x3F, 1, {0x84}},
                  {0x40, 1, {0x2F}},
                  {0x41, 1, {0xFC}},
                  {0x42, 1, {0x01}},
                  {0x43, 1, {0x40}},
                  {0x44, 1, {0x05}},
                  {0x45, 1, {0xE8}},
                  {0x46, 1, {0x16}},
                  {0x47, 1, {0x00}},
                  {0x48, 1, {0x00}},
                  {0x49, 1, {0x88}},
                  {0x4A, 1, {0x08}},
                  {0x4B, 1, {0x05}},
                  {0x4C, 1, {0x03}},
                  {0x4D, 1, {0xD0}},
                  {0x4E, 1, {0x13}},
                  {0x4F, 1, {0xFF}},
                  {0x50, 1, {0x0A}},
                  {0x51, 1, {0x53}},
                  {0x52, 1, {0x26}},
                  {0x53, 1, {0x22}},
                  {0x54, 1, {0x09}},
                  {0x55, 1, {0x22}},
                  {0x56, 1, {0x00}},
                  {0x57, 1, {0x1C}},
                  {0x58, 1, {0x03}},
                  {0x59, 1, {0x3F}},
                  {0x5A, 1, {0x28}},
                  {0x5B, 1, {0x01}},
                  {0x5C, 1, {0xCC}},
                  {0x5D, 1, {0x21}},
                  {0x5E, 1, {0x84}},
                  {0x5F, 1, {0x10}},
                  {0x60, 1, {0x42}},
                  {0x61, 1, {0x08}},
                  {0x62, 1, {0x21}},
                  {0x63, 1, {0x84}},
                  {0x64, 1, {0x80}},
                  {0x65, 1, {0x0C}},
                  {0x66, 1, {0x74}},
                  {0x67, 1, {0x4C}},
                  {0x68, 1, {0x09}},
                  {0x69, 1, {0x12}},
                  {0x6A, 1, {0x42}},
                  {0x6B, 1, {0x08}},
                  {0x6C, 1, {0x21}},
                  {0x6D, 1, {0x84}},
                  {0x6E, 1, {0x10}},
                  {0x6F, 1, {0x42}},
                  {0x70, 1, {0x08}},
                  {0x71, 1, {0xE9}},
                  {0x72, 1, {0xC4}},
                  {0x73, 1, {0xD7}},
                  {0x74, 1, {0xD6}},
                  {0x75, 1, {0x28}},
                  {0x76, 1, {0x00}},
                  {0x77, 1, {0x00}},
                  {0x78, 1, {0x0F}},
                  {0x79, 1, {0xE0}},
                  {0x7A, 1, {0x01}},
                  {0x7B, 1, {0xFF}},
                  {0x7C, 1, {0xFF}},
                  {0x7D, 1, {0x0F}},
                  {0x7E, 1, {0x41}},
                  {0x7F, 1, {0xFE}},
                  
                  {0xB1, 1, {0x02}},
                  {0x00, 1, {0xFF}},
                  {0x01, 1, {0x05}},
                  {0x02, 1, {0xF0}},
                  {0x03, 1, {0x00}},
                  {0x04, 1, {0x94}},
                  {0x05, 1, {0x48}},
                  {0x06, 1, {0xC8}},
                  {0x07, 1, {0x0A}},
                  {0x08, 1, {0x00}},
                  {0x09, 1, {0x00}},
                  {0x0A, 1, {0x00}},
                  {0x0B, 1, {0x10}},
                  {0x0C, 1, {0xE6}},
                  {0x0D, 1, {0x0D}},
                  {0x0F, 1, {0x00}},
                  {0x10, 1, {0xF9}},
                  {0x11, 1, {0x4D}},
                  {0x12, 1, {0x9E}},
                  {0x13, 1, {0x8F}},
                  {0x14, 1, {0xDF}},
                  {0x15, 1, {0x15}},
                  {0x16, 1, {0xE4}},
                  {0x17, 1, {0x6A}},
                  {0x18, 1, {0xAB}},
                  {0x19, 1, {0xD7}},
                  {0x1A, 1, {0x78}},
                  {0x1B, 1, {0xFE}},
                  {0x1C, 1, {0xFF}},
                  {0x1D, 1, {0xFF}},
                  {0x1E, 1, {0xFF}},
                  {0x1F, 1, {0xFF}},
                  {0x20, 1, {0xFF}},
                  {0x21, 1, {0xFF}},
                  {0x22, 1, {0xFF}},
                  {0x23, 1, {0xFF}},
                  {0x24, 1, {0xFF}},
                  {0x25, 1, {0xFF}},
                  {0x26, 1, {0xFF}},
                  {0x27, 1, {0x1F}},
                  {0x28, 1, {0xFF}},
                  {0x29, 1, {0xFF}},
                  {0x2A, 1, {0xFF}},
                  {0x2B, 1, {0xFF}},
                  {0x2C, 1, {0xFF}},
                  {0x2D, 1, {0x07}},
                  {0x33, 1, {0x3F}},
                  {0x35, 1, {0x7F}},
                  {0x36, 1, {0x3F}},
                  {0x38, 1, {0xFF}},
                  {0x3A, 1, {0x80}},
                  {0x3B, 1, {0x01}},
                  {0x3C, 1, {0x00}},
                  {0x3D, 1, {0x2F}},
                  {0x3E, 1, {0x00}},
                  {0x3F, 1, {0xE0}},
                  {0x40, 1, {0x05}},
                  {0x41, 1, {0x00}},
                  {0x42, 1, {0xBC}},
                  {0x43, 1, {0x00}},
                  {0x44, 1, {0x80}},
                  {0x45, 1, {0x07}},
                  {0x46, 1, {0x00}},
                  {0x47, 1, {0x00}},
                  {0x48, 1, {0x9B}},
                  {0x49, 1, {0xD2}},
                  {0x4A, 1, {0xC1}},
                  {0x4B, 1, {0x83}},
                  {0x4C, 1, {0x17}},
                  {0x4D, 1, {0xC0}},
                  {0x4E, 1, {0x0F}},
                  {0x4F, 1, {0xF1}},
                  {0x50, 1, {0x78}},
                  {0x51, 1, {0x7A}},
                  {0x52, 1, {0x34}},
                  {0x53, 1, {0x99}},
                  {0x54, 1, {0xA2}},
                  {0x55, 1, {0x02}},
                  {0x56, 1, {0x14}},
                  {0x57, 1, {0xB8}},
                  {0x58, 1, {0xDC}},
                  {0x59, 1, {0xD4}},
                  {0x5A, 1, {0xEF}},
                  {0x5B, 1, {0xF7}},
                  {0x5C, 1, {0xFB}},
                  {0x5D, 1, {0xFD}},
                  {0x5E, 1, {0x7E}},
                  {0x5F, 1, {0xBF}},
                  {0x60, 1, {0xEF}},
                  {0x61, 1, {0xE6}},
                  {0x62, 1, {0x76}},
                  {0x63, 1, {0x73}},
                  {0x64, 1, {0xBB}},
                  {0x65, 1, {0xDD}},
                  {0x66, 1, {0x6E}},
                  {0x67, 1, {0x37}},
                  {0x68, 1, {0x8C}},
                  {0x69, 1, {0x08}},
                  {0x6A, 1, {0x31}},
                  {0x6B, 1, {0xB8}},
                  {0x6C, 1, {0xB8}},
                  {0x6D, 1, {0xB8}},
                  {0x6E, 1, {0xB8}},
                  {0x6F, 1, {0xB8}},
                  {0x70, 1, {0x5C}},
                  {0x71, 1, {0x2E}},
                  {0x72, 1, {0x17}},
                  {0x73, 1, {0x00}},
                  {0x74, 1, {0x00}},
                  {0x75, 1, {0x00}},
                  {0x76, 1, {0x00}},
                  {0x77, 1, {0x00}},
                  {0x78, 1, {0x00}},
                  {0x79, 1, {0x00}},
                  {0x7A, 1, {0xDC}},
                  {0x7B, 1, {0xDC}},
                  {0x7C, 1, {0xDC}},
                  {0x7D, 1, {0xDC}},
                  {0x7E, 1, {0xDC}},
                  {0x7F, 1, {0x6E}},
                  {0x0B, 1, {0x00}},
                  {0xB1, 1, {0x03}},
                  {0x2C, 1, {0x2C}},
                  {0xB1, 1, {0x00}},
                  {0x89, 1, {0x03}},
                  
                  L 1 条回复 最后回复 回复 引用 分享 1
                  • xiaowenge
                    DOT小文哥 LV 8 最后由 编辑

                    牛逼 被你们买到下架了
                    dae377b7-314e-4898-979c-ca440a320bdb-image.png

                    1 条回复 最后回复 回复 引用 分享 0
                    • L
                      liuxingkeji LV 5 @YuzukiTsuru 最后由 编辑

                      @yuzukitsuru @tigger 大佬你们点亮了吗?

                      1 条回复 最后回复 回复 引用 分享 0
                      • 1 / 1
                      • First post
                        Last post

                      Copyright © 2024 深圳全志在线有限公司 粤ICP备2021084185号 粤公网安备44030502007680号

                      行为准则 | 用户协议 | 隐私权政策