1================= 2SPI NOR framework 3================= 4 5Part I - Why do we need this framework? 6--------------------------------------- 7 8SPI bus controllers (drivers/spi/) only deal with streams of bytes; the bus 9controller operates agnostic of the specific device attached. However, some 10controllers (such as Freescale's QuadSPI controller) cannot easily handle 11arbitrary streams of bytes, but rather are designed specifically for SPI NOR. 12 13In particular, Freescale's QuadSPI controller must know the NOR commands to 14find the right LUT sequence. Unfortunately, the SPI subsystem has no notion of 15opcodes, addresses, or data payloads; a SPI controller simply knows to send or 16receive bytes (Tx and Rx). Therefore, we must define a new layering scheme under 17which the controller driver is aware of the opcodes, addressing, and other 18details of the SPI NOR protocol. 19 20Part II - How does the framework work? 21-------------------------------------- 22 23This framework just adds a new layer between the MTD and the SPI bus driver. 24With this new layer, the SPI NOR controller driver does not depend on the 25m25p80 code anymore. 26 27Before this framework, the layer is like:: 28 29 MTD 30 ------------------------ 31 m25p80 32 ------------------------ 33 SPI bus driver 34 ------------------------ 35 SPI NOR chip 36 37 After this framework, the layer is like: 38 MTD 39 ------------------------ 40 SPI NOR framework 41 ------------------------ 42 m25p80 43 ------------------------ 44 SPI bus driver 45 ------------------------ 46 SPI NOR chip 47 48 With the SPI NOR controller driver (Freescale QuadSPI), it looks like: 49 MTD 50 ------------------------ 51 SPI NOR framework 52 ------------------------ 53 fsl-quadSPI 54 ------------------------ 55 SPI NOR chip 56 57Part III - How can drivers use the framework? 58--------------------------------------------- 59 60The main API is spi_nor_scan(). Before you call the hook, a driver should 61initialize the necessary fields for spi_nor{}. Please see 62drivers/mtd/spi-nor/spi-nor.c for detail. Please also refer to fsl-quadspi.c 63when you want to write a new driver for a SPI NOR controller. 64Another API is spi_nor_restore(), this is used to restore the status of SPI 65flash chip such as addressing mode. Call it whenever detach the driver from 66device or reboot the system. 67