LKML Archive on lore.kernel.org help / color / mirror / Atom feed
From: Bryan Wu <cooloney@kernel.org> To: bigeasy@linutronix.de, linux-usb@vger.kernel.org Cc: linux-kernel@vger.kernel.org, Michael Hennerich <michael.hennerich@analog.com>, Bryan Wu <cooloney@kernel.org> Subject: [PATCH] USB/ISP1760: Add support for the generic platfrom device centralized driver model Date: Thu, 6 Nov 2008 17:25:49 +0800 [thread overview] Message-ID: <1225963549-9892-1-git-send-email-cooloney@kernel.org> (raw) From: Michael Hennerich <michael.hennerich@analog.com> Signed-off-by: Michael Hennerich <michael.hennerich@analog.com> Signed-off-by: Bryan Wu <cooloney@kernel.org> --- drivers/usb/host/isp1760-if.c | 98 +++++++++++++++++++++++++++++++++++++++++ 1 files changed, 98 insertions(+), 0 deletions(-) diff --git a/drivers/usb/host/isp1760-if.c b/drivers/usb/host/isp1760-if.c index af849f5..dc16698 100644 --- a/drivers/usb/host/isp1760-if.c +++ b/drivers/usb/host/isp1760-if.c @@ -3,6 +3,7 @@ * Currently there is support for * - OpenFirmware * - PCI + * - PDEV (generic platform device centralized driver model) * * (c) 2007 Sebastian Siewior <bigeasy@linutronix.de> * @@ -23,6 +24,12 @@ #include <linux/pci.h> #endif +#if !defined(CONFIG_USB_ISP1760_OF) && !defined(CONFIG_USB_ISP1760_PCI) +#define USB_ISP1760_PDEV +#include <linux/platform_device.h> +#include <linux/usb/isp1760.h> +#endif + #ifdef CONFIG_USB_ISP1760_OF static int of_isp1760_probe(struct of_device *dev, const struct of_device_id *match) @@ -286,12 +293,100 @@ static struct pci_driver isp1761_pci_driver = { }; #endif +#ifdef USB_ISP1760_PDEV +static int __devinit +isp1760_pdev_probe(struct platform_device *pdev) +{ + struct usb_hcd *hcd; + struct resource *addr; + int irq; + unsigned int devflags = 0; + struct isp1760_platform_data *priv = pdev->dev.platform_data; + + /* basic sanity checks first. board-specific init logic should + * have initialized these two resources and probably board + * specific platform_data. we don't probe for IRQs, and do only + * minimal sanity checking. + */ + + if (usb_disabled()) + return -ENODEV; + + if (pdev->num_resources < 2) + return -ENODEV; + + addr = platform_get_resource(pdev, IORESOURCE_MEM, 0); + irq = platform_get_irq(pdev, 0); + + if (!addr || irq < 0) + return -ENODEV; + + if (priv) { + if (priv->is_isp1761) + devflags |= ISP1760_FLAG_ISP1761; + if (priv->port1_disable) + devflags |= ISP1760_FLAG_PORT1_DIS; + if (priv->bus_width_16) + devflags |= ISP1760_FLAG_BUS_WIDTH_16; + if (priv->port1_otg) + devflags |= ISP1760_FLAG_OTG_EN; + if (priv->analog_oc) + devflags |= ISP1760_FLAG_ANALOG_OC; + if (priv->dack_polarity_high) + devflags |= ISP1760_FLAG_DACK_POL_HIGH; + if (priv->dreq_polarity_high) + devflags |= ISP1760_FLAG_DREQ_POL_HIGH; + } + + hcd = isp1760_register(addr->start, resource_size(addr), irq, + IRQF_DISABLED | IRQF_SHARED | IRQF_TRIGGER_FALLING, + &pdev->dev, dev_name(&pdev->dev), + devflags); + + if (IS_ERR(hcd)) + return PTR_ERR(hcd); + + return 0; +} + +static int __devexit +isp1760_pdev_remove(struct platform_device *pdev) +{ + struct usb_hcd *hcd = platform_get_drvdata(pdev); + + platform_set_drvdata(pdev, NULL); + + usb_remove_hcd(hcd); + iounmap(hcd->regs); + usb_put_hcd(hcd); + return 0; +} + +/* this driver is exported so sl811_cs can depend on it */ +struct platform_driver isp1760_pdev_driver = { + .probe = isp1760_pdev_probe, + .remove = __devexit_p(isp1760_pdev_remove), + .driver = { + .name = "isp1760-hcd", + .owner = THIS_MODULE, + }, +}; +#endif /* USB_ISP1760_PDEV */ + static int __init isp1760_init(void) { int ret = -ENODEV; init_kmem_once(); +#ifdef USB_ISP1760_PDEV + ret = platform_driver_register(&isp1760_pdev_driver); + if (ret) { + deinit_kmem_cache(); + return ret; + } +#endif + #ifdef CONFIG_USB_ISP1760_OF ret = of_register_platform_driver(&isp1760_of_driver); if (ret) { @@ -325,6 +420,9 @@ static void __exit isp1760_exit(void) #ifdef CONFIG_USB_ISP1760_PCI pci_unregister_driver(&isp1761_pci_driver); #endif +#ifdef USB_ISP1760_PDEV + platform_driver_unregister(&isp1760_pdev_driver); +#endif deinit_kmem_cache(); } module_exit(isp1760_exit); -- 1.5.6.3
next reply other threads:[~2008-11-06 9:24 UTC|newest] Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top 2008-11-06 9:25 Bryan Wu [this message] 2008-11-06 17:57 ` [PATCH] USB/ISP1760: Add support for the generic platfrom device centralized driver model Sebastian Andrzej Siewior 2008-11-06 19:29 ` Hennerich, Michael 2008-11-07 4:00 ` Bryan Wu
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=1225963549-9892-1-git-send-email-cooloney@kernel.org \ --to=cooloney@kernel.org \ --cc=bigeasy@linutronix.de \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-usb@vger.kernel.org \ --cc=michael.hennerich@analog.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).