mirror of
https://github.com/u-boot/u-boot.git
synced 2025-04-23 05:08:24 +00:00
spi: mpc8xxx: Use IO accessors
Accesses to the register map are currently done by directly reading and writing the structure. Switch to the appropriate IO accessors instead. Signed-off-by: Mario Six <mario.six@gdsys.cc> Acked-by: Jagan Teki <jagan@amarulasolutions.com>
This commit is contained in:
parent
6ea9395bf7
commit
1a907e41dc
1 changed files with 19 additions and 19 deletions
|
@ -58,21 +58,21 @@ void spi_free_slave(struct spi_slave *slave)
|
||||||
|
|
||||||
void spi_init(void)
|
void spi_init(void)
|
||||||
{
|
{
|
||||||
volatile spi8xxx_t *spi = &((immap_t *) (CONFIG_SYS_IMMR))->spi;
|
spi8xxx_t *spi = &((immap_t *)(CONFIG_SYS_IMMR))->spi;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* SPI pins on the MPC83xx are not muxed, so all we do is initialize
|
* SPI pins on the MPC83xx are not muxed, so all we do is initialize
|
||||||
* some registers
|
* some registers
|
||||||
*/
|
*/
|
||||||
spi->mode = SPI_MODE_REV | SPI_MODE_MS | SPI_MODE_EN;
|
out_be32(&spi->mode, SPI_MODE_REV | SPI_MODE_MS | SPI_MODE_EN);
|
||||||
/* Use SYSCLK / 8 (16.67MHz typ.) */
|
/* Use SYSCLK / 8 (16.67MHz typ.) */
|
||||||
spi->mode = (spi->mode & 0xfff0ffff) | BIT(16);
|
clrsetbits_be32(&spi->mode, 0x000f0000, BIT(16));
|
||||||
/* Clear all SPI events */
|
/* Clear all SPI events */
|
||||||
spi->event = 0xffffffff;
|
setbits_be32(&spi->event, 0xffffffff);
|
||||||
/* Mask all SPI interrupts */
|
/* Mask all SPI interrupts */
|
||||||
spi->mask = 0x00000000;
|
clrbits_be32(&spi->mask, 0xffffffff);
|
||||||
/* LST bit doesn't do anything, so disregard */
|
/* LST bit doesn't do anything, so disregard */
|
||||||
spi->com = 0;
|
out_be32(&spi->com, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
int spi_claim_bus(struct spi_slave *slave)
|
int spi_claim_bus(struct spi_slave *slave)
|
||||||
|
@ -87,7 +87,7 @@ void spi_release_bus(struct spi_slave *slave)
|
||||||
int spi_xfer(struct spi_slave *slave, uint bitlen, const void *dout, void *din,
|
int spi_xfer(struct spi_slave *slave, uint bitlen, const void *dout, void *din,
|
||||||
ulong flags)
|
ulong flags)
|
||||||
{
|
{
|
||||||
volatile spi8xxx_t *spi = &((immap_t *) (CONFIG_SYS_IMMR))->spi;
|
spi8xxx_t *spi = &((immap_t *)(CONFIG_SYS_IMMR))->spi;
|
||||||
uint tmpdout, tmpdin, event;
|
uint tmpdout, tmpdin, event;
|
||||||
int num_blks = DIV_ROUND_UP(bitlen, 32);
|
int num_blks = DIV_ROUND_UP(bitlen, 32);
|
||||||
int tm, is_read = 0;
|
int tm, is_read = 0;
|
||||||
|
@ -100,7 +100,7 @@ int spi_xfer(struct spi_slave *slave, uint bitlen, const void *dout, void *din,
|
||||||
spi_cs_activate(slave);
|
spi_cs_activate(slave);
|
||||||
|
|
||||||
/* Clear all SPI events */
|
/* Clear all SPI events */
|
||||||
spi->event = 0xffffffff;
|
setbits_be32(&spi->event, 0xffffffff);
|
||||||
|
|
||||||
/* Handle data in 32-bit chunks */
|
/* Handle data in 32-bit chunks */
|
||||||
while (num_blks--) {
|
while (num_blks--) {
|
||||||
|
@ -118,26 +118,26 @@ int spi_xfer(struct spi_slave *slave, uint bitlen, const void *dout, void *din,
|
||||||
* len > 16 0
|
* len > 16 0
|
||||||
*/
|
*/
|
||||||
|
|
||||||
spi->mode &= ~SPI_MODE_EN;
|
clrbits_be32(&spi->mode, SPI_MODE_EN);
|
||||||
|
|
||||||
if (bitlen <= 16) {
|
if (bitlen <= 16) {
|
||||||
if (bitlen <= 4)
|
if (bitlen <= 4)
|
||||||
spi->mode = (spi->mode & 0xff0fffff) |
|
clrsetbits_be32(&spi->mode, 0x00f00000,
|
||||||
(3 << 20);
|
(3 << 20));
|
||||||
else
|
else
|
||||||
spi->mode = (spi->mode & 0xff0fffff) |
|
clrsetbits_be32(&spi->mode, 0x00f00000,
|
||||||
((bitlen - 1) << 20);
|
((bitlen - 1) << 20));
|
||||||
} else {
|
} else {
|
||||||
spi->mode = (spi->mode & 0xff0fffff);
|
clrbits_be32(&spi->mode, 0x00f00000);
|
||||||
/* Set up the next iteration if sending > 32 bits */
|
/* Set up the next iteration if sending > 32 bits */
|
||||||
bitlen -= 32;
|
bitlen -= 32;
|
||||||
dout += 4;
|
dout += 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
spi->mode |= SPI_MODE_EN;
|
setbits_be32(&spi->mode, SPI_MODE_EN);
|
||||||
|
|
||||||
/* Write the data out */
|
/* Write the data out */
|
||||||
spi->tx = tmpdout;
|
out_be32(&spi->tx, tmpdout);
|
||||||
|
|
||||||
debug("*** %s: ... %08x written\n", __func__, tmpdout);
|
debug("*** %s: ... %08x written\n", __func__, tmpdout);
|
||||||
|
|
||||||
|
@ -147,10 +147,10 @@ int spi_xfer(struct spi_slave *slave, uint bitlen, const void *dout, void *din,
|
||||||
* The NE event must be read and cleared first
|
* The NE event must be read and cleared first
|
||||||
*/
|
*/
|
||||||
for (tm = 0, is_read = 0; tm < SPI_TIMEOUT; ++tm) {
|
for (tm = 0, is_read = 0; tm < SPI_TIMEOUT; ++tm) {
|
||||||
event = spi->event;
|
event = in_be32(&spi->event);
|
||||||
if (event & SPI_EV_NE) {
|
if (event & SPI_EV_NE) {
|
||||||
tmpdin = spi->rx;
|
tmpdin = in_be32(&spi->rx);
|
||||||
spi->event |= SPI_EV_NE;
|
setbits_be32(&spi->event, SPI_EV_NE);
|
||||||
is_read = 1;
|
is_read = 1;
|
||||||
|
|
||||||
*(u32 *)din = (tmpdin << (32 - char_size));
|
*(u32 *)din = (tmpdin << (32 - char_size));
|
||||||
|
|
Loading…
Add table
Reference in a new issue