]> git.sur5r.net Git - u-boot/commit
Blackfin: spi: make cs deassert function deterministic
authorTodor I Mollov <tmollov@ucsd.edu>
Sat, 4 Apr 2009 10:53:06 +0000 (06:53 -0400)
committerMike Frysinger <vapier@gentoo.org>
Mon, 6 Apr 2009 07:49:31 +0000 (03:49 -0400)
commitd04371a116d102e587ba7aa4c329b441cdbea3f4
tree3b8d8ff0416b3ae12abb2d9c463db37fc3a2b99a
parent712ac6a1a6909a58d6549fb220cc921a7e9f9979
Blackfin: spi: make cs deassert function deterministic

Blackfin SPI driver was not driving the SPI chip-select high before
putting the chip-select signals into tri-state mode.  This is probably
something that slipped by unnoticed in most designs.  If the signals are
put directly into a tri-state mode, then the board is relying on the
pull-up resistors to pull up the chip-select before the next transaction.
Most of the time this is fine, except when you have two transactions that
follow each other very closely, such as the flash erase and read status
register commands.  In this case I was seeing a 500ns separation between
the transactions.  In my setup, with a 10kOhm pull-up, it would meet
timing spec about half the time and resulted in intermittent errors.  (A
stronger pull up would fix this, but our design is targeted for low power
consumption and a 3.3kOhm @ 3.3v is 3.3mW of needless power consumption.)
I modified the spi_cs_deactivate() function in bfin_spi.c to drive the
chip-selects high before putting them into tri-state.  For me, this
resulted in a rise time of 5ns instead of the previous rise time of about
1us, and fully satisfied the timing spec of the chip.

Signed-off-by: Todor I Mollov <tmollov@ucsd.edu>
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
drivers/spi/bfin_spi.c