溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

SPI設(shè)備樹節(jié)點(diǎn)處理流程和I2C節(jié)點(diǎn)的解析流程

發(fā)布時(shí)間:2020-06-05 14:15:35 來(lái)源:億速云 閱讀:574 作者:Leah 欄目:系統(tǒng)運(yùn)維

這篇文章主要介紹了SPI設(shè)備樹節(jié)點(diǎn)處理流程和I2C節(jié)點(diǎn)的解析流程,具有一定借鑒價(jià)值,需要的朋友可以參考下。如下資料是關(guān)于spi設(shè)備樹和i2c節(jié)點(diǎn)的內(nèi)容。

一、設(shè)備樹中I2C節(jié)點(diǎn)的解析流程

/* i2c 控制器節(jié)點(diǎn) */

i2c0: i2c@2180000 {

compatible = "fsl,vf610-i2c";

                        /*reg = <address1 length2 [address2 length3] [address3 length4]..>*/

#address-cells = <1>; /* address一個(gè)32位表示*/

#size-cells = <0>; /* length位空*/

reg = <0x0 0x2180000 0x0 0x10000>;

interrupts = <GIC_SPI 88 IRQ_TYPE_LEVEL_HIGH>;/*GIC_SPI SPI:shared processor interrupts  中斷號(hào) 32 ~32+224  88號(hào)中斷 IRQ_TYPE_LEVEL_HIGH觸發(fā)方式 */

clock-names = "i2c";

clocks = <&platform_clk 1>; /*使用的時(shí)鐘*/

status = "disabled";

};

reg = <0x0 0x2180000 0x0 0x10000>解析:

    SPI設(shè)備樹節(jié)點(diǎn)處理流程和I2C節(jié)點(diǎn)的解析流程

I2C地址0x2180000物理地址,映射長(zhǎng)度0x10000,要使用這個(gè)物理地址先要在驅(qū)動(dòng)中將其映射成虛擬地址。

/* i2c設(shè)備節(jié)點(diǎn) */

&i2c0 {/* 引用i2c控制器0相當(dāng)于它的子節(jié)點(diǎn) */

status = "okay";


lm75@49 {

compatible = "ti,lm75";

reg = <0x49>;

};


lm75@4a {

compatible = "ti,lm75";

reg = <0x4a>;

};

};

/i2c0節(jié)點(diǎn)一般表示i2c控制器, 它會(huì)被轉(zhuǎn)換為platform_device, 在內(nèi)核中有對(duì)應(yīng)的platform_driver;

/i2c0/lm75@49節(jié)點(diǎn)不會(huì)被轉(zhuǎn)換為platform_device, 它被如何處理完全由父節(jié)點(diǎn)的platform_driver決定, 一般是被創(chuàng)建為一個(gè)i2c_client。

設(shè)備樹的匹配流程:

platform_match:

1、match driver.of_match_table:of_driver_match_device  //設(shè)備樹解析

2、match driver.acpi_match_table

3、match platform_driver.id_table

4、match 設(shè)備的name和driver.name

上面四個(gè)任意匹配成功就算匹配ok。


代碼流程:

static const struct of_device_id i2c_imx_dt_ids[] = {
{ .compatible = "fsl,imx1-i2c", .data = &imx1_i2c_hwdata, },
{ .compatible = "fsl,imx21-i2c", .data = &imx21_i2c_hwdata, },
{ .compatible = "fsl,vf610-i2c",/* 對(duì)應(yīng)設(shè)備樹compatible */ .data = &vf610_i2c_hwdata, },
{ /* sentinel */ }
};
static struct platform_driver i2c_imx_driver = {
.probe = i2c_imx_probe,
.remove = i2c_imx_remove,
.driver = {
.name = DRIVER_NAME,
.pm = I2C_IMX_PM_OPS,
.of_match_table = i2c_imx_dt_ids,
},
.id_table = imx_i2c_devtype,
};
/* 將設(shè)備樹轉(zhuǎn)換成platform_device后i2c_imx_probe函數(shù)被調(diào)用 */
i2c_imx_probe
    i2c_add_numbered_adapter /* 添加I2C控制器 */
        __i2c_add_numbered_adapter
            i2c_register_adapter /* 注冊(cè)I2C控制器 */
                device_register /* I2C控制器設(shè)備注冊(cè) */
                of_i2c_register_devices /* 查找設(shè)備樹控制器下面的從設(shè)備 */
                    of_i2c_register_device
                        i2c_new_device
                            client->dev.bus = &i2c_bus_type;
                            device_register /* 添加設(shè)備I2C從設(shè)備 */
                i2c_scan_static_board_info /* 查找靜態(tài)表,有些I2C設(shè)備是在代碼中寫死的,不是通過(guò)設(shè)備樹的形式 */
                    i2c_new_device
                        client->dev.bus = &i2c_bus_type;
                        device_register /* 添加設(shè)備I2C從設(shè)備 */
/* 添加設(shè)備成功后lm75@49幾點(diǎn)的I2C設(shè)備將通過(guò)i2c_bus_type.i2c_device_match匹配驅(qū)動(dòng)程序。*/
static const struct of_device_id lm75_of_match[] = {
{
.compatible = "ti,tmp75",
.data = (void *)tmp75
},
。。。。
}
static struct i2c_driver lm75_driver = {
.class= I2C_CLASS_HWMON,
.driver = {
.name= "lm75",
.of_match_table = of_match_ptr(lm75_of_match),
.pm= LM75_DEV_PM_OPS,
},
.probe= lm75_probe,
.id_table= lm75_ids,
.detect= lm75_detect,
.address_list= normal_i2c,
};


lm75_probe函數(shù)將被調(diào)用。

二、SPI設(shè)備樹節(jié)點(diǎn)處理流程

xx_spi_probe
    spi_bitbang_start
        spi_register_master->spi_register_master
            of_register_spi_devices
                of_register_spi_device
                    spi_add_device  /* 和i2c_new_device處理流程就一樣了匹配設(shè)備驅(qū)動(dòng) */

看完上述內(nèi)容,你們對(duì)SPI設(shè)備樹節(jié)點(diǎn)處理流程和I2C節(jié)點(diǎn)的解析流程大概了解了嗎?如果想了解更多相關(guān)文章內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI