Linux I2C 内核驱动绑定(bind)

标签 linux linux-kernel i2c

我正在学习如何开发 Linux I2C 内核驱动程序,我从以下网站学习。
How to instantiate I2C devices
I2C Driver for Linux Based Embedded System
...
接下来,我找到了一个演示如何实现 I2C 触摸板驱动程序的示例,但它确实让我感到困惑
linux/drivers/input/mouse/synaptics_i2c.c

我的问题是,Linux 内核如何将此驱动程序正确绑定(bind)到设备?
此驱动程序不提供“检测”回调,未通过 i2c_driver.address_list 指定 I2C 从属地址,而且似乎没有人可以调用 i2c_board_info 来注册地址信息(我 grep 了整个 Linux 代码库)。
我认为驱动程序必须指定从属地址或提供“检测”回调,就像
drivers/hwmon/adc128d818.c
或者 linux/drivers/rtc/rtc-ds1307.c (会通过i2c_board_info注册)

请让我知道我错过了什么,谢谢。

最佳答案

i2c 设备声明是从设备树开始的。

在设备树中声明 i2c 设备。

例子:

i2c1: i2c@400a0000 {
    /* ... master properties skipped ... */
    clock-frequency = <100000>;

    flash@50 {
        compatible = "atmel,24c256";
        reg = <0x50>;
    };

    pca9532: gpio@60 {
        compatible = "nxp,pca9532";
        gpio-controller;
        #gpio-cells = <2>;
        reg = <0x60>;
    };
};

在哪里,

1) 400a000是一个i2c总线地址 2)pca9532和flash是驱动名 3) @50 和@60 为从机地址 4) 属性“compatible”来查找和映射设备与驱动程序 5) 每个条目单元格内的其他属性特定于将在探测期间用于设备初始化的驱动程序

https://www.kernel.org/doc/Documentation/i2c/instantiating-devices

关于Linux I2C 内核驱动绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47155211/

相关文章:

linux - linux内核中的原子操作是没有 dentry 的吗?

linux - bash 可以用来直接与硬件通信吗?

c - sched.h 中 thread_group 列表的元素类型是什么?

Linux PCI 驱动程序调用 init,但不调用probe

c - 为多功能 i2c 设备编写内核模块 - 一个还是多个?

java - matlab中有什么办法可以放大菜单栏和提示窗口的字体

node.js - 设置终端命令以在 Crontab 中运行

linux - 使用vim/cscope查找linux内核中的符号定义

c - 与传感器 CCS 编译器的 I2C 通信

stm32 - STM32硬件I2C有什么bug?