diff options
Diffstat (limited to 'include/linux/gpio')
| -rw-r--r-- | include/linux/gpio/driver.h | 33 | 
1 files changed, 21 insertions, 12 deletions
| diff --git a/include/linux/gpio/driver.h b/include/linux/gpio/driver.h index 55e672592fa9..7258cd676df4 100644 --- a/include/linux/gpio/driver.h +++ b/include/linux/gpio/driver.h @@ -66,9 +66,10 @@ struct gpio_irq_chip {  	/**  	 * @lock_key:  	 * -	 * Per GPIO IRQ chip lockdep class. +	 * Per GPIO IRQ chip lockdep classes.  	 */  	struct lock_class_key *lock_key; +	struct lock_class_key *request_key;  	/**  	 * @parent_handler: @@ -323,7 +324,8 @@ extern const char *gpiochip_is_requested(struct gpio_chip *chip,  /* add/remove chips */  extern int gpiochip_add_data_with_key(struct gpio_chip *chip, void *data, -				      struct lock_class_key *lock_key); +				      struct lock_class_key *lock_key, +				      struct lock_class_key *request_key);  /**   * gpiochip_add_data() - register a gpio_chip @@ -350,11 +352,13 @@ extern int gpiochip_add_data_with_key(struct gpio_chip *chip, void *data,   */  #ifdef CONFIG_LOCKDEP  #define gpiochip_add_data(chip, data) ({		\ -		static struct lock_class_key key;	\ -		gpiochip_add_data_with_key(chip, data, &key);	\ +		static struct lock_class_key lock_key;	\ +		static struct lock_class_key request_key;	  \ +		gpiochip_add_data_with_key(chip, data, &lock_key, \ +					   &request_key);	  \  	})  #else -#define gpiochip_add_data(chip, data) gpiochip_add_data_with_key(chip, data, NULL) +#define gpiochip_add_data(chip, data) gpiochip_add_data_with_key(chip, data, NULL, NULL)  #endif  static inline int gpiochip_add(struct gpio_chip *chip) @@ -429,7 +433,8 @@ int gpiochip_irqchip_add_key(struct gpio_chip *gpiochip,  			     irq_flow_handler_t handler,  			     unsigned int type,  			     bool threaded, -			     struct lock_class_key *lock_key); +			     struct lock_class_key *lock_key, +			     struct lock_class_key *request_key);  #ifdef CONFIG_LOCKDEP @@ -445,10 +450,12 @@ static inline int gpiochip_irqchip_add(struct gpio_chip *gpiochip,  				       irq_flow_handler_t handler,  				       unsigned int type)  { -	static struct lock_class_key key; +	static struct lock_class_key lock_key; +	static struct lock_class_key request_key;  	return gpiochip_irqchip_add_key(gpiochip, irqchip, first_irq, -					handler, type, false, &key); +					handler, type, false, +					&lock_key, &request_key);  }  static inline int gpiochip_irqchip_add_nested(struct gpio_chip *gpiochip, @@ -458,10 +465,12 @@ static inline int gpiochip_irqchip_add_nested(struct gpio_chip *gpiochip,  			  unsigned int type)  { -	static struct lock_class_key key; +	static struct lock_class_key lock_key; +	static struct lock_class_key request_key;  	return gpiochip_irqchip_add_key(gpiochip, irqchip, first_irq, -					handler, type, true, &key); +					handler, type, true, +					&lock_key, &request_key);  }  #else  static inline int gpiochip_irqchip_add(struct gpio_chip *gpiochip, @@ -471,7 +480,7 @@ static inline int gpiochip_irqchip_add(struct gpio_chip *gpiochip,  				       unsigned int type)  {  	return gpiochip_irqchip_add_key(gpiochip, irqchip, first_irq, -					handler, type, false, NULL); +					handler, type, false, NULL, NULL);  }  static inline int gpiochip_irqchip_add_nested(struct gpio_chip *gpiochip, @@ -481,7 +490,7 @@ static inline int gpiochip_irqchip_add_nested(struct gpio_chip *gpiochip,  			  unsigned int type)  {  	return gpiochip_irqchip_add_key(gpiochip, irqchip, first_irq, -					handler, type, true, NULL); +					handler, type, true, NULL, NULL);  }  #endif /* CONFIG_LOCKDEP */ |