|
@@ -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;
|