spi: Use spi_alloc_slave() in each SPI driver
Rather than each driver having its own way to allocate a SPI slave, use the new allocation function everywhere. This will make it easier to extend the interface without breaking drivers. Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
ba6c3ce9bd
commit
d3504fee73
@ -83,12 +83,10 @@ struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs,
|
||||
if (!spi_cs_is_valid(bus, cs))
|
||||
return NULL;
|
||||
|
||||
altspi = malloc(sizeof(*altspi));
|
||||
altspi = spi_alloc_slave(struct altera_spi_slave, bus, cs);
|
||||
if (!altspi)
|
||||
return NULL;
|
||||
|
||||
altspi->slave.bus = bus;
|
||||
altspi->slave.cs = cs;
|
||||
altspi->base = altera_spi_base_list[bus];
|
||||
debug("%s: bus:%i cs:%i base:%lx\n", __func__,
|
||||
bus, cs, altspi->base);
|
||||
|
@ -53,12 +53,10 @@ struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs,
|
||||
if (!spi_cs_is_valid(bus, cs))
|
||||
return NULL;
|
||||
|
||||
ds = malloc(sizeof(*ds));
|
||||
ds = spi_alloc_slave(struct andes_spi_slave, bus, cs);
|
||||
if (!ds)
|
||||
return NULL;
|
||||
|
||||
ds->slave.bus = bus;
|
||||
ds->slave.cs = cs;
|
||||
ds->regs = (struct andes_spi_regs *)CONFIG_SYS_SPI_BASE;
|
||||
|
||||
/*
|
||||
|
@ -120,12 +120,10 @@ struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs,
|
||||
{
|
||||
struct armd_spi_slave *pss;
|
||||
|
||||
pss = malloc(sizeof(*pss));
|
||||
pss = spi_alloc_slave(struct armd_spi_slave, bus, cs);
|
||||
if (!pss)
|
||||
return NULL;
|
||||
|
||||
pss->slave.bus = bus;
|
||||
pss->slave.cs = cs;
|
||||
pss->spi_reg = (struct ssp_reg *)SSP_REG_BASE(CONFIG_SYS_SSP_PORT);
|
||||
|
||||
pss->cr0 = SSCR0_MOTO | SSCR0_DATASIZE(DEFAULT_WORD_LEN) | SSCR0_SSE;
|
||||
|
@ -84,12 +84,10 @@ struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs,
|
||||
if (mode & SPI_CPOL)
|
||||
csrx |= ATMEL_SPI_CSRx_CPOL;
|
||||
|
||||
as = malloc(sizeof(struct atmel_spi_slave));
|
||||
as = spi_alloc_slave(struct atmel_spi_slave, bus, cs);
|
||||
if (!as)
|
||||
return NULL;
|
||||
|
||||
as->slave.bus = bus;
|
||||
as->slave.cs = cs;
|
||||
as->regs = regs;
|
||||
as->mr = ATMEL_SPI_MR_MSTR | ATMEL_SPI_MR_MODFDIS
|
||||
#if defined(CONFIG_AT91SAM9X5) || defined(CONFIG_AT91SAM9M10G45)
|
||||
|
@ -182,12 +182,10 @@ struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs,
|
||||
default: return NULL;
|
||||
}
|
||||
|
||||
bss = malloc(sizeof(*bss));
|
||||
bss = spi_alloc_slave(struct bfin_spi_slave, bus, cs);
|
||||
if (!bss)
|
||||
return NULL;
|
||||
|
||||
bss->slave.bus = bus;
|
||||
bss->slave.cs = cs;
|
||||
bss->mmr_base = (void *)mmr_base;
|
||||
bss->ctl = SPE | MSTR | TDBR_CORE;
|
||||
if (mode & SPI_CPHA) bss->ctl |= CPHA;
|
||||
|
@ -178,12 +178,10 @@ struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
bss = malloc(sizeof(*bss));
|
||||
bss = spi_alloc_slave(struct bfin_spi_slave, bus, cs);
|
||||
if (!bss)
|
||||
return NULL;
|
||||
|
||||
bss->slave.bus = bus;
|
||||
bss->slave.cs = cs;
|
||||
bss->regs = (struct bfin_spi_regs *)reg_base;
|
||||
bss->control = SPI_CTL_EN | SPI_CTL_MSTR;
|
||||
if (mode & SPI_CPHA)
|
||||
|
@ -120,13 +120,11 @@ struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs,
|
||||
if (!spi_cs_is_valid(bus, cs))
|
||||
return NULL;
|
||||
|
||||
dev = malloc(sizeof(struct cf_qspi_slave));
|
||||
dev = spi_alloc_slave(struct cf_qspi_slave, bus, cs);
|
||||
if (!dev)
|
||||
return NULL;
|
||||
|
||||
/* Initialize to known value */
|
||||
dev->slave.bus = bus;
|
||||
dev->slave.cs = cs;
|
||||
dev->regs = (qspi_t *)MMAP_QSPI;
|
||||
dev->qmr = 0;
|
||||
dev->qwr = 0;
|
||||
|
@ -330,12 +330,10 @@ struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs,
|
||||
if (!spi_cs_is_valid(bus, cs))
|
||||
return NULL;
|
||||
|
||||
cfslave = malloc(sizeof(struct cf_spi_slave));
|
||||
cfslave = spi_alloc_slave(struct cf_spi_slave, bus, cs);
|
||||
if (!cfslave)
|
||||
return NULL;
|
||||
|
||||
cfslave->slave.bus = bus;
|
||||
cfslave->slave.cs = cs;
|
||||
cfslave->baudrate = max_hz;
|
||||
|
||||
/* specific setup */
|
||||
|
@ -44,12 +44,10 @@ struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs,
|
||||
if (!spi_cs_is_valid(bus, cs))
|
||||
return NULL;
|
||||
|
||||
ds = malloc(sizeof(*ds));
|
||||
ds = spi_alloc_slave(struct davinci_spi_slave, bus, cs);
|
||||
if (!ds)
|
||||
return NULL;
|
||||
|
||||
ds->slave.bus = bus;
|
||||
ds->slave.cs = cs;
|
||||
ds->regs = (struct davinci_spi_regs *)CONFIG_SYS_SPI_BASE;
|
||||
ds->freq = max_hz;
|
||||
|
||||
|
@ -89,15 +89,13 @@ struct spi_slave *spi_setup_slave(unsigned int busnum, unsigned int cs,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
spi_slave = malloc(sizeof(*spi_slave));
|
||||
spi_slave = spi_alloc_slave(struct exynos_spi_slave, busnum, cs);
|
||||
if (!spi_slave) {
|
||||
debug("%s: Could not allocate spi_slave\n", __func__);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
bus = &spi_bus[busnum];
|
||||
spi_slave->slave.bus = busnum;
|
||||
spi_slave->slave.cs = cs;
|
||||
spi_slave->regs = bus->regs;
|
||||
spi_slave->mode = mode;
|
||||
spi_slave->periph_id = bus->periph_id;
|
||||
|
@ -79,12 +79,10 @@ struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs,
|
||||
if (!spi_cs_is_valid(bus, cs))
|
||||
return NULL;
|
||||
|
||||
fsl = malloc(sizeof(struct fsl_spi_slave));
|
||||
fsl = spi_alloc_slave(struct fsl_spi_slave, bus, cs);
|
||||
if (!fsl)
|
||||
return NULL;
|
||||
|
||||
fsl->slave.bus = bus;
|
||||
fsl->slave.cs = cs;
|
||||
fsl->mode = mode;
|
||||
fsl->max_transfer_length = ESPI_MAX_DATA_TRANSFER_LEN;
|
||||
|
||||
|
@ -49,13 +49,10 @@ struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs,
|
||||
if (!spi_cs_is_valid(bus, cs))
|
||||
return NULL;
|
||||
|
||||
slave = malloc(sizeof(struct spi_slave));
|
||||
slave = spi_alloc_slave_base(bus, cs);
|
||||
if (!slave)
|
||||
return NULL;
|
||||
|
||||
slave->bus = bus;
|
||||
slave->cs = cs;
|
||||
|
||||
writel(~KWSPI_CSN_ACT | KWSPI_SMEMRDY, &spireg->ctrl);
|
||||
|
||||
/* calculate spi clock prescaller using max_hz */
|
||||
|
@ -48,13 +48,10 @@ struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs,
|
||||
{
|
||||
struct spi_slave *slave;
|
||||
|
||||
slave = malloc(sizeof(struct spi_slave));
|
||||
slave = spi_alloc_slave_base(bus, cs);
|
||||
if (!slave)
|
||||
return NULL;
|
||||
|
||||
slave->bus = bus;
|
||||
slave->cs = cs;
|
||||
|
||||
return slave;
|
||||
}
|
||||
|
||||
|
@ -45,13 +45,10 @@ struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs,
|
||||
if (!spi_cs_is_valid(bus, cs))
|
||||
return NULL;
|
||||
|
||||
slave = malloc(sizeof(struct spi_slave));
|
||||
slave = spi_alloc_slave_base(bus, cs);
|
||||
if (!slave)
|
||||
return NULL;
|
||||
|
||||
slave->bus = bus;
|
||||
slave->cs = cs;
|
||||
|
||||
/*
|
||||
* TODO: Some of the code in spi_init() should probably move
|
||||
* here, or into spi_claim_bus() below.
|
||||
|
@ -408,7 +408,7 @@ struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs,
|
||||
if (bus >= ARRAY_SIZE(spi_bases))
|
||||
return NULL;
|
||||
|
||||
mxcs = calloc(sizeof(struct mxc_spi_slave), 1);
|
||||
mxcs = spi_alloc_slave(struct mxc_spi_slave, bus, cs);
|
||||
if (!mxcs) {
|
||||
puts("mxc_spi: SPI Slave not allocated !\n");
|
||||
return NULL;
|
||||
@ -424,8 +424,6 @@ struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs,
|
||||
|
||||
cs = ret;
|
||||
|
||||
mxcs->slave.bus = bus;
|
||||
mxcs->slave.cs = cs;
|
||||
mxcs->base = spi_bases[bus];
|
||||
|
||||
ret = spi_cfg_mxc(mxcs, cs, max_hz, mode);
|
||||
|
@ -77,15 +77,13 @@ struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
mxs_slave = calloc(sizeof(struct mxs_spi_slave), 1);
|
||||
mxs_slave = spi_alloc_slave(struct mxs_spi_slave, bus, cs);
|
||||
if (!mxs_slave)
|
||||
return NULL;
|
||||
|
||||
if (mxs_dma_init_channel(MXS_DMA_CHANNEL_AHB_APBH_SSP0 + bus))
|
||||
goto err_init;
|
||||
|
||||
mxs_slave->slave.bus = bus;
|
||||
mxs_slave->slave.cs = cs;
|
||||
mxs_slave->max_khz = max_hz / 1000;
|
||||
mxs_slave->mode = mode;
|
||||
mxs_slave->regs = mxs_ssp_regs_by_bus(bus);
|
||||
|
@ -90,13 +90,10 @@ struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs,
|
||||
if (!spi_cs_is_valid(bus, cs) || gpio_request(cs, "tiny_spi"))
|
||||
return NULL;
|
||||
|
||||
tiny_spi = malloc(sizeof(*tiny_spi));
|
||||
tiny_spi = spi_alloc_slave(struct tiny_spi_slave, bus, cs);
|
||||
if (!tiny_spi)
|
||||
return NULL;
|
||||
memset(tiny_spi, 0, sizeof(*tiny_spi));
|
||||
|
||||
tiny_spi->slave.bus = bus;
|
||||
tiny_spi->slave.cs = cs;
|
||||
tiny_spi->host = &tiny_spi_host_list[bus];
|
||||
tiny_spi->mode = mode & (SPI_CPOL | SPI_CPHA);
|
||||
tiny_spi->flg = mode & SPI_CS_HIGH ? 1 : 0;
|
||||
|
@ -80,12 +80,7 @@ struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs,
|
||||
unsigned int max_hz, unsigned int mode)
|
||||
{
|
||||
struct omap3_spi_slave *ds;
|
||||
|
||||
ds = malloc(sizeof(struct omap3_spi_slave));
|
||||
if (!ds) {
|
||||
printf("SPI error: malloc of SPI structure failed\n");
|
||||
return NULL;
|
||||
}
|
||||
struct mcspi *regs;
|
||||
|
||||
/*
|
||||
* OMAP3 McSPI (MultiChannel SPI) has 4 busses (modules)
|
||||
@ -98,21 +93,21 @@ struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs,
|
||||
|
||||
switch (bus) {
|
||||
case 0:
|
||||
ds->regs = (struct mcspi *)OMAP3_MCSPI1_BASE;
|
||||
regs = (struct mcspi *)OMAP3_MCSPI1_BASE;
|
||||
break;
|
||||
#ifdef OMAP3_MCSPI2_BASE
|
||||
case 1:
|
||||
ds->regs = (struct mcspi *)OMAP3_MCSPI2_BASE;
|
||||
regs = (struct mcspi *)OMAP3_MCSPI2_BASE;
|
||||
break;
|
||||
#endif
|
||||
#ifdef OMAP3_MCSPI3_BASE
|
||||
case 2:
|
||||
ds->regs = (struct mcspi *)OMAP3_MCSPI3_BASE;
|
||||
regs = (struct mcspi *)OMAP3_MCSPI3_BASE;
|
||||
break;
|
||||
#endif
|
||||
#ifdef OMAP3_MCSPI4_BASE
|
||||
case 3:
|
||||
ds->regs = (struct mcspi *)OMAP3_MCSPI4_BASE;
|
||||
regs = (struct mcspi *)OMAP3_MCSPI4_BASE;
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
@ -120,7 +115,6 @@ struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs,
|
||||
Supported busses 0 - 3\n", bus);
|
||||
return NULL;
|
||||
}
|
||||
ds->slave.bus = bus;
|
||||
|
||||
if (((bus == 0) && (cs > 3)) ||
|
||||
((bus == 1) && (cs > 1)) ||
|
||||
@ -130,19 +124,26 @@ struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs,
|
||||
on bus %i\n", cs, bus);
|
||||
return NULL;
|
||||
}
|
||||
ds->slave.cs = cs;
|
||||
|
||||
if (max_hz > OMAP3_MCSPI_MAX_FREQ) {
|
||||
printf("SPI error: unsupported frequency %i Hz. \
|
||||
Max frequency is 48 Mhz\n", max_hz);
|
||||
return NULL;
|
||||
}
|
||||
ds->freq = max_hz;
|
||||
|
||||
if (mode > SPI_MODE_3) {
|
||||
printf("SPI error: unsupported SPI mode %i\n", mode);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
ds = spi_alloc_slave(struct omap3_spi_slave, bus, cs);
|
||||
if (!ds) {
|
||||
printf("SPI error: malloc of SPI structure failed\n");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
ds->regs = regs;
|
||||
ds->freq = max_hz;
|
||||
ds->mode = mode;
|
||||
|
||||
return &ds->slave;
|
||||
|
@ -103,12 +103,10 @@ struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs,
|
||||
if (!spi_cs_is_valid(bus, cs))
|
||||
return NULL;
|
||||
|
||||
ss = malloc(sizeof(struct spi_slave));
|
||||
ss = spi_alloc_slave(struct sh_spi, bus, cs);
|
||||
if (!ss)
|
||||
return NULL;
|
||||
|
||||
ss->slave.bus = bus;
|
||||
ss->slave.cs = cs;
|
||||
ss->regs = (struct sh_spi_regs *)CONFIG_SH_SPI_BASE;
|
||||
|
||||
/* SPI sycle stop */
|
||||
|
@ -73,12 +73,10 @@ struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs,
|
||||
if (!spi_cs_is_valid(bus, cs))
|
||||
return NULL;
|
||||
|
||||
ss = malloc(sizeof(struct soft_spi_slave));
|
||||
ss = spi_alloc_slave(struct soft_spi_slave, bus, cs);
|
||||
if (!ss)
|
||||
return NULL;
|
||||
|
||||
ss->slave.bus = bus;
|
||||
ss->slave.cs = cs;
|
||||
ss->mode = mode;
|
||||
|
||||
/* TODO: Use max_hz to limit the SCK rate */
|
||||
|
@ -81,13 +81,11 @@ struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
spi = malloc(sizeof(struct tegra_spi_slave));
|
||||
spi = spi_alloc_slave(struct tegra_spi_slave, bus, cs);
|
||||
if (!spi) {
|
||||
printf("SPI error: malloc of SPI structure failed\n");
|
||||
return NULL;
|
||||
}
|
||||
spi->slave.bus = bus;
|
||||
spi->slave.cs = cs;
|
||||
spi->ctrl = &spi_ctrls[bus];
|
||||
if (!spi->ctrl) {
|
||||
printf("SPI error: could not find controller for bus %d\n",
|
||||
|
@ -81,13 +81,11 @@ struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
spi = malloc(sizeof(struct tegra_spi_slave));
|
||||
spi = spi_alloc_slave(struct tegra_spi_slave, bus, cs);
|
||||
if (!spi) {
|
||||
printf("SPI error: malloc of SPI structure failed\n");
|
||||
return NULL;
|
||||
}
|
||||
spi->slave.bus = bus;
|
||||
spi->slave.cs = cs;
|
||||
#ifdef CONFIG_OF_CONTROL
|
||||
int node = fdtdec_next_compatible(gd->fdt_blob, 0,
|
||||
COMPAT_NVIDIA_TEGRA20_SFLASH);
|
||||
|
@ -85,14 +85,12 @@ struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
xilspi = malloc(sizeof(*xilspi));
|
||||
xilspi = spi_alloc_slave(struct xilinx_spi_slave, bus, cs);
|
||||
if (!xilspi) {
|
||||
printf("XILSPI error: %s: malloc of SPI structure failed\n",
|
||||
__func__);
|
||||
return NULL;
|
||||
}
|
||||
xilspi->slave.bus = bus;
|
||||
xilspi->slave.cs = cs;
|
||||
xilspi->regs = (struct xilinx_spi_reg *)xilinx_spi_base_list[bus];
|
||||
xilspi->freq = max_hz;
|
||||
xilspi->mode = mode;
|
||||
|
Loading…
Reference in New Issue
Block a user