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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

android MTK驱动背光唤醒流程

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

在標準的android驅動中,睡眠喚醒流程非常清晰,能夠較方便的更改lcd喚醒時間和led背光的點亮時間,但是也很容易出現問題,比如說閃屏,喚醒慢!

出現閃屏有兩個原因

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

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

我按照標準驅動流程去分析mtk的做法

他的video最初的注冊位置是

Mediatekkerneldriversvideomtkfb.c里面

入口函數

module_init(mtkfb_init);

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

register_early_suspend(&mtkfb_early_suspend_handler);

是注冊睡眠機制函數

只要注冊這里就是把mtkfb_early_suspend_handler下面的結構體里面的函數

.suspend=mtkfb_early_suspend,

.resume=mtkfb_late_resume,

睡眠、喚醒交給系統來管理

他的調用順序和

.level=EARLY_SUSPEND_LEVEL_DISABLE_FB,這個值有關系

去找找背光的驅動

module_init(mt65xx_leds_init);背光入口函數

在mt65xx_leds_init中注冊平臺類設備

ret=platform_driver_register(&mt65xx_leds_driver);

他函數注冊信息是

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,

};

我們也可以再手機adbshell里面查找到相關的信息

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

/sys/devices/platform/leds-mt65xx

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

在mt65xx_leds_probe函數中

有這樣一條代碼

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

難道是直接給上層節點直接設置??

繼續跟代碼

仔細分析代碼mt65xx_leds_probe函數

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;

}

建立了節點之后呢??????????

不得不佩服mtk弄個鳥東西搞這么復雜

進入

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

發現有

Brightness

用這種可以設置背光燈亮度

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節點

上層直接調用……

為什么?????

打log發現在resumelcd后就會調用brightness寫值

他沒有用

.level=EARLY_SUSPEND_LEVEL_DISABLE_FB,這個來管理

優點

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

流程已經寫死,只要開發者不破壞此模式就不會有bug

缺點

破壞了源代碼的流程,已經完全是一體,真正出現問題比較難改!

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

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。