2014-09-26 41 views
4

我開發了一個SPI平臺驅動程序,用於單個SPI設備。我們使用的SPI設備,可以在Device Tree.probe()函數中給出該配置,當驅動程序中的名稱匹配發生名稱匹配時,調用SPI平臺驅動程序和DT中的相同。我們在函數調用spi_register_driver()中註冊了SPI設備結構(struct spi_driver spidev_spi_driver)。如何使用單個SPI平臺驅動程序在Linux內核中處理兩個SPI器件?

請參考以下鏈接中的(靜態結構spi_driver spidev_spi_driver)。 鏈接:http://lxr.free-electrons.com/source/drivers/spi/spidev.c#L664

這裏Probe()是在此調用中註冊的一個重要方法。 調用探測函數時,內核在probe()函數中傳遞SPI設備的指針(例如struct spi_device * spi),該函數進一步用於SPI設備的讀寫操作。 以上所有過程對於單個SPI設備只發生一次。

現在我在這裏查詢,如果我想要使用我的微控制器中存在的多個SPI設備,例如imx6那麼我將如何處理這種情況? 在這種情況下,我將如何接收SPI設備指針? 探測功能是否會被調用兩次(bcoz這裏只有我從內核獲得SPI設備指針)? 我需要創造這樣的條目在spidev_dt_ids完成: http://lxr.free-electrons.com/source/drivers/spi/spidev.c#L657

回答

0

我還沒有工作的具體SPI器件,但我想我可能給你一些基本的想法。邏輯是,只要在設備 - >名稱和device_driver->名稱匹配時調用探測器。所以2個設備可以使用相同的驅動程序,但2個驅動程序不應該在同一個設備上。

爲了將2個設備配置爲相同的驅動程序,2設備將以相同的名稱註冊,因此將調用相同的探頭。但是,然後在探索中,你可以區分。您將可以訪問spi的設備結構,您可以使用它設置一個參數來區分和設置相關參數。

另一種方法就像使用i2c所使用的核心框架,其中通用功能函數由客戶端驅動程序在需要時製作和使用。

我希望這會有所幫助。