平台 | 内核版本 | 安卓版本 |
---|---|---|
RK3399 | Linux4.4 | Android7.1 |
DTS
目录:kernel/arch/arm64/boot/dts/rockchip/rk3399-nanopi4-common.dtsi
解释下:pwms = <&pwm0 0 25000 0>;
第一个参数 表示此背光接在 pwm0 上;
第二个参数 表示 index
为 0
,pwm0
下只有 1
个 pwm
,所以填0
第三个参数 表示周期为 25000ns
,即 频率 为 40k
第四个参数 表示极性,0
正极性,1
负极性
正极性0
表示 背光为正极0~255
,占空比从0~100%
变化
负极性 1
表示 背光为负极255~0
,占空比从 100~0%
变化
解释下:default-brightness-level = <200>
表示默认的背光,它存在于开机时候背光初始化到安卓设置下来新的背光这段时间, default-brightness-level = < 200 >
表示为第 200
个元素的背光亮度
我们接着看pwm_bl
状态设置及管脚定义
pwm0
设置状态
解释下:enable-gpios
表示背光使能脚,这个根据电路原理图配置即可;
这里的12来源于:16+2=18,其中8是因为GPIO4_C2
是属于GPIO4
的C
组,GPIO_ACTIVE_HIGH
表示高电平有效,如果想要低电平有效,可以改为:GPIO_ACTIVE_LOW
,这个属性将被驱动所读取。
我们的背光使用在edp
屏上面:
原理图如下:
驱动分析
platform driver :
目录:kernel/drivers/video/backlight/pwm_bl.c
设备树和驱动通过compatible
匹配:
probe 分析:
dev_get_platdata
获取的是device
结构体成员变量的void * platform_data
。
pwm_backlight_parse_dt
解析 dts
中的 brightness-levels
、default-brightness-level
首先看一下使用到的结构体:
目录:kernel/drivers/video/backlight/pwm_bl.c
目录:kernel/include/linux/pwm_backlight.h
目录:kernel/include/linux/backlight.h