|
|
|
@ -36,6 +36,11 @@ DECLARE_GLOBAL_DATA_PTR; |
|
|
|
|
#define SLINK_CMD_ENB (1 << 31) |
|
|
|
|
#define SLINK_CMD_GO (1 << 30) |
|
|
|
|
#define SLINK_CMD_M_S (1 << 28) |
|
|
|
|
#define SLINK_CMD_IDLE_SCLK_DRIVE_LOW (0 << 24) |
|
|
|
|
#define SLINK_CMD_IDLE_SCLK_DRIVE_HIGH (1 << 24) |
|
|
|
|
#define SLINK_CMD_IDLE_SCLK_PULL_LOW (2 << 24) |
|
|
|
|
#define SLINK_CMD_IDLE_SCLK_PULL_HIGH (3 << 24) |
|
|
|
|
#define SLINK_CMD_IDLE_SCLK_MASK (3 << 24) |
|
|
|
|
#define SLINK_CMD_CK_SDA (1 << 21) |
|
|
|
|
#define SLINK_CMD_CS_POL (1 << 13) |
|
|
|
|
#define SLINK_CMD_CS_VAL (1 << 12) |
|
|
|
@ -331,6 +336,22 @@ static int tegra30_spi_set_speed(struct udevice *bus, uint speed) |
|
|
|
|
static int tegra30_spi_set_mode(struct udevice *bus, uint mode) |
|
|
|
|
{ |
|
|
|
|
struct tegra30_spi_priv *priv = dev_get_priv(bus); |
|
|
|
|
struct spi_regs *regs = priv->regs; |
|
|
|
|
u32 reg; |
|
|
|
|
|
|
|
|
|
reg = readl(®s->command); |
|
|
|
|
|
|
|
|
|
/* Set CPOL and CPHA */ |
|
|
|
|
reg &= ~(SLINK_CMD_IDLE_SCLK_MASK | SLINK_CMD_CK_SDA); |
|
|
|
|
if (mode & SPI_CPHA) |
|
|
|
|
reg |= SLINK_CMD_CK_SDA; |
|
|
|
|
|
|
|
|
|
if (mode & SPI_CPOL) |
|
|
|
|
reg |= SLINK_CMD_IDLE_SCLK_DRIVE_HIGH; |
|
|
|
|
else |
|
|
|
|
reg |= SLINK_CMD_IDLE_SCLK_DRIVE_LOW; |
|
|
|
|
|
|
|
|
|
writel(reg, ®s->command); |
|
|
|
|
|
|
|
|
|
priv->mode = mode; |
|
|
|
|
debug("%s: regs=%p, mode=%d\n", __func__, priv->regs, priv->mode); |
|
|
|
|