Commit 14e26bcf authored by Marek Vasut's avatar Marek Vasut Committed by Stefano Babic

mxs: ssp: Pull out the SSP bus to regs conversion

Create function which converts SSP bus number to SSP register pointer.
This functionality is reimplemented multiple times in the code, thus
make one common implementation. Moreover, make it a switch(), since the
SSP ports are not mapped in such nice linear fashion on MX23, therefore
having it a switch will simplify things there.
Signed-off-by: default avatarMarek Vasut <marex@denx.de>
Cc: Andy Fleming <afleming@freescale.com>
Cc: Fabio Estevam <fabio.estevam@freescale.com>
Cc: Stefano Babic <sbabic@denx.de>
parent 59b6defa
......@@ -278,7 +278,7 @@ void mx28_set_ssp_busclock(unsigned int bus, uint32_t freq)
uint32_t reg;
uint32_t divide, rate, tgtclk;
ssp_regs = (struct mxs_ssp_regs *)(MXS_SSP0_BASE + (bus * 0x2000));
ssp_regs = mxs_ssp_regs_by_bus(bus);
/*
* SSP bit rate = SSPCLK / (CLOCK_DIVIDE * (1 + CLOCK_RATE)),
......
......@@ -50,6 +50,22 @@ struct mxs_ssp_regs {
mxs_reg_32(hw_ssp_debug)
mxs_reg_32(hw_ssp_version)
};
static inline struct mxs_ssp_regs *mxs_ssp_regs_by_bus(unsigned int port)
{
switch (port) {
case 0:
return (struct mxs_ssp_regs *)MXS_SSP0_BASE;
case 1:
return (struct mxs_ssp_regs *)MXS_SSP1_BASE;
case 2:
return (struct mxs_ssp_regs *)MXS_SSP2_BASE;
case 3:
return (struct mxs_ssp_regs *)MXS_SSP3_BASE;
default:
return NULL;
}
}
#endif
#define SSP_CTRL0_SFTRST (1 << 31)
......
......@@ -380,20 +380,7 @@ int mxsmmc_initialize(bd_t *bis, int id, int (*wp)(int))
priv->mmc_is_wp = wp;
priv->id = id;
switch (id) {
case 0:
priv->regs = (struct mxs_ssp_regs *)MXS_SSP0_BASE;
break;
case 1:
priv->regs = (struct mxs_ssp_regs *)MXS_SSP1_BASE;
break;
case 2:
priv->regs = (struct mxs_ssp_regs *)MXS_SSP2_BASE;
break;
case 3:
priv->regs = (struct mxs_ssp_regs *)MXS_SSP3_BASE;
break;
}
priv->regs = mxs_ssp_regs_by_bus(id);
sprintf(mmc->name, "MXS MMC");
mmc->send_cmd = mxsmmc_send_cmd;
......
......@@ -80,7 +80,6 @@ struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs,
unsigned int max_hz, unsigned int mode)
{
struct mxs_spi_slave *mxs_slave;
uint32_t addr;
struct mxs_ssp_regs *ssp_regs;
int reg;
......@@ -96,13 +95,11 @@ struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs,
if (mxs_dma_init_channel(bus))
goto err_init;
addr = MXS_SSP0_BASE + (bus * MXS_SPI_PORT_OFFSET);
mxs_slave->slave.bus = bus;
mxs_slave->slave.cs = cs;
mxs_slave->max_khz = max_hz / 1000;
mxs_slave->mode = mode;
mxs_slave->regs = (struct mxs_ssp_regs *)addr;
mxs_slave->regs = mxs_ssp_regs_by_bus(bus);
ssp_regs = mxs_slave->regs;
reg = readl(&ssp_regs->hw_ssp_ctrl0);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment