展讯平台lcd频率计算

 展讯平台点屏时要配置两个时钟(phy_freq和pixel_clk),那这两个参数要怎么配置呢,我们可以找到展讯的这份文档,输入屏的参数,即可计算出相应的时钟。如

 然后将相应的参数填到屏的配置文件中,如

Android9.0以前,
uboot配置

.phy_freq = 1105000
.pixel_clk = 153600000

kernel配置

pixel_clk:由uboot传参到cmdline(在uboot)
clock-frequency = <1105000>;对应uboot的phy_freq

Android10.0
uboot配置

.phy_freq = 1105000
.pixel_clk = 153600000


kernel配置

sprd,phy-bit-clock = <1105000>;//phy-freq
clock-frequency = <153600000>;//pixel_clk

当然,这不是重点,之前一直不了解其中的运算规则,excel隐藏了其中的运算规则,今天看代码有了一些了解,分享下

pixel_clk计算

从下面的程序中可以窥见一二,如果配置是时钟源是dpi_clk_src中一个,直接使用,然后根据ROUND(a, b)计算分配分配系数

static const u32 dpi_clk_src[] = {
	96000000,
	128000000,
	153600000,
	192000000
};

static u32 calc_dpi_clk_src(u32 pclk)
{
	int i;

	for (i = 0; i < ARRAY_SIZE(dpi_clk_src); i++) {
		if ((dpi_clk_src[i] % pclk) == 0)
			return dpi_clk_src[i];
	}

	pr_err("calc DPI_CLK_SRC failed, use default\n");
	return 96000000;
}
#define ROUND(a, b) (((a) + (b) / 2) / (b))  

static int calc_dpi_clk(struct sprd_dispc *dispc,
			       u32 *new_pclk, u32 pclk_src,
			       u32 new_val, int type)
{
	switch (type) {
	case SPRD_FORCE_FPS:
	case SPRD_DYNAMIC_FPS:
		if (new_val < LCD_MIN_FPS || new_val > LCD_MAX_FPS) {
			pr_err
			    ("Unsupported FPS. fps range should be [%d, %d]\n",
			     LCD_MIN_FPS, LCD_MAX_FPS);
			return -EINVAL;
		}
		pclk = hpixels * vlines * new_val;
		divider = ROUND(pclk_src, pclk);
		*new_pclk = pclk_src / divider;
		if (pclk_src % divider)
			*new_pclk += 1;
		panel->fps = new_val;
		break;

}

 fps计算 

static ssize_t actual_fps_show(struct device *dev,
                        struct device_attribute *attr,
                        char *buf)
{
        struct sprd_dpu *dpu = dev_get_drvdata(dev);
        struct videomode vm = dpu->ctx.vm;
        uint32_t act_fps_int, act_fps_frac;
        uint32_t total_pixels;
        int ret;

        total_pixels = (vm.hsync_len + vm.hback_porch +
                        vm.hfront_porch + vm.hactive) *
                        (vm.vsync_len + vm.vback_porch +
                        vm.vfront_porch + vm.vactive);

        act_fps_int = vm.pixelclock / total_pixels;
        act_fps_frac = vm.pixelclock % total_pixels;
        act_fps_frac = act_fps_frac * 100 / total_pixels;

        ret = snprintf(buf, PAGE_SIZE, "%u.%u\n", act_fps_int, act_fps_frac);

        return ret;
}
static DEVICE_ATTR_RO(actual_fps);

kernel4.14/drivers/gpu/drm/sprd/dpu/dpu_r3p0.c 

static void dpu_dpi_init(struct dpu_context *ctx)
{
	if (ctx->vm.vsync_len + ctx->vm.vback_porch < 32)
		pr_warn("Warning: (vsync + vbp) < 32, ""underflow risk!\n");
}

如上面的那组参数

1206*2138*60=154705680
ROUND(a, b)=1,分频系数为1,那时钟就是153600000

fps≈153600000/(1206*2138)≈60,满足要求

 如这组参数,

1547*688*60=63860160

ROUND(a, b)=2,频率就是153600000/2=76800000,

fps≈76800000/(1547*688)≈72fps,,不满足要求

但更换64000000时钟源,

ROUND(a, b)=2,频率就是128000000/2=64000000,

fps≈64000000/(1547*688)≈60fps,满足要求

展讯给的公式为

1.need_clock = (width+hfp+hbp+hsync)*(height+vfp+vbp+vsync)*fps  
2.dividor = dpi_clock_src/need_clock;
3.if((dpi_clock_src - dividor*need_clock) > (need_clock/2)){
    dividor += 1;
}

 

phy_freq的计算

展讯给的公式为

(DPI_CLK_SRC/DIVIDOR)x 3x 8 bit < phy_feq x lane_num x 0.9
考虑到MIPI传输过程中可能会出现传输错误,实际设置的值可以再加大10%

对于下面屏的配置算出来的是
(153600000*3*8)/(4*0.9)*1.1=1126400000,表格算处理的是1105*1000kbs,差不多。

  • 6
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
展讯平台是一种以展讯公司开发的芯片为核心的平台,该平台广泛应用于移动通信设备中。在使用展讯平台的设备时,需要通过USB接口与计机进行连接,并安装相应的USB驱动程序。 USB驱动程序是一种用于操作系统与硬件之间进行通信的软件。展讯平台的USB驱动程序主要有以下几个作用: 1. 设备识别与通信:USB驱动程序能够让操作系统正确识别展讯平台设备,并建立起与设备之间的通信通道。通过该通道,计机可以向设备发送指令,并接收设备返回的数据。 2. 数据传输控制:USB驱动程序还负责控制数据在计机和展讯平台设备之间的传输。它确保数据的正确传输,并处理可能出现的错误或中断。同时,USB驱动程序还能够管理数据的缓冲区,以提高传输效率。 3. 设备配置与升级:USB驱动程序支持设备的配置和升级功能。通过USB接口,可以对展讯平台设备进行参数设置和固件更新,以满足不同的需求和修复潜在的问题。 4. 兼容性支持:USB驱动程序提供了对不同操作系统的支持,例如Windows、Linux和Mac OS等。它通过与操作系统的适配,使得展讯平台设备在不同环境下都能够正常工作。 总之,展讯平台USB驱动程序是一种重要的软件组件,它能够确保计机与展讯平台设备之间的正常通信和数据传输。通过USB驱动程序的安装和配置,用户可以方便地使用和管理展讯平台设备,满足不同的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值