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: [v2,7/7] usb: typec: Add driver for NVIDIA Alt Modes From: Heikki Krogerus Message-Id: <20190415120931.61328-8-heikki.krogerus@linux.intel.com> Date: Mon, 15 Apr 2019 15:09:31 +0300 To: Greg Kroah-Hartman Cc: Ajay Gupta , linux-usb@vger.kernel.org List-ID: RnJvbTogQWpheSBHdXB0YSA8YWpheWdAbnZpZGlhLmNvbT4KCkxhdGVzdCBOVklESUEgR1BVcyBz dXBwb3J0IFZpcnR1YWxMaW5rIGRldmljZS4gU2luY2UgVVNCSUYKaGFzIG5vdCBhc3NpZ25lZCBh IFN0YW5kYXJkIElEIChTSUQpIGZvciBWaXJ0dWFsTGluawpzbyB1c2luZyBOVklEQSBWSUQgMHg5 NTUgYXMgU1ZJRC4KClNpZ25lZC1vZmYtYnk6IEFqYXkgR3VwdGEgPGFqYXlnQG52aWRpYS5jb20+ ClNpZ25lZC1vZmYtYnk6IEhlaWtraSBLcm9nZXJ1cyA8aGVpa2tpLmtyb2dlcnVzQGxpbnV4Lmlu dGVsLmNvbT4KLS0tCiBkcml2ZXJzL3VzYi90eXBlYy9hbHRtb2Rlcy9LY29uZmlnICB8IDEwICsr KysrKysKIGRyaXZlcnMvdXNiL3R5cGVjL2FsdG1vZGVzL01ha2VmaWxlIHwgIDIgKysKIGRyaXZl cnMvdXNiL3R5cGVjL2FsdG1vZGVzL252aWRpYS5jIHwgNDQgKysrKysrKysrKysrKysrKysrKysr KysrKysrKysKIGRyaXZlcnMvdXNiL3R5cGVjL3Vjc2kvdWNzaS5jICAgICAgIHwgIDQgKystCiBp bmNsdWRlL2xpbnV4L3VzYi90eXBlY19kcC5oICAgICAgICB8ICA1ICsrKysKIDUgZmlsZXMgY2hh bmdlZCwgNjQgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQogY3JlYXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvdXNiL3R5cGVjL2FsdG1vZGVzL252aWRpYS5jCgpkaWZmIC0tZ2l0IGEvZHJpdmVy cy91c2IvdHlwZWMvYWx0bW9kZXMvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL3R5cGVjL2FsdG1vZGVz L0tjb25maWcKaW5kZXggZWYyMjI2ZWI3YTMzLi4xODc2OTBmZDFhNWIgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvdXNiL3R5cGVjL2FsdG1vZGVzL0tjb25maWcKKysrIGIvZHJpdmVycy91c2IvdHlwZWMv YWx0bW9kZXMvS2NvbmZpZwpAQCAtMTIsNCArMTIsMTQgQEAgY29uZmlnIFRZUEVDX0RQX0FMVE1P REUKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6 IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHR5cGVjX2Rpc3BsYXlwb3J0LgogCitjb25m aWcgVFlQRUNfTlZJRElBX0FMVE1PREUKKwl0cmlzdGF0ZSAiTlZJRElBIEFsdGVybmF0ZSBNb2Rl IGRyaXZlciIKKwlkZXBlbmRzIG9uIFRZUEVDX0RQX0FMVE1PREUKKwloZWxwCisJICBMYXRlc3Qg TlZJRElBIEdQVXMgc3VwcG9ydCBWaXJ0dWFsTGluayBkZXZpY2VzLiBTZWxlY3QgdGhpcworCSAg dG8gZW5hYmxlIHN1cHBvcnQgZm9yIFZpcnR1YWxMaW5rIGRldmljZXMgd2l0aCBOVklESUEgR1BV cy4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVy ZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdHlwZWNfZGlzcGxheXBvcnQuCisKIGVu ZG1lbnUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3R5cGVjL2FsdG1vZGVzL01ha2VmaWxlIGIv ZHJpdmVycy91c2IvdHlwZWMvYWx0bW9kZXMvTWFrZWZpbGUKaW5kZXggZWRhODQ1NmYxYzkyLi40 NTcxNzU0OGIzOTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3R5cGVjL2FsdG1vZGVzL01ha2Vm aWxlCisrKyBiL2RyaXZlcnMvdXNiL3R5cGVjL2FsdG1vZGVzL01ha2VmaWxlCkBAIC0yLDMgKzIs NSBAQAogCiBvYmotJChDT05GSUdfVFlQRUNfRFBfQUxUTU9ERSkJCSs9IHR5cGVjX2Rpc3BsYXlw b3J0Lm8KIHR5cGVjX2Rpc3BsYXlwb3J0LXkJCQk6PSBkaXNwbGF5cG9ydC5vCitvYmotJChDT05G SUdfVFlQRUNfTlZJRElBX0FMVE1PREUpCSs9IHR5cGVjX252aWRpYS5vCit0eXBlY19udmlkaWEt eQkJCQk6PSBudmlkaWEubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvdHlwZWMvYWx0bW9kZXMv bnZpZGlhLmMgYi9kcml2ZXJzL3VzYi90eXBlYy9hbHRtb2Rlcy9udmlkaWEuYwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmMzNjc2OTczNjQwNQotLS0gL2Rldi9udWxs CisrKyBiL2RyaXZlcnMvdXNiL3R5cGVjL2FsdG1vZGVzL252aWRpYS5jCkBAIC0wLDAgKzEsNDQg QEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisvKgorICogQ29weXJpZ2h0 IChDKSAyMDE5IE5WSURJQSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg KiBOVklESUEgVVNCIFR5cGUtQyBBbHQgTW9kZSBEcml2ZXIKKyAqLworI2luY2x1ZGUgPGxpbnV4 L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi90eXBlY19hbHRtb2RlLmg+CisjaW5jbHVk ZSA8bGludXgvdXNiL3R5cGVjX2RwLmg+CisjaW5jbHVkZSAiZGlzcGxheXBvcnQuaCIKKworc3Rh dGljIGludCBudmlkaWFfYWx0bW9kZV9wcm9iZShzdHJ1Y3QgdHlwZWNfYWx0bW9kZSAqYWx0KQor eworCWlmIChhbHQtPnN2aWQgPT0gVVNCX1RZUEVDX05WSURJQV9WTElOS19TSUQpCisJCXJldHVy biBkcF9hbHRtb2RlX3Byb2JlKGFsdCk7CisJZWxzZQorCQlyZXR1cm4gLUVOT1RTVVBQOworfQor CitzdGF0aWMgdm9pZCBudmlkaWFfYWx0bW9kZV9yZW1vdmUoc3RydWN0IHR5cGVjX2FsdG1vZGUg KmFsdCkKK3sKKwlpZiAoYWx0LT5zdmlkID09IFVTQl9UWVBFQ19OVklESUFfVkxJTktfU0lEKQor CQlkcF9hbHRtb2RlX3JlbW92ZShhbHQpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHR5cGVj X2RldmljZV9pZCBudmlkaWFfdHlwZWNfaWRbXSA9IHsKKwl7IFVTQl9UWVBFQ19OVklESUFfVkxJ TktfU0lELCBUWVBFQ19BTllfTU9ERSB9LAorCXsgfSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxF KHR5cGVjLCBudmlkaWFfdHlwZWNfaWQpOworCitzdGF0aWMgc3RydWN0IHR5cGVjX2FsdG1vZGVf ZHJpdmVyIG52aWRpYV9hbHRtb2RlX2RyaXZlciA9IHsKKwkuaWRfdGFibGUgPSBudmlkaWFfdHlw ZWNfaWQsCisJLnByb2JlID0gbnZpZGlhX2FsdG1vZGVfcHJvYmUsCisJLnJlbW92ZSA9IG52aWRp YV9hbHRtb2RlX3JlbW92ZSwKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJ0eXBlY19udmlkaWEi LAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorfTsKK21vZHVsZV90eXBlY19hbHRtb2Rl X2RyaXZlcihudmlkaWFfYWx0bW9kZV9kcml2ZXIpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIHYy Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIk5WSURJQSBVU0IgVHlwZS1DIEFsdCBNb2RlIERyaXZl ciIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvdHlwZWMvdWNzaS91Y3NpLmMgYi9kcml2ZXJz L3VzYi90eXBlYy91Y3NpL3Vjc2kuYwppbmRleCAyMmZiOTU2Njg3ZGUuLjk5OWFlNTBkNmU0OSAx MDA2NDQKLS0tIGEvZHJpdmVycy91c2IvdHlwZWMvdWNzaS91Y3NpLmMKKysrIGIvZHJpdmVycy91 c2IvdHlwZWMvdWNzaS91Y3NpLmMKQEAgLTMxMCw2ICszMTAsNyBAQCBzdGF0aWMgaW50IHVjc2lf cmVnaXN0ZXJfYWx0bW9kZShzdHJ1Y3QgdWNzaV9jb25uZWN0b3IgKmNvbiwKIAogCQlzd2l0Y2gg KGRlc2MtPnN2aWQpIHsKIAkJY2FzZSBVU0JfVFlQRUNfRFBfU0lEOgorCQljYXNlIFVTQl9UWVBF Q19OVklESUFfVkxJTktfU0lEOgogCQkJYWx0ID0gdWNzaV9yZWdpc3Rlcl9kaXNwbGF5cG9ydChj b24sIG92ZXJyaWRlLCBpLCBkZXNjKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgpAQCAtNDI4LDcg KzQyOSw4IEBAIHN0YXRpYyB2b2lkIHVjc2lfdW5yZWdpc3Rlcl9hbHRtb2RlcyhzdHJ1Y3QgdWNz aV9jb25uZWN0b3IgKmNvbiwgdTggcmVjaXBpZW50KQogCiAJd2hpbGUgKGFkZXZbaV0pIHsKIAkJ aWYgKHJlY2lwaWVudCA9PSBVQ1NJX1JFQ0lQSUVOVF9TT1AgJiYKLQkJICAgIGFkZXZbaV0tPnN2 aWQgPT0gVVNCX1RZUEVDX0RQX1NJRCkgeworCQkgICAgKGFkZXZbaV0tPnN2aWQgPT0gVVNCX1RZ UEVDX0RQX1NJRCB8fAorCQkJYWRldltpXS0+c3ZpZCA9PSBVU0JfVFlQRUNfTlZJRElBX1ZMSU5L X1NJRCkpIHsKIAkJCXBkZXYgPSB0eXBlY19hbHRtb2RlX2dldF9wYXJ0bmVyKGFkZXZbaV0pOwog CQkJdWNzaV9kaXNwbGF5cG9ydF9yZW1vdmVfcGFydG5lcigodm9pZCAqKXBkZXYpOwogCQl9CmRp ZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi90eXBlY19kcC5oIGIvaW5jbHVkZS9saW51eC91 c2IvdHlwZWNfZHAuaAppbmRleCA3ZmExMmVmOGQwOWEuLmZjNGM3ZWRiMmU4YSAxMDA2NDQKLS0t IGEvaW5jbHVkZS9saW51eC91c2IvdHlwZWNfZHAuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi90 eXBlY19kcC5oCkBAIC01LDYgKzUsMTEgQEAKICNpbmNsdWRlIDxsaW51eC91c2IvdHlwZWNfYWx0 bW9kZS5oPgogCiAjZGVmaW5lIFVTQl9UWVBFQ19EUF9TSUQJMHhmZjAxCisvKiBVU0IgSUYgaGFz IG5vdCBhc3NpZ25lZCBhIFN0YW5kYXJkIElEIChTSUQpIGZvciBWaXJ0dWFsTGluaywKKyAqIHNv IHRoZSBtYW51ZmFjdHVyZXJzIG9mIFZpcnR1YWxMaW5rIGFkYXB0ZXJzIHVzZSB0aGVpciBWZW5k b3IKKyAqIElEcyBhcyB0aGUgU1ZJRC4KKyAqLworI2RlZmluZSBVU0JfVFlQRUNfTlZJRElBX1ZM SU5LX1NJRAkweDk1NQkvKiBOVklESUEgVmlydHVhbExpbmsgKi8KICNkZWZpbmUgVVNCX1RZUEVD X0RQX01PREUJMQogCiAvKgo= From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.9 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_PASS,URIBL_BLOCKED, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2CE07C10F0E for ; Mon, 15 Apr 2019 12:09:47 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 06DE92077C for ; Mon, 15 Apr 2019 12:09:47 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727393AbfDOMJq (ORCPT ); Mon, 15 Apr 2019 08:09:46 -0400 Received: from mga12.intel.com ([192.55.52.136]:10510 "EHLO mga12.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726042AbfDOMJq (ORCPT ); Mon, 15 Apr 2019 08:09:46 -0400 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by fmsmga106.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 15 Apr 2019 05:09:46 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.60,353,1549958400"; d="scan'208";a="164850781" Received: from black.fi.intel.com (HELO black.fi.intel.com.) ([10.237.72.28]) by fmsmga001.fm.intel.com with ESMTP; 15 Apr 2019 05:09:44 -0700 From: Heikki Krogerus To: Greg Kroah-Hartman Cc: Ajay Gupta , linux-usb@vger.kernel.org Subject: [PATCH v2 7/7] usb: typec: Add driver for NVIDIA Alt Modes Date: Mon, 15 Apr 2019 15:09:31 +0300 Message-Id: <20190415120931.61328-8-heikki.krogerus@linux.intel.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190415120931.61328-1-heikki.krogerus@linux.intel.com> References: <20190415120931.61328-1-heikki.krogerus@linux.intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-usb-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-usb@vger.kernel.org Content-Type: text/plain; charset="UTF-8" Message-ID: <20190415120931.hYQM-bInc4D78HhCi7cis_8hx_28_sbfPkDmPUo9tHg@z> From: Ajay Gupta Latest NVIDIA GPUs support VirtualLink device. Since USBIF has not assigned a Standard ID (SID) for VirtualLink so using NVIDA VID 0x955 as SVID. Signed-off-by: Ajay Gupta Signed-off-by: Heikki Krogerus --- drivers/usb/typec/altmodes/Kconfig | 10 +++++++ drivers/usb/typec/altmodes/Makefile | 2 ++ drivers/usb/typec/altmodes/nvidia.c | 44 +++++++++++++++++++++++++++++ drivers/usb/typec/ucsi/ucsi.c | 4 ++- include/linux/usb/typec_dp.h | 5 ++++ 5 files changed, 64 insertions(+), 1 deletion(-) create mode 100644 drivers/usb/typec/altmodes/nvidia.c diff --git a/drivers/usb/typec/altmodes/Kconfig b/drivers/usb/typec/altmodes/Kconfig index ef2226eb7a33..187690fd1a5b 100644 --- a/drivers/usb/typec/altmodes/Kconfig +++ b/drivers/usb/typec/altmodes/Kconfig @@ -12,4 +12,14 @@ config TYPEC_DP_ALTMODE To compile this driver as a module, choose M here: the module will be called typec_displayport. +config TYPEC_NVIDIA_ALTMODE + tristate "NVIDIA Alternate Mode driver" + depends on TYPEC_DP_ALTMODE + help + Latest NVIDIA GPUs support VirtualLink devices. Select this + to enable support for VirtualLink devices with NVIDIA GPUs. + + To compile this driver as a module, choose M here: the + module will be called typec_displayport. + endmenu diff --git a/drivers/usb/typec/altmodes/Makefile b/drivers/usb/typec/altmodes/Makefile index eda8456f1c92..45717548b396 100644 --- a/drivers/usb/typec/altmodes/Makefile +++ b/drivers/usb/typec/altmodes/Makefile @@ -2,3 +2,5 @@ obj-$(CONFIG_TYPEC_DP_ALTMODE) += typec_displayport.o typec_displayport-y := displayport.o +obj-$(CONFIG_TYPEC_NVIDIA_ALTMODE) += typec_nvidia.o +typec_nvidia-y := nvidia.o diff --git a/drivers/usb/typec/altmodes/nvidia.c b/drivers/usb/typec/altmodes/nvidia.c new file mode 100644 index 000000000000..c36769736405 --- /dev/null +++ b/drivers/usb/typec/altmodes/nvidia.c @@ -0,0 +1,44 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (C) 2019 NVIDIA Corporation. All rights reserved. + * + * NVIDIA USB Type-C Alt Mode Driver + */ +#include +#include +#include +#include "displayport.h" + +static int nvidia_altmode_probe(struct typec_altmode *alt) +{ + if (alt->svid == USB_TYPEC_NVIDIA_VLINK_SID) + return dp_altmode_probe(alt); + else + return -ENOTSUPP; +} + +static void nvidia_altmode_remove(struct typec_altmode *alt) +{ + if (alt->svid == USB_TYPEC_NVIDIA_VLINK_SID) + dp_altmode_remove(alt); +} + +static const struct typec_device_id nvidia_typec_id[] = { + { USB_TYPEC_NVIDIA_VLINK_SID, TYPEC_ANY_MODE }, + { }, +}; +MODULE_DEVICE_TABLE(typec, nvidia_typec_id); + +static struct typec_altmode_driver nvidia_altmode_driver = { + .id_table = nvidia_typec_id, + .probe = nvidia_altmode_probe, + .remove = nvidia_altmode_remove, + .driver = { + .name = "typec_nvidia", + .owner = THIS_MODULE, + }, +}; +module_typec_altmode_driver(nvidia_altmode_driver); + +MODULE_LICENSE("GPL v2"); +MODULE_DESCRIPTION("NVIDIA USB Type-C Alt Mode Driver"); diff --git a/drivers/usb/typec/ucsi/ucsi.c b/drivers/usb/typec/ucsi/ucsi.c index 22fb956687de..999ae50d6e49 100644 --- a/drivers/usb/typec/ucsi/ucsi.c +++ b/drivers/usb/typec/ucsi/ucsi.c @@ -310,6 +310,7 @@ static int ucsi_register_altmode(struct ucsi_connector *con, switch (desc->svid) { case USB_TYPEC_DP_SID: + case USB_TYPEC_NVIDIA_VLINK_SID: alt = ucsi_register_displayport(con, override, i, desc); break; default: @@ -428,7 +429,8 @@ static void ucsi_unregister_altmodes(struct ucsi_connector *con, u8 recipient) while (adev[i]) { if (recipient == UCSI_RECIPIENT_SOP && - adev[i]->svid == USB_TYPEC_DP_SID) { + (adev[i]->svid == USB_TYPEC_DP_SID || + adev[i]->svid == USB_TYPEC_NVIDIA_VLINK_SID)) { pdev = typec_altmode_get_partner(adev[i]); ucsi_displayport_remove_partner((void *)pdev); } diff --git a/include/linux/usb/typec_dp.h b/include/linux/usb/typec_dp.h index 7fa12ef8d09a..fc4c7edb2e8a 100644 --- a/include/linux/usb/typec_dp.h +++ b/include/linux/usb/typec_dp.h @@ -5,6 +5,11 @@ #include #define USB_TYPEC_DP_SID 0xff01 +/* USB IF has not assigned a Standard ID (SID) for VirtualLink, + * so the manufacturers of VirtualLink adapters use their Vendor + * IDs as the SVID. + */ +#define USB_TYPEC_NVIDIA_VLINK_SID 0x955 /* NVIDIA VirtualLink */ #define USB_TYPEC_DP_MODE 1 /* -- 2.20.1