1. 程式人生 > >linux i2c子系統程式碼分析9---i2c裝置的註冊方法

linux i2c子系統程式碼分析9---i2c裝置的註冊方法

/**
 * i2c_register_board_info - statically declare I2C devices
 * @busnum: identifies the bus to which these devices belong
 * @info: vector of i2c device descriptors
 * @len: how many descriptors in the vector; may be zero to reserve
 *the specified bus number.
 *
 * Systems using the Linux I2C driver stack can declare tables of board info
 * while they initialize.  This should be done in board-specific init code
 * near arch_initcall() time, or equivalent, before any I2C adapter driver is
 * registered.  For example, mainboard init code could define several devices,
 * as could the init code for each daughtercard in a board stack.
 *
 * The I2C devices will be created later, after the adapter for the relevant
 * bus has been registered.  After that moment, standard driver model tools
 * are used to bind "new style" I2C drivers to the devices.  The bus number
 * for any device declared using this routine is not available for dynamic
 * allocation.
 *
 * The board info passed can safely be __initdata, but be careful of embedded
 * pointers (for platform_data, functions, etc) since that won't be copied.
 */
int __init
i2c_register_board_info(int busnum,
struct i2c_board_info const *info, unsigned len)
{
int status;


down_write(&__i2c_board_lock);


/* dynamic bus numbers will be assigned after the last static one */
if (busnum >= __i2c_first_dynamic_bus_num)
__i2c_first_dynamic_bus_num = busnum + 1;


for (status = 0; len; len--, info++) {
struct i2c_devinfo*devinfo;


devinfo = kzalloc(sizeof(*devinfo), GFP_KERNEL);
if (!devinfo) {
pr_debug("i2c-core: can't register boardinfo!\n");
status = -ENOMEM;
break;
}


devinfo->busnum = busnum;
devinfo->board_info = *info;
list_add_tail(&devinfo->list, &__i2c_board_list);
}


up_write(&__i2c_board_lock);


return status;
}

相關推薦

linux i2c子系統程式碼分析9---i2c裝置註冊方法

/**  * i2c_register_board_info - statically declare I2C devices  * @busnum: identifies the bus to which these devices belong  * @info: vector of i2c device

MTK I2C驅動程式碼分析

   I2C匯流排(I2C bus,Inter-IC bus)是一個雙向的兩線連續匯流排,提供積體電路(ICs)之間的通訊線路。I2C匯流排是一種序列擴充套件技術,最早由Philips公司推出。Philips公司推出的I2C匯流排採用一條資料線(SDA),加一條時鐘線(SC

clk子系統 - 程式碼分析

通過clk驅動框架可以看出,clk主要分core和hardware兩層,而core層的主要函式是clk_register,它是把clk註冊到系統中,而hardware層的註冊函式因種類而異,不過最終都會統一呼叫clk_register來註冊,本文只拿gate來舉例;另外本文介紹下

linux input子系統程式碼閱讀簡單記錄

網上可以找到很多關於linux輸入子系統的分析和程式碼導讀,這些文章看的再多,都只是別人的總結,自己始終都是需要看原始碼的。對程式碼的理解,想長時間的記住,是不現實的,乾脆把閱讀分析時的順序記錄下來,如果以後再次看這部分的程式碼,參照這個閱讀順序,應該回憶的也會快一些。 1

Linux ubi子系統原理分析

本文思維導圖總綱: 綜述 關於ubi子系統,早已有比較正式的介紹,也提供非常形象的介紹ubi子系統ppt 國內的前輩 alloysystem 不辭辛勞為我們提供了部分正式介紹的中文譯文,以及找不到原文的轉載譯文 感謝這些資料讓我迅速入門ubi,進而整理出這博文 此博文是對上文的總結以及中文譯文的補充 在閱

老男孩教育每日一題-第60天-一道實用Linux運維問題的9種Shell解答方法

awk shell腳本 每日一題 2017-06-041.問題為:已知:/etc/hosts的內容為192.168.1.11 oldboy11.etiantian.org 192.168.1.21 oldboy21.etiantian.org 192.168.1.31 oldboy31.et

linux下adb連不上android裝置解決方法

一般情況下連線android裝置adb devices檢視到的list為空主要是因為系統不識別android裝置引起的,解決方案如下 第一步: 先不插手機用lsusb命令,再插上手機用lsusb命令

linux IIC子系統分析(九)——例項分析通過裝置節點訪問I2c裝置

在《 linux IIC子系統分析(四)——I2c bus初始化》 中我們建立了I2C 匯流排驅動,I2C adapter device 和adapter drivers也在這時建立在我們實際開發中,I2C 匯流排驅動一般晶片原廠會提供,我們開發一般是設計裝置驅動。在訪問I2

Linux裝置驅動程式架構分析I2C架構(基於3.10.1核心)

作者:劉昊昱  核心版本:3.10.1 I2C體系架構的硬體實體包括兩部分: 硬體I2C Adapter:硬體I2C Adapter表示一個硬體I2C介面卡,也就是I2C控制器。一般是SOC中的一個介面,也可以用GPIO模擬。硬體I2C Adapter主要用來在I2

linux IIC子系統分析(二)—— linux i2c 架構概述

I2C匯流排因為它及簡單的硬體連線和通訊方式,在現在的很多裝置上它是一種不可或缺的通訊匯流排。如果用當微控制器直接操作I2C,其實很簡單,只要正確把握IIC的操作時序就可以了。但是在linux系統中,I

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

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

linux IIC子系統分析(四)——I2c bus初始化

這裡的I2C Bus 並不是通訊上的匯流排,而是linux系統為了管理裝置和驅動而虛擬出來的,在I2C Bus用來掛載後面將會使用到的I2C 介面卡(adapter)和I2C裝置(client)。另外,

linux裝置模型之I2C子系統

=============================== 本文系本站原創,歡迎轉載! 轉載請註明出處:http://blog.csdn.net/gdt_a20 ===============================       I2c子系統將i2c控制器(

Linux i2c子系統(一) _動手寫一個i2c裝置驅動

i2c匯流排是一種十分常見的板級匯流排,本文以linux3.14.0為參考, 討論Linux中的i2c驅動模型並利用這個模型寫一個mpu6050的驅動, 最後在應用層將mpu6050中的原始資料讀取出來 i2c子系統框架 下圖就是我理解的i2c驅動框架示意圖, 類似中斷子系

i2c子系統-eeprom例項分析

兩種訪問eeprom的例子 在Linux應用層訪問eeprom的方法,並給出示例程式碼方便大家理解。第一個方法是通過eeprom的裝置檔案進行訪問。這兩個方法分別對應了i2c裝置驅動的兩個不同的實現,第二個方法是通過sysfs檔案系統對eeprom進行訪問。 第一種通過devfs

linux核心的I2C子系統

1、I2C匯流排彙總概念   (1)三根訊號線:SCL、SDA、GND   (2)同步、序列、電平、低速、近距離   (3)匯流排式結構,支援多個裝置掛接在同一條總線上   (4)主從式結構,通訊雙方必須一個為主(master)一個為從(slave),主裝置掌握每次通訊的主動權,從裝置按照主裝置的節奏

Linux--核心---I2C匯流排驅動分析 以linux3.10.0 RK3288為例

Linux 3.10.0 iic匯流排註冊過程 I2C匯流排驅動包括I2C介面卡驅動載入與解除安裝以及I2C匯流排通訊方法 I2C核心提供了i2c_adapter的增加和刪除函式、i2c_driver的增加和刪除函式、i2c_client的依附和脫離函式 以及i2c傳輸、傳送

linux驅動由淺入深系列:usb子系統之四(android平臺滑鼠驅動程式碼分析

android上的usb口是支援OTG(on the go)的,USB OTG既可以作為Host又可以作為Device,我們本文來看一下android手機作為Host連線滑鼠的情況。OTG是如何做到既可以做Host又可以作為Device的呢 標準usb接頭中有四根線:vbu

linux驅動學習(八) i2c驅動架構(史上最全) davinc dm368 i2c驅動分析

預備知識 在閱讀本文最好先熟悉一種i2c裝置的驅動程式,並且瀏覽一下i2c-core.c以及晶片提供商的提供的i2c匯流排驅動(i2c-davinci.c)。標題黨請見諒! 其實i2c介面非常的簡單,即使用51單片的gpio來模擬i2c,編寫一個e2prom或者其他i2c介

嵌入式Linux——IIC驅動(2):i2c驅動框架分析

簡介:         本文主要介紹i2c匯流排框架,即對i2c的各個層次(i2c匯流排,i2c核心,i2c裝置)進行分析。同時我也會結合程式對框架進行說明。所以本文將分為兩部分,第一部分對i2c的框架進行介紹,而第二部分就是結合程式碼分析。 核心:linux-2.6.2