diff options
| -rw-r--r-- | drivers/gpu/drm/sun4i/sun4i_lvds.c | 55 |
1 files changed, 0 insertions, 55 deletions
diff --git a/drivers/gpu/drm/sun4i/sun4i_lvds.c b/drivers/gpu/drm/sun4i/sun4i_lvds.c index bffff4c9fbf5..be3f14d7746d 100644 --- a/drivers/gpu/drm/sun4i/sun4i_lvds.c +++ b/drivers/gpu/drm/sun4i/sun4i_lvds.c | |||
| @@ -94,64 +94,9 @@ static void sun4i_lvds_encoder_disable(struct drm_encoder *encoder) | |||
| 94 | } | 94 | } |
| 95 | } | 95 | } |
| 96 | 96 | ||
| 97 | static enum drm_mode_status sun4i_lvds_encoder_mode_valid(struct drm_encoder *crtc, | ||
| 98 | const struct drm_display_mode *mode) | ||
| 99 | { | ||
| 100 | struct sun4i_lvds *lvds = drm_encoder_to_sun4i_lvds(crtc); | ||
| 101 | struct sun4i_tcon *tcon = lvds->tcon; | ||
| 102 | u32 hsync = mode->hsync_end - mode->hsync_start; | ||
| 103 | u32 vsync = mode->vsync_end - mode->vsync_start; | ||
| 104 | unsigned long rate = mode->clock * 1000; | ||
| 105 | long rounded_rate; | ||
| 106 | |||
| 107 | DRM_DEBUG_DRIVER("Validating modes...\n"); | ||
| 108 | |||
| 109 | if (hsync < 1) | ||
| 110 | return MODE_HSYNC_NARROW; | ||
| 111 | |||
| 112 | if (hsync > 0x3ff) | ||
| 113 | return MODE_HSYNC_WIDE; | ||
| 114 | |||
| 115 | if ((mode->hdisplay < 1) || (mode->htotal < 1)) | ||
| 116 | return MODE_H_ILLEGAL; | ||
| 117 | |||
| 118 | if ((mode->hdisplay > 0x7ff) || (mode->htotal > 0xfff)) | ||
| 119 | return MODE_BAD_HVALUE; | ||
| 120 | |||
| 121 | DRM_DEBUG_DRIVER("Horizontal parameters OK\n"); | ||
| 122 | |||
| 123 | if (vsync < 1) | ||
| 124 | return MODE_VSYNC_NARROW; | ||
| 125 | |||
| 126 | if (vsync > 0x3ff) | ||
| 127 | return MODE_VSYNC_WIDE; | ||
| 128 | |||
| 129 | if ((mode->vdisplay < 1) || (mode->vtotal < 1)) | ||
| 130 | return MODE_V_ILLEGAL; | ||
| 131 | |||
| 132 | if ((mode->vdisplay > 0x7ff) || (mode->vtotal > 0xfff)) | ||
| 133 | return MODE_BAD_VVALUE; | ||
| 134 | |||
| 135 | DRM_DEBUG_DRIVER("Vertical parameters OK\n"); | ||
| 136 | |||
| 137 | tcon->dclk_min_div = 7; | ||
| 138 | tcon->dclk_max_div = 7; | ||
| 139 | rounded_rate = clk_round_rate(tcon->dclk, rate); | ||
| 140 | if (rounded_rate < rate) | ||
| 141 | return MODE_CLOCK_LOW; | ||
| 142 | |||
| 143 | if (rounded_rate > rate) | ||
| 144 | return MODE_CLOCK_HIGH; | ||
| 145 | |||
| 146 | DRM_DEBUG_DRIVER("Clock rate OK\n"); | ||
| 147 | |||
| 148 | return MODE_OK; | ||
| 149 | } | ||
| 150 | |||
| 151 | static const struct drm_encoder_helper_funcs sun4i_lvds_enc_helper_funcs = { | 97 | static const struct drm_encoder_helper_funcs sun4i_lvds_enc_helper_funcs = { |
| 152 | .disable = sun4i_lvds_encoder_disable, | 98 | .disable = sun4i_lvds_encoder_disable, |
| 153 | .enable = sun4i_lvds_encoder_enable, | 99 | .enable = sun4i_lvds_encoder_enable, |
| 154 | .mode_valid = sun4i_lvds_encoder_mode_valid, | ||
| 155 | }; | 100 | }; |
| 156 | 101 | ||
| 157 | static const struct drm_encoder_funcs sun4i_lvds_enc_funcs = { | 102 | static const struct drm_encoder_funcs sun4i_lvds_enc_funcs = { |
