MTK SPI設備驅動分析


一.MTK測試的SPI驅動

Spi-dev.c (kernel-3.18\drivers\spi\mediatek\mt6735)
 
struct spi_device_id spi_id_table = { "spi-ut", 0 };
static struct spi_driver spi_test_driver = {
.driver = {
.name = "test_spi",
.bus = &spi_bus_type,
.owner = THIS_MODULE,
},
.probe = spi_test_probe,
.remove = spi_test_remove,
.id_table = &spi_id_table,
};
 
static struct spi_board_info spi_board_devs[] __initdata = {
[0] = {
.modalias = "spi-ut",
.bus_num = 0,
.chip_select = 1,
.mode = SPI_MODE_3,
},
};
 
spi_dev_init
    spi_register_board_info(spi_board_devs, ARRAY_SIZE(spi_board_devs)); //注冊spi設備的信息
        list_add_tail(&bi->list, &board_list);
list_for_each_entry(master, &spi_master_list, list)
spi_match_master_to_boardinfo(master, &bi->board_info); //如果有SPI控制器就NEW一個設備,見MTK SPI控制器驅動分析章節
    spi_register_driver(&spi_test_driver); //注冊spi設備驅動
        sdrv->driver.bus = &spi_bus_type;
        driver_register(&sdrv->driver);
 
 
spi_driver的device_driver中的name字段肯定為"spi-ut".只有這樣才能在SPI核心層的spi_match_device函數中匹配.
 
 
static DEVICE_ATTR(spi, 0200, NULL, spi_store);
static DEVICE_ATTR(spi_msg, 0200, NULL, spi_msg_store);
 
static struct device_attribute *spi_attribute[] = {
&dev_attr_spi,
&dev_attr_spi_msg,
};
 
spi_test_probe
   spi->mode = SPI_MODE_3;
    spi->bits_per_word = 32;
    return spi_create_attribute(&spi->dev);
        device_create_file(dev, spi_attribute[idx]);
            spi_msg
            spi_msg_store
 
         


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM