Add a helper function hiding the search for scaler_id.

Changelog:
v2->v3
- keep ctl inside the loop (Ville)
- separate impure function call from variable declaration block (Ville)

Cc: Nemesa Garg <[email protected]>
Suggested-by: Ville Syrjälä <[email protected]>
Signed-off-by: Michał Grzelak <[email protected]>
Reviewed-by: Ville Syrjälä <[email protected]>
---
 drivers/gpu/drm/i915/display/skl_scaler.c | 27 +++++++++++++++--------
 1 file changed, 18 insertions(+), 9 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/skl_scaler.c 
b/drivers/gpu/drm/i915/display/skl_scaler.c
index 4e2f4c4ffc45..6acb54d5781b 100644
--- a/drivers/gpu/drm/i915/display/skl_scaler.c
+++ b/drivers/gpu/drm/i915/display/skl_scaler.c
@@ -836,6 +836,22 @@ void skl_pfit_enable(const struct intel_crtc_state 
*crtc_state)
                          PS_WIN_XSIZE(width) | PS_WIN_YSIZE(height));
 }
 
+static int skl_pipe_scaler_get_hw_state(struct intel_crtc_state *crtc_state)
+{
+       struct intel_display *display = to_intel_display(crtc_state);
+       struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
+
+       for (int scaler_id = 0; scaler_id < crtc->num_scalers; scaler_id++) {
+               u32 ctl;
+
+               ctl = intel_de_read(display, SKL_PS_CTRL(crtc->pipe, 
scaler_id));
+               if ((ctl & (PS_SCALER_EN | PS_BINDING_MASK)) == (PS_SCALER_EN | 
PS_BINDING_PIPE))
+                       return scaler_id;
+       }
+
+       return -1;
+}
+
 void
 skl_program_plane_scaler(struct intel_dsb *dsb,
                         struct intel_plane *plane,
@@ -954,15 +970,8 @@ void skl_scaler_get_config(struct intel_crtc_state 
*crtc_state)
        u32 pos, size;
 
        /* find scaler attached to this pipe */
-       for (scaler_id = 0; scaler_id < crtc->num_scalers; scaler_id++) {
-               u32 ctl;
-
-               ctl = intel_de_read(display, SKL_PS_CTRL(crtc->pipe, 
scaler_id));
-               if ((ctl & (PS_SCALER_EN | PS_BINDING_MASK)) == (PS_SCALER_EN | 
PS_BINDING_PIPE))
-                       break;
-       }
-
-       if (scaler_id == crtc->num_scalers)
+       scaler_id = skl_pipe_scaler_get_hw_state(crtc_state);
+       if (scaler_id < 0)
                return;
 
        if (scaler_has_casf(display, scaler_id))
-- 
2.45.2

Reply via email to