From mboxrd@z Thu Jan 1 00:00:00 1970 From: Eric Anholt Subject: [PATCH 2/6] drm: Add TV connector states to drm_connector_state Date: Tue, 29 Nov 2016 10:41:58 -0800 Message-ID: <20161129184202.10640-3-eric@anholt.net> References: <20161129184202.10640-1-eric@anholt.net> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from anholt.net (anholt.net [50.246.234.109]) by gabe.freedesktop.org (Postfix) with ESMTP id A9C176E4EB for ; Tue, 29 Nov 2016 18:42:06 +0000 (UTC) In-Reply-To: <20161129184202.10640-1-eric@anholt.net> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org Cc: linux-kernel@vger.kernel.org List-Id: dri-devel@lists.freedesktop.org RnJvbTogQm9yaXMgQnJlemlsbG9uIDxib3Jpcy5icmV6aWxsb25AZnJlZS1lbGVjdHJvbnMuY29t PgoKU29tZSBnZW5lcmljIFRWIGNvbm5lY3RvciBwcm9wZXJ0aWVzIGFyZSBleHBvc2VkIGluIGRy bV9tb2RlX2NvbmZpZywgYnV0CnRoZXkgYXJlIGN1cnJlbnRseSBoYW5kbGVkIGluZGVwZW5kZW50 bHkgaW4gZWFjaCBEUk0gZW5jb2RlciBkcml2ZXIuCgpFeHRlbmQgdGhlIGRybV9jb25uZWN0b3Jf c3RhdGUgdG8gc3RvcmUgVFYgcmVsYXRlZCBzdGF0ZXMsIGFuZCBtb2RpZnkgdGhlCmRybV9hdG9t aWNfY29ubmVjdG9yX3tzZXQsZ2V0fV9wcm9wZXJ0eSgpIGhlbHBlcnMgdG8gZmlsbCB0aGUgY29u bmVjdG9yCnN0YXRlIGFjY29yZGluZ2x5LgoKRWFjaCBkcml2ZXIgaXMgdGhlbiByZXNwb25zaWJs ZSBmb3IgY2hlY2tpbmcgYW5kIGFwcGx5aW5nIHRoZSBuZXcgY29uZmlnCmluIGl0cyAtPmF0b21p Y19tb2RlX3tjaGVjayxzZXR9KCkgb3BlcmF0aW9ucy4KClNpZ25lZC1vZmYtYnk6IEJvcmlzIEJy ZXppbGxvbiA8Ym9yaXMuYnJlemlsbG9uQGZyZWUtZWxlY3Ryb25zLmNvbT4KU2lnbmVkLW9mZi1i eTogRXJpYyBBbmhvbHQgPGVyaWNAYW5ob2x0Lm5ldD4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vZHJt X2F0b21pYy5jIHwgNTAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysKIGluY2x1ZGUvZHJtL2RybV9jb25uZWN0b3IuaCAgfCAzMiArKysrKysrKysrKysrKysrKysr KysrKysrKysrCiAyIGZpbGVzIGNoYW5nZWQsIDgyIGluc2VydGlvbnMoKykKCmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vZHJtX2F0b21pYy5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9hdG9t aWMuYwppbmRleCAyMzczOTYwOTQyN2QuLjAyYjA2NjhmNTFlMSAxMDA2NDQKLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2RybV9hdG9taWMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2F0b21pYy5j CkBAIC05ODYsMTIgKzk4NiwzOCBAQCBpbnQgZHJtX2F0b21pY19jb25uZWN0b3Jfc2V0X3Byb3Bl cnR5KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCiAJCSAqIG5vdz8pIGF0b21pYyB3 cml0ZXMgdG8gRFBNUyBwcm9wZXJ0eToKIAkJICovCiAJCXJldHVybiAtRUlOVkFMOworCX0gZWxz ZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT50dl9zZWxlY3Rfc3ViY29ubmVjdG9yX3Byb3BlcnR5 KSB7CisJCXN0YXRlLT50di5zdWJjb25uZWN0b3IgPSB2YWw7CisJfSBlbHNlIGlmIChwcm9wZXJ0 eSA9PSBjb25maWctPnR2X2xlZnRfbWFyZ2luX3Byb3BlcnR5KSB7CisJCXN0YXRlLT50di5tYXJn aW5zLmxlZnQgPSB2YWw7CisJfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPnR2X3JpZ2h0 X21hcmdpbl9wcm9wZXJ0eSkgeworCQlzdGF0ZS0+dHYubWFyZ2lucy5yaWdodCA9IHZhbDsKKwl9 IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+dHZfdG9wX21hcmdpbl9wcm9wZXJ0eSkgewor CQlzdGF0ZS0+dHYubWFyZ2lucy5ib3R0b20gPSB2YWw7CisJfSBlbHNlIGlmIChwcm9wZXJ0eSA9 PSBjb25maWctPnR2X2JvdHRvbV9tYXJnaW5fcHJvcGVydHkpIHsKKwkJc3RhdGUtPnR2Lm1hcmdp bnMucmlnaHQgPSB2YWw7CisJfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPnR2X21vZGVf cHJvcGVydHkpIHsKKwkJc3RhdGUtPnR2Lm1vZGUgPSB2YWw7CisJfSBlbHNlIGlmIChwcm9wZXJ0 eSA9PSBjb25maWctPnR2X2JyaWdodG5lc3NfcHJvcGVydHkpIHsKKwkJc3RhdGUtPnR2LmJyaWdo dG5lc3MgPSB2YWw7CisJfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPnR2X2NvbnRyYXN0 X3Byb3BlcnR5KSB7CisJCXN0YXRlLT50di5jb250cmFzdCA9IHZhbDsKKwl9IGVsc2UgaWYgKHBy b3BlcnR5ID09IGNvbmZpZy0+dHZfZmxpY2tlcl9yZWR1Y3Rpb25fcHJvcGVydHkpIHsKKwkJc3Rh dGUtPnR2LmZsaWNrZXJfcmVkdWN0aW9uID0gdmFsOworCX0gZWxzZSBpZiAocHJvcGVydHkgPT0g Y29uZmlnLT50dl9vdmVyc2Nhbl9wcm9wZXJ0eSkgeworCQlzdGF0ZS0+dHYub3ZlcnNjYW4gPSB2 YWw7CisJfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPnR2X3NhdHVyYXRpb25fcHJvcGVy dHkpIHsKKwkJc3RhdGUtPnR2LnNhdHVyYXRpb24gPSB2YWw7CisJfSBlbHNlIGlmIChwcm9wZXJ0 eSA9PSBjb25maWctPnR2X2h1ZV9wcm9wZXJ0eSkgeworCQlzdGF0ZS0+dHYuaHVlID0gdmFsOwog CX0gZWxzZSBpZiAoY29ubmVjdG9yLT5mdW5jcy0+YXRvbWljX3NldF9wcm9wZXJ0eSkgewogCQly ZXR1cm4gY29ubmVjdG9yLT5mdW5jcy0+YXRvbWljX3NldF9wcm9wZXJ0eShjb25uZWN0b3IsCiAJ CQkJc3RhdGUsIHByb3BlcnR5LCB2YWwpOwogCX0gZWxzZSB7CiAJCXJldHVybiAtRUlOVkFMOwog CX0KKworCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChkcm1fYXRvbWljX2Nvbm5lY3Rvcl9z ZXRfcHJvcGVydHkpOwogCkBAIC0xMDIyLDYgKzEwNDgsMzAgQEAgZHJtX2F0b21pY19jb25uZWN0 b3JfZ2V0X3Byb3BlcnR5KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCiAJCSp2YWwg PSAoc3RhdGUtPmNydGMpID8gc3RhdGUtPmNydGMtPmJhc2UuaWQgOiAwOwogCX0gZWxzZSBpZiAo cHJvcGVydHkgPT0gY29uZmlnLT5kcG1zX3Byb3BlcnR5KSB7CiAJCSp2YWwgPSBjb25uZWN0b3It PmRwbXM7CisJfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPnR2X3NlbGVjdF9zdWJjb25u ZWN0b3JfcHJvcGVydHkpIHsKKwkJKnZhbCA9IHN0YXRlLT50di5zdWJjb25uZWN0b3I7CisJfSBl bHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPnR2X2xlZnRfbWFyZ2luX3Byb3BlcnR5KSB7CisJ CSp2YWwgPSBzdGF0ZS0+dHYubWFyZ2lucy5sZWZ0OworCX0gZWxzZSBpZiAocHJvcGVydHkgPT0g Y29uZmlnLT50dl9yaWdodF9tYXJnaW5fcHJvcGVydHkpIHsKKwkJKnZhbCA9IHN0YXRlLT50di5t YXJnaW5zLnJpZ2h0OworCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT50dl90b3BfbWFy Z2luX3Byb3BlcnR5KSB7CisJCSp2YWwgPSBzdGF0ZS0+dHYubWFyZ2lucy5ib3R0b207CisJfSBl bHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPnR2X2JvdHRvbV9tYXJnaW5fcHJvcGVydHkpIHsK KwkJKnZhbCA9IHN0YXRlLT50di5tYXJnaW5zLnJpZ2h0OworCX0gZWxzZSBpZiAocHJvcGVydHkg PT0gY29uZmlnLT50dl9tb2RlX3Byb3BlcnR5KSB7CisJCSp2YWwgPSBzdGF0ZS0+dHYubW9kZTsK Kwl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+dHZfYnJpZ2h0bmVzc19wcm9wZXJ0eSkg eworCQkqdmFsID0gc3RhdGUtPnR2LmJyaWdodG5lc3M7CisJfSBlbHNlIGlmIChwcm9wZXJ0eSA9 PSBjb25maWctPnR2X2NvbnRyYXN0X3Byb3BlcnR5KSB7CisJCSp2YWwgPSBzdGF0ZS0+dHYuY29u dHJhc3Q7CisJfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPnR2X2ZsaWNrZXJfcmVkdWN0 aW9uX3Byb3BlcnR5KSB7CisJCSp2YWwgPSBzdGF0ZS0+dHYuZmxpY2tlcl9yZWR1Y3Rpb247CisJ fSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPnR2X292ZXJzY2FuX3Byb3BlcnR5KSB7CisJ CSp2YWwgPSBzdGF0ZS0+dHYub3ZlcnNjYW47CisJfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25m aWctPnR2X3NhdHVyYXRpb25fcHJvcGVydHkpIHsKKwkJKnZhbCA9IHN0YXRlLT50di5zYXR1cmF0 aW9uOworCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT50dl9odWVfcHJvcGVydHkpIHsK KwkJKnZhbCA9IHN0YXRlLT50di5odWU7CiAJfSBlbHNlIGlmIChjb25uZWN0b3ItPmZ1bmNzLT5h dG9taWNfZ2V0X3Byb3BlcnR5KSB7CiAJCXJldHVybiBjb25uZWN0b3ItPmZ1bmNzLT5hdG9taWNf Z2V0X3Byb3BlcnR5KGNvbm5lY3RvciwKIAkJCQlzdGF0ZSwgcHJvcGVydHksIHZhbCk7CmRpZmYg LS1naXQgYS9pbmNsdWRlL2RybS9kcm1fY29ubmVjdG9yLmggYi9pbmNsdWRlL2RybS9kcm1fY29u bmVjdG9yLmgKaW5kZXggYWM5ZDdkOGUwZTQzLi4yMzgyZDQ0ZTVmZmYgMTAwNjQ0Ci0tLSBhL2lu Y2x1ZGUvZHJtL2RybV9jb25uZWN0b3IuaAorKysgYi9pbmNsdWRlL2RybS9kcm1fY29ubmVjdG9y LmgKQEAgLTE5NCwxMCArMTk0LDQwIEBAIGludCBkcm1fZGlzcGxheV9pbmZvX3NldF9idXNfZm9y bWF0cyhzdHJ1Y3QgZHJtX2Rpc3BsYXlfaW5mbyAqaW5mbywKIAkJCQkgICAgIHVuc2lnbmVkIGlu dCBudW1fZm9ybWF0cyk7CiAKIC8qKgorICogc3RydWN0IGRybV90dl9jb25uZWN0b3Jfc3RhdGUg LSBUViBjb25uZWN0b3IgcmVsYXRlZCBzdGF0ZXMKKyAqIEBzdWJjb25uZWN0b3I6IHNlbGVjdGVk IHN1YmNvbm5lY3RvcgorICogQG1hcmdpbnM6IGxlZnQvcmlnaHQvdG9wL2JvdHRvbSBtYXJnaW5z CisgKiBAbW9kZTogVFYgbW9kZQorICogQGJyaWdodG5lc3M6IGJyaWdodG5lc3MgaW4gcGVyY2Vu dAorICogQGNvbnRyYXN0OiBjb250cmFzdCBpbiBwZXJjZW50CisgKiBAZmxpY2tlcl9yZWR1Y3Rp b246IGZsaWNrZXIgcmVkdWN0aW9uIGluIHBlcmNlbnQKKyAqIEBvdmVyc2Nhbjogb3ZlcnNjYW4g aW4gcGVyY2VudAorICogQHNhdHVyYXRpb246IHNhdHVyYXRpb24gaW4gcGVyY2VudAorICogQGh1 ZTogaHVlIGluIHBlcmNlbnQKKyAqLworc3RydWN0IGRybV90dl9jb25uZWN0b3Jfc3RhdGUgewor CWludCBzdWJjb25uZWN0b3I7CisJc3RydWN0IHsKKwkJaW50IGxlZnQ7CisJCWludCByaWdodDsK KwkJaW50IHRvcDsKKwkJaW50IGJvdHRvbTsKKwl9IG1hcmdpbnM7CisJaW50IG1vZGU7CisJaW50 IGJyaWdodG5lc3M7CisJaW50IGNvbnRyYXN0OworCWludCBmbGlja2VyX3JlZHVjdGlvbjsKKwlp bnQgb3ZlcnNjYW47CisJaW50IHNhdHVyYXRpb247CisJaW50IGh1ZTsKK307CisKKy8qKgogICog c3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgLSBtdXRhYmxlIGNvbm5lY3RvciBzdGF0ZQogICog QGNvbm5lY3RvcjogYmFja3BvaW50ZXIgdG8gdGhlIGNvbm5lY3RvcgogICogQGJlc3RfZW5jb2Rl cjogY2FuIGJlIHVzZWQgYnkgaGVscGVycyBhbmQgZHJpdmVycyB0byBzZWxlY3QgdGhlIGVuY29k ZXIKICAqIEBzdGF0ZTogYmFja3BvaW50ZXIgdG8gZ2xvYmFsIGRybV9hdG9taWNfc3RhdGUKKyAq IEB0djogVFYgY29ubmVjdG9yIHN0YXRlCiAgKi8KIHN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRl IHsKIAlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOwpAQCAtMjEzLDYgKzI0Myw4IEBA IHN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlIHsKIAlzdHJ1Y3QgZHJtX2VuY29kZXIgKmJlc3Rf ZW5jb2RlcjsKIAogCXN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZTsKKworCXN0cnVjdCBk cm1fdHZfY29ubmVjdG9yX3N0YXRlIHR2OwogfTsKIAogLyoqCi0tIAoyLjEwLjIKCl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5n IGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVk ZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo= From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753016AbcK2SmT (ORCPT ); Tue, 29 Nov 2016 13:42:19 -0500 Received: from anholt.net ([50.246.234.109]:46134 "EHLO anholt.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753640AbcK2SmH (ORCPT ); Tue, 29 Nov 2016 13:42:07 -0500 From: Eric Anholt To: dri-devel@lists.freedesktop.org Cc: linux-kernel@vger.kernel.org, Boris Brezillon , Eric Anholt Subject: [PATCH 2/6] drm: Add TV connector states to drm_connector_state Date: Tue, 29 Nov 2016 10:41:58 -0800 Message-Id: <20161129184202.10640-3-eric@anholt.net> X-Mailer: git-send-email 2.10.2 In-Reply-To: <20161129184202.10640-1-eric@anholt.net> References: <20161129184202.10640-1-eric@anholt.net> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Boris Brezillon Some generic TV connector properties are exposed in drm_mode_config, but they are currently handled independently in each DRM encoder driver. Extend the drm_connector_state to store TV related states, and modify the drm_atomic_connector_{set,get}_property() helpers to fill the connector state accordingly. Each driver is then responsible for checking and applying the new config in its ->atomic_mode_{check,set}() operations. Signed-off-by: Boris Brezillon Signed-off-by: Eric Anholt --- drivers/gpu/drm/drm_atomic.c | 50 ++++++++++++++++++++++++++++++++++++++++++++ include/drm/drm_connector.h | 32 ++++++++++++++++++++++++++++ 2 files changed, 82 insertions(+) diff --git a/drivers/gpu/drm/drm_atomic.c b/drivers/gpu/drm/drm_atomic.c index 23739609427d..02b0668f51e1 100644 --- a/drivers/gpu/drm/drm_atomic.c +++ b/drivers/gpu/drm/drm_atomic.c @@ -986,12 +986,38 @@ int drm_atomic_connector_set_property(struct drm_connector *connector, * now?) atomic writes to DPMS property: */ return -EINVAL; + } else if (property == config->tv_select_subconnector_property) { + state->tv.subconnector = val; + } else if (property == config->tv_left_margin_property) { + state->tv.margins.left = val; + } else if (property == config->tv_right_margin_property) { + state->tv.margins.right = val; + } else if (property == config->tv_top_margin_property) { + state->tv.margins.bottom = val; + } else if (property == config->tv_bottom_margin_property) { + state->tv.margins.right = val; + } else if (property == config->tv_mode_property) { + state->tv.mode = val; + } else if (property == config->tv_brightness_property) { + state->tv.brightness = val; + } else if (property == config->tv_contrast_property) { + state->tv.contrast = val; + } else if (property == config->tv_flicker_reduction_property) { + state->tv.flicker_reduction = val; + } else if (property == config->tv_overscan_property) { + state->tv.overscan = val; + } else if (property == config->tv_saturation_property) { + state->tv.saturation = val; + } else if (property == config->tv_hue_property) { + state->tv.hue = val; } else if (connector->funcs->atomic_set_property) { return connector->funcs->atomic_set_property(connector, state, property, val); } else { return -EINVAL; } + + return 0; } EXPORT_SYMBOL(drm_atomic_connector_set_property); @@ -1022,6 +1048,30 @@ drm_atomic_connector_get_property(struct drm_connector *connector, *val = (state->crtc) ? state->crtc->base.id : 0; } else if (property == config->dpms_property) { *val = connector->dpms; + } else if (property == config->tv_select_subconnector_property) { + *val = state->tv.subconnector; + } else if (property == config->tv_left_margin_property) { + *val = state->tv.margins.left; + } else if (property == config->tv_right_margin_property) { + *val = state->tv.margins.right; + } else if (property == config->tv_top_margin_property) { + *val = state->tv.margins.bottom; + } else if (property == config->tv_bottom_margin_property) { + *val = state->tv.margins.right; + } else if (property == config->tv_mode_property) { + *val = state->tv.mode; + } else if (property == config->tv_brightness_property) { + *val = state->tv.brightness; + } else if (property == config->tv_contrast_property) { + *val = state->tv.contrast; + } else if (property == config->tv_flicker_reduction_property) { + *val = state->tv.flicker_reduction; + } else if (property == config->tv_overscan_property) { + *val = state->tv.overscan; + } else if (property == config->tv_saturation_property) { + *val = state->tv.saturation; + } else if (property == config->tv_hue_property) { + *val = state->tv.hue; } else if (connector->funcs->atomic_get_property) { return connector->funcs->atomic_get_property(connector, state, property, val); diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h index ac9d7d8e0e43..2382d44e5fff 100644 --- a/include/drm/drm_connector.h +++ b/include/drm/drm_connector.h @@ -194,10 +194,40 @@ int drm_display_info_set_bus_formats(struct drm_display_info *info, unsigned int num_formats); /** + * struct drm_tv_connector_state - TV connector related states + * @subconnector: selected subconnector + * @margins: left/right/top/bottom margins + * @mode: TV mode + * @brightness: brightness in percent + * @contrast: contrast in percent + * @flicker_reduction: flicker reduction in percent + * @overscan: overscan in percent + * @saturation: saturation in percent + * @hue: hue in percent + */ +struct drm_tv_connector_state { + int subconnector; + struct { + int left; + int right; + int top; + int bottom; + } margins; + int mode; + int brightness; + int contrast; + int flicker_reduction; + int overscan; + int saturation; + int hue; +}; + +/** * struct drm_connector_state - mutable connector state * @connector: backpointer to the connector * @best_encoder: can be used by helpers and drivers to select the encoder * @state: backpointer to global drm_atomic_state + * @tv: TV connector state */ struct drm_connector_state { struct drm_connector *connector; @@ -213,6 +243,8 @@ struct drm_connector_state { struct drm_encoder *best_encoder; struct drm_atomic_state *state; + + struct drm_tv_connector_state tv; }; /** -- 2.10.2