if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_HOST_NOTIFY))
                return;
 
-       mutex_lock(&psmouse_smbus_mutex);
+       guard(mutex)(&psmouse_smbus_mutex);
 
        list_for_each_entry(smbdev, &psmouse_smbus_list, node) {
                if (smbdev->dead)
                            "SMBus candidate adapter appeared, triggering rescan\n");
                serio_rescan(smbdev->psmouse->ps2dev.serio);
        }
-
-       mutex_unlock(&psmouse_smbus_mutex);
 }
 
 static void psmouse_smbus_detach_i2c_client(struct i2c_client *client)
 {
        struct psmouse_smbus_dev *smbdev, *tmp;
 
-       mutex_lock(&psmouse_smbus_mutex);
+       guard(mutex)(&psmouse_smbus_mutex);
 
        list_for_each_entry_safe(smbdev, tmp, &psmouse_smbus_list, node) {
                if (smbdev->client != client)
                        kfree(smbdev);
                }
        }
-
-       mutex_unlock(&psmouse_smbus_mutex);
 }
 
 static int psmouse_smbus_notifier_call(struct notifier_block *nb,
 {
        struct psmouse_smbus_dev *smbdev = psmouse->private;
 
-       mutex_lock(&psmouse_smbus_mutex);
+       guard(mutex)(&psmouse_smbus_mutex);
 
        if (smbdev->dead) {
                list_del(&smbdev->node);
                psmouse_smbus_schedule_remove(smbdev->client);
        }
 
-       mutex_unlock(&psmouse_smbus_mutex);
-
        psmouse->private = NULL;
 }
 
 {
        struct psmouse_smbus_dev *smbdev, *tmp;
 
-       mutex_lock(&psmouse_smbus_mutex);
+       guard(mutex)(&psmouse_smbus_mutex);
 
        list_for_each_entry_safe(smbdev, tmp, &psmouse_smbus_list, node) {
                if (psmouse == smbdev->psmouse) {
                        kfree(smbdev);
                }
        }
-
-       mutex_unlock(&psmouse_smbus_mutex);
 }
 
 int psmouse_smbus_init(struct psmouse *psmouse,
        psmouse->disconnect = psmouse_smbus_disconnect;
        psmouse->resync_time = 0;
 
-       mutex_lock(&psmouse_smbus_mutex);
-       list_add_tail(&smbdev->node, &psmouse_smbus_list);
-       mutex_unlock(&psmouse_smbus_mutex);
+       scoped_guard(mutex, &psmouse_smbus_mutex) {
+               list_add_tail(&smbdev->node, &psmouse_smbus_list);
+       }
 
        /* Bind to already existing adapters right away */
        error = i2c_for_each_dev(smbdev, psmouse_smbus_create_companion);
        smbdev->board.platform_data = NULL;
 
        if (error < 0 || !leave_breadcrumbs) {
-               mutex_lock(&psmouse_smbus_mutex);
-               list_del(&smbdev->node);
-               mutex_unlock(&psmouse_smbus_mutex);
+               scoped_guard(mutex, &psmouse_smbus_mutex) {
+                       list_del(&smbdev->node);
+               }
 
                kfree(smbdev);
        }