D1 / D1s 可以用的 5.5元的 1280*400 长条形MIPI屏, 未验证
-
购买链接: https://item.taobao.com/item.htm?id=669390481038
未验证
未验证
未验证 -
某网站下载的初始化驱动 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");
-
-
-
已下单,D1s正好点
-
到货了,屏没法拆下来,全贴合的(不要问我怎么知道
-
{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}},
-
牛逼 被你们买到下架了
-
@yuzukitsuru @tigger 大佬你们点亮了吗?
Copyright © 2024 深圳全志在线有限公司 粤ICP备2021084185号 粤公网安备44030502007680号