1. 程式人生 > >spi控制器驅動模型

spi控制器驅動模型

#include <linux/clk.h>
#include <linux/dmaengine.h>
#include <linux/module.h>
#include <linux/of.h>
#include <linux/platform_device.h>
#include <linux/spi/spi.h>
#include <linux/pm_runtime.h>
#include <linux/scatterlist.h>

static int rockchip_spi_probe(struct platform_device *pdev)
{
    //分配一個spi_master結構 
master = spi_alloc_master(&pdev->dev, sizeof(struct rockchip_spi));

//初始化spi_master結構 
platform_set_drvdata(pdev, master);
..........
1 申請必要的硬體資源,例如中斷,DMA通道,DMA記憶體緩衝區等等;
2 配置SPI控制器的工作模式和引數,使之可以和相應的裝置進行正確的資料交換工作;
3 向核心層提供介面,使得裝置驅動可以通過核心層訪問控制器驅動
4 完成資料訊息佇列的排隊和處理,直到訊息佇列變空為止;
..........

//向核心層 註冊spi_master
ret = devm_spi_register_master(&pdev->dev, master);


}


static const struct dev_pm_ops rockchip_spi_pm = {
SET_SYSTEM_SLEEP_PM_OPS(rockchip_spi_suspend, rockchip_spi_resume)
SET_RUNTIME_PM_OPS(rockchip_spi_runtime_suspend,
  rockchip_spi_runtime_resume, NULL)
};


static const struct of_device_id rockchip_spi_dt_match[] = {
{ .compatible = "rockchip,rk3036-spi", },
{ .compatible = "rockchip,rk3066-spi", },
{ .compatible = "rockchip,rk3188-spi", },
{ .compatible = "rockchip,rk3228-spi", },
{ .compatible = "rockchip,rk3288-spi", },
{ .compatible = "rockchip,rk3368-spi", },
{ .compatible = "rockchip,rk3399-spi", },
{ },
};
MODULE_DEVICE_TABLE(of, rockchip_spi_dt_match);


static struct platform_driver rockchip_spi_driver = {
.driver = {
.name= DRIVER_NAME,
.pm = &rockchip_spi_pm,
.of_match_table = of_match_ptr(rockchip_spi_dt_match),
},
.probe = rockchip_spi_probe,
.remove = rockchip_spi_remove,
};

module_platform_driver(rockchip_spi_driver);


MODULE_AUTHOR("Addy Ke <
[email protected]
>");
MODULE_DESCRIPTION("ROCKCHIP SPI Controller Driver");
MODULE_LICENSE("GPL v2");

相關推薦

spi控制器驅動模型

#include <linux/clk.h> #include <linux/dmaengine.h> #include <linux/module.h> #include <linux/of.h> #include <

SPI核心驅動模型-dm8127

利用TI提供的已有SPI核心驅動模型,該方案需要我們瞭解核心的SPI驅動模型是如何實現的。 3.1.    SPI核心驅動模型 在2.6的linux核心中,SPI的驅動架構可以分為如下三個層次:SPI 核心層、SPI控制器驅動層和SPI裝置驅動層。Linux 中SPI驅

二、Linux spi 控制器驅動

1、概覽 對於ARM平臺來說,大多數CPU都是SoC。spi控制器被整合在CPU內部。spi總線上的資料傳輸過程通常就是這個spi控制器來控制的。為了使spi控制器能工作在linux spi子系統中,我們就需要針對CPU內部的spi控制器編寫一個驅動。前面

23 H5的spi控制器驅動

在核心裡的配置選項: make menuconfig ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- Device Drivers ---> [*] SPI support --->

基於MT7688 原廠SDK 使用SPI控制器驅動TFT螢幕ILI9225驅動器(spi介面)

以下是我的一個利用SPI控制器操作屏的一個操作例項 包含一個bpeer_tft.c 和一個bpeer_tft.h 這是我基於flash驅動剝離出來的spi控制器驅動 好的話,頂起來~~~~~~~~~~~~~~~~~~~ 下面是程式碼: bpeer_tft.c 1 /*

linux系統匯流排SPI匯流排三之SPI控制器驅動程式分析

嵌入式微處理器訪問SPI裝置有兩種方式:使用GPIO模擬SPI介面的工作時序或者使用SPI控制器。使用GPIO模擬SPI介面的工作時序是非常容易實現的,但是會導致大量的時間耗費在模擬SPI介面的時序上,訪問效率比較低,容易成為系統瓶頸。這裡主要分析使用SPI控制器的情況。

SPI驅動之主控制器驅動程式

 嵌入式微處理器訪問SPI裝置有兩種方式:使用GPIO模擬SPI介面的工作時序或者使用SPI控制器。使用GPIO模擬SPI介面的工作時序是非常容易實現的,但是會導致大量的時間耗費在模擬SPI介面的時序上,訪問效率比較低,容易成為系統瓶頸。這裡主要分析使用SPI控制器的情

spi 主機控制器驅動(spi_master)

spi_master/* linux/drivers/spi/spi_s3c24xx.c * * Copyright (c) 2006 Ben Dooks * Copyright (c) 2006 Simtec Electronics * Ben Dooks <

linux設備驅動模型之平臺總線實踐環節(一)

linux設備驅動模型1、首先回顧下之前寫的驅動和數據在一起的led驅動代碼,代碼如下:#include <linux/module.h> #include <linux/init.h> #include <linux/leds.h> #include <asm/io

Guava ---- EventBus事件驅動模型

sim div spa tar 共享 execution ext 實例 處理 在軟件開發過程中, 難免有信息的共享或者對象間的協作。 怎樣讓對象間信息共享高效, 而且耦合性低。 這是一個難題。 而耦合性高將帶來編碼改動牽一發而動全身的連鎖效應。 Spring的風靡正

讓天堂的歸天堂,讓塵土的歸塵土——談Linux的總線、設備、驅動模型

linux 總線 設備 驅動公元1951年5月15日的國會聽證上,美國陸軍五星上將麥克阿瑟建議把朝鮮戰爭擴大至中國,布萊德利隨後發言:“如果我們把戰爭擴大到共產黨中國,那麽我們會被卷入到一場錯誤的時間,錯誤的地點同錯誤的對手打的一場錯誤的戰爭中。”寫代碼,適用於同樣的原則,那就是把正確的代碼放到正確的位置而不

Linux 設備驅動模型

最終 store attrs 模式 用戶 kref 方式 內核 電源管理 Linux系統將設備和驅動歸一到設備驅動模型中了來管理 設備驅動程序功能:     1,對硬件設備初始化和釋放     2,對設備進行管理,包括實參設置,以及提供對設備的統一操作接口     3,

事件驅動模型

image 獨立 之間 如果 png 實例 相等 不知道 響應時間 一、為什麽要用事件驅動模型? 在UI編程中,常常要對鼠標點擊進行相應,首先如何獲得鼠標點擊呢?方式一:創建一個線程,該線程一直循環檢測是否有鼠標點擊。 那麽這個方式有以下幾個缺點:1. CPU資源浪費,可能

Linux audio驅動模型

codec rfi ear code blank 設備 control sdn pos linux驅動 alsa模型: Linux ALSA聲卡驅動之一:ALSA架構簡介 Linux ALSA聲卡驅動之二:聲卡的創建 Linux ALSA聲卡驅動之三:PCM設備

struts2屬性驅動模型

bsp 表單提交 man let 用戶 啟動服務 equal tex 屬性 屬性驅動模型的作用: 因為struts2與servlet API 實現了解耦,無法直接使用HttpServlet Request對象獲取表單提交的參數,但Struts2提供了屬性驅動模型機制來解決這

Linux塊設備IO子系統(一) _驅動模型(轉載)

validate per ring span () VC isp 設備 思路   塊設備是Linux三大設備之一,其驅動模型主要針對磁盤,Flash等存儲類設備,塊設備(blockdevice)是一種具有一定結構的隨機存取設備,對這種設備的讀寫是按塊(所以叫塊設備)進行的,

Linux驅動之平臺設備驅動模型簡析(驅動分離分層概念的建立)

技術 描述 rst 操作 mem iou 系統 簡單 reg Linux設備模型的目的:為內核建立一個統一的設備模型,從而有一個對系統結構的一般性抽象描述。換句話說,Linux設備模型提取了設備操作的共同屬性,進行抽象,並將這部分共同的屬性在內核中實現,而為需要新添加設備

SPI裸機驅動程序設計

高速 http 程序 inter som osi 決定 ace image 1. SPI(Serial Peripheral Interface)串行外設接口,是一種高速的、全雙工、同步的通信總線。采用主從模式(Master Slave)架構,支持多個slave,一般僅支持

linux裝置驅動模型 - regmap

1. regmap介紹 regmap主要是為了方便操作暫存器而設計的,它將所有模組的暫存器(包括soc上模組的暫存器和外圍裝置的暫存器等) 抽象出來,用一套統一介面來操作暫存器 比如,如果要操作i2c裝置的暫存器,那麼就要呼叫i2c_transfer介面,要操作spi裝置的暫存

linux裝置驅動模型 - device/bus/driver

在linux驅動模型中,為了便於管理各種裝置,我們把不同裝置分別掛在他們對應的總線上,裝置對應的驅動程式也在總線上找,這樣就提出了deivce-bus-driver的模型,硬體上有許多裝置匯流排,那麼我們就在裝置模型上抽象出bus概念,相應的device就代表裝置,driver表示驅動,