From mboxrd@z Thu Jan 1 00:00:00 1970 From: Shobhit Kumar Subject: [v2 6/7] drm/i915: Use the CRC gpio for panel enable/disable Date: Mon, 22 Jun 2015 16:24:24 +0530 Message-ID: <1434970465-12687-7-git-send-email-shobhit.kumar@intel.com> References: <1434970465-12687-1-git-send-email-shobhit.kumar@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1434970465-12687-1-git-send-email-shobhit.kumar@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: linux-pwm , intel-gfx , linux-kernel , dri-devel , linux-gpio Cc: Alexandre Courbot , Paul Bolle , Samuel Ortiz , Povilas Staniulis , Jani Nikula , Shobhit Kumar , Linus Walleij , Paul Gortmaker , bloften80@gmail.com, David Airlie , Chih-Wei Huang , Thierry Reding , Daniel Vetter , Lee Jones List-Id: linux-gpio@vger.kernel.org VGhlIENSQyAoQ3J5c3RhbCBDb3ZlKSBQTUlDLCBjb250cm9scyB0aGUgcGFuZWwgZW5hYmxlIGFu ZCBkaXNhYmxlCnNpZ25hbHMgZm9yIEJZVCBmb3IgZHNpIHBhbmVscy4gVGhpcyBpcyBpbmRpY2F0 ZWQgaW4gdGhlIFZCVCBmaWVsZHMuIFVzZQp0aGF0IHRvIGluaXRpYWxpemUgYW5kIHVzZSBHUElP IGJhc2VkIGNvbnRyb2wgZm9yIHRoZXNlIHNpZ25hbHMuCgp2MjogVXNlIHRoZSBuZXdlciBncGlv ZCBpbnRlcmZhY2UoQWxleGFuZHJlKQp2MzogUmVtb3ZlIHRoZSByZWR1bmRhbnQgY2hlY2tzIGFu ZCB1bnVzZWQgY29kZSAoVmlsbGUpCnY0OiBNb3ZlZCBQV00gdnMgU29DIGJhY2tsaWdodCAjZGVm aW5lcyB0byBpbnRlbF9iaW9zLmggKEphbmkpCgpDQzogU2FtdWVsIE9ydGl6IDxzYW1lb0BsaW51 eC5pbnRlbC5jb20+CkNjOiBMaW51cyBXYWxsZWlqIDxsaW51cy53YWxsZWlqQGxpbmFyby5vcmc+ CkNjOiBBbGV4YW5kcmUgQ291cmJvdCA8Z251cm91QGdtYWlsLmNvbT4KQ2M6IFRoaWVycnkgUmVk aW5nIDx0aGllcnJ5LnJlZGluZ0BnbWFpbC5jb20+CkFja2VkLWJ5OiBMaW51cyBXYWxsZWlqIDxs aW51cy53YWxsZWlqQGxpbmFyby5vcmc+ClJldmlld2VkLWJ5OiBKYW5pIE5pa3VsYSA8amFuaS5u aWt1bGFAaW50ZWwuY29tPgpTaWduZWQtb2ZmLWJ5OiBTaG9iaGl0IEt1bWFyIDxzaG9iaGl0Lmt1 bWFyQGludGVsLmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9iaW9zLmggfCAg NyArKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kc2kuYyAgfCAzMiArKysrKysr KysrKysrKysrKysrKysrKysrKysrKystLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHNp LmggIHwgIDMgKysrCiAzIGZpbGVzIGNoYW5nZWQsIDQwIGluc2VydGlvbnMoKyksIDIgZGVsZXRp b25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfYmlvcy5oIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfYmlvcy5oCmluZGV4IGFmMGI0NzYuLmY3YWQ2YTUg MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Jpb3MuaAorKysgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9iaW9zLmgKQEAgLTc3OCw2ICs3NzgsMTMgQEAgaW50IGlu dGVsX3BhcnNlX2Jpb3Moc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiAjZGVmaW5lIE1JUElfRFNJ X1VOREVGSU5FRF9QQU5FTF9JRAkwCiAjZGVmaW5lIE1JUElfRFNJX0dFTkVSSUNfUEFORUxfSUQJ MQogCisvKgorICogUE1JQyB2cyBTb0MgQmFja2xpZ2h0IHN1cHBvcnQgc3BlY2lmaWVkIGluIHB3 bV9ibGMKKyAqIGZpZWxkIGluIG1pcGlfY29uZmlnIGJsb2NrIGJlbG93LgorKi8KKyNkZWZpbmUg UFBTX0JMQ19QTUlDICAgMAorI2RlZmluZSBQUFNfQkxDX1NPQyAgICAxCisKIHN0cnVjdCBtaXBp X2NvbmZpZyB7CiAJdTE2IHBhbmVsX2lkOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9kc2kuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RzaS5jCmluZGV4 IGI1YTU1NTguLmM0ZGI3NGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X2RzaS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RzaS5jCkBAIC0zMSw2ICsz MSw3IEBACiAjaW5jbHVkZSA8ZHJtL2RybV9wYW5lbC5oPgogI2luY2x1ZGUgPGRybS9kcm1fbWlw aV9kc2kuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby9j b25zdW1lci5oPgogI2luY2x1ZGUgImk5MTVfZHJ2LmgiCiAjaW5jbHVkZSAiaW50ZWxfZHJ2Lmgi CiAjaW5jbHVkZSAiaW50ZWxfZHNpLmgiCkBAIC00MTUsNiArNDE2LDEyIEBAIHN0YXRpYyB2b2lk IGludGVsX2RzaV9wcmVfZW5hYmxlKHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyKQogCiAJ RFJNX0RFQlVHX0tNUygiXG4iKTsKIAorCS8qIFBhbmVsIEVuYWJsZSBvdmVyIENSQyBQTUlDICov CisJaWYgKGludGVsX2RzaS0+Z3Bpb19wYW5lbCkKKwkJZ3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVw KGludGVsX2RzaS0+Z3Bpb19wYW5lbCwgMSk7CisKKwltc2xlZXAoaW50ZWxfZHNpLT5wYW5lbF9v bl9kZWxheSk7CisKIAkvKiBEaXNhYmxlIERQT3VuaXQgY2xvY2sgZ2F0aW5nLCBjYW4gc3RhbGwg cGlwZQogCSAqIGFuZCB3ZSBuZWVkIERQTEwgUkVGQSBhbHdheXMgZW5hYmxlZCAqLwogCXRtcCA9 IEk5MTVfUkVBRChEUExMKHBpcGUpKTsKQEAgLTQzMiw4ICs0MzksNiBAQCBzdGF0aWMgdm9pZCBp bnRlbF9kc2lfcHJlX2VuYWJsZShzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlcikKIAkvKiBw dXQgZGV2aWNlIGluIHJlYWR5IHN0YXRlICovCiAJaW50ZWxfZHNpX2RldmljZV9yZWFkeShlbmNv ZGVyKTsKIAotCW1zbGVlcChpbnRlbF9kc2ktPnBhbmVsX29uX2RlbGF5KTsKLQogCWRybV9wYW5l bF9wcmVwYXJlKGludGVsX2RzaS0+cGFuZWwpOwogCiAJZm9yX2VhY2hfZHNpX3BvcnQocG9ydCwg aW50ZWxfZHNpLT5wb3J0cykKQEAgLTU3Niw2ICs1ODEsMTAgQEAgc3RhdGljIHZvaWQgaW50ZWxf ZHNpX3Bvc3RfZGlzYWJsZShzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlcikKIAogCW1zbGVl cChpbnRlbF9kc2ktPnBhbmVsX29mZl9kZWxheSk7CiAJbXNsZWVwKGludGVsX2RzaS0+cGFuZWxf cHdyX2N5Y2xlX2RlbGF5KTsKKworCS8qIFBhbmVsIERpc2FibGUgb3ZlciBDUkMgUE1JQyAqLwor CWlmIChpbnRlbF9kc2ktPmdwaW9fcGFuZWwpCisJCWdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChp bnRlbF9kc2ktPmdwaW9fcGFuZWwsIDApOwogfQogCiBzdGF0aWMgYm9vbCBpbnRlbF9kc2lfZ2V0 X2h3X3N0YXRlKHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyLApAQCAtOTU1LDYgKzk2NCwx MSBAQCBzdGF0aWMgdm9pZCBpbnRlbF9kc2lfZW5jb2Rlcl9kZXN0cm95KHN0cnVjdCBkcm1fZW5j b2RlciAqZW5jb2RlcikKIAkJLyogWFhYOiBMb2dpY2FsbHkgdGhpcyBjYWxsIGJlbG9uZ3MgaW4g dGhlIHBhbmVsIGRyaXZlci4gKi8KIAkJZHJtX3BhbmVsX3JlbW92ZShpbnRlbF9kc2ktPnBhbmVs KTsKIAl9CisKKwkvKiBkaXNwb3NlIG9mIHRoZSBncGlvcyAqLworCWlmIChpbnRlbF9kc2ktPmdw aW9fcGFuZWwpCisJCWdwaW9kX3B1dChpbnRlbF9kc2ktPmdwaW9fcGFuZWwpOworCiAJaW50ZWxf ZW5jb2Rlcl9kZXN0cm95KGVuY29kZXIpOwogfQogCkBAIC0xMDcxLDYgKzEwODUsMjAgQEAgdm9p ZCBpbnRlbF9kc2lfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogCQlnb3RvIGVycjsKIAl9 CiAKKwkvKgorCSAqIEluIGNhc2Ugb2YgQllUIHdpdGggQ1JDIFBNSUMsIHdlIG5lZWQgdG8gdXNl IEdQSU8gZm9yCisJICogUGFuZWwgY29udHJvbC4KKwkgKi8KKwlpZiAoZGV2X3ByaXYtPnZidC5k c2kuY29uZmlnLT5wd21fYmxjID09IFBQU19CTENfUE1JQykgeworCQlpbnRlbF9kc2ktPmdwaW9f cGFuZWwgPQorCQkJZ3Bpb2RfZ2V0KGRldi0+ZGV2LCAicGFuZWwiLCBHUElPRF9PVVRfSElHSCk7 CisKKwkJaWYgKElTX0VSUihpbnRlbF9kc2ktPmdwaW9fcGFuZWwpKSB7CisJCQlEUk1fRVJST1Io IkZhaWxlZCB0byBvd24gZ3BpbyBmb3IgcGFuZWwgY29udHJvbFxuIik7CisJCQlpbnRlbF9kc2kt PmdwaW9fcGFuZWwgPSBOVUxMOworCQl9CisJfQorCiAJaW50ZWxfZW5jb2Rlci0+dHlwZSA9IElO VEVMX09VVFBVVF9EU0k7CiAJaW50ZWxfZW5jb2Rlci0+Y2xvbmVhYmxlID0gMDsKIAlkcm1fY29u bmVjdG9yX2luaXQoZGV2LCBjb25uZWN0b3IsICZpbnRlbF9kc2lfY29ubmVjdG9yX2Z1bmNzLApk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHNpLmggYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9kc2kuaAppbmRleCAyNzg0YWM0Li40MmE2ODU5IDEwMDY0NAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kc2kuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9kc2kuaApAQCAtNDIsNiArNDIsOSBAQCBzdHJ1Y3QgaW50ZWxfZHNpIHsKIAlz dHJ1Y3QgZHJtX3BhbmVsICpwYW5lbDsKIAlzdHJ1Y3QgaW50ZWxfZHNpX2hvc3QgKmRzaV9ob3N0 c1tJOTE1X01BWF9QT1JUU107CiAKKwkvKiBHUElPIERlc2MgZm9yIENSQyBiYXNlZCBQYW5lbCBj b250cm9sICovCisJc3RydWN0IGdwaW9fZGVzYyAqZ3Bpb19wYW5lbDsKKwogCXN0cnVjdCBpbnRl bF9jb25uZWN0b3IgKmF0dGFjaGVkX2Nvbm5lY3RvcjsKIAogCS8qIGJpdCBtYXNrIG9mIHBvcnRz IGJlaW5nIGRyaXZlbiAqLwotLSAKMS45LjEKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3Rz LmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlz dGluZm8vaW50ZWwtZ2Z4Cg== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933439AbbFVKzt (ORCPT ); Mon, 22 Jun 2015 06:55:49 -0400 Received: from mga02.intel.com ([134.134.136.20]:57803 "EHLO mga02.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933349AbbFVKzI (ORCPT ); Mon, 22 Jun 2015 06:55:08 -0400 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.13,658,1427785200"; d="scan'208";a="748070826" From: Shobhit Kumar To: linux-pwm , intel-gfx , linux-kernel , dri-devel , linux-gpio Cc: Paul Bolle , Jani Nikula , Samuel Ortiz , Alexandre Courbot , David Airlie , Povilas Staniulis , Chih-Wei Huang , Thierry Reding , Daniel Vetter , Lee Jones , Linus Walleij , Paul Gortmaker , bloften80@gmail.com, Shobhit Kumar Subject: [v2 6/7] drm/i915: Use the CRC gpio for panel enable/disable Date: Mon, 22 Jun 2015 16:24:24 +0530 Message-Id: <1434970465-12687-7-git-send-email-shobhit.kumar@intel.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1434970465-12687-1-git-send-email-shobhit.kumar@intel.com> References: <1434970465-12687-1-git-send-email-shobhit.kumar@intel.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The CRC (Crystal Cove) PMIC, controls the panel enable and disable signals for BYT for dsi panels. This is indicated in the VBT fields. Use that to initialize and use GPIO based control for these signals. v2: Use the newer gpiod interface(Alexandre) v3: Remove the redundant checks and unused code (Ville) v4: Moved PWM vs SoC backlight #defines to intel_bios.h (Jani) CC: Samuel Ortiz Cc: Linus Walleij Cc: Alexandre Courbot Cc: Thierry Reding Acked-by: Linus Walleij Reviewed-by: Jani Nikula Signed-off-by: Shobhit Kumar --- drivers/gpu/drm/i915/intel_bios.h | 7 +++++++ drivers/gpu/drm/i915/intel_dsi.c | 32 ++++++++++++++++++++++++++++++-- drivers/gpu/drm/i915/intel_dsi.h | 3 +++ 3 files changed, 40 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/i915/intel_bios.h b/drivers/gpu/drm/i915/intel_bios.h index af0b476..f7ad6a5 100644 --- a/drivers/gpu/drm/i915/intel_bios.h +++ b/drivers/gpu/drm/i915/intel_bios.h @@ -778,6 +778,13 @@ int intel_parse_bios(struct drm_device *dev); #define MIPI_DSI_UNDEFINED_PANEL_ID 0 #define MIPI_DSI_GENERIC_PANEL_ID 1 +/* + * PMIC vs SoC Backlight support specified in pwm_blc + * field in mipi_config block below. +*/ +#define PPS_BLC_PMIC 0 +#define PPS_BLC_SOC 1 + struct mipi_config { u16 panel_id; diff --git a/drivers/gpu/drm/i915/intel_dsi.c b/drivers/gpu/drm/i915/intel_dsi.c index b5a5558..c4db74a 100644 --- a/drivers/gpu/drm/i915/intel_dsi.c +++ b/drivers/gpu/drm/i915/intel_dsi.c @@ -31,6 +31,7 @@ #include #include #include +#include #include "i915_drv.h" #include "intel_drv.h" #include "intel_dsi.h" @@ -415,6 +416,12 @@ static void intel_dsi_pre_enable(struct intel_encoder *encoder) DRM_DEBUG_KMS("\n"); + /* Panel Enable over CRC PMIC */ + if (intel_dsi->gpio_panel) + gpiod_set_value_cansleep(intel_dsi->gpio_panel, 1); + + msleep(intel_dsi->panel_on_delay); + /* Disable DPOunit clock gating, can stall pipe * and we need DPLL REFA always enabled */ tmp = I915_READ(DPLL(pipe)); @@ -432,8 +439,6 @@ static void intel_dsi_pre_enable(struct intel_encoder *encoder) /* put device in ready state */ intel_dsi_device_ready(encoder); - msleep(intel_dsi->panel_on_delay); - drm_panel_prepare(intel_dsi->panel); for_each_dsi_port(port, intel_dsi->ports) @@ -576,6 +581,10 @@ static void intel_dsi_post_disable(struct intel_encoder *encoder) msleep(intel_dsi->panel_off_delay); msleep(intel_dsi->panel_pwr_cycle_delay); + + /* Panel Disable over CRC PMIC */ + if (intel_dsi->gpio_panel) + gpiod_set_value_cansleep(intel_dsi->gpio_panel, 0); } static bool intel_dsi_get_hw_state(struct intel_encoder *encoder, @@ -955,6 +964,11 @@ static void intel_dsi_encoder_destroy(struct drm_encoder *encoder) /* XXX: Logically this call belongs in the panel driver. */ drm_panel_remove(intel_dsi->panel); } + + /* dispose of the gpios */ + if (intel_dsi->gpio_panel) + gpiod_put(intel_dsi->gpio_panel); + intel_encoder_destroy(encoder); } @@ -1071,6 +1085,20 @@ void intel_dsi_init(struct drm_device *dev) goto err; } + /* + * In case of BYT with CRC PMIC, we need to use GPIO for + * Panel control. + */ + if (dev_priv->vbt.dsi.config->pwm_blc == PPS_BLC_PMIC) { + intel_dsi->gpio_panel = + gpiod_get(dev->dev, "panel", GPIOD_OUT_HIGH); + + if (IS_ERR(intel_dsi->gpio_panel)) { + DRM_ERROR("Failed to own gpio for panel control\n"); + intel_dsi->gpio_panel = NULL; + } + } + intel_encoder->type = INTEL_OUTPUT_DSI; intel_encoder->cloneable = 0; drm_connector_init(dev, connector, &intel_dsi_connector_funcs, diff --git a/drivers/gpu/drm/i915/intel_dsi.h b/drivers/gpu/drm/i915/intel_dsi.h index 2784ac4..42a6859 100644 --- a/drivers/gpu/drm/i915/intel_dsi.h +++ b/drivers/gpu/drm/i915/intel_dsi.h @@ -42,6 +42,9 @@ struct intel_dsi { struct drm_panel *panel; struct intel_dsi_host *dsi_hosts[I915_MAX_PORTS]; + /* GPIO Desc for CRC based Panel control */ + struct gpio_desc *gpio_panel; + struct intel_connector *attached_connector; /* bit mask of ports being driven */ -- 1.9.1 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in Please read the FAQ at http://www.tux.org/lkml/