导航

    全志在线开发者论坛

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

    V853点亮d320fpc2403

    V Series
    1
    1
    38
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • A
      awwwwa LV 8 最后由 编辑

      设备树配置

      &lcd0 {
      	base_config_start   = <1>;
      	lcd_used            = <1>;
      
      	lcd_driver_name     = "d320fpc2403";
      
      	lcd_backlight       = <50>;
      	lcd_if              = <4>;
      
      	lcd_x               = <1024>;
      	lcd_y               = <768>;
      	lcd_width           = <64>;
      	lcd_height          = <48>;
      	lcd_dclk_freq       = <54>;
      
      	lcd_pwm_used        = <1>;
      	lcd_pwm_ch          = <9>;
      	lcd_pwm_freq        = <5000>;
      	lcd_pwm_pol         = <1>;
      	lcd_pwm_max_limit   = <255>;
      
      	lcd_hbp             = <50>;
      	lcd_ht              = <1114>;
      	lcd_hspw            = <10>;
      	lcd_vbp             = <29>;
      	lcd_vt              = <809>;
      	lcd_vspw            = <8>;
      
      	lcd_dsi_if          = <0>;
      	lcd_dsi_lane        = <4>;
      	lcd_dsi_format      = <0>;
      	lcd_dsi_te          = <0>;
      	lcd_dsi_eotp        = <0>;
      	lcd_frm             = <0>;
      	lcd_io_phase        = <0x0000>;
      	lcd_hv_clk_phase    = <0>;
      	lcd_hv_sync_polarity= <0>;
      	lcd_gamma_en        = <0>;
      	lcd_bright_curve_en = <0>;
      	lcd_cmap_en         = <0>;
      	lcdgamma4iep        = <22>;
      
      	lcd_gpio_0          = <&pio PE 17 1 0 3 1>;
      	pinctrl-0           = <&dsi4lane_pins_a>;
      	pinctrl-1           = <&dsi4lane_pins_b>;
      	base_config_end     = <1>;
      };
      

      驱动

      /* drivers/video/sunxi/disp2/disp/lcd/d320fpc2403.c
       *
       * Copyright (c) 2025 Weidongshan <weidongshan@qq.com>
       *
       * d320fpc2403 panel driver
       *
       * This program is free software; you can redistribute it and/or modify
       * it under the terms of the GNU General Public License version 2 as
       * published by the Free Software Foundation.
       */
      
      #include "d320fpc2403.h"
      
      static void lcd_power_on(u32 sel);
      static void lcd_power_off(u32 sel);
      static void lcd_bl_open(u32 sel);
      static void lcd_bl_close(u32 sel);
      
      static void lcd_panel_init(u32 sel);
      static void lcd_panel_exit(u32 sel);
      
      #define panel_reset(sel, val) sunxi_lcd_gpio_set_value(sel, 0, val)
      
      static void lcd_cfg_panel_info(struct panel_extend_para *info)
      {
      	u32 i = 0, j = 0;
      	u32 items;
      	u8 lcd_gamma_tbl[][2] = {
      		{ 0, 0 },     { 15, 15 },   { 30, 30 },	  { 45, 45 },
      		{ 60, 60 },   { 75, 75 },   { 90, 90 },	  { 105, 105 },
      		{ 120, 120 }, { 135, 135 }, { 150, 150 }, { 165, 165 },
      		{ 180, 180 }, { 195, 195 }, { 210, 210 }, { 225, 225 },
      		{ 240, 240 }, { 255, 255 },
      	};
      
      	u32 lcd_cmap_tbl[2][3][4] = {
      		{
      			{ LCD_CMAP_G0, LCD_CMAP_B1, LCD_CMAP_G2, LCD_CMAP_B3 },
      			{ LCD_CMAP_B0, LCD_CMAP_R1, LCD_CMAP_B2, LCD_CMAP_R3 },
      			{ LCD_CMAP_R0, LCD_CMAP_G1, LCD_CMAP_R2, LCD_CMAP_G3 },
      		},
      		{
      			{ LCD_CMAP_B3, LCD_CMAP_G2, LCD_CMAP_B1, LCD_CMAP_G0 },
      			{ LCD_CMAP_R3, LCD_CMAP_B2, LCD_CMAP_R1, LCD_CMAP_B0 },
      			{ LCD_CMAP_G3, LCD_CMAP_R2, LCD_CMAP_G1, LCD_CMAP_R0 },
      		},
      	};
      
      	items = sizeof(lcd_gamma_tbl) / 2;
      	for (i = 0; i < items - 1; i++) {
      		u32 num = lcd_gamma_tbl[i + 1][0] - lcd_gamma_tbl[i][0];
      
      		for (j = 0; j < num; j++) {
      			u32 value = 0;
      
      			value = lcd_gamma_tbl[i][1] +
      				((lcd_gamma_tbl[i + 1][1] -
      				  lcd_gamma_tbl[i][1]) *
      				 j) / num;
      			info->lcd_gamma_tbl[lcd_gamma_tbl[i][0] + j] =
      				(value << 16) + (value << 8) + value;
      		}
      	}
      	info->lcd_gamma_tbl[255] = (lcd_gamma_tbl[items - 1][1] << 16) +
      				   (lcd_gamma_tbl[items - 1][1] << 8) +
      				   lcd_gamma_tbl[items - 1][1];
      
      	memcpy(info->lcd_cmap_tbl, lcd_cmap_tbl, sizeof(lcd_cmap_tbl));
      }
      
      static s32 lcd_open_flow(u32 sel)
      {
      	LCD_OPEN_FUNC(sel, lcd_power_on, 120);
      	LCD_OPEN_FUNC(sel, lcd_panel_init, 10);
      	LCD_OPEN_FUNC(sel, sunxi_lcd_tcon_enable, 10);
      	LCD_OPEN_FUNC(sel, lcd_bl_open, 0);
      	return 0;
      }
      
      static s32 lcd_close_flow(u32 sel)
      {
      	LCD_CLOSE_FUNC(sel, lcd_bl_close, 0);
      	LCD_CLOSE_FUNC(sel, lcd_panel_exit, 200);
      	LCD_CLOSE_FUNC(sel, sunxi_lcd_tcon_disable, 0);
      	LCD_CLOSE_FUNC(sel, lcd_power_off, 500);
      	return 0;
      }
      
      static void lcd_power_on(u32 sel)
      {
      	/* reset lcd by gpio */
      	panel_reset(sel, 1);
      	sunxi_lcd_delay_ms(100);
      	panel_reset(sel, 0);
      	sunxi_lcd_delay_ms(500);
      	panel_reset(sel, 1);
      	sunxi_lcd_delay_ms(500);
      	sunxi_lcd_pin_cfg(sel, 1);
      }
      
      static void lcd_power_off(u32 sel)
      {
      	sunxi_lcd_pin_cfg(sel, 0);
      	sunxi_lcd_delay_ms(20);
      	panel_reset(sel, 0);
      	sunxi_lcd_delay_ms(5);
      }
      
      static void lcd_bl_open(u32 sel)
      {
      	sunxi_lcd_pwm_enable(sel);
      }
      
      static void lcd_bl_close(u32 sel)
      {
      	sunxi_lcd_backlight_disable(sel);
      }
      
      #define REGFLAG_DELAY 0XFC
      #define REGFLAG_END_OF_TABLE 0xFD /* END OF REGISTERS MARKER */
      
      struct LCM_setting_table {
      	u8 cmd;
      	u32 count;
      	u8 para_list[64];
      };
      
      static struct LCM_setting_table lcm_initialization_setting[] = {
      	{ 0xdf, 3, { 0x91, 0x68, 0xf9 } },
      	{ 0xde, 1, { 0x00 } },
      	// {0xc2, 1, {0x30}},
      	{ 0xb2, 2, { 0x00, 0x7e } },
      	{ 0xb3, 2, { 0x00, 0x7e } },
      	{ 0xc1, 6, { 0x00, 0x10, 0x00, 0x00, 0x00, 0x00 } },
      	{ 0xbb, 7, { 0x02, 0x24, 0x07, 0x61, 0x19, 0x44, 0x44 } },
      	{ 0xbe, 2, { 0x1a, 0xf2 } },
      	{ 0xc3,
      	  14,
      	  { 0x10, 0x17, 0x5a, 0x17, 0x5a, 0x05, 0x05, 0x05, 0x05, 0x15, 0x15,
      	    0x31, 0x05, 0xdf } },
      	{ 0xc4, 7, { 0x11, 0x80, 0x00, 0xdf, 0x09, 0x06, 0x14 } },
      	{ 0xce, 23, { 0x00, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
      		      0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
      		      0x03, 0x03, 0x03, 0x03, 0x03, 0x0f, 0x03 } },
      	{ 0xcf, 9, { 0x00, 0x01, 0x40, 0x01, 0xca, 0x01, 0xca, 0x01, 0xca } },
      	{ 0xd0, 23, { 0x00, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f,
      		      0x1f, 0x1f, 0x1f, 0x03, 0x01, 0x05, 0x07, 0x09,
      		      0x0b, 0x1e, 0x15, 0x1f, 0x1f, 0x15, 0x1f } },
      	{ 0xd1, 23, { 0x00, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f,
      		      0x1f, 0x1f, 0x1f, 0x02, 0x00, 0x04, 0x06, 0x08,
      		      0x0a, 0x1e, 0x15, 0x1f, 0x1f, 0x15, 0x1f } },
      	{ 0xd2, 23, { 0x00, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f,
      		      0x1f, 0x1f, 0x1f, 0x00, 0x02, 0x0a, 0x08, 0x06,
      		      0x04, 0x1f, 0x15, 0x1f, 0x1f, 0x15, 0x1e } },
      	{ 0xd3, 23, { 0x00, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f,
      		      0x1f, 0x1f, 0x1f, 0x01, 0x03, 0x0b, 0x09, 0x07,
      		      0x05, 0x1f, 0x15, 0x1f, 0x1f, 0x15, 0x1e } },
      	{ 0xd4, 37, { 0x30, 0x00, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00,
      		      0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x11, 0x00,
      		      0x01, 0xc0, 0x04, 0x01, 0x01, 0x11, 0x80, 0x01,
      		      0xc0, 0x05, 0x01, 0x01, 0x00, 0x00, 0x00, 0x04,
      		      0x00, 0x06, 0x18, 0x02, 0xe3 } },
      	{ 0xd5, 8, { 0x68, 0x73, 0x00, 0x08, 0x08, 0x00, 0x03, 0x00 } },
      	{ 0xb7, 6, { 0x00, 0xd8, 0x00, 0x00, 0xd8, 0x00 } },
      	{ 0xc8, 38, { 0x7f, 0x69, 0x5a, 0x4e, 0x4a, 0x3b, 0x40, 0x2a,
      		      0x44, 0x43, 0x44, 0x63, 0x51, 0x59, 0x4c, 0x48,
      		      0x3a, 0x28, 0x0f, 0x7f, 0x69, 0x5a, 0x4e, 0x4a,
      		      0x3b, 0x40, 0x2a, 0x44, 0x43, 0x44, 0x63, 0x51,
      		      0x59, 0x4c, 0x48, 0x3a, 0x28, 0x0f } },
      	{ 0xde, 1, { 0x02 } },
      	{ 0xbb, 4, { 0x00, 0x5b, 0x5c, 0x41 } },
      	{ 0xb5, 3, { 0x00, 0x5a, 0x0a } },
      	{ 0xc6, 1, { 0x22 } },
      	{ 0xd7, 1, { 0x12 } },
      	{ 0xe7, 2, { 0x00, 0x00 } },
      	{ 0xde, 1, { 0x04 } },
      	{ 0xcc, 1, { 0x02 } },
      	{ 0xe7, 1, { 0x01 } },
      	{ 0xde, 1, { 0x00 } },
      	{ 0x35, 1, { 0x00 } },
      	{ 0x11, 0, { 0x00 } },
      	{ REGFLAG_DELAY, REGFLAG_DELAY, { 120 } },
      	{ 0x29, 0, { 0x00 } },
      	{ REGFLAG_DELAY, REGFLAG_DELAY, { 20 } },
      	{ REGFLAG_END_OF_TABLE, REGFLAG_END_OF_TABLE, {} },
      };
      
      static void lcd_panel_init(u32 sel)
      {
      	u32 i = 0;
      
      	sunxi_lcd_dsi_clk_enable(sel);
      	sunxi_lcd_delay_ms(100);
      	for (i = 0;; i++) {
      		if (lcm_initialization_setting[i].cmd == REGFLAG_END_OF_TABLE)
      			break;
      		else if (lcm_initialization_setting[i].cmd == REGFLAG_DELAY)
      			sunxi_lcd_delay_ms(lcm_initialization_setting[i].count);
      		else {
      			dsi_dcs_wr(0, lcm_initialization_setting[i].cmd,
      				   lcm_initialization_setting[i].para_list,
      				   lcm_initialization_setting[i].count);
      		}
      	}
      }
      
      static void lcd_panel_exit(u32 sel)
      {
      	sunxi_lcd_dsi_dcs_write_0para(sel, 0x28);
      	sunxi_lcd_delay_ms(80);
      	sunxi_lcd_dsi_dcs_write_0para(sel, 0x10);
      	sunxi_lcd_delay_ms(50);
      }
      
      /*sel: 0:lcd0; 1:lcd1*/
      static s32 lcd_user_defined_func(u32 sel, u32 para1, u32 para2, u32 para3)
      {
      	return 0;
      }
      
      struct __lcd_panel d320fpc2403_panel = {
          /* panel driver name, must mach the name of
           * lcd_drv_name in sys_config.fex
           */
          .name = "d320fpc2403",
          .func =
              {
                  .cfg_panel_info = lcd_cfg_panel_info,
                  .cfg_open_flow = lcd_open_flow,
                  .cfg_close_flow = lcd_close_flow,
                  .lcd_user_defined_func = lcd_user_defined_func,
              },
      };
      
      1 条回复 最后回复 回复 引用 分享 1
      • 1 / 1
      • First post
        Last post

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

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