* Mutex protects extcon and interrupt functions from interfering
         * each other.
         */
-       struct mutex irq_lock;
        struct mutex extcon_lock;
        struct mutex mode_lock; /* used to bridge_detect */
        struct mutex aux_lock; /* used to aux data transfers */
        };
        int int_status[3], i;
 
-       mutex_lock(&it6505->irq_lock);
-
-       if (it6505->enable_drv_hold || !it6505->powered)
-               goto unlock;
+       if (it6505->enable_drv_hold || pm_runtime_get_if_in_use(dev) <= 0)
+               return IRQ_HANDLED;
 
        int_status[0] = it6505_read(it6505, INT_STATUS_01);
        int_status[1] = it6505_read(it6505, INT_STATUS_02);
        if (it6505_test_bit(irq_vec[0].bit, (unsigned int *)int_status))
                irq_vec[0].handler(it6505);
 
-       if (!it6505->hpd_state)
-               goto unlock;
-
-       for (i = 1; i < ARRAY_SIZE(irq_vec); i++) {
-               if (it6505_test_bit(irq_vec[i].bit, (unsigned int *)int_status))
-                       irq_vec[i].handler(it6505);
+       if (it6505->hpd_state) {
+               for (i = 1; i < ARRAY_SIZE(irq_vec); i++) {
+                       if (it6505_test_bit(irq_vec[i].bit, (unsigned int *)int_status))
+                               irq_vec[i].handler(it6505);
+               }
        }
 
-unlock:
-       mutex_unlock(&it6505->irq_lock);
+       pm_runtime_put_sync(dev);
 
        return IRQ_HANDLED;
 }
        if (!it6505)
                return -ENOMEM;
 
-       mutex_init(&it6505->irq_lock);
        mutex_init(&it6505->extcon_lock);
        mutex_init(&it6505->mode_lock);
        mutex_init(&it6505->aux_lock);