diff --git a/master/slave.c b/master/slave.c index 07db78a7283aef95ec8e60625777778e751c9e24..44fbfb90bc9cf4cfe9546227e4cf4c6f7c312c2c 100644 --- a/master/slave.c +++ b/master/slave.c @@ -839,12 +839,13 @@ ssize_t ec_slave_write_eeprom(ec_slave_t *slave, /**< EtherCAT slave */ if (request.state == EC_EEPROM_REQ_QUEUED) { list_del(&request.list); up(&master->eeprom_sem); - return -EPERM; + return -EINTR; } - // request processing: interrupt not possible. + // request already processing: interrupt not possible. up(&master->eeprom_sem); } + // wait until master FSM has finished processing wait_event(master->eeprom_queue, request.state != EC_EEPROM_REQ_BUSY); return request.state == EC_EEPROM_REQ_COMPLETED ? size : -EIO;