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 /** |