爲BeagleBone 添加SPI支持

    Linux下的SPI驅動總的來講分紅兩大部分,一部分與SPI控制器相關,這種東西通常是不須要咱們這種芯片使用者來編寫的;而另外一部分與使用SPI總線接入的設備相關,這些東西就要咱們本身動手了。時間有限,今天就先簡單說說怎樣爲BeagleBone平臺添加SPI支持。
    首先,我是用的是BuildRoot搭建的整個開發環境,而BuildRoot中使用的TI提供的LinuxPSP(板級支持包啦)。像掛接在SPI總線上的東西,均可以算是Hard-wired的,是故在系統初始化的時候一併弄好,而且再也不變更就顯得很合理了……好吧,至少TI與寫SPI驅動的認識這麼認爲的,因此這裏咱們若是想要添加新的SPI設備只能修改內核代碼!其實不是很難……
    根據PSP文檔,修改"board-am335xevm.c"文件。首先,固然要找到板子的初始化代碼,恩,根據系統啓動時的打印信息發現會調用"setup_beaglebone"函數,其中很重要的配置項就是beaglebone_dev_cfg 數組,其是類型爲struct evm_dev_cfg 的數據結構,定義了一系列初始化函數。恩,好吧,咱們就把SPI相關的部分加上。修改beaglebone_dev_cfg爲: 數組

/* Beaglebone Rev A3 and after */
static struct evm_dev_cfg beaglebone_dev_cfg[] = {
	{tps65217_init,	DEV_ON_BASEBOARD, PROFILE_NONE},
	{mii1_init,	DEV_ON_BASEBOARD, PROFILE_NONE},
	{usb0_init,	DEV_ON_BASEBOARD, PROFILE_NONE},
	{usb1_init,	DEV_ON_BASEBOARD, PROFILE_NONE},
	{i2c2_init,	DEV_ON_BASEBOARD, PROFILE_NONE},
	{mmc0_init,     DEV_ON_BASEBOARD, PROFILE_NONE},
	{boneleds_init,	DEV_ON_BASEBOARD, PROFILE_ALL},
	{bonew1_gpio_init, DEV_ON_BASEBOARD, PROFILE_ALL},
        {beaglebone_spi1_init,  DEV_ON_BASEBOARD, PROFILE_NONE}, // ADD Support for spi device
	{NULL, 0, 0},
};
其中咱們將SPI初始化的放在最後,避免其餘初始化代碼的影響。其中"beaglebone_spi1_init"代碼以下:

/* setup beaglebone spi1 */
static void beaglebone_spi1_init(int evm_id, int profile) {
	setup_pin_mux(spi1_pin_mux);
	spi_register_board_info(beaglebone_spi1_slave_info,
			ARRAY_SIZE(beaglebone_spi1_slave_info));
	return;
}
beaglebone_spi1_slave_info能夠參考am33xx_spi1_slave_info來改寫。這些都弄完了,好了從新編譯內核,替換原先的內核,OK。到/sys/bus/spi下查看一下,devices目錄下應該有些東西。在本身寫一個spi_driver註冊一下,恩,差很少就能夠用了。具體的SPI驅動能夠參考網上的文章,或是我轉載的一篇。
相關文章
相關標籤/搜索