linux SPI驱动框架(一)---控制器驱动

本文深入解析Linux SPI驱动架构,涵盖核心层、控制器驱动层及设备驱动层。详细介绍了qcom SPI控制器驱动的设计与实现,包括控制器设备注册、控制器驱动注册过程,并对SPI总线异步传输机制进行了探讨。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转载请标明出处floater的csdn blog,http://blog.youkuaiyun.com/flaoter

Linux SPI驱动分为核心层,控制器驱动层和设备驱动层。核心层是Linux的SPI核心部分,提供了核心数据结构的定义,总线、设备和驱动的注册、注销管理等,提供与上层的统一接口。linux将I2C、SPI、USB等总线驱动隔离成控制器驱动和设备驱动,使两者相对独立。
本文以qcom的spi控制器为例,对spi控制器驱动进行解析。kernel代码版本是3.18。

1 控制器设备注册

控制器的设备注册在kernel启动阶段的dt解析过程中完成,注册控制器设备为platform_device。dts中描述如下:
spi_6: spi@757a000 {
   
    /* BLSP1 QUP6 */
		compatible = "qcom,spi-qup-v2";
		#address-cells = <1>;
		#size-cells = <0>;
		reg-names = "spi_physical", "spi_bam_physical";
		reg = <0x0757a000 0x600>,
		      <0x07544000 0x2b000>;
		interrupt-names = "spi_irq", "spi_bam_irq";
		interrupts = <0 100 0>, <0 238 0>;
		spi-max-frequency = <19200000>;

		qcom,infinite-mode = <0>;
		qcom,rt-priority;
		qcom,use-bam;
		qcom,ver-reg-exists;
		qcom,bam-consumer-pipe-index = <22>;
		qcom,bam-producer-pipe-index = <23>;
		qcom,master-id = <86>;
		qcom,use-pinctrl;
		pinctrl-names = "spi_default", "spi_sleep";
		pinctrl-0 = <&spi_6_active>;
		pinctrl-1 = <&spi_6_sleep>;

		clock-names = "iface_clk", "core_clk";

		clocks = <&clock_gcc clk_gcc_blsp1_ahb_clk>,
		         <&clock_gcc clk_gcc_blsp1_qup6_spi_apps_clk
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值