瑞芯微 MIPI D-PHY 接收器(RX)驅動學習筆記

驅動文件位置 driver/phy/rockchip/phy-rockchip-mipi-rx.c

1 重要結構體

struct mipidphy_priv {struct device *dev;//表示與驅動程序關聯的設備。它用于設備管理,如設備注冊、注銷等。struct regmap *regmap_grf;//用于映射和訪問通用寄存器文件(General Register File,GRF)的寄存器。regmap 提供了一種靈活的寄存器訪問接口const struct dphy_reg *grf_regs;//包含了GRF寄存器的定義和布局const struct txrx_reg *txrx_regs;//包含了TX/RX通道寄存器的定義和布局const struct csiphy_reg *csiphy_regs;//包含了CSI PHY寄存器的定義和布局void __iomem *csihost_base_addr;//這是一個指向內存映射I/O區域的指針,表示CSI主機接口的基地址struct clk *clks[MAX_DPHY_CLK];//這是一個指向時鐘結構體數組的指針,用于管理設備的所有時鐘資源。const struct dphy_drv_data *drv_data;//包含了驅動程序特定的數據和配置信息u64 data_rate_mbps;//表示設備支持的最大數據傳輸速率,單位是Mbps。struct v4l2_async_notifier notifier;//用于V4L2異步通知機制,允許設備在連接或斷開時發送通知。struct v4l2_subdev sd;//表示一個V4L2子設備,用于V4L2框架中的設備管理和媒體流控制。struct mutex mutex; /* lock for updating protection */struct media_pad pads[MIPI_DPHY_RX_PADS_NUM];//表示媒體設備的連接端口。MIPI_DPHY_RX_PADS_NUM 是端口數量的宏定義。struct mipidphy_sensor sensors[MAX_DPHY_SENSORS];//用于存儲和管理連接到MIPI DPHY的sensors信息int num_sensors;//表示當前連接到MIPI DPHY的sensors數量int phy_index;//bool is_streaming;//指示設備是否正在處理媒體流void __iomem *txrx_base_addr;//這是一個指向內存映射I/O區域的指針,表示TX/RX通道的基地址。int (*stream_on)(struct mipidphy_priv *priv, struct v4l2_subdev *sd);//該函數在開始媒體流傳輸時被調用int (*stream_off)(struct mipidphy_priv *priv, struct v4l2_subdev *sd);//該函數在停止媒體流傳輸時被調用
};

struct dphy_drv_data {const char * const *clks;//包含了設備所需的時鐘名稱。這些時鐘名稱用于在設備初始化時請求相應的時鐘資源。int num_clks;//表示 clks 數組中時鐘名稱的數量。const struct hsfreq_range *hsfreq_ranges;//包含了設備支持的高速頻率范圍。這些范圍定義了設備在不同工作模式下可以支持的時鐘頻率。int num_hsfreq_ranges;//表示 hsfreq_ranges 數組中高速頻率范圍的數量。const struct dphy_reg *grf_regs;//包含了設備通用寄存器(GRF)的定義和布局const struct txrx_reg *txrx_regs;//包含了設備TX/RX通道寄存器的定義和布局。const struct csiphy_reg *csiphy_regs;//包含了設備CSI PHY寄存器的定義和布局enum mipi_dphy_ctl_type ctl_type;//表示MIPI DPHY的控制類型。這個成員指示了設備應該如何被控制,例如,是通過硬件控制還是軟件控制void (*individual_init)(struct mipidphy_priv *priv);//這個函數在設備初始化時被調用,用于執行設備特定的初始化操作。enum mipi_dphy_chip_id chip_id;//表示MIPI DPHY芯片的ID。這個成員用于標識設備的具體型號或版本
};

2 rockchip_mipidphy_probe(struct platform_device *pdev)函數

??

?1 分配內存,匹配設備樹。

	priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);if (!priv)return -ENOMEM;priv->dev = dev;of_id = of_match_device(rockchip_mipidphy_match_id, dev);if (!of_id)return -EINVAL;

2 獲取 GRF(全局復用寄存器)

嘗試從父設備獲取 GRF 寄存器映射。
如果失敗,在當前設備的設備樹節點中查找一個名為 "rockchip,grf" 的 phandle。
將找到的 regmap 保存到 priv->regmap_grf 中。

形如:

some_device: some-device@... {

rockchip,grf = <&grf>;

};

	grf = syscon_node_to_regmap(dev->parent->of_node);if (IS_ERR(grf)) {grf = syscon_regmap_lookup_by_phandle(dev->of_node,"rockchip,grf");if (IS_ERR(grf)) {dev_err(dev, "Can't find GRF syscon\n");return -ENODEV;}}priv->regmap_grf = grf;

3通過別名(alias)獲取 D-PHY 的索引號(例如 dphy0, dphy1)

priv->phy_index = of_alias_get_id(dev->of_node, "dphy");
if (priv->phy_index < 0)priv->phy_index = 0;

4?獲取時鐘資源

5?設置寄存器指針

priv->grf_regs = drv_data->grf_regs;
priv->txrx_regs = drv_data->txrx_regs;
priv->csiphy_regs = drv_data->csiphy_regs;
priv->drv_data = drv_data;

6?根據控制類型選擇操作函數和寄存器地址

CSI Host 模式:SoC 作為攝像頭控制器,連接并讀取攝像頭數據;
TX/RX 模式:SoC 作為通用的 MIPI D-PHY 收發器,可能用于其他用途(比如顯示、調試等);

if (drv_data->ctl_type == MIPI_DPHY_CTL_CSI_HOST) {res = platform_get_resource(pdev, IORESOURCE_MEM, 0);priv->csihost_base_addr = devm_ioremap_resource(dev, res);priv->stream_on = csi_mipidphy_stream_on;priv->stream_off = csi_mipidphy_stream_off;
} else {priv->stream_on = mipidphy_txrx_stream_on;priv->txrx_base_addr = NULL;res = platform_get_resource(pdev, IORESOURCE_MEM, 0);priv->txrx_base_addr = devm_ioremap_resource(dev, res);if (IS_ERR(priv->txrx_base_addr))priv->stream_on = mipidphy_rx_stream_on;priv->stream_off = NULL;
}

7?初始化 V4L2 子設備

sd = &priv->sd;
mutex_init(&priv->mutex);
v4l2_subdev_init(sd, &mipidphy_subdev_ops);
sd->flags |= V4L2_SUBDEV_FL_HAS_DEVNODE;
snprintf(sd->name, sizeof(sd->name), "rockchip-mipi-dphy-rx");
sd->dev = dev;

8?初始化媒體實體和電源管理

ret = rockchip_mipidphy_media_init(priv);
if (ret < 0)goto destroy_mutex;pm_runtime_enable(&pdev->dev);
drv_data->individual_init(priv);
return 0;

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/84846.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/84846.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/84846.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MySQL從入門到DBA深度學習指南

目錄 引言 MySQL基礎入門 數據庫基礎概念 MySQL安裝與配置 SQL語言進階 數據庫設計與規范化 數據庫設計原則 表結構設計 MySQL核心管理 用戶權限管理 備份與恢復 性能優化基礎 高級管理與高可用 高可用與集群 故障診斷與監控 安全與審計 DBA實戰與運維 性能調…

多個機器人同時加載在rviz及gazebo同一個場景中

1. 配置launch文件 gazebo的加載相對容易&#xff0c;但rviz中加載&#xff0c;需要構建完整的tf樹&#xff08;world → map&#xff08;或map_merged&#xff09;→ odom → base_footprint → base_link → base_scan&#xff09;才能正常顯示&#xff0c;launch文件主要是…

Text2SQL、Text2API基礎

你有一個能力超強但“不太懂行”的助手&#xff08;大語言模型LLM&#xff09;。它能說會道&#xff0c;知識淵博&#xff0c;但它&#xff1a; 不懂你的數據庫&#xff1a; 不知道你的數據庫里有哪些表&#xff0c;表里有哪些字段&#xff0c;這些字段代表什么意思。不懂你的…

JDK 8u231安裝教程 - Windows 64位下載安裝及環境變量配置指南

下載安裝包 把jdk-8u231-windows-x64.exe這個文件下載下來&#xff0c;下載鏈接&#xff1a;https://pan.quark.cn/s/a610ca7e5e9d&#xff0c;隨便放哪兒&#xff0c;比如桌面或者下載文件夾。 雙擊運行安裝 找到下載好的那個exe文件&#xff0c;直接雙擊打開。可能會彈個窗口…

LatentSync V8版 - 音頻驅動視頻生成數字人說話視頻 更新V1.6版模型 支持50系顯卡 支持批量 一鍵整合包下載

LatentSync 是字節跳動開源的一款"AI口型同步神器"&#xff0c;簡單來說就是能讓視頻里的人物嘴巴動得和聲音完美匹配的工具。比如你給一段配音&#xff0c;它能自動調整視頻人物的嘴型&#xff0c;按照配音里的聲音說出來&#xff0c;就像真人說話一樣自然。簡單說就…

從一組線段中得出四邊形的算法

原始的需求是使用OpenCV的直線檢測算法&#xff08;例如LSD&#xff09;之后&#xff0c;得到一組線段。然后需要從這些線段得到類似矩形的四邊形&#xff0c;用于檢測經過透視變換的矩形物體。這些線段不一定首尾相接&#xff0c;彼此之間可能相交或有一定距離。 以下是需求圖…

提示詞Prompts(2)

摘要&#xff1a; 本文介紹了langchain.prompts中基礎的提示詞模板的高級用法&#xff0c;包括利用PipelinePrompt組合Prompt使用&#xff0c;多模態場景、動態占位符的使用等進行了介紹。 文章目錄 1. 背景2. PipelinePrompt2.1 組合兩個Prompt模板2.2 多模態模板 3. 聊天提示…

服務器代碼知識點補充

目錄 UdpServer: 觀察者模式: remove_if算法 管道補充: 文件的標準輸出 ,標準輸入,標準錯誤 UdpServer: 數據接收模塊關心Adduser 和Deleuser 兩個模塊 線程池關心Route模塊 將這三個方法注冊進服務器 ,但是有臨界區問題(線程池與數據接受模塊可能同時訪問用戶管理模塊,所…

R語言緩釋制劑QBD解決方案之二

藥物層優化研究 在藥物層工藝中水溶劑蒸發起到重要的作用。濕的環境會使丸子聚集&#xff0c;而干的環境影響藥物與MCC的粘合。輸入變量如氣流量&#xff0c;噴霧速率&#xff0c;霧化壓力&#xff0c;和產品溫度對MCC沉著和包衣溶劑蒸發的平衡有影響。進行了帶3個中心點的24-…

Html實現圖片上傳/裁剪/馬賽克/壓縮/旋轉/縮放

cropper下載 https://download.csdn.net/download/dongyan3595/90970115 前端代碼 <!doctype html> <html lang"en"> <head><base href"/aishop/"><meta name"viewport" content"widthdevice-width, initial…

springboot項目中整合高德地圖

一&#xff1a;高德開放平臺的使用 高德開放平臺 | 高德地圖API 注冊高德地圖賬號 認證填寫個人信息&#xff1a; 認證方式選擇“個人認證開發者”即可&#xff0c;然后完善信息 認證成功之后&#xff0c;再次進入控制臺&#xff0c;創建關于地圖的應用 創建Key&#xff08;y…

鴻蒙開發-視頻學習及實用中的一些小結

1.extend 和 styles extend是在styles基礎上進行了升級 使用的時候extend是全局的。 styles不加function 局部 加了就是全局。 2.builder 中要引用comp組件 需要在外層嵌套布局 3.ability之間的跳轉 want需要加&#xff1b; 4. as 類型斷言 &#xff01;跟在xxx! 表示…

網盤直鏈解析網頁版

不支持百度網盤、阿里網盤。 123&#xff0c;藍奏云&#xff0c;可道云什么的都可以 源碼下載地址&#xff1a;https://www.123865.com/s/X91lVv-3l90v

AXI4-Stream Clock Converter IP

一、參考說明 1.沒有專門對AXI4-Stream Clock Converter IP說明的文檔&#xff1b; 2.可以參考PG085文檔&#xff1b; 3.可以參考PG035文檔&#xff1b; 二、IP的作用 1.用于stream數據流再不同的時鐘域之間的可靠性傳輸&#xff1b; 2.支持跨時鐘域的場景&#xff1b; 3.內部…

NineData 社區版 V4.2.0 發布!新增MySQL與PostgreSQL互相遷移,SQL管理Milvus,安裝更高效

NineData 社區版 V4.2.0 正式發布&#xff01;本次更新通過鏡像輕量化部署、新增 3 條遷移鏈路、新增支持 Milvus 向量數據庫等核心升級&#xff0c;輕松實現數據庫遷移容災、實時數據集成分析、AI 向量數據管理等場景需求。社區版支持本地離線部署&#xff0c;嚴格保障數據隱私…

如何安裝使用qmt腳本跟單聚寬策略

登錄知識星球&#xff0c;下載獲取 解壓后&#xff0c;登錄大qmt&#xff0c;將策略導入其中&#xff0c; 然后修改參數&#xff1a; 點擊免密改參 totalcash&#xff1a;該策略使用資金總量 per&#xff1a;每只股票占比資金額 舉例&#xff0c;當前出信號&#xff0c;每只…

什么是MongoDB

目錄 主要特點 MongoDB概念解析 完整術語列表 MongoDB安裝 MongoDB Shell 安裝MongoDB Shell 數據庫管理 查看數據庫列表 創建數據庫 刪除數據庫 默認數據庫 系統內置數據庫 集合管理 查看集合 創建集合 更新集合名 刪除集合 文檔操作 插入文檔 查詢文檔 …

【Docker基礎】Docker核心概念:容器(Container)與鏡像(Image)的區別與聯系

目錄 引言 1 Docker鏡像&#xff08;Image&#xff09; 1.1 鏡像的定義 1.2 鏡像的特點 1.3 鏡像的創建 1.4 鏡像的結構 1.5 鏡像結構描述 2 Docker容器&#xff08;Container&#xff09; 2.1 容器的定義 2.2 容器的特點 2.3 容器的創建與運行 2.4 容器的生命周期…

從零到一:構建企業級 Vue.js 3 組件庫

前言&#xff1a;為何要構建組件庫&#xff1f; 在現代前端工程化體系中&#xff0c;組件庫已不再是大型團隊的專屬。它是一個團隊設計規范、開發模式和技術沉淀的核心載體。構建一個組件庫&#xff0c;能夠帶來諸多優勢&#xff1a; 提升效率&#xff1a;提供可復用的高質量…

【2025 CVPR-Backbone】Building Vision Models upon Heat Conduction

摘要 利用注意力機制的視覺表示模型在追求大感受野時面臨著巨大的計算開銷。在本研究中&#xff0c;我們通過引入基于物理熱傳導原理的熱傳導算子&#xff08;Heat Conduction Operator, HCO&#xff09;來緩解這一挑戰這么高級咩(⊙o⊙)&#xff01;。HCO將圖像塊視為熱源&am…