相機電源管理
電源管理模式
晶片上的關閉系統 (SoC) 元件必須支援兩種電源管理模式。 相機元件必須支援作用中模式,相機裝置會主動將內容串流處理至應用程式。 此外,相機元件必須支援關閉相機裝置的電源移除模式、電源已移除,而相機裝置會耗用零瓦。 下表說明相機裝置的作用中和已移除電源管理模式。
[模式] | 描述 | 裝置電源狀態 (Dx) | 平均功率耗用量 | 結束作用中延遲 | 轉換機制 |
---|---|---|---|---|---|
作用中 (串流) |
相機裝置正在主動將內容串流至應用程式。 內容可能是完整動作、預覽或仍然相片擷取。 |
Yes |
感應器、AF 和快閃特定。 |
N/A |
軟體起始的 D0 轉換。 (應用程式已起始串流,方法是將擷取釘選的狀態設定為 KSSTATE_ACQUIRE.) |
電源 - 已移除 |
相機裝置不會將內容串流至任何應用程式。 相機感應器、快閃裝置或自動焦點引擎上不會保留任何內容。 |
Yes |
0 瓦特 |
< 200 毫秒到第一個畫面格 (請參閱下表。) |
軟體起始的 D3 轉換。 (所有串流針腳的狀態已設定為 KSSTATE_RUN.) 以外的任何值 |
注意 Windows 預期從使用中模式到電源移除模式的轉換時間 (關閉延遲) 小於 100 毫秒。 大部分電源管理工作著重于將從電源移除模式的轉換時間減少到作用中模式, (延遲) 。
On-SoC 影像處理單位必須支援相同的兩種電源管理模式,作用中和電源移除。 SoC 廠商會定義組成影像處理單位及其電源管理狀態的個別元件。 我們建議單一驅動程式控制 SoC 影像處理單位,並將相機擷取的所有影像處理單位呈現給電源引擎外掛程式 (PEP) 做為單一電源管理元件。
軟體電源管理機制
晶片上的系統 (SoC) 影像處理單位和關閉 SoC 相機元件,預期在系統處於連線待命狀態且顯示器關閉時,不會耗用任何電源 (零單位) 。 電源管理的主要軟體機制是相機擷取針腳的參考計數。 此參考計數是由數位相機控制器驅動程式維護,這是 AVStream 迷你驅動程式。 此基本電源管理機制可在系統開啟時使用,包括開啟系統顯示器的時間。
相機控制器驅動程式應該將電源管理狀態轉送至控制關閉 SoC 元件的驅動程式,例如相機感應器、自動焦點器和快閃。 為了回應,控制這些裝置的驅動程式應該採取特定動作來變更電源狀態,以及移除或套用電源。
建議的驅動程式架構
相機子系統應該透過稱為 相機控制器驅動程式的單一 AVStream 迷你驅動程式向 Windows 公開。 我們建議相機控制器驅動程式不會直接存取硬體,也不會直接電源管理硬體元件。 相反地,相機控制器驅動程式應該將電源管理和硬體要求轉送到構成相機子系統的其他驅動程式。
SoC 映射處理硬體應該由 SoC 電源引擎外掛程式 (PEP) 進行電源管理。 映射處理硬體應該由Windows Driver Frameworks (WDF) 驅動程式管理,而且此驅動程式應該藉由將WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS結構中的IdleTimeout成員設定為SystemManagedIdleTimeout來啟用與 PEP 的合作。 此設定可讓 PEP 控制 SoC 硬體專屬的任何時鐘和電源軌共用拓撲。 控制 SoC 上影像處理單位的驅動程式應該將整個影像處理單位表示為單一電源管理元件,以便使用電源管理的預設 WDF 功能。
off-SoC 相機子系統元件應該由一或多個 核心模式驅動程式架構管理, (KMDF) 驅動程式。 當相機擷取不再需要其元件時,off-SoC 元件的驅動程式必須轉換為已移除的 (D3) 狀態。 此外,off-SoC 元件的驅動程式必須啟用 D3cold,這可讓基礎 ACPI 子系統變更 GPIO 線路的狀態以套用和移除電源。 如需詳細資訊,請參閱 驅動程式中的支援 D3cold。
下列區塊圖顯示建議的驅動程式架構。
組成相機子系統的所有驅動程式,包括相機控制器驅動程式、影像處理單位驅動程式,以及 off-SoC 相機元件的驅動程式,都必須在相同的驅動程式安裝 (.inf) 檔案中列舉。 所有相機子系統驅動程式都必須是 映射 PnP 裝置設定類別的成員。 映射裝置的 ClassGuid 是 {6bdd1fc6-810f-11d0-bec7-08002be2092f}。
每個代表單一相機元件的驅動程式都應該列舉為 ACPI 命名空間中的單一裝置。
作用中和已移除電源的狀態
當沒有應用程式從相機裝置串流內容時,相機控制器驅動程式必須將相機裝置轉換為已移除電源的狀態。 應用程式可能會停止串流,因為使用者已關閉,或已轉換至背景並暫停。
如果應用程式從裝置處於電源移除狀態的相機起始串流,相機控制器驅動程式必須在 100 毫秒內將相機裝置轉換回作用中狀態。
若要變更各種相機子系統元件的電源狀態,相機控制器驅動程式會使用專屬介面來與組成相機子系統的其他驅動程式通訊。 若要查詢適當的介面,相機子系統驅動程式應該使用標準方法,也就是傳送可擷取一組函式指標 的IRP_MN_QUERY_INTERFACE I/O 要求。
當所有串流針腳都進入 KSSTATE_STOP 狀態時,相機控制器驅動程式必須將相機裝置置於已移除電源的狀態。 當使用者按下電源按鈕且系統進入連線待命時,Windows 會自動暫停前景應用程式。 當擷取應用程式暫停時,會通知Windows 執行階段所提供的相機擷取 API,並變更相機擷取針腳的狀態,使其進入KSSTATE_STOP狀態。
當第一個串流針腳進入 KSSTATE_ACQUIRE 狀態時,相機控制器驅動程式必須放置相機裝置,包括處於作用中狀態的 SoC 影像處理單位。
相關聯的相機功能
相機感應器和快閃裝置可能會有其他必須由驅動程式管理的平台層級功能。 這些函式可以包含下列各項:
- 透過 I2C 匯流排啟用、停用及設定相機感應器。
- 設定 I2C 匯流排上的快閃高載速率和亮度等級。
- 透過從快閃模組到 SoC 的 GPIO 線路,偵測來自快閃模組的熱狀況。
若要實作這些功能,相機設備磁碟機開發人員應該使用下表摘要說明的方法和指引。
函式 | 描述 | 硬體/韌體連線 | 軟體機制 |
---|---|---|---|
感應器設定 | 列舉相機感應器硬體的功能,或設定其目前作業模式。 | 透過 I2C 匯流排通訊。 I2C 資源描述于 ACPI 命名空間中相機裝置底下的 _CRS 方法。 | 簡單的周邊匯流排 (SPB) 輸入/輸出 (I/O) 要求介面 可用來與 I2C 主機控制器和相機感應器裝置通訊。 |
感應器事件偵測 | 引發事件,或使用相機感應器到 SoC 的 GPIO 線來指出狀態。 | 提供給相機裝置的 GPIO 資源。 這些資源描述于 ACPI 命名空間中相機裝置下的 _CRS 方法中。 訊號事件的 GPIO 針腳必須描述為 GPIO 中斷資源。 | 驅動程式會處理中斷以回應 GPIO 事件。 SPB I/O 要求介面可用來與感應器裝置通訊,以判斷中斷的原因。 |
Flash 設定 | 設定快閃裝置的高載速率、連線的 LED 數目或其他屬性。 | 透過 I2C 匯流排通訊。 I2C 資源描述于 ACPI 命名空間中相機裝置底下的 _CRS 方法。 | SPB I/O 要求介面可用來與 I2C 主機控制器和相機感應器裝置通訊。 |
與影像處理器驅動程式協調 | 使用 SoC 上的影像處理線路起始和座標擷取。 | N/A | 私人介面是由管理影像處理單位的驅動程式所公開。 |
相機裝置列舉
為了識別平臺中的相機裝置,應用程式通常會查詢相機裝置實例的 隨插即用 (PnP) 管理員。 每個 PnP 實例都會對應至單一相機裝置。 為了識別這類實例,系統整合器會在 ACPI 命名空間中定義相機裝置。 相機裝置一次只能將內容串流至一個應用程式。 不過,應用程式可以同時串流處理多個相機裝置。
相機控制器驅動程式所代表的每個相機裝置 (AVStream 迷你驅動程式) 都必須在 ACPI 命名空間中列舉為圖形驅動程式子系的個別裝置。
在特殊情況下,如果 SoC 平臺無法同時串流來自平臺中所有相機裝置的內容,且其報告解析度或模式的組合,則可以改為列舉單一相機裝置。 不過,此實作需要仔細考慮,而且應該只在與 Microsoft 直接共同作業中執行。
代表相機子系統其餘部分的裝置,包括 SoC 影像處理單位和離 SoC 相機感應器、自動焦點器和快閃,應該列舉為 ACPI 命名空間中的一或多個裝置。 On-SoC 影像處理單位應該列舉為與代表相機離 SoC 元件之裝置不同的裝置。
相機電源管理檢查清單
晶片 (SoC) 廠商上的系統整合者、相機感應器廠商和系統應該使用本文中的檢查清單,以確保其系統電源管理設計與Windows 10相容。
- 選取相機感應器元件並整合相機裝置時,系統整合者必須與 SoC 廠商通訊和共同作業。
- 數位相機控制器驅動程式開發人員必須執行下列動作:
- 當應用程式不再從相機裝置串流內容時,關閉相機硬體的電源。 (當所有擷取針腳都處於KSSTATE_STOP狀態時,就會發生這種情況。)
- 當應用程式從相機裝置上的任何擷取針腳開始串流時,開啟相機硬體的電源。
- 開發一個可管理 SoC 映射處理單位的 KMDF 驅動程式。 相機控制器驅動程式應該使用自訂驅動程式介面來告知影像處理器驅動程式起始或結束相機擷取。
- 請確定映射處理器驅動程式已向 Windows 電源管理架構註冊, (PoFx) ,讓 SoC 廠商提供的 PEP 可以控制映射處理器硬體的電源管理。
- 開發一個 Windows 驅動程式架構 (WDF) 驅動程式來管理管理離 SoC 相機硬體的每個硬體元件,包括相機感應器、自動焦點器和選擇性快閃。 數位相機控制器驅動程式應該使用自訂驅動程式介面,告知離 SoC 相機硬體的驅動程式起始或結束相機擷取。
- 請確定管理關閉 SoC 相機硬體的驅動程式在相機元件應關閉電源時起始 D3 轉換,讓 ACPI 收到 D3 轉換的通知,而且可以從元件移除電源。 • 請確定管理離 SoC 相機硬體的驅動程式在相機元件應該開啟電源時起始 D0 轉換,讓 ACPI 收到 D0 轉換的通知,而且可以將電源套用至元件。
- 開發任何驅動程式程式碼,以管理相機感應器硬體或快閃裝置的設定。
- 通知系統整合者管理相機感應器硬體或快閃裝置所需的任何 GPIO 和 I2C 資源的預期順序。
- 請確定組成相機子系統的所有驅動程式都會在相同的驅動程式安裝 (.inf) 檔案中列舉。
- 確定組成相機子系統的所有驅動程式都是映射 PnP 裝置安裝類別的成員。 映射裝置的 ClassGuid 是 {6bdd1fc6-810f-11d0-bec7-08002be2092f}。
- 系統整合者必須設計平臺 ACPI 韌體,才能執行下列動作:
- 將每個相機裝置列舉為 ACPI 命名空間中的個別裝置。
- 在 ACPI 命名空間中的每個相機裝置底下包含_PLD物件,以指出相機位於電腦的前方或背面。
- 在每個相機裝置的 ACPI 命名空間根目錄中包含電源資源。 給定相機裝置的所有 off-SoC 硬體元件 (感應器、AF、閃爍等) 應位於一個電源資源中。
- 實作每個電源資源的_ON和_OFF控制方法,以從驅動電源滑軌切換硬體的 SoC 變更 GPIO 針腳的狀態。
- 在 命名空間中的每個相機裝置下,提供_PR0和_PR3方法,以參考每個相機裝置及其相關聯硬體的電源資源。
- 在 ACPI 命名空間中的每個相機裝置下提供_CRS物件,以列舉相機感應器和快閃硬體的 GPIO 和 I2C 資源。 GPIO 和 I2C 資源必須依照數位相機感應器驅動程式開發人員所指定的順序。
- 系統整合者應該設計平臺硬體和電源路由,以便:
- 每個相機裝置都有自己的電源軌,可以獨立控制其他相機裝置的電源軌,並可透過 SOC 的 GPIO 針腳來開啟和關閉。
- 系統整合者必須測試並確認:
- 當相機裝置未由應用程式使用時,相機裝置硬體不會耗用任何電源 (零瓦) 。 系統整合器應該使用已檢測的硬體來測量此耗電量。