2017-06-23 1043 views
0

我正在寫mcp3008驅動程序而不使用iio進行學習。 在這個階段,我想要調用驅動程序的探測器。在Linux 4.9設備樹中添加SPI slave設備rapbery pi

我已經附加我在DT弓/ ARM /開機/ DTS/bcm2708-RPI-b.dts代碼

&spi0 { 
    pinctrl-names = "default"; 
    pinctrl-0 = <&spi0_pins &spi0_cs_pins>; 
    cs-gpios = <&gpio 8 1>, <&gpio 7 1>; 

    spidev0: [email protected]{ 
      compatible = "spidev"; 
      reg = <0>;  /* CE0 */ 
      #address-cells = <1>; 
      #size-cells = <0>; 
      spi-max-frequency = <500000>; 
    }; 

    spidev1: [email protected]{ 
      compatible = "spidev"; 
      reg = <1>;  /* CE1 */ 
      #address-cells = <1>; 
      #size-cells = <0>; 
      spi-max-frequency = <500000>; 
    }; 

    /* new device for mcp3008 */ 
    aartyaa_3008{ 
      compatible = "aartyaa_mcp3008"; 
      reg = <0>; 
      #address-cells = <1>; 
      #size-cells = <0>; 
      spi-max-frequency = <1600000>; 
    }; 
}; 

我的驅動程序代碼看起來像

static int mcp3008_probe(struct spi_device *spi) 
{ 
    int ret = 0; 
    struct mcp3008 *mcp = NULL; 
    const struct mcp3008_chip_info *chip_info; 

    dev_dbg(&spi->dev, "aaartyaa came in probe, master dev = %s\n", 
        dev_name(&spi->master->dev)); 

    . 
    . 
    . 
    . 

} 

static const struct of_device_id mcp3008_of_ids[] = { 
    { 
      .compatible = "aartyaa_mcp3008", 
    }, 

    { }, 
}; 

MODULE_DEVICE_TABLE(of, mcp3008_of_ids); 

static const struct spi_device_id mcp3008_ids[] = { 
    {"aartyaa_mcp3008", MCP3008}, 
    {}, 
}; 

MODULE_DEVICE_TABLE(spi, mcp3008_ids); 

static struct spi_driver mcp3008_driver = { 
    .driver = { 
      .name = "aartyaa_mcp3008", 
      .of_match_table = of_match_ptr(mcp3008_of_ids), 
    }, 
    .id_table = mcp3008_ids, 
    .probe = mcp3008_probe, 
    //.remove = devm_mcp3008_device_release, 
}; 

module_spi_driver(mcp3008_driver); 

它是不是能註冊並創建SPI設備 的dmesg =>

[ 213.352758] spi-bcm2835 20204000.spi: chipselect 0 already in use 
[ 213.352781] spi_master spi0: spi_device register error /soc/[email protected]/aartyaa_3008 
[ 213.352799] spi_master spi0: Failed to create SPI device for /soc/[email protected]/aartyaa_3008 

spi_bcm2835和spi_bcm2835aux加入到系統。 正如我注意到的,插入它後,模塊將添加到/ sys/bus/spi/drivers中。 探針未被調用,因爲找不到匹配設備。

驅動程序的probe是如何調用,以及如何添加SPI設備在設備樹

任何幫助將受到讚賞和感謝。

+1

即使您想訪問三個SPI從機,您的SPI主機也只有兩個爲芯片選擇定義的引腳。 – sawdust

+1

spi1有3個CE引腳。或者您可以使用spi0並禁用其中一個spidev設備來竊取您的設備的CE引腳。它取決於您在40路接頭上使用哪個引腳。最好使用DT覆蓋而不是修改基本DT文件。 –

回答

0

我很欣賞你的意見。 現在我已經用新的替換了spi0設備。 驅動程序探頭正在調用