From: Ravi Babu <ravibabu@ti.com>
To: linux-usb@vger.kernel.org
Cc: linux-omap@vger.kernel.org, balbi@ti.com,
grant.likely@secretlab.ca, devicetree-discuss@lists.ozlabs.org,
tony@atomide.com, ajayguptaj@gmail.com
Subject: [PATCH v7 04/11] usb: otg: nop: add support for multiple tranceiver
Date: Thu, 2 Aug 2012 17:42:47 +0530 [thread overview]
Message-ID: <1343909574-15633-5-git-send-email-ravibabu@ti.com> (raw)
In-Reply-To: <1343909574-15633-1-git-send-email-ravibabu@ti.com>
From: Ajay Kumar Gupta <ajay.gupta@ti.com>
Currently we have one single nop transceiver support as same is
defined as a global variable in drivers/usb/otg/nop-usb-xceiv.c.
This need to be changed to support multiple otg controller each
using nop transceiver on a platform such as am335x.
Signed-off-by: Ajay Kumar Gupta <ajay.gupta@ti.com>
Signed-off-by: Ravi Babu <ravibabu@ti.com>
---
drivers/usb/musb/am35x.c | 2 +-
drivers/usb/musb/blackfin.c | 2 +-
drivers/usb/musb/da8xx.c | 2 +-
drivers/usb/musb/davinci.c | 4 +-
drivers/usb/musb/musb_dsps.c | 8 +++---
drivers/usb/musb/tusb6010.c | 4 +-
drivers/usb/otg/nop-usb-xceiv.c | 54 +++++++++++++++++++++++++++++++++-----
include/linux/usb/otg.h | 4 +-
8 files changed, 60 insertions(+), 20 deletions(-)
diff --git a/drivers/usb/musb/am35x.c b/drivers/usb/musb/am35x.c
index 01203eb..984e439 100644
--- a/drivers/usb/musb/am35x.c
+++ b/drivers/usb/musb/am35x.c
@@ -408,7 +408,7 @@ static int am35x_musb_exit(struct musb *musb)
data->set_phy_power(0);
usb_put_phy(musb->xceiv);
- usb_nop_xceiv_unregister();
+ usb_nop_xceiv_unregister(musb->xceiv);
return 0;
}
diff --git a/drivers/usb/musb/blackfin.c b/drivers/usb/musb/blackfin.c
index c848b82..f1fe728 100644
--- a/drivers/usb/musb/blackfin.c
+++ b/drivers/usb/musb/blackfin.c
@@ -442,7 +442,7 @@ static int bfin_musb_exit(struct musb *musb)
gpio_free(musb->config->gpio_vrsel);
usb_put_phy(musb->xceiv);
- usb_nop_xceiv_unregister();
+ usb_nop_xceiv_unregister(musb->xceiv);
return 0;
}
diff --git a/drivers/usb/musb/da8xx.c b/drivers/usb/musb/da8xx.c
index cebd9d7..a5260b6 100644
--- a/drivers/usb/musb/da8xx.c
+++ b/drivers/usb/musb/da8xx.c
@@ -460,7 +460,7 @@ static int da8xx_musb_exit(struct musb *musb)
phy_off();
usb_put_phy(musb->xceiv);
- usb_nop_xceiv_unregister();
+ usb_nop_xceiv_unregister(musb->xceiv);
return 0;
}
diff --git a/drivers/usb/musb/davinci.c b/drivers/usb/musb/davinci.c
index 3f094f2..c7ef654 100644
--- a/drivers/usb/musb/davinci.c
+++ b/drivers/usb/musb/davinci.c
@@ -447,7 +447,7 @@ static int davinci_musb_init(struct musb *musb)
fail:
usb_put_phy(musb->xceiv);
unregister:
- usb_nop_xceiv_unregister();
+ usb_nop_xceiv_unregister(musb->xceiv);
return -ENODEV;
}
@@ -496,7 +496,7 @@ static int davinci_musb_exit(struct musb *musb)
phy_off();
usb_put_phy(musb->xceiv);
- usb_nop_xceiv_unregister();
+ usb_nop_xceiv_unregister(musb->xceiv);
return 0;
}
diff --git a/drivers/usb/musb/musb_dsps.c b/drivers/usb/musb/musb_dsps.c
index 7a09d55..c529ccb 100644
--- a/drivers/usb/musb/musb_dsps.c
+++ b/drivers/usb/musb/musb_dsps.c
@@ -420,7 +420,7 @@ static int dsps_musb_init(struct musb *musb)
/* mentor core register starts at offset of 0x400 from musb base */
musb->mregs += wrp->musb_core_offset;
- /* NOP driver needs change if supporting dual instance */
+ /* Register NOP driver */
usb_nop_xceiv_register();
musb->xceiv = usb_get_phy(USB_PHY_TYPE_USB2);
if (IS_ERR_OR_NULL(musb->xceiv))
@@ -456,7 +456,7 @@ static int dsps_musb_init(struct musb *musb)
return 0;
err0:
usb_put_phy(musb->xceiv);
- usb_nop_xceiv_unregister();
+ usb_nop_xceiv_unregister(musb->xceiv);
return status;
}
@@ -472,9 +472,9 @@ static int dsps_musb_exit(struct musb *musb)
/* Shutdown the on-chip PHY and its PLL. */
musb_dsps_phy_control(glue, pdev->id, 0);
- /* NOP driver needs change if supporting dual instance */
+ /* Unregister NOP driver */
usb_put_phy(musb->xceiv);
- usb_nop_xceiv_unregister();
+ usb_nop_xceiv_unregister(musb->xceiv);
return 0;
}
diff --git a/drivers/usb/musb/tusb6010.c b/drivers/usb/musb/tusb6010.c
index 64a0e95..3a12330 100644
--- a/drivers/usb/musb/tusb6010.c
+++ b/drivers/usb/musb/tusb6010.c
@@ -1132,7 +1132,7 @@ done:
iounmap(sync);
usb_put_phy(musb->xceiv);
- usb_nop_xceiv_unregister();
+ usb_nop_xceiv_unregister(musb->xceiv);
}
return ret;
}
@@ -1148,7 +1148,7 @@ static int tusb_musb_exit(struct musb *musb)
iounmap(musb->sync_va);
usb_put_phy(musb->xceiv);
- usb_nop_xceiv_unregister();
+ usb_nop_xceiv_unregister(musb->xceiv);
return 0;
}
diff --git a/drivers/usb/otg/nop-usb-xceiv.c b/drivers/usb/otg/nop-usb-xceiv.c
index 803f958..04ddcee 100644
--- a/drivers/usb/otg/nop-usb-xceiv.c
+++ b/drivers/usb/otg/nop-usb-xceiv.c
@@ -31,30 +31,69 @@
#include <linux/dma-mapping.h>
#include <linux/usb/otg.h>
#include <linux/slab.h>
+#include <linux/idr.h>
struct nop_usb_xceiv {
struct usb_phy phy;
struct device *dev;
+ struct platform_device *pd;
};
-static struct platform_device *pd;
+static DEFINE_IDA(nop_ida);
-void usb_nop_xceiv_register(void)
+static int nop_get_id(gfp_t gfp_mask)
{
- if (pd)
+ int ret, id;
+
+ ret = ida_pre_get(&nop_ida, gfp_mask);
+ if (!ret) {
+ pr_err("failed to reserve resource for id\n");
+ return -ENOMEM;
+ }
+
+ ret = ida_get_new(&nop_ida, &id);
+ if (ret < 0) {
+ pr_err("failed to allocate a new id\n");
+ return ret;
+ }
+
+ return id;
+}
+
+static void nop_put_id(int id)
+{
+
+ pr_debug("removing id %d\n", id);
+ ida_remove(&nop_ida, id);
+}
+
+void usb_nop_xceiv_register()
+{
+ struct platform_device *pd;
+ int id;
+
+ id = nop_get_id(GFP_KERNEL);
+ if (id < 0) {
+ pr_err("failed to allocate a new id\n");
return;
- pd = platform_device_register_simple("nop_usb_xceiv", -1, NULL, 0);
+ }
+
+ pd = platform_device_register_simple("nop_usb_xceiv", id, NULL, 0);
if (!pd) {
- printk(KERN_ERR "Unable to register usb nop transceiver\n");
+ pr_err("Unable to register usb nop transceiver\n");
return;
}
}
EXPORT_SYMBOL(usb_nop_xceiv_register);
-void usb_nop_xceiv_unregister(void)
+void usb_nop_xceiv_unregister(struct usb_phy *phy)
{
+ struct nop_usb_xceiv *nop = container_of(phy,
+ struct nop_usb_xceiv, phy);
+ struct platform_device *pd = nop->pd;
+
platform_device_unregister(pd);
- pd = NULL;
+ nop_put_id(pd->id);
}
EXPORT_SYMBOL(usb_nop_xceiv_unregister);
@@ -107,6 +146,7 @@ static int __devinit nop_usb_xceiv_probe(struct platform_device *pdev)
return -ENOMEM;
}
+ nop->pd = pdev;
nop->dev = &pdev->dev;
nop->phy.dev = nop->dev;
nop->phy.label = "nop-xceiv";
diff --git a/include/linux/usb/otg.h b/include/linux/usb/otg.h
index 4636d39..2d7704e 100644
--- a/include/linux/usb/otg.h
+++ b/include/linux/usb/otg.h
@@ -138,13 +138,13 @@ extern void usb_remove_phy(struct usb_phy *);
#if defined(CONFIG_NOP_USB_XCEIV) || (defined(CONFIG_NOP_USB_XCEIV_MODULE) && defined(MODULE))
/* sometimes transceivers are accessed only through e.g. ULPI */
extern void usb_nop_xceiv_register(void);
-extern void usb_nop_xceiv_unregister(void);
+extern void usb_nop_xceiv_unregister(struct usb_phy *);
#else
static inline void usb_nop_xceiv_register(void)
{
}
-static inline void usb_nop_xceiv_unregister(void)
+static inline void usb_nop_xceiv_unregister(struct usb_phy *phy)
{
}
#endif
--
1.7.0.4
next prev parent reply other threads:[~2012-08-02 12:12 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-08-02 12:12 [PATCH v7 00/11] usb: musb: adding multi instance support Ravi Babu
2012-08-02 12:12 ` [PATCH v7 03/11] usb: musb: am335x: add support for dual instance Ravi Babu
2012-08-02 12:12 ` Ravi Babu [this message]
2012-08-02 12:12 ` [PATCH v7 07/11] usb: otg: nop: add dt support Ravi Babu
[not found] ` <1343909574-15633-1-git-send-email-ravibabu-l0cyMroinI0@public.gmane.org>
2012-08-02 12:12 ` [PATCH v7 01/11] usb: musb: add musb_ida for multi instance support Ravi Babu
2012-08-02 12:12 ` [PATCH v7 02/11] usb: musb: kill global and static for multi instance Ravi Babu
2012-08-02 12:12 ` [PATCH v7 05/11] usb: musb: dsps: add dt support Ravi Babu
2012-08-02 12:12 ` [PATCH v7 06/11] arm/dts: am33xx: Add dt data for usbss Ravi Babu
2012-08-02 12:12 ` [PATCH v7 08/11] arm/dts: am33xx: add dt data for usb nop phy Ravi Babu
2012-08-02 12:12 ` [PATCH v7 09/11] usb: musb: dsps: remove explicit NOP device creation Ravi Babu
2012-08-02 12:12 ` [PATCH v7 10/11] usb: musb: dsps: get the PHY using phandle api Ravi Babu
2012-08-02 22:08 ` [PATCH v7 00/11] usb: musb: adding multi instance support Daniel Mack
[not found] ` <501AFA6B.4010005-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2012-08-03 0:54 ` B, Ravi
[not found] ` <6C6B28D4DC342643927BEAFCE8707BF63E9DB6AE-Er742YJ7I/eIQmiDNMet8wC/G2K4zDHf@public.gmane.org>
2012-08-03 8:19 ` Daniel Mack
2012-08-03 8:43 ` Ajay Gupta
[not found] ` <F20D4CDD972CFA4D89D3A083D2D561967FF1F67DE3-kdsAE/FnitNDw2glCA4ptUEOCMrvLtNR@public.gmane.org>
2012-08-03 8:53 ` B, Ravi
2012-08-03 9:02 ` Daniel Mack
[not found] ` <501B93AB.7050501-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2012-08-03 9:07 ` Hiremath, Vaibhav
[not found] ` <79CD15C6BA57404B839C016229A409A83EA7F4A3-Er742YJ7I/eIQmiDNMet8wC/G2K4zDHf@public.gmane.org>
2012-08-03 11:41 ` Daniel Mack
2012-08-03 11:48 ` B, Ravi
2012-08-03 12:35 ` Koen Kooi
[not found] ` <501BB8F2.8030909-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2012-08-03 15:48 ` Hiremath, Vaibhav
2012-08-03 16:01 ` Koen Kooi
2012-08-05 19:52 ` Daniel Mack
2012-08-06 6:40 ` Hiremath, Vaibhav
2012-08-02 12:12 ` [PATCH v7 11/11] arm/dts: am33xx: add phy phandle to usbss Ravi Babu
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=1343909574-15633-5-git-send-email-ravibabu@ti.com \
--to=ravibabu@ti.com \
--cc=ajayguptaj@gmail.com \
--cc=balbi@ti.com \
--cc=devicetree-discuss@lists.ozlabs.org \
--cc=grant.likely@secretlab.ca \
--cc=linux-omap@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=tony@atomide.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: link
Be 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).