From mboxrd@z Thu Jan 1 00:00:00 1970 From: Shobhit Kumar Subject: [v3 6/7] drm/i915: Use the CRC gpio for panel enable/disable Date: Fri, 26 Jun 2015 14:32:09 +0530 Message-ID: <1435309330-50725-7-git-send-email-shobhit.kumar@intel.com> References: <1435309330-50725-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: <1435309330-50725-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 , varkabhadram@gmail.com, 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 aWt1bGFAaW50ZWwuY29tPgpUZXN0ZWQtYnk6IFZpbGxlIFN5cmrDpGzDpCA8dmlsbGUuc3lyamFs YUBsaW51eC5pbnRlbC5jb20+ClNpZ25lZC1vZmYtYnk6IFNob2JoaXQgS3VtYXIgPHNob2JoaXQu a3VtYXJAaW50ZWwuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Jpb3MuaCB8 ICA3ICsrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RzaS5jICB8IDMyICsrKysr KysrKysrKysrKysrKysrKysrKysrKysrKy0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9k c2kuaCAgfCAgMyArKysKIDMgZmlsZXMgY2hhbmdlZCwgNDAgaW5zZXJ0aW9ucygrKSwgMiBkZWxl dGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9iaW9zLmgg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9iaW9zLmgKaW5kZXggYWYwYjQ3Ni4uZjdhZDZh NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfYmlvcy5oCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Jpb3MuaApAQCAtNzc4LDYgKzc3OCwxMyBAQCBpbnQg aW50ZWxfcGFyc2VfYmlvcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKICNkZWZpbmUgTUlQSV9E U0lfVU5ERUZJTkVEX1BBTkVMX0lECTAKICNkZWZpbmUgTUlQSV9EU0lfR0VORVJJQ19QQU5FTF9J RAkxCiAKKy8qCisgKiBQTUlDIHZzIFNvQyBCYWNrbGlnaHQgc3VwcG9ydCBzcGVjaWZpZWQgaW4g cHdtX2JsYworICogZmllbGQgaW4gbWlwaV9jb25maWcgYmxvY2sgYmVsb3cuCisqLworI2RlZmlu ZSBQUFNfQkxDX1BNSUMgICAwCisjZGVmaW5lIFBQU19CTENfU09DICAgIDEKKwogc3RydWN0IG1p cGlfY29uZmlnIHsKIAl1MTYgcGFuZWxfaWQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX2RzaS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHNpLmMKaW5k ZXggYjVhNTU1OC4uYzRkYjc0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfZHNpLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHNpLmMKQEAgLTMxLDYg KzMxLDcgQEAKICNpbmNsdWRlIDxkcm0vZHJtX3BhbmVsLmg+CiAjaW5jbHVkZSA8ZHJtL2RybV9t aXBpX2RzaS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlv L2NvbnN1bWVyLmg+CiAjaW5jbHVkZSAiaTkxNV9kcnYuaCIKICNpbmNsdWRlICJpbnRlbF9kcnYu aCIKICNpbmNsdWRlICJpbnRlbF9kc2kuaCIKQEAgLTQxNSw2ICs0MTYsMTIgQEAgc3RhdGljIHZv aWQgaW50ZWxfZHNpX3ByZV9lbmFibGUoc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIpCiAK IAlEUk1fREVCVUdfS01TKCJcbiIpOwogCisJLyogUGFuZWwgRW5hYmxlIG92ZXIgQ1JDIFBNSUMg Ki8KKwlpZiAoaW50ZWxfZHNpLT5ncGlvX3BhbmVsKQorCQlncGlvZF9zZXRfdmFsdWVfY2Fuc2xl ZXAoaW50ZWxfZHNpLT5ncGlvX3BhbmVsLCAxKTsKKworCW1zbGVlcChpbnRlbF9kc2ktPnBhbmVs X29uX2RlbGF5KTsKKwogCS8qIERpc2FibGUgRFBPdW5pdCBjbG9jayBnYXRpbmcsIGNhbiBzdGFs bCBwaXBlCiAJICogYW5kIHdlIG5lZWQgRFBMTCBSRUZBIGFsd2F5cyBlbmFibGVkICovCiAJdG1w ID0gSTkxNV9SRUFEKERQTEwocGlwZSkpOwpAQCAtNDMyLDggKzQzOSw2IEBAIHN0YXRpYyB2b2lk IGludGVsX2RzaV9wcmVfZW5hYmxlKHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyKQogCS8q IHB1dCBkZXZpY2UgaW4gcmVhZHkgc3RhdGUgKi8KIAlpbnRlbF9kc2lfZGV2aWNlX3JlYWR5KGVu Y29kZXIpOwogCi0JbXNsZWVwKGludGVsX2RzaS0+cGFuZWxfb25fZGVsYXkpOwotCiAJZHJtX3Bh bmVsX3ByZXBhcmUoaW50ZWxfZHNpLT5wYW5lbCk7CiAKIAlmb3JfZWFjaF9kc2lfcG9ydChwb3J0 LCBpbnRlbF9kc2ktPnBvcnRzKQpAQCAtNTc2LDYgKzU4MSwxMCBAQCBzdGF0aWMgdm9pZCBpbnRl bF9kc2lfcG9zdF9kaXNhYmxlKHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyKQogCiAJbXNs ZWVwKGludGVsX2RzaS0+cGFuZWxfb2ZmX2RlbGF5KTsKIAltc2xlZXAoaW50ZWxfZHNpLT5wYW5l bF9wd3JfY3ljbGVfZGVsYXkpOworCisJLyogUGFuZWwgRGlzYWJsZSBvdmVyIENSQyBQTUlDICov CisJaWYgKGludGVsX2RzaS0+Z3Bpb19wYW5lbCkKKwkJZ3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVw KGludGVsX2RzaS0+Z3Bpb19wYW5lbCwgMCk7CiB9CiAKIHN0YXRpYyBib29sIGludGVsX2RzaV9n ZXRfaHdfc3RhdGUoc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIsCkBAIC05NTUsNiArOTY0 LDExIEBAIHN0YXRpYyB2b2lkIGludGVsX2RzaV9lbmNvZGVyX2Rlc3Ryb3koc3RydWN0IGRybV9l bmNvZGVyICplbmNvZGVyKQogCQkvKiBYWFg6IExvZ2ljYWxseSB0aGlzIGNhbGwgYmVsb25ncyBp biB0aGUgcGFuZWwgZHJpdmVyLiAqLwogCQlkcm1fcGFuZWxfcmVtb3ZlKGludGVsX2RzaS0+cGFu ZWwpOwogCX0KKworCS8qIGRpc3Bvc2Ugb2YgdGhlIGdwaW9zICovCisJaWYgKGludGVsX2RzaS0+ Z3Bpb19wYW5lbCkKKwkJZ3Bpb2RfcHV0KGludGVsX2RzaS0+Z3Bpb19wYW5lbCk7CisKIAlpbnRl bF9lbmNvZGVyX2Rlc3Ryb3koZW5jb2Rlcik7CiB9CiAKQEAgLTEwNzEsNiArMTA4NSwyMCBAQCB2 b2lkIGludGVsX2RzaV9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiAJCWdvdG8gZXJyOwog CX0KIAorCS8qCisJICogSW4gY2FzZSBvZiBCWVQgd2l0aCBDUkMgUE1JQywgd2UgbmVlZCB0byB1 c2UgR1BJTyBmb3IKKwkgKiBQYW5lbCBjb250cm9sLgorCSAqLworCWlmIChkZXZfcHJpdi0+dmJ0 LmRzaS5jb25maWctPnB3bV9ibGMgPT0gUFBTX0JMQ19QTUlDKSB7CisJCWludGVsX2RzaS0+Z3Bp b19wYW5lbCA9CisJCQlncGlvZF9nZXQoZGV2LT5kZXYsICJwYW5lbCIsIEdQSU9EX09VVF9ISUdI KTsKKworCQlpZiAoSVNfRVJSKGludGVsX2RzaS0+Z3Bpb19wYW5lbCkpIHsKKwkJCURSTV9FUlJP UigiRmFpbGVkIHRvIG93biBncGlvIGZvciBwYW5lbCBjb250cm9sXG4iKTsKKwkJCWludGVsX2Rz aS0+Z3Bpb19wYW5lbCA9IE5VTEw7CisJCX0KKwl9CisKIAlpbnRlbF9lbmNvZGVyLT50eXBlID0g SU5URUxfT1VUUFVUX0RTSTsKIAlpbnRlbF9lbmNvZGVyLT5jbG9uZWFibGUgPSAwOwogCWRybV9j b25uZWN0b3JfaW5pdChkZXYsIGNvbm5lY3RvciwgJmludGVsX2RzaV9jb25uZWN0b3JfZnVuY3Ms CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kc2kuaCBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX2RzaS5oCmluZGV4IDI3ODRhYzQuLjQyYTY4NTkgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RzaS5oCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX2RzaS5oCkBAIC00Miw2ICs0Miw5IEBAIHN0cnVjdCBpbnRlbF9kc2kgewog CXN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsOwogCXN0cnVjdCBpbnRlbF9kc2lfaG9zdCAqZHNpX2hv c3RzW0k5MTVfTUFYX1BPUlRTXTsKIAorCS8qIEdQSU8gRGVzYyBmb3IgQ1JDIGJhc2VkIFBhbmVs IGNvbnRyb2wgKi8KKwlzdHJ1Y3QgZ3Bpb19kZXNjICpncGlvX3BhbmVsOworCiAJc3RydWN0IGlu dGVsX2Nvbm5lY3RvciAqYXR0YWNoZWRfY29ubmVjdG9yOwogCiAJLyogYml0IG1hc2sgb2YgcG9y dHMgYmVpbmcgZHJpdmVuICovCi0tIAoxLjkuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlz dHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9s aXN0aW5mby9pbnRlbC1nZngK From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752777AbbFZJDo (ORCPT ); Fri, 26 Jun 2015 05:03:44 -0400 Received: from mga09.intel.com ([134.134.136.24]:35956 "EHLO mga09.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751685AbbFZJDB (ORCPT ); Fri, 26 Jun 2015 05:03:01 -0400 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.13,683,1427785200"; d="scan'208";a="718042833" 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, varkabhadram@gmail.com, Shobhit Kumar Subject: [v3 6/7] drm/i915: Use the CRC gpio for panel enable/disable Date: Fri, 26 Jun 2015 14:32:09 +0530 Message-Id: <1435309330-50725-7-git-send-email-shobhit.kumar@intel.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1435309330-50725-1-git-send-email-shobhit.kumar@intel.com> References: <1435309330-50725-1-git-send-email-shobhit.kumar@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 Tested-by: Ville Syrjälä 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