From mboxrd@z Thu Jan 1 00:00:00 1970 From: Shobhit Kumar Subject: [v2 7/7] drm/i915: Backlight control using CRC PMIC based PWM driver Date: Mon, 22 Jun 2015 16:24:25 +0530 Message-ID: <1434970465-12687-8-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 VXNlIHRoZSBDUkMgUFdNIGRldmljZSBpbiBpbnRlbF9wYW5lbC5jIGFuZCBhZGQgbmV3IE1JUEkg YmFja2xpZ2h0CnNwZWNpZmlmYyBjYWxsYmFja3MKCnYyOiBNb2RpZnkgdG8gdXNlIHB3bV9jb25m aWcgY2FsbGJhY2sKdjM6IEFkZHJlc3NlZCBKYW5pJ3MgY29tbWVudHMKICAgIC0gUmVuYW1lZCBh bGwgZnVuY3Rpb24gYXMgcHdtXyogaW5zdGVhZCBvZiB2bHZfKgogICAgLSBDYWxsIGludGVsX3Bh bmVsX2FjdHVhbGx5X3NldF9iYWNrbGlnaHQgaW4gZW5hYmxlIGZ1bmN0aW9uCiAgICAtIFJldHVy biAtRU5PREVWIGluIGNhc2UgcHdtX2dldCBmYWlscwogICAgLSBpbiBjYXNlIHB3bV9jb25maWcg ZXJyb3IgcmV0dXJuIGVycm9yIGNkb2UgZnJvbSBwd21fY29uZmlnCiAgICAtIENsZWFudXAgcHdt IGluIGludGVsX3BhbmVsX2Rlc3Ryb3lfYmFja2xpZ2h0CgpDQzogU2FtdWVsIE9ydGl6IDxzYW1l b0BsaW51eC5pbnRlbC5jb20+CkNjOiBMaW51cyBXYWxsZWlqIDxsaW51cy53YWxsZWlqQGxpbmFy by5vcmc+CkNjOiBBbGV4YW5kcmUgQ291cmJvdCA8Z251cm91QGdtYWlsLmNvbT4KQ2M6IFRoaWVy cnkgUmVkaW5nIDx0aGllcnJ5LnJlZGluZ0BnbWFpbC5jb20+ClNpZ25lZC1vZmYtYnk6IFNob2Jo aXQgS3VtYXIgPHNob2JoaXQua3VtYXJAaW50ZWwuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX2Rydi5oICAgfCAgNCArKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHNp LmMgICB8ICA2ICsrKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcGFuZWwuYyB8IDk1ICsr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tCiAzIGZpbGVzIGNoYW5nZWQsIDEw MCBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgK aW5kZXggMmFmYjMxYS4uNTYxYzE3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKQEAgLTE4 Miw2ICsxODIsMTAgQEAgc3RydWN0IGludGVsX3BhbmVsIHsKIAkJYm9vbCBlbmFibGVkOwogCQli b29sIGNvbWJpbmF0aW9uX21vZGU7CS8qIGdlbiAyLzQgb25seSAqLwogCQlib29sIGFjdGl2ZV9s b3dfcHdtOworCisJCS8qIFBXTSBjaGlwICovCisJCXN0cnVjdCBwd21fZGV2aWNlICpwd207CisK IAkJc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmRldmljZTsKIAl9IGJhY2tsaWdodDsKIApkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHNpLmMgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9kc2kuYwppbmRleCBjNGRiNzRhLi5iZTg3MjJjIDEwMDY0NAotLS0gYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kc2kuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9kc2kuYwpAQCAtNDAyLDYgKzQwMiw4IEBAIHN0YXRpYyB2b2lkIGludGVsX2RzaV9l bmFibGUoc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIpCiAKIAkJaW50ZWxfZHNpX3BvcnRf ZW5hYmxlKGVuY29kZXIpOwogCX0KKworCWludGVsX3BhbmVsX2VuYWJsZV9iYWNrbGlnaHQoaW50 ZWxfZHNpLT5hdHRhY2hlZF9jb25uZWN0b3IpOwogfQogCiBzdGF0aWMgdm9pZCBpbnRlbF9kc2lf cHJlX2VuYWJsZShzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlcikKQEAgLTQ2Niw2ICs0Njgs OCBAQCBzdGF0aWMgdm9pZCBpbnRlbF9kc2lfcHJlX2Rpc2FibGUoc3RydWN0IGludGVsX2VuY29k ZXIgKmVuY29kZXIpCiAKIAlEUk1fREVCVUdfS01TKCJcbiIpOwogCisJaW50ZWxfcGFuZWxfZGlz YWJsZV9iYWNrbGlnaHQoaW50ZWxfZHNpLT5hdHRhY2hlZF9jb25uZWN0b3IpOworCiAJaWYgKGlz X3ZpZF9tb2RlKGludGVsX2RzaSkpIHsKIAkJLyogU2VuZCBTaHV0ZG93biBjb21tYW5kIHRvIHRo ZSBwYW5lbCBpbiBMUCBtb2RlICovCiAJCWZvcl9lYWNoX2RzaV9wb3J0KHBvcnQsIGludGVsX2Rz aS0+cG9ydHMpCkBAIC0xMTMyLDYgKzExMzYsOCBAQCB2b2lkIGludGVsX2RzaV9pbml0KHN0cnVj dCBkcm1fZGV2aWNlICpkZXYpCiAJfQogCiAJaW50ZWxfcGFuZWxfaW5pdCgmaW50ZWxfY29ubmVj dG9yLT5wYW5lbCwgZml4ZWRfbW9kZSwgTlVMTCk7CisJaW50ZWxfcGFuZWxfc2V0dXBfYmFja2xp Z2h0KGNvbm5lY3RvciwKKwkJKGludGVsX2VuY29kZXItPmNydGNfbWFzayA9ICgxIDw8IFBJUEVf QSkpID8gUElQRV9BIDogUElQRV9CKTsKIAogCXJldHVybjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfcGFuZWwuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X3BhbmVsLmMKaW5kZXggN2Q4MzUyNy4uMmFhMzBkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfcGFuZWwuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9w YW5lbC5jCkBAIC0zMiw4ICszMiwxMiBAQAogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAj aW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9wd20uaD4KICNp bmNsdWRlICJpbnRlbF9kcnYuaCIKIAorI2RlZmluZSBDUkNfUE1JQ19QV01fUEVSSU9EX05TCTIx MzMzCisjZGVmaW5lIENSQ19QTUlDX1BXTV9TVEVQUwkyNTUKKwogdm9pZAogaW50ZWxfZml4ZWRf cGFuZWxfbW9kZShjb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqZml4ZWRfbW9kZSwKIAkJ ICAgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlKQpAQCAtNTQ0LDYg KzU0OCwxNSBAQCBzdGF0aWMgdTMyIGJ4dF9nZXRfYmFja2xpZ2h0KHN0cnVjdCBpbnRlbF9jb25u ZWN0b3IgKmNvbm5lY3RvcikKIAlyZXR1cm4gSTkxNV9SRUFEKEJYVF9CTENfUFdNX0RVVFkxKTsK IH0KIAorc3RhdGljIHUzMiBwd21fZ2V0X2JhY2tsaWdodChzdHJ1Y3QgaW50ZWxfY29ubmVjdG9y ICpjb25uZWN0b3IpCit7CisJc3RydWN0IGludGVsX3BhbmVsICpwYW5lbCA9ICZjb25uZWN0b3It PnBhbmVsOworCWludCBkdXR5X25zOworCisJZHV0eV9ucyA9IHB3bV9nZXRfZHV0eV9jeWNsZShw YW5lbC0+YmFja2xpZ2h0LnB3bSk7CisJcmV0dXJuIERJVl9ST1VORF9VUChkdXR5X25zICogMTAw LCBDUkNfUE1JQ19QV01fUEVSSU9EX05TKTsKK30KKwogc3RhdGljIHUzMiBpbnRlbF9wYW5lbF9n ZXRfYmFja2xpZ2h0KHN0cnVjdCBpbnRlbF9jb25uZWN0b3IgKmNvbm5lY3RvcikKIHsKIAlzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2ID0gY29ubmVjdG9yLT5iYXNlLmRldjsKQEAgLTYzMiw2ICs2NDUs MTQgQEAgc3RhdGljIHZvaWQgYnh0X3NldF9iYWNrbGlnaHQoc3RydWN0IGludGVsX2Nvbm5lY3Rv ciAqY29ubmVjdG9yLCB1MzIgbGV2ZWwpCiAJSTkxNV9XUklURShCWFRfQkxDX1BXTV9EVVRZMSwg bGV2ZWwpOwogfQogCitzdGF0aWMgdm9pZCBwd21fc2V0X2JhY2tsaWdodChzdHJ1Y3QgaW50ZWxf Y29ubmVjdG9yICpjb25uZWN0b3IsIHUzMiBsZXZlbCkKK3sKKwlzdHJ1Y3QgaW50ZWxfcGFuZWwg KnBhbmVsID0gJmNvbm5lY3Rvci0+cGFuZWw7CisJaW50IGR1dHlfbnMgPSBESVZfUk9VTkRfVVAo bGV2ZWwgKiBDUkNfUE1JQ19QV01fUEVSSU9EX05TLCAxMDApOworCisJcHdtX2NvbmZpZyhwYW5l bC0+YmFja2xpZ2h0LnB3bSwgZHV0eV9ucywgQ1JDX1BNSUNfUFdNX1BFUklPRF9OUyk7Cit9CisK IHN0YXRpYyB2b2lkCiBpbnRlbF9wYW5lbF9hY3R1YWxseV9zZXRfYmFja2xpZ2h0KHN0cnVjdCBp bnRlbF9jb25uZWN0b3IgKmNvbm5lY3RvciwgdTMyIGxldmVsKQogewpAQCAtNzY5LDYgKzc5MCwx NiBAQCBzdGF0aWMgdm9pZCBieHRfZGlzYWJsZV9iYWNrbGlnaHQoc3RydWN0IGludGVsX2Nvbm5l Y3RvciAqY29ubmVjdG9yKQogCUk5MTVfV1JJVEUoQlhUX0JMQ19QV01fQ1RMMSwgdG1wICYgfkJY VF9CTENfUFdNX0VOQUJMRSk7CiB9CiAKK3N0YXRpYyB2b2lkIHB3bV9kaXNhYmxlX2JhY2tsaWdo dChzdHJ1Y3QgaW50ZWxfY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJc3RydWN0IGludGVsX3Bh bmVsICpwYW5lbCA9ICZjb25uZWN0b3ItPnBhbmVsOworCisJLyogRGlzYWJsZSB0aGUgYmFja2xp Z2h0ICovCisJcHdtX2NvbmZpZyhwYW5lbC0+YmFja2xpZ2h0LnB3bSwgMCwgQ1JDX1BNSUNfUFdN X1BFUklPRF9OUyk7CisJdXNsZWVwX3JhbmdlKDIwMDAsIDMwMDApOworCXB3bV9kaXNhYmxlKHBh bmVsLT5iYWNrbGlnaHQucHdtKTsKK30KKwogdm9pZCBpbnRlbF9wYW5lbF9kaXNhYmxlX2JhY2ts aWdodChzdHJ1Y3QgaW50ZWxfY29ubmVjdG9yICpjb25uZWN0b3IpCiB7CiAJc3RydWN0IGRybV9k ZXZpY2UgKmRldiA9IGNvbm5lY3Rvci0+YmFzZS5kZXY7CkBAIC0xMDAyLDYgKzEwMzMsMTQgQEAg c3RhdGljIHZvaWQgYnh0X2VuYWJsZV9iYWNrbGlnaHQoc3RydWN0IGludGVsX2Nvbm5lY3RvciAq Y29ubmVjdG9yKQogCUk5MTVfV1JJVEUoQlhUX0JMQ19QV01fQ1RMMSwgcHdtX2N0bCB8IEJYVF9C TENfUFdNX0VOQUJMRSk7CiB9CiAKK3N0YXRpYyB2b2lkIHB3bV9lbmFibGVfYmFja2xpZ2h0KHN0 cnVjdCBpbnRlbF9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlzdHJ1Y3QgaW50ZWxfcGFuZWwg KnBhbmVsID0gJmNvbm5lY3Rvci0+cGFuZWw7CisKKwlwd21fZW5hYmxlKHBhbmVsLT5iYWNrbGln aHQucHdtKTsKKwlpbnRlbF9wYW5lbF9hY3R1YWxseV9zZXRfYmFja2xpZ2h0KGNvbm5lY3Rvciwg cGFuZWwtPmJhY2tsaWdodC5sZXZlbCk7Cit9CisKIHZvaWQgaW50ZWxfcGFuZWxfZW5hYmxlX2Jh Y2tsaWdodChzdHJ1Y3QgaW50ZWxfY29ubmVjdG9yICpjb25uZWN0b3IpCiB7CiAJc3RydWN0IGRy bV9kZXZpY2UgKmRldiA9IGNvbm5lY3Rvci0+YmFzZS5kZXY7CkBAIC0xMzc4LDYgKzE0MTcsNDAg QEAgYnh0X3NldHVwX2JhY2tsaWdodChzdHJ1Y3QgaW50ZWxfY29ubmVjdG9yICpjb25uZWN0b3Is IGVudW0gcGlwZSB1bnVzZWQpCiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgcHdtX3NldHVw X2JhY2tsaWdodChzdHJ1Y3QgaW50ZWxfY29ubmVjdG9yICpjb25uZWN0b3IsCisJCQkgICAgICAg ZW51bSBwaXBlIHBpcGUpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNvbm5lY3Rvci0+ YmFzZS5kZXY7CisJc3RydWN0IGludGVsX3BhbmVsICpwYW5lbCA9ICZjb25uZWN0b3ItPnBhbmVs OworCWludCByZXR2YWwgPSAtMTsKKworCS8qIEdldCB0aGUgUFdNIGNoaXAgZm9yIGJhY2tsaWdo dCBjb250cm9sICovCisJcGFuZWwtPmJhY2tsaWdodC5wd20gPSBwd21fZ2V0KGRldi0+ZGV2LCAi cHdtX2JhY2tsaWdodCIpOworCWlmIChJU19FUlIocGFuZWwtPmJhY2tsaWdodC5wd20pKSB7CisJ CURSTV9FUlJPUigiRmFpbGVkIHRvIG93biB0aGUgcHdtIGNoaXBcbiIpOworCQlwYW5lbC0+YmFj a2xpZ2h0LnB3bSA9IE5VTEw7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXJldHZhbCA9IHB3 bV9jb25maWcocGFuZWwtPmJhY2tsaWdodC5wd20sIENSQ19QTUlDX1BXTV9QRVJJT0RfTlMsCisJ CQkgICAgQ1JDX1BNSUNfUFdNX1BFUklPRF9OUyk7CisJaWYgKHJldHZhbCA8IDApIHsKKwkJRFJN X0VSUk9SKCJGYWlsZWQgdG8gY29uZmlndXJlIHRoZSBwd20gY2hpcFxuIik7CisJCXB3bV9wdXQo cGFuZWwtPmJhY2tsaWdodC5wd20pOworCQlwYW5lbC0+YmFja2xpZ2h0LnB3bSA9IE5VTEw7CisJ CXJldHVybiByZXR2YWw7CisJfQorCisJcGFuZWwtPmJhY2tsaWdodC5taW4gPSAwOyAvKiAwJSAq LworCXBhbmVsLT5iYWNrbGlnaHQubWF4ID0gMTAwOyAvKiAxMDAlICovCisJcGFuZWwtPmJhY2ts aWdodC5sZXZlbCA9IERJVl9ST1VORF9VUCgKKwkJCQkgcHdtX2dldF9kdXR5X2N5Y2xlKHBhbmVs LT5iYWNrbGlnaHQucHdtKSAqIDEwMCwKKwkJCQkgQ1JDX1BNSUNfUFdNX1BFUklPRF9OUyk7CisJ cGFuZWwtPmJhY2tsaWdodC5lbmFibGVkID0gcGFuZWwtPmJhY2tsaWdodC5sZXZlbCAhPSAwOwor CisJcmV0dXJuIDA7Cit9CisKIGludCBpbnRlbF9wYW5lbF9zZXR1cF9iYWNrbGlnaHQoc3RydWN0 IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwgZW51bSBwaXBlIHBpcGUpCiB7CiAJc3RydWN0IGRy bV9kZXZpY2UgKmRldiA9IGNvbm5lY3Rvci0+ZGV2OwpAQCAtMTQyMSw2ICsxNDk0LDEwIEBAIHZv aWQgaW50ZWxfcGFuZWxfZGVzdHJveV9iYWNrbGlnaHQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNv bm5lY3RvcikKIAlzdHJ1Y3QgaW50ZWxfY29ubmVjdG9yICppbnRlbF9jb25uZWN0b3IgPSB0b19p bnRlbF9jb25uZWN0b3IoY29ubmVjdG9yKTsKIAlzdHJ1Y3QgaW50ZWxfcGFuZWwgKnBhbmVsID0g JmludGVsX2Nvbm5lY3Rvci0+cGFuZWw7CiAKKwkvKiBkaXNwb3NlIG9mIHRoZSBwd20gKi8KKwlp ZiAocGFuZWwtPmJhY2tsaWdodC5wd20pCisJCXB3bV9wdXQocGFuZWwtPmJhY2tsaWdodC5wd20p OworCiAJcGFuZWwtPmJhY2tsaWdodC5wcmVzZW50ID0gZmFsc2U7CiB9CiAKQEAgLTE0NDgsMTEg KzE1MjUsMTkgQEAgdm9pZCBpbnRlbF9wYW5lbF9pbml0X2JhY2tsaWdodF9mdW5jcyhzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2KQogCQlkZXZfcHJpdi0+ZGlzcGxheS5zZXRfYmFja2xpZ2h0ID0gcGNo X3NldF9iYWNrbGlnaHQ7CiAJCWRldl9wcml2LT5kaXNwbGF5LmdldF9iYWNrbGlnaHQgPSBwY2hf Z2V0X2JhY2tsaWdodDsKIAl9IGVsc2UgaWYgKElTX1ZBTExFWVZJRVcoZGV2KSkgewotCQlkZXZf cHJpdi0+ZGlzcGxheS5zZXR1cF9iYWNrbGlnaHQgPSB2bHZfc2V0dXBfYmFja2xpZ2h0OwotCQlk ZXZfcHJpdi0+ZGlzcGxheS5lbmFibGVfYmFja2xpZ2h0ID0gdmx2X2VuYWJsZV9iYWNrbGlnaHQ7 Ci0JCWRldl9wcml2LT5kaXNwbGF5LmRpc2FibGVfYmFja2xpZ2h0ID0gdmx2X2Rpc2FibGVfYmFj a2xpZ2h0OwotCQlkZXZfcHJpdi0+ZGlzcGxheS5zZXRfYmFja2xpZ2h0ID0gdmx2X3NldF9iYWNr bGlnaHQ7Ci0JCWRldl9wcml2LT5kaXNwbGF5LmdldF9iYWNrbGlnaHQgPSB2bHZfZ2V0X2JhY2ts aWdodDsKKwkJaWYgKGRldl9wcml2LT52YnQuaGFzX21pcGkpIHsKKwkJCWRldl9wcml2LT5kaXNw bGF5LnNldHVwX2JhY2tsaWdodCA9IHB3bV9zZXR1cF9iYWNrbGlnaHQ7CisJCQlkZXZfcHJpdi0+ ZGlzcGxheS5lbmFibGVfYmFja2xpZ2h0ID0gcHdtX2VuYWJsZV9iYWNrbGlnaHQ7CisJCQlkZXZf cHJpdi0+ZGlzcGxheS5kaXNhYmxlX2JhY2tsaWdodCA9IHB3bV9kaXNhYmxlX2JhY2tsaWdodDsK KwkJCWRldl9wcml2LT5kaXNwbGF5LnNldF9iYWNrbGlnaHQgPSBwd21fc2V0X2JhY2tsaWdodDsK KwkJCWRldl9wcml2LT5kaXNwbGF5LmdldF9iYWNrbGlnaHQgPSBwd21fZ2V0X2JhY2tsaWdodDsK KwkJfSBlbHNlIHsKKwkJCWRldl9wcml2LT5kaXNwbGF5LnNldHVwX2JhY2tsaWdodCA9IHZsdl9z ZXR1cF9iYWNrbGlnaHQ7CisJCQlkZXZfcHJpdi0+ZGlzcGxheS5lbmFibGVfYmFja2xpZ2h0ID0g dmx2X2VuYWJsZV9iYWNrbGlnaHQ7CisJCQlkZXZfcHJpdi0+ZGlzcGxheS5kaXNhYmxlX2JhY2ts aWdodCA9IHZsdl9kaXNhYmxlX2JhY2tsaWdodDsKKwkJCWRldl9wcml2LT5kaXNwbGF5LnNldF9i YWNrbGlnaHQgPSB2bHZfc2V0X2JhY2tsaWdodDsKKwkJCWRldl9wcml2LT5kaXNwbGF5LmdldF9i YWNrbGlnaHQgPSB2bHZfZ2V0X2JhY2tsaWdodDsKKwkJfQogCX0gZWxzZSBpZiAoSVNfR0VONChk ZXYpKSB7CiAJCWRldl9wcml2LT5kaXNwbGF5LnNldHVwX2JhY2tsaWdodCA9IGk5NjVfc2V0dXBf YmFja2xpZ2h0OwogCQlkZXZfcHJpdi0+ZGlzcGxheS5lbmFibGVfYmFja2xpZ2h0ID0gaTk2NV9l bmFibGVfYmFja2xpZ2h0OwotLSAKMS45LjEKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f 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 S933457AbbFVKz6 (ORCPT ); Mon, 22 Jun 2015 06:55:58 -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 S933350AbbFVKzN (ORCPT ); Mon, 22 Jun 2015 06:55:13 -0400 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.13,658,1427785200"; d="scan'208";a="748070861" 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 7/7] drm/i915: Backlight control using CRC PMIC based PWM driver Date: Mon, 22 Jun 2015 16:24:25 +0530 Message-Id: <1434970465-12687-8-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 Use the CRC PWM device in intel_panel.c and add new MIPI backlight specififc callbacks v2: Modify to use pwm_config callback v3: Addressed Jani's comments - Renamed all function as pwm_* instead of vlv_* - Call intel_panel_actually_set_backlight in enable function - Return -ENODEV in case pwm_get fails - in case pwm_config error return error cdoe from pwm_config - Cleanup pwm in intel_panel_destroy_backlight CC: Samuel Ortiz Cc: Linus Walleij Cc: Alexandre Courbot Cc: Thierry Reding Signed-off-by: Shobhit Kumar --- drivers/gpu/drm/i915/intel_drv.h | 4 ++ drivers/gpu/drm/i915/intel_dsi.c | 6 +++ drivers/gpu/drm/i915/intel_panel.c | 95 ++++++++++++++++++++++++++++++++++++-- 3 files changed, 100 insertions(+), 5 deletions(-) diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h index 2afb31a..561c17f 100644 --- a/drivers/gpu/drm/i915/intel_drv.h +++ b/drivers/gpu/drm/i915/intel_drv.h @@ -182,6 +182,10 @@ struct intel_panel { bool enabled; bool combination_mode; /* gen 2/4 only */ bool active_low_pwm; + + /* PWM chip */ + struct pwm_device *pwm; + struct backlight_device *device; } backlight; diff --git a/drivers/gpu/drm/i915/intel_dsi.c b/drivers/gpu/drm/i915/intel_dsi.c index c4db74a..be8722c 100644 --- a/drivers/gpu/drm/i915/intel_dsi.c +++ b/drivers/gpu/drm/i915/intel_dsi.c @@ -402,6 +402,8 @@ static void intel_dsi_enable(struct intel_encoder *encoder) intel_dsi_port_enable(encoder); } + + intel_panel_enable_backlight(intel_dsi->attached_connector); } static void intel_dsi_pre_enable(struct intel_encoder *encoder) @@ -466,6 +468,8 @@ static void intel_dsi_pre_disable(struct intel_encoder *encoder) DRM_DEBUG_KMS("\n"); + intel_panel_disable_backlight(intel_dsi->attached_connector); + if (is_vid_mode(intel_dsi)) { /* Send Shutdown command to the panel in LP mode */ for_each_dsi_port(port, intel_dsi->ports) @@ -1132,6 +1136,8 @@ void intel_dsi_init(struct drm_device *dev) } intel_panel_init(&intel_connector->panel, fixed_mode, NULL); + intel_panel_setup_backlight(connector, + (intel_encoder->crtc_mask = (1 << PIPE_A)) ? PIPE_A : PIPE_B); return; diff --git a/drivers/gpu/drm/i915/intel_panel.c b/drivers/gpu/drm/i915/intel_panel.c index 7d83527..2aa30db 100644 --- a/drivers/gpu/drm/i915/intel_panel.c +++ b/drivers/gpu/drm/i915/intel_panel.c @@ -32,8 +32,12 @@ #include #include +#include #include "intel_drv.h" +#define CRC_PMIC_PWM_PERIOD_NS 21333 +#define CRC_PMIC_PWM_STEPS 255 + void intel_fixed_panel_mode(const struct drm_display_mode *fixed_mode, struct drm_display_mode *adjusted_mode) @@ -544,6 +548,15 @@ static u32 bxt_get_backlight(struct intel_connector *connector) return I915_READ(BXT_BLC_PWM_DUTY1); } +static u32 pwm_get_backlight(struct intel_connector *connector) +{ + struct intel_panel *panel = &connector->panel; + int duty_ns; + + duty_ns = pwm_get_duty_cycle(panel->backlight.pwm); + return DIV_ROUND_UP(duty_ns * 100, CRC_PMIC_PWM_PERIOD_NS); +} + static u32 intel_panel_get_backlight(struct intel_connector *connector) { struct drm_device *dev = connector->base.dev; @@ -632,6 +645,14 @@ static void bxt_set_backlight(struct intel_connector *connector, u32 level) I915_WRITE(BXT_BLC_PWM_DUTY1, level); } +static void pwm_set_backlight(struct intel_connector *connector, u32 level) +{ + struct intel_panel *panel = &connector->panel; + int duty_ns = DIV_ROUND_UP(level * CRC_PMIC_PWM_PERIOD_NS, 100); + + pwm_config(panel->backlight.pwm, duty_ns, CRC_PMIC_PWM_PERIOD_NS); +} + static void intel_panel_actually_set_backlight(struct intel_connector *connector, u32 level) { @@ -769,6 +790,16 @@ static void bxt_disable_backlight(struct intel_connector *connector) I915_WRITE(BXT_BLC_PWM_CTL1, tmp & ~BXT_BLC_PWM_ENABLE); } +static void pwm_disable_backlight(struct intel_connector *connector) +{ + struct intel_panel *panel = &connector->panel; + + /* Disable the backlight */ + pwm_config(panel->backlight.pwm, 0, CRC_PMIC_PWM_PERIOD_NS); + usleep_range(2000, 3000); + pwm_disable(panel->backlight.pwm); +} + void intel_panel_disable_backlight(struct intel_connector *connector) { struct drm_device *dev = connector->base.dev; @@ -1002,6 +1033,14 @@ static void bxt_enable_backlight(struct intel_connector *connector) I915_WRITE(BXT_BLC_PWM_CTL1, pwm_ctl | BXT_BLC_PWM_ENABLE); } +static void pwm_enable_backlight(struct intel_connector *connector) +{ + struct intel_panel *panel = &connector->panel; + + pwm_enable(panel->backlight.pwm); + intel_panel_actually_set_backlight(connector, panel->backlight.level); +} + void intel_panel_enable_backlight(struct intel_connector *connector) { struct drm_device *dev = connector->base.dev; @@ -1378,6 +1417,40 @@ bxt_setup_backlight(struct intel_connector *connector, enum pipe unused) return 0; } +static int pwm_setup_backlight(struct intel_connector *connector, + enum pipe pipe) +{ + struct drm_device *dev = connector->base.dev; + struct intel_panel *panel = &connector->panel; + int retval = -1; + + /* Get the PWM chip for backlight control */ + panel->backlight.pwm = pwm_get(dev->dev, "pwm_backlight"); + if (IS_ERR(panel->backlight.pwm)) { + DRM_ERROR("Failed to own the pwm chip\n"); + panel->backlight.pwm = NULL; + return -ENODEV; + } + + retval = pwm_config(panel->backlight.pwm, CRC_PMIC_PWM_PERIOD_NS, + CRC_PMIC_PWM_PERIOD_NS); + if (retval < 0) { + DRM_ERROR("Failed to configure the pwm chip\n"); + pwm_put(panel->backlight.pwm); + panel->backlight.pwm = NULL; + return retval; + } + + panel->backlight.min = 0; /* 0% */ + panel->backlight.max = 100; /* 100% */ + panel->backlight.level = DIV_ROUND_UP( + pwm_get_duty_cycle(panel->backlight.pwm) * 100, + CRC_PMIC_PWM_PERIOD_NS); + panel->backlight.enabled = panel->backlight.level != 0; + + return 0; +} + int intel_panel_setup_backlight(struct drm_connector *connector, enum pipe pipe) { struct drm_device *dev = connector->dev; @@ -1421,6 +1494,10 @@ void intel_panel_destroy_backlight(struct drm_connector *connector) struct intel_connector *intel_connector = to_intel_connector(connector); struct intel_panel *panel = &intel_connector->panel; + /* dispose of the pwm */ + if (panel->backlight.pwm) + pwm_put(panel->backlight.pwm); + panel->backlight.present = false; } @@ -1448,11 +1525,19 @@ void intel_panel_init_backlight_funcs(struct drm_device *dev) dev_priv->display.set_backlight = pch_set_backlight; dev_priv->display.get_backlight = pch_get_backlight; } else if (IS_VALLEYVIEW(dev)) { - dev_priv->display.setup_backlight = vlv_setup_backlight; - dev_priv->display.enable_backlight = vlv_enable_backlight; - dev_priv->display.disable_backlight = vlv_disable_backlight; - dev_priv->display.set_backlight = vlv_set_backlight; - dev_priv->display.get_backlight = vlv_get_backlight; + if (dev_priv->vbt.has_mipi) { + dev_priv->display.setup_backlight = pwm_setup_backlight; + dev_priv->display.enable_backlight = pwm_enable_backlight; + dev_priv->display.disable_backlight = pwm_disable_backlight; + dev_priv->display.set_backlight = pwm_set_backlight; + dev_priv->display.get_backlight = pwm_get_backlight; + } else { + dev_priv->display.setup_backlight = vlv_setup_backlight; + dev_priv->display.enable_backlight = vlv_enable_backlight; + dev_priv->display.disable_backlight = vlv_disable_backlight; + dev_priv->display.set_backlight = vlv_set_backlight; + dev_priv->display.get_backlight = vlv_get_backlight; + } } else if (IS_GEN4(dev)) { dev_priv->display.setup_backlight = i965_setup_backlight; dev_priv->display.enable_backlight = i965_enable_backlight; -- 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/