修改屏幕宽高

简介: 笔记

在移植中,可能会使用不同的屏幕,也可能由于结构限制,导致只能使用一部分屏幕,比如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预留大小一致
 };


目录
相关文章
|
5月前
|
XML Android开发 数据格式
RecyclerView 、ScrollView滚动条长宽设置
RecyclerView 、ScrollView滚动条长宽设置
209 0
|
6月前
|
Android开发
ImageView设置tint ,修改图标颜色
ImageView设置tint ,修改图标颜色
85 0
iOS-UITextView设置行间距,内容颜色(变相设置类似UITextField的placeholder)
iOS-UITextView设置行间距,内容颜色(变相设置类似UITextField的placeholder)
366 0
iOS-UITextView设置行间距,内容颜色(变相设置类似UITextField的placeholder)
解决Toolbar 和状态栏重叠,并且设置Toolbar 的颜色渐变效果
解决Toolbar 和状态栏重叠,并且设置Toolbar 的颜色渐变效果
给Activity设置背景色
给Activity设置背景色
100 0
|
移动开发 前端开发 数据可视化
高清屏下canvas重置尺寸引发的问题
高清屏下canvas重置尺寸引发的问题
uwp - 获取当前屏幕宽高/应用宽高
原文:uwp - 获取当前屏幕宽高/应用宽高    public static Size GetScreen() { var applicationView = ApplicationView.
1096 0
|
Android开发
TextView未绘制情况下获取其宽高
/** * 注:StaticLayout是android中处理文字换行的一个类,TextView源码中也是通过这个类实现换行的,使用这个类可以 * 在不进行TextView绘制的前提下得到TextView的宽高,这里我们只需要获取到高度即可,这个高度当然也可以通过post * 在run中获取,但是这样做会有一个问题,界面是先绘制显示然后再计算高度根据我们的逻辑来收缩TextView的高度,在列表中 * 会出现闪烁的问题。
2609 0
|
前端开发 Android开发 容器
Android自定义Tablayout下划线指示器Indicator:设置宽高、圆角、渐变颜色
Android自定义Tablayout下划线指示器Indicator:设置宽高、圆角、渐变颜色 Android原生的Tablayout下面有一个指示器(指示线、下划线),如图所示:详情见附录1。
6187 0