Linux I2C内核驱动绑定

Linux I2C kernel driver binding

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

我的问题是,Linux 内核如何将此驱动程序正确绑定到设备?
此驱动程序不提供 'detect' 回调,不通过 [= 指定 I2C 从属地址36=],似乎没有人打电话给 i2c_board_info 来注册地址信息(我 grep 了整个 Linux 代码库)。
我认为驱动程序必须指定从属地址或提供 'detect' 回调,就像
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

我终于想通了我的问题。
参考http://www.embedded-bits.co.uk/2009/i2c-in-the-2632-linux-kernel/
需要在内核上使用 i2c_new_probed_device() 或 i2c_new_device 注册我的 I2C 设备,以使其具有关于从属地址和设备名称的映射 table。