poll () retorna ambos, POLLPRI e POLLERR

Comecei a entrar em programação C com Linux e sistemas embarcados (hardware de roteador e openwrt). Tenho interrupções nos GPIOs ativados, usando pesquisas de opinião ... quase.

Eu posso usar poll () e se eu pressionar o botão para acionar a interrupção, poll () retornará com um valor> 0. Até aí tudo bem. Agora, tento usar poll () em vários GPIOs simultaneamente e, portanto, quero analisar os revents de todas as fontes de interrupção em potencial. Embora a interrupção pareça funcionar, recebo POLLPRI e POLLERR de volta e não entendo o porquê. Reduzir a estrutura pollfd para 1 entrada não altera nada.

char value;

int fd_btn1 = open("/sys/class/gpio/gpio14/value", O_RDONLY);
int fd_left = open("/sys/class/gpio/gpio12/value", O_RDONLY);
int fd_right = open("/sys/class/gpio/gpio13/value", O_RDONLY);

struct pollfd fds[3];
fds[0].fd = fd_btn1;
fds[1].fd = fd_left;
fds[2].fd = fd_right;
fds[0].events = POLLPRI;
fds[1].events = POLLPRI;
fds[2].events = POLLPRI;

read(fd_btn1, &value, 1);
read(fd_left, &value, 1);
read(fd_right, &value, 1);

ret = poll(fds, 1, 10000);
//debugging purpose
printf("ret: %i - revents[0]: %i", ret, fds[0].revents);

Caso o botão tenha sido pressionado (interrupção acionada): ret = 1d, revents = 10d

Caso nada tenha sido pressionado, ambos são 0d