rc = zl3073x_dpll_selected_ref_set(zldpll, new_ref);
                break;
+
+       case ZL_DPLL_MODE_REFSEL_MODE_AUTO:
+               if (state == DPLL_PIN_STATE_SELECTABLE) {
+                       if (pin->selectable)
+                               return 0; /* Pin is already selectable */
+
+                       /* Restore pin priority in HW */
+                       rc = zl3073x_dpll_ref_prio_set(pin, pin->prio);
+                       if (rc)
+                               return rc;
+
+                       /* Mark pin as selectable */
+                       pin->selectable = true;
+               } else if (state == DPLL_PIN_STATE_DISCONNECTED) {
+                       if (!pin->selectable)
+                               return 0; /* Pin is already disconnected */
+
+                       /* Set pin priority to none in HW */
+                       rc = zl3073x_dpll_ref_prio_set(pin,
+                                                      ZL_DPLL_REF_PRIO_NONE);
+                       if (rc)
+                               return rc;
+
+                       /* Mark pin as non-selectable */
+                       pin->selectable = false;
+               } else {
+                       NL_SET_ERR_MSG(extack,
+                                      "Invalid pin state for automatic mode");
+                       return -EINVAL;
+               }
+               break;
+
        default:
                /* In other modes we cannot change input reference */
                NL_SET_ERR_MSG(extack,