Linux中实现SPI读写FLASH的驱动

请教,裸机要实现通过SPI接口读写FLASH设备,无非就写个I2C控制器的驱动,FLASH的驱动。
在Linux中我看了资料感觉反而更加困惑。自己编写控制器驱动参考哪个文件、FLASH驱动参考哪个文件呢?
内核中flash驱动有的在spi文件夹下,有的在mtd文件夹下,实现方法也完全不同,他们之间是什么关系呢?

目前看资料是说控制器叫master端,注册到platform_bus_type:SPI FLASH叫SPI设备端,注册到spi_bus_type。
1、master 驱动侧:
注册platform_driver和spi_register_master(master);
2、master设备侧:
注册platform_device;
3、SPI设备-设备侧:
spi_register_board_info注册spi_board_info;
4、SPI设备-驱动侧:
spi_register_driver注册spi_driver
spi_driver的 probe 函数会将spi flash 作为一个mtd设备来注册mtd_info(使用mtd_device_register)。

参考网上的w25q16 FLASH的驱动代码w25q16_spi.c,只实现了spi_driver,请问flash芯片驱动的spi_device的注册在哪里实现?
spi flash想分区用来启动linux系统如何实现?