如何创建简单的SPI从协议驱动程序

时间:2019-07-12 19:06:43

标签: android adb linux-device-driver spi device-tree

我有一个Intrinsyc Open-Q µ820评估板和一个带SPI引脚的完全可访问接头。在这些引脚上,我想连接一个SPI从设备。我的linux内核全部设置为dts文件,如下所示:

&soc {
    [...]
    spi_0: spi@7575000 { /* BLSP1 QUP1 */
        compatible = "qcom,spi-qup-v2";
        #address-cells = <1>;
        #size-cells = <0>;
        reg-names = "spi_physical", "spi_bam_physical";
        reg = <0x07575000 0x600>, <0x07544000 0x2b000>;
        interrupt-names = "spi_irq", "spi_bam_irq";
        [...]    

        device@0 {  // Slave driver and CS ID
            compatible = "me,myDevice"; /
            #address-cells = <1>;
            #size-cells = <1>;
            reg = <0>;
            spi-max-frequency = <5000000>;
        };
    [...]
};

我想用我的设备编写一个驱动程序,以使用自定义功能发送自定义消息。我已经花了一个月的时间在做这个工作,但是我无法完全掌握应该怎么做。

我写的实际驱动程序包含:

static const struct of_device_id mySpi_id[] = {
    { .compatible = "me,myDevice", },
    { .compatible = "qcom,spi-msm-codec-slave", },
    {},
};
MODULE_DEVICE_TABLE(of, mySpi_id);

static const struct spi_device_id mySpi_dev[] = {
    {"myDevice", 0 },
    {},
};
MODULE_DEVICE_TABLE(spi, mySpi_dev);

static struct spi_driver myDevice_driver = 
{
    .driver = {
        .name   =   DEVICE_NAME,
        .owner  =   THIS_MODULE,
    },
    .probe      = myDevice_probe,
    .remove     = myDevice_remove,
    .id_table   = mySpi_dev,
};

static struct spi_board_info spi_board_info = {
    .modalias   = DEVICE_NAME,
    .max_speed_hz   = 5000000,
    .chip_select    = 0,
    .mode       = SPI_MODE_0,   // CPOL = 0, CPHA = 0
};
static int __init myDevice_init(void){[...]} // Don't know what to put here

static void __exit myDevice_exit(void){[...]} // Don't know what to put here
module_init(myDevice_init);
module_exit(myDevice_exit);

MODULE_ALIAS("spi:myDevice");
MOLULE_LICENSE("GPL");

这些结构似乎将我的驱动程序链接到我的设备。但是我无法编写.probe .open .write .read __init __exit来配置我的引脚并在其上进行写操作(例如SPIdev驱动程序)。

如果我对DTS文件了解得很深,那么qcom,spi-msm-codec-slave是SPI主设备,必须在其下定义我的从设备(例如 device @ 0 ) 。我已经在我的Linux存储库中解析了所有spi驱动程序,但无法编写函数。

所以我的问题是:当使用诸如以下命令时,我应该如何编写 file_operations 函数以使其像SPIdev一样工作 $ adb shell cat myDevice$ adb shell echo "whatever" > myDevice

0 个答案:

没有答案