高通調試 SPI 屏的 bug

来源:https://www.cnblogs.com/linhaostudy/archive/2018/05/16/9045309.html
-Advertisement-
Play Games

1. spi調試問題: 問題描述: spi屏幕lk啟動的時候正常出現小企鵝,到kernel啟動的過程黑屏並且花屏才到開機動畫; 2. 黑屏的三個階段: 參照: "黑屏分析" 分析開機過程黑屏,首先需要定位黑屏問題發生的時間段,開機過程中涉及到顯示logo 或者是播放動畫的主要有如下三個階段: 顯示 ...


1. spi調試問題:

問題描述:
spi屏幕lk啟動的時候正常出現小企鵝,到kernel啟動的過程黑屏並且花屏才到開機動畫;

2. 黑屏的三個階段:

參照:黑屏分析
分析開機過程黑屏,首先需要定位黑屏問題發生的時間段,開機過程中涉及到顯示logo 或者是播放動畫的主要有如下三個階段:

  • 顯示 lk logo ;
  • 顯示kernel logo;
  • 開機動畫 Bootanimation
    如下這張ENG 版本開機過程顯示圖,說明瞭主要的三個過程:
    image

如下解釋:
(階段1)、帶有”normal boot“的lk logo,會在lk階段顯示。顯示時間一般1s左右。
(階段2)、啟動到kernel的前7s左右,顯示的是帶”normal boot“字樣的lk logo。(這裡L/M版本和KK/JB版本很不同,不在此處細說)
(階段3)、之後顯示kernel logo的時間段很短,一般只有2s左右.
(階段4)、顯示bootanimation動畫。

3. 調試過程:

如上所示,我們是在(階段一)(階段二)之間黑屏,這時候要看一下lk中DEFINES += DISPLAY_SPLASH_SCREEN = 1 的巨集有沒有打開;(target/xxx/rules.mk),再將qcom,cont-splash-enabled增加到你對應廠商的屏代碼的設備樹中;

重新燒錄軟體,開機;

依然出現問題:
我們這時候發現lk到kernel的第二階段已經完全正常了,但是又出現問題。。。這時候kernel的開機動畫出現抖動,並且無法正常顯示(第三階段);關鍵來了,滅屏後,一切屏幕正常;
這時候,我已經開始懷疑lk和kernel的spi屏初始化代碼有區別:

將lk代碼修改為kernel中的初始化代碼,結果lk也有問題,出現不斷的抖動和閃爍;於是,我只能接受spi 屏kernel和lk初始化代碼不一樣的結論了;但問題是為什麼我們第三階段已經屬於我們kernel啟動的時候了,但是為什麼沒有初始化呢?(滅屏後再次開啟已經啟用了resume了);

讀源碼吧:
找到我們kernel源碼中的qcom,mdss-spi-on-command節點,在解析設備樹用到的,最後我們定位在mdss_spi_panel_on函數中初始化:

int mdss_spi_panel_on(struct mdss_panel_data *pdata)
{
    struct spi_panel_data *ctrl = NULL;
    struct mdss_panel_info *pinfo;
    int i;

    if (pdata == NULL) {
        pr_err("%s: Invalid input data\n", __func__);
        return -EINVAL;
    }
    pinfo = &pdata->panel_info;
    ctrl = container_of(pdata, struct spi_panel_data,
                panel_data);

    for (i = 0; i < ctrl->on_cmds.cmd_cnt; i++) {
        mdss_spi_tx_command(ctrl->on_cmds.cmds[i].command);

        if (ctrl->on_cmds.cmds[i].dchdr.dlen > 1) {
            mdss_spi_tx_parameter(ctrl->on_cmds.cmds[i].parameter,
                    ctrl->on_cmds.cmds[i].dchdr.dlen-1);
        }
        if (ctrl->on_cmds.cmds[i].dchdr.wait != 0)
            msleep(ctrl->on_cmds.cmds[i].dchdr.wait);
    }

    pinfo->blank_state = MDSS_PANEL_BLANK_UNBLANK;
    pr_debug("%s:-\n", __func__);

    return 0;
}

增加log列印,最後判斷在第三階段中上述函數中並沒有被調用到,而是由lk的初始化代碼一直維持屏的狀態;
mdss_spi_panel_init函數中,註冊了相應的回調函數:

int mdss_spi_panel_init(struct device_node *node,
    struct spi_panel_data   *ctrl_pdata,
    bool cmd_cfg_cont_splash)
{
    int rc = 0;
    static const char *panel_name;
    struct mdss_panel_info *pinfo;
    
    if (!node || !ctrl_pdata) {
        pr_err("%s: Invalid arguments\n", __func__);
        return -ENODEV;
    }

    pinfo = &ctrl_pdata->panel_data.panel_info;

    .......
    ctrl_pdata->on = mdss_spi_panel_on;
    ctrl_pdata->off = mdss_spi_panel_off;
    ctrl_pdata->panel_data.set_backlight = mdss_spi_panel_bl_ctrl;

    return 0;
}

而這個回調函數是在什麼時候作用到的呢?

mdss_spi_panel_unblank函數中:

static int mdss_spi_panel_unblank(struct mdss_panel_data *pdata)
{
    int ret = 0;
    struct spi_panel_data *ctrl_pdata = NULL;

    if (pdata == NULL) {
        pr_err("%s: Invalid input data\n", __func__);
        return -EINVAL;
    }

    ctrl_pdata = container_of(pdata, struct spi_panel_data,
                panel_data);

//  if (!(ctrl_pdata->ctrl_state & CTRL_STATE_PANEL_INIT)) {

    ret = ctrl_pdata->on(pdata);
    if (ret) {
        pr_err("%s: unable to initialize the panel\n",
                    __func__);
        return ret;
    }
    ctrl_pdata->ctrl_state |= CTRL_STATE_PANEL_INIT;
//  }

    return ret;
}

修改後,patch地址: patch地址
開機正常,spi正常,一切正常;


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • cat命令 作用:連接多個文件並且列印到屏幕輸出,或者重定向到其他文件,也可以用來查看顯示單個文件,或者多個文件。 格式: cat [option] [file] 1,最簡單的用法,直接跟文件名稱,查看文件內容 2,也可以使用如下方式,向文件寫入或者追加內容 3,-n與-b 都是對文件進行編號,-b ...
  • 偽靜態: 把動態網頁的請求方式偽裝成靜態網頁 要使用偽靜態技術,要在httpd.conf中啟用偽靜態模塊: 把前面的#號去掉 通常利用Apache的rewrite模塊對 URL 進行重寫的時候, rewrite規則會寫在 .htaccess 文件里。但要使 apache 能夠正常的讀取.htacce ...
  • 一、配置介紹 1.1 常用命令 當前 uboot 的配置已經完全變成Linux 內核的配置形式了,完全可以按照Linux 內核的分析方是區分析 uboot。 uboot 和 Linux的代碼配置項由 Kconfig 來完成的,關於 Kconfig 語法,可參見:linux/Documentation ...
  • 問題背景: 業務需要,針對業務需要不同地域的機構訪問,所以需要在同一臺機器上配置不同IP並配置不同網關,實現不用機構可以訪問同一臺伺服器辦理業務。 系統環境: centos linux7 網路環境: 伺服器是vmware虛擬伺服器,手動添加一塊新網卡eth1,要求配置如下。 eth0:10.0.7. ...
  • 問題:在wsus content文件夾下誤刪除文件,需要重新下載文件解決方法:打開cmdcd C:\Program Files\Update Services\Tools\.\wsusutil.exe reset這時WSUS會下載所有已經審批但是不在WSUS Content文件加的更新 wsusui ...
  • 《深入理解電腦系統》,這本書,我多次想要好好完整的讀一遍,每次都是沒有堅持下去,但是作為一個開發者,自己想要成為為數不多的大牛之一,所以打算這次把這本書完整的好好讀一遍,並整理為相關的博客! 書的開頭說了一句話:電腦系統是由硬體和系統軟體組成,他們共同工作來運行應用程式。我們通常接觸更多的是應用 ...
  • 開發環境涉及到協議棧SDK版本、keil PACK版本的匹配問題,目前測試通過的環境如下: windows系統:win10 硬體:NRF52832測試板、JLINK-V8模擬器 Keil uVision5 For ARM 5.14 nrfgostudio_win-64_1.21.2_installe ...
  • 一.更換ubuntu 16.04 更新源 1. 更新源 deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial main multiverse restricted universe deb http://mirrors.ustc.edu.cn/ubu ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...