适配新七寸屏

This commit is contained in:
2026-11-09 10:18:46 +08:00
parent a19e595794
commit 7f6fd3bd9d
10 changed files with 131 additions and 126 deletions
@@ -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;