Linux内核|msm8917(LCD移植 LK+Kernel)

【Linux内核|msm8917(LCD移植 LK+Kernel)】LK阶段:

Index: dev/gcdb/display/include/panel_ili9881_800p_video.h =================================================================== --- dev/gcdb/display/include/panel_ili9881_800p_video.h(不存在的) +++ dev/gcdb/display/include/panel_ili9881_800p_video.h(版本 40374) @@ -0,0 +1,1311 @@ +#ifndef _PANEL_ILI9881_800P_VIDEO_H_ +#define _PANEL_ILI9881_800P_VIDEO_H_ +/*---------------------------------------------------------------------------*/ +/* HEADER files*/ +/*---------------------------------------------------------------------------*/ +#include "panel.h" + +/*---------------------------------------------------------------------------*/ +/* Panel configuration*/ +/*---------------------------------------------------------------------------*/ +static struct panel_config ili9881_800p_video_panel_data = https://www.it610.com/article/{ +"qcom,mdss_dsi_ili9881_800p_video", "dsi:0:", "qcom,mdss-dsi-panel", +10, 0, "DISPLAY_1", 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL +}; + +/*---------------------------------------------------------------------------*/ +/* Panel resolution*/ +/*---------------------------------------------------------------------------*/ +static struct panel_resolution ili9881_800p_video_panel_res = { +800, 1280, 42, 42, 8, 18, 18, 12, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0 +}; + +/*---------------------------------------------------------------------------*/ +/* Panel color information*/ +/*---------------------------------------------------------------------------*/ +static struct color_info ili9881_800p_video_color = { +24, 0, 0xff, 0, 0, 0 +}; + +/*---------------------------------------------------------------------------*/ +/* Panel on/off command information*/ +/*---------------------------------------------------------------------------*/ ...... + +static struct mipi_dsi_cmd ili9881_800p_video_on_command[] = { ...... +}; + +#define ILI9881_800P_VIDEO_ON_COMMAND 195 + + +static char ili9881_800p_videooff_cmd0[] = { +0x28, 0x00, 0x05, 0x80 +}; + +static char ili9881_800p_videooff_cmd1[] = { +0x10, 0x00, 0x05, 0x80 +}; + +static struct mipi_dsi_cmd ili9881_800p_video_off_command[] = { +{0x4, ili9881_800p_videooff_cmd0, 0x32}, +{0x4, ili9881_800p_videooff_cmd1, 0x78} +}; + +#define ILI9881_800P_VIDEO_OFF_COMMAND 2 + + +static struct command_state ili9881_800p_video_state = { +0, 1 +}; + +/*---------------------------------------------------------------------------*/ +/* Command mode panel information*/ +/*---------------------------------------------------------------------------*/ +static struct commandpanel_info ili9881_800p_video_command_panel = { +0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +}; + +/*---------------------------------------------------------------------------*/ +/* Video mode panel information*/ +/*---------------------------------------------------------------------------*/ +static struct videopanel_info ili9881_800p_video_video_panel = { +1, 0, 0, 0, 1, 1, 2, 0, 0x9 +}; + +/*---------------------------------------------------------------------------*/ +/* Lane configuration*/ +/*---------------------------------------------------------------------------*/ +static struct lane_configuration ili9881_800p_video_lane_config = { +4, 0, 1, 1, 1, 1, 0 +}; + +/*---------------------------------------------------------------------------*/ +/* Panel timing*/ +/*---------------------------------------------------------------------------*/ +static const uint32_t ili9881_800p_video_timings[] = { +0xf9, 0x3d, 0x34, 0x00, 0x58, 0x4d, 0x36, 0x3f, 0x53, 0x03, 0x04, 0x00 +}; + +static struct panel_timing ili9881_800p_video_timing_info = { +0, 4, 0x1e, 0x38 +}; + +/*---------------------------------------------------------------------------*/ +/* Panel reset sequence*/ +/*---------------------------------------------------------------------------*/ +static struct panel_reset_sequence ili9881_800p_video_reset_seq = { +{1, 0, 1, }, {20, 2, 20, }, 2 +}; + +/*---------------------------------------------------------------------------*/ +/* Backlight setting*/ +/*---------------------------------------------------------------------------*/ +static struct backlight ili9881_800p_video_backlight = { +1, 1, 4095, 100, 1, "PMIC_8941" +}; + +#define ILI9881_800P_VIDEO_SIGNATURE 0xFFFF +#endif /*_PANEL_ILI9881_800P_VIDEO_H_*/Index: target/msm8952/oem_panel.c =================================================================== --- target/msm8952/oem_panel.c(版本 40373) +++ target/msm8952/oem_panel.c(版本 40374) @@ -64,7 +64,7 @@ #include "include/panel_truly_720p_cmd.h" #include "include/panel_lead_fl10802_fwvga_video.h" #include "include/panel_jd9365_800p_video.h" +#include "include/panel_ili9881_800p_video.h" /*---------------------------------------------------------------------------*/ /* static panel selection variable*/ /*---------------------------------------------------------------------------*/ @@ -88,6 +88,7 @@ TRULY_720P_CMD_PANEL, LEAD_FL10802_FWVGA_VIDEO_PANEL, JD9365_800P_VIDEO_PANEL, +ILI9881_800P_VIDEO_PANEL, UNKNOWN_PANEL }; @@ -119,9 +120,11 @@ {"truly_720p_cmd", TRULY_720P_CMD_PANEL}, {"lead_fl10802_fwvga_video", LEAD_FL10802_FWVGA_VIDEO_PANEL}, {"jd9365_800p_video", JD9365_800P_VIDEO_PANEL}, +{"ili9881_800p_video", ILI9881_800P_VIDEO_PANEL}, }; ? +extern uint32_t lk_lcd_id; ? @@ -741,6 +744,25 @@ +case ILI9881_800P_VIDEO_PANEL: +panelstruct->paneldata= https://www.it610.com/article/&ili9881_800p_video_panel_data; +panelstruct->panelres= &ili9881_800p_video_panel_res; +panelstruct->color= &ili9881_800p_video_color; +panelstruct->videopanel= &ili9881_800p_video_video_panel; +panelstruct->commandpanel= &ili9881_800p_video_command_panel; +panelstruct->state= &ili9881_800p_video_state; +panelstruct->laneconfig= &ili9881_800p_video_lane_config; +panelstruct->paneltiminginfo = &ili9881_800p_video_timing_info; +panelstruct->panelresetseq= &ili9881_800p_video_reset_seq; +panelstruct->backlightinfo= &ili9881_800p_video_backlight; +pinfo->mipi.panel_on_cmds= ili9881_800p_video_on_command; +pinfo->mipi.num_of_panel_on_cmds = ILI9881_800P_VIDEO_ON_COMMAND; +pinfo->mipi.panel_off_cmds= ili9881_800p_video_off_command; +pinfo->mipi.num_of_panel_off_cmds= ILI9881_800P_VIDEO_OFF_COMMAND; +memcpy(phy_db->timing, +ili9881_800p_video_timings, TIMING_SIZE); +pinfo->mipi.signature = ILI9881_800P_VIDEO_SIGNATURE; +break; ? ? switch (hw_id) { case HW_PLATFORM_MTP: if (platform_is_msm8956()) panel_id = NT35597_WQXGA_DUALDSI_VIDEO_PANEL; else if (platform_is_msm8917()) +panel_id = ILI9881_800P_VIDEO_PANEL; else panel_id = JD9365_800P_VIDEO_PANEL;

Kernel阶段:
Index: dsi-panel-ili9881-800p-video.dtsi =================================================================== --- dsi-panel-ili9881-800p-video.dtsi(不存在的) +++ dsi-panel-ili9881-800p-video.dtsi(版本 40113) @@ -0,0 +1,262 @@ + *---------------------------------------------------------------------------*/ +&mdss_mdp { +dsi_ili9881_800p_video: qcom,mdss_dsi_ili9881_800p_video { +qcom,mdss-dsi-panel-name = "ili9881 800p video mode dsi panel"; +qcom,mdss-dsi-panel-controller = <&mdss_dsi0>; +qcom,mdss-dsi-panel-type = "dsi_video_mode"; +qcom,mdss-dsi-panel-destination = "display_1"; +qcom,mdss-dsi-panel-framerate = <60>; +qcom,mdss-dsi-virtual-channel-id = <0>; +qcom,mdss-dsi-stream = <0>; +qcom,mdss-dsi-panel-width = <800>; +qcom,mdss-dsi-panel-height = <1280>; +qcom,mdss-dsi-h-front-porch = <42>; +qcom,mdss-dsi-h-back-porch = <42>; +qcom,mdss-dsi-h-pulse-width = <8>; +qcom,mdss-dsi-h-sync-skew = <18>; +qcom,mdss-dsi-v-back-porch = <12>; +qcom,mdss-dsi-v-front-porch = <18>; +qcom,mdss-dsi-v-pulse-width = <4>; +qcom,mdss-dsi-h-left-border = <0>; +qcom,mdss-dsi-h-right-border = <0>; +qcom,mdss-dsi-v-top-border = <0>; +qcom,mdss-dsi-v-bottom-border = <0>; +qcom,mdss-dsi-bpp = <24>; +qcom,mdss-dsi-color-order = "rgb_swap_rgb"; +qcom,mdss-dsi-underflow-color = <0xff>; +qcom,mdss-dsi-border-color = <0>; +qcom,mdss-dsi-on-command = [ +...... +29 01 00 00 00 00 02 35 00 +05 01 00 00 78 00 02 11 00 +05 01 00 00 05 00 02 29 00]; +qcom,mdss-dsi-off-command = [05 01 00 00 32 00 02 28 00 +05 01 00 00 78 00 02 10 00]; +qcom,mdss-dsi-on-command-state = "dsi_lp_mode"; +qcom,mdss-dsi-off-command-state = "dsi_hs_mode"; +qcom,mdss-dsi-h-sync-pulse = <1>; +qcom,mdss-dsi-traffic-mode = "burst_mode"; +qcom,mdss-dsi-lane-map = "lane_map_0123"; +qcom,mdss-dsi-bllp-eof-power-mode; +qcom,mdss-dsi-bllp-power-mode; +qcom,mdss-dsi-lane-0-state; +qcom,mdss-dsi-lane-1-state; +qcom,mdss-dsi-lane-2-state; +qcom,mdss-dsi-lane-3-state; +qcom,mdss-dsi-panel-timings = [f9 3d 34 00 58 4d 36 3f 53 03 04 00]; +qcom,mdss-dsi-t-clk-post = <0x1e>; +qcom,mdss-dsi-t-clk-pre = <0x38>; +qcom,mdss-dsi-bl-min-level = <1>; +qcom,mdss-dsi-bl-max-level = <4095>; +qcom,mdss-dsi-dma-trigger = "trigger_sw"; +qcom,mdss-dsi-mdp-trigger = "none"; +qcom,mdss-dsi-bl-pmic-control-type = "bl_ctrl_wled"; +qcom,mdss-dsi-reset-sequence = <1 20>, <0 2>, <1 20>; +}; +}; Index: msm8917-mtp.dtsi =================================================================== --- msm8917-mtp.dtsi(版本 40112) +++ msm8917-mtp.dtsi(版本 40113) @@ -272,7 +272,7 @@ &mdss_dsi0 { -qcom,dsi-pref-prim-pan = <&dsi_jd9365_800p_video>; +qcom,dsi-pref-prim-pan = <&dsi_ili9881_800p_video>; pinctrl-names = "mdss_default", "mdss_sleep"; pinctrl-0 = <&mdss_dsi_active &mdss_te_active>; pinctrl-1 = <&mdss_dsi_suspend &mdss_te_suspend>; @@ -282,8 +282,8 @@ }; +&dsi_ili9881_800p_video { +qcom,panel-supply-entries = <&dsi_panel_pwr_supply>; +//qcom,mdss-dsi-pan-enable-dynamic-fps; +//qcom,mdss-dsi-pan-fps-update = "dfps_immediate_porch_mode_vfp"; +}

Index: msm8937-mdss-panels.dtsi =================================================================== --- msm8937-mdss-panels.dtsi(版本 40112) +++ msm8937-mdss-panels.dtsi(版本 40113) @@ -26,6 +26,7 @@ #include "dsi-panel-icn9706-720-1440p-video.dtsi" #include "dsi-panel-r61350_1440_video.dtsi" #include "dsi-panel-jd9365-800p-video.dtsi" +#include "dsi-panel-ili9881-800p-video.dtsi"

?
?

    推荐阅读