struct rotary_encoder *encoder = dev_id;
        unsigned int state;
 
-       mutex_lock(&encoder->access_mutex);
+       guard(mutex)(&encoder->access_mutex);
 
        state = rotary_encoder_get_state(encoder);
 
                break;
        }
 
-       mutex_unlock(&encoder->access_mutex);
-
        return IRQ_HANDLED;
 }
 
        struct rotary_encoder *encoder = dev_id;
        unsigned int state;
 
-       mutex_lock(&encoder->access_mutex);
+       guard(mutex)(&encoder->access_mutex);
 
        state = rotary_encoder_get_state(encoder);
 
                }
        }
 
-       mutex_unlock(&encoder->access_mutex);
-
        return IRQ_HANDLED;
 }
 
        struct rotary_encoder *encoder = dev_id;
        unsigned int state;
 
-       mutex_lock(&encoder->access_mutex);
+       guard(mutex)(&encoder->access_mutex);
 
        state = rotary_encoder_get_state(encoder);
 
-       if ((encoder->last_stable + 1) % 4 == state)
+       if ((encoder->last_stable + 1) % 4 == state) {
                encoder->dir = 1;
-       else if (encoder->last_stable == (state + 1) % 4)
+               rotary_encoder_report_event(encoder);
+       } else if (encoder->last_stable == (state + 1) % 4) {
                encoder->dir = -1;
-       else
-               goto out;
-
-       rotary_encoder_report_event(encoder);
+               rotary_encoder_report_event(encoder);
+       }
 
-out:
        encoder->last_stable = state;
-       mutex_unlock(&encoder->access_mutex);
 
        return IRQ_HANDLED;
 }