usb: dwc3: dwc3-omap: make dwc3-omap build in uboot
authorKishon Vijay Abraham I <kishon@ti.com>
Mon, 23 Feb 2015 13:10:07 +0000 (18:40 +0530)
committerMarek Vasut <marex@denx.de>
Tue, 14 Apr 2015 03:48:10 +0000 (05:48 +0200)
*) Changed the included header files to that used in u-boot.
*) Removed extcon_* APIs
*) Removed regulator_* APIs
*) Fixed other misc warnings
*) Added dwc3-omap.h to include the definitions of UTMI modes.

Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com>
Reviewed-by: Lukasz Majewski <l.majewski@samsung.com>
drivers/usb/dwc3/dwc3-omap.c
include/linux/usb/dwc3-omap.h [new file with mode: 0644]

index ce2d6a6a525bea0e9999435511a83dec6ce152ec..b38598757d238bd0f651cd6b6629840ad59e33a2 100644 (file)
  * SPDX-License-Identifier:     GPL-2.0
  */
 
-#include <linux/module.h>
-#include <linux/kernel.h>
-#include <linux/slab.h>
-#include <linux/interrupt.h>
-#include <linux/platform_device.h>
-#include <linux/platform_data/dwc3-omap.h>
-#include <linux/dma-mapping.h>
+#include <common.h>
+#include <malloc.h>
+#include <asm/io.h>
+#include <linux/usb/dwc3-omap.h>
 #include <linux/ioport.h>
-#include <linux/io.h>
-#include <linux/of.h>
-#include <linux/of_platform.h>
-#include <linux/extcon.h>
-#include <linux/regulator/consumer.h>
 
 #include <linux/usb/otg.h>
+#include <linux/compat.h>
+
+#include "linux-compat.h"
 
 /*
  * All these registers belong to OMAP's Wrapper around the
 struct dwc3_omap {
        struct device           *dev;
 
-       int                     irq;
        void __iomem            *base;
 
        u32                     utmi_otg_status;
@@ -124,13 +118,6 @@ struct dwc3_omap {
        u32                     irq0_offset;
 
        u32                     dma_status:1;
-
-       struct extcon_specific_cable_nb extcon_vbus_dev;
-       struct extcon_specific_cable_nb extcon_id_dev;
-       struct notifier_block   vbus_nb;
-       struct notifier_block   id_nb;
-
-       struct regulator        *vbus_reg;
 };
 
 enum omap_dwc3_vbus_id_status {
@@ -205,21 +192,12 @@ static void dwc3_omap_write_irq0_set(struct dwc3_omap *omap, u32 value)
 static void dwc3_omap_set_mailbox(struct dwc3_omap *omap,
        enum omap_dwc3_vbus_id_status status)
 {
-       int     ret;
        u32     val;
 
        switch (status) {
        case OMAP_DWC3_ID_GROUND:
                dev_dbg(omap->dev, "ID GND\n");
 
-               if (omap->vbus_reg) {
-                       ret = regulator_enable(omap->vbus_reg);
-                       if (ret) {
-                               dev_dbg(omap->dev, "regulator enable failed\n");
-                               return;
-                       }
-               }
-
                val = dwc3_omap_read_utmi_status(omap);
                val &= ~(USBOTGSS_UTMI_OTG_STATUS_IDDIG
                                | USBOTGSS_UTMI_OTG_STATUS_VBUSVALID
@@ -242,9 +220,6 @@ static void dwc3_omap_set_mailbox(struct dwc3_omap *omap,
                break;
 
        case OMAP_DWC3_ID_FLOAT:
-               if (omap->vbus_reg)
-                       regulator_disable(omap->vbus_reg);
-
        case OMAP_DWC3_VBUS_OFF:
                dev_dbg(omap->dev, "VBUS Disconnect\n");
 
@@ -349,32 +324,6 @@ static void dwc3_omap_disable_irqs(struct dwc3_omap *omap)
 
 static u64 dwc3_omap_dma_mask = DMA_BIT_MASK(32);
 
-static int dwc3_omap_id_notifier(struct notifier_block *nb,
-       unsigned long event, void *ptr)
-{
-       struct dwc3_omap *omap = container_of(nb, struct dwc3_omap, id_nb);
-
-       if (event)
-               dwc3_omap_set_mailbox(omap, OMAP_DWC3_ID_GROUND);
-       else
-               dwc3_omap_set_mailbox(omap, OMAP_DWC3_ID_FLOAT);
-
-       return NOTIFY_DONE;
-}
-
-static int dwc3_omap_vbus_notifier(struct notifier_block *nb,
-       unsigned long event, void *ptr)
-{
-       struct dwc3_omap *omap = container_of(nb, struct dwc3_omap, vbus_nb);
-
-       if (event)
-               dwc3_omap_set_mailbox(omap, OMAP_DWC3_VBUS_VALID);
-       else
-               dwc3_omap_set_mailbox(omap, OMAP_DWC3_VBUS_OFF);
-
-       return NOTIFY_DONE;
-}
-
 static void dwc3_omap_map_offset(struct dwc3_omap *omap)
 {
        struct device_node      *node = omap->dev->of_node;
@@ -420,42 +369,6 @@ static void dwc3_omap_set_utmi_mode(struct dwc3_omap *omap)
        dwc3_omap_write_utmi_status(omap, reg);
 }
 
-static int dwc3_omap_extcon_register(struct dwc3_omap *omap)
-{
-       int                     ret;
-       struct device_node      *node = omap->dev->of_node;
-       struct extcon_dev       *edev;
-
-       if (of_property_read_bool(node, "extcon")) {
-               edev = extcon_get_edev_by_phandle(omap->dev, 0);
-               if (IS_ERR(edev)) {
-                       dev_vdbg(omap->dev, "couldn't get extcon device\n");
-                       return -EPROBE_DEFER;
-               }
-
-               omap->vbus_nb.notifier_call = dwc3_omap_vbus_notifier;
-               ret = extcon_register_interest(&omap->extcon_vbus_dev,
-                                              edev->name, "USB",
-                                              &omap->vbus_nb);
-               if (ret < 0)
-                       dev_vdbg(omap->dev, "failed to register notifier for USB\n");
-
-               omap->id_nb.notifier_call = dwc3_omap_id_notifier;
-               ret = extcon_register_interest(&omap->extcon_id_dev,
-                                              edev->name, "USB-HOST",
-                                              &omap->id_nb);
-               if (ret < 0)
-                       dev_vdbg(omap->dev, "failed to register notifier for USB-HOST\n");
-
-               if (extcon_get_cable_state(edev, "USB") == true)
-                       dwc3_omap_set_mailbox(omap, OMAP_DWC3_VBUS_VALID);
-               if (extcon_get_cable_state(edev, "USB-HOST") == true)
-                       dwc3_omap_set_mailbox(omap, OMAP_DWC3_ID_GROUND);
-       }
-
-       return 0;
-}
-
 static int dwc3_omap_probe(struct platform_device *pdev)
 {
        struct device_node      *node = pdev->dev.of_node;
@@ -463,11 +376,8 @@ static int dwc3_omap_probe(struct platform_device *pdev)
        struct dwc3_omap        *omap;
        struct resource         *res;
        struct device           *dev = &pdev->dev;
-       struct regulator        *vbus_reg = NULL;
 
        int                     ret;
-       int                     irq;
-
        u32                     reg;
 
        void __iomem            *base;
@@ -483,29 +393,13 @@ static int dwc3_omap_probe(struct platform_device *pdev)
 
        platform_set_drvdata(pdev, omap);
 
-       irq = platform_get_irq(pdev, 0);
-       if (irq < 0) {
-               dev_err(dev, "missing IRQ resource\n");
-               return -EINVAL;
-       }
-
        res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
        base = devm_ioremap_resource(dev, res);
        if (IS_ERR(base))
                return PTR_ERR(base);
 
-       if (of_property_read_bool(node, "vbus-supply")) {
-               vbus_reg = devm_regulator_get(dev, "vbus");
-               if (IS_ERR(vbus_reg)) {
-                       dev_err(dev, "vbus init failed\n");
-                       return PTR_ERR(vbus_reg);
-               }
-       }
-
        omap->dev       = dev;
-       omap->irq       = irq;
        omap->base      = base;
-       omap->vbus_reg  = vbus_reg;
        dev->dma_mask   = &dwc3_omap_dma_mask;
 
        dwc3_omap_map_offset(omap);
@@ -515,34 +409,16 @@ static int dwc3_omap_probe(struct platform_device *pdev)
        reg = dwc3_omap_readl(omap->base, USBOTGSS_SYSCONFIG);
        omap->dma_status = !!(reg & USBOTGSS_SYSCONFIG_DMADISABLE);
 
-       ret = devm_request_irq(dev, omap->irq, dwc3_omap_interrupt, 0,
-                       "dwc3-omap", omap);
-       if (ret) {
-               dev_err(dev, "failed to request IRQ #%d --> %d\n",
-                               omap->irq, ret);
-               goto err0;
-       }
-
        dwc3_omap_enable_irqs(omap);
 
-       ret = dwc3_omap_extcon_register(omap);
-       if (ret < 0)
-               goto err1;
-
        ret = of_platform_populate(node, NULL, NULL, dev);
        if (ret) {
                dev_err(&pdev->dev, "failed to create dwc3 core\n");
-               goto err2;
+               goto err1;
        }
 
        return 0;
 
-err2:
-       if (omap->extcon_vbus_dev.edev)
-               extcon_unregister_interest(&omap->extcon_vbus_dev);
-       if (omap->extcon_id_dev.edev)
-               extcon_unregister_interest(&omap->extcon_id_dev);
-
 err1:
        dwc3_omap_disable_irqs(omap);
 
@@ -554,10 +430,6 @@ static int dwc3_omap_remove(struct platform_device *pdev)
 {
        struct dwc3_omap        *omap = platform_get_drvdata(pdev);
 
-       if (omap->extcon_vbus_dev.edev)
-               extcon_unregister_interest(&omap->extcon_vbus_dev);
-       if (omap->extcon_id_dev.edev)
-               extcon_unregister_interest(&omap->extcon_id_dev);
        dwc3_omap_disable_irqs(omap);
        device_for_each_child(&pdev->dev, NULL, dwc3_omap_remove_core);
 
diff --git a/include/linux/usb/dwc3-omap.h b/include/linux/usb/dwc3-omap.h
new file mode 100644 (file)
index 0000000..8bf7b55
--- /dev/null
@@ -0,0 +1,19 @@
+/* include/linux/usb/dwc3-omap.h
+ *
+ * Copyright (c) 2014 Texas Instruments Incorporated - http://www.ti.com
+ *
+ * Designware SuperSpeed Glue
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+
+#ifndef __DWC3_OMAP_H_
+#define __DWC3_OMAP_H_
+
+enum dwc3_omap_utmi_mode {
+       DWC3_OMAP_UTMI_MODE_UNKNOWN = 0,
+       DWC3_OMAP_UTMI_MODE_HW,
+       DWC3_OMAP_UTMI_MODE_SW,
+};
+
+#endif /* __DWC3_OMAP_H_ */