zoukankan      html  css  js  c++  java
  • linux SPI驱动——spidev之deive(五)

    1.定义board设备
    1: struct spi_board_info { 2: /* the device name and module name are coupled, like platform_bus; 3: * "modalias" is normally the driver name. 4: * 5: * platform_data goes to spi_device.dev.platform_data, 6: * controller_data goes to spi_device.controller_data, 7: * irq is copied too 8: */ 9: char modalias[SPI_NAME_SIZE]; 10: const void *platform_data; 11: void *controller_data; 12: int irq; 13:   14: /* slower signaling on noisy or low voltage boards */ 15: u32 max_speed_hz; 16:   17:   18: /* bus_num is board specific and matches the bus_num of some 19: * spi_master that will probably be registered later. 20: * 21: * chip_select reflects how this chip is wired to that master; 22: * it's less than num_chipselect. 23: */ 24: u16 bus_num; 25: u16 chip_select; 26:   27: /* mode becomes spi_device.mode, and is essential for chips 28: * where the default of SPI_CS_HIGH = 0 is wrong. 29: */ 30: u8 mode; 31:   32: /* ... may need additional spi_device chip config data here. 33: * avoid stuff protocol drivers can set; but include stuff 34: * needed to behave without being bound to a driver: 35: * - quirks like clock rate mattering when not selected 36: */
    1: /* add by xuyonghong for test */ 2: struct spi_board_info jz_spi0_board_info[] = { 3: { 4: .modalias = "spidev", 5: .mode = SPI_MODE_3, 6: .max_speed_hz = 1000000, 7: .controller_data = (void *)GPIO_PB(2), 8: .bus_num = 0, 9: .chip_select = 0, 10: }, 11: }; 12: int jz_spi0_devs_size = ARRAY_SIZE(jz_spi0_board_info);
     
     
    1: int __init 2: spi_register_board_info(struct spi_board_info const *info, unsigned n) 3: { 4: struct boardinfo *bi; 5: int i; 6:   7: bi = kzalloc(n * sizeof(*bi), GFP_KERNEL); 8: if (!bi) 9: return -ENOMEM; 10:   11: for (i = 0; i < n; i++, bi++, info++) { 12: struct spi_master *master; 13:   14: memcpy(&bi->board_info, info, sizeof(*info)); 15: mutex_lock(&board_lock); 16: list_add_tail(&bi->list, &board_list); 17: /* 18: 如果master先注册,则执行spi_match_master_to_boardinfo匹配, 19: 否则在master注册的时候匹配device 20: */ 21: list_for_each_entry(master, &spi_master_list, list) 22: spi_match_master_to_boardinfo(master, &bi->board_info); 23: mutex_unlock(&board_lock); 24: } 25:   26: return 0; 27: }
    1: spi_register_board_info(jz_spi0_board_info, jz_spi0_devs_size);

    总结:

    1. list_add_tail(&bi->list, &board_list); 讲board添加在board_list

    2.当master已经注册,则通过spi_match_master_to_boardinfo和spi_new_device创建spi device。

  • 相关阅读:
    什么是css权重
    html5 canvas画五角星(美国队长)
    从输入URL到页面加载发生了什么
    javascript之事件委托(转)
    javascript之常用排序算法
    javascript之闭包
    javascript二维数组的删除
    javascript之apply()、call()
    div+css两列布局与三列布局
    css处理水平居中问题(淘宝双飞翼布局)
  • 原文地址:https://www.cnblogs.com/xuyh/p/6027431.html
Copyright © 2011-2022 走看看