@@ -227,6 +227,27 @@ static void gpio_sim_free(struct gpio_chip *gc, unsigned int offset)
227
227
}
228
228
}
229
229
230
+ static int gpio_sim_irq_requested (struct irq_domain * domain ,
231
+ irq_hw_number_t hwirq , void * data )
232
+ {
233
+ struct gpio_sim_chip * chip = data ;
234
+
235
+ return gpiochip_lock_as_irq (& chip -> gc , hwirq );
236
+ }
237
+
238
+ static void gpio_sim_irq_released (struct irq_domain * domain ,
239
+ irq_hw_number_t hwirq , void * data )
240
+ {
241
+ struct gpio_sim_chip * chip = data ;
242
+
243
+ gpiochip_unlock_as_irq (& chip -> gc , hwirq );
244
+ }
245
+
246
+ static const struct irq_sim_ops gpio_sim_irq_sim_ops = {
247
+ .irq_sim_irq_requested = gpio_sim_irq_requested ,
248
+ .irq_sim_irq_released = gpio_sim_irq_released ,
249
+ };
250
+
230
251
static void gpio_sim_dbg_show (struct seq_file * seq , struct gpio_chip * gc )
231
252
{
232
253
struct gpio_sim_chip * chip = gpiochip_get_data (gc );
@@ -443,7 +464,9 @@ static int gpio_sim_add_bank(struct fwnode_handle *swnode, struct device *dev)
443
464
if (!chip -> pull_map )
444
465
return - ENOMEM ;
445
466
446
- chip -> irq_sim = devm_irq_domain_create_sim (dev , swnode , num_lines );
467
+ chip -> irq_sim = devm_irq_domain_create_sim_full (dev , swnode , num_lines ,
468
+ & gpio_sim_irq_sim_ops ,
469
+ chip );
447
470
if (IS_ERR (chip -> irq_sim ))
448
471
return PTR_ERR (chip -> irq_sim );
449
472
0 commit comments