spi: Pass pointer to spi_slave structure in spi_setup_slave
For spi_setup_slave, instead of making the platform driver return a pointer to spi_slave structure, pass in a structure pointer that can be filled in by the driver as required. This removes the need for platform drivers to maintain a slave structure in data/CAR section. BUG=chrome-os-partner:59832 BRANCH=None TEST=Compiles successfully Change-Id: Ia15a4f88ef4dcfdf616bb1c22261e7cb642a7573 Signed-off-by: Furquan Shaikh <furquan@chromium.org> Reviewed-on: https://review.coreboot.org/17683 Tested-by: build bot (Jenkins) Reviewed-by: Aaron Durbin <adurbin@chromium.org>
This commit is contained in:
committed by
Furquan Shaikh
parent
0dba0254ea
commit
36b81af9e8
@@ -499,7 +499,26 @@ void spi_init()
|
||||
memset(spi_slave_pool, 0, sizeof(spi_slave_pool));
|
||||
}
|
||||
|
||||
struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs)
|
||||
static struct ipq_spi_slave *to_ipq_spi(const struct spi_slave *slave)
|
||||
{
|
||||
struct ipq_spi_slave *ds;
|
||||
size_t i;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(spi_slave_pool); i++) {
|
||||
ds = spi_slave_pool + i;
|
||||
|
||||
if (!ds->allocated)
|
||||
continue;
|
||||
|
||||
if ((ds->slave.bus == slave->bus) &&
|
||||
(ds->slave.cs == slave->cs))
|
||||
return ds;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
int spi_setup_slave(unsigned int bus, unsigned int cs, struct spi_slave *slave)
|
||||
{
|
||||
struct ipq_spi_slave *ds = NULL;
|
||||
int i;
|
||||
@@ -521,9 +540,10 @@ struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs)
|
||||
if (spi_slave_pool[i].allocated)
|
||||
continue;
|
||||
ds = spi_slave_pool + i;
|
||||
ds->slave.bus = bus;
|
||||
ds->slave.cs = cs;
|
||||
ds->regs = &spi_reg[bus];
|
||||
|
||||
ds->slave.bus = slave->bus = bus;
|
||||
ds->slave.cs = slave->cs = cs;
|
||||
ds->regs = &spi_reg[bus];
|
||||
|
||||
/*
|
||||
* TODO(vbendeb):
|
||||
@@ -534,11 +554,11 @@ struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs)
|
||||
ds->mode = GSBI_SPI_MODE_0;
|
||||
ds->allocated = 1;
|
||||
|
||||
return &ds->slave;
|
||||
return 0;
|
||||
}
|
||||
|
||||
printk(BIOS_ERR, "SPI error: all %d pools busy\n", i);
|
||||
return NULL;
|
||||
return -1;
|
||||
}
|
||||
|
||||
/*
|
||||
|
Reference in New Issue
Block a user