master/slave.c
changeset 649 a4d3fffdaed7
parent 645 473ec2246ec1
child 656 370aa8c2d1b1
equal deleted inserted replaced
648:0a6d38ec463f 649:a4d3fffdaed7
   856 
   856 
   857 int ec_slave_schedule_eeprom_writing(ec_eeprom_write_request_t *request)
   857 int ec_slave_schedule_eeprom_writing(ec_eeprom_write_request_t *request)
   858 {
   858 {
   859     ec_master_t *master = request->slave->master;
   859     ec_master_t *master = request->slave->master;
   860 
   860 
   861     request->state = EC_REQ_QUEUED;
   861     request->state = EC_REQUEST_QUEUED;
   862 
   862 
   863     // schedule EEPROM write request.
   863     // schedule EEPROM write request.
   864     down(&master->eeprom_sem);
   864     down(&master->eeprom_sem);
   865     list_add_tail(&request->list, &master->eeprom_requests);
   865     list_add_tail(&request->list, &master->eeprom_requests);
   866     up(&master->eeprom_sem);
   866     up(&master->eeprom_sem);
   867 
   867 
   868     // wait for processing through FSM
   868     // wait for processing through FSM
   869     if (wait_event_interruptible(master->eeprom_queue,
   869     if (wait_event_interruptible(master->eeprom_queue,
   870                 request->state != EC_REQ_QUEUED)) {
   870                 request->state != EC_REQUEST_QUEUED)) {
   871         // interrupted by signal
   871         // interrupted by signal
   872         down(&master->eeprom_sem);
   872         down(&master->eeprom_sem);
   873         if (request->state == EC_REQ_QUEUED) {
   873         if (request->state == EC_REQUEST_QUEUED) {
   874             list_del(&request->list);
   874             list_del(&request->list);
   875             up(&master->eeprom_sem);
   875             up(&master->eeprom_sem);
   876             return -EINTR;
   876             return -EINTR;
   877         }
   877         }
   878         // request already processing: interrupt not possible.
   878         // request already processing: interrupt not possible.
   879         up(&master->eeprom_sem);
   879         up(&master->eeprom_sem);
   880     }
   880     }
   881 
   881 
   882     // wait until master FSM has finished processing
   882     // wait until master FSM has finished processing
   883     wait_event(master->eeprom_queue, request->state != EC_REQ_BUSY);
   883     wait_event(master->eeprom_queue,
   884 
   884             request->state != EC_REQUEST_IN_PROGRESS);
   885     return request->state == EC_REQ_COMPLETED ? 0 : -EIO;
   885 
       
   886     return request->state == EC_REQUEST_COMPLETE ? 0 : -EIO;
   886 }
   887 }
   887 
   888 
   888 /*****************************************************************************/
   889 /*****************************************************************************/
   889 
   890 
   890 /**
   891 /**