1 | // SPDX-License-Identifier: GPL-2.0 |
2 | /* |
3 | * Copyright (C) 2019 NVIDIA Corporation. All rights reserved. |
4 | * |
5 | * NVIDIA USB Type-C Alt Mode Driver |
6 | */ |
7 | #include <linux/module.h> |
8 | #include <linux/usb/typec_altmode.h> |
9 | #include <linux/usb/typec_dp.h> |
10 | #include "displayport.h" |
11 | |
12 | static int nvidia_altmode_probe(struct typec_altmode *alt) |
13 | { |
14 | if (alt->svid == USB_TYPEC_NVIDIA_VLINK_SID) |
15 | return dp_altmode_probe(alt); |
16 | else |
17 | return -ENOTSUPP; |
18 | } |
19 | |
20 | static void nvidia_altmode_remove(struct typec_altmode *alt) |
21 | { |
22 | if (alt->svid == USB_TYPEC_NVIDIA_VLINK_SID) |
23 | dp_altmode_remove(alt); |
24 | } |
25 | |
26 | static const struct typec_device_id nvidia_typec_id[] = { |
27 | { USB_TYPEC_NVIDIA_VLINK_SID, TYPEC_ANY_MODE }, |
28 | { }, |
29 | }; |
30 | MODULE_DEVICE_TABLE(typec, nvidia_typec_id); |
31 | |
32 | static struct typec_altmode_driver nvidia_altmode_driver = { |
33 | .id_table = nvidia_typec_id, |
34 | .probe = nvidia_altmode_probe, |
35 | .remove = nvidia_altmode_remove, |
36 | .driver = { |
37 | .name = "typec_nvidia" , |
38 | .owner = THIS_MODULE, |
39 | }, |
40 | }; |
41 | module_typec_altmode_driver(nvidia_altmode_driver); |
42 | |
43 | MODULE_LICENSE("GPL v2" ); |
44 | MODULE_DESCRIPTION("NVIDIA USB Type-C Alt Mode Driver" ); |
45 | |