显示相关驱动 feature
程序员文章站
2022-03-09 13:41:07
...
1 双击唤醒
display panel driver 需要根据是否有enable 这个feature 决定上下电的流程。
如果该feature 有enable 则只需要关闭vdd即可
static int lcm_prepare(struct drm_panel *panel)
{
struct lcm *ctx = panel_to_lcm(panel);
int ret;
pr_info("%s\n", __func__);
if (ctx->prepared)
return 0;
if (is_tp_doubleclick_enable() == false) {
lcm_panel_vddi_enable(ctx->dev);
udelay(1000);
/*VCAM_LDO_EN --------> GPIO158*/
ctx->cam_gpio = devm_gpiod_get_index(ctx->dev,
"cam", 0, GPIOD_OUT_HIGH);
if (IS_ERR(ctx->cam_gpio)) {
dev_err(ctx->dev, "%s: cannot get dvdd gpio %ld\n",
__func__, PTR_ERR(ctx->cam_gpio));
return PTR_ERR(ctx->cam_gpio);
}
gpiod_set_value(ctx->cam_gpio, 1);
devm_gpiod_put(ctx->dev, ctx->cam_gpio);
/*DVDD -----> GPIO3*/
ctx->dvdd_gpio = devm_gpiod_get_index(ctx->dev,
"dvdd", 0, GPIOD_OUT_HIGH);
if (IS_ERR(ctx->dvdd_gpio)) {
dev_err(ctx->dev, "%s: cannot get dvdd gpio %ld\n",
__func__, PTR_ERR(ctx->dvdd_gpio));
return PTR_ERR(ctx->dvdd_gpio);
}
gpiod_set_value(ctx->dvdd_gpio, 1);
devm_gpiod_put(ctx->dev, ctx->dvdd_gpio);
udelay(1000);
/*LED EN Power on*/
ctx->leden_gpio = devm_gpiod_get_index(ctx->dev,
"leden", 0, GPIOD_OUT_HIGH);
if (IS_ERR(ctx->leden_gpio)) {
dev_err(ctx->dev, "%s: cannot get leden_gpio gpio %ld\n",
__func__, PTR_ERR(ctx->leden_gpio));
return PTR_ERR(ctx->leden_gpio);
}
gpiod_set_value(ctx->leden_gpio, 1);
devm_gpiod_put(ctx->dev, ctx->leden_gpio);
} else {
/*DVDD -----> GPIO3*/
ctx->dvdd_gpio = devm_gpiod_get_index(ctx->dev,
"dvdd", 0, GPIOD_OUT_HIGH);
if (IS_ERR(ctx->dvdd_gpio)) {
dev_err(ctx->dev, "%s: cannot get dvdd gpio %ld\n",
__func__, PTR_ERR(ctx->dvdd_gpio));
return PTR_ERR(ctx->dvdd_gpio);
}
gpiod_set_value(ctx->dvdd_gpio, 1);
devm_gpiod_put(ctx->dev, ctx->dvdd_gpio);
}
ktz8863a_bl_bias_conf();
ktz8863a_bias_enable(1, 1);
udelay(10*1000);
lcm_panel_init(ctx);
ktz8863a_brightness_set(1023);
2 sensor的窄缝方案
注意:有些项目无需进行背光补偿值校准,因为窄缝光感的硬件结构设计,屏幕不会漏光到窄缝光感,有些则需要
需要的就是需要led driver porting poll 机制
具体见linux_poll() 4.1节
窄缝方案的原理可以看另一篇博客
上一篇: latex学习笔记
下一篇: 【逻辑】学习笔记一——词项