Catalin Marinas wrote:
> In addition, it changes the function prototype for the
isp1760_register() function to use predefined types like phys_addr_t and
size_t rather than u64.
Please make this a separate patch.
diff --git a/drivers/usb/host/Kconfig b/drivers/usb/host/Kconfig
index 2c63bfb..56de061 100644
--- a/drivers/usb/host/Kconfig
+++ b/drivers/usb/host/Kconfig
@@ -123,7 +123,7 @@ config USB_ISP116X_HCD
config USB_ISP1760_HCD
tristate "ISP 1760 HCD support"
- depends on USB && EXPERIMENTAL && (PCI || PPC_OF)
+ depends on USB && EXPERIMENTAL
Platform device support is always present I guess.
diff --git a/drivers/usb/host/isp1760-plat.c b/drivers/usb/host/isp1760-plat.c
new file mode 100644
index 0000000..1b15f09
--- /dev/null
+++ b/drivers/usb/host/isp1760-plat.c
@@ -0,0 +1,117 @@
+/*
+ * drivers/usb/host/isp1760-plat.c
+ *
+ * Glue code for the ISP1760 driver and bus using the patform device
+ * interface.
+ *
+ * Copyright (C) 2009 ARM Limited
+ * Written by Catalin Marinas <catalin.marinas@xxxxxxx>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/platform_device.h>
+#include <linux/usb.h>
+
+#include "../core/hcd.h"
+#include "isp1760-hcd.h"
+
+static int __devinit isp1760_drv_probe(struct platform_device *pdev)
+{
+ int ret = 0;
+ struct usb_hcd *hcd;
+ struct resource *mem_res;
+ struct resource *irq_res;
+ size_t mem_size;
+
+ mem_res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+ if (!mem_res) {
+ pr_warning("isp1760: Memory resource not available\n");
+ ret = -ENODEV;
+ goto out;
+ }
+ mem_size = mem_res->end - mem_res->start + 1;
+ if (!request_mem_region(mem_res->start, mem_size, "isp1760")) {
+ pr_warning("isp1760: Cannot reserve the memory resource\n");
+ ret = -EBUSY;
+ goto out;
+ }
+
+ irq_res = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
+ if (!irq_res) {
+ pr_warning("isp1760: IRQ resource not available\n");
+ return -ENODEV;
+ }
+
+ hcd = isp1760_register(mem_res->start, mem_size, irq_res->start,
+ IRQF_SHARED | IRQF_DISABLED, &pdev->dev,
+ dev_name(&pdev->dev), 0);
+ if (IS_ERR(hcd)) {
+ pr_warning("isp1760: Failed to register the HCD device\n");
+ ret = -ENODEV;
+ goto cleanup;
+ }
+
+ pr_info("ISP1760 USB device initialised\n");
+ return ret;
+
+cleanup:
+ release_mem_region(mem_res->start, mem_size);
+out:
+ return ret;
+}
+
+static int __devexit isp1760_drv_remove(struct platform_device *pdev)
+{
+ struct resource *mem_res;
+ size_t mem_size;
+
+ mem_res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+ mem_size = mem_res->end - mem_res->start + 1;
+ release_mem_region(mem_res->start, mem_size);
+
+ return 0;
+}
+
+static struct platform_driver isp1760_driver = {
+ .probe = isp1760_drv_probe,
+ .remove = isp1760_drv_remove,
+ .driver = {
+ .name = "isp1760",
+ },
+};
+
+static int __init isp1760_init(void)
+{
+ int ret;
+
+ ret = init_kmem_once();
+ if (ret)
+ goto out;
+ ret = platform_driver_register(&isp1760_driver);
+ if (ret)
+ deinit_kmem_cache();
+out:
+ return ret;
+}
+module_init(isp1760_init);
+
+static void __exit isp1760_exit(void)
+{
+ platform_driver_unregister(&isp1760_driver);
+ deinit_kmem_cache();
+}
+module_exit(isp1760_exit);
This looks like it based on my -if.c code and is not totally written by
you as the copyright says.
The more important thing is that you use init_kmem_ince() and
deinit_kmem_cache() and this breaks the PCI/OF part if it used at the same
time.
Sebastian
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html