[U-Boot] [PATCH RFC 4/6] dm: usb-host: Add support for driver model in o/e/xhci.

Vivek Gautam gautam.vivek at samsung.com
Wed Feb 18 11:41:37 CET 2015


Adding support for driver model and necessary callbacks
in ohci/ehci/xhci.

Signed-off-by: Vivek Gautam <gautam.vivek at samsung.com>
---
 drivers/usb/host/ehci-hcd.c |   36 ++++++++++++++++++++++++++++--------
 drivers/usb/host/ohci-hcd.c |   35 ++++++++++++++++++++++++++++-------
 drivers/usb/host/xhci.c     |   34 +++++++++++++++++++++++++++-------
 3 files changed, 83 insertions(+), 22 deletions(-)

diff --git a/drivers/usb/host/ehci-hcd.c b/drivers/usb/host/ehci-hcd.c
index f1fb190..6320b98 100644
--- a/drivers/usb/host/ehci-hcd.c
+++ b/drivers/usb/host/ehci-hcd.c
@@ -930,13 +930,13 @@ unknown:
 	return -1;
 }
 
-int usb_lowlevel_stop(int index)
+int ehci_lowlevel_stop(int index)
 {
 	ehci_shutdown(&ehcic[index]);
 	return ehci_hcd_stop(index);
 }
 
-int usb_lowlevel_init(int index, enum usb_init_type init, void **controller)
+int ehci_lowlevel_init(int index, enum usb_init_type init, void **controller)
 {
 	uint32_t reg;
 	uint32_t cmd;
@@ -1065,8 +1065,8 @@ done:
 }
 
 int
-submit_bulk_msg(struct usb_device *dev, unsigned long pipe, void *buffer,
-		int length)
+ehci_submit_bulk_msg(struct usb_device *dev, unsigned long pipe,
+			void *buffer, int length)
 {
 
 	if (usb_pipetype(pipe) != PIPE_BULK) {
@@ -1077,8 +1077,8 @@ submit_bulk_msg(struct usb_device *dev, unsigned long pipe, void *buffer,
 }
 
 int
-submit_control_msg(struct usb_device *dev, unsigned long pipe, void *buffer,
-		   int length, struct devrequest *setup)
+ehci_submit_control_msg(struct usb_device *dev, unsigned long pipe,
+			void *buffer, int length, struct devrequest *setup)
 {
 	struct ehci_ctrl *ctrl = dev->controller;
 
@@ -1387,8 +1387,8 @@ out:
 }
 
 int
-submit_int_msg(struct usb_device *dev, unsigned long pipe, void *buffer,
-	       int length, int interval)
+ehci_submit_int_msg(struct usb_device *dev, unsigned long pipe,
+			void *buffer, int length, int interval)
 {
 	void *backbuffer;
 	struct int_queue *queue;
@@ -1423,3 +1423,23 @@ submit_int_msg(struct usb_device *dev, unsigned long pipe, void *buffer,
 	/* everything worked out fine */
 	return result;
 }
+
+static const struct udevice_id ehci_hcd_id[] = {
+	{ "ehci-hcd", 0 },
+	{ },
+};
+
+static const struct usb_ops ehci_ops = {
+	.lowlevel_init	 = ehci_lowlevel_init,
+	.lowlevel_stop	 = ehci_lowlevel_stop,
+	.submit_ctrl_msg = ehci_submit_control_msg,
+	.submit_bulk_msg = ehci_submit_bulk_msg,
+	.submit_int_msg	 = ehci_submit_int_msg,
+};
+
+U_BOOT_DRIVER(ehci_hcd_drv) = {
+	.name	= "ehci_hcd_drv",
+	.of_match = ehci_hcd_id,
+	.id	= UCLASS_USB,
+	.ops	= &ehci_ops,
+};
diff --git a/drivers/usb/host/ohci-hcd.c b/drivers/usb/host/ohci-hcd.c
index 97a7ede..3bfc295 100644
--- a/drivers/usb/host/ohci-hcd.c
+++ b/drivers/usb/host/ohci-hcd.c
@@ -1465,15 +1465,15 @@ int submit_common_msg(struct usb_device *dev, unsigned long pipe, void *buffer,
 }
 
 /* submit routines called from usb.c */
-int submit_bulk_msg(struct usb_device *dev, unsigned long pipe, void *buffer,
-		int transfer_len)
+int ohci_submit_bulk_msg(struct usb_device *dev, unsigned long pipe,
+		void *buffer, int transfer_len)
 {
 	info("submit_bulk_msg");
 	return submit_common_msg(dev, pipe, buffer, transfer_len, NULL, 0);
 }
 
-int submit_control_msg(struct usb_device *dev, unsigned long pipe, void *buffer,
-		int transfer_len, struct devrequest *setup)
+int ohci_submit_control_msg(struct usb_device *dev, unsigned long pipe,
+		void *buffer, int transfer_len, struct devrequest *setup)
 {
 	int maxsize = usb_maxpacket(dev, pipe);
 
@@ -1499,7 +1499,7 @@ int submit_control_msg(struct usb_device *dev, unsigned long pipe, void *buffer,
 	return submit_common_msg(dev, pipe, buffer, transfer_len, setup, 0);
 }
 
-int submit_int_msg(struct usb_device *dev, unsigned long pipe, void *buffer,
+int ohci_submit_int_msg(struct usb_device *dev, unsigned long pipe, void *buffer,
 		int transfer_len, int interval)
 {
 	info("submit_int_msg");
@@ -1748,7 +1748,8 @@ static void hc_release_ohci(ohci_t *ohci)
  */
 static char ohci_inited = 0;
 
-int usb_lowlevel_init(int index, enum usb_init_type init, void **controller)
+int ohci_lowlevel_init(int index, enum usb_init_type init,
+			void **controller)
 {
 #ifdef CONFIG_PCI_OHCI
 	pci_dev_t pdev;
@@ -1854,7 +1855,7 @@ int usb_lowlevel_init(int index, enum usb_init_type init, void **controller)
 	return 0;
 }
 
-int usb_lowlevel_stop(int index)
+int ohci_lowlevel_stop(int index)
 {
 	/* this gets called really early - before the controller has */
 	/* even been initialized! */
@@ -1880,3 +1881,23 @@ int usb_lowlevel_stop(int index)
 	ohci_inited = 0;
 	return 0;
 }
+
+static const struct udevice_id ohci_hcd_id[] = {
+	{ "ohci-hcd", 0 },
+	{ },
+};
+
+static const struct usb_ops ohci_ops = {
+	.lowlevel_init	 = ohci_lowlevel_init
+	.lowlevel_stop	 = ohci_lowlevel_stop
+	.submit_ctrl_msg = ohci_submit_control_msg
+	.submit_bulk_msg = ohci_submit_bulk_msg
+	.submit_int_msg	 = ohci_submit_int_msg
+};
+
+U_BOOT_DRIVER(ohci_hcd_drv) = {
+	.name	= "ohci_hcd_drv",
+	.of_match = ohci_hcd_id,
+	.id	= UCLASS_USB,
+	.ops	= &ohci_ops,
+};
diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c
index 87f2972..b3c3aab 100644
--- a/drivers/usb/host/xhci.c
+++ b/drivers/usb/host/xhci.c
@@ -859,7 +859,7 @@ unknown:
  * @return 0
  */
 int
-submit_int_msg(struct usb_device *udev, unsigned long pipe, void *buffer,
+xhci_submit_int_msg(struct usb_device *udev, unsigned long pipe, void *buffer,
 						int length, int interval)
 {
 	/*
@@ -879,8 +879,8 @@ submit_int_msg(struct usb_device *udev, unsigned long pipe, void *buffer,
  * @return returns 0 if successful else -1 on failure
  */
 int
-submit_bulk_msg(struct usb_device *udev, unsigned long pipe, void *buffer,
-								int length)
+xhci_submit_bulk_msg(struct usb_device *udev, unsigned long pipe,
+			void *buffer, int length)
 {
 	if (usb_pipetype(pipe) != PIPE_BULK) {
 		printf("non-bulk pipe (type=%lu)", usb_pipetype(pipe));
@@ -901,8 +901,8 @@ submit_bulk_msg(struct usb_device *udev, unsigned long pipe, void *buffer,
  * @return returns 0 if successful else -1 on failure
  */
 int
-submit_control_msg(struct usb_device *udev, unsigned long pipe, void *buffer,
-					int length, struct devrequest *setup)
+xhci_submit_control_msg(struct usb_device *udev, unsigned long pipe,
+			void *buffer, int length, struct devrequest *setup)
 {
 	struct xhci_ctrl *ctrl = udev->controller;
 	int ret = 0;
@@ -936,7 +936,7 @@ submit_control_msg(struct usb_device *udev, unsigned long pipe, void *buffer,
  * @param index	index to the host controller data structure
  * @return pointer to the intialised controller
  */
-int usb_lowlevel_init(int index, enum usb_init_type init, void **controller)
+int xhci_lowlevel_init(int index, enum usb_init_type init, void **controller)
 {
 	uint32_t val;
 	uint32_t val2;
@@ -1009,7 +1009,7 @@ int usb_lowlevel_init(int index, enum usb_init_type init, void **controller)
  * @param index	index to the host controller data structure
  * @return none
  */
-int usb_lowlevel_stop(int index)
+int xhci_lowlevel_stop(int index)
 {
 	struct xhci_ctrl *ctrl = (xhcic + index);
 	u32 temp;
@@ -1028,3 +1028,23 @@ int usb_lowlevel_stop(int index)
 
 	return 0;
 }
+
+static const struct udevice_id xhci_hcd_id[] = {
+	{ "xhci-hcd", 0 },
+	{ },
+};
+
+static const struct usb_ops xhci_ops = {
+	.lowlevel_init	 = xhci_lowlevel_init,
+	.lowlevel_stop	 = xhci_lowlevel_stop,
+	.submit_ctrl_msg = xhci_submit_control_msg,
+	.submit_bulk_msg = xhci_submit_bulk_msg,
+	.submit_int_msg	 = xhci_submit_int_msg,
+};
+
+U_BOOT_DRIVER(xhci_hcd_drv) = {
+	.name	= "xhci_hcd_drv",
+	.of_match = xhci_hcd_id,
+	.id	= UCLASS_USB,
+	.ops	= &xhci_ops,
+};
-- 
1.7.10.4



More information about the U-Boot mailing list