spi 设备注册分析

/*
 * spi 设备注册分析
 */
    1.  kernel/drivers/spi/spi.c 初始化设备 device_initialize        
        
        /* 调用device_initialize 的会有这些函数 */
        spi_match_controller_to_boardinfo
            spi_new_device
                spi_alloc_device
                      device_initialize

        spi_of_notifier
            of_spi_notify
                of_register_spi_devices   /* 调用 spi_alloc_device 和 spi_add_device */
                      spi_alloc_device
                            device_initialize
                      spi_add_device
                            device_add
        
        acpi_spi_notify
            acpi_spi_add_device
                acpi_register_spi_device   /* 调用 spi_alloc_device 和 spi_add_device */
                      spi_alloc_device
                            device_initialize
                      spi_add_device
                            device_add
        
        spi_alloc_master
        spi_alloc_slave                   /* spi_alloc_master 和 spi_alloc_slave 都调用 __spi_alloc_controller */
               __spi_alloc_controller
                    device_initialize

    2.  kernel/drivers/spi/spi.c 添加设备 device_add

            spi_add_device
                device_add    

            rockchip_spi_probe        /* kernel/drivers/spi/spi-rockchip.c */
                spi_alloc_master        /* rockchip_spi_probe 调用 spi_alloc_master 和 devm_spi_register_controller */
                devm_spi_register_controller
                        spi_register_controller
                                device_add

    3.  一个 match 三个 probe 调用
        a. spi_drv_probe            /* kernel/drivers/spi/spi.c */
        b. spidev_probe                /* kernel/drivers/spi/spidev.c */
        c. rockchip_spi_probe        /* kernel/drivers/spi/spi-rockchip.c */
        d. spi_match_device            /* kernel/drivers/spi/spi.c */
    
        驱动通过 driver_register 注册后,如果驱动 driverA 和设备 deviceA 匹配成功,即调用 probe 函数。

        首先被调用到的是 spi_drv_probe , 在 spi_drv_probe 的里面再调用 spidev_probe ,成功后生成 /dev/spi0.0 。

        每个SPI设备肯定挂载到了一个SPI控制器,这个控制器设备由 rockchip_spi_probe 生成。
        控制器是通过平台设备注册的,由platform匹配并调用 rockchip_spi_probe 。

    4.  调用顺序,两个spi设备

        [    0.058649] --- spi_init ---        

        [    0.209375] --- spidev_init ---
        [    0.210388] --- rockchip_spi_probe ---
        [    0.210596] --- spi_register_controller ---
        [    0.211056] --- spi_alloc_device ---
        [    0.211096] --- spi_add_device ---
        [    0.211354] --- spi_match_device ---
        [    0.211415] --- spi_drv_probe ---
        [    0.211544] --- spidev_probe ---

        [    0.212558] --- rockchip_spi_probe ---
        [    0.212762] --- spi_register_controller ---
        [    0.213183] --- spi_alloc_device ---
        [    0.213225] --- spi_add_device ---
        [    0.213528] --- spi_match_device ---
        [    0.213589] --- spi_drv_probe ---
        [    0.213708] --- spidev_probe ---

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值