Best location for call to spi_register_board_info () on PPC (MPC5200)
Ben Warren
bwarren at qstreams.com
Thu Dec 14 08:18:31 EST 2006
Henk,
On Wed, 2006-12-13 at 21:59 +0100, Henk Stegeman wrote:
> I'm working on an SPI procol driver on the MPC52XX.
> I spend some time in trying to find the best location for calling
> spi_register_board_info () (which basically registers the relations
> between protocol drivers and the SPI chip selects).
>
> I wish to call this function from my copy of the
> arch/ppc/platforms/Lite5200.c file since these relations are
> board-specific, however I found that placing the call in any of these
> functions (eg. lite5200_setup_arch) results in an -ENOMEM from the
> spi_register_board_info () call.
>
> Now I'm calling spi_register_board_info () from the spi controller
> driver which is soo ugly.
>
> Thanks in advance,
Here's how I do it, in my board-specific /arch/powerpc/platforms/83xx
file. Somebody please comment if I'm doing it wrong:
struct spi_board_info qsPrism_spi_devices[2] =
{
{
.modalias = "SPI_SWITCH",
.bus_num = 0,
.chip_select = 0,
.max_speed_hz = 2000000,
},
{
.modalias = "SPI_SWITCH",
.bus_num = 0,
.chip_select = 1,
.max_speed_hz = 2000000,
},
};
static int __init qsPrism_spi_board_init(void)
{
return spi_register_board_info(qsPrism_spi_devices, 2);
}
arch_initcall(qsPrism_spi_board_init);
*********************
SPI_SWITCH is my protocol driver. The 'arch_initcall' adds this to a
list of functions that gets called at init time. There is a hierarchy
of these registrations that you can research, but 'arch' is somewhere in
the middle, IIRC, and is a point where memory should be available.
regards,
Ben
More information about the Linuxppc-embedded
mailing list