Add SW USB config option

Adding software USB configuration option for the Type-C DP only mode.

BUG=b:230384036
TEST=./generate.sh

Cq-Depend: chromium:3609308
Change-Id: I6ed821e395987b3457aaf6ed840ed311b11979dd
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/config/+/3609220
Reviewed-by: Prashant Malani <pmalani@chromium.org>
Reviewed-by: Andrew Lamb <andrewlamb@chromium.org>
Commit-Queue: YH Lin <yueherngl@chromium.org>
(cherry picked from commit 76f5de9c111b8a250af507f96461b8738ad4a15a)
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/config/+/3617345
Reviewed-by: YH Lin <yueherngl@chromium.org>
Commit-Queue: Prashant Malani <pmalani@chromium.org>
Reviewed-by: Greg Edelston <gredelston@google.com>
diff --git a/generated/descriptors.json b/generated/descriptors.json
index 8f02012..1964848 100644
--- a/generated/descriptors.json
+++ b/generated/descriptors.json
@@ -7922,6 +7922,47 @@
         "isImport": false,
         "isSyntaxUnspecified": false
       },
+      "messageType": [
+        {
+          "field": [
+            {
+              "jsonName": "typecd",
+              "label": "LABEL_OPTIONAL",
+              "name": "typecd",
+              "number": 1,
+              "type": "TYPE_MESSAGE",
+              "typeName": ".chromiumos.config.api.software.UsbConfig.TypeCD"
+            }
+          ],
+          "name": "UsbConfig",
+          "nestedType": [
+            {
+              "field": [
+                {
+                  "jsonName": "dpOnly",
+                  "label": "LABEL_OPTIONAL",
+                  "name": "dp_only",
+                  "number": 1,
+                  "type": "TYPE_BOOL"
+                }
+              ],
+              "name": "TypeCD"
+            }
+          ]
+        }
+      ],
+      "name": "chromiumos/config/api/software/usb_config.proto",
+      "options": {
+        "goPackage": "go.chromium.org/chromiumos/config/go/api/software"
+      },
+      "package": "chromiumos.config.api.software",
+      "syntax": "proto3"
+    },
+    {
+      "bufExtension": {
+        "isImport": false,
+        "isSyntaxUnspecified": false
+      },
       "dependency": [
         "chromiumos/build/api/factory.proto",
         "chromiumos/build/api/firmware_config.proto",
@@ -7935,6 +7976,7 @@
         "chromiumos/config/api/software/resource_config.proto",
         "chromiumos/config/api/software/wifi_config.proto",
         "chromiumos/config/api/software/ui_config.proto",
+        "chromiumos/config/api/software/usb_config.proto",
         "chromiumos/config/public_replication/public_replication.proto"
       ],
       "messageType": [
@@ -8067,6 +8109,14 @@
               "number": 17,
               "type": "TYPE_MESSAGE",
               "typeName": ".chromiumos.config.api.software.UiConfig"
+            },
+            {
+              "jsonName": "usbConfig",
+              "label": "LABEL_OPTIONAL",
+              "name": "usb_config",
+              "number": 20,
+              "type": "TYPE_MESSAGE",
+              "typeName": ".chromiumos.config.api.software.UsbConfig"
             }
           ],
           "name": "SoftwareConfig",
diff --git a/go/api/software/software_config.pb.go b/go/api/software/software_config.pb.go
index 22a2beb..ac5599b 100644
--- a/go/api/software/software_config.pb.go
+++ b/go/api/software/software_config.pb.go
@@ -33,7 +33,7 @@
 // SoftwareConfig payloads can be shared across different
 // hardware-design-configs, if the software payloads are the same.
 //
-// NEXT ID: 20
+// NEXT ID: 21
 type SoftwareConfig struct {
 	// Configures fields of AudioConfig that are made public.
 	PublicReplication *public_replication.PublicReplication `protobuf:"bytes,12,opt,name=public_replication,json=publicReplication,proto3" json:"public_replication,omitempty"`
@@ -59,6 +59,7 @@
 	HealthConfig         *HealthConfig                 `protobuf:"bytes,18,opt,name=health_config,json=healthConfig,proto3" json:"health_config,omitempty"`
 	CameraConfig         *CameraConfig                 `protobuf:"bytes,15,opt,name=camera_config,json=cameraConfig,proto3" json:"camera_config,omitempty"`
 	UiConfig             *UiConfig                     `protobuf:"bytes,17,opt,name=ui_config,json=uiConfig,proto3" json:"ui_config,omitempty"`
+	UsbConfig            *UsbConfig                    `protobuf:"bytes,20,opt,name=usb_config,json=usbConfig,proto3" json:"usb_config,omitempty"`
 	XXX_NoUnkeyedLiteral struct{}                      `json:"-"`
 	XXX_unrecognized     []byte                        `json:"-"`
 	XXX_sizecache        int32                         `json:"-"`
@@ -201,6 +202,13 @@
 	return nil
 }
 
+func (m *SoftwareConfig) GetUsbConfig() *UsbConfig {
+	if m != nil {
+		return m.UsbConfig
+	}
+	return nil
+}
+
 func init() {
 	proto.RegisterType((*SoftwareConfig)(nil), "chromiumos.config.api.software.SoftwareConfig")
 }
@@ -210,46 +218,48 @@
 }
 
 var fileDescriptor_a5bdb966d9171747 = []byte{
-	// 654 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x95, 0xdd, 0x4f, 0xdb, 0x3c,
-	0x14, 0xc6, 0x05, 0xf4, 0x85, 0xe2, 0x42, 0x09, 0x86, 0x77, 0xb2, 0xb8, 0x98, 0x10, 0xda, 0x34,
-	0xc6, 0x98, 0xcb, 0xc7, 0xa6, 0x5d, 0x4d, 0xda, 0x60, 0x9b, 0x06, 0x93, 0x36, 0x16, 0xb6, 0x21,
-	0x31, 0xa1, 0xca, 0xcd, 0x57, 0x2d, 0x35, 0x38, 0x72, 0x12, 0x55, 0xdc, 0xef, 0x0f, 0x9f, 0x7a,
-	0xe2, 0xa4, 0x76, 0x12, 0x35, 0xdd, 0x5d, 0xce, 0xe9, 0xf3, 0xfc, 0x7c, 0x9c, 0xda, 0x4f, 0xd0,
-	0x2b, 0x67, 0x28, 0x45, 0xc8, 0xd3, 0x50, 0xc4, 0x3d, 0x47, 0xdc, 0xfb, 0x3c, 0xe8, 0xb1, 0x88,
-	0xf7, 0x62, 0xe1, 0x27, 0x63, 0x26, 0xbd, 0xe2, 0xa1, 0x9f, 0xfd, 0x48, 0x23, 0x29, 0x12, 0x81,
-	0x1f, 0x4f, 0x5d, 0x54, 0xfd, 0xc0, 0x22, 0x4e, 0x73, 0xf1, 0xce, 0x9e, 0x46, 0x1d, 0xa4, 0x7c,
-	0xe4, 0x02, 0xd4, 0x67, 0x4e, 0x22, 0xe4, 0x43, 0xc6, 0xd8, 0x39, 0xa8, 0xd7, 0x70, 0x19, 0x56,
-	0xd6, 0xdb, 0x79, 0x56, 0xab, 0x8d, 0x1f, 0xe2, 0xc4, 0x0b, 0xfb, 0x3c, 0x64, 0x81, 0xa7, 0x84,
-	0x87, 0xf5, 0xdb, 0x71, 0xbd, 0x98, 0x07, 0xf7, 0x8a, 0xd9, 0xe7, 0xae, 0x52, 0x1f, 0x37, 0x6c,
-	0x9e, 0xa5, 0x2e, 0x17, 0xe6, 0x24, 0xaf, 0x1b, 0x2c, 0x83, 0x51, 0xea, 0x25, 0x42, 0x24, 0x43,
-	0xd3, 0x76, 0xd2, 0x60, 0x73, 0x58, 0xe8, 0x49, 0xf6, 0x6f, 0x9e, 0xa1, 0xc7, 0x46, 0xe5, 0x75,
-	0x9a, 0x76, 0x14, 0x89, 0xb1, 0x27, 0x4d, 0x4b, 0xd3, 0x09, 0x90, 0x5e, 0x2c, 0x52, 0xe9, 0x94,
-	0xfe, 0x91, 0xa3, 0x06, 0xd7, 0x98, 0xfb, 0xdc, 0x74, 0xd0, 0x06, 0x47, 0x5a, 0xd2, 0xbf, 0xad,
-	0xea, 0xa3, 0x74, 0x30, 0xe2, 0x4e, 0x5f, 0x7a, 0xd1, 0x88, 0x3b, 0x2c, 0xe1, 0xe2, 0xbe, 0xa6,
-	0x95, 0xd9, 0xf7, 0xfe, 0x74, 0x50, 0xf7, 0x5a, 0xb1, 0xcf, 0xc1, 0x8e, 0x7d, 0x84, 0xab, 0x72,
-	0xb2, 0xb6, 0xbb, 0xb0, 0xdf, 0x39, 0x79, 0x43, 0xab, 0x47, 0xba, 0x86, 0x7d, 0x05, 0x2d, 0x7b,
-	0xda, 0xb1, 0x37, 0xa3, 0x72, 0x0b, 0x7f, 0x43, 0x56, 0xf9, 0xc0, 0x91, 0x15, 0x58, 0xe5, 0x29,
-	0xad, 0xbf, 0x38, 0x1f, 0x40, 0x9e, 0x8d, 0x79, 0xe1, 0xda, 0x5d, 0xd7, 0xa8, 0xf1, 0x2f, 0xd4,
-	0xe5, 0x6e, 0x3f, 0x76, 0x58, 0x4e, 0x24, 0x6d, 0xc0, 0x1d, 0xcd, 0x85, 0xa3, 0xd7, 0x0e, 0x53,
-	0x85, 0xbd, 0xc6, 0xdd, 0x69, 0x85, 0xdf, 0xa1, 0x76, 0x7e, 0xdf, 0xc8, 0x12, 0x10, 0x9f, 0xe8,
-	0x44, 0xb8, 0x69, 0x00, 0xfc, 0xa4, 0x54, 0x8a, 0x52, 0xb8, 0xf0, 0x1d, 0xfa, 0xbf, 0xb8, 0xb1,
-	0x20, 0xcf, 0x07, 0x5c, 0x05, 0xdc, 0xf3, 0xd9, 0xb8, 0xb3, 0x49, 0x47, 0x31, 0xb7, 0xfc, 0x6a,
-	0x13, 0x33, 0xf4, 0xa8, 0x84, 0x4f, 0x98, 0x0c, 0xbc, 0x24, 0x26, 0x16, 0xf0, 0x5f, 0xcc, 0xe6,
-	0x53, 0x60, 0xfd, 0xc8, 0x2c, 0xf6, 0xb6, 0xb1, 0x82, 0xea, 0xe2, 0x3b, 0xb4, 0xa5, 0x72, 0x44,
-	0x5f, 0x80, 0xac, 0x03, 0xff, 0x65, 0x3d, 0xff, 0x1a, 0x0c, 0x17, 0x90, 0x3b, 0x1a, 0xcc, 0xde,
-	0xcc, 0x48, 0x5a, 0x0b, 0xff, 0x46, 0xdb, 0x2a, 0xf6, 0x4c, 0x7e, 0x77, 0xe6, 0xfb, 0x51, 0x41,
-	0xa9, 0xb3, 0xb1, 0xc2, 0xe8, 0xf0, 0x5b, 0x64, 0x95, 0xf3, 0x86, 0xb4, 0x00, 0xdc, 0xa3, 0xb3,
-	0x13, 0x9a, 0x9e, 0xe5, 0x3e, 0xf5, 0xfa, 0x37, 0x06, 0x66, 0x03, 0x7f, 0x45, 0x6b, 0x7a, 0x58,
-	0x90, 0xff, 0xaa, 0x2f, 0xbc, 0x8e, 0x7b, 0x35, 0xf1, 0x28, 0x66, 0x27, 0x9a, 0x16, 0xf8, 0x06,
-	0x6d, 0x94, 0x92, 0x84, 0x6c, 0x01, 0x92, 0x36, 0x21, 0x6d, 0x65, 0x53, 0xd4, 0xae, 0x34, 0x6a,
-	0x7c, 0x85, 0xd6, 0xf5, 0x9c, 0x8e, 0x09, 0xda, 0x5d, 0x9a, 0x67, 0xd2, 0xf7, 0x13, 0x53, 0x7e,
-	0x2d, 0xd8, 0xb4, 0x88, 0xf1, 0x17, 0xd4, 0xd1, 0xe2, 0x8b, 0x74, 0x60, 0xcc, 0x83, 0x26, 0xde,
-	0x0d, 0xf7, 0xb9, 0xc2, 0xa1, 0x71, 0xf1, 0x8c, 0xbf, 0xa3, 0x75, 0x23, 0xa8, 0x09, 0x06, 0xdc,
-	0x61, 0x13, 0xee, 0x33, 0x98, 0xf2, 0xf9, 0x86, 0x5a, 0x35, 0x41, 0x1a, 0xdf, 0x0b, 0xb2, 0x31,
-	0x1f, 0xf2, 0x1c, 0x4c, 0x39, 0xd2, 0xd1, 0x2a, 0xfc, 0x11, 0xad, 0x16, 0xf9, 0x4b, 0x36, 0x01,
-	0xb7, 0xdf, 0x84, 0xfb, 0x99, 0x6f, 0xb7, 0x9d, 0xaa, 0xa7, 0xcb, 0x56, 0x7b, 0xc1, 0x5a, 0xbc,
-	0x6c, 0xb5, 0x17, 0xad, 0xa5, 0xcb, 0x56, 0x7b, 0xd9, 0x5a, 0x39, 0x3b, 0xbd, 0x3d, 0x0e, 0x44,
-	0x41, 0xa2, 0x42, 0x06, 0xbd, 0x6a, 0xae, 0x07, 0xc2, 0xf8, 0x14, 0x0c, 0x96, 0x21, 0xc2, 0x4f,
-	0xff, 0x06, 0x00, 0x00, 0xff, 0xff, 0xed, 0x1a, 0xed, 0x34, 0x9d, 0x08, 0x00, 0x00,
+	// 676 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x95, 0xef, 0x4f, 0x13, 0x31,
+	0x18, 0xc7, 0x03, 0x4c, 0x18, 0x1d, 0x8c, 0x51, 0xd0, 0x34, 0xbc, 0x30, 0x84, 0x68, 0x44, 0xc4,
+	0x1b, 0x3f, 0x34, 0xbe, 0x32, 0x51, 0x50, 0x03, 0x98, 0x28, 0x1e, 0x2a, 0x09, 0x86, 0x2c, 0xbd,
+	0x9f, 0x6b, 0xb2, 0xd1, 0x4b, 0x7b, 0x97, 0x85, 0x7f, 0xd2, 0xbf, 0xc9, 0xec, 0x59, 0x6f, 0xd7,
+	0xde, 0x5d, 0x56, 0x7c, 0x77, 0xcf, 0xb3, 0xe7, 0xfb, 0xe9, 0xd3, 0xae, 0xcf, 0xb7, 0xe8, 0x8d,
+	0xdf, 0x17, 0x7c, 0xc8, 0xb2, 0x21, 0x97, 0x5d, 0x9f, 0xdf, 0x45, 0x2c, 0xee, 0xd2, 0x84, 0x75,
+	0x25, 0x8f, 0xd2, 0x11, 0x15, 0xe1, 0xf4, 0xa3, 0x37, 0xf9, 0xd1, 0x49, 0x04, 0x4f, 0x39, 0x7e,
+	0x5a, 0xa8, 0x1c, 0xf5, 0x03, 0x4d, 0x98, 0x93, 0x17, 0x6f, 0xed, 0x68, 0x54, 0x2f, 0x63, 0x83,
+	0x00, 0xa0, 0x11, 0xf5, 0x53, 0x2e, 0xee, 0x27, 0x8c, 0xad, 0xbd, 0xfa, 0x1a, 0x26, 0x86, 0x95,
+	0xf5, 0xb6, 0x5e, 0xd4, 0xd6, 0xca, 0x7b, 0x99, 0x86, 0xc3, 0x1e, 0x1b, 0xd2, 0x38, 0x54, 0x85,
+	0xfb, 0xf5, 0xdb, 0x09, 0x42, 0xc9, 0xe2, 0x3b, 0xc5, 0xec, 0xb1, 0x40, 0x55, 0x1f, 0x5a, 0x36,
+	0x4f, 0xb3, 0x80, 0x71, 0xb3, 0x93, 0xb7, 0x16, 0x89, 0x37, 0xc8, 0xc2, 0x94, 0xf3, 0xb4, 0x6f,
+	0xca, 0x8e, 0x2c, 0x32, 0x9f, 0x0e, 0x43, 0x41, 0xff, 0x4f, 0xd3, 0x0f, 0xe9, 0xa0, 0xbc, 0x8e,
+	0x6d, 0x47, 0x09, 0x1f, 0x85, 0xc2, 0x94, 0xd8, 0x6e, 0x80, 0x08, 0x25, 0xcf, 0x84, 0x5f, 0xfa,
+	0x47, 0x0e, 0x2c, 0xaa, 0x11, 0x8b, 0x98, 0xa9, 0x70, 0x2c, 0x8a, 0xac, 0x54, 0xdf, 0xb5, 0xd5,
+	0x4b, 0xcf, 0x14, 0xbc, 0xaf, 0x0a, 0x92, 0xcc, 0x1b, 0x30, 0xbf, 0x27, 0xc2, 0x64, 0xc0, 0x7c,
+	0x9a, 0x32, 0x7e, 0x57, 0x93, 0x9a, 0xc8, 0x77, 0xfe, 0xb6, 0x50, 0xfb, 0x4a, 0xc1, 0x4f, 0x41,
+	0x8e, 0x23, 0x84, 0xab, 0xe5, 0x64, 0x65, 0x7b, 0x6e, 0xb7, 0x75, 0xf4, 0xce, 0xa9, 0xce, 0x40,
+	0x0d, 0xfb, 0x12, 0x52, 0x6e, 0x91, 0x71, 0xd7, 0x93, 0x72, 0x0a, 0x7f, 0x47, 0x9d, 0xf2, 0x0d,
+	0x25, 0x4b, 0xb0, 0xca, 0x73, 0xa7, 0x7e, 0xd2, 0x3e, 0x41, 0xf9, 0xa4, 0xcd, 0xf3, 0xc0, 0x6d,
+	0x07, 0x46, 0x8c, 0x7f, 0xa3, 0x36, 0x0b, 0x7a, 0xd2, 0xa7, 0x39, 0x91, 0x34, 0x01, 0x77, 0xf0,
+	0x20, 0x9c, 0x73, 0xe5, 0x53, 0x15, 0xb8, 0x2b, 0x2c, 0x28, 0x22, 0xfc, 0x01, 0x35, 0xf3, 0x01,
+	0x25, 0x0b, 0x40, 0x7c, 0xa6, 0x13, 0x61, 0x34, 0x01, 0xf8, 0x45, 0x55, 0x29, 0xca, 0x54, 0x85,
+	0x6f, 0xd1, 0xe3, 0xe9, 0x88, 0x43, 0x79, 0xde, 0xe0, 0x32, 0xe0, 0x5e, 0xce, 0xc6, 0x9d, 0x8c,
+	0x33, 0x8a, 0xb9, 0x11, 0x55, 0x93, 0x98, 0xa2, 0x27, 0x25, 0x7c, 0x4a, 0x45, 0x1c, 0xa6, 0x92,
+	0x74, 0x80, 0xff, 0x6a, 0x36, 0xdf, 0x01, 0xd6, 0xcf, 0x89, 0xc4, 0xdd, 0x34, 0x56, 0x50, 0x59,
+	0x7c, 0x8b, 0x36, 0x94, 0xf1, 0xe8, 0x0b, 0x90, 0x55, 0xe0, 0xbf, 0xae, 0xe7, 0x5f, 0x81, 0xe0,
+	0x1c, 0x8c, 0x4a, 0x83, 0xb9, 0xeb, 0x13, 0x92, 0x96, 0xc2, 0x7f, 0xd0, 0xa6, 0xf2, 0x49, 0x93,
+	0xdf, 0x9e, 0x79, 0x3e, 0xca, 0x59, 0x75, 0x36, 0x56, 0x18, 0x1d, 0x7e, 0x83, 0x3a, 0x65, 0x83,
+	0x22, 0x0d, 0x00, 0x77, 0x9d, 0xd9, 0x96, 0xee, 0x9c, 0xe4, 0x3a, 0x75, 0xfc, 0x6b, 0x9e, 0x99,
+	0xc0, 0xdf, 0xd0, 0x8a, 0xee, 0x2e, 0xe4, 0x51, 0xf5, 0xc0, 0xeb, 0xb8, 0x97, 0x63, 0x8d, 0x62,
+	0xb6, 0x92, 0x22, 0xc0, 0xd7, 0x68, 0xad, 0x64, 0x3d, 0x64, 0x03, 0x90, 0x8e, 0x0d, 0xe9, 0x2a,
+	0x99, 0xa2, 0xb6, 0x85, 0x11, 0xe3, 0x4b, 0xb4, 0xaa, 0x1b, 0xbb, 0x24, 0x68, 0x7b, 0xe1, 0x21,
+	0x9d, 0x7e, 0x1c, 0x8b, 0xf2, 0xb1, 0xa0, 0x45, 0x20, 0xf1, 0x57, 0xd4, 0xd2, 0xfc, 0x8e, 0xb4,
+	0xa0, 0xcd, 0x3d, 0x1b, 0xef, 0x9a, 0x45, 0x4c, 0xe1, 0xd0, 0x68, 0xfa, 0x8d, 0x7f, 0xa0, 0x55,
+	0xc3, 0xd9, 0x09, 0x06, 0xdc, 0xbe, 0x0d, 0x77, 0x06, 0xa2, 0xbc, 0xbf, 0xbe, 0x16, 0x8d, 0x91,
+	0xc6, 0x03, 0x43, 0xd6, 0x1e, 0x86, 0x3c, 0x05, 0x51, 0x8e, 0xf4, 0xb5, 0x08, 0x7f, 0x46, 0xcb,
+	0x53, 0xc3, 0x26, 0xeb, 0x80, 0xdb, 0xb5, 0xe1, 0x7e, 0xe5, 0xdb, 0x6d, 0x66, 0xf9, 0x66, 0xcf,
+	0x10, 0x2a, 0x7c, 0x9c, 0x6c, 0x56, 0xef, 0x78, 0x2d, 0x47, 0x7a, 0x0a, 0xb4, 0x9c, 0xe5, 0x9f,
+	0x17, 0x8d, 0xe6, 0x5c, 0x67, 0xfe, 0xa2, 0xd1, 0x9c, 0xef, 0x2c, 0x5c, 0x34, 0x9a, 0x8b, 0x9d,
+	0xa5, 0x93, 0xe3, 0x9b, 0xc3, 0x98, 0x4f, 0x59, 0x0e, 0x17, 0x71, 0xcd, 0x93, 0x12, 0x73, 0xe3,
+	0x55, 0xf1, 0x16, 0xe1, 0x31, 0x38, 0xfe, 0x17, 0x00, 0x00, 0xff, 0xff, 0xd4, 0xdd, 0xba, 0x8c,
+	0x18, 0x09, 0x00, 0x00,
 }
diff --git a/go/api/software/usb_config.pb.go b/go/api/software/usb_config.pb.go
new file mode 100644
index 0000000..99b28e8
--- /dev/null
+++ b/go/api/software/usb_config.pb.go
@@ -0,0 +1,126 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: chromiumos/config/api/software/usb_config.proto
+
+package software
+
+import (
+	fmt "fmt"
+	proto "github.com/golang/protobuf/proto"
+	math "math"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+type UsbConfig struct {
+	Typecd               *UsbConfig_TypeCD `protobuf:"bytes,1,opt,name=typecd,proto3" json:"typecd,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}          `json:"-"`
+	XXX_unrecognized     []byte            `json:"-"`
+	XXX_sizecache        int32             `json:"-"`
+}
+
+func (m *UsbConfig) Reset()         { *m = UsbConfig{} }
+func (m *UsbConfig) String() string { return proto.CompactTextString(m) }
+func (*UsbConfig) ProtoMessage()    {}
+func (*UsbConfig) Descriptor() ([]byte, []int) {
+	return fileDescriptor_0965baad9865c9e6, []int{0}
+}
+
+func (m *UsbConfig) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UsbConfig.Unmarshal(m, b)
+}
+func (m *UsbConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UsbConfig.Marshal(b, m, deterministic)
+}
+func (m *UsbConfig) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UsbConfig.Merge(m, src)
+}
+func (m *UsbConfig) XXX_Size() int {
+	return xxx_messageInfo_UsbConfig.Size(m)
+}
+func (m *UsbConfig) XXX_DiscardUnknown() {
+	xxx_messageInfo_UsbConfig.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UsbConfig proto.InternalMessageInfo
+
+func (m *UsbConfig) GetTypecd() *UsbConfig_TypeCD {
+	if m != nil {
+		return m.Typecd
+	}
+	return nil
+}
+
+type UsbConfig_TypeCD struct {
+	// AP driven alternate mode entry on this system should be restricted
+	// to DisplayPort alternate mode
+	DpOnly               bool     `protobuf:"varint,1,opt,name=dp_only,json=dpOnly,proto3" json:"dp_only,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *UsbConfig_TypeCD) Reset()         { *m = UsbConfig_TypeCD{} }
+func (m *UsbConfig_TypeCD) String() string { return proto.CompactTextString(m) }
+func (*UsbConfig_TypeCD) ProtoMessage()    {}
+func (*UsbConfig_TypeCD) Descriptor() ([]byte, []int) {
+	return fileDescriptor_0965baad9865c9e6, []int{0, 0}
+}
+
+func (m *UsbConfig_TypeCD) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UsbConfig_TypeCD.Unmarshal(m, b)
+}
+func (m *UsbConfig_TypeCD) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UsbConfig_TypeCD.Marshal(b, m, deterministic)
+}
+func (m *UsbConfig_TypeCD) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UsbConfig_TypeCD.Merge(m, src)
+}
+func (m *UsbConfig_TypeCD) XXX_Size() int {
+	return xxx_messageInfo_UsbConfig_TypeCD.Size(m)
+}
+func (m *UsbConfig_TypeCD) XXX_DiscardUnknown() {
+	xxx_messageInfo_UsbConfig_TypeCD.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UsbConfig_TypeCD proto.InternalMessageInfo
+
+func (m *UsbConfig_TypeCD) GetDpOnly() bool {
+	if m != nil {
+		return m.DpOnly
+	}
+	return false
+}
+
+func init() {
+	proto.RegisterType((*UsbConfig)(nil), "chromiumos.config.api.software.UsbConfig")
+	proto.RegisterType((*UsbConfig_TypeCD)(nil), "chromiumos.config.api.software.UsbConfig.TypeCD")
+}
+
+func init() {
+	proto.RegisterFile("chromiumos/config/api/software/usb_config.proto", fileDescriptor_0965baad9865c9e6)
+}
+
+var fileDescriptor_0965baad9865c9e6 = []byte{
+	// 178 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xd2, 0x4f, 0xce, 0x28, 0xca,
+	0xcf, 0xcd, 0x2c, 0xcd, 0xcd, 0x2f, 0xd6, 0x4f, 0xce, 0xcf, 0x4b, 0xcb, 0x4c, 0xd7, 0x4f, 0x2c,
+	0xc8, 0xd4, 0x2f, 0xce, 0x4f, 0x2b, 0x29, 0x4f, 0x2c, 0x4a, 0xd5, 0x2f, 0x2d, 0x4e, 0x8a, 0x87,
+	0x88, 0xeb, 0x15, 0x14, 0xe5, 0x97, 0xe4, 0x0b, 0xc9, 0x21, 0x34, 0xe8, 0x41, 0x25, 0x12, 0x0b,
+	0x32, 0xf5, 0x60, 0x1a, 0x94, 0x2a, 0xb8, 0x38, 0x43, 0x8b, 0x93, 0x9c, 0xc1, 0x32, 0x42, 0x1e,
+	0x5c, 0x6c, 0x25, 0x95, 0x05, 0xa9, 0xc9, 0x29, 0x12, 0x8c, 0x0a, 0x8c, 0x1a, 0xdc, 0x46, 0x06,
+	0x7a, 0xf8, 0x75, 0xeb, 0xc1, 0xb5, 0xea, 0x85, 0x54, 0x16, 0xa4, 0x3a, 0xbb, 0x04, 0x41, 0xf5,
+	0x4b, 0x29, 0x72, 0xb1, 0x41, 0x44, 0x84, 0xc4, 0xb9, 0xd8, 0x53, 0x0a, 0xe2, 0xf3, 0xf3, 0x72,
+	0x2a, 0xc1, 0x86, 0x72, 0x04, 0xb1, 0xa5, 0x14, 0xf8, 0xe7, 0xe5, 0x54, 0x3a, 0x19, 0x47, 0x19,
+	0xa6, 0xe7, 0xc3, 0x2d, 0xd0, 0xcb, 0x2f, 0x4a, 0xc7, 0xe2, 0xb9, 0xf4, 0x7c, 0x14, 0xff, 0x25,
+	0xb1, 0x81, 0x7d, 0x65, 0x0c, 0x08, 0x00, 0x00, 0xff, 0xff, 0x3e, 0xdb, 0x18, 0xc9, 0x08, 0x01,
+	0x00, 0x00,
+}
diff --git a/payload_utils/cros_config_proto_converter.py b/payload_utils/cros_config_proto_converter.py
index 88cad68..b89b414 100755
--- a/payload_utils/cros_config_proto_converter.py
+++ b/payload_utils/cros_config_proto_converter.py
@@ -857,6 +857,29 @@
   return {}
 
 
+def _build_usb(config: Config):
+  """Builds the usb configuration.
+
+  Args:
+    config: Config namedtuple
+
+  Returns:
+    usb configuration.
+  """
+  if not config.sw_config.usb_config:
+    return None
+
+  usb_config = config.sw_config.usb_config
+  if not usb_config.HasField('typecd'):
+    return None
+
+  typecd = usb_config.typecd
+  result = {}
+
+  _upsert(typecd.dp_only, result, 'mode-entry-dp-only')
+  return result
+
+
 def _file(source, destination):
   return {'destination': str(destination), 'source': str(source)}
 
@@ -1404,6 +1427,7 @@
       _build_fingerprint(config.hw_design_config.hardware_topology), result,
       'fingerprint')
   _upsert(_build_ui(config), result, 'ui')
+  _upsert(_build_usb(config), result, 'typecd')
   _upsert(_build_power(config), result, 'power')
   _upsert(_build_resource(config), result, 'resource')
   if config_files.camera_map:
diff --git a/payload_utils/test_data/fake_project.json b/payload_utils/test_data/fake_project.json
index 8573fd8..dd24464 100644
--- a/payload_utils/test_data/fake_project.json
+++ b/payload_utils/test_data/fake_project.json
@@ -149,6 +149,9 @@
           "wake-on-dp": "1"
         },
         "regulatory-label": "fake_regulatory_label",
+        "typecd": {
+          "mode-entry-dp-only": true
+        },
         "ui": {
           "extra-ash-flags": [
             "--arc-build-properties={'device': 'fake_program_cheets', 'firstApiLevel': '28'}",
diff --git a/proto/chromiumos/config/api/software/software_config.proto b/proto/chromiumos/config/api/software/software_config.proto
index 8705530..76a92fc 100644
--- a/proto/chromiumos/config/api/software/software_config.proto
+++ b/proto/chromiumos/config/api/software/software_config.proto
@@ -18,6 +18,7 @@
 import "chromiumos/config/api/software/resource_config.proto";
 import "chromiumos/config/api/software/wifi_config.proto";
 import "chromiumos/config/api/software/ui_config.proto";
+import "chromiumos/config/api/software/usb_config.proto";
 import "chromiumos/config/public_replication/public_replication.proto";
 
 option go_package = "go.chromium.org/chromiumos/config/go/api/software";
@@ -32,7 +33,7 @@
 // SoftwareConfig payloads can be shared across different
 // hardware-design-configs, if the software payloads are the same.
 //
-// NEXT ID: 20
+// NEXT ID: 21
 message SoftwareConfig {
   // Configures fields of AudioConfig that are made public.
   chromiumos.config.public_replication.PublicReplication public_replication =
@@ -72,5 +73,7 @@
 
   UiConfig ui_config = 17;
 
+  UsbConfig usb_config = 20;
+
   reserved 1, 2, 6;
 }
diff --git a/proto/chromiumos/config/api/software/usb_config.proto b/proto/chromiumos/config/api/software/usb_config.proto
new file mode 100644
index 0000000..da11305
--- /dev/null
+++ b/proto/chromiumos/config/api/software/usb_config.proto
@@ -0,0 +1,19 @@
+// Copyright 2022 The Chromium OS Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+syntax = "proto3";
+
+option go_package = "go.chromium.org/chromiumos/config/go/api/software";
+
+package chromiumos.config.api.software;
+
+message UsbConfig {
+  message TypeCD {
+    // AP driven alternate mode entry on this system should be restricted
+    // to DisplayPort alternate mode
+    bool dp_only = 1;
+  }
+
+  TypeCD typecd = 1;
+}
diff --git a/python/chromiumos/config/api/software/software_config_pb2.py b/python/chromiumos/config/api/software/software_config_pb2.py
index d5c60af..433f583 100644
--- a/python/chromiumos/config/api/software/software_config_pb2.py
+++ b/python/chromiumos/config/api/software/software_config_pb2.py
@@ -24,6 +24,7 @@
 from chromiumos.config.api.software import resource_config_pb2 as chromiumos_dot_config_dot_api_dot_software_dot_resource__config__pb2
 from chromiumos.config.api.software import wifi_config_pb2 as chromiumos_dot_config_dot_api_dot_software_dot_wifi__config__pb2
 from chromiumos.config.api.software import ui_config_pb2 as chromiumos_dot_config_dot_api_dot_software_dot_ui__config__pb2
+from chromiumos.config.api.software import usb_config_pb2 as chromiumos_dot_config_dot_api_dot_software_dot_usb__config__pb2
 from chromiumos.config.public_replication import public_replication_pb2 as chromiumos_dot_config_dot_public__replication_dot_public__replication__pb2
 
 
@@ -32,9 +33,9 @@
   package='chromiumos.config.api.software',
   syntax='proto3',
   serialized_options=_b('Z1go.chromium.org/chromiumos/config/go/api/software'),
-  serialized_pb=_b('\n4chromiumos/config/api/software/software_config.proto\x12\x1e\x63hromiumos.config.api.software\x1a\"chromiumos/build/api/factory.proto\x1a*chromiumos/build/api/firmware_config.proto\x1a\'chromiumos/build/api/system_image.proto\x1a,chromiumos/config/api/design_config_id.proto\x1a\x31\x63hromiumos/config/api/software/audio_config.proto\x1a\x35\x63hromiumos/config/api/software/bluetooth_config.proto\x1a\x32\x63hromiumos/config/api/software/camera_config.proto\x1a\x32\x63hromiumos/config/api/software/health_config.proto\x1a\x31\x63hromiumos/config/api/software/power_config.proto\x1a\x34\x63hromiumos/config/api/software/resource_config.proto\x1a\x30\x63hromiumos/config/api/software/wifi_config.proto\x1a.chromiumos/config/api/software/ui_config.proto\x1a=chromiumos/config/public_replication/public_replication.proto\"\x89\t\n\x0eSoftwareConfig\x12S\n\x12public_replication\x18\x0c \x01(\x0b\x32\x37.chromiumos.config.public_replication.PublicReplication\x12?\n\x10\x64\x65sign_config_id\x18\x07 \x01(\x0b\x32%.chromiumos.config.api.DesignConfigId\x12H\n\x0eid_scan_config\x18\x08 \x01(\x0b\x32\x30.chromiumos.config.api.DesignConfigId.ScanConfig\x12\x36\n\x08\x66irmware\x18\x03 \x01(\x0b\x32$.chromiumos.build.api.FirmwareConfig\x12H\n\x15\x66irmware_build_config\x18\t \x01(\x0b\x32).chromiumos.build.api.FirmwareBuildConfig\x12K\n\x16\x66irmware_build_targets\x18\x10 \x01(\x0b\x32+.chromiumos.build.api.Firmware.BuildTargets\x12J\n\x13system_build_target\x18\r \x01(\x0b\x32-.chromiumos.build.api.SystemImage.BuildTarget\x12G\n\x14\x66\x61\x63tory_build_target\x18\x0e \x01(\x0b\x32).chromiumos.build.api.Factory.BuildTarget\x12I\n\x10\x62luetooth_config\x18\x04 \x01(\x0b\x32/.chromiumos.config.api.software.BluetoothConfig\x12\x41\n\x0cpower_config\x18\x05 \x01(\x0b\x32+.chromiumos.config.api.software.PowerConfig\x12G\n\x0fresource_config\x18\x13 \x01(\x0b\x32..chromiumos.config.api.software.ResourceConfig\x12\x42\n\raudio_configs\x18\n \x03(\x0b\x32+.chromiumos.config.api.software.AudioConfig\x12?\n\x0bwifi_config\x18\x0b \x01(\x0b\x32*.chromiumos.config.api.software.WifiConfig\x12\x43\n\rhealth_config\x18\x12 \x01(\x0b\x32,.chromiumos.config.api.software.HealthConfig\x12\x43\n\rcamera_config\x18\x0f \x01(\x0b\x32,.chromiumos.config.api.software.CameraConfig\x12;\n\tui_config\x18\x11 \x01(\x0b\x32(.chromiumos.config.api.software.UiConfigJ\x04\x08\x01\x10\x02J\x04\x08\x02\x10\x03J\x04\x08\x06\x10\x07\x42\x33Z1go.chromium.org/chromiumos/config/go/api/softwareb\x06proto3')
+  serialized_pb=_b('\n4chromiumos/config/api/software/software_config.proto\x12\x1e\x63hromiumos.config.api.software\x1a\"chromiumos/build/api/factory.proto\x1a*chromiumos/build/api/firmware_config.proto\x1a\'chromiumos/build/api/system_image.proto\x1a,chromiumos/config/api/design_config_id.proto\x1a\x31\x63hromiumos/config/api/software/audio_config.proto\x1a\x35\x63hromiumos/config/api/software/bluetooth_config.proto\x1a\x32\x63hromiumos/config/api/software/camera_config.proto\x1a\x32\x63hromiumos/config/api/software/health_config.proto\x1a\x31\x63hromiumos/config/api/software/power_config.proto\x1a\x34\x63hromiumos/config/api/software/resource_config.proto\x1a\x30\x63hromiumos/config/api/software/wifi_config.proto\x1a.chromiumos/config/api/software/ui_config.proto\x1a/chromiumos/config/api/software/usb_config.proto\x1a=chromiumos/config/public_replication/public_replication.proto\"\xc8\t\n\x0eSoftwareConfig\x12S\n\x12public_replication\x18\x0c \x01(\x0b\x32\x37.chromiumos.config.public_replication.PublicReplication\x12?\n\x10\x64\x65sign_config_id\x18\x07 \x01(\x0b\x32%.chromiumos.config.api.DesignConfigId\x12H\n\x0eid_scan_config\x18\x08 \x01(\x0b\x32\x30.chromiumos.config.api.DesignConfigId.ScanConfig\x12\x36\n\x08\x66irmware\x18\x03 \x01(\x0b\x32$.chromiumos.build.api.FirmwareConfig\x12H\n\x15\x66irmware_build_config\x18\t \x01(\x0b\x32).chromiumos.build.api.FirmwareBuildConfig\x12K\n\x16\x66irmware_build_targets\x18\x10 \x01(\x0b\x32+.chromiumos.build.api.Firmware.BuildTargets\x12J\n\x13system_build_target\x18\r \x01(\x0b\x32-.chromiumos.build.api.SystemImage.BuildTarget\x12G\n\x14\x66\x61\x63tory_build_target\x18\x0e \x01(\x0b\x32).chromiumos.build.api.Factory.BuildTarget\x12I\n\x10\x62luetooth_config\x18\x04 \x01(\x0b\x32/.chromiumos.config.api.software.BluetoothConfig\x12\x41\n\x0cpower_config\x18\x05 \x01(\x0b\x32+.chromiumos.config.api.software.PowerConfig\x12G\n\x0fresource_config\x18\x13 \x01(\x0b\x32..chromiumos.config.api.software.ResourceConfig\x12\x42\n\raudio_configs\x18\n \x03(\x0b\x32+.chromiumos.config.api.software.AudioConfig\x12?\n\x0bwifi_config\x18\x0b \x01(\x0b\x32*.chromiumos.config.api.software.WifiConfig\x12\x43\n\rhealth_config\x18\x12 \x01(\x0b\x32,.chromiumos.config.api.software.HealthConfig\x12\x43\n\rcamera_config\x18\x0f \x01(\x0b\x32,.chromiumos.config.api.software.CameraConfig\x12;\n\tui_config\x18\x11 \x01(\x0b\x32(.chromiumos.config.api.software.UiConfig\x12=\n\nusb_config\x18\x14 \x01(\x0b\x32).chromiumos.config.api.software.UsbConfigJ\x04\x08\x01\x10\x02J\x04\x08\x02\x10\x03J\x04\x08\x06\x10\x07\x42\x33Z1go.chromium.org/chromiumos/config/go/api/softwareb\x06proto3')
   ,
-  dependencies=[chromiumos_dot_build_dot_api_dot_factory__pb2.DESCRIPTOR,chromiumos_dot_build_dot_api_dot_firmware__config__pb2.DESCRIPTOR,chromiumos_dot_build_dot_api_dot_system__image__pb2.DESCRIPTOR,chromiumos_dot_config_dot_api_dot_design__config__id__pb2.DESCRIPTOR,chromiumos_dot_config_dot_api_dot_software_dot_audio__config__pb2.DESCRIPTOR,chromiumos_dot_config_dot_api_dot_software_dot_bluetooth__config__pb2.DESCRIPTOR,chromiumos_dot_config_dot_api_dot_software_dot_camera__config__pb2.DESCRIPTOR,chromiumos_dot_config_dot_api_dot_software_dot_health__config__pb2.DESCRIPTOR,chromiumos_dot_config_dot_api_dot_software_dot_power__config__pb2.DESCRIPTOR,chromiumos_dot_config_dot_api_dot_software_dot_resource__config__pb2.DESCRIPTOR,chromiumos_dot_config_dot_api_dot_software_dot_wifi__config__pb2.DESCRIPTOR,chromiumos_dot_config_dot_api_dot_software_dot_ui__config__pb2.DESCRIPTOR,chromiumos_dot_config_dot_public__replication_dot_public__replication__pb2.DESCRIPTOR,])
+  dependencies=[chromiumos_dot_build_dot_api_dot_factory__pb2.DESCRIPTOR,chromiumos_dot_build_dot_api_dot_firmware__config__pb2.DESCRIPTOR,chromiumos_dot_build_dot_api_dot_system__image__pb2.DESCRIPTOR,chromiumos_dot_config_dot_api_dot_design__config__id__pb2.DESCRIPTOR,chromiumos_dot_config_dot_api_dot_software_dot_audio__config__pb2.DESCRIPTOR,chromiumos_dot_config_dot_api_dot_software_dot_bluetooth__config__pb2.DESCRIPTOR,chromiumos_dot_config_dot_api_dot_software_dot_camera__config__pb2.DESCRIPTOR,chromiumos_dot_config_dot_api_dot_software_dot_health__config__pb2.DESCRIPTOR,chromiumos_dot_config_dot_api_dot_software_dot_power__config__pb2.DESCRIPTOR,chromiumos_dot_config_dot_api_dot_software_dot_resource__config__pb2.DESCRIPTOR,chromiumos_dot_config_dot_api_dot_software_dot_wifi__config__pb2.DESCRIPTOR,chromiumos_dot_config_dot_api_dot_software_dot_ui__config__pb2.DESCRIPTOR,chromiumos_dot_config_dot_api_dot_software_dot_usb__config__pb2.DESCRIPTOR,chromiumos_dot_config_dot_public__replication_dot_public__replication__pb2.DESCRIPTOR,])
 
 
 
@@ -158,6 +159,13 @@
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='usb_config', full_name='chromiumos.config.api.software.SoftwareConfig.usb_config', index=16,
+      number=20, type=11, cpp_type=10, label=1,
+      has_default_value=False, default_value=None,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
   ],
   extensions=[
   ],
@@ -170,8 +178,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=732,
-  serialized_end=1893,
+  serialized_start=781,
+  serialized_end=2005,
 )
 
 _SOFTWARECONFIG.fields_by_name['public_replication'].message_type = chromiumos_dot_config_dot_public__replication_dot_public__replication__pb2._PUBLICREPLICATION
@@ -190,6 +198,7 @@
 _SOFTWARECONFIG.fields_by_name['health_config'].message_type = chromiumos_dot_config_dot_api_dot_software_dot_health__config__pb2._HEALTHCONFIG
 _SOFTWARECONFIG.fields_by_name['camera_config'].message_type = chromiumos_dot_config_dot_api_dot_software_dot_camera__config__pb2._CAMERACONFIG
 _SOFTWARECONFIG.fields_by_name['ui_config'].message_type = chromiumos_dot_config_dot_api_dot_software_dot_ui__config__pb2._UICONFIG
+_SOFTWARECONFIG.fields_by_name['usb_config'].message_type = chromiumos_dot_config_dot_api_dot_software_dot_usb__config__pb2._USBCONFIG
 DESCRIPTOR.message_types_by_name['SoftwareConfig'] = _SOFTWARECONFIG
 _sym_db.RegisterFileDescriptor(DESCRIPTOR)
 
diff --git a/python/chromiumos/config/api/software/usb_config_pb2.py b/python/chromiumos/config/api/software/usb_config_pb2.py
new file mode 100644
index 0000000..6acaa5a
--- /dev/null
+++ b/python/chromiumos/config/api/software/usb_config_pb2.py
@@ -0,0 +1,110 @@
+# Generated by the protocol buffer compiler.  DO NOT EDIT!
+# source: chromiumos/config/api/software/usb_config.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+  name='chromiumos/config/api/software/usb_config.proto',
+  package='chromiumos.config.api.software',
+  syntax='proto3',
+  serialized_options=_b('Z1go.chromium.org/chromiumos/config/go/api/software'),
+  serialized_pb=_b('\n/chromiumos/config/api/software/usb_config.proto\x12\x1e\x63hromiumos.config.api.software\"h\n\tUsbConfig\x12@\n\x06typecd\x18\x01 \x01(\x0b\x32\x30.chromiumos.config.api.software.UsbConfig.TypeCD\x1a\x19\n\x06TypeCD\x12\x0f\n\x07\x64p_only\x18\x01 \x01(\x08\x42\x33Z1go.chromium.org/chromiumos/config/go/api/softwareb\x06proto3')
+)
+
+
+
+
+_USBCONFIG_TYPECD = _descriptor.Descriptor(
+  name='TypeCD',
+  full_name='chromiumos.config.api.software.UsbConfig.TypeCD',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='dp_only', full_name='chromiumos.config.api.software.UsbConfig.TypeCD.dp_only', index=0,
+      number=1, type=8, cpp_type=7, label=1,
+      has_default_value=False, default_value=False,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=162,
+  serialized_end=187,
+)
+
+_USBCONFIG = _descriptor.Descriptor(
+  name='UsbConfig',
+  full_name='chromiumos.config.api.software.UsbConfig',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='typecd', full_name='chromiumos.config.api.software.UsbConfig.typecd', index=0,
+      number=1, type=11, cpp_type=10, label=1,
+      has_default_value=False, default_value=None,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+  ],
+  extensions=[
+  ],
+  nested_types=[_USBCONFIG_TYPECD, ],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=83,
+  serialized_end=187,
+)
+
+_USBCONFIG_TYPECD.containing_type = _USBCONFIG
+_USBCONFIG.fields_by_name['typecd'].message_type = _USBCONFIG_TYPECD
+DESCRIPTOR.message_types_by_name['UsbConfig'] = _USBCONFIG
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+UsbConfig = _reflection.GeneratedProtocolMessageType('UsbConfig', (_message.Message,), dict(
+
+  TypeCD = _reflection.GeneratedProtocolMessageType('TypeCD', (_message.Message,), dict(
+    DESCRIPTOR = _USBCONFIG_TYPECD,
+    __module__ = 'chromiumos.config.api.software.usb_config_pb2'
+    # @@protoc_insertion_point(class_scope:chromiumos.config.api.software.UsbConfig.TypeCD)
+    ))
+  ,
+  DESCRIPTOR = _USBCONFIG,
+  __module__ = 'chromiumos.config.api.software.usb_config_pb2'
+  # @@protoc_insertion_point(class_scope:chromiumos.config.api.software.UsbConfig)
+  ))
+_sym_db.RegisterMessage(UsbConfig)
+_sym_db.RegisterMessage(UsbConfig.TypeCD)
+
+
+DESCRIPTOR._options = None
+# @@protoc_insertion_point(module_scope)
diff --git a/test/project/fake/fake/config.star b/test/project/fake/fake/config.star
index 6e28696..7fc8010 100755
--- a/test/project/fake/fake/config.star
+++ b/test/project/fake/fake/config.star
@@ -322,6 +322,7 @@
         ),
     ),
     ui = sc.create_ui(extra_web_apps_dir = "apps1"),
+    usb = sc.create_usb(dp_only = True),
 )
 
 design.append_configs(
diff --git a/test/project/fake/fake/generated/config.jsonproto b/test/project/fake/fake/generated/config.jsonproto
index 4985721..6a6fc37 100644
--- a/test/project/fake/fake/generated/config.jsonproto
+++ b/test/project/fake/fake/generated/config.jsonproto
@@ -5444,6 +5444,11 @@
       "uiConfig": {
         "extraWebAppsDir": "apps1"
       },
+      "usbConfig": {
+        "typecd": {
+          "dpOnly": true
+        }
+      },
       "wifiConfig": {
         "ath10kConfig": {
           "nonTabletModePowerTable": {
diff --git a/test/project/fake/fake/sw_build_config/platform/chromeos-config/generated/project-config.json b/test/project/fake/fake/sw_build_config/platform/chromeos-config/generated/project-config.json
index 79d588f..72c7a78 100644
--- a/test/project/fake/fake/sw_build_config/platform/chromeos-config/generated/project-config.json
+++ b/test/project/fake/fake/sw_build_config/platform/chromeos-config/generated/project-config.json
@@ -182,6 +182,9 @@
             }
           ]
         },
+        "typecd": {
+          "mode-entry-dp-only": true
+        },
         "ui": {
           "extra-ash-flags": [
             "--arc-build-properties={'device': 'fake_program_cheets', 'firstApiLevel': '28'}",
diff --git a/util/README.md b/util/README.md
index b4e55dd..af3dacc 100644
--- a/util/README.md
+++ b/util/README.md
@@ -1422,6 +1422,15 @@
 
 
 
+### sw_config.create_usb {#sw_config.create_usb}
+
+
+```python
+sw_config.create_usb()
+```
+
+
+
 ### sw_config.make_resolution {#sw_config.make_resolution}
 
 
diff --git a/util/design.star b/util/design.star
index 84df674..ef8ce38 100644
--- a/util/design.star
+++ b/util/design.star
@@ -76,6 +76,7 @@
         camera = None,
         health = None,
         ui = None,
+        usb = None,
         device_tree_compatible_match = None,
         smbios_name_match_override = None):
     """Creates and appends new SW and HW configs.
@@ -112,6 +113,7 @@
         camera: A CameraConfig to be used in the SoftwareConfig.
         health: A HealthConfig to be used in the SoftwareConfig.
         ui: A UiConfig to be used in the SoftwareConfig.
+        usb: UsbConfig to be used in the SoftwareConfig.
         device_tree_compatible_match: For ARM platform, a str used for
             device_tree_compatible_match in IdentityScanConfig.
         smbios_name_match_override: For x86 platform, a str used for
@@ -167,6 +169,7 @@
     sw_config.camera_config = camera
     sw_config.health_config = health
     sw_config.ui_config = ui
+    sw_config.usb_config = usb
     sw_config.public_replication = public_replication.create(
         public_fields = _DEFAULT_PUBLIC_SW_CONFIG_FIELDS + extra_sw_config_public_fields,
     )
diff --git a/util/sw_config.star b/util/sw_config.star
index cef5ce0..6e91dab 100644
--- a/util/sw_config.star
+++ b/util/sw_config.star
@@ -22,6 +22,10 @@
     ui_pb = "chromiumos.config.api.software",
 )
 load(
+    "@proto//chromiumos/config/api/software/usb_config.proto",
+    usb_pb = "chromiumos.config.api.software",
+)
+load(
     "@proto//chromiumos/build/api/firmware_config.proto",
     fw_pb = "chromiumos.build.api",
 )
@@ -735,6 +739,14 @@
         requisition = requisition,
     )
 
+def _create_usb(
+        dp_only = None):
+    return usb_pb.UsbConfig(
+        typecd = usb_pb.UsbConfig.TypeCD(
+            dp_only = dp_only or False,
+        ),
+    )
+
 def _make_resolution(width, height):
     return cam_pb.Resolution(width = width, height = height)
 
@@ -771,6 +783,7 @@
     create_rtw88_geo_offsets = _create_rtw88_geo_offsets,
     create_rtw88_power_chain = _create_rtw88_power_chain,
     create_ui = _create_ui,
+    create_usb = _create_usb,
     fw_type = _FW_TYPE,
     ui_requisition = _UI_REQUISITION,
     make_resolution = _make_resolution,