diff options
author | Dave Airlie <airlied@redhat.com> | 2017-04-12 20:15:45 -0400 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2017-04-12 20:15:45 -0400 |
commit | a6a5c983b35e579071370d4eb2b4ed8ad5c18da9 (patch) | |
tree | 3190e78b547838e3d2742d0f2b75a016a483d495 /drivers | |
parent | ab6eb211b07a42a6346e284056422fd9a8576a99 (diff) | |
parent | 8cb68c83ab99a474ae847602f0c514d0fe17cc82 (diff) |
Merge tag 'drm-misc-next-fixes-2017-04-12' of git://anongit.freedesktop.org/git/drm-misc into drm-next
drm-misc-next-fixes-2017-04-12
Core changes:
- Fix off-by-one bug in get_property ioctl for enums/bitmasks (Daniel)
Driver changes:
- Add mode_fixup to dw-hdmi bridge driver to ensure mode is validated (Romain)
* tag 'drm-misc-next-fixes-2017-04-12' of git://anongit.freedesktop.org/git/drm-misc:
drm: Fix get_property logic fumble
drm: dw-hdmi: Implement the mode_fixup drm helper
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | 15 | ||||
-rw-r--r-- | drivers/gpu/drm/drm_property.c | 2 |
2 files changed, 16 insertions, 1 deletions
diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c index 3bc856cc6daa..4e1f54a675d8 100644 --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | |||
@@ -1947,6 +1947,20 @@ static int dw_hdmi_bridge_attach(struct drm_bridge *bridge) | |||
1947 | return 0; | 1947 | return 0; |
1948 | } | 1948 | } |
1949 | 1949 | ||
1950 | static bool dw_hdmi_bridge_mode_fixup(struct drm_bridge *bridge, | ||
1951 | const struct drm_display_mode *orig_mode, | ||
1952 | struct drm_display_mode *mode) | ||
1953 | { | ||
1954 | struct dw_hdmi *hdmi = bridge->driver_private; | ||
1955 | struct drm_connector *connector = &hdmi->connector; | ||
1956 | enum drm_mode_status status; | ||
1957 | |||
1958 | status = dw_hdmi_connector_mode_valid(connector, mode); | ||
1959 | if (status != MODE_OK) | ||
1960 | return false; | ||
1961 | return true; | ||
1962 | } | ||
1963 | |||
1950 | static void dw_hdmi_bridge_mode_set(struct drm_bridge *bridge, | 1964 | static void dw_hdmi_bridge_mode_set(struct drm_bridge *bridge, |
1951 | struct drm_display_mode *orig_mode, | 1965 | struct drm_display_mode *orig_mode, |
1952 | struct drm_display_mode *mode) | 1966 | struct drm_display_mode *mode) |
@@ -1988,6 +2002,7 @@ static const struct drm_bridge_funcs dw_hdmi_bridge_funcs = { | |||
1988 | .enable = dw_hdmi_bridge_enable, | 2002 | .enable = dw_hdmi_bridge_enable, |
1989 | .disable = dw_hdmi_bridge_disable, | 2003 | .disable = dw_hdmi_bridge_disable, |
1990 | .mode_set = dw_hdmi_bridge_mode_set, | 2004 | .mode_set = dw_hdmi_bridge_mode_set, |
2005 | .mode_fixup = dw_hdmi_bridge_mode_fixup, | ||
1991 | }; | 2006 | }; |
1992 | 2007 | ||
1993 | static irqreturn_t dw_hdmi_i2c_irq(struct dw_hdmi *hdmi) | 2008 | static irqreturn_t dw_hdmi_i2c_irq(struct dw_hdmi *hdmi) |
diff --git a/drivers/gpu/drm/drm_property.c b/drivers/gpu/drm/drm_property.c index 3feef0659940..3e88fa24eab3 100644 --- a/drivers/gpu/drm/drm_property.c +++ b/drivers/gpu/drm/drm_property.c | |||
@@ -476,7 +476,7 @@ int drm_mode_getproperty_ioctl(struct drm_device *dev, | |||
476 | drm_property_type_is(property, DRM_MODE_PROP_BITMASK)) { | 476 | drm_property_type_is(property, DRM_MODE_PROP_BITMASK)) { |
477 | list_for_each_entry(prop_enum, &property->enum_list, head) { | 477 | list_for_each_entry(prop_enum, &property->enum_list, head) { |
478 | enum_count++; | 478 | enum_count++; |
479 | if (out_resp->count_enum_blobs <= enum_count) | 479 | if (out_resp->count_enum_blobs < enum_count) |
480 | continue; | 480 | continue; |
481 | 481 | ||
482 | if (copy_to_user(&enum_ptr[copied].value, | 482 | if (copy_to_user(&enum_ptr[copied].value, |