From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [v3,1/2] USB: quirks: Check device interface LPM capability From: Kyle Williams Message-Id: <20181208014724.951-2-kdgwill@google.com> Date: Fri, 7 Dec 2018 20:47:21 -0500 To: linux-kernel@vger.kernel.org Cc: kdgwill@chromium.org, Greg Kroah-Hartman , Alan Stern , Mathias Nyman , Nicolas Boichat , Jon Flatley , Felipe Balbi , linux-usb@vger.kernel.org List-ID: RnJvbTogS3lsZSBXaWxsaWFtcyA8a2Rnd2lsbEBjaHJvbWl1bS5vcmc+CgpEZXNjcmlwdGlvbjog ZW5hYmxlIHRoZSBhYmlsaXR5IHRvIGRpc2FibGUgTFBNIGZvciBhbGwgZGV2aWNlcyBtYXRjaGVk CmJ5IGludGVyZmFjZSBpbmZvcm1hdGlvbgoKU2lnbmVkLW9mZi1ieTogS3lsZSBXaWxsaWFtcyA8 a2Rnd2lsbEBjaHJvbWl1bS5vcmc+Ci0tLQogZHJpdmVycy91c2IvY29yZS9odWIuYyB8IDg3ICsr KysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQs IDQ4IGluc2VydGlvbnMoKyksIDM5IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMv dXNiL2NvcmUvaHViLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jCmluZGV4IDBmOTM4MWI2OWEz Yi4uOGYzNjZlYzRkMjFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jCisrKyBi L2RyaXZlcnMvdXNiL2NvcmUvaHViLmMKQEAgLTM2NSw2ICszNjUsNTEgQEAgc3RhdGljIHZvaWQg dXNiX3NldF9scG1fcGFyYW1ldGVycyhzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKIAl1c2Jfc2V0 X2xwbV9zZWwodWRldiwgJnVkZXYtPnUyX3BhcmFtcyk7CiB9CiAKKy8qCisgKiBUaGVyZSBhcmUg cmVwb3J0cyBvZiBVU0IgMy4wIGRldmljZXMgdGhhdCBzYXkgdGhleSBzdXBwb3J0IFVTQiAyLjAg TGluayBQTQorICogd2hlbiB0aGV5J3JlIHBsdWdnZWQgaW50byBhIFVTQiAyLjAgcG9ydCwgYnV0 IHRoZXkgZG9uJ3Qgd29yayB3aGVuIExQTSBpcworICogZW5hYmxlZC4KKyAqCisgKiBPbmx5IGVu YWJsZSBVU0IgMi4wIExpbmsgUE0gaWYgdGhlIHBvcnQgaXMgaW50ZXJuYWwgKGhhcmR3aXJlZCks IG9yIHRoZQorICogZGV2aWNlIHNheXMgaXQgc3VwcG9ydHMgdGhlIG5ldyBVU0IgMi4wIExpbmsg UE0gZXJyYXRhIGJ5IHNldHRpbmcgdGhlIEJFU0wKKyAqIHN1cHBvcnQgYml0IGluIHRoZSBCT1Mg ZGVzY3JpcHRvci4KKyAqLworc3RhdGljIHZvaWQgaHViX3NldF9pbml0aWFsX3VzYjJfbHBtX3Bv bGljeShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKK3sKKwlzdHJ1Y3QgdXNiX2h1YiAqaHViID0g dXNiX2h1Yl90b19zdHJ1Y3RfaHViKHVkZXYtPnBhcmVudCk7CisJaW50IGNvbm5lY3RfdHlwZSA9 IFVTQl9QT1JUX0NPTk5FQ1RfVFlQRV9VTktOT1dOOworCisJaWYgKCF1ZGV2LT51c2IyX2h3X2xw bV9jYXBhYmxlIHx8ICF1ZGV2LT5ib3MpCisJCXJldHVybjsKKworCWlmIChodWIpCisJCWNvbm5l Y3RfdHlwZSA9IGh1Yi0+cG9ydHNbdWRldi0+cG9ydG51bSAtIDFdLT5jb25uZWN0X3R5cGU7CisK KwlpZiAoKHVkZXYtPmJvcy0+ZXh0X2NhcC0+Ym1BdHRyaWJ1dGVzICYgY3B1X3RvX2xlMzIoVVNC X0JFU0xfU1VQUE9SVCkpCisJCQl8fCBjb25uZWN0X3R5cGUgPT0gVVNCX1BPUlRfQ09OTkVDVF9U WVBFX0hBUkRfV0lSRUQpIHsKKwkJdWRldi0+dXNiMl9od19scG1fYWxsb3dlZCA9IDE7CisJCXVz Yl9zZXRfdXNiMl9oYXJkd2FyZV9scG0odWRldiwgMSk7CisJfQorfQorCit2b2lkIHVzYl91cGRh dGVfZGV2aWNlX2xwbShzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgdXNiX2RldmljZSAqdWRl dikKK3sKKwlpbnQgcmV0dmFsOworCisJaWYgKHVkZXYtPnd1c2IgPT0gMCAmJiBsZTE2X3RvX2Nw dSh1ZGV2LT5kZXNjcmlwdG9yLmJjZFVTQikgPj0gMHgwMjAxKSB7CisJCXJldHZhbCA9IHVzYl9n ZXRfYm9zX2Rlc2NyaXB0b3IodWRldik7CisJCWlmICghcmV0dmFsKSB7CisJCQl1ZGV2LT5scG1f Y2FwYWJsZSA9IHVzYl9kZXZpY2Vfc3VwcG9ydHNfbHBtKHVkZXYpOworCQkJdXNiX3NldF9scG1f cGFyYW1ldGVycyh1ZGV2KTsKKwkJfQorCX0KKworCS8qIG5vdGlmeSBIQ0QgdGhhdCB3ZSBoYXZl IGEgZGV2aWNlIGNvbm5lY3RlZCBhbmQgYWRkcmVzc2VkICovCisJaWYgKGhjZC0+ZHJpdmVyLT51 cGRhdGVfZGV2aWNlKQorCQloY2QtPmRyaXZlci0+dXBkYXRlX2RldmljZShoY2QsIHVkZXYpOwor CWh1Yl9zZXRfaW5pdGlhbF91c2IyX2xwbV9wb2xpY3kodWRldik7Cit9CisKIC8qIFVTQiAyLjAg c3BlYyBTZWN0aW9uIDExLjI0LjQuNSAqLwogc3RhdGljIGludCBnZXRfaHViX2Rlc2NyaXB0b3Io c3RydWN0IHVzYl9kZXZpY2UgKmhkZXYsCiAJCXN0cnVjdCB1c2JfaHViX2Rlc2NyaXB0b3IgKmRl c2MpCkBAIC0yMjk1LDcgKzIzNDAsNiBAQCBzdGF0aWMgaW50IHVzYl9lbnVtZXJhdGVfZGV2aWNl X290ZyhzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKIAlyZXR1cm4gZXJyOwogfQogCi0KIC8qKgog ICogdXNiX2VudW1lcmF0ZV9kZXZpY2UgLSBSZWFkIGRldmljZSBjb25maWdzL2ludGZzL290ZyAo dXNiY29yZS1pbnRlcm5hbCkKICAqIEB1ZGV2OiBuZXdseSBhZGRyZXNzZWQgZGV2aWNlIChpbiBB RERSRVNTIHN0YXRlKQpAQCAtMjM1MSw2ICsyMzk1LDggQEAgc3RhdGljIGludCB1c2JfZW51bWVy YXRlX2RldmljZShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKIAogCXVzYl9kZXRlY3RfaW50ZXJm YWNlX3F1aXJrcyh1ZGV2KTsKIAorCXVzYl91cGRhdGVfZGV2aWNlX2xwbShoY2QsIHVkZXYpOwor CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ0MDIsMzMgKzQ0NDgsNiBAQCBzdGF0aWMgaW50IGh1Yl9z ZXRfYWRkcmVzcyhzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgaW50IGRldm51bSkKIAlyZXR1cm4g cmV0dmFsOwogfQogCi0vKgotICogVGhlcmUgYXJlIHJlcG9ydHMgb2YgVVNCIDMuMCBkZXZpY2Vz IHRoYXQgc2F5IHRoZXkgc3VwcG9ydCBVU0IgMi4wIExpbmsgUE0KLSAqIHdoZW4gdGhleSdyZSBw bHVnZ2VkIGludG8gYSBVU0IgMi4wIHBvcnQsIGJ1dCB0aGV5IGRvbid0IHdvcmsgd2hlbiBMUE0g aXMKLSAqIGVuYWJsZWQuCi0gKgotICogT25seSBlbmFibGUgVVNCIDIuMCBMaW5rIFBNIGlmIHRo ZSBwb3J0IGlzIGludGVybmFsIChoYXJkd2lyZWQpLCBvciB0aGUKLSAqIGRldmljZSBzYXlzIGl0 IHN1cHBvcnRzIHRoZSBuZXcgVVNCIDIuMCBMaW5rIFBNIGVycmF0YSBieSBzZXR0aW5nIHRoZSBC RVNMCi0gKiBzdXBwb3J0IGJpdCBpbiB0aGUgQk9TIGRlc2NyaXB0b3IuCi0gKi8KLXN0YXRpYyB2 b2lkIGh1Yl9zZXRfaW5pdGlhbF91c2IyX2xwbV9wb2xpY3koc3RydWN0IHVzYl9kZXZpY2UgKnVk ZXYpCi17Ci0Jc3RydWN0IHVzYl9odWIgKmh1YiA9IHVzYl9odWJfdG9fc3RydWN0X2h1Yih1ZGV2 LT5wYXJlbnQpOwotCWludCBjb25uZWN0X3R5cGUgPSBVU0JfUE9SVF9DT05ORUNUX1RZUEVfVU5L Tk9XTjsKLQotCWlmICghdWRldi0+dXNiMl9od19scG1fY2FwYWJsZSB8fCAhdWRldi0+Ym9zKQot CQlyZXR1cm47Ci0KLQlpZiAoaHViKQotCQljb25uZWN0X3R5cGUgPSBodWItPnBvcnRzW3VkZXYt PnBvcnRudW0gLSAxXS0+Y29ubmVjdF90eXBlOwotCi0JaWYgKCh1ZGV2LT5ib3MtPmV4dF9jYXAt PmJtQXR0cmlidXRlcyAmIGNwdV90b19sZTMyKFVTQl9CRVNMX1NVUFBPUlQpKSB8fAotCQkJY29u bmVjdF90eXBlID09IFVTQl9QT1JUX0NPTk5FQ1RfVFlQRV9IQVJEX1dJUkVEKSB7Ci0JCXVkZXYt PnVzYjJfaHdfbHBtX2FsbG93ZWQgPSAxOwotCQl1c2Jfc2V0X3VzYjJfaGFyZHdhcmVfbHBtKHVk ZXYsIDEpOwotCX0KLX0KLQogc3RhdGljIGludCBodWJfZW5hYmxlX2RldmljZShzdHJ1Y3QgdXNi X2RldmljZSAqdWRldikKIHsKIAlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gYnVzX3RvX2hjZCh1ZGV2 LT5idXMpOwpAQCAtNDc3OSwxOSArNDc5OCw5IEBAIGh1Yl9wb3J0X2luaXQoc3RydWN0IHVzYl9o dWIgKmh1Yiwgc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIGludCBwb3J0MSwKIAogCXVzYl9kZXRl Y3RfcXVpcmtzKHVkZXYpOwogCi0JaWYgKHVkZXYtPnd1c2IgPT0gMCAmJiBsZTE2X3RvX2NwdSh1 ZGV2LT5kZXNjcmlwdG9yLmJjZFVTQikgPj0gMHgwMjAxKSB7Ci0JCXJldHZhbCA9IHVzYl9nZXRf Ym9zX2Rlc2NyaXB0b3IodWRldik7Ci0JCWlmICghcmV0dmFsKSB7Ci0JCQl1ZGV2LT5scG1fY2Fw YWJsZSA9IHVzYl9kZXZpY2Vfc3VwcG9ydHNfbHBtKHVkZXYpOwotCQkJdXNiX3NldF9scG1fcGFy YW1ldGVycyh1ZGV2KTsKLQkJfQotCX0KKwl1c2JfdXBkYXRlX2RldmljZV9scG0oaGNkLCB1ZGV2 KTsKIAogCXJldHZhbCA9IDA7Ci0JLyogbm90aWZ5IEhDRCB0aGF0IHdlIGhhdmUgYSBkZXZpY2Ug Y29ubmVjdGVkIGFuZCBhZGRyZXNzZWQgKi8KLQlpZiAoaGNkLT5kcml2ZXItPnVwZGF0ZV9kZXZp Y2UpCi0JCWhjZC0+ZHJpdmVyLT51cGRhdGVfZGV2aWNlKGhjZCwgdWRldik7Ci0JaHViX3NldF9p bml0aWFsX3VzYjJfbHBtX3BvbGljeSh1ZGV2KTsKIGZhaWw6CiAJaWYgKHJldHZhbCkgewogCQlo dWJfcG9ydF9kaXNhYmxlKGh1YiwgcG9ydDEsIDApOwo=