国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

spi_device的注冊和創建(引入DTS之前)

2019-11-09 17:10:49
字體:
來源:轉載
供稿:網友

SPI通用接口層用spi_device結構來表示一個spi設備,它的各個字段的意義如下:

struct device           dev代表該spi設備的device結構
struct spi_master       *master指向該spi設備所使用的控制器
u32     max_speed_hz該設備的最大工作時鐘頻率
u8      chip_select在控制器中的片選引腳編號索引
u16     mode設備的工作模式,包括時鐘格式,片選信號的有效電平等等
u8      bits_per_Word設備每個單位數據所需要的比特數
int     irq設備使用的irq編號
char    modalias[SPI_NAME_SIZE]該設備的名字,用于spi總線和驅動進行配對
int     cs_gpio片選信號的gpio編號,通常不用我們自己設置,接口層會根據上面的chip_select字段在spi_master結構中進行查找并賦值

要完成向系統增加并注冊一個SPI設備,我們還需要另一個數據結構:

/* include/linux/spi/spi.h */struct spi board_info {char modalias[32] ;/*用于初始化spi_device.modalias */const void *platform_data ;/*用于初始化spi_device.dev.platform_data */void *controller data;/ * 用于初始化spi_device.controller_data */int irq;/*用于初始化spi_device.irq */u32 max speed h z ;/*用于初始化spi_device.max_speed_hz */ul6 b us num;/*用于初始化spi_device.bus_num */ul6 chip_select ;/*用于初始化spi_device.chip select */u8 mode ;/*用于初始化spi_device.mode */};

       spi_board_info對象用于描述 SPI設備信息,其大部分字段和spi_device結構相對應,bus_num字段則用來指定所屬的控制器編號,通過spi_board_info結構,我們可以有兩種方式向系統增加spi設備。第一種方式是在SPI控制器驅動已經被加載后,我們使用通用接口層提供的如下API來完成:

             struct spi_device *spi_new_device(struct spi_master *master, struct spi_board_info *chip);

第二種方式是在板子的初始化代碼中,定義一個spi_board_info數組,然后通過以下API注冊spi_board_info:

            int spi_register_board_info(struct spi_board_info const *info, unsigned n);

上面這個API會把每個spi_board_info掛在全局鏈表變量board_list上,并且遍歷已經在系統中注冊了的控制器,匹配上相應的控制器并取得它們的spi_master結構指針,最終也會通過spi_new_device函數添加SPI設備。因為spi_register_board_info可以在板子的初始化代碼中調用,可能這時控制器驅動尚未加載,此刻無法取得相應的spi_master指針,不過不要擔心,控制器驅動被加載時,一定會調用spi_register_master函數來注冊spi_master結構,而spi_register_master函數會反過來遍歷全局鏈表board_list上的spi_board_info,然后通過spi_new_device函數添加SPI設備。
上一篇:CAKeyframeAnimation

下一篇:Adoptable Storage

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 余庆县| 墨竹工卡县| 万州区| 府谷县| 涞水县| 来安县| 梅河口市| 青浦区| 麻城市| 青川县| 墨玉县| 礼泉县| 蓬莱市| 朝阳区| 纳雍县| 临猗县| 永仁县| 准格尔旗| 肇东市| 辛集市| 枝江市| 德庆县| 米泉市| 台湾省| 仙居县| 南昌县| 南平市| 新沂市| 屏边| 民丰县| 田阳县| 巴南区| 兰考县| 贵德县| 丰都县| 称多县| 文化| 台安县| 宣城市| 额济纳旗| 西乌|