diff options
author | Jerome Glisse <jglisse@redhat.com> | 2012-08-09 11:25:51 -0400 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2012-09-16 21:16:40 -0400 |
commit | 0b2443ed4e07d7973e4554a2cc166bc35447b59e (patch) | |
tree | a996dbd03a8480f6473a7ea2fdea3936760de853 /drivers/gpu/drm/drm_edid_load.c | |
parent | 09e7dcf081b1100d1cdff57fa9eb25c3a834c9d6 (diff) |
drm/edid: limit printk when facing bad edid
Limit printing bad edid information at one time per connector.
Connector that are connected to a bad monitor/kvm will likely
stay connected to the same bad monitor/kvm and it makes no
sense to keep printing the bad edid message.
Signed-off-by: Jerome Glisse <jglisse@redhat.com>
Reviewed-by: Adam Jackson <ajax@redhat.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'drivers/gpu/drm/drm_edid_load.c')
-rw-r--r-- | drivers/gpu/drm/drm_edid_load.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/drivers/gpu/drm/drm_edid_load.c b/drivers/gpu/drm/drm_edid_load.c index 186832e1874..ea9cdab3d43 100644 --- a/drivers/gpu/drm/drm_edid_load.c +++ b/drivers/gpu/drm/drm_edid_load.c | |||
@@ -123,6 +123,7 @@ static u8 *edid_load(struct drm_connector *connector, char *name, | |||
123 | int fwsize, expected; | 123 | int fwsize, expected; |
124 | int builtin = 0, err = 0; | 124 | int builtin = 0, err = 0; |
125 | int i, valid_extensions = 0; | 125 | int i, valid_extensions = 0; |
126 | bool print_bad_edid = !connector->bad_edid_counter || (drm_debug & DRM_UT_KMS); | ||
126 | 127 | ||
127 | pdev = platform_device_register_simple(connector_name, -1, NULL, 0); | 128 | pdev = platform_device_register_simple(connector_name, -1, NULL, 0); |
128 | if (IS_ERR(pdev)) { | 129 | if (IS_ERR(pdev)) { |
@@ -173,7 +174,8 @@ static u8 *edid_load(struct drm_connector *connector, char *name, | |||
173 | } | 174 | } |
174 | memcpy(edid, fwdata, fwsize); | 175 | memcpy(edid, fwdata, fwsize); |
175 | 176 | ||
176 | if (!drm_edid_block_valid(edid, 0)) { | 177 | if (!drm_edid_block_valid(edid, 0, print_bad_edid)) { |
178 | connector->bad_edid_counter++; | ||
177 | DRM_ERROR("Base block of EDID firmware \"%s\" is invalid ", | 179 | DRM_ERROR("Base block of EDID firmware \"%s\" is invalid ", |
178 | name); | 180 | name); |
179 | kfree(edid); | 181 | kfree(edid); |
@@ -185,7 +187,7 @@ static u8 *edid_load(struct drm_connector *connector, char *name, | |||
185 | if (i != valid_extensions + 1) | 187 | if (i != valid_extensions + 1) |
186 | memcpy(edid + (valid_extensions + 1) * EDID_LENGTH, | 188 | memcpy(edid + (valid_extensions + 1) * EDID_LENGTH, |
187 | edid + i * EDID_LENGTH, EDID_LENGTH); | 189 | edid + i * EDID_LENGTH, EDID_LENGTH); |
188 | if (drm_edid_block_valid(edid + i * EDID_LENGTH, i)) | 190 | if (drm_edid_block_valid(edid + i * EDID_LENGTH, i, print_bad_edid)) |
189 | valid_extensions++; | 191 | valid_extensions++; |
190 | } | 192 | } |
191 | 193 | ||