记录gp7101背光驱动和设备树绑定不成功问题解决(基于hzhy_rk3506)
一、背景
泰山派的背光电路因为电流超过mipi3.1承受范围,所以mipi3.1使用i2c转pwm芯片gp7101来驱动屏幕背光,我们将该屏幕用于rk3506上,i2cdetect -y 0结果如下
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- UU -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- 58 -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
检测到gp7101,但是驱动没有绑定上,仍然显示58
二、尝试过程
1.改设备树
root@rk3506-buildroot:/# ls /proc/device-tree/i2c@ff040000
#address-cells clock-names myts@38 reg
#size-cells clocks name status
GP7101@58 compatible pinctrl-0
clock-frequency interrupts pinctrl-names
root@rk3506-buildroot:/#
以为是设备树大小写问题,将GP7101改成gp7101,不管用
gp7101@58 {
compatible = "gp7101-backlight";
reg = <0x58>;
max-brightness-levels = <255>;
default-brightness-level = <100>;
};
2.查看gp7101驱动是否存在
root@rk3506-buildroot:/# ls /sys/bus/i2c/drivers
ES8323 gp7101-backlight proximity_stk3332 rtc-hym8563
Goodix-TS-GT1X gslX680-pad rk730 sii902x
dummy light_stk3332 rk808
es7202 my-touch rtc-ds1307
root@rk3506-buildroot:/#
可以看到gp7101-backlight驱动存在
3.尝试手动绑定
root@rk3506-buildroot:/# ls /sys/bus/i2c/drivers/gp7101-backlight
bind uevent unbind
root@rk3506-buildroot:/#
驱动正常绑定的话会显示下面的,下面是正常情况下输出
ight@rk3506-buildroot:/sys/class/backlight# ls /sys/bus/i2c/drivers/gp7101-backli
0-0058 bind uevent unbind
root@rk3506-buildroot:/sys/class/backlight#
手动绑定
doot@rk3506-buildroot:/# echo 0-0058 > /sys/bus/i2c/drivers/gp7101-backlight/bind
[ 178.815290] gp7101_bl:gp7101_bl_probe 131 locat
[ 178.815396] sysfs: cannot create duplicate filename '/class/backlight/backlight'
[ 178.831127] CPU: 2 PID: 928 Comm: sh Tainted: G O 6.1.118 #22
[ 178.841143] Hardware name: Generic DT based system
[ 178.846180] unwind_backtrace from show_stack+0xb/0xc
[ 178.851227] show_stack from dump_stack_lvl+0x2b/0x34
[ 178.856249] dump_stack_lvl from sysfs_warn_dup+0x37/0x48
[ 178.861255] sysfs_warn_dup from sysfs_do_create_link_sd+0x55/0x70
[ 178.870996] sysfs_do_create_link_sd from device_add+0x12b/0x460
[ 178.880785] device_add from backlight_device_register+0x93/0x120
[ 178.890650] backlight_device_register from devm_backlight_device_register+0x35/0x64
[ 178.900540] devm_backlight_device_register from gp7101_bl_probe+0xa7/0x114
[ 178.910430] gp7101_bl_probe from i2c_device_probe+0x1a1/0x1bc
[ 178.920326] i2c_device_probe from really_probe+0xb1/0x18c
[ 178.930185] really_probe from __driver_probe_device+0x103/0x128
[ 178.940023] __driver_probe_device from device_driver_attach+0x17/0x36
[ 178.949861] device_driver_attach from bind_store+0x41/0x58
[ 178.959667] bind_store from kernfs_fop_write_iter+0xad/0xe8
[ 178.969494] kernfs_fop_write_iter from vfs_write+0x9d/0xe0
[ 178.979367] vfs_write from ksys_write+0x39/0x60
[ 178.984377] ksys_write from ret_fast_syscall+0x1/0x54
[ 178.989358] Exception stack(0xc1471fa8 to 0xc1471ff0)
[ 178.994299] 1fa0: 00000007 00529248 00000001 00529248 00000007 00000001
[ 179.003999] 1fc0: 00000007 00529248 a6f09ba8 00000004 a6f088ec 00000000 00529210 00000000
[ 179.013705] 1fe0: 004f58c8 aec949f0 a6e1d98c a6e93ef0
[ 179.019473] gp7101-backlight 0-0058: failed to register backlight device
[ 179.023259] gp7101-backlight: probe of 0-0058 failed with error -17
sh: echo: write error: File exists
-17表示-EEXIST (File exists) 系统里已经存在一个名字叫 backlight 的背光设备
果然
root@rk3506-buildroot:/dev# ls /sys/class/backlight
backlight
三、改驱动
将gp7101_bl.c里面gp7101_bl_probe函数的
/* 初始化背光设备 */
bl = devm_backlight_device_register(&client->dev, "backlight", &client->dev, data, &gp7101_backlight_ops,&props);
if (IS_ERR(bl)) {
dev_err(&client->dev, "failed to register backlight device\n");
return PTR_ERR(bl);
}
改成
/* 初始化背光设备 */
bl = devm_backlight_device_register(&client->dev, "gp7101-bl", &client->dev, data, &gp7101_backlight_ops,&props);
if (IS_ERR(bl)) {
dev_err(&client->dev, "failed to register backlight device\n");
return PTR_ERR(bl);
}
四、编译测试
root@rk3506-buildroot:/sys/class/backlight# i2cdetect -y 0
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- UU -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- UU -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
root@rk3506-buildroot:/sys/class/backlight# ls /sys/class/backlight/
backlight gp7101-bl
root@rk3506-buildroot:/sys/class/backlight# ls /sys/bus/i2c/drivers/gp7101-backlight
0-0058 bind uevent unbind
root@rk3506-buildroot:/sys/class/backlight#
驱动绑定成功
五、测试功能
root@rk3506-buildroot:/sys/class/backlight/gp7101-bl# ls
actual_brightness device scale uevent
bl_power max_brightness subsystem
brightness power type
//最大亮度
root@rk3506-buildroot:/sys/class/backlight/gp7101-bl# cat max_brightness
255
//当前亮度
root@rk3506-buildroot:/sys/class/backlight/gp7101-bl# cat actual_brightness
100
root@rk3506-buildroot:/sys/class/backlight/gp7101-bl#

浙公网安备 33010602011771号