1. 程式人生 > >android驅動i2c器件的裝置樹配置

android驅動i2c器件的裝置樹配置

做驅動的要經常配置i2c,而配置i2c無非就是確定i2c器件掛在哪一個i2c總線上,以及i2c的具體地址.下面以高通8909平臺為例子說一下

  • 確定i2c機器掛在哪一個i2c總線上
    1. 從原理圖得到SDA,SCL對應的gpio,我這個gpio為gpio6,gpio7
    2. 在msm8909-pinctrl.dtsi檔案中找到該gpio對應的i2c匯流排,如下,可見其對應的i2c匯流排是i2c_1
              pmx_i2c_1 {
                  i2c_1_active: i2c_1_active {
                      mux {
                          pins = "gpio6", "gpio7";
                          function = "blsp_i2c1";
                      };
                      config {
                          pins = "gpio6", "gpio7";
                          drive-strength = <2>; /* 2 MA */
                          bias-disable; /* No PULL */
                      };
                  };
                  i2c_1_sleep: i2c_1_sleep {
                      mux {
                          pins = "gpio6", "gpio7";
                          function = "blsp_i2c1";
                      };
                      config {
                          pins = "gpio6", "gpio7";
                          drive-strength = <2>; /* 2 MA */
                          bias-disable; /* No PULL */
                      };
                  };
              };
    3. 然後在msm8909.dtsi裡面查詢i2c_1,就可以得到其i2c地址為78b5000
          i2c_1: [email protected] { /* BLSP1 QUP1 */
              compatible = "qcom,i2c-msm-v2";
              #address-cells = <1>;
              #size-cells = <0>;
              reg-names = "qup_phys_addr";
              reg = <0x78b5000 0x1000>;
              interrupt-names = "qup_irq";
              interrupts = <0 95 0>;
              clocks = <&clock_gcc clk_gcc_blsp1_ahb_clk>,
                   <&clock_gcc clk_gcc_blsp1_qup1_i2c_apps_clk>;
              clock-names = "iface_clk", "core_clk";
              qcom,clk-freq-out = <100000>;
              qcom,clk-freq-in  = <19200000>;
              pinctrl-names = "i2c_active", "i2c_sleep";
              pinctrl-0 = <&i2c_1_active>;
              pinctrl-1 = <&i2c_1_sleep>;
              qcom,noise-rjct-scl = <0>;
              qcom,noise-rjct-sda = <0>;
              dmas = <&dma_blsp1 4 64 0x20000020 0x20>,
                  <&dma_blsp1 5  32 0x20000020 0x20>;
              dma-names = "tx", "rx";
              qcom,master-id = <86>;
          };
    4. 在msm8909-mtp.dtsi裡[email protected]加入其i2c器件的配置
          [email protected] { /* BLSP1 QUP1 */
              [email protected] {
                  compatible = "fortemedia,fm2018";
                  reg = <0x60>;
                  fm2018,vdd-en = <&sn7325_1gpio 5 0x00>;//p1 58////sn7325,5
                  fm2018,pwd-gpio = <&sn7325_gpio 3 0x00>;//p1 26//sn7325,3
                  fm2018,rst-gpio = <&sn7325_gpio 2 0x00>;//sn7325,2
                  fm2018,int-gpio = <&sn7325_gpio 4 0x4>;//sn7325,4
              };
          };
  • i2c器件的具體地址

        這個一般是由器件datasheet提供,如我使用的這個期間的i2c地址是0x60,如果不清楚,可以打電話問FAE。
 

相關推薦

android驅動i2c器件裝置配置

做驅動的要經常配置i2c,而配置i2c無非就是確定i2c器件掛在哪一個i2c總線上,以及i2c的具體地址.下面以高通8909平臺為例子說一下 確定i2c機器掛在哪一個i2c總線上 從原理圖得到SDA,SCL對應的gpio,我這個gpio為gpio6,gpio7

rk3399下iic驅動方式二-----裝置

方式一 前面說了iic在新核心下的一種方式,下面是第二種方式,這種方式在fireflyWiki教程裡面有說明 程式碼如下 #include <linux/kernel.h> #include <linux/module.h> #include <linux/

第六課:在LCD驅動中使用裝置

按照計劃,本課會講解修改uboot和核心讓JZ2440支援裝置樹。 但前面修改uboot已經講解完了,修改核心也沒必要單獨講,可以直接看核心補丁,修改的方法也並不複雜。 核心補丁路徑: doc_and_sources_for_device_tree/sourc

Ti437x LED匯流排驅動模型程式+裝置

本文主要記錄AM437X驅動的LED。含簡單的字元裝置驅動、裝置驅動模型、裝置樹以及LED子系統。 目前就Linux驅動的理解是: Linux驅動 = 裸機 + 框架 關於框架,目前的理解是: 以LED驅動為例,之前印象中就是韋老大

【Linux驅動】Linux裝置語法詳解

1 概念Linux核心從3.x開始引入裝置樹的概念,用於實現驅動程式碼與裝置資訊相分離。在裝置樹出現以前,所有關於裝置的具體資訊都要寫在驅動裡,一旦外圍裝置變化,驅動程式碼就要重寫。引入了裝置樹之後,驅動程式碼只負責處理驅動的邏輯,而關於裝置的具體資訊存放到裝置樹檔案中,這樣,如果只是硬體介面資訊的變化而沒有

Itop4412開發板emmc驅動移植(裝置

硬體裝置:itop4412開發板 核心版本linux-3.8.1 裝置樹方式減少了裝置的冗餘編碼,同時使移植變得更加高效。eMMC作為開發板的基礎,十分重要。 裝置樹用的是核心自帶的smdk4412.dts vim arch/arm/boot/dts/exynos4412-

android驅動 無法開啟裝置檔案 解決

由於裝置檔案是在核心驅動裡面通過device_create建立的,而device_create建立的裝置檔案預設只有root使用者可讀寫,而hello_device_open一般是由上層APP來呼叫的,這些APP一般不具有root許可權,這時候就導致開啟裝置檔案失敗:Hel

Linux驅動開發08:【裝置】MPU6050驅動i2c驅動

介紹 上一節在nanopi裝置樹的I2C節點下增加了一個MPU6050的子節點,並在sysfs中檢視到了該節點已經被正確解析,這一節我們來修改之前的MPU6050驅動,使之能夠匹配到我們的裝置樹節點,然後再分析裝置樹節點是如何載入到i2c總線上的。 MP

基於i2c子系統的驅動分析-裝置

基於i2c子系統的驅動分析 和i2c有關的程式碼都在原始碼drivers/i2c目錄下。核心提供了兩種i2c的實現方法: 第一種叫i2c_dev,對應drivers/i2c/i2c-dev.c,這種方法僅僅封裝了soc的i2c控制器操作,並嚮應用層提供操作介面。其本質是為應

i2c 與 spi 裝置在新版核心中不採用DTS裝置形式 在驅動新增裝置資訊(board_info)的方法

本文唯一地址:http://blog.csdn.net/dearsq/article/details/51953610 歡迎轉載,轉載請著名,謝謝~ /* 廢話:在展訊平臺移植 spi 裝置的時候發現完成 dts 和 driver中的 of_match_

Android TP驅動之(二)裝置解析

AndroidTP驅動之(二)裝置樹解析 0. 前情提要 上文中我們已經初步搭好了TP驅動的框架。當然我們還缺了重要的部分input子系統,這個不急,我們下一篇文章再敘。 本文我們來完成TP driver中對裝置樹的解析。 1. probe函式

21 使用裝置i2c裝置驅動

在核心裡表示i2c裝置驅動的結構體有點小變化: struct i2c_driver { int (*probe)(struct i2c_client *, const struct i2c

裝置時對應的驅動程式設計

一、字元裝置驅動程式的三種寫法 驅動程式編寫有3種方法:傳統方法、使用匯流排裝置驅動模型、使用裝置樹 這3種方法也核心都是一樣的: 分配、設定、註冊 file_operations結構體 這個結構體中有.open, .read, .write, .ioctl等成員 驅動程式要實現這些成員,在這些

Linux驅動開發11:【裝置】nanopi的PWM驅動

介紹 前兩節利用裝置樹實現了nanopi的LED驅動和按鍵驅動,這一節來實現nonapi的PWM驅動。PWM驅動在核心中也有相應的實現,因此這裡只是按照要求新增裝置樹檔案即可。這一節和之前一樣,首先修改裝置樹檔案進行測試,然後分析核心相應的軟體實現。 新增裝置樹節點 因為在s

Linux驅動開發10:【裝置】nanopi的按鍵驅動

介紹 這一節在nanopi上實現按鍵驅動,和LED驅動一樣,通用的按鍵驅動在linux核心中已經實現好,我們只需要按照要求寫好裝置樹即可,不用我們自己實現按鍵驅動。這一節中首先修改裝置樹並測試按鍵驅動,然後分析drivers/input/keyboard/gpio_keys.c檔案,

04-Linux裝置系列-GPIO驅動實踐

1. 前言 GPIO驅動開發可能算是Linux核心裝置驅動開發中最為簡單、最常見的一個方向,對於開發板的按鍵、LED、蜂鳴器、電源控制等模組,可能都是使用GPIO實現的。Linux核心的GPIO子系統在核心不斷的演進過程中進行了多次的重構,本文的第二

嵌入式核心及驅動開發之學習筆記(十七) 裝置的定義規則和獲取方法

概述 在Linux 2.6中,arch/arm/plat-xxx和arch/arm/mach-xxx中充斥著大量的垃圾程式碼,相當多數的程式碼只是在描述板級細節,而這些板級細節對於核心來講,不過是垃圾,如板上的platform裝置、resource、i2c_board_info、sp

x4412 基於裝置的 hello_world驅動

首先在exynos4412-x4412.dts檔案中新增HelloWorld節點,如下: HelloWorld {          compatible = "x4412, hello_world";          status = "okay"; }; 然後新建一

裝置I2C和SPI例項

I2C例項 clock-frequency i2c匯流排頻率,常用值有100000,400000 address-cells 該屬性值必須為1 size-cells 該屬性值必須為0 i2c具體例項如下圖所示:

(最新核心3.4)Linux 裝置載入I2C client adapter 的流程(核心3.4 高通)

BLSP(BAM Low-Speed Peripheral) , 每一個BLSP含有兩個QUP, 每一個QUP可以被配置為I2C, SPI, UART, UIM介面, BLSP是高通對於低速介面的一種管理方式。 [email protec