适配新七寸屏
This commit is contained in:
@@ -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