我在用t113s3 ,tina 2.x ,驱动mipi的amoled屏,并尝试实时调整亮度
首先我绑定了 .set_bright函数
static int lcd_set_bright(u32 sel, u32 bright)
{
u8 para2 = bright & 0xff;
sunxi_lcd_dsi_dcs_write_2para(sel, 0x51, 0x00, para2);
return 0;
}
然后一调用亮度调节,屏幕亮度虽然调节了但立即卡死了
经查询得知亮度调节需要在LP模式下进行
于是我修改为
static int lcd_set_bright(u32 sel, u32 bright)
{
sunxi_lcd_dsi_mode_switch(sel, 0, 1); //进入LP模式
u8 para2 = bright & 0xff;
sunxi_lcd_dsi_dcs_write_2para(sel, 0x51, 0x00, para2);
sunxi_lcd_dsi_mode_switch(sel, 0, 0); //进入高速模式
return 0;
}
症状依旧。
在追踪了sunxi_lcd_dsi_mode_switch 函数后我发现
de/lowlever_v2x/de_dsi.c 文件里面根本没实现 dsi_mode_switch函数,如下
__s32 dsi_mode_switch(__u32 sel, __u32 cmd_en, __u32 lp_en)
{
return 0;
}
反而是 de/lowlever_v2x/de_dsi_28.c文件里面实现了
__s32 dsi_mode_switch(__u32 sel, __u32 cmd_en, __u32 lp_en)
{
/for video mode only/
/switch between low power mode and high speed mode/
dsi_dev[sel]->dsi_cmd_ctl.bits.gen_sw_0p_tx_lp = lp_en;
dsi_dev[sel]->dsi_cmd_ctl.bits.gen_sw_1p_tx_lp = lp_en;
dsi_dev[sel]->dsi_cmd_ctl.bits.gen_sw_2p_tx_lp = lp_en;
dsi_dev[sel]->dsi_cmd_ctl.bits.gen_sr_0p_tx_lp = lp_en;
dsi_dev[sel]->dsi_cmd_ctl.bits.gen_sr_1p_tx_lp = lp_en;
dsi_dev[sel]->dsi_cmd_ctl.bits.gen_sr_2p_tx_lp = lp_en;
dsi_dev[sel]->dsi_cmd_ctl.bits.dcs_sw_0p_tx_lp = lp_en;
dsi_dev[sel]->dsi_cmd_ctl.bits.dcs_sw_1p_tx_lp = lp_en;
dsi_dev[sel]->dsi_cmd_ctl.bits.dcs_sr_0p_tx_lp = lp_en;
dsi_dev[sel]->dsi_cmd_ctl.bits.max_rd_pkg_size_lp = lp_en;
dsi_dev[sel]->dsi_cmd_ctl.bits.gen_lw_tx_lp = lp_en;
dsi_dev[sel]->dsi_cmd_ctl.bits.dcs_lw_tx_lp = lp_en;
/*command mode use dbi interface*/
/*video mode use dpi interface*/
if (cmd_en) {
dsi_dev[sel]->dsi_cfg1.bits.dpi_src = 0;
dsi_delay_ms(16);
dsi_dev[sel]->dsi_vid_ctl0.bits.video_mode_en = 0;
dsi_dev[sel]->dsi_cmd_ctl.bits.cmd_mode_en = 1;
} else {
dsi_dev[sel]->dsi_cmd_ctl.bits.cmd_mode_en = 0;
dsi_dev[sel]->dsi_vid_ctl0.bits.video_mode_en = 1;
dsi_dev[sel]->dsi_cfg1.bits.dpi_src = 1;
}
return 0;
}
但问题在于,T113 S3 属于 de_dsi.c ,他编译不调用28的那个版本。
我尝试将28的那个版本的函数拷贝过去,编译出错,因为结构体不一样,de_dsi.c 这边的结构体没有那几个成员,不如说全部都不一样
问题进入死胡同,后来我在论坛搜索到之前大佬2年前的帖子
https://bbs.aw-ol.com/topic/1852/oled的mipi屏幕实时亮度改变问题/5?_=1729702801269&lang=zh-CN
大佬后来用中断实现了调节过程,但由于缺乏几个函数,我对中断这种底层东西一无所谓
就想问问,目前T113 平台要调节OLED亮度,要怎样才能实现呢
感激不尽