hi,大神们
我在板级文件(board-am335xevm.c)里初始化了我的spi外设如下:
1. static struct pinmux_config spi1_pin_mux[] = {
{"mcasp0_aclkx.spi1_sclk", OMAP_MUX_MODE3 | AM33XX_PULL_ENBL | AM33XX_INPUT_EN},
{"mcasp0_fsx.spi1_d0", OMAP_MUX_MODE3 | AM33XX_PULL_ENBL | AM33XX_PULL_UP | AM33XX_INPUT_EN},
{"mcasp0_axr0.spi1_d1", OMAP_MUX_MODE3 | AM33XX_PULL_ENBL | AM33XX_INPUT_EN},
{"mcasp0_ahclkr.spi1_cs0", OMAP_MUX_MODE3 | AM33XX_PULL_ENBL | AM33XX_PULL_UP | AM33XX_INPUT_EN},
{NULL, 0}, };
2. static struct spi_board_info oled_spi1_slave_info[] = {
{
.modalias = "oled",
.platform_data = (const void *)GPIO_TO_PIN(3, 16),
.irq = -1,
.max_speed_hz = 12000000,
.bus_num = 2, .chip_select = 0,
.mode = SPI_MODE_0, },
};
3. static void spi1_init(int evm_id, int profile) {
setup_pin_mux(spi1_pin_mux);
spi_register_board_info(oled_spi1_slave_info, ARRAY_SIZE(oled_spi1_slave_info));
return;
}
4. static struct evm_dev_cfg evm_sk_dev_cfg[] = {
//{mcasp1_init, DEV_ON_BASEBOARD, PROFILE_ALL},
{spi1_init,DEV_ON_DGHTR_BRD, PROFILE_ALL},
... };
我的驱动程序(spi_oled.c)里定义了如下spi_driver结构体(其他部分没贴出来);
static struct spi_driver spi_oled_drv = {
.driver = { .name = "oled",
.owner = THIS_MODULE, },
.probe = spi_oled_probe,
.remove = __devexit_p(spi_oled_remove), };
当我insmod spi_oled.ok时,能成功挂载。 但在/dev 里找不到设备节点,后来我发现是匹配不成功,进入不了我驱动的probe函数。 (设备节点自动挂在等函数式放在probe函数内的,在该函数内也加了打印信息,证明没进入该函数)。
我的设备名“oled”和驱动名“oled”不是已经一样了么,为什么会匹配不成功呢?
刚刚还发现,板子sys/bus/spi/devices 目录下是空的,也就是说我的spi设备没加载进去?这个怎么解决呢?