目录
1.1 spi_dev_set_name(设置bus id)
1. spi_add_device
int spi_add_device(struct spi_device *spi)
{
.....
/* Chipselects are numbered 0..max; validate. */
if (spi->chip_select >= ctlr->num_chipselect) {
dev_err(dev, "cs%d >= max %d\n", spi->chip_select,
ctlr->num_chipselect);
return -EINVAL;
}
/* Set the bus ID string */
spi_dev_set_name(spi);
.......
if (ctlr->cs_gpios)
spi->cs_gpio = ctlr->cs_gpios[spi->chip_select];
/* Drivers may modify this initial i/o setup, but will
* normally rely on the device being setup. Devices
* using SPI_CS_HIGH can't coexist well otherwise...
*/
status = spi_setup(spi);
......
/* Device may be bound to an active driver when this returns */
status = device_add(&spi->dev);
......
}
1.1 spi_dev_set_name(设置bus id)
static void spi_dev_set_name(struct spi_device *spi)
{

本文详细介绍了Linux SPI设备驱动中 spi_add_device 和 spi_setup 函数的实现过程。 spi_add_device 首先验证chip_select,设置bus ID字符串,然后分配cs_gpio,并调用spi_setup进行模式检查和初始化。spi_setup中,主要检查DUAL和QUAD模式不能同时设置,SPI_3WIRE模式下禁用DUAL和QUAD,设置默认bits_per_word和max_speed_hz,并调用控制器的setup方法。这些步骤确保了SPI设备正确且有效地添加到系统中。
最低0.47元/天 解锁文章
1741

被折叠的 条评论
为什么被折叠?



