1. i2c
1.1 重要结构体
标识i2c controler: struct i2c_adapter
表示I2C Device: struct i2c_client
表示要传输的数据: struct i2c_msg
1.2 传输数据的API
int i2c_transfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num)
s32 i2c_smbus_xfer(struct i2c_adapter *adapter, u16 addr, unsigned short flags, char read_write,u8 command, int protocol, union i2c_smbus_data *data)
1.3 通用驱动
drivers/i2c/i2c-dev.c
1.4 应用层的工具
i2c-tools
1.5 驱动模型(总线-设备-驱动)
1.5.1 总线结构体:struct bus_type i2c_bus_type
1.5.2 设备结构体:struct i2c_client / struct i2c_adapter
1.5.3 驱动结构体:struct i2c_driver
1.5.4 总线注册API:bus_register(&i2c_bus_type);
1.5.5 设备注册API:
1.5.5.1: 通过I2C bus number来创建:
int i2c_register_board_info(int busnum, struct i2c_board_info const *info, unsigned len);
1.5.5.2: 通过设备树来创建:
i2c总线节点下创建一个子节点,reg 标识设备地址
1.5.5.3: 无法知道该设备挂载哪个I2C bus下,无法知道它对应的I2C bus number:
i2c_new_device //新内核已改为i2c_new_clien_device
i2c_new_probed_device
1.5.5.4: 通过用户空间(user-space)生成:
// 创建一个i2c_client, .name = "eeprom", .addr=0x50, .adapter是i2c-3
# echo eeprom 0x50 > /sys/bus/i2c/devices/i2c-3/new_device
1.5.6 驱动注册API;
int i2c_register_driver(struct module *owner, struct i2c_driver *driver)
i2c_add_driver
1.6 注册adapter
i2c_add_adapter
2. spi
2.1 重要结构体
标识spi controller:struct spi_master, spi_controller
标识spi Device: struct spi_device
标识要传输的数据: struct spi_message, <--spi_transfer
2.2 传输数据的API
int spi_sync(struct spi_device *spi, struct spi_message *message);
int spi_async(struct spi_device *spi, struct spi_message *message)
spi_sync_transfer
spi_write
spi_read
2.3 通用驱动
drivers\spi\spidev.c
2.4 应用层的工具
tools\spi\spidev_fdx.c,内核提供的测试工具
2.5 驱动模型(总线-设备-驱动)
2.5.1 总线结构体:struct bus_type spi_bus_type
2.5.2 设备结构体:struct spi_device
2.5.3 驱动结构体:struct spi_driver
2.5.4 总线注册API:bus_register(&spi_bus_type);
2.5.5 设备注册API:spi_register_board_info 、 spi_new_device
来自设备树:
compatible:根据它找到SPI Device驱动
reg:用来表示它使用哪个片选引脚
spi-max-frequency:必选,该SPI设备支持的最大SPI时钟
2.5.6 驱动注册API:spi_register_driver
1.6 注册spiController
spi_register_controller
3. mdio
3.1 重要结构体
标识mdio controller:struct mii_bus //mdiobus_register
标识mdio device: struct mdio_device
标识要传输的数据: NA
3.2 传输数据的API
mdiobus_read
mdiobus_write
mdiobus_modify
3.3 驱动模型(总线-设备-驱动)
3.3.1 总线结构体:struct bus_type mdio_bus_type
3.3.2 设备结构体:struct mdio_device
3.3.3 驱动结构体:struct mdio_driver,struct mdio_driver_common
3.3.4 总线注册API:bus_register(&mdio_bus_type);
3.3.5 设备注册API:mdiobus_register_device,mdio_device_register,mdiobus_create_device
3.3.6 驱动注册API:mdio_driver_register
3.4 注册adapter
mdiobus_register