diff options
Diffstat (limited to 'cpu/mcf5227x/cpu_init.c')
| -rw-r--r-- | cpu/mcf5227x/cpu_init.c | 53 | 
1 files changed, 53 insertions, 0 deletions
| diff --git a/cpu/mcf5227x/cpu_init.c b/cpu/mcf5227x/cpu_init.c index 8945ef316..d8bcf375c 100644 --- a/cpu/mcf5227x/cpu_init.c +++ b/cpu/mcf5227x/cpu_init.c @@ -152,3 +152,56 @@ void uart_port_conf(void)  		break;  	}  } + +#ifdef CONFIG_CF_DSPI +void cfspi_port_conf(void) +{ +	volatile gpio_t *gpio = (gpio_t *) MMAP_GPIO; + +	gpio->par_dspi = +	    GPIO_PAR_DSPI_SIN_SIN | GPIO_PAR_DSPI_SOUT_SOUT | +	    GPIO_PAR_DSPI_SCK_SCK; +} + +int cfspi_claim_bus(uint bus, uint cs) +{ +	volatile dspi_t *dspi = (dspi_t *) MMAP_DSPI; +	volatile gpio_t *gpio = (gpio_t *) MMAP_GPIO; + +	if ((dspi->sr & DSPI_SR_TXRXS) != DSPI_SR_TXRXS) +		return -1; + +	/* Clear FIFO and resume transfer */ +	dspi->mcr &= ~(DSPI_MCR_CTXF | DSPI_MCR_CRXF); + +	switch (cs) { +	case 0: +		gpio->par_dspi &= ~GPIO_PAR_DSPI_PCS0_MASK; +		gpio->par_dspi |= GPIO_PAR_DSPI_PCS0_PCS0; +		break; +	case 2: +		gpio->par_timer &= GPIO_PAR_TIMER_T2IN_MASK; +		gpio->par_timer |= GPIO_PAR_TIMER_T2IN_DSPIPCS2; +		break; +	} + +	return 0; +} + +void cfspi_release_bus(uint bus, uint cs) +{ +	volatile dspi_t *dspi = (dspi_t *) MMAP_DSPI; +	volatile gpio_t *gpio = (gpio_t *) MMAP_GPIO; + +	dspi->mcr &= ~(DSPI_MCR_CTXF | DSPI_MCR_CRXF);	/* Clear FIFO */ + +	switch (cs) { +	case 0: +		gpio->par_dspi &= ~GPIO_PAR_DSPI_PCS0_PCS0; +		break; +	case 2: +		gpio->par_timer &= GPIO_PAR_TIMER_T2IN_MASK; +		break; +	} +} +#endif |