diff options
author | Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> | 2015-02-22 14:02:39 -0500 |
---|---|---|
committer | Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> | 2015-03-03 09:16:21 -0500 |
commit | ede7714f2e5ee1c7032d2865f6cc73158ff39f45 (patch) | |
tree | 6704218b28e1edf2fa0ffbbf143ed432a5434cb7 | |
parent | f348323240b63f351b4ade84d75150e09fb9ff32 (diff) |
drm: rcar-du: Replace encoder mode_fixup with atomic_check
The encoder .mode_fixup() operation is legacy, atomic updates uses the
new .atomic_check() operation. Convert the encoders drivers.
Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
-rw-r--r-- | drivers/gpu/drm/rcar-du/rcar_du_encoder.c | 35 | ||||
-rw-r--r-- | drivers/gpu/drm/rcar-du/rcar_du_hdmienc.c | 14 |
2 files changed, 20 insertions, 29 deletions
diff --git a/drivers/gpu/drm/rcar-du/rcar_du_encoder.c b/drivers/gpu/drm/rcar-du/rcar_du_encoder.c index d4a70228ce50..d0ae1e8009c6 100644 --- a/drivers/gpu/drm/rcar-du/rcar_du_encoder.c +++ b/drivers/gpu/drm/rcar-du/rcar_du_encoder.c | |||
@@ -58,35 +58,24 @@ static void rcar_du_encoder_enable(struct drm_encoder *encoder) | |||
58 | rcar_du_lvdsenc_enable(renc->lvds, encoder->crtc, true); | 58 | rcar_du_lvdsenc_enable(renc->lvds, encoder->crtc, true); |
59 | } | 59 | } |
60 | 60 | ||
61 | static bool rcar_du_encoder_mode_fixup(struct drm_encoder *encoder, | 61 | static int rcar_du_encoder_atomic_check(struct drm_encoder *encoder, |
62 | const struct drm_display_mode *mode, | 62 | struct drm_crtc_state *crtc_state, |
63 | struct drm_display_mode *adjusted_mode) | 63 | struct drm_connector_state *conn_state) |
64 | { | 64 | { |
65 | struct rcar_du_encoder *renc = to_rcar_encoder(encoder); | 65 | struct rcar_du_encoder *renc = to_rcar_encoder(encoder); |
66 | struct drm_display_mode *adjusted_mode = &crtc_state->adjusted_mode; | ||
67 | const struct drm_display_mode *mode = &crtc_state->mode; | ||
66 | const struct drm_display_mode *panel_mode; | 68 | const struct drm_display_mode *panel_mode; |
69 | struct drm_connector *connector = conn_state->connector; | ||
67 | struct drm_device *dev = encoder->dev; | 70 | struct drm_device *dev = encoder->dev; |
68 | struct drm_connector *connector; | ||
69 | bool found = false; | ||
70 | 71 | ||
71 | /* DAC encoders have currently no restriction on the mode. */ | 72 | /* DAC encoders have currently no restriction on the mode. */ |
72 | if (encoder->encoder_type == DRM_MODE_ENCODER_DAC) | 73 | if (encoder->encoder_type == DRM_MODE_ENCODER_DAC) |
73 | return true; | 74 | return 0; |
74 | |||
75 | list_for_each_entry(connector, &dev->mode_config.connector_list, head) { | ||
76 | if (connector->encoder == encoder) { | ||
77 | found = true; | ||
78 | break; | ||
79 | } | ||
80 | } | ||
81 | |||
82 | if (!found) { | ||
83 | dev_dbg(dev->dev, "mode_fixup: no connector found\n"); | ||
84 | return false; | ||
85 | } | ||
86 | 75 | ||
87 | if (list_empty(&connector->modes)) { | 76 | if (list_empty(&connector->modes)) { |
88 | dev_dbg(dev->dev, "mode_fixup: empty modes list\n"); | 77 | dev_dbg(dev->dev, "encoder: empty modes list\n"); |
89 | return false; | 78 | return -EINVAL; |
90 | } | 79 | } |
91 | 80 | ||
92 | panel_mode = list_first_entry(&connector->modes, | 81 | panel_mode = list_first_entry(&connector->modes, |
@@ -95,7 +84,7 @@ static bool rcar_du_encoder_mode_fixup(struct drm_encoder *encoder, | |||
95 | /* We're not allowed to modify the resolution. */ | 84 | /* We're not allowed to modify the resolution. */ |
96 | if (mode->hdisplay != panel_mode->hdisplay || | 85 | if (mode->hdisplay != panel_mode->hdisplay || |
97 | mode->vdisplay != panel_mode->vdisplay) | 86 | mode->vdisplay != panel_mode->vdisplay) |
98 | return false; | 87 | return -EINVAL; |
99 | 88 | ||
100 | /* The flat panel mode is fixed, just copy it to the adjusted mode. */ | 89 | /* The flat panel mode is fixed, just copy it to the adjusted mode. */ |
101 | drm_mode_copy(adjusted_mode, panel_mode); | 90 | drm_mode_copy(adjusted_mode, panel_mode); |
@@ -107,7 +96,7 @@ static bool rcar_du_encoder_mode_fixup(struct drm_encoder *encoder, | |||
107 | adjusted_mode->clock = clamp(adjusted_mode->clock, | 96 | adjusted_mode->clock = clamp(adjusted_mode->clock, |
108 | 30000, 150000); | 97 | 30000, 150000); |
109 | 98 | ||
110 | return true; | 99 | return 0; |
111 | } | 100 | } |
112 | 101 | ||
113 | static void rcar_du_encoder_mode_set(struct drm_encoder *encoder, | 102 | static void rcar_du_encoder_mode_set(struct drm_encoder *encoder, |
@@ -120,10 +109,10 @@ static void rcar_du_encoder_mode_set(struct drm_encoder *encoder, | |||
120 | } | 109 | } |
121 | 110 | ||
122 | static const struct drm_encoder_helper_funcs encoder_helper_funcs = { | 111 | static const struct drm_encoder_helper_funcs encoder_helper_funcs = { |
123 | .mode_fixup = rcar_du_encoder_mode_fixup, | ||
124 | .mode_set = rcar_du_encoder_mode_set, | 112 | .mode_set = rcar_du_encoder_mode_set, |
125 | .disable = rcar_du_encoder_disable, | 113 | .disable = rcar_du_encoder_disable, |
126 | .enable = rcar_du_encoder_enable, | 114 | .enable = rcar_du_encoder_enable, |
115 | .atomic_check = rcar_du_encoder_atomic_check, | ||
127 | }; | 116 | }; |
128 | 117 | ||
129 | static const struct drm_encoder_funcs encoder_funcs = { | 118 | static const struct drm_encoder_funcs encoder_funcs = { |
diff --git a/drivers/gpu/drm/rcar-du/rcar_du_hdmienc.c b/drivers/gpu/drm/rcar-du/rcar_du_hdmienc.c index 3c29250c8abd..81da8419282b 100644 --- a/drivers/gpu/drm/rcar-du/rcar_du_hdmienc.c +++ b/drivers/gpu/drm/rcar-du/rcar_du_hdmienc.c | |||
@@ -62,12 +62,14 @@ static void rcar_du_hdmienc_enable(struct drm_encoder *encoder) | |||
62 | hdmienc->enabled = true; | 62 | hdmienc->enabled = true; |
63 | } | 63 | } |
64 | 64 | ||
65 | static bool rcar_du_hdmienc_mode_fixup(struct drm_encoder *encoder, | 65 | static int rcar_du_hdmienc_atomic_check(struct drm_encoder *encoder, |
66 | const struct drm_display_mode *mode, | 66 | struct drm_crtc_state *crtc_state, |
67 | struct drm_display_mode *adjusted_mode) | 67 | struct drm_connector_state *conn_state) |
68 | { | 68 | { |
69 | struct rcar_du_hdmienc *hdmienc = to_rcar_hdmienc(encoder); | 69 | struct rcar_du_hdmienc *hdmienc = to_rcar_hdmienc(encoder); |
70 | struct drm_encoder_slave_funcs *sfuncs = to_slave_funcs(encoder); | 70 | struct drm_encoder_slave_funcs *sfuncs = to_slave_funcs(encoder); |
71 | struct drm_display_mode *adjusted_mode = &crtc_state->adjusted_mode; | ||
72 | const struct drm_display_mode *mode = &crtc_state->mode; | ||
71 | 73 | ||
72 | /* The internal LVDS encoder has a clock frequency operating range of | 74 | /* The internal LVDS encoder has a clock frequency operating range of |
73 | * 30MHz to 150MHz. Clamp the clock accordingly. | 75 | * 30MHz to 150MHz. Clamp the clock accordingly. |
@@ -77,9 +79,9 @@ static bool rcar_du_hdmienc_mode_fixup(struct drm_encoder *encoder, | |||
77 | 30000, 150000); | 79 | 30000, 150000); |
78 | 80 | ||
79 | if (sfuncs->mode_fixup == NULL) | 81 | if (sfuncs->mode_fixup == NULL) |
80 | return true; | 82 | return 0; |
81 | 83 | ||
82 | return sfuncs->mode_fixup(encoder, mode, adjusted_mode); | 84 | return sfuncs->mode_fixup(encoder, mode, adjusted_mode) ? 0 : -EINVAL; |
83 | } | 85 | } |
84 | 86 | ||
85 | static void rcar_du_hdmienc_mode_set(struct drm_encoder *encoder, | 87 | static void rcar_du_hdmienc_mode_set(struct drm_encoder *encoder, |
@@ -96,10 +98,10 @@ static void rcar_du_hdmienc_mode_set(struct drm_encoder *encoder, | |||
96 | } | 98 | } |
97 | 99 | ||
98 | static const struct drm_encoder_helper_funcs encoder_helper_funcs = { | 100 | static const struct drm_encoder_helper_funcs encoder_helper_funcs = { |
99 | .mode_fixup = rcar_du_hdmienc_mode_fixup, | ||
100 | .mode_set = rcar_du_hdmienc_mode_set, | 101 | .mode_set = rcar_du_hdmienc_mode_set, |
101 | .disable = rcar_du_hdmienc_disable, | 102 | .disable = rcar_du_hdmienc_disable, |
102 | .enable = rcar_du_hdmienc_enable, | 103 | .enable = rcar_du_hdmienc_enable, |
104 | .atomic_check = rcar_du_hdmienc_atomic_check, | ||
103 | }; | 105 | }; |
104 | 106 | ||
105 | static void rcar_du_hdmienc_cleanup(struct drm_encoder *encoder) | 107 | static void rcar_du_hdmienc_cleanup(struct drm_encoder *encoder) |