适配新七寸屏
This commit is contained in:
@@ -11,7 +11,7 @@
|
||||
sprd,dsi-lane-number = <4>;
|
||||
sprd,dsi-color-format = "rgb888";
|
||||
|
||||
/* Vendor PLL_CLOCK: 407 Mbps per lane. */
|
||||
/* Last visually verified clean U-Boot configuration. */
|
||||
sprd,phy-bit-clock = <407000>;
|
||||
sprd,phy-escape-clock = <20000>;
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
sprd,reset-on-sequence = <1 5>, <0 10>, <1 120>;
|
||||
sprd,reset-off-sequence = <0 20>;
|
||||
|
||||
sprd,use-dcs-write;
|
||||
/* Vendor table entries are 0x23 generic short writes. */
|
||||
sprd,initial-command = [
|
||||
23 00 00 02 E0 00
|
||||
23 00 00 02 E1 93
|
||||
@@ -241,13 +241,14 @@
|
||||
|
||||
display-timings {
|
||||
timing0 {
|
||||
clock-frequency = <67750800>;
|
||||
clock-frequency = <64000000>;
|
||||
hactive = <800>;
|
||||
vactive = <1280>;
|
||||
hback-porch = <20>;
|
||||
hfront-porch = <20>;
|
||||
vback-porch = <8>;
|
||||
vfront-porch = <17>;
|
||||
/* Keep the U-Boot-only timing that produced a clean logo. */
|
||||
vback-porch = <24>;
|
||||
vfront-porch = <1>;
|
||||
hsync-len = <20>;
|
||||
vsync-len = <8>;
|
||||
};
|
||||
|
||||
@@ -18,6 +18,23 @@
|
||||
#include "mipi_dsi_api.h"
|
||||
#include "mipi_dsi_hal.h"
|
||||
|
||||
static bool use_jd9365_rounded_timing(struct sprd_dsi *dsi)
|
||||
{
|
||||
return dsi->panel && dsi->panel->lcd_name &&
|
||||
!strcmp(dsi->panel->lcd_name, "lcd_jd9365_mipi_wxga");
|
||||
}
|
||||
|
||||
static u16 calc_dpi_byte_cycles(struct sprd_dsi *dsi,
|
||||
struct dpi_video_param *param, u32 pixels)
|
||||
{
|
||||
if (use_jd9365_rounded_timing(dsi))
|
||||
return DIV_ROUND_CLOSEST_ULL((u64)pixels * param->byte_clk,
|
||||
param->pixel_clk);
|
||||
|
||||
/* Preserve the vendor calculation for every other panel. */
|
||||
return pixels * (param->byte_clk * 1000 / param->pixel_clk) / 1000;
|
||||
}
|
||||
|
||||
static u16 calc_bytes_per_pixel_x100(int coding)
|
||||
{
|
||||
u16 bpp_x100;
|
||||
@@ -207,6 +224,7 @@ int mipi_dsi_dpi_video(struct sprd_dsi *dsi, struct dpi_video_param *param)
|
||||
u32 chunk_overhead = 0;
|
||||
const u8 pkt_header = 6;
|
||||
u32 div = 0;
|
||||
u16 hline_time;
|
||||
|
||||
video_size = round_video_size(param->coding, param->hact);
|
||||
bpp_x100 = calc_bytes_per_pixel_x100(param->coding);
|
||||
@@ -215,15 +233,18 @@ int mipi_dsi_dpi_video(struct sprd_dsi *dsi, struct dpi_video_param *param)
|
||||
return -1;
|
||||
|
||||
ratio_x1000 = param->byte_clk * 1000 / param->pixel_clk;
|
||||
hline_time = calc_dpi_byte_cycles(dsi, param, param->hline);
|
||||
|
||||
dsi_hal_power_en(dsi, 0);
|
||||
dsi_hal_dpi_frame_ack_en(dsi, param->frame_ack_en);
|
||||
dsi_hal_dpi_color_coding(dsi, param->coding);
|
||||
dsi_hal_dpi_video_burst_mode(dsi, param->burst_mode);
|
||||
dsi_hal_dpi_sig_delay(dsi, 95 * param->hline * ratio_x1000 / 100000);
|
||||
dsi_hal_dpi_hline_time(dsi, param->hline * ratio_x1000 / 1000);
|
||||
dsi_hal_dpi_hsync_time(dsi, param->hsync * ratio_x1000 / 1000);
|
||||
dsi_hal_dpi_hbp_time(dsi, param->hbp * ratio_x1000 / 1000);
|
||||
dsi_hal_dpi_sig_delay(dsi, 95 * hline_time / 100);
|
||||
dsi_hal_dpi_hline_time(dsi, hline_time);
|
||||
dsi_hal_dpi_hsync_time(dsi,
|
||||
calc_dpi_byte_cycles(dsi, param, param->hsync));
|
||||
dsi_hal_dpi_hbp_time(dsi,
|
||||
calc_dpi_byte_cycles(dsi, param, param->hbp));
|
||||
dsi_hal_dpi_vact(dsi, param->vact);
|
||||
dsi_hal_dpi_vfp(dsi, param->vfp);
|
||||
dsi_hal_dpi_vbp(dsi, param->vbp);
|
||||
@@ -360,15 +381,17 @@ int mipi_dsi_edpi_video(struct sprd_dsi *dsi, struct edpi_video_param *param)
|
||||
|
||||
int mipi_dsi_htime_update(struct sprd_dsi *dsi, struct dpi_video_param *param)
|
||||
{
|
||||
u32 ratio_x1000 = 0;
|
||||
u16 hline_time;
|
||||
|
||||
ratio_x1000 = param->byte_clk * 1000 / param->pixel_clk;
|
||||
hline_time = calc_dpi_byte_cycles(dsi, param, param->hline);
|
||||
|
||||
dsi_hal_power_en(dsi, 0);
|
||||
dsi_hal_dpi_sig_delay(dsi, 95 * param->hline * ratio_x1000 / 100000);
|
||||
dsi_hal_dpi_hline_time(dsi, param->hline * ratio_x1000 / 1000);
|
||||
dsi_hal_dpi_hsync_time(dsi, param->hsync * ratio_x1000 / 1000);
|
||||
dsi_hal_dpi_hbp_time(dsi, param->hbp * ratio_x1000 / 1000);
|
||||
dsi_hal_dpi_sig_delay(dsi, 95 * hline_time / 100);
|
||||
dsi_hal_dpi_hline_time(dsi, hline_time);
|
||||
dsi_hal_dpi_hsync_time(dsi,
|
||||
calc_dpi_byte_cycles(dsi, param, param->hsync));
|
||||
dsi_hal_dpi_hbp_time(dsi,
|
||||
calc_dpi_byte_cycles(dsi, param, param->hbp));
|
||||
dsi_hal_power_en(dsi, 1);
|
||||
|
||||
return 0;
|
||||
|
||||
Reference in New Issue
Block a user