Преглед на файлове

[PATCH] SPI: infrastructure to initialize spi_device.mode early

This patch adds earlier initialization of spi_device.mode, as needed
on boards using nondefault chipselect polarity.  An example would be
ones using the RS5C348 RTC without an external signal inverter between
the RTC chipselect and the SPI controller.

Without this mechanism, the first setup() call for that chip would
wrongly enable chips, corrupting transfers to/from other chips sharing
that SPI bus.

Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
David Brownell преди 19 години
родител
ревизия
980a01c9bf
променени са 2 файла, в които са добавени 6 реда и са изтрити 1 реда
  1. 1 0
      drivers/spi/spi.c
  2. 5 1
      include/linux/spi/spi.h

+ 1 - 0
drivers/spi/spi.c

@@ -210,6 +210,7 @@ spi_new_device(struct spi_master *master, struct spi_board_info *chip)
 	proxy->master = master;
 	proxy->master = master;
 	proxy->chip_select = chip->chip_select;
 	proxy->chip_select = chip->chip_select;
 	proxy->max_speed_hz = chip->max_speed_hz;
 	proxy->max_speed_hz = chip->max_speed_hz;
+	proxy->mode = chip->mode;
 	proxy->irq = chip->irq;
 	proxy->irq = chip->irq;
 	proxy->modalias = chip->modalias;
 	proxy->modalias = chip->modalias;
 
 

+ 5 - 1
include/linux/spi/spi.h

@@ -642,10 +642,14 @@ struct spi_board_info {
 	u16		bus_num;
 	u16		bus_num;
 	u16		chip_select;
 	u16		chip_select;
 
 
+	/* mode becomes spi_device.mode, and is essential for chips
+	 * where the default of SPI_CS_HIGH = 0 is wrong.
+	 */
+	u8		mode;
+
 	/* ... may need additional spi_device chip config data here.
 	/* ... may need additional spi_device chip config data here.
 	 * avoid stuff protocol drivers can set; but include stuff
 	 * avoid stuff protocol drivers can set; but include stuff
 	 * needed to behave without being bound to a driver:
 	 * needed to behave without being bound to a driver:
-	 *  - chipselect polarity
 	 *  - quirks like clock rate mattering when not selected
 	 *  - quirks like clock rate mattering when not selected
 	 */
 	 */
 };
 };