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。
原文:http://www.cnblogs.com/xuyh/p/6027431.html