看到了吧,struct i2c_device_id里面的字符串与 I2C_BOARD_INFO里面的匹配后,xxx_led_probe才会调用。 如果不想用同一个probe,那就在写一个struct i2c_device_id和struct i2c_driver 怎么样,知道流程和每个结构体是干什么用的了吧?
在I2C驱动中,通常定义的i2c_adapter 或 i2c_driver 结构体中,必须包含.class成员,实际定义如下即可,如ac108驱动: I2C_CLASS_HWMON,硬件监控类,如lm_sensors等; I2C_CLASS_DDC,DDC是数字显示通道(Digital Display Channel)的意思, 通常用于显示设备信息的获取; I2C_CLASS_SPD,存储类的模组;...
填充一个i2c_driver结构体,如果以设备树方式匹配,需要填充of_match_table部分,如果是其他总线方式匹配,需要填充.driver.name或者.id_table属性,然后提供一个.probe函数以及一个.remove函数,probe中对设备进行操作,remove负责回收资源。 将i2c_driver注册到i2c总线中。 如果是设备树形式,提供相应的设备树节点。 如果是总线...
VARCHAR、CHAR类型外,当然还包含一些复杂的数据类型(array、map、struct、union)。
EXPORT_SYMBOL_GPL(i2c_hid_ll_driver);static int i2c_hid_init_irq(struct i2c_client *client) {2 changes: 0 additions & 2 deletions 2 include/linux/hid.h Original file line numberDiff line numberDiff line change @@ -855,8 +855,6 @@ struct hid_ll_driver { bool (*may_wakeup)(struc...
34 + static const struct i2c_device_id foo_idtable[] = { 35 35 { "foo", my_id_for_foo }, 36 36 { "bar", my_id_for_bar }, 37 37 { } 38 38 }; 39 - 40 39 MODULE_DEVICE_TABLE(i2c, foo_idtable); 41 40 42 41 static struct i2c_driver foo_driver = { ...
嵌入式系统中有很多的物理总线:I2c、SPI、USB、uart、PCIE、APB、AHB linux从2.6起就加入了一套新的驱动管理和注册的机制platform平台总线,是一条虚拟的总线,并不是一个物理的总线。 相比PCI、USB,它主要用于描述SOC上的片上资源。platform 所描述的资源有一个共同点:在CPU 的总线上直接取址。
基于代码复用的原则,Linux 内核引入了 regmap 模型,regmap 将寄存器访问的共同逻辑抽象出来,驱动开发人员不需要再去纠结使用 SPI 或者 I2C 接口 API 函数,统一使用 regmapAPI函数。这样的好处就是统一使用 regmap,降低了代码冗余,提高了驱动的可以移植性。regmap模型的重点在于: ...
STRUCT和UDT类型变量是表示一个完整结构或一个结构元素的结构化变量。 下面是有效结构变量的例子: Image //结构的标识符 Image.element //结构元素的标识符 Image.arr //在一个结构中的一维数组标识符 Image.arr[2,5]//在一个结构中的数组元素的标识符 ...
DriverUtils OSAL HDI Audio Codec Display Format Input 平台 COMMON GPIO I2C RTC SDIO SPI UART WATCHDOG EMMC DSI PWM PanSensor Sensor 模型 WLAN 系统基础能力子系统集 用户程序框架 AbilityKit BundleManager 公共通信子系统 Softbus 图形及UI子系统 Surface ...