kernel中背光控制
- 格式:pdf
- 大小:44.03 KB
- 文档页数:2
福州瑞芯微电子股份有限公司密级状态:绝密( ) 秘密( ) 内部( ) 公开( √ )Rockchip DRM Panel Porting Guide(第二系统产品部)文件状态:[√] 正在修改[ ] 正式发布当前版本:V1.2作者:闭伟勇完成日期:2017-4-15审核:完成日期:福州瑞芯微电子股份有限公司Fuzhou Rockchips Semiconductor Co . , Ltd(版本所有,翻版必究)版本历史版本号作者修改日期修改说明备注V1.0 闭伟勇2017-4-15 初始版本V1.1 黄家钗2017-4-17 加入LVDS屏配置说明V1.2 闭伟勇2017-8-15 同步代码,更新MIPI章节。
目录1Documentation And Source Code (1)1.1kernel (1)1.2u-boot (2)2MIPI-DSI (3)2.1DT Bindings (3)2.1.1MIPI-DSI Host (3)2.1.2MIPI-DPHY (3)2.1.3LOGO (3)2.1.4Panel (4)2.1.5Command (6)3eDP (11)3.1配置方式1 (11)3.1.1Kernel (11)3.2配置方式2 (13)3.2.1Kernel (13)3.2.2U-boot (16)3.3配置方式3 (16)3.3.1Kernel (17)4LVDS (18)4.1LVDS节点配置 (18)4.2属性说明 (19)4.3Data mapping (20)1 Documentation And Source Code1.1 kernelSource Code Dir:drivers/gpu/drm/rockchip/drivers/gpu/drm/bridge/drivers/gpu/drm/panel/drivers/phy/Documentation Dir:Documentation/devicetree/bindings/display/rockchip/Documentation/devicetree/bindings/display/bridge/Documentation/devicetree/bindings/display/panel/Documentation/devicetree/bindings/phy/Driver File DocCore rockchip_drm_drv.c rockchip-drm.txt Framebuffer rockchip_drm_fb.cGEM rockchip_drm_gem.cVOP rockchip_drm_vop.crockchip_vop_reg.crockchip-vop.txt LVDS rockchip_lvds.c rockchip-lvds.txt RGA rockchip_drm_rga.c rockchip-rga.txtMIPI dw-mipi-dsi.cphy-rockchip-inno-mipi-dphy.c dw_mipi_dsi_rockchip.txtphy-rockchip-inno-mipi-dphy.txtHDMI dw_hdmi-rockchip.cdw-hdmi.c dw_hdmi-rockchip.txt dw_hdmi.txtINNO HDMI inno_hdmi.c inno_hdmi-rockchip.txt eDP analogix_dp-rockchip.c analogix_dp-rockchip.txtanalogix_dp_core.c analogix_dp_reg.c phy-rockchip-dp.c analogix_dp.txt rockchip-dp-phy.txtDP cdn-dp-core.ccdn-dp-reg.ccdn-dp-rockchip.txt Panel panel-simple.c simple-panel.txt 1.2 u-bootSource Code Dir:drivers/video/Driver FileCore rockchip_display.crockchip_crtc.crockchip_connector.crockchip_phy.crockchip_panel.cVOP rockchip_vop.crockchip_vop_reg.ceDP rockchip_analogix_dp.crockchip_analogix_dp_reg.cMIPI rockchip_mipi_dsi.crockchip-dw-mipi-dsi.crockchip-inno-mipi-dphy.cPanel panel_simple.crockchip_dsi_panel.cLVDS rockchip_lvds.c2 MIPI-DSI2.1 DT Bindings2.1.1 MIPI-DSI Host①属性说明Property Value Commentrockchip,lane-rate 80~1000 如果没有配置该属性,驱动会根据屏的timing计算lane-rate。
背光驱动控制方法和系统的工作原理分析背光驱动控制方法和系统是现代电子设备中广泛应用的一种技术,其原理是通过控制背光模块的亮度和颜色来实现屏幕的亮度调节和色彩表现。
本文将对背光驱动控制方法和系统的工作原理进行详细分析。
一、背光驱动控制方法的分类背光驱动控制方法可以根据不同的原理和控制方式进行分类。
常见的分类方法有以下几种:1. 直接驱动法直接驱动法是指将电源直接连接到背光模块,通过改变电源电压或电流来控制背光的亮度。
这种方法简单易行,但灵活性较差,无法实现细粒度的亮度调节。
2. PWM调光法PWM调光法是通过调制宽度脉冲信号,控制背光的亮度。
该方法可以实现精确的亮度控制,且能有效降低能耗。
在实际应用中广泛采用。
3. 多片段调光法多片段调光法是将背光模块分为多个区域,分别控制亮度。
通过不同区域的亮度变化,可以实现更丰富的显示效果。
该方法多用于彩色显示屏。
4. 自适应调光法自适应调光法是通过传感器监测环境光强度,动态调整背光的亮度。
该方法可以根据环境变化自动调节亮度,提高显示效果的适应性。
二、背光驱动系统的工作原理背光驱动系统是指整个控制背光的硬件和软件系统,其主要由以下几个部分组成:背光模块、驱动电路、控制器和功率管理单元。
1. 背光模块背光模块是由若干个LED灯组成的,其数量和排列方式根据屏幕大小和显示需求而定。
LED作为一种高效、长寿命的光源,被广泛应用于背光模块中。
2. 驱动电路驱动电路负责将输入的电压或电流转化为背光模块所需要的驱动信号。
对于直接驱动法,驱动电路通常比较简单;而对于PWM调光法和多片段调光法,驱动电路需要采用专门的控制芯片来实现精确的调光功能。
3. 控制器控制器是整个背光驱动系统的核心部件,负责接收外部命令或传感器反馈信号,并控制驱动电路的工作。
控制器通常采用微处理器或专用的集成电路,能够实现各种调光方法的控制算法,并提供灵活的参数设置接口。
4. 功率管理单元功率管理单元主要负责对背光模块的电源进行管理和保护。
背光驱动芯片背光驱动芯片是指用于控制背光模块的一种电子芯片。
背光模块是液晶显示器的一个重要组成部分,可以提供背光光源,使得液晶显示器可以在暗环境下正常显示图像。
背光驱动芯片的主要功能是控制背光模块的亮度、色温和色彩等参数。
通过调整背光的亮度,可以使得显示器在不同的环境中都能够显示清晰的图像。
而通过调整背光的色温和色彩,可以使得图像的颜色更加鲜艳,更加真实。
背光驱动芯片的原理是利用PWM(脉宽调制)技术来控制背光的亮度。
PWM技术是一种通过改变信号的占空比来控制信号的平均功率的技术。
在背光驱动芯片中,通过改变PWM信号的占空比,可以改变背光的亮度。
背光驱动芯片通常都会有多个PWM输出端口,每个输出端口对应一个背光通道。
不同的液晶显示器可能会有不同数量的背光通道,一般来说,常见的液晶显示器有单背光和双背光两种。
单背光显示器只有一个背光通道,而双背光显示器有两个背光通道。
背光驱动芯片还可以支持多种调光模式。
在自动调光模式下,芯片可以根据显示器的亮度和环境亮度来自动调节背光的亮度。
在手动调光模式下,芯片可以根据用户的设置来调节背光的亮度。
此外,背光驱动芯片还可以支持背光开关和背光脉冲宽度调整等功能。
背光驱动芯片的选型需要考虑多个因素。
首先,需要考虑背光模块的功率需求和控制精度。
较大的背光模块通常需要较高的功率和精确的控制,因此需要选择功率较大、控制精度较高的芯片。
其次,需要考虑背光模块的接口类型和通信协议。
常见的接口类型有I2C、SPI和PWM等,而通信协议有标准的和定制的两种。
最后,还需要考虑产品的成本和可靠性等因素。
总之,背光驱动芯片是液晶显示器中的一个重要组成部分,可以通过控制背光的亮度、色温和色彩等参数,使得显示器在不同的环境中都能够显示清晰、鲜艳和真实的图像。
选型时需要考虑多个因素,包括功率需求、控制精度、接口类型和通信协议、成本和可靠性等。
Kernel中背光控制张弦在LED驱动led-class.c有如下brightness的声明static struct device_attribute led_class_attrs[] = {__ATTR(brightness, 0644, led_brightness_show, led_brightness_store),__ATTR(max_brightness, 0644, led_max_brightness_show,led_max_brightness_store),#ifdef CONFIG_LEDS_TRIGGERS__ATTR(trigger, 0644, led_trigger_show, led_trigger_store),#endif__ATTR_NULL,};这里调用了led_brightness_store做为写背光函数,在led_brightness_store函数里,调用led_set_brightness设置背光亮度,最终是调用了led_cdev->brightness_set(led_cdev, value);最终实现操作会调用驱动里的brightness_set()函数。
在LED驱动中led_classdev_register ()函数调用device_create()创建了操作结构体空间leds_class,led_cdev->dev=device_create(leds_class, parent, 0, led_cdev,"%s", led_cdev->name);在显示驱动里(msm_fb.c),使用LEDS驱动提供的函数 led_classdev_register()与显示驱动关联起来的。
把brightness_set指向了msm_fb_set_bl_brightness()static struct led_classdev backlight_led = {"lcd-backlight",.name =MAX_BACKLIGHT_BRIGHTNESS,.brightness =.brightness_set = msm_fb_set_bl_brightness,};static int msm_fb_probe (struct platform_device *pdev){…………………………../* android supports only one lcd-backlight/lcd for now */if (!lcd_backlight_registered) {if (led_classdev_register(&pdev->dev, &backlight_led))printk(KERN_ERR "led_classdev_register failed\n"); elselcd_backlight_registered = 1;}…………………………..}这样就把backlight_led 结构体指针传给了LEDS 驱动,所以LEDS 里的led_cdev->brightness_set 能调用到msm_fb_set_bl_brightness 实现背光控制通过函数msm_fb_register_driver , msm_fb_probe ,led_classdev_register(&pdev->dev, &backlight_led);在backlight_led 结构体里,设置节点名称lcd-backlight 和控制接口。
广州致远电子股份有限公司背光与logo 配置说明基于EPC-6G2C-L 工控板修订历史目录1. 适用范围 (1)2. 开发环境 (2)3. 技术实现 (3)3.1内核源码解压 (3)3.2Uboot源码解压 (3)3.3背光配置 (3)3.3.1Uboot中配置背光 (3)3.3.2内核中配置背光 (4)3.4待机模式配置 (4)3.4.1系统中设置待机 (4)3.4.2Uboot命令行中设置待机 (4)3.4.3Uboot源码中设置待机 (4)3.5Uboot启动阶段的logo配置 (5)3.5.1Uboot命令行中配置参数 (5)3.5.2源码中添加液晶参数 (6)3.5.3Logo图片更新 (6)3.6内核启动阶段的logo配置 (7)3.6.1制作ppm格式logo图片 (7)3.6.2Logo图片更新 (7)3.7系统液晶参数配置 (7)3.7.1新建设备树 (7)3.7.2修改Makefile文件 (8)3.7.3编译设备树源码 (8)3.8uboot编译与更新 (9)3.9内核编译与更新 (9)3.9.1脚本方式编译 (9)3.9.2独立命令编译 (10)3.9.3固件更新 (10)3.10液晶参数计算 (10)3.10.1水平时序 (11)3.10.2垂直时序 (12)3.10.3补充 (12)4. 免责声明 (13)1. 适用范围本文主要介绍在EPC-6G2C-L(M6G2C)上,配置uboot与内核的背光亮度,以及修改logo图片的功能。
其应用原理及配置步骤,也适用于A6GxC系列其他产品。
2. 开发环境1) 开发主机环境:Ubuntu 12.04(64 位)、gcc-linaro-arm-linux-gnueabihf-4.9-2014.09 系列交叉工具链2) 硬件清单:EPC-6G2C-L 工控板3) 软件资源:光盘EPC_IoT_M6GxC_A6GxC V1.03 中的内核源码包:linux-src-bsp-4.1.15.tar.gz (或者更高版本光盘资料提供的内核源码包)3. 技术实现注意:在开始进行下面的操作之前,请首先确认ubuntu 主机的开发环境已经搭建好。
st7735 底层原理标题:深入理解ST7735底层原理ST7735是一种广泛应用在嵌入式系统中的彩色液晶显示控制器,以其低功耗、小尺寸和高性价比等特点深受开发者喜爱。
本文将逐步解析ST7735的底层原理,帮助读者深入理解其工作过程。
一、ST7735的基本结构ST7735主要由以下几个部分组成:接口模块、内存模块、显示引擎、颜色转换模块和电源管理模块。
1. 接口模块:负责与外部设备(如微控制器)进行通信,接收图像数据和控制命令。
2. 内存模块:包括GRAM(图形RAM)和CGRAM(字符RAM),用于存储待显示的图像和字符数据。
3. 显示引擎:负责将GRAM中的图像数据转换为驱动液晶屏所需的电信号,并控制液晶屏的刷新过程。
4. 颜色转换模块:负责将接收到的RGB颜色数据转换为适合液晶屏显示的颜色模式(如RGB565或RGB666)。
5. 电源管理模块:负责控制液晶屏和内部电路的供电,以实现低功耗运行。
二、ST7735的工作流程ST7735的工作流程主要包括以下几个步骤:1. 初始化:通过发送一系列控制命令,设置ST7735的工作模式、分辨率、颜色模式等参数。
2. 数据传输:将待显示的图像数据通过接口模块发送到GRAM中。
这个过程通常采用串行或并行的方式进行。
3. 图像处理:显示引擎读取GRAM中的图像数据,进行颜色转换和像素排列,生成驱动液晶屏所需的电信号。
4. 屏幕刷新:根据设定的刷新频率,显示引擎逐行或逐帧地更新液晶屏上的图像。
这个过程中,电源管理模块会根据需要调整液晶屏和内部电路的供电电压和电流。
三、ST7735的控制命令ST7735通过接收微控制器发送的控制命令来完成各种功能配置和操作。
这些命令主要包括以下几类:1. 基本配置命令:用于设置工作模式、分辨率、颜色模式、扫描方向等参数。
2. 显示控制命令:用于开启或关闭屏幕、设置对比度、亮度、伽玛校正等参数。
3. 图像处理命令:用于设置图像旋转、镜像、缩放等效果。
背光 pwm背光PWM是一种常见的LCD显示屏背光控制方式,其通过对LCD显示屏的背光LED进行PWM控制来实现屏幕亮度调节,具有较低的功耗和较高的调节范围等特点,广泛应用于各类移动设备和显示方案中。
一、背光PWM的原理背光PWM控制的基本原理是使用周期性的脉冲信号来控制背光LED的亮度,即通过调节脉冲宽度和频率来实现背光亮度的变化。
当脉冲信号的宽度比较小时,LED仅会在一小部分时间内被激活,背光亮度则会变暗;当脉冲信号的宽度增大时,LED则会被更长时间地激活,背光亮度则会逐渐升高。
因此,通过对PWM周期、占空比等参数的调节,可以实现对背光亮度的快速调节和精准控制。
二、背光PWM的实现在实际应用中,背光PWM可以通过各种数字信号处理器(DSP)、单片微控制器(MCU)等芯片实现。
例如,ARM 公司的Cortex-M系列芯片中就内置了多个可编程的高精度定时器模块,可以轻松实现背光PWM控制。
同时,各大半导体公司也提供了相应的驱动芯片和开发板,方便用户进行快速开发。
除了芯片级别的实现,背光PWM还可以通过外围硬件电路实现,例如使用555定时器和MOS管等电子元件搭建一个简单的PWM输出电路,或者使用各种现成的集成PWM 调节器实现亮度控制。
三、背光PWM的应用背光PWM广泛应用于各类移动设备和显示方案中,例如数码相机、智能手机、平板电脑、液晶电视、汽车仪表盘等。
在这些应用中,背光PWM不仅能够实现屏幕亮度的快速调节和节能,而且还能实现闪烁抗干扰、色彩平衡调节等功能,提高了产品的使用体验。
在虚拟现实、增强现实等新兴领域中,背光PWM也扮演着越来越重要的角色。
这些领域的产品需要高刷屏和低时延的显示效果,而背光PWM可以通过快速调节背光LED 亮度来实现,从而满足产品的高性能要求。
四、背光PWM的发展趋势随着科技的进步和市场的需求,背光PWM也在不断地发展和更新。
具体包括:1. 软件PWM取代硬件PWM传统的背光PWM实现大多依赖硬件电路实现,但是随着MCU性能的提升和代码优化技术的成熟,软件PWM在一定场景下也逐渐地取代了硬件PWM。
Rockchip背光控制开发指南发布版本:0.1日期:2016.07前言概述产品版本读者对象本文档(本指南)主要适用于以下工程师:技术支持工程师软件开发工程师修订记录目录1驱动文件与DTS节点 ..................................................................................... 1-1 2参数配置 .................................................................................................... 2-1Rockchip 背光控制开发指南1驱动文件与DTS节点1驱动文件与DTS节点驱动文件所在位置:drivers/video/backlight/pwm_bl.cDts节点:backlight: backlight {compatible = "pwm-backlight";pwms = <&pwm0 0 25000 0>;brightness-levels = <0 1 2 3 4 5 6 78 9 10 11 12 13 14 1516 17 18 19 20 21 22 2324 25 26 27 28 29 30 3132 33 34 35 36 37 38 3940 41 42 43 44 45 46 4748 49 50 51 52 53 54 5556 57 58 59 60 61 62 6364 65 66 67 68 69 70 7172 73 74 75 76 77 78 7980 81 82 83 84 85 86 8788 89 90 91 92 93 94 9596 97 98 99 100 101 102 103104 105 106 107 108 109 110 111112 113 114 115 116 117 118 119120 121 122 123 124 125 126 127128 129 130 131 132 133 134 135136 137 138 139 140 141 142 143144 145 146 147 148 149 150 151152 153 154 155 156 157 158 159160 161 162 163 164 165 166 167168 169 170 171 172 173 174 175176 177 178 179 180 181 182 183184 185 186 187 188 189 190 191192 193 194 195 196 197 198 199200 201 202 203 204 205 206 207208 209 210 211 212 213 214 215216 217 218 219 220 221 222 223224 225 226 227 228 229 230 231232 233 234 235 236 237 238 239240 241 242 243 244 245 246 247248 249 250 251 252 253 254 255>;default-brightness-level = <200>;enable-gpios = <&gpio1 13 GPIO_ACTIVE_HIGH>;2参数配置因为背光比较简单,下面描述各个参数的意义,看完后就会配置:1.首先是"pwms = <&pwm0 0 25000 0>", 很明显可以看出此背光是接在pwm0上面;第二个参数“0”表示index为0,因为pwm0下面只有1个pwm,所以我们的平台下面都是填0;第三个参数“25000”表示周期为25000ns,所以频率就是40k,其他频率配置类似;最后一个参数“0”表示极性,分为正极性和负极性,0表示正极性,PWM_POLARITY_INVERTED表示负极性,在下面头文件中有定义:include/dt-bindings/pwm/pwm.h:12:#define PWM_POLARITY_INVERTED(1 << 0)注意这里一定要有4个参数,否则会出错,无法获取到pwm数据。
路径:root/andriod/kernel/drivers/video/在Mdss_dsi_panel.c文件里,有一个背光控制函数static voidmdss_dsi_panel_bl_ctrl(struct mdss_panel_data *pdata,u32 bl_level)背光的亮度就是根据这个参数值bl_level进行调节的。
首先看看谁调用的这个函数:在mdss_dsi_panel_init()函数初始化开始,有这么一句ctrl_pdata->panel_data.set_backlight = mdss_dsi_panel_bl_ctrl;然后搜索panel_data.set_backlight找到:在Mdss_fb.c()文件里有函数void mdss_fb_set_backlight(struct msm_fb_data_type *mfd, u32 bkl_lvl){…… ……;pdata->set_backlight(pdata, temp);//其中pdata就是从mdss_dsi_panel.c那传过来的结构体。
…… ……;}继续找函数调用的地方:static void mdss_fb_set_bl_brightness(struct led_classdev *led_cdev, enum led_brightness value){…… ……;mdss_fb_set_backlight(mfd, bl_lvl);…… ……;}继续:static struct led_classdev backlight_led = {.name = "lcd-backlight",.brightness = MDSS_MAX_BL_BRIGHTNESS,.brightness_set = mdss_fb_set_bl_brightness,.max_brightness = MDSS_MAX_BL_BRIGHTNESS,};可以看到:.brightness_set = mdss_fb_set_bl_brightness这个mdss_fb_set_bl_brightness()函数又是某个结构体的回调函数。
Kernel中背光控制
张弦
在LED驱动led-class.c有如下brightness的声明
static struct device_attribute led_class_attrs[] = {
__ATTR(brightness, 0644, led_brightness_show, led_brightness_store),
__ATTR(max_brightness, 0644, led_max_brightness_show,
led_max_brightness_store),
#ifdef CONFIG_LEDS_TRIGGERS
__ATTR(trigger, 0644, led_trigger_show, led_trigger_store),
#endif
__ATTR_NULL,
};
这里调用了led_brightness_store做为写背光函数,在led_brightness_store函数里,调用led_set_brightness设置背光亮度,最终是调用了
led_cdev->brightness_set(led_cdev, value);最终实现操作会调用驱动里的brightness_set()函数。
在LED驱动中led_classdev_register ()函数调用device_create()创建了操作结构体空间leds_class,
led_cdev->dev=device_create(leds_class, parent, 0, led_cdev,"%s", led_cdev->name);
在显示驱动里(msm_fb.c),使用LEDS驱动提供的函数 led_classdev_register()与显示驱动关联起来的。
把brightness_set指向了msm_fb_set_bl_brightness()
static struct led_classdev backlight_led = {
"lcd-backlight",
.name =
MAX_BACKLIGHT_BRIGHTNESS,
.brightness =
.brightness_set = msm_fb_set_bl_brightness,
};
static int msm_fb_probe (struct platform_device *pdev)
{
…………………………..
/* android supports only one lcd-backlight/lcd for now */
if (!lcd_backlight_registered) {
if (led_classdev_register(&pdev->dev, &backlight_led))
printk(KERN_ERR "led_classdev_register failed\n"); else
lcd_backlight_registered = 1;
}
…………………………..
}
这样就把backlight_led 结构体指针传给了LEDS 驱动,所以LEDS 里的led_cdev->brightness_set 能调用到msm_fb_set_bl_brightness 实现背光控制
通过函数msm_fb_register_driver , msm_fb_probe ,
led_classdev_register(&pdev->dev, &backlight_led);
在backlight_led 结构体里,设置节点名称lcd-backlight 和控制接口。
led_classdev_register ()调用device_create 函数实现创建节点。