SPI通用接口层用spi_device结构来表示一个spi设备,它的各个字段的意义如下:
struct device dev | 代表该spi设备的device结构 |
struct spi_master *master | 指向该spi设备所使用的控制器 |
u32 max_speed_hz | 该设备的最大工作时钟频率 |
u8 chip_select | 在控制器中的片选引脚编号索引 |
u16 mode | 设备的工作模式,包括时钟格式,片选信号的有效电平等等 |
u8 bits_per_word | 设备每个单位数据所需要的比特数 |
int irq | 设备使用的irq编号 |
char modalias[SPI_NAME_SIZE] | 该设备的名字,用于spi总线和驱动进行配对 |
int cs_gpio | 片选信号的gpio编号,通常不用我们自己设置,接口层会根据上面的chip_select字段在spi_master结构中进行查找并赋值 |
要完成向系统增加并注册一个SPI设备,我们还需要另一个数据结构:
spi_board_info对象用于描述 SPI设备信息,其大部分字段和spi_device结构相对应,bus_num字段则用来指定所属的控制器编号,通过spi_board_info结构,我们可以有两种方式向系统增加spi设备。第一种方式是在SPI控制器驱动已经被加载后,我们使用通用接口层提供的如下API来完成:
struct spi_device *spi_new_device(struct spi_master *master, struct spi_board_info *chip);
int spi_register_board_info(struct spi_board_info const *info, unsigned n);