diff --git a/target/linux/ramips/files/arch/mips/ralink/rt305x/devices.c b/target/linux/ramips/files/arch/mips/ralink/rt305x/devices.c
index aa8f10e0bfde00cd820cf2117afe03fb8ee43fce..5dfbddbf2b07be6627386e74a1b9d772d063b830 100644
--- a/target/linux/ramips/files/arch/mips/ralink/rt305x/devices.c
+++ b/target/linux/ramips/files/arch/mips/ralink/rt305x/devices.c
@@ -242,3 +242,29 @@ void __init rt305x_register_spi(struct spi_board_info *info, int n)
 	spi_register_board_info(info, n);
 	platform_device_register(&rt305x_spi_device);
 }
+
+static struct resource rt305x_usb_resources[] = {
+	{
+		.start	= RT305X_OTG_BASE,
+		.end	= RT305X_OTG_BASE + 0x3FFFF,
+		.flags	= IORESOURCE_MEM,
+	}, {
+		.start	= RT305X_INTC_IRQ_OTG,
+		.end	= RT305X_INTC_IRQ_OTG,
+		.flags	= IORESOURCE_IRQ,
+	},
+};
+
+static struct platform_device rt305x_usb_device = {
+	.name			= "dwc_otg",
+	.resource		= rt305x_usb_resources,
+	.num_resources	= ARRAY_SIZE(rt305x_usb_resources),
+	.dev = {
+		.platform_data = NULL,
+	}
+};
+
+void __init rt305x_register_usb(void)
+{
+	platform_device_register(&rt305x_usb_device);
+}
diff --git a/target/linux/ramips/files/arch/mips/ralink/rt305x/devices.h b/target/linux/ramips/files/arch/mips/ralink/rt305x/devices.h
index e37fe47a57d29ef275271b90f2a069a069878c19..22dc5ea12dd28e4c6971c2b711404e1c6f4634e5 100644
--- a/target/linux/ramips/files/arch/mips/ralink/rt305x/devices.h
+++ b/target/linux/ramips/files/arch/mips/ralink/rt305x/devices.h
@@ -23,6 +23,7 @@ void rt305x_register_ethernet(void);
 void rt305x_register_wifi(void);
 void rt305x_register_wdt(void);
 void rt305x_register_spi(struct spi_board_info *info, int n);
+void rt305x_register_usb(void);
 
 #endif  /* __RT305X_DEVICES_H */