日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

android MTK驱动背光唤醒流程

發(fā)布時間:2023/12/29 综合教程 31 生活家
生活随笔 收集整理的這篇文章主要介紹了 android MTK驱动背光唤醒流程 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

在標(biāo)準(zhǔn)的android驅(qū)動中,睡眠喚醒流程非常清晰,能夠較方便的更改lcd喚醒時間和led背光的點亮?xí)r間,但是也很容易出現(xiàn)問題,比如說閃屏,喚醒慢!

出現(xiàn)閃屏有兩個原因

1、開背光時間在喚醒lcd前!

2、開背光時間在喚醒lcd后,但是沒有等lcd刷屏就點亮背光!

我按照標(biāo)準(zhǔn)驅(qū)動流程去分析mtk的做法

他的video最初的注冊位置是

Mediatekkerneldriversvideomtkfb.c里面

入口函數(shù)

module_init(mtkfb_init);

在函數(shù)int__initmtkfb_init(void)中有這樣一句

register_early_suspend(&mtkfb_early_suspend_handler);

是注冊睡眠機(jī)制函數(shù)

只要注冊這里就是把mtkfb_early_suspend_handler下面的結(jié)構(gòu)體里面的函數(shù)

.suspend=mtkfb_early_suspend,

.resume=mtkfb_late_resume,

睡眠、喚醒交給系統(tǒng)來管理

他的調(diào)用順序和

.level=EARLY_SUSPEND_LEVEL_DISABLE_FB,這個值有關(guān)系

去找找背光的驅(qū)動

module_init(mt65xx_leds_init);背光入口函數(shù)

在mt65xx_leds_init中注冊平臺類設(shè)備

ret=platform_driver_register(&mt65xx_leds_driver);

他函數(shù)注冊信息是

staticstructplatform_drivermt65xx_leds_driver={

.driver ={

.name ="leds-mt65xx",

.owner =THIS_MODULE,

},

.probe =mt65xx_leds_probe,

.remove =mt65xx_leds_remove,

//.suspend =mt65xx_leds_suspend,

.shutdown=mt65xx_leds_shutdown,

};

我們也可以再手機(jī)adbshell里面查找到相關(guān)的信息

/sys/bus/platform/devices/leds-mt65xx

/sys/devices/platform/leds-mt65xx

但是沒有找到這里的設(shè)置路徑???奇怪!!那背光燈設(shè)置是在什么地方呢????

在mt65xx_leds_probe函數(shù)中

有這樣一條代碼

g_leds_data[i]->cdev.brightness_set=mt65xx_led_set;

難道是直接給上層節(jié)點直接設(shè)置??

繼續(xù)跟代碼

仔細(xì)分析代碼mt65xx_leds_probe函數(shù)

if(strcmp(g_leds_data[i]->cdev.name,"lcd-backlight")==0)

{

rc=device_create_file(g_leds_data[i]->cdev.dev,&dev_attr_duty);

if(rc)

{

LEDS_DEBUG("[LED]device_create_filedutyfail!
");

}

rc=device_create_file(g_leds_data[i]->cdev.dev,&dev_attr_div);

if(rc)

{

LEDS_DEBUG("[LED]device_create_filedutyfail!
");

}

rc=device_create_file(g_leds_data[i]->cdev.dev,&dev_attr_frequency);

if(rc)

{

LEDS_DEBUG("[LED]device_create_filedutyfail!
");

}

rc=device_create_file(g_leds_data[i]->cdev.dev,&dev_attr_pwm_register);

if(rc)

{

LEDS_DEBUG("[LED]device_create_filedutyfail!
");

}

bl_setting=&g_leds_data[i]->cust;

}

建立了節(jié)點之后呢??????????

不得不佩服mtk弄個鳥東西搞這么復(fù)雜

進(jìn)入

/sys/devices/platform/leds-mt65xx/leds/lcd-backlight/

發(fā)現(xiàn)有

Brightness

用這種可以設(shè)置背光燈亮度

echo255>brightness

Brightness這東西在哪里來的?

在代碼kerneldriversledsled-class.c

里面有subsys_initcall(leds_init);

用subsys_initcall

有這樣代碼

staticstructdevice_attributeled_class_attrs[]={

__ATTR(brightness,0644,led_brightness_show,led_brightness_store),

__ATTR(max_brightness,0444,led_max_brightness_show,NULL),

#ifdefCONFIG_LEDS_TRIGGERS

__ATTR(trigger,0644,led_trigger_show,led_trigger_store),

#endif

__ATTR_NULL,

};

生成了brightness節(jié)點

上層直接調(diào)用……

為什么?????

打log發(fā)現(xiàn)在resumelcd后就會調(diào)用brightness寫值

他沒有用

.level=EARLY_SUSPEND_LEVEL_DISABLE_FB,這個來管理

優(yōu)點

不會有我開始說的那兩種bug,什么時候點亮lcd是由上層控制,上層去判斷有沒有刷屏!

流程已經(jīng)寫死,只要開發(fā)者不破壞此模式就不會有bug

缺點

破壞了源代碼的流程,已經(jīng)完全是一體,真正出現(xiàn)問題比較難改!

關(guān)于上層怎么去判斷什么時候去點亮背光,這個問題,現(xiàn)在還沒跟,以后有時間慢慢跟,不過做驅(qū)動,跟到這里已經(jīng)可以滿足驅(qū)動的要求了!

總結(jié)

以上是生活随笔為你收集整理的android MTK驱动背光唤醒流程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。