1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- SPI NOR framework
- ============================================
- Part I - Why do we need this framework?
- ---------------------------------------
- SPI bus controllers (drivers/spi/) only deal with streams of bytes; the bus
- controller operates agnostic of the specific device attached. However, some
- controllers (such as Freescale's QuadSPI controller) cannot easily handle
- arbitrary streams of bytes, but rather are designed specifically for SPI NOR.
- In particular, Freescale's QuadSPI controller must know the NOR commands to
- find the right LUT sequence. Unfortunately, the SPI subsystem has no notion of
- opcodes, addresses, or data payloads; a SPI controller simply knows to send or
- receive bytes (Tx and Rx). Therefore, we must define a new layering scheme under
- which the controller driver is aware of the opcodes, addressing, and other
- details of the SPI NOR protocol.
- Part II - How does the framework work?
- --------------------------------------
- This framework just adds a new layer between the MTD and the SPI bus driver.
- With this new layer, the SPI NOR controller driver does not depend on the
- m25p80 code anymore.
- Before this framework, the layer is like:
- MTD
- ------------------------
- m25p80
- ------------------------
- SPI bus driver
- ------------------------
- SPI NOR chip
- After this framework, the layer is like:
- MTD
- ------------------------
- SPI NOR framework
- ------------------------
- m25p80
- ------------------------
- SPI bus driver
- ------------------------
- SPI NOR chip
- With the SPI NOR controller driver (Freescale QuadSPI), it looks like:
- MTD
- ------------------------
- SPI NOR framework
- ------------------------
- fsl-quadSPI
- ------------------------
- SPI NOR chip
- Part III - How can drivers use the framework?
- ---------------------------------------------
- The main API is spi_nor_scan(). Before you call the hook, a driver should
- initialize the necessary fields for spi_nor{}. Please see
- drivers/mtd/spi-nor/spi-nor.c for detail. Please also refer to fsl-quadspi.c
- when you want to write a new driver for a SPI NOR controller.
|