uboot开启背光

evb_rv1106.c

#define GPIO1_BASE		0xff530000
#define GPIO1_B0_MASK		BIT(8)
/* 拉高 LCD 背光(GPIO1_B0)*/
static void backlight_init(void)
{
	u32 ddr = gpio_v2_read(GPIO1_BASE + GPIO0_DDR_L);
	ddr |= GPIO1_B0_MASK;
	gpio_v2_write(GPIO1_BASE + GPIO0_DDR_L, ddr);

	u32 dr = gpio_v2_read(GPIO1_BASE + GPIO0_DR_L);
	dr |= GPIO1_B0_MASK;
	gpio_v2_write(GPIO1_BASE + GPIO0_DR_L, dr);
	printf("[LCD] Backlight GPIO1_B0 on\n");
}

设备树修改

backlight: backlight {
	status = "okay";
	compatible = "pwm-backlight";
	pwms = <&pwm3 0 50000 0>;
	brightness-levels = <0 80 160 255>;
	default-brightness-level = <0>;
	power-supply = <&vcc_3v3>;
};
//背光控制不交给DRM
panel: panel {
	// backlight = <&backlight>;
}

SPI初始化驱动修改

uboot屏幕驱动250 - 254

	/* Backlight will be enabled by kernel drm logo */
	// if (priv->backlight)
	// 	backlight_enable(priv->backlight);

内核驱动修改

路径:

/kernel/drivers/gpu/drm/rockchip/rockchip_drm_logo.c

添加头文件

#include <linux/backlight.h>

添加1070 - 1080

drm_atomic_state_put(state);
+{
+	struct backlight_device *bd;

+	bd = backlight_device_get_by_type(BACKLIGHT_RAW);
+	if (bd) {
+		backlight_enable(bd);
+		put_device(&bd->dev);
+	}
+}

private->loader_protect = true;

调试

# 查看当前亮度
cat /sys/class/backlight/backlight/brightness
#返回0-3
# 设置亮度(0-3,对应 brightness-levels 的索引)
echo 3 > /sys/class/backlight/backlight/brightness   # 高档
echo 2 > /sys/class/backlight/backlight/brightness   # 中档
echo 1 > /sys/class/backlight/backlight/brightness   # 低档
echo 0 > /sys/class/backlight/backlight/brightness   # 关闭