Re: [PATCH] Add platform device support for the ISP1760 USB chip

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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

[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux