接芯片长包,短包的命令不一样,这点最容易忽略,导致平初始化失败。
主要看这几种,问清楚是哪种,或自己试:
DCS GEN
#define LPDT_LPK 0x39 //0x29
#define LPDT_SPK 0x15 //0x23
#define Norm_SPK 0x05 //0x13
/* dcs read/write */
#define DTYPE_DCS_WRITE 0X05 /* short wirte, 0 parameter */
#define DTYPE_DCS_WRITE1 0X15 /* short wirte, 1 parameter */
#define DTYPE_DCS_READ 0X06 /* read */
#define DTYPE_DCS_LWRITE 0X39 /* long write */
在读/写指令时,Generic指令 是不区分 Index 和 parameter 的,而 DCS 会默认把 data0 作为Index 然后计算 parameter 数目。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
/* dcs read/write */ #define DTYPE_DCS_WRITE 0x05 /* short write, 0 parameter */ #define DTYPE_DCS_WRITE1 0x15 /* short write, 1 parameter */ #define DTYPE_DCS_LWRITE 0x39 /* long write/write LUT command packet */ #define DTYPE_DCS_READ 0x06 /* read, 0 parameter */ /* generic read/write */ #define DTYPE_GEN_WRITE 0x03 /* short write, 0 parameter */ #define DTYPE_GEN_WRITE1 0x13 /* short write, 1 parameter */ #define DTYPE_GEN_WRITE2 0x23 /* short write, 2 parameters */ #define DTYPE_GEN_LWRITE 0x29 /* long write */ #define DTYPE_GEN_READ 0x04 /* long read, 0 parameter */ #define DTYPE_GEN_READ1 0x14 /* long read, 1 parameter */ #define DTYPE_GEN_READ2 0x24 /* long read, 2 parameters */ #define DTYPE_TEAR_ON 0x35 /* set tear on */ #define DTYPE_MAX_PKTSIZE 0x37 /* set max packet size */ #define DTYPE_NULL_PKT 0x09 /* null packet, no data */ #define DTYPE_BLANK_PKT 0x19 /* blanking packet, no data */ #define DTYPE_CM_ON 0x02 /* color mode off */ #define DTYPE_CM_OFF 0x12 /* color mode on */ #define DTYPE_PERIPHERAL_OFF 0x22 #define DTYPE_PERIPHERAL_ON 0x32 /* Video mode */ 0x0E /* Packed Pixel Stream, 16-bit RGB, 5-6-5 Format */ 0x1E /* Packed Pixel Stream, 18-bit RGB, 6-6-6 Format */ 0x2E /* Loosely Packed Pixel Stream, 16-bit RGB, 5-6-5 Format */ 0x3E /* Packed Pixel Stream, 24-bit RGB, 8-8-8 Format */ 0xx0h and 0xxFh /*DO NOT USE, All unspecified codes are reserved */ |
/device/sprd/sharkl3/s9863a1h10_go_32b/s9863a1h10_go_32b_Base.mk(10.0)
#Display/Graphic config
PRODUCT_PROPERTY_OVERRIDES += \
ro.sf.lcd_density=160 \
ro.sf.lcd_width=54 \
ro.sf.lcd_height=96 \
ro.opengles.version=196610
/device/sprd/sharkl3/s9863a1h10_go_32b/s9863a1h10_go_32b_2g.mk(10.0)
PRODUCT_AAPT_CONFIG := normal large xlarge mdpi 420dpi xxhdpi
PRODUCT_AAPT_PREF_CONFIG := xhdpi
PRODUCT_AAPT_PREBUILT_DPI := hdpi xhdpi
Z610\device\sprd\sharkl5Pro\ums512_1h10\module\display\md.mk(11.0)
#Display/Graphic config
PRODUCT_PROPERTY_OVERRIDES += \
ro.sf.lcd_density=240 \
ro.sf.lcd_width=54 \
ro.sf.lcd_height=96
# For GMS Express 2.0, do not trimming resources
PRODUCT_AAPT_CONFIG := normal large xlarge mdpi 420dpi xxhdpi
#PRODUCT_AAPT_PREF_CONFIG := xxhdpi
PRODUCT_AAPT_PREBUILT_DPI := mdpi
TARGET_SCREEN_DENSITY := 240
PRODUCT_COPY_FILES += $(call md-overlayrsb,module/display/enhance/flash.xml):vendor/etc/enhance/flash.xml
#Display PQ 3dlut config parameters
PRODUCT_COPY_FILES += \
$(call md-overlayrsb,module/display/enhance/3d_lut.xml):vendor/etc/enhance/3d_lut.xml
The parameters are defined as:
+----------+-------------------------------------+----------+-------+
| | ↑ | | |
| | |vback_porch | | |
| | ↓ | | |
+----------#######################################----------+-------+
| # ↑ # | |
| # | # | |
| hback # | # hfront | hsync |
| porch # | hactive # porch | len |
|<-------->#<-------+--------------------------->#<-------->|<----->|
| # | # | |
| # |vactive # | |
| # | # | |
| # ↓ # | |
+----------#######################################----------+-------+
| | ↑ | | |
| | |vfront_porch | | |
| | ↓ | | |
+----------+-------------------------------------+----------+-------+
| | ↑ | | |
| | |vsync_len | | |
| | ↓ | | |
+----------+-------------------------------------+----------+-------+
typedef enum
{
CMD_MODE = 0,
SYNC_PULSE_VDO_MODE = 1,
SYNC_EVENT_VDO_MODE = 2,
BURST_VDO_MODE = 3
} LCM_DSI_MODE_CON;
adb设置dpi:
adb shell getprop ro.sf.lcd_density
adb shell wm density 240
clk=(width + W total porch)x(height + H total porch)x (18bit《RGB666》或者x24bit《RGB888》)x fps/ lane nubmer/2
一帧画面需要的数据量为(单位bit):FRAME_BIT = (屏幕有效显示宽度+hsync+hfp+hbp) x ( 屏幕有效显示高度+vsync+vfp+vbp) x(RGB显示数据宽度24)
一秒钟内需要传输的数据量为(单位bps):FRAME_BIT x fps(帧率)。
那为何要除以lane_num----因为mipi通讯协议中,一个CLOCK几个lane是可以同时传输数据的。
为何又要除以2----因为根据mipi通讯协议,CLK_N、CLK_P这两根时钟线的上升沿/下降沿可以获取到数据。
RGB PCLK须满足下列条件:
PCLK>= (width + W total porch)x(height + H total porch)x fps
adb shell cat sys/class/leds/lcd-backlight/brightness
adb shell settings get system screen_brightness
adb shell settings put system screen_brightness 30
[FAQ07302] [LED]如何配置LCD背光和LED,调试方法
https://onlinesso.mediatek.com/FAQ#/SW/FAQ07302
修改clock极性:
params->dpi.clk_pol = LCM_POLARITY_FALLING; //LCM_POLARITY_RISING
TFT屏分很多种的: VA(PVA, SVA), S-IPS, TN等等
大多数笔记本和电脑显示器用屏都是TN的,视角比较差.
电视用的TFT液晶屏多采用VA和IPS技术, IPS的视角和颜色表现方面最好,VA的对比度高.
也有高端的笔记本用S-IPS屏,比如:IBM T60-P种15.1寸某些高端型号,还有SONY 17寸的也有用S-IPS屏.一般电脑显示器, NEC的 1990SXI/1980/1970都是S-IPS屏,还有就是apple和Dell的大尺寸液晶显示器都是S-IPS的.
S-IPS只有LG.Philips-LCD公司大规模生产(日本也有小部分,不过都是自用的)
TN屏是TFT种最便宜的,工艺较简单.
大多数笔记本和电脑显示器用屏都是TN的,视角比较差.
电视用的TFT液晶屏多采用VA和IPS技术, IPS的视角和颜色表现方面最好,VA的对比度高.
也有高端的笔记本用S-IPS屏,比如:IBM T60-P种15.1寸某些高端型号,还有SONY 17寸的也有用S-IPS屏.一般电脑显示器, NEC的 1990SXI/1980/1970都是S-IPS屏,还有就是apple和Dell的大尺寸液晶显示器都是S-IPS的.
S-IPS只有LG.Philips-LCD公司大规模生产(日本也有小部分,不过都是自用的)
TN屏是TFT种最便宜的,工艺较简单.
展频是指扩展频谱(Spread Spectrum)技术,它是一种常用的无线通讯技术。
当主板上的时钟发生器工作时,脉冲的峰值会产生电磁干扰(EMI (Electron-Magnetic Interference)),展频技术可以降低脉冲发生器所产生的电磁干扰。
在没有遇到电磁干扰问题时,应将此类项目的值全部设为“Disabled”,这样可以优化系统性能,提高系统稳定性;
如果遇到电磁干扰问题,则应将该项设为“Enabled”以便减少电磁干扰。
在将处理器超频时,最好将该项设置为“Disabled”,因为即使是微小的峰值飘移也会引起时钟的短暂突发,这样会导致超频后的处理器被锁死。
如果MIPI Clock对RF/WCN产生干扰,并且在尝试寻找相应的频点依然无法解除EMI,可以尝试做Frequency Hopping;
82平台默认打开展频开关,例:
params->dsi.ssc_range =4; // ssc range control (1:min, 8:max, default: 4)
params->dsi.ssc_disable = 0; //ssc disable control (1: disable, 0: enable, default: 0)
代表:展频打开,ssc_range = 4%
params->dsi.ssc_disable = 0; //ssc disable control (1: disable, 0: enable, default: 0)
代表:展频打开,ssc_range = 4%
Enable/disable glitch detection:params->dsi.compatibility_for_nvk
For非NVT Driver IC,params->dsi.compatibility_for_nvk=0
For NVT Driver IC,params->dsi.compatibility_for_nvk=1
MTK Android Driver知识大全:http://blog.youkuaiyun.com/cbk861110/article/details/40931835
如果屏幕边沿出现彩条,可以把展频关掉试试。
-------------------------------------------------------------------
/kernel-4.14/arch/arm64/configs/tb8168p1_64_bsp_debug_defconfig
CONFIG_MTK_LCM=y
CONFIG_CUSTOM_KERNEL_LCM="jd936x_wxga_dsi_vdo"
/kernel-4.14/drivers/misc/mediatek/lcm/Makefile
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
obj-$(CONFIG_MTK_LCM) += mt65xx_lcm_list.o \ lcm_common.o \ lcm_gpio.o \ lcm_i2c.o \ lcm_pmic.o \ lcm_util.o LCM_LISTS := $(subst ",,$(CONFIG_CUSTOM_KERNEL_LCM)) obj-$(CONFIG_MTK_LCM) += $(foreach LCM,$(LCM_LISTS),$(LCM)/) subdir-ccflags-$(CONFIG_MTK_LCM) += -I$(srctree)/drivers/misc/mediatek/lcm/inc subdir-ccflags-$(CONFIG_MTK_FB) += -I$(srctree)/drivers/misc/mediatek/video/$(MTK_PLATFORM)/dispsys \ -I$(srctree)/drivers/misc/mediatek/video/$(MTK_PLATFORM)/dispsys/mt6735 \ -I$(srctree)/drivers/misc/mediatek/video/$(MTK_PLATFORM)/videox \ -I$(srctree)/drivers/misc/mediatek/video/include LCM_DEFINES := $(shell echo $(CONFIG_CUSTOM_KERNEL_LCM) | tr a-z A-Z) DEFINES += $(foreach LCM,$(LCM_DEFINES),$(LCM)) DEFINES += MTK_LCM_PHYSICAL_ROTATION=\"$(MTK_LCM_PHYSICAL_ROTATION)\" ccflags-$(CONFIG_MTK_LCM) += $(addprefix -D, $(DEFINES)) ccflags-$(CONFIG_MTK_LCM_DEVICE_TREE_SUPPORT) += -DMTK_LCM_DEVICE_TREE_SUPPORT |
/kernel-4.14/drivers/misc/mediatek/lcm/mt65xx_lcm_list.c
#include "mt65xx_lcm_list.h"
struct LCM_DRIVER *lcm_driver_list[] = {
#if defined(JD936X_WXGA_DSI_VDO)
&jd9366_wxga_dsi_vdo_fiti_kd_lcm_drv,
#endif
};
/kernel-4.14/drivers/misc/mediatek/lcm/mt65xx_lcm_list.h
extern struct LCM_DRIVER jd9366_wxga_dsi_vdo_fiti_kd_lcm_drv;