linux下的I2C驅動記錄

2021-06-27 19:29:24 字數 3666 閱讀 1068

現在做的是rk平台的i2c驅動,不是說linux每個外設對應乙個裝置檔案嗎?可是找了一下一直沒找到,今天特別搞了一下。i2c裝置是註冊為platform平台驅動的。

下面是我用adb命令檢視的

linux的裝置檔案不一定只在dev/這個目錄下面,像sys/ 目錄下面也會有一些裝置檔案的

mid下面的i2c裝置的裝置檔案

1|root@android

:/# ls sys/bus/i2c/drivers/

rk610_codec/ gc0308/ ir-kbd-i2c/ sensors/ tps65910/

act8846/ gc0328/ nt99340/ sp0838/ wm831x/

dummy/ gc2035/ rk610_ctl/ sp2518/

ft5x0x_touch/ gslx680/ rk610_hdmi/ sp2541/

mid下面的i2c裝置的i2c位址

root@android

:/# ls sys/bus/i2c/devices/

0-004c/ 1-002d/ 1-005a/ 2-0040/ 3-003c/ 4-0042/ 4-0060/ i2c-1/ i2c-3/

1-0014/ 1-0034/ 2-0038/ 3-0021/ 4-0040/ 4-0046/ i2c-0/ i2c-2/ i2c-4/

在板級檔案裡面,我們可以看到我們的i2c裝置位址是多少,**如下,用i2c_register_board_info這個函式來註冊i2c的device。 每乙個i2c的硬體介面對應乙個i2cx_info

static

void __init rk30_i2c_register_board_info(void)

#if defined (config_touchscreen_gslx680)

,#endif

然後看i2c的對應的裝置驅動,下面給出乙個tp的驅動的註冊的地方,用i2c_add_driver這個函式去註冊i2c的驅動driver

static

const

struct i2c_device_id gsl_ts_id = ,

{}};

module_device_table(i2c, gsl_ts_id);

static

struct i2c_driver gsl_ts_driver = ,

#ifndef config_has_earlysuspend

.suspend = gsl_ts_suspend,

.resume = gsl_ts_resume,

#endif

.probe = gsl_ts_probe,

.remove = __devexit_p(gsl_ts_remove),

.id_table = gsl_ts_id,

};static

int __init gsl_ts_init(void)

static

void __exit gsl_ts_exit(void)

module_init(gsl_ts_init);

module_exit(gsl_ts_exit);

module_license("gpl");

module_description("gslx680 touchscreen controller driver");

module_author("guan yuwei, [email protected]");

module_alias("platform:gsl_ts");

好了。然後再看一下這裡,可以看到 devices/和drivers/

1|root@android

:/# ls sys/bus/i2c/

devices/ drivers_autoprobe uevent

drivers/ drivers_probe

再看一下這個,就很清楚的知道這個裝置掛載在哪個i2c介面下面了

root@android

:/# ll sys/bus/i2c/drivers/gslx680/

lrwxrwxrwx root root 2013-09-04 08:

512-0040 -> ../../../../devices

/platform/rk30_i2c.2/i2c-2/2-0040

--w------- root root 4096

2013-09-04 08:

51 bind

--w------- root root 4096

2013-09-04 08:

51 uevent

--w------- root root 4096

2013-09-04 08:

51 unbind

root@android

:/#

root@android

:/# ll sys/bus/i2c/devices/2-0040/

lrwxrwxrwx root root 2013-09-04 08:

55 driver -> ../../../../../bus/i2c/drivers/gslx680

drwxr-xr-x root root 2013-09-04 08:

55 input

-r--r--r-- root root 4096

2013-09-04 08:

55 modalias

-r--r--r-- root root 4096

2013-09-04 08:

55 name

drwxr-xr-x root root 2013-09-04 08:

55 power

lrwxrwxrwx root root 2013-09-04 08:

55 subsystem -> ../../../../../bus/i2c

-rw-r--r-- root root 4096

2013-09-04 08:

55 uevent

root@android

:/#

Linux驅動 I2C匯流排

這裡以rk3288為例子,使用的是linux4.14,根據裝置樹節點i2c 與rk3x i2c driver,match之後,就會呼叫對應的probe rk3x i2c probe 這裡主要就是註冊乙個adapt i2c add adapter 也就是i2c控制器,或者說是i2c主裝置,既然是主裝置...

Linux驅動之I2C裝置驅動

核心 4.20 晶元 hym8563 rtc 下面的 分析主要都在注釋中,會按照驅動中函式的執行順序分析。static const struct i2c device id hym8563 id module device table i2c,hym8563 id static const stru...

Linux 下I2C裝置驅動新框架

本文只介紹linux下i2c新驅動框架技術,老框架在原blog中有提及,這裡不詳述。linux新的i2c驅動框架下,i2c裝置是以i2c client的形式存在的,即裝置i2c client與i2c驅動相對應。i2c裝置驅動可以理解成i2c client驅動。在i2c匯流排驅動載入的時候,i2c b...