|
@@ -137,11 +137,15 @@ static s32 spi_cfg_mxc(struct mxc_spi_slave *mxcs, unsigned int cs,
|
|
|
return -1;
|
|
|
}
|
|
|
|
|
|
- /* Reset spi */
|
|
|
- reg_write(®s->ctrl, 0);
|
|
|
- reg_write(®s->ctrl, MXC_CSPICTRL_EN);
|
|
|
-
|
|
|
- reg_ctrl = reg_read(®s->ctrl);
|
|
|
+ /*
|
|
|
+ * Reset SPI and set all CSs to master mode, if toggling
|
|
|
+ * between slave and master mode we might see a glitch
|
|
|
+ * on the clock line
|
|
|
+ */
|
|
|
+ reg_ctrl = MXC_CSPICTRL_MODE_MASK;
|
|
|
+ reg_write(®s->ctrl, reg_ctrl);
|
|
|
+ reg_ctrl |= MXC_CSPICTRL_EN;
|
|
|
+ reg_write(®s->ctrl, reg_ctrl);
|
|
|
|
|
|
/*
|
|
|
* The following computation is taken directly from Freescale's code.
|
|
@@ -174,9 +178,6 @@ static s32 spi_cfg_mxc(struct mxc_spi_slave *mxcs, unsigned int cs,
|
|
|
reg_ctrl = (reg_ctrl & ~MXC_CSPICTRL_POSTDIV(0x0F)) |
|
|
|
MXC_CSPICTRL_POSTDIV(post_div);
|
|
|
|
|
|
- /* always set to master mode */
|
|
|
- reg_ctrl |= 1 << (cs + 4);
|
|
|
-
|
|
|
/* We need to disable SPI before changing registers */
|
|
|
reg_ctrl &= ~MXC_CSPICTRL_EN;
|
|
|
|