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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

被LCD调戏睡不着了

發布時間:2023/12/20 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 被LCD调戏睡不着了 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

好吧,我承認我不是因為被調戲睡不著的,我是因為今天晚上喝了一杯該死的咖啡,然后就睡不著了,這個點[3:40]在床上翻來覆去,剛開始我摸著楠哥的小腿,過了一會,覺得沒意思了,然后再摸楠哥的大腿,我想跟他說幾句話,接著是,啪的一個聲音,精神小伙給了我一巴掌。

因為睡不著,于是我就坐起來寫點奇怪的東西,就有了這篇文章。

我們今天在調試屏幕,已經在LK階段讓屏幕亮起來了,但是在kernel階段屏幕還是不能亮,排查了很久不知道問題在哪里。

1、測量了復位腳上電時序,可以看到按下power鍵休眠喚醒的時候可以看到reset腳的電平變化,也就是說這個腳是可以控制的,不過話說回來,如果這個腳不可以控制,在lk階段怎么可能亮屏呢?

2、測量mipi的lane腳,也可以看到休眠的時候沒有波形,喚醒的時候有波形,所以平臺端的視頻輸出是正確的。

3、發現上電時候復位引腳拉高后的延遲時間不夠,芯片手冊上要求是 10ms以上,但是我們代碼實際上寫的是5ms,但是實際修改后也沒有亮屏。

4、在kernel階段,我們寫入BIST模式的時候不能進入測試模式。這個可以猜測沒有寫成功是因為上電時序有問題,IC沒有進入正常的上電狀態。

明天準備排查方向

1、還是從上電時序入手,VDD 和RESET之間的時間,還有RESET和LANE數據的時間,都需要嚴格遵守,并且要用示波器測量正確。

這一點跟模組廠確認,電源開機后一直打開是沒有問題的,所以排除這一點。但是有的屏幕如果復位時序不正確,寄存器是寫不進去的。

2、去掉LK的控制,讓屏幕在Kernel階段初始化,因為從沒有電到上電有一個過程,這也是為什么LK階段上電不嚴格也可以初始化的原因,因為它總是從沒有電到有電的冷啟動。

3、叫模組廠的FAE過來,我們沒有調通,大家應該都有責任把這個事情做好,先把鍋甩出去再說。


題外話

在知乎上看到一個問題,如果當時關羽不出手,劉備不出手,張飛不出手,誰能斬華雄。

這里只討論演義,我看了很多人的答案,我覺得有兩個人可以,一個是孫堅,一個是曹洪,孫堅前期打架是很厲害的,當然也還有其他人選,比如典韋,趙云之類的,但是他們當時還沒有出現,趙云那時候年紀也還比較小,我選的這兩個人也都出現在當時的聯合軍隊中。不過不管是孫堅和曹洪,戰斗力應該都打不過華雄,即使能不被反殺,想拿下華雄人頭應該還是很難的。


時間來到今天

今天還是一樣,我把我熬夜思考出來的秘籍都測試了,開機后可以亮屏幕,但是suspend后再resume,該死的屏幕還是亮不了。

其中還跟模組廠溝通如下:

這個時候,我發現我的背光亮不了。于是我就跟著背光在resume的時候不能亮的思路去尋找。我還想起來,我昨天發了文章,有一個大牛給我回復了,我跟他聊了下。

就是這個該死的宏,在喚醒的時候進行了判斷跑了不同的邏輯。

我按照這樣修改后,這個該死的屏幕就亮起來了。

void mt_mt65xx_led_set(struct led_classdev *led_cdev, enum led_brightness level) {struct mt65xx_led_data *led_data =container_of(led_cdev, struct mt65xx_led_data, cdev);/* unsigned long flags; *//* spin_lock_irqsave(&leds_lock, flags); */output_met_backlight_tag(level);printk("=== weiqifa === %s-%d\n",__FUNCTION__,__LINE__); #ifdef CONFIG_MTK_AAL_SUPPORTif (led_data->level != level) {led_data->level = level;if (strcmp(led_data->cust.name, "lcd-backlight") != 0) {LEDS_DEBUG("Set NLED directly %d at time %lu\n",led_data->level, jiffies);schedule_work(&led_data->work);} else {if (level != 0&& level * CONFIG_LIGHTNESS_MAPPING_VALUE < 255) {level = 1;} else {level =(level * CONFIG_LIGHTNESS_MAPPING_VALUE) /255;}LEDS_DEBUG("Set Backlight directly %d at time %lu, mapping level is %d\n",led_data->level, jiffies, level);/* mt_mt65xx_led_set_cust(&led_data->cust, led_data->level); */disp_aal_notify_backlight_changed((((1 <<MT_LED_INTERNAL_LEVEL_BIT_CNT)- 1) * level +127) / 255);}} #else/* do something only when level is changed */if (led_data->level != level) {led_data->level = level;if (strcmp(led_data->cust.name, "lcd-backlight") != 0) {LEDS_DEBUG("Set NLED directly %d at time %lu\n",led_data->level, jiffies);schedule_work(&led_data->work);} else {if (level != 0&& level * CONFIG_LIGHTNESS_MAPPING_VALUE < 255) {level = 1;} else {level =(level * CONFIG_LIGHTNESS_MAPPING_VALUE) /255;}LEDS_DEBUG("Set Backlight directly %d at time %lu, mapping level is %d\n",led_data->level, jiffies, level);if (led_data->cust.mode == MT65XX_LED_MODE_CUST_BLS_PWM) {mt_mt65xx_led_set_cust(&led_data->cust,((((1 <<MT_LED_INTERNAL_LEVEL_BIT_CNT)- 1) * level +127) / 255));} else {mt_mt65xx_led_set_cust(&led_data->cust, level);}}}/* spin_unlock_irqrestore(&leds_lock, flags); */ #endif

但是這個背光控制沒有在DTS里面設置的,這個真的是一個大坑,我們的背光控制硬件GPIO口是

但是代碼中,這里直接通過PWM寄存器控制了,所以就脫離了GPIO口了。也就是我們想在DTS里面找GPIO口配置是不對的。

還有這個宏的作用

CONFIG_MTK_AAL_SUPPORT

這個是自動背光的作用,可以用來節省電量,但是我們不需要這個功能,而且前期調試的時候,光感還沒有起來,開了這個就有影響了。

把這個功能關閉后需要全編譯一次,要不然功能還沒有完全關閉。

MTK8167S的LCD軟件流程框架我就不說了,驅動調試的話可以按照原有的驅動來參考編寫,也有MTK的調試文檔,先不花篇幅在這里了。有需要的可以私聊我。

最后~

感謝這位小哥哥~


? 回復「?籃球的大肚子」進入技術群聊

回復「1024」獲取1000G學習資料

總結

以上是生活随笔為你收集整理的被LCD调戏睡不着了的全部內容,希望文章能夠幫你解決所遇到的問題。

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