mt7620 spi驱动的dts文件修改产生spidev32766.1

在3.2之前版本的内核里spi驱动要先注册spi_board_info结构体,产生spi主控制器设备(platform device),然后匹配spi_master_driver(platform driver,这个文件是spi-rt2880.c).  匹配上之后就会进入probe函数,注册spi主控制器,再查找spi主控制器下有没有挂设备,如果有就创建spi_device. 创建完设备之后再到spi总线上寻找有没有同名的spi_driver(例如spidev.c).  如果有的话就调用spi_driver的probe函数.  在probe函数里register_chrdev/class_create/device_create, 创建chrdev然后通过fops里的函数来读写spi设备.在新版的内核里推荐使用dts来描述设备信息, 并且先注册spi_master, 然后再创建设备, 最后跟platform总线上的driver的 .of_match_table成员里的元素匹配, 如果匹配成功就调用probe. 所以新版的内核里我们不需要再写spi_baord_info 和spi_register_board_info这样的代码了.


查看文件mt7620a.dtsi

 spi@b00 {
                        compatible = "ralink,mt7620a-spi", "ralink,rt2880-spi";
                        reg = <0xb00 0x100>;
                        resets = <&rstctrl 18>;
                        reset-names = "spi";
                        #address-cells = <1>;
                        #size-cells = <1>;
                        status = "disabled";
                        pinctrl-names = "default";
                        pinctrl-0 = <&spi_pins>;
                };

spi@b00代表一个spi控制器,是一个platform device,compatible="ralink, rt2880-spi"与 spi-rt2880.c  platform driver 中的of_match_table 对应(如果要支持片选1,还得修改num_cs=2,前提是mt7620的spi控制器本来就支持两个片选).相同就会进入到probe函数中,再调用spi_register_master()注册一个spi主控制器.

看看MT7620a.dts

  spi@b00 {
                        status = "okay";
                        m25p80@0 {
                                #address-cells = <1>;
                                #size-cells = <1>;
                                compatible = "en25q64";
                                reg = <0 0>;
                                linux,modalias = "m25p80", "en25q64";
                                spi-max-frequency = <10000000>;
};

spi_register_master注册spi主控制器时就会扫描这些设备,并注册这些设备。   status = “okay”表示选中,否则不能编译进内核. m25p80@0表示在spi片选0下挂了一个m25p80的设备,reg=<0,0>表示片选0,compatible = "en25q64" 与驱动文件drivers/mtd/devices/m25p80.c 中的id_table匹配.如果要在spi控制器的片选1上挂一个设备,就要修改dts文件,修改如下:

 spidev@1 {
                                compatible = "rohm,dh2228fv";
                                reg = <1 0>;
                                spi-max-frequency = <1000000>;
                        };

 compatible = "rohm,dh2228fv"与spidev.c文件中的of_match_table 对应,对应成功就会进入到probe,这样一个spidev设备节点就会出现了。



  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MT7620A是一款嵌入式芯片,支持PCIe接口,因此可以使用PCIe扩展板来增加更多的外设。下面是关于OpenWrt MT7620A PCIe驱动程序的详细分析: 1. 驱动文件 MT7620A的PCIe驱动程序位于OpenWrt的内核源代码中,路径为:`/target/linux/ramips/mt7620a/`,其中包含了以下文件: - pcie.c - pcie.h - pcie-mediatek.c - pcie-mt7620.c - pcie.c 其中,pcie-mediatek.c和pcie-mt7620.c是MT7620A PCIe驱动程序的主要实现文件。 2. 驱动框架 MT7620A PCIe驱动程序的框架主要包括以下几个部分: - PCIe控制器初始化:在pcie-mt7620.c中实现。 - PCIe PHY初始化:在pcie-mediatek.c中实现。 - PCIe端口初始化:在pcie-mt7620.c中实现。 - PCIe设备驱动:在pcie.c中实现。 3. 驱动程序分析 在MT7620A PCIe驱动程序的实现中,pcie-mt7620.c主要负责PCIe控制器的初始化和端口的初始化,而pcie-mediatek.c则负责PCIe PHY的初始化。以下是MT7620A PCIe驱动程序的详细分析: - pcie-mt7620.c 在pcie-mt7620.c中,主要实现了mt7620_pcie_init()函数,用于初始化PCIe控制器和PCIe端口。在该函数中,首先进行了PCIe控制器的硬件初始化,然后进行PCIe端口的初始化。 PCIe控制器的硬件初始化包括设置PCIe控制器的寄存器和使能相关时钟。PCIe端口的初始化包括设置PCIe端口的寄存器和使能PCIe端口。 - pcie-mediatek.c 在pcie-mediatek.c中,主要实现了mtk_pcie_phy_init()函数,用于初始化PCIe PHY。在该函数中,首先进行了PHY的硬件初始化,然后进行了PHY的软件初始化。 PHY的硬件初始化包括设置PHY的寄存器和使能PHY相关时钟。PHY的软件初始化包括设置PHY的参数和使能PHY。 - pcie.c 在pcie.c中,主要实现了PCIe设备驱动程序。PCIe设备驱动程序可以通过PCIe总线与CPU相连接,用于管理和控制PCIe设备。PCIe设备驱动程序可以使用标准Linux设备驱动程序接口(如file_operations、ioctl等)来与用户空间进行交互。 4. 总结 以上是关于OpenWrt MT7620A PCIe驱动程序的详细分析。MT7620A PCIe驱动程序的实现主要涉及PCIe控制器的初始化、PCIe PHY的初始化、PCIe端口的初始化和PCIe设备驱动程序的实现等方面。如果你想更深入地了解MT7620A PCIe驱动程序的实现,可以阅读OpenWrt内核源代码中相关的文件

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值