forked from mirrors/linux
		
	 92ed1a76ca
			
		
	
	
		92ed1a76ca
		
	
	
	
	
		
			
			Add an i2c mux driver providing access to i2c bus segments using a hardware MUX sitting on a master bus and controlled through gpio pins. E.G. something like: ---------- ---------- Bus segment 1 - - - - - | | SCL/SDA | |-------------- | | | |------------| | | | | | Bus segment 2 | | | Linux | GPIO 1..N | MUX |--------------- Devices | |------------| | | | | | | | Bus segment M | | | |---------------| | ---------- ---------- - - - - - SCL/SDA of the master I2C bus is multiplexed to bus segment 1..M according to the settings of the GPIO pins 1..N. Signed-off-by: Peter Korsgaard <peter.korsgaard@barco.com> Signed-off-by: Jean Delvare <khali@linux-fr.org>
		
			
				
	
	
		
			38 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			38 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  * gpio-i2cmux interface to platform code
 | |
|  *
 | |
|  * Peter Korsgaard <peter.korsgaard@barco.com>
 | |
|  *
 | |
|  * This program is free software; you can redistribute it and/or modify
 | |
|  * it under the terms of the GNU General Public License version 2 as
 | |
|  * published by the Free Software Foundation.
 | |
|  */
 | |
| 
 | |
| #ifndef _LINUX_GPIO_I2CMUX_H
 | |
| #define _LINUX_GPIO_I2CMUX_H
 | |
| 
 | |
| /* MUX has no specific idle mode */
 | |
| #define GPIO_I2CMUX_NO_IDLE	((unsigned)-1)
 | |
| 
 | |
| /**
 | |
|  * struct gpio_i2cmux_platform_data - Platform-dependent data for gpio-i2cmux
 | |
|  * @parent: Parent I2C bus adapter number
 | |
|  * @base_nr: Base I2C bus number to number adapters from or zero for dynamic
 | |
|  * @values: Array of bitmasks of GPIO settings (low/high) for each
 | |
|  *	position
 | |
|  * @n_values: Number of multiplexer positions (busses to instantiate)
 | |
|  * @gpios: Array of GPIO numbers used to control MUX
 | |
|  * @n_gpios: Number of GPIOs used to control MUX
 | |
|  * @idle: Bitmask to write to MUX when idle or GPIO_I2CMUX_NO_IDLE if not used
 | |
|  */
 | |
| struct gpio_i2cmux_platform_data {
 | |
| 	int parent;
 | |
| 	int base_nr;
 | |
| 	const unsigned *values;
 | |
| 	int n_values;
 | |
| 	const unsigned *gpios;
 | |
| 	int n_gpios;
 | |
| 	unsigned idle;
 | |
| };
 | |
| 
 | |
| #endif /* _LINUX_GPIO_I2CMUX_H */
 |