diff options
Diffstat (limited to 'drivers/spi/mxc_spi.c')
| -rw-r--r-- | drivers/spi/mxc_spi.c | 9 | 
1 files changed, 5 insertions, 4 deletions
| diff --git a/drivers/spi/mxc_spi.c b/drivers/spi/mxc_spi.c index 13bebe8ac..859c43fee 100644 --- a/drivers/spi/mxc_spi.c +++ b/drivers/spi/mxc_spi.c @@ -140,8 +140,8 @@ static s32 spi_cfg_mxc(struct mxc_spi_slave *mxcs, unsigned int cs,  	reg_ctrl = reg_read(®s->ctrl);  	/* Reset spi */ -	reg_write(®s->ctrl, 0); -	reg_write(®s->ctrl, (reg_ctrl | 0x1)); +	reg_write(®s->ctrl, (reg_ctrl & ~MXC_CSPICTRL_EN)); +	reg_write(®s->ctrl, (reg_ctrl | MXC_CSPICTRL_EN));  	/*  	 * The following computation is taken directly from Freescale's code. @@ -387,7 +387,7 @@ static int decode_cs(struct mxc_spi_slave *mxcs, unsigned int cs)  	if (cs > 3) {  		mxcs->gpio = cs >> 8;  		cs &= 3; -		ret = gpio_direction_output(mxcs->gpio, 0); +		ret = gpio_direction_output(mxcs->gpio, !(mxcs->ss_pol));  		if (ret) {  			printf("mxc_spi: cannot setup gpio %d\n", mxcs->gpio);  			return -EINVAL; @@ -414,6 +414,8 @@ struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs,  		return NULL;  	} +	mxcs->ss_pol = (mode & SPI_CS_HIGH) ? 1 : 0; +  	ret = decode_cs(mxcs, cs);  	if (ret < 0) {  		free(mxcs); @@ -425,7 +427,6 @@ struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs,  	mxcs->slave.bus = bus;  	mxcs->slave.cs = cs;  	mxcs->base = spi_bases[bus]; -	mxcs->ss_pol = (mode & SPI_CS_HIGH) ? 1 : 0;  	ret = spi_cfg_mxc(mxcs, cs, max_hz, mode);  	if (ret) { |