The gpios on the max730x chips have support for internal pullups while in
input mode.
This patch adds support for configuring these pullups via platform data.
A new member ("input_pullup_active") to the platform data struct is
introduced.  A set bit in this variable activates the pullups while the
respective port is in input mode.  This is a compatible enhancement since
unset bits lead to disables pullups which was the default in the original
driver.
_Note_: the 4 lowest bits in "input_pullup_active" are unused because the
first 4 ports of the controller are not used, too.
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
Reviewed-by: Wolfram Sang <w.sang@pengutronix.de>
Cc: David Brownell <david-b@pacbell.net>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
		
	
			
		
			
				
	
	
		
			35 lines
		
	
	
	
		
			900 B
			
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			35 lines
		
	
	
	
		
			900 B
			
		
	
	
	
		
			C
		
	
	
	
	
	
#ifndef LINUX_SPI_MAX7301_H
 | 
						|
#define LINUX_SPI_MAX7301_H
 | 
						|
 | 
						|
#include <linux/gpio.h>
 | 
						|
 | 
						|
/*
 | 
						|
 * Some registers must be read back to modify.
 | 
						|
 * To save time we cache them here in memory
 | 
						|
 */
 | 
						|
struct max7301 {
 | 
						|
	struct mutex	lock;
 | 
						|
	u8		port_config[8];	/* field 0 is unused */
 | 
						|
	u32		out_level;	/* cached output levels */
 | 
						|
	u32		input_pullup_active;
 | 
						|
	struct gpio_chip chip;
 | 
						|
	struct device *dev;
 | 
						|
	int (*write)(struct device *dev, unsigned int reg, unsigned int val);
 | 
						|
	int (*read)(struct device *dev, unsigned int reg);
 | 
						|
};
 | 
						|
 | 
						|
struct max7301_platform_data {
 | 
						|
	/* number assigned to the first GPIO */
 | 
						|
	unsigned	base;
 | 
						|
	/*
 | 
						|
	 * bitmask controlling the pullup configuration,
 | 
						|
	 *
 | 
						|
	 * _note_ the 4 lowest bits are unused, because the first 4
 | 
						|
	 * ports of the controller are not used, too.
 | 
						|
	 */
 | 
						|
	u32		input_pullup_active;
 | 
						|
};
 | 
						|
 | 
						|
extern int __max730x_remove(struct device *dev);
 | 
						|
extern int __max730x_probe(struct max7301 *ts);
 | 
						|
#endif
 |