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: [RFC,v2,3/3] usb: typec: tcpm: Support for Alternate Modes From: Heikki Krogerus Message-Id: <20180309151918.22048-4-heikki.krogerus@linux.intel.com> Date: Fri, 9 Mar 2018 18:19:18 +0300 To: Greg Kroah-Hartman , Guenter Roeck , Hans de Goede Cc: Jun Li , "Regupathy, Rajaram" , linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org List-ID: VGhpcyBhZGRzIG1vcmUgY29tcGxldGUgaGFuZGxpbmcgb2YgVkRNcyBhbmQgcmVnaXN0cmF0aW9u IG9mCnBhcnRuZXIgYWx0ZXJuYXRlIG1vZGVzLCBhbmQgaW50cm9kdWNlcyBjYWxsYmFja3MgZm9y CmFsdGVybmF0ZSBtb2RlIG9wZXJhdGlvbnMuCgpPbmx5IERGUCByb2xlIGlzIHN1cHBvcnRlZCBm b3Igbm93LgoKU2lnbmVkLW9mZi1ieTogSGVpa2tpIEtyb2dlcnVzIDxoZWlra2kua3JvZ2VydXNA bGludXguaW50ZWwuY29tPgotLS0KIGRyaXZlcnMvdXNiL3R5cGVjL3RjcG0uYyB8IDEzMyArKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLQogMSBmaWxlIGNoYW5n ZWQsIDExMSBpbnNlcnRpb25zKCspLCAyMiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2 ZXJzL3VzYi90eXBlYy90Y3BtLmMgYi9kcml2ZXJzL3VzYi90eXBlYy90Y3BtLmMKaW5kZXggYmZi ODQzZWJmZmE2Li4zNGJmNWMxZjRkODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3R5cGVjL3Rj cG0uYworKysgYi9kcml2ZXJzL3VzYi90eXBlYy90Y3BtLmMKQEAgLTE1OCwxMyArMTU4LDE0IEBA IGVudW0gcGRfbXNnX3JlcXVlc3QgewogLyogQWx0ZXJuYXRlIG1vZGUgc3VwcG9ydCAqLwogCiAj ZGVmaW5lIFNWSURfRElTQ09WRVJZX01BWAkxNgorI2RlZmluZSBBTFRNT0RFX0RJU0NPVkVSWV9N QVgJKFNWSURfRElTQ09WRVJZX01BWCAqIE1PREVfRElTQ09WRVJZX01BWCkKIAogc3RydWN0IHBk X21vZGVfZGF0YSB7CiAJaW50IHN2aWRfaW5kZXg7CQkvKiBjdXJyZW50IFNWSUQgaW5kZXgJCSov CiAJaW50IG5zdmlkczsKIAl1MTYgc3ZpZHNbU1ZJRF9ESVNDT1ZFUllfTUFYXTsKIAlpbnQgYWx0 bW9kZXM7CQkvKiBudW1iZXIgb2YgYWx0ZXJuYXRlIG1vZGVzCSovCi0Jc3RydWN0IHR5cGVjX2Fs dG1vZGVfZGVzYyBhbHRtb2RlX2Rlc2NbU1ZJRF9ESVNDT1ZFUllfTUFYXTsKKwlzdHJ1Y3QgdHlw ZWNfYWx0bW9kZV9kZXNjIGFsdG1vZGVfZGVzY1tBTFRNT0RFX0RJU0NPVkVSWV9NQVhdOwogfTsK IAogc3RydWN0IHRjcG1fcG9ydCB7CkBAIC0yODAsOCArMjgxLDggQEAgc3RydWN0IHRjcG1fcG9y dCB7CiAJLyogQWx0ZXJuYXRlIG1vZGUgZGF0YSAqLwogCiAJc3RydWN0IHBkX21vZGVfZGF0YSBt b2RlX2RhdGE7Ci0Jc3RydWN0IHR5cGVjX2FsdG1vZGUgKnBhcnRuZXJfYWx0bW9kZVtTVklEX0RJ U0NPVkVSWV9NQVggKiA2XTsKLQlzdHJ1Y3QgdHlwZWNfYWx0bW9kZSAqcG9ydF9hbHRtb2RlW1NW SURfRElTQ09WRVJZX01BWCAqIDZdOworCXN0cnVjdCB0eXBlY19hbHRtb2RlICpwYXJ0bmVyX2Fs dG1vZGVbQUxUTU9ERV9ESVNDT1ZFUllfTUFYXTsKKwlzdHJ1Y3QgdHlwZWNfYWx0bW9kZSAqcG9y dF9hbHRtb2RlW0FMVE1PREVfRElTQ09WRVJZX01BWF07CiAKIAkvKiBEZWFkbGluZSBpbiBqaWZm aWVzIHRvIGV4aXQgc3JjX3RyeV93YWl0IHN0YXRlICovCiAJdW5zaWduZWQgbG9uZyBtYXhfd2Fp dDsKQEAgLTk4NSwzNiArOTg2LDUzIEBAIHN0YXRpYyB2b2lkIHN2ZG1fY29uc3VtZV9tb2Rlcyhz dHJ1Y3QgdGNwbV9wb3J0ICpwb3J0LCBjb25zdCBfX2xlMzIgKnBheWxvYWQsCiAJCQkgcG1kYXRh LT5hbHRtb2RlcywgcGFsdG1vZGUtPnN2aWQsCiAJCQkgcGFsdG1vZGUtPm1vZGUsIHBhbHRtb2Rl LT52ZG8pOwogCi0JCXBvcnQtPnBhcnRuZXJfYWx0bW9kZVtwbWRhdGEtPmFsdG1vZGVzXSA9Ci0J CQl0eXBlY19wYXJ0bmVyX3JlZ2lzdGVyX2FsdG1vZGUocG9ydC0+cGFydG5lciwgcGFsdG1vZGUp OwotCQlpZiAoIXBvcnQtPnBhcnRuZXJfYWx0bW9kZVtwbWRhdGEtPmFsdG1vZGVzXSkgewotCQkJ dGNwbV9sb2cocG9ydCwKLQkJCQkgIkZhaWxlZCB0byByZWdpc3RlciBtb2RlcyBmb3IgU1ZJRCAw eCUwNHgiLAotCQkJCSBwYWx0bW9kZS0+c3ZpZCk7Ci0JCQlyZXR1cm47Ci0JCX0KIAkJcG1kYXRh LT5hbHRtb2RlcysrOwogCX0KIH0KIAorc3RhdGljIHZvaWQgdGNwbV9yZWdpc3Rlcl9wYXJ0bmVy X2FsdG1vZGVzKHN0cnVjdCB0Y3BtX3BvcnQgKnBvcnQpCit7CisJc3RydWN0IHBkX21vZGVfZGF0 YSAqbW9kZXAgPSAmcG9ydC0+bW9kZV9kYXRhOworCXN0cnVjdCB0eXBlY19hbHRtb2RlICphbHRt b2RlOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IG1vZGVwLT5hbHRtb2RlczsgaSsrKSB7 CisJCWFsdG1vZGUgPSB0eXBlY19wYXJ0bmVyX3JlZ2lzdGVyX2FsdG1vZGUocG9ydC0+cGFydG5l ciwKKwkJCQkJCSZtb2RlcC0+YWx0bW9kZV9kZXNjW2ldKTsKKwkJaWYgKCFhbHRtb2RlKQorCQkJ dGNwbV9sb2cocG9ydCwgIkZhaWxlZCB0byByZWdpc3RlciBwYXJ0bmVyIFNWSUQgMHglMDR4IiwK KwkJCQkgbW9kZXAtPmFsdG1vZGVfZGVzY1tpXS5zdmlkKTsKKwkJcG9ydC0+cGFydG5lcl9hbHRt b2RlW2ldID0gYWx0bW9kZTsKKwl9Cit9CisKICNkZWZpbmUgc3VwcG9ydHNfbW9kYWwocG9ydCkJ UERfSURIX01PREFMX1NVUFAoKHBvcnQpLT5wYXJ0bmVyX2lkZW50LmlkX2hlYWRlcikKIAogc3Rh dGljIGludCB0Y3BtX3BkX3N2ZG0oc3RydWN0IHRjcG1fcG9ydCAqcG9ydCwgY29uc3QgX19sZTMy ICpwYXlsb2FkLCBpbnQgY250LAogCQkJdTMyICpyZXNwb25zZSkKIHsKLQl1MzIgcDAgPSBsZTMy X3RvX2NwdShwYXlsb2FkWzBdKTsKLQlpbnQgY21kX3R5cGUgPSBQRF9WRE9fQ01EVChwMCk7Ci0J aW50IGNtZCA9IFBEX1ZET19DTUQocDApOworCXN0cnVjdCB0eXBlY19hbHRtb2RlICphbHRtb2Rl OwogCXN0cnVjdCBwZF9tb2RlX2RhdGEgKm1vZGVwOworCXUzMiBwW1BEX01BWF9QQVlMT0FEXTsK IAlpbnQgcmxlbiA9IDA7Ci0JdTE2IHN2aWQ7CisJaW50IGNtZF90eXBlOworCWludCBjbWQ7CiAJ aW50IGk7CiAKKwlmb3IgKGkgPSAwOyBpIDwgY250OyBpKyspCisJCXBbaV0gPSBsZTMyX3RvX2Nw dShwYXlsb2FkW2ldKTsKKworCWNtZF90eXBlID0gUERfVkRPX0NNRFQocFswXSk7CisJY21kID0g UERfVkRPX0NNRChwWzBdKTsKKwogCXRjcG1fbG9nKHBvcnQsICJSeCBWRE0gY21kIDB4JXggdHlw ZSAlZCBjbWQgJWQgbGVuICVkIiwKLQkJIHAwLCBjbWRfdHlwZSwgY21kLCBjbnQpOworCQkgcFsw XSwgY21kX3R5cGUsIGNtZCwgY250KTsKIAogCW1vZGVwID0gJnBvcnQtPm1vZGVfZGF0YTsKIAor CWFsdG1vZGUgPSB0eXBlY19tYXRjaF9hbHRtb2RlKHBvcnQtPnBvcnRfYWx0bW9kZSwgQUxUTU9E RV9ESVNDT1ZFUllfTUFYLAorCQkJCSAgICAgIFBEX1ZET19WSUQocFswXSksIFBEX1ZET19PUE9T KHBbMF0pKTsKKwogCXN3aXRjaCAoY21kX3R5cGUpIHsKIAljYXNlIENNRFRfSU5JVDoKIAkJc3dp dGNoIChjbWQpIHsKQEAgLTEwMzYsMTcgKzEwNTQsMjEgQEAgc3RhdGljIGludCB0Y3BtX3BkX3N2 ZG0oc3RydWN0IHRjcG1fcG9ydCAqcG9ydCwgY29uc3QgX19sZTMyICpwYXlsb2FkLCBpbnQgY250 LAogCQljYXNlIENNRF9FWElUX01PREU6CiAJCQlicmVhazsKIAkJY2FzZSBDTURfQVRURU5USU9O OgotCQkJYnJlYWs7CisJCQl0eXBlY19hbHRtb2RlX2F0dGVudGlvbihhbHRtb2RlLCBwWzFdKTsK KwkJCXJldHVybiAwOwogCQlkZWZhdWx0OgorCQkJaWYgKHR5cGVjX2FsdG1vZGVfdmRtKGFsdG1v ZGUsIHBbMF0sICZwWzFdLCBjbnQpID09CisJCQkgICAgVkRNX09LKQorCQkJCXJldHVybiAwOwog CQkJYnJlYWs7CiAJCX0KIAkJaWYgKHJsZW4gPj0gMSkgewotCQkJcmVzcG9uc2VbMF0gPSBwMCB8 IFZET19DTURUKENNRFRfUlNQX0FDSyk7CisJCQlyZXNwb25zZVswXSA9IHBbMF0gfCBWRE9fQ01E VChDTURUX1JTUF9BQ0spOwogCQl9IGVsc2UgaWYgKHJsZW4gPT0gMCkgewotCQkJcmVzcG9uc2Vb MF0gPSBwMCB8IFZET19DTURUKENNRFRfUlNQX05BSyk7CisJCQlyZXNwb25zZVswXSA9IHBbMF0g fCBWRE9fQ01EVChDTURUX1JTUF9OQUspOwogCQkJcmxlbiA9IDE7CiAJCX0gZWxzZSB7Ci0JCQly ZXNwb25zZVswXSA9IHAwIHwgVkRPX0NNRFQoQ01EVF9SU1BfQlVTWSk7CisJCQlyZXNwb25zZVsw XSA9IHBbMF0gfCBWRE9fQ01EVChDTURUX1JTUF9CVVNZKTsKIAkJCXJsZW4gPSAxOwogCQl9CiAJ CWJyZWFrOwpAQCAtMTA3OSwyMCArMTEwMSwyNiBAQCBzdGF0aWMgaW50IHRjcG1fcGRfc3ZkbShz dHJ1Y3QgdGNwbV9wb3J0ICpwb3J0LCBjb25zdCBfX2xlMzIgKnBheWxvYWQsIGludCBjbnQsCiAJ CQlzdmRtX2NvbnN1bWVfbW9kZXMocG9ydCwgcGF5bG9hZCwgY250KTsKIAkJCW1vZGVwLT5zdmlk X2luZGV4Kys7CiAJCQlpZiAobW9kZXAtPnN2aWRfaW5kZXggPCBtb2RlcC0+bnN2aWRzKSB7Ci0J CQkJc3ZpZCA9IG1vZGVwLT5zdmlkc1ttb2RlcC0+c3ZpZF9pbmRleF07CisJCQkJdTE2IHN2aWQg PSBtb2RlcC0+c3ZpZHNbbW9kZXAtPnN2aWRfaW5kZXhdOwogCQkJCXJlc3BvbnNlWzBdID0gVkRP KHN2aWQsIDEsIENNRF9ESVNDT1ZFUl9NT0RFUyk7CiAJCQkJcmxlbiA9IDE7CiAJCQl9IGVsc2Ug ewotCQkJCS8qIGVudGVyIGFsdGVybmF0ZSBtb2RlIGlmL3doZW4gaW1wbGVtZW50ZWQgKi8KKwkJ CQl0Y3BtX3JlZ2lzdGVyX3BhcnRuZXJfYWx0bW9kZXMocG9ydCk7CiAJCQl9CiAJCQlicmVhazsK IAkJY2FzZSBDTURfRU5URVJfTU9ERToKKwkJCXR5cGVjX2FsdG1vZGVfZW50ZXIoYWx0bW9kZSk7 CisJCQlicmVhazsKKwkJY2FzZSBDTURfRVhJVF9NT0RFOgorCQkJdHlwZWNfYWx0bW9kZV9leGl0 KGFsdG1vZGUpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CisJCQl0eXBlY19hbHRtb2RlX3ZkbShh bHRtb2RlLCBwWzBdLCAmcFsxXSwgY250KTsKIAkJCWJyZWFrOwogCQl9CiAJCWJyZWFrOwogCWRl ZmF1bHQ6CisJCXR5cGVjX2FsdG1vZGVfdmRtKGFsdG1vZGUsIHBbMF0sICZwWzFdLCBjbnQpOwog CQlicmVhazsKIAl9CiAKQEAgLTEzNTIsNiArMTM4MCw0NyBAQCBzdGF0aWMgaW50IHRjcG1fdmFs aWRhdGVfY2FwcyhzdHJ1Y3QgdGNwbV9wb3J0ICpwb3J0LCBjb25zdCB1MzIgKnBkbywKIAlyZXR1 cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgdGNwbV9hbHRtb2RlX2VudGVyKHN0cnVjdCB0eXBlY19h bHRtb2RlICphbHRtb2RlKQoreworCXN0cnVjdCB0Y3BtX3BvcnQgKnBvcnQgPSB0eXBlY19hbHRt b2RlX2dldF9kcnZkYXRhKGFsdG1vZGUpOworCXUzMiBoZWFkZXI7CisKKwloZWFkZXIgPSBWRE8o YWx0bW9kZS0+c3ZpZCwgMSwgQ01EX0VOVEVSX01PREUpOworCWhlYWRlciB8PSBWRE9fT1BPUyhh bHRtb2RlLT5tb2RlKTsKKworCXRjcG1fcXVldWVfdmRtKHBvcnQsIGhlYWRlciwgTlVMTCwgMCk7 CisJbW9kX2RlbGF5ZWRfd29yayhwb3J0LT53cSwgJnBvcnQtPnZkbV9zdGF0ZV9tYWNoaW5lLCAw KTsKK30KKworc3RhdGljIHZvaWQgdGNwbV9hbHRtb2RlX2V4aXQoc3RydWN0IHR5cGVjX2FsdG1v ZGUgKmFsdG1vZGUpCit7CisJc3RydWN0IHRjcG1fcG9ydCAqcG9ydCA9IHR5cGVjX2FsdG1vZGVf Z2V0X2RydmRhdGEoYWx0bW9kZSk7CisJdTMyIGhlYWRlcjsKKworCWhlYWRlciA9IFZETyhhbHRt b2RlLT5zdmlkLCAxLCBDTURfRVhJVF9NT0RFKTsKKwloZWFkZXIgfD0gVkRPX09QT1MoYWx0bW9k ZS0+bW9kZSk7CisKKwl0Y3BtX3F1ZXVlX3ZkbShwb3J0LCBoZWFkZXIsIE5VTEwsIDApOworCW1v ZF9kZWxheWVkX3dvcmsocG9ydC0+d3EsICZwb3J0LT52ZG1fc3RhdGVfbWFjaGluZSwgMCk7Cit9 CisKK3N0YXRpYyBpbnQgdGNwbV9hbHRtb2RlX3ZkbShzdHJ1Y3QgdHlwZWNfYWx0bW9kZSAqYWx0 bW9kZSwKKwkJCSAgICB1MzIgaGVhZGVyLCBjb25zdCB1MzIgKmRhdGEsIGludCBjb3VudCkKK3sK KwlzdHJ1Y3QgdGNwbV9wb3J0ICpwb3J0ID0gdHlwZWNfYWx0bW9kZV9nZXRfZHJ2ZGF0YShhbHRt b2RlKTsKKworCXRjcG1fcXVldWVfdmRtKHBvcnQsIGhlYWRlciwgZGF0YSwgY291bnQgLSAxKTsK Kwltb2RfZGVsYXllZF93b3JrKHBvcnQtPndxLCAmcG9ydC0+dmRtX3N0YXRlX21hY2hpbmUsIDAp OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdHlwZWNfYWx0bW9kZV9v cHMgdGNwbV9hbHRtb2RlX29wcyA9IHsKKwkuZW50ZXIgPSB0Y3BtX2FsdG1vZGVfZW50ZXIsCisJ LmV4aXQgPSB0Y3BtX2FsdG1vZGVfZXhpdCwKKwkudmRtID0gdGNwbV9hbHRtb2RlX3ZkbSwKK307 CisKIC8qCiAgKiBQRCAoZGF0YSwgY29udHJvbCkgY29tbWFuZCBoYW5kbGluZyBmdW5jdGlvbnMK ICAqLwpAQCAtMzQ3OSw2ICszNTQ4LDIzIEBAIHN0YXRpYyB2b2lkIHRjcG1faW5pdChzdHJ1Y3Qg dGNwbV9wb3J0ICpwb3J0KQogCXRjcG1fc2V0X3N0YXRlKHBvcnQsIFBPUlRfUkVTRVQsIDApOwog fQogCitzdGF0aWMgaW50IHRjcG1fYWN0aXZhdGVfbW9kZShzdHJ1Y3QgdHlwZWNfYWx0bW9kZSAq YWx0LCBpbnQgYWN0aXZhdGUpCit7CisJc3RydWN0IHRjcG1fcG9ydCAqcG9ydCA9IHR5cGVjX2Fs dG1vZGVfZ2V0X2RydmRhdGEoYWx0KTsKKwl1MzIgaGVhZGVyOworCisJaGVhZGVyID0gVkRPKGNw dV90b19sZTE2KGFsdC0+c3ZpZCksIDEsCisJCSAgICAgYWN0aXZhdGUgPyBDTURfRU5URVJfTU9E RSA6IENNRF9FWElUX01PREUpOworCWhlYWRlciB8PSBWRE9fT1BPUyhhbHQtPm1vZGUpOworCisJ bXV0ZXhfbG9jaygmcG9ydC0+bG9jayk7CisJdGNwbV9xdWV1ZV92ZG0ocG9ydCwgaGVhZGVyLCBO VUxMLCAwKTsKKwltb2RfZGVsYXllZF93b3JrKHBvcnQtPndxLCAmcG9ydC0+dmRtX3N0YXRlX21h Y2hpbmUsIDApOworCW11dGV4X3VubG9jaygmcG9ydC0+bG9jayk7CisKKwlyZXR1cm4gMDsKK30K Kwogc3RhdGljIGludCB0Y3BtX3BvcnRfdHlwZV9zZXQoY29uc3Qgc3RydWN0IHR5cGVjX2NhcGFi aWxpdHkgKmNhcCwKIAkJCSAgICAgIGVudW0gdHlwZWNfcG9ydF90eXBlIHR5cGUpCiB7CkBAIC0z NjcxLDYgKzM3NTcsNyBAQCBzdHJ1Y3QgdGNwbV9wb3J0ICp0Y3BtX3JlZ2lzdGVyX3BvcnQoc3Ry dWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgdGNwY19kZXYgKnRjcGMpCiAJcG9ydC0+dHlwZWNfY2Fw cy5wcl9zZXQgPSB0Y3BtX3ByX3NldDsKIAlwb3J0LT50eXBlY19jYXBzLnZjb25uX3NldCA9IHRj cG1fdmNvbm5fc2V0OwogCXBvcnQtPnR5cGVjX2NhcHMudHJ5X3JvbGUgPSB0Y3BtX3RyeV9yb2xl OworCXBvcnQtPnR5cGVjX2NhcHMuYWN0aXZhdGVfbW9kZSA9IHRjcG1fYWN0aXZhdGVfbW9kZTsK IAlwb3J0LT50eXBlY19jYXBzLnBvcnRfdHlwZV9zZXQgPSB0Y3BtX3BvcnRfdHlwZV9zZXQ7CiAK IAlwb3J0LT5wYXJ0bmVyX2Rlc2MuaWRlbnRpdHkgPSAmcG9ydC0+cGFydG5lcl9pZGVudDsKQEAg LTM3MDMsNiArMzc5MCw4IEBAIHN0cnVjdCB0Y3BtX3BvcnQgKnRjcG1fcmVnaXN0ZXJfcG9ydChz dHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCB0Y3BjX2RldiAqdGNwYykKIAkJCQkJIGRldl9uYW1l KGRldiksIHBhbHRtb2RlLT5zdmlkKTsKIAkJCQlicmVhazsKIAkJCX0KKwkJCXR5cGVjX2FsdG1v ZGVfc2V0X2RydmRhdGEoYWx0LCBwb3J0KTsKKwkJCXR5cGVjX2FsdG1vZGVfcmVnaXN0ZXJfb3Bz KGFsdCwgJnRjcG1fYWx0bW9kZV9vcHMpOwogCQkJcG9ydC0+cG9ydF9hbHRtb2RlW2ldID0gYWx0 OwogCQkJaSsrOwogCQkJcGFsdG1vZGUrKzsK