If no n_latch value will be provided at driver probe then all pins will be used as an input: gpio->out = ~n_latch; In that case initial state for all pins is "one": gpio->status = gpio->out; So if pcf857x IRQ happens with change pin value from "zero" to "one" then we miss it, because of "one" from IRQ and "one" from initial state leaves corresponding pin unchanged: change = (gpio->status ^ status) & gpio->irq_enabled; The right solution will be to read actual state at driver probe.
Unified · Split
| @@ -332,7 +332,7 @@ static int pcf857x_probe(struct i2c_client *client, · 331 unmodified lines | ||
| 332 | 332 | * reset state. Otherwise it flags pins to be driven low. |
| 333 | 333 | */ |
| 334 | 334 | gpio->out = ~n_latch; |
| 335 | − gpio->status = gpio->out; | |
| 335 | + gpio->status = gpio->read(gpio->client); | |
| 336 | 336 | |
| 337 | 337 | /* Enable irqchip if we have an interrupt */ |
| 338 | 338 | if (client->irq) { |