修改屏幕宽高

简介: 笔记

在移植中,可能会使用不同的屏幕,也可能由于结构限制,导致只能使用一部分屏幕,比如160128的屏幕,只能使用150128,这时候就需要修改屏幕可用区域了。


配置步骤


1. 配置驱动文件

kernel/drivers/video/sprdfb/lcd/lcd_st7735s_spi.c

这是我们项目中用到的驱动文件

static struct panel_spec lcd_st7735s_spi_spec = {
    .width = 150,   //160->150
    .height = 128,
    .bpp = 2,
    .fps = 50,
    .type = SPRDFB_PANEL_TYPE_SPI,
    .direction = LCD_DIRECT_NORMAL,
    .info = {
        .spi = &lcd_st7735s_spi_info
    },
    .ops = &lcd_st7735s_spi_operations,
    .suspend_mode = SEND_SLEEP_CMD,
};

u-boot/drivers/video/sprdfb/lcd/lcd_st7735s_spi.c

struct panel_spec lcd_st7735s_spi_spec = {
    .width = 150,   //160->150
    .height = 128,
    .fps = 50,
    .type = SPRDFB_PANEL_TYPE_SPI,
    .direction = LCD_DIRECT_NORMAL,
    .info = {
        .spi = &lcd_st7735s_spi_info
    },
    .ops = &lcd_st7735s_spi_operations,
};

kernel/drivers/video/sprdfb/sprdfb_spi_intf.c

static struct spi_transfer sprdfb_refresh_xfer = {
    .len = 150*128*2,    //160->150
    .gpio_cd_level = 0x81,
    .bits_per_word = 32,
};


配置DTS


kernel/arch/arm/boot/dts/sprd-scx35l_sp9820w_6c10.dts

//framebuffer的预留内存大小=宽*高
/* memory reserved for fb */
/memreserve/ 0x8FF9C000 0x3C000; /* 128*160*4*3, 4K alignment*/
/* memory reserved for ION */
/memreserve/ 0x8FFD8000 0x28000; /* 128*160*4*2, 4K alignment*/

总共要预留两块内存,前面表示起始地址,后面表示预留 大小,大小是怎么计算的不太清楚,比如43和42是什么意思 不知道。

别外该DTS文件中有两处还需要改:

fb0: fb@20800000 {
         compatible = "sprd,sprdfb";
         reg = <0x20800000 0x1000>,<0x21800000 0x1000>;
         interrupts = <0 46 0x0>,<0 48 0x0>, <0 49 0x0>;
         clock-names = "dispc_clk_parent", "dispc_dbi_clk_parent", "dispc_dpi_clk_parent", "dispc_emc_clk_parent",  "dispc_clk", "dispc_dbi_clk", "dispc_dpi_clk", "dispc_emc_clk", "fb_spi_clock", "fb_spi_clock_parent";
         clocks = <&clk_256m>, <&clk_256m>, <&clk_384m>, <&clk_aon_apb>, <&clk_dispc0>, <&clk_dispc0_dbi>, <&clk_di spc0_dpi>, <&clk_disp_emc>, <&clk_spi2>, <&ext_26m>;
         clock-src = <256000000 256000000 384000000>;
         dpi_clk_div = <7>;
         sprd,fb_use_reservemem;
         sprd,fb_mem = <0x8FF9C000 0x3C000>;  //与fb预留大小一致
         sprd,fb_display_size = <150 128>;  //160->150
     };
 sprd,ion-heap@3 {
     reg = <3>;          /* overlay */
     reg-names = "ion_heap_carveout_overlay";
     sprd,ion-heap-type = <2>;   /* carveout */
     sprd,ion-heap-mem = <0x8FFD8000 0x28000>;   //与ION预留大小一致
 };


目录
相关文章
|
4月前
设置背景图像平铺和位置
设置背景图像平铺和位置。
41 5
|
8月前
|
Android开发
ImageView设置tint ,修改图标颜色
ImageView设置tint ,修改图标颜色
106 0
|
存储 内存技术
屏幕为黑色yuv值怎么设置
屏幕为黑色yuv值怎么设置
315 0
|
容器
背景图的设置
背景图的设置
165 0
给Activity设置背景色
给Activity设置背景色
107 0
|
iOS开发
修改UISearchBar背景颜色
修改UISearchBar背景颜色
189 0
|
前端开发 JavaScript
canvas设置像素与画布样式宽高不符的原因及解决办法
canvas设置像素与画布样式宽高不符的原因及解决办法
874 0
|
移动开发 前端开发 数据可视化
高清屏下canvas重置尺寸引发的问题
高清屏下canvas重置尺寸引发的问题
uwp - 获取当前屏幕宽高/应用宽高
原文:uwp - 获取当前屏幕宽高/应用宽高    public static Size GetScreen() { var applicationView = ApplicationView.
1105 0
C# 获取当前屏幕的宽高和位置
原文:C# 获取当前屏幕的宽高和位置 上一篇博客《C# 获取当前屏幕DPI》,介绍了如何获取当前屏幕的DPI设置 本章主要介绍如何获取当前窗口所在屏幕的信息 当前屏幕信息 如果当前是单屏幕,可以直接获取主屏幕 var primaryScreen = Screen.
1307 0