2017-06-23 81 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设备。 驱动程序探头正在调用