El problema del código que mencionas es que hace cambios en el driver SPI por lo cual habría que conocer exactamente como funciona el código, lo cual es complicado para la mayoría de mortales aquí presentes.
Otra opción es la que mencioné de activar slave selects adicionales que posee el hardware, y para lo cual tengo código, (sin testear). Ahí va:
6348
u32 val;
/* Enable Extra SPI CS */
/* GPIO 29 is SSx FIXME */
val = bcm_gpio_readl(GPIO_MODE_REG);
val |= GPIO_MODE_6348_G1_SPI_MASTER;
bcm_gpio_writel(val, GPIO_MODE_REG);
6358
u32 val;
/* Enable Overlay for SPI SS Pins */
val = bcm_gpio_readl(GPIO_MODE_REG);
val |= GPIO_MODE_6358_EXTRA_SPI_SS;
bcm_gpio_writel(val, GPIO_MODE_REG);
/* Enable SPI Slave Select as Output Pins */
/* GPIO 32 is SS2, GPIO 33 is SS3 */
val = bcm_gpio_readl(GPIO_CTL_HI_REG);
val |= 0x0003
bcm_gpio_writel(val, GPIO_CTL_HI_REG);
6368
u32 val;
/* Enable Extra SPI CS */
val = bcm_gpio_readl(GPIO_MODE_REG);
val |= (GPIO_MODE_6368_SPI_SSN2 | GPIO_MODE_6368_SPI_SSN3 | GPIO_MODE_6368_SPI_SSN4 | GPIO_MODE_6368_SPI_SSN5);
bcm_gpio_writel(val, GPIO_MODE_REG);
/* Enable SPI Slave Select as Output Pins */
/* GPIO 28 is SS2, GPIO 29 is SS3, GPIO 30 is SS4, GPIO 31 is SS5*/
val = bcm_gpio_readl(GPIO_CTL_HI_REG);
val |= (GPIO_MODE_6368_SPI_SSN2 | GPIO_MODE_6368_SPI_SSN3 | GPIO_MODE_6368_SPI_SSN4 | GPIO_MODE_6368_SPI_SSN5);
bcm_gpio_writel(val, GPIO_CTL_HI_REG);
Lo que hace es convertir ciertos gpios en slave selects reales, no emulados. Como se puede ver suelen ser gpios del 28 al 33, según de que SoC se trate.
Del bcm6328, no encontré nada todavía.
Y esto está basado en código de broadcom. El cual lo pongo por si alguien quiere compararlo al que he puesto para OpenWrt, o/y hacer alguna correccion.
6348
/* Enable Extra SPI CS */
GPIO->GPIOMode |= GROUP1_SPI_MASTER;
6358
if (GPIOOverlays & BP_OVERLAY_SPI_EXT_CS) {
/* Enable Overlay for SPI SS Pins */
GPIO->GPIOMode |= GPIO_MODE_SPI_SS_OVERLAY;
/* Enable SPI Slave Select as Output Pins */
/* GPIO 32 is SS2, GPIO 33 is SS3 */
GPIO->GPIODir_high |= 0x0003;
6368
if (GPIOOverlays & BP_OVERLAY_SPI_EXT_CS) {
/* Enable Overlay for SPI SS Pins */
GPIO->GPIOMode |= (GPIO_MODE_SPI_SSN2 | GPIO_MODE_SPI_SSN3);
/* Enable SPI Slave Select as Output Pins */
/* GPIO 28 is SS2, GPIO 29 is SS3 */
GPIO->GPIODir |= (GPIO_MODE_SPI_SSN2 | GPIO_MODE_SPI_SSN3);
}