huangcm
2025-07-03 c26084b3642f262f858535ab4e46c1e9b520d3a1
fix(longan): fix rgb pro & debug uart pro

1. Fix the problem of garbled characters during power-on
2. Add the RGB patch
5 files modified
20 ■■■■■ changed files
longan/brandy/arisc/ar100s/.config.old 6 ●●●● patch | view | raw | blame | history
longan/brandy/brandy-2.0/u-boot-2018/drivers/video/sunxi/disp2/disp/de/lowlevel_v2x/disp_al.c 3 ●●●● patch | view | raw | blame | history
longan/kernel/linux-4.9/drivers/video/fbdev/sunxi/disp2/disp/de/disp_lcd.c 4 ●●● patch | view | raw | blame | history
longan/kernel/linux-4.9/drivers/video/fbdev/sunxi/disp2/disp/de/disp_vdevice.c 1 ●●●● patch | view | raw | blame | history
longan/kernel/linux-4.9/drivers/video/fbdev/sunxi/disp2/disp/de/lowlevel_v2x/disp_al.c 6 ●●●● patch | view | raw | blame | history
longan/brandy/arisc/ar100s/.config.old
....@@ -37,11 +37,7 @@
3737 #
3838 # debug printk function
3939 #
40
-CFG_DEBUGGER_PRINTF=y
41
-CFG_DEBUG_ERR=y
42
-CFG_DEBUG_LOG=y
43
-CFG_DEBUG_WRN=y
44
-# CFG_DEBUG_INF is not set
40
+# CFG_DEBUGGER_PRINTF is not set
4541
4642 #
4743 # shell function
longan/brandy/brandy-2.0/u-boot-2018/drivers/video/sunxi/disp2/disp/de/lowlevel_v2x/disp_al.c
....@@ -654,7 +654,7 @@
654654 }
655655
656656 static struct lcd_clk_info clk_tbl[] = {
657
- {LCD_IF_HV, 6, 1, 1, 0},
657
+ {LCD_IF_HV, 0x10, 1, 1, 0},
658658 {LCD_IF_CPU, 12, 1, 1, 0},
659659 {LCD_IF_LVDS, 7, 1, 1, 0},
660660 #if defined(DSI_VERSION_40)
....@@ -689,6 +689,7 @@
689689 dsi_div = clk_tbl[i].dsi_div;
690690 dsi_rate = clk_tbl[i].dsi_rate;
691691 find = 1;
692
+ printf("kickpi v2x find %d tcon_div = %d lcd_div = %d dsi_div = %d dsi_rate %d \n", i, tcon_div, lcd_div, dsi_div, dsi_rate);
692693 break;
693694 }
694695 }
longan/kernel/linux-4.9/drivers/video/fbdev/sunxi/disp2/disp/de/disp_lcd.c
....@@ -558,7 +558,7 @@
558558 memset(&clk_info, 0, sizeof(struct lcd_clk_info));
559559 disp_al_lcd_get_clk_info(lcd->hwdev_index, &clk_info,
560560 &lcdp->panel_info);
561
-
561
+ printk("kickpi %s:%d \n", __func__, __LINE__);
562562 if (!lcdp->clk || !(&lcdp->panel_info)) {
563563 DE_WRN("NULL clk or panel_info!\n");
564564 goto OUT;
....@@ -613,6 +613,7 @@
613613 clk_info.tcon_div = lcdp->panel_info.lcd_tcon_div;
614614 disp_al_lcd_get_clk_info(lcd->hwdev_index, &clk_info,
615615 &lcdp->panel_info);
616
+ printk("kickpi %s:%d \n", __func__, __LINE__);
616617 dclk_rate = lcdp->panel_info.lcd_dclk_freq * 1000000; /* Mhz -> hz */
617618 if (lcdp->panel_info.lcd_if == LCD_IF_DSI) {
618619 lcd_rate = dclk_rate * clk_info.dsi_div;
....@@ -641,6 +642,7 @@
641642 else
642643 lcd_rate_set = pll_rate_set;
643644
645
+ msleep(100);
644646 clk_set_rate(lcdp->clk, lcd_rate_set);
645647 lcd_rate_set = clk_get_rate(lcdp->clk);
646648 if (lcdp->panel_info.lcd_if == LCD_IF_DSI) {
longan/kernel/linux-4.9/drivers/video/fbdev/sunxi/disp2/disp/de/disp_vdevice.c
....@@ -96,6 +96,7 @@
9696 para->lcd_dclk_freq = dclk_rate;
9797 para->ccir_clk_div = vdevicep->intf.ccir_clk_div;
9898 disp_al_lcd_get_clk_info(vdevice->disp, &clk_info, para);
99
+ printk("kickpi %s:%d \n", __func__, __LINE__);
99100 kfree((void *)para);
100101
101102 lcd_rate = dclk_rate * clk_info.tcon_div;
longan/kernel/linux-4.9/drivers/video/fbdev/sunxi/disp2/disp/de/lowlevel_v2x/disp_al.c
....@@ -694,7 +694,7 @@
694694 };
695695 #else
696696 static struct lcd_clk_info clk_tbl[] = {
697
- {LCD_IF_HV, 6, 1, 1, 0},
697
+ {LCD_IF_HV, 0x10, 1, 1, 0},
698698 {LCD_IF_CPU, 12, 1, 1, 0},
699699 {LCD_IF_LVDS, 7, 1, 1, 0},
700700 #if defined(DSI_VERSION_40)
....@@ -732,6 +732,7 @@
732732 dsi_div = clk_tbl[i].dsi_div;
733733 dsi_rate = clk_tbl[i].dsi_rate;
734734 find = 1;
735
+ printk("kickpi v2x find %d tcon_div = %d lcd_div = %d dsi_div = %d dsi_rate %d \n", i, tcon_div, lcd_div, dsi_div, dsi_rate);
735736 break;
736737 }
737738 }
....@@ -827,6 +828,7 @@
827828
828829 tcon_init(screen_id);
829830 disp_al_lcd_get_clk_info(screen_id, &info, panel);
831
+ printk("kickpi %s:%d \n", __func__, __LINE__);
830832 tcon0_set_dclk_div(screen_id, info.tcon_div);
831833
832834 #if !defined(TCON1_DRIVE_PANEL)
....@@ -1304,6 +1306,7 @@
13041306 info.lcd_hv_srgb_seq = para->sequence;
13051307 tcon_init(screen_id);
13061308 disp_al_lcd_get_clk_info(screen_id, &clk_info, &info);
1309
+ printk("kickpi %s:%d \n", __func__, __LINE__);
13071310 tcon0_set_dclk_div(screen_id, clk_info.tcon_div);
13081311
13091312 if (para->sub_intf == LCD_HV_IF_CCIR656_2CYC)
....@@ -1602,6 +1605,7 @@
16021605
16031606 tcon_init(screen_id);
16041607 disp_al_lcd_get_clk_info(screen_id, &clk_info, &panel);
1608
+ printk("kickpi %s:%d \n", __func__, __LINE__);
16051609 tcon0_set_dclk_div(screen_id, clk_info.tcon_div);
16061610 if (tcon0_cfg(screen_id, &panel) != 0)
16071611 DE_WRN("lcd cfg fail!\n");