diff --git a/homeassistant/components/reolink/config_flow.py b/homeassistant/components/reolink/config_flow.py
index be88baf84e4e9ac6afc6843171e6430ed9a5a9bb..bf58646536f0e89e702148e060f5c87bee70fc9f 100644
--- a/homeassistant/components/reolink/config_flow.py
+++ b/homeassistant/components/reolink/config_flow.py
@@ -139,13 +139,10 @@ class ReolinkFlowHandler(ConfigFlow, domain=DOMAIN):
         self, user_input: dict[str, Any] | None = None
     ) -> ConfigFlowResult:
         """Perform a reconfiguration."""
-        config_entry = self.hass.config_entries.async_get_entry(
-            self.context["entry_id"]
-        )
-        assert config_entry is not None
-        self._host = config_entry.data[CONF_HOST]
-        self._username = config_entry.data[CONF_USERNAME]
-        self._password = config_entry.data[CONF_PASSWORD]
+        entry_data = self._get_reconfigure_entry().data
+        self._host = entry_data[CONF_HOST]
+        self._username = entry_data[CONF_USERNAME]
+        self._password = entry_data[CONF_PASSWORD]
         return await self.async_step_user()
 
     async def async_step_dhcp(
@@ -260,17 +257,16 @@ class ReolinkFlowHandler(ConfigFlow, domain=DOMAIN):
                 user_input[CONF_USE_HTTPS] = host.api.use_https
 
                 mac_address = format_mac(host.api.mac_address)
-                existing_entry = await self.async_set_unique_id(
-                    mac_address, raise_on_progress=False
-                )
-                if existing_entry and self.init_step in (
-                    SOURCE_REAUTH,
-                    SOURCE_RECONFIGURE,
-                ):
+                await self.async_set_unique_id(mac_address, raise_on_progress=False)
+                if self.source == SOURCE_REAUTH:
+                    self._abort_if_unique_id_mismatch()
+                    return self.async_update_reload_and_abort(
+                        entry=self._get_reauth_entry(), data=user_input
+                    )
+                if self.source == SOURCE_RECONFIGURE:
+                    self._abort_if_unique_id_mismatch()
                     return self.async_update_reload_and_abort(
-                        entry=existing_entry,
-                        data=user_input,
-                        reason=f"{self.init_step}_successful",
+                        entry=self._get_reconfigure_entry(), data=user_input
                     )
                 self._abort_if_unique_id_configured(updates=user_input)
 
@@ -286,7 +282,7 @@ class ReolinkFlowHandler(ConfigFlow, domain=DOMAIN):
                 vol.Required(CONF_PASSWORD, default=self._password): str,
             }
         )
-        if self._host is None or self.init_step == SOURCE_RECONFIGURE or errors:
+        if self._host is None or self.source == SOURCE_RECONFIGURE or errors:
             data_schema = data_schema.extend(
                 {
                     vol.Required(CONF_HOST, default=self._host): str,