chromeec: Add wakeup delay after SPI /CS assertion

Some ECs may require a few microseconds to ramp up their clock after
being awaken by /CS assertion. This adds a Kconfig variable that can
be overridden at the mainboard-level which will force a delay between
asserting /CS and beginning a transfer.

BUG=chrome-os-partner:32223
BRANCH=none
TEST=verified ~100us delay using logic analyzer

Change-Id: Ibba356e4af18f80a7da73c96dadfda0f25251381
Signed-off-by: David Hendricks <dhendrix@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/220242
Reviewed-by: Julius Werner <jwerner@chromium.org>
Reviewed-by: Alexandru Stan <amstan@chromium.org>
This commit is contained in:
David Hendricks 2014-09-27 20:04:49 -07:00 committed by chrome-internal-fetch
commit ec6b10e4e3
2 changed files with 12 additions and 0 deletions

View file

@ -42,6 +42,13 @@ config EC_GOOGLE_CHROMEEC_SPI_BUS
depends on EC_GOOGLE_CHROMEEC_SPI
hex "SPI bus for Google's Chrome EC"
config EC_GOOGLE_CHROMEEC_SPI_WAKEUP_DELAY_US
depends on EC_GOOGLE_CHROMEEC_SPI
int
default 0
help
Force delay after asserting /CS to allow EC to wakeup.
config EC_GOOGLE_CHROMEEC_SPI_CHIP
depends on EC_GOOGLE_CHROMEEC_SPI
hex

View file

@ -18,6 +18,7 @@
*/
#include <console/console.h>
#include <delay.h>
#include "ec.h"
#include "ec_commands.h"
#include <spi-generic.h>
@ -50,6 +51,10 @@ static int crosec_spi_io(size_t req_size, size_t resp_size, void *context)
spi_claim_bus(slave);
/* Allow EC to ramp up clock after being awaken.
* See chrome-os-partner:32223 for more details. */
udelay(CONFIG_EC_GOOGLE_CHROMEEC_SPI_WAKEUP_DELAY_US);
if (spi_xfer(slave, req_buf, req_size, NULL, 0)) {
printk(BIOS_ERR, "%s: Failed to send request.\n", __func__);
spi_release_bus(slave);