for (i = 0; i < entity->ncontrols; ++i) {
                ctrl = &entity->controls[i];
-               if (ctrl->info == NULL || !ctrl->dirty)
+               if (ctrl->info == NULL)
+                       continue;
+
+               /* Reset the loaded flag for auto-update controls that were
+                * marked as loaded in uvc_ctrl_get/uvc_ctrl_set to prevent
+                * uvc_ctrl_get from using the cached value.
+                */
+               if (ctrl->info->flags & UVC_CONTROL_AUTO_UPDATE)
+                       ctrl->loaded = 0;
+
+               if (!ctrl->dirty)
                        continue;
 
                if (!rollback)
                               uvc_ctrl_data(ctrl, UVC_CTRL_DATA_BACKUP),
                               ctrl->info->size);
 
-               if ((ctrl->info->flags & UVC_CONTROL_GET_CUR) == 0)
-                       ctrl->loaded = 0;
-
                ctrl->dirty = 0;
 
                if (ret < 0)
                if (ret < 0)
                        return ret;
 
-               if ((ctrl->info->flags & UVC_CONTROL_AUTO_UPDATE) == 0)
-                       ctrl->loaded = 1;
+               ctrl->loaded = 1;
        }
 
        xctrl->value = uvc_get_le_value(
                                return ret;
                }
 
-               if ((ctrl->info->flags & UVC_CONTROL_AUTO_UPDATE) == 0)
-                       ctrl->loaded = 1;
+               ctrl->loaded = 1;
        }
 
        if (!ctrl->dirty) {