Another issue of the current API is the confusion caused by 'gpio_port_enable_callback()' and 'gpio_pin_enable_callback()'.
With the changes proposed later in this thread, you could have a unified call: 'gpio_enable_callback(struct device *port, uint32_t pinmask)' (or something like it)
gpio_port_callback() make the callback called, whatever pins is triggering the interrupt and enabled or not (callback wise). So they are different (documentation could be better though)
gpio_dw.c implementation is awkward however: I don't think it should by default enable the int on pin 0.