I've also made some minor modifications to the SPI driver:
- don't use full-duplex mode, since it does not work (seems to be HW bug)
- support for GPIO CS
- support for large buffers
In general, I mainly threw code out to rely more on the generic spi.c infrastructure. Together with some modifications to the .dts file, this resolves many of the issues that people complain about on the SPI driver. Additionally, the driver can now support 'fast read' and does not need the chunked-io parameter. This speeds up in general performance of flash accesses. Combined with a higher SPI clock speed, I have obtained more than double of the flash read performance compared to the current driver.
Example modifications to the dts file:
For CS GPIOs:
cs-gpios = <0>, <0>, <&gpio1 9 0>, <&gpio1 10 0>;
...
spidev@2 {
compatible = "spidev";
reg = <2>;
spi-max-frequency = <40000000>;
};
spidev@3 {
compatible = "spidev";
reg = <3>;
spi-max-frequency = <40000000>;
};
For better flash performance:
- m25p,chunked-io = <31>;
+ m25p,fast-read;
I've put the driver on github https://github.com/wdu/mt7688