在前面一章我們分析了regmap子系統的數據結構,基本上熟悉了數據結構的關聯,也就大概理解了regmap子系統的實現流程,本章我們簡要介紹下regmap子系統中接口的調用過程,然後介紹下regmap bus的實現及其提供的regmap的創建及註銷接口。
針對regmap子系統提供的讀寫接口包含regmap_read、regmap_write、regmap_raw_read、regmap_raw_write等接口,此處我們主要說明regmap_read、regmap_write這兩個接口的調用流程。
regmap_write的調用包含如下三個大分支:
針對regmap讀操作,也包含如下幾個大的方向:
以上即是regmap_read/regmap_write的調用邏輯,針對regmap_raw_read、regmap_raw_write接口的調用也大致類似,此處不再細述讀者可自行查找。
此處我們選擇iic regmap bus的創建及其提供的regmap的創建及註銷接口。
如下圖所示,iic regmap bus提供了read、write、gather_write接口,而read、write接口則主要調用i2c_transfer接口實現對i2c設備的讀寫操作,相對來說也是比較簡單的。
iic regmap的創建接口為regmap_init_i2c,該接口即是對regmap_init接口的調用,並傳遞iic regmap_bus變量,這樣創建的iic regmap變量中執行的regmap_bus即為regmap_i2c,然後在regmap_write、regmap_read接口的調用中,最終即調用了regmap_i2c的read、write接口,即調用regmap_i2c_read、regmap_i2c_write接口,實現與i2c設備的通信操作。
對於iic/spi regmap的註銷接口,直接調用regmap_exit接口即可。
在regulator子系統專欄的虛擬regulator 設備驅動的開發中,我們就已經實現了regmap的創建與註銷操作,只需要在i2c設備驅動的probe接口中調用devm_regmap_init_i2c接口完成i2c regmap的創建後,即可進行regmap_write、regmap_read的調用。
至此我們即完成regmap子系統的分析,regmap子系統設計也不是很複雜,我們就不大篇幅介紹。
下一章我們分析下linux設備資源管理、iio子系統等內容。