> > struct snd_soc_jack_pin { > > + struct snd_soc_jack *jack; > > + struct snd_soc_jack_gpio *gpio_pin; > > struct list_head list; > > const char *pin; > > int mask; > > bool invert; > > + /* GPIO */ > > + unsigned int gpio; > > + unsigned int irq; > > + unsigned long irqflags; > > + irq_handler_t handler; > > + struct work_struct work; > > }; > > This needs to be rethought - it breaks the abstraction layers. Ok, I see. Here is the new plan: * Create a new structure "snd_soc_jack_gpio" holding info specific for a gpio pin like: gpio, irq, irqflags, irqhandler, private data (to be passed to irqhandler). * Create a new function "snd_soc_jack_add_gpios" to add all jack_gpios that belong to a specific jack. This function should add all gpio pin references in a linked list as it's done for dapm pins. The linked list will be useful to be able to release acquired resources in another function "snd_soc_jack_free_gpios". * Machine driver will be responsible to call add_gpios function passing an array of gpios related to each jack. * Machine driver will tie each jack_gpio with corresponding jack in a machine specific jack_data structure, one hook per jack_gpio in the jack. A handler will also be associated to the jack_data structure. This jack_data struct will be passed to the gpio irqhandler as private data. -Misa-- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html