* [PATCH v5 00/22] OMAP USB Host cleanup
@ 2013-01-02 15:00 Roger Quadros
2013-01-02 15:00 ` [PATCH v5 01/22] mfd: omap-usb-tll: Avoid creating copy of platform data Roger Quadros
` (22 more replies)
0 siblings, 23 replies; 26+ messages in thread
From: Roger Quadros @ 2013-01-02 15:00 UTC (permalink / raw)
To: balbi, sameo, tony
Cc: sshtylyov, linux-usb, linux-kernel, keshava_mgowda,
linux-arm-kernel, linux-omap, bjorn, rogerq
Hi,
This patchset addresses the following
- Avoid addressing clocks one by one by name and use a for loop + bunch
of cleanups.
- Get number of channels/ports dynamically either from revision register
or from platform data. Avoids getting clocks that are not present.
- Add OMAP5 and HSIC mode (Not tested)
v5:
- Rebased on top of todays arm-soc/for-next
- Removed the clock merging patch from the list.
- Updated patches 14, 19 and 20 to accomodate the above change.
- Added patch 22 to fix a build warning.
v4:
- Added appropriate maintainers in to/cc
- minor print message fix in patch 23 to maintain consistency
v3:
- Rebased on arm-soc/for-next commit f979306c4d38d213c6977aaf3b1115e8ded71e3a
- Rearranged patch that get rids of cpu_is_omap..() macros
- Coding style fixes
v2:
- Clocks are allocated dynamically based on number of ports available
on the platform
- Reduced console spam if non critical clocks are not found on the platform.
- Get rid of cpu_is_.. macros from USB host driver.
cheers,
-roger
---
Roger Quadros (22):
mfd: omap-usb-tll: Avoid creating copy of platform data
mfd: omap-usb-tll: Fix channel count detection
mfd: omap-usb-tll: Use devm_kzalloc/ioremap and clean up error path
mfd: omap-usb-tll: Clean up clock handling
mfd: omap-usb-tll: introduce and use mode_needs_tll()
mfd: omap-usb-tll: Check for missing platform data in probe
mfd: omap-usb-tll: Fix error message
mfd: omap-usb-tll: serialize access to TLL device
mfd: omap-usb-tll: Add OMAP5 revision and HSIC support
mfd: omap_usb_host: Avoid creating copy of platform_data
mfd: omap-usb-host: Use devm_kzalloc() and devm_request_and_ioremap()
mfd: omap-usb-host: know about number of ports from revision register
mfd: omap-usb-host: override number of ports from platform data
mfd: omap-usb-host: cleanup clock management code
mfd: omap-usb-host: Manage HSIC clocks for HSIC mode
mfd: omap-usb-host: Get rid of unnecessary spinlock
mfd: omap-usb-host: clean up omap_usbhs_init()
USB: ehci-omap: Don't free gpios that we didn't request
ARM: OMAP3: clock data: get rid of unused USB host clock aliases and
dummies
ARM: OMAP4: clock data: get rid of unused USB host clock aliases
mfd: omap-usb-host: Don't spam console on clk_set_parent failure
mdf: omap-usb-host: get rid of build warning
arch/arm/mach-omap2/cclock3xxx_data.c | 11 -
arch/arm/mach-omap2/cclock44xx_data.c | 7 -
arch/arm/mach-omap2/usb-host.c | 1 +
arch/arm/mach-omap2/usb.h | 1 +
drivers/mfd/omap-usb-host.c | 499 +++++++++++++++++++-------------
drivers/mfd/omap-usb-tll.c | 244 +++++++++-------
drivers/usb/host/ehci-omap.c | 8 -
include/linux/platform_data/usb-omap.h | 1 +
8 files changed, 435 insertions(+), 337 deletions(-)
--
1.7.4.1
^ permalink raw reply [flat|nested] 26+ messages in thread
* [PATCH v5 01/22] mfd: omap-usb-tll: Avoid creating copy of platform data
2013-01-02 15:00 [PATCH v5 00/22] OMAP USB Host cleanup Roger Quadros
@ 2013-01-02 15:00 ` Roger Quadros
2013-01-02 15:00 ` [PATCH v5 02/22] mfd: omap-usb-tll: Fix channel count detection Roger Quadros
` (21 subsequent siblings)
22 siblings, 0 replies; 26+ messages in thread
From: Roger Quadros @ 2013-01-02 15:00 UTC (permalink / raw)
To: balbi, sameo, tony
Cc: keshava_mgowda, sshtylyov, bjorn, rogerq, linux-usb, linux-omap,
linux-arm-kernel, linux-kernel
Just a pointer to the platform data should suffice.
Signed-off-by: Roger Quadros <rogerq@ti.com>
Acked-by: Felipe Balbi <balbi@ti.com>
---
drivers/mfd/omap-usb-tll.c | 9 ++++-----
1 files changed, 4 insertions(+), 5 deletions(-)
diff --git a/drivers/mfd/omap-usb-tll.c b/drivers/mfd/omap-usb-tll.c
index eb86915..a10dcd1 100644
--- a/drivers/mfd/omap-usb-tll.c
+++ b/drivers/mfd/omap-usb-tll.c
@@ -98,7 +98,7 @@
struct usbtll_omap {
struct clk *usbtll_p1_fck;
struct clk *usbtll_p2_fck;
- struct usbtll_omap_platform_data platdata;
+ struct usbtll_omap_platform_data *pdata;
/* secure the register updates */
spinlock_t lock;
};
@@ -223,8 +223,7 @@ static int usbtll_omap_probe(struct platform_device *pdev)
spin_lock_init(&tll->lock);
- for (i = 0; i < OMAP3_HS_USB_PORTS; i++)
- tll->platdata.port_mode[i] = pdata->port_mode[i];
+ tll->pdata = pdata;
tll->usbtll_p1_fck = clk_get(dev, "usb_tll_hs_usb_ch0_clk");
if (IS_ERR(tll->usbtll_p1_fck)) {
@@ -362,7 +361,7 @@ static int usbtll_omap_remove(struct platform_device *pdev)
static int usbtll_runtime_resume(struct device *dev)
{
struct usbtll_omap *tll = dev_get_drvdata(dev);
- struct usbtll_omap_platform_data *pdata = &tll->platdata;
+ struct usbtll_omap_platform_data *pdata = tll->pdata;
unsigned long flags;
dev_dbg(dev, "usbtll_runtime_resume\n");
@@ -388,7 +387,7 @@ static int usbtll_runtime_resume(struct device *dev)
static int usbtll_runtime_suspend(struct device *dev)
{
struct usbtll_omap *tll = dev_get_drvdata(dev);
- struct usbtll_omap_platform_data *pdata = &tll->platdata;
+ struct usbtll_omap_platform_data *pdata = tll->pdata;
unsigned long flags;
dev_dbg(dev, "usbtll_runtime_suspend\n");
--
1.7.4.1
^ permalink raw reply related [flat|nested] 26+ messages in thread
* [PATCH v5 02/22] mfd: omap-usb-tll: Fix channel count detection
2013-01-02 15:00 [PATCH v5 00/22] OMAP USB Host cleanup Roger Quadros
2013-01-02 15:00 ` [PATCH v5 01/22] mfd: omap-usb-tll: Avoid creating copy of platform data Roger Quadros
@ 2013-01-02 15:00 ` Roger Quadros
2013-01-02 15:00 ` [PATCH v5 03/22] mfd: omap-usb-tll: Use devm_kzalloc/ioremap and clean up error path Roger Quadros
` (20 subsequent siblings)
22 siblings, 0 replies; 26+ messages in thread
From: Roger Quadros @ 2013-01-02 15:00 UTC (permalink / raw)
To: balbi, sameo, tony
Cc: keshava_mgowda, sshtylyov, bjorn, rogerq, linux-usb, linux-omap,
linux-arm-kernel, linux-kernel
Fix channel count detecion for REV2. Also, don't give up
if we don't recognize the IP Revision. We assume the default
number of channels (i.e. 3) for unrecognized IPs.
Signed-off-by: Roger Quadros <rogerq@ti.com>
---
drivers/mfd/omap-usb-tll.c | 20 +++++++++++---------
1 files changed, 11 insertions(+), 9 deletions(-)
diff --git a/drivers/mfd/omap-usb-tll.c b/drivers/mfd/omap-usb-tll.c
index a10dcd1..5d5595b 100644
--- a/drivers/mfd/omap-usb-tll.c
+++ b/drivers/mfd/omap-usb-tll.c
@@ -98,6 +98,7 @@
struct usbtll_omap {
struct clk *usbtll_p1_fck;
struct clk *usbtll_p2_fck;
+ int nch; /* num. of channels */
struct usbtll_omap_platform_data *pdata;
/* secure the register updates */
spinlock_t lock;
@@ -210,7 +211,7 @@ static int usbtll_omap_probe(struct platform_device *pdev)
unsigned reg;
unsigned long flags;
int ret = 0;
- int i, ver, count;
+ int i, ver;
dev_dbg(dev, "starting TI HSUSB TLL Controller\n");
@@ -262,16 +263,18 @@ static int usbtll_omap_probe(struct platform_device *pdev)
ver = usbtll_read(base, OMAP_USBTLL_REVISION);
switch (ver) {
case OMAP_USBTLL_REV1:
- case OMAP_USBTLL_REV2:
- count = OMAP_TLL_CHANNEL_COUNT;
+ tll->nch = OMAP_TLL_CHANNEL_COUNT;
break;
+ case OMAP_USBTLL_REV2:
case OMAP_USBTLL_REV3:
- count = OMAP_REV2_TLL_CHANNEL_COUNT;
+ tll->nch = OMAP_REV2_TLL_CHANNEL_COUNT;
break;
default:
- dev_err(dev, "TLL version failed\n");
- ret = -ENODEV;
- goto err_ioremap;
+ tll->nch = OMAP_TLL_CHANNEL_COUNT;
+ dev_dbg(dev,
+ "USB TLL Rev : 0x%x not recognized, assuming %d channels\n",
+ ver, tll->nch);
+ break;
}
if (is_ehci_tll_mode(pdata->port_mode[0]) ||
@@ -291,7 +294,7 @@ static int usbtll_omap_probe(struct platform_device *pdev)
usbtll_write(base, OMAP_TLL_SHARED_CONF, reg);
/* Enable channels now */
- for (i = 0; i < count; i++) {
+ for (i = 0; i < tll->nch; i++) {
reg = usbtll_read(base, OMAP_TLL_CHANNEL_CONF(i));
if (is_ohci_port(pdata->port_mode[i])) {
@@ -319,7 +322,6 @@ static int usbtll_omap_probe(struct platform_device *pdev)
}
}
-err_ioremap:
spin_unlock_irqrestore(&tll->lock, flags);
iounmap(base);
pm_runtime_put_sync(dev);
--
1.7.4.1
^ permalink raw reply related [flat|nested] 26+ messages in thread
* [PATCH v5 03/22] mfd: omap-usb-tll: Use devm_kzalloc/ioremap and clean up error path
2013-01-02 15:00 [PATCH v5 00/22] OMAP USB Host cleanup Roger Quadros
2013-01-02 15:00 ` [PATCH v5 01/22] mfd: omap-usb-tll: Avoid creating copy of platform data Roger Quadros
2013-01-02 15:00 ` [PATCH v5 02/22] mfd: omap-usb-tll: Fix channel count detection Roger Quadros
@ 2013-01-02 15:00 ` Roger Quadros
2013-01-02 15:00 ` [PATCH v5 04/22] mfd: omap-usb-tll: Clean up clock handling Roger Quadros
` (19 subsequent siblings)
22 siblings, 0 replies; 26+ messages in thread
From: Roger Quadros @ 2013-01-02 15:00 UTC (permalink / raw)
To: balbi, sameo, tony
Cc: sshtylyov, linux-usb, linux-kernel, keshava_mgowda,
linux-arm-kernel, linux-omap, bjorn, rogerq
Use devm_ variants of kzalloc() and ioremap(). Simplify the error path.
Signed-off-by: Roger Quadros <rogerq@ti.com>
---
drivers/mfd/omap-usb-tll.c | 37 +++++++++++--------------------------
1 files changed, 11 insertions(+), 26 deletions(-)
diff --git a/drivers/mfd/omap-usb-tll.c b/drivers/mfd/omap-usb-tll.c
index 5d5595b..e225cbc 100644
--- a/drivers/mfd/omap-usb-tll.c
+++ b/drivers/mfd/omap-usb-tll.c
@@ -215,11 +215,10 @@ static int usbtll_omap_probe(struct platform_device *pdev)
dev_dbg(dev, "starting TI HSUSB TLL Controller\n");
- tll = kzalloc(sizeof(struct usbtll_omap), GFP_KERNEL);
+ tll = devm_kzalloc(dev, sizeof(struct usbtll_omap), GFP_KERNEL);
if (!tll) {
dev_err(dev, "Memory allocation failed\n");
- ret = -ENOMEM;
- goto end;
+ return -ENOMEM;
}
spin_lock_init(&tll->lock);
@@ -230,28 +229,21 @@ static int usbtll_omap_probe(struct platform_device *pdev)
if (IS_ERR(tll->usbtll_p1_fck)) {
ret = PTR_ERR(tll->usbtll_p1_fck);
dev_err(dev, "usbtll_p1_fck failed error:%d\n", ret);
- goto err_tll;
+ return ret;
}
tll->usbtll_p2_fck = clk_get(dev, "usb_tll_hs_usb_ch1_clk");
if (IS_ERR(tll->usbtll_p2_fck)) {
ret = PTR_ERR(tll->usbtll_p2_fck);
dev_err(dev, "usbtll_p2_fck failed error:%d\n", ret);
- goto err_usbtll_p1_fck;
+ goto err_p2_fck;
}
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
- if (!res) {
- dev_err(dev, "usb tll get resource failed\n");
- ret = -ENODEV;
- goto err_usbtll_p2_fck;
- }
-
- base = ioremap(res->start, resource_size(res));
+ base = devm_request_and_ioremap(dev, res);
if (!base) {
- dev_err(dev, "TLL ioremap failed\n");
- ret = -ENOMEM;
- goto err_usbtll_p2_fck;
+ ret = -EADDRNOTAVAIL;
+ goto err_res;
}
platform_set_drvdata(pdev, tll);
@@ -323,23 +315,17 @@ static int usbtll_omap_probe(struct platform_device *pdev)
}
spin_unlock_irqrestore(&tll->lock, flags);
- iounmap(base);
pm_runtime_put_sync(dev);
tll_pdev = pdev;
- if (!ret)
- goto end;
- pm_runtime_disable(dev);
-err_usbtll_p2_fck:
+ return 0;
+
+err_res:
clk_put(tll->usbtll_p2_fck);
-err_usbtll_p1_fck:
+err_p2_fck:
clk_put(tll->usbtll_p1_fck);
-err_tll:
- kfree(tll);
-
-end:
return ret;
}
@@ -356,7 +342,6 @@ static int usbtll_omap_remove(struct platform_device *pdev)
clk_put(tll->usbtll_p2_fck);
clk_put(tll->usbtll_p1_fck);
pm_runtime_disable(&pdev->dev);
- kfree(tll);
return 0;
}
--
1.7.4.1
^ permalink raw reply related [flat|nested] 26+ messages in thread
* [PATCH v5 04/22] mfd: omap-usb-tll: Clean up clock handling
2013-01-02 15:00 [PATCH v5 00/22] OMAP USB Host cleanup Roger Quadros
` (2 preceding siblings ...)
2013-01-02 15:00 ` [PATCH v5 03/22] mfd: omap-usb-tll: Use devm_kzalloc/ioremap and clean up error path Roger Quadros
@ 2013-01-02 15:00 ` Roger Quadros
2013-01-02 15:00 ` [PATCH v5 05/22] mfd: omap-usb-tll: introduce and use mode_needs_tll() Roger Quadros
` (18 subsequent siblings)
22 siblings, 0 replies; 26+ messages in thread
From: Roger Quadros @ 2013-01-02 15:00 UTC (permalink / raw)
To: balbi, sameo, tony
Cc: keshava_mgowda, sshtylyov, bjorn, rogerq, linux-usb, linux-omap,
linux-arm-kernel, linux-kernel
Every channel has a functional clock that is similarly named.
It makes sense to use a for loop to manage these clocks as OMAPs
can come with up to 3 channels.
Dynamically allocate and get channel clocks depending on the
number of clocks avaiable on the platform.
Signed-off-by: Roger Quadros <rogerq@ti.com>
---
drivers/mfd/omap-usb-tll.c | 93 +++++++++++++++++++++++++++-----------------
1 files changed, 57 insertions(+), 36 deletions(-)
diff --git a/drivers/mfd/omap-usb-tll.c b/drivers/mfd/omap-usb-tll.c
index e225cbc..238d05d 100644
--- a/drivers/mfd/omap-usb-tll.c
+++ b/drivers/mfd/omap-usb-tll.c
@@ -96,10 +96,9 @@
#define is_ehci_tll_mode(x) (x == OMAP_EHCI_PORT_MODE_TLL)
struct usbtll_omap {
- struct clk *usbtll_p1_fck;
- struct clk *usbtll_p2_fck;
int nch; /* num. of channels */
struct usbtll_omap_platform_data *pdata;
+ struct clk **ch_clk;
/* secure the register updates */
spinlock_t lock;
};
@@ -225,26 +224,10 @@ static int usbtll_omap_probe(struct platform_device *pdev)
tll->pdata = pdata;
- tll->usbtll_p1_fck = clk_get(dev, "usb_tll_hs_usb_ch0_clk");
- if (IS_ERR(tll->usbtll_p1_fck)) {
- ret = PTR_ERR(tll->usbtll_p1_fck);
- dev_err(dev, "usbtll_p1_fck failed error:%d\n", ret);
- return ret;
- }
-
- tll->usbtll_p2_fck = clk_get(dev, "usb_tll_hs_usb_ch1_clk");
- if (IS_ERR(tll->usbtll_p2_fck)) {
- ret = PTR_ERR(tll->usbtll_p2_fck);
- dev_err(dev, "usbtll_p2_fck failed error:%d\n", ret);
- goto err_p2_fck;
- }
-
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
base = devm_request_and_ioremap(dev, res);
- if (!base) {
- ret = -EADDRNOTAVAIL;
- goto err_res;
- }
+ if (!base)
+ return -EADDRNOTAVAIL;
platform_set_drvdata(pdev, tll);
pm_runtime_enable(dev);
@@ -269,6 +252,32 @@ static int usbtll_omap_probe(struct platform_device *pdev)
break;
}
+ spin_unlock_irqrestore(&tll->lock, flags);
+
+ tll->ch_clk = devm_kzalloc(dev, sizeof(struct clk * [tll->nch]),
+ GFP_KERNEL);
+ if (!tll->ch_clk) {
+ ret = -ENOMEM;
+ dev_err(dev, "Couldn't allocate memory for channel clocks\n");
+ goto err_clk_alloc;
+ }
+
+ spin_lock_irqsave(&tll->lock, flags);
+
+ for (i = 0; i < tll->nch; i++) {
+ char clkname[] = "usb_tll_hs_usb_chx_clk";
+ struct clk *fck;
+
+ snprintf(clkname, sizeof(clkname),
+ "usb_tll_hs_usb_ch%d_clk", i);
+ fck = clk_get(dev, clkname);
+
+ if (IS_ERR(fck))
+ dev_dbg(dev, "can't get clock : %s\n", clkname);
+ else
+ tll->ch_clk[i] = fck;
+ }
+
if (is_ehci_tll_mode(pdata->port_mode[0]) ||
is_ehci_tll_mode(pdata->port_mode[1]) ||
is_ehci_tll_mode(pdata->port_mode[2]) ||
@@ -320,11 +329,9 @@ static int usbtll_omap_probe(struct platform_device *pdev)
return 0;
-err_res:
- clk_put(tll->usbtll_p2_fck);
-
-err_p2_fck:
- clk_put(tll->usbtll_p1_fck);
+err_clk_alloc:
+ pm_runtime_put_sync(dev);
+ pm_runtime_disable(dev);
return ret;
}
@@ -338,9 +345,11 @@ err_p2_fck:
static int usbtll_omap_remove(struct platform_device *pdev)
{
struct usbtll_omap *tll = platform_get_drvdata(pdev);
+ int i;
+
+ for (i = 0; i < tll->nch; i++)
+ clk_put(tll->ch_clk[i]);
- clk_put(tll->usbtll_p2_fck);
- clk_put(tll->usbtll_p1_fck);
pm_runtime_disable(&pdev->dev);
return 0;
}
@@ -350,6 +359,7 @@ static int usbtll_runtime_resume(struct device *dev)
struct usbtll_omap *tll = dev_get_drvdata(dev);
struct usbtll_omap_platform_data *pdata = tll->pdata;
unsigned long flags;
+ int i;
dev_dbg(dev, "usbtll_runtime_resume\n");
@@ -360,11 +370,20 @@ static int usbtll_runtime_resume(struct device *dev)
spin_lock_irqsave(&tll->lock, flags);
- if (is_ehci_tll_mode(pdata->port_mode[0]))
- clk_enable(tll->usbtll_p1_fck);
+ for (i = 0; i < tll->nch; i++) {
+ if (is_ehci_tll_mode(pdata->port_mode[i])) {
+ int r;
- if (is_ehci_tll_mode(pdata->port_mode[1]))
- clk_enable(tll->usbtll_p2_fck);
+ if (!tll->ch_clk[i])
+ continue;
+
+ r = clk_enable(tll->ch_clk[i]);
+ if (r) {
+ dev_err(dev,
+ "Error enabling ch %d clock: %d\n", i, r);
+ }
+ }
+ }
spin_unlock_irqrestore(&tll->lock, flags);
@@ -376,6 +395,7 @@ static int usbtll_runtime_suspend(struct device *dev)
struct usbtll_omap *tll = dev_get_drvdata(dev);
struct usbtll_omap_platform_data *pdata = tll->pdata;
unsigned long flags;
+ int i;
dev_dbg(dev, "usbtll_runtime_suspend\n");
@@ -386,11 +406,12 @@ static int usbtll_runtime_suspend(struct device *dev)
spin_lock_irqsave(&tll->lock, flags);
- if (is_ehci_tll_mode(pdata->port_mode[0]))
- clk_disable(tll->usbtll_p1_fck);
-
- if (is_ehci_tll_mode(pdata->port_mode[1]))
- clk_disable(tll->usbtll_p2_fck);
+ for (i = 0; i < tll->nch; i++) {
+ if (is_ehci_tll_mode(pdata->port_mode[i])) {
+ if (tll->ch_clk[i])
+ clk_disable(tll->ch_clk[i]);
+ }
+ }
spin_unlock_irqrestore(&tll->lock, flags);
--
1.7.4.1
^ permalink raw reply related [flat|nested] 26+ messages in thread
* [PATCH v5 05/22] mfd: omap-usb-tll: introduce and use mode_needs_tll()
2013-01-02 15:00 [PATCH v5 00/22] OMAP USB Host cleanup Roger Quadros
` (3 preceding siblings ...)
2013-01-02 15:00 ` [PATCH v5 04/22] mfd: omap-usb-tll: Clean up clock handling Roger Quadros
@ 2013-01-02 15:00 ` Roger Quadros
2013-01-02 15:00 ` [PATCH v5 06/22] mfd: omap-usb-tll: Check for missing platform data in probe Roger Quadros
` (17 subsequent siblings)
22 siblings, 0 replies; 26+ messages in thread
From: Roger Quadros @ 2013-01-02 15:00 UTC (permalink / raw)
To: balbi, sameo, tony
Cc: sshtylyov, linux-usb, linux-kernel, keshava_mgowda,
linux-arm-kernel, linux-omap, bjorn, rogerq
This is a handy macro to check if the port requires the
USB TLL module or not. Use it to Enable the TLL module and manage
the clocks.
Signed-off-by: Roger Quadros <rogerq@ti.com>
---
drivers/mfd/omap-usb-tll.c | 20 ++++++++++++--------
1 files changed, 12 insertions(+), 8 deletions(-)
diff --git a/drivers/mfd/omap-usb-tll.c b/drivers/mfd/omap-usb-tll.c
index 238d05d..b188ee8 100644
--- a/drivers/mfd/omap-usb-tll.c
+++ b/drivers/mfd/omap-usb-tll.c
@@ -95,6 +95,10 @@
#define is_ehci_tll_mode(x) (x == OMAP_EHCI_PORT_MODE_TLL)
+/* only PHY and UNUSED modes don't need TLL */
+#define omap_usb_mode_needs_tll(x) ((x != OMAP_USBHS_PORT_MODE_UNUSED) &&\
+ (x != OMAP_EHCI_PORT_MODE_PHY))
+
struct usbtll_omap {
int nch; /* num. of channels */
struct usbtll_omap_platform_data *pdata;
@@ -211,6 +215,7 @@ static int usbtll_omap_probe(struct platform_device *pdev)
unsigned long flags;
int ret = 0;
int i, ver;
+ bool needs_tll;
dev_dbg(dev, "starting TI HSUSB TLL Controller\n");
@@ -278,12 +283,11 @@ static int usbtll_omap_probe(struct platform_device *pdev)
tll->ch_clk[i] = fck;
}
- if (is_ehci_tll_mode(pdata->port_mode[0]) ||
- is_ehci_tll_mode(pdata->port_mode[1]) ||
- is_ehci_tll_mode(pdata->port_mode[2]) ||
- is_ohci_port(pdata->port_mode[0]) ||
- is_ohci_port(pdata->port_mode[1]) ||
- is_ohci_port(pdata->port_mode[2])) {
+ needs_tll = false;
+ for (i = 0; i < tll->nch; i++)
+ needs_tll |= omap_usb_mode_needs_tll(pdata->port_mode[i]);
+
+ if (needs_tll) {
/* Program Common TLL register */
reg = usbtll_read(base, OMAP_TLL_SHARED_CONF);
@@ -371,7 +375,7 @@ static int usbtll_runtime_resume(struct device *dev)
spin_lock_irqsave(&tll->lock, flags);
for (i = 0; i < tll->nch; i++) {
- if (is_ehci_tll_mode(pdata->port_mode[i])) {
+ if (omap_usb_mode_needs_tll(pdata->port_mode[i])) {
int r;
if (!tll->ch_clk[i])
@@ -407,7 +411,7 @@ static int usbtll_runtime_suspend(struct device *dev)
spin_lock_irqsave(&tll->lock, flags);
for (i = 0; i < tll->nch; i++) {
- if (is_ehci_tll_mode(pdata->port_mode[i])) {
+ if (omap_usb_mode_needs_tll(pdata->port_mode[i])) {
if (tll->ch_clk[i])
clk_disable(tll->ch_clk[i]);
}
--
1.7.4.1
^ permalink raw reply related [flat|nested] 26+ messages in thread
* [PATCH v5 06/22] mfd: omap-usb-tll: Check for missing platform data in probe
2013-01-02 15:00 [PATCH v5 00/22] OMAP USB Host cleanup Roger Quadros
` (4 preceding siblings ...)
2013-01-02 15:00 ` [PATCH v5 05/22] mfd: omap-usb-tll: introduce and use mode_needs_tll() Roger Quadros
@ 2013-01-02 15:00 ` Roger Quadros
[not found] ` <1357138842-28964-1-git-send-email-rogerq-l0cyMroinI0@public.gmane.org>
` (16 subsequent siblings)
22 siblings, 0 replies; 26+ messages in thread
From: Roger Quadros @ 2013-01-02 15:00 UTC (permalink / raw)
To: balbi, sameo, tony
Cc: sshtylyov, linux-usb, linux-kernel, keshava_mgowda,
linux-arm-kernel, linux-omap, bjorn, rogerq
No need to check for missing platform data in runtime_suspend/resume
as it makes more sense to do it in the probe function.
Signed-off-by: Roger Quadros <rogerq@ti.com>
---
drivers/mfd/omap-usb-tll.c | 15 +++++----------
1 files changed, 5 insertions(+), 10 deletions(-)
diff --git a/drivers/mfd/omap-usb-tll.c b/drivers/mfd/omap-usb-tll.c
index b188ee8..f319ac9 100644
--- a/drivers/mfd/omap-usb-tll.c
+++ b/drivers/mfd/omap-usb-tll.c
@@ -225,6 +225,11 @@ static int usbtll_omap_probe(struct platform_device *pdev)
return -ENOMEM;
}
+ if (!pdata) {
+ dev_err(dev, "Platform data missing\n");
+ return -ENODEV;
+ }
+
spin_lock_init(&tll->lock);
tll->pdata = pdata;
@@ -367,11 +372,6 @@ static int usbtll_runtime_resume(struct device *dev)
dev_dbg(dev, "usbtll_runtime_resume\n");
- if (!pdata) {
- dev_dbg(dev, "missing platform_data\n");
- return -ENODEV;
- }
-
spin_lock_irqsave(&tll->lock, flags);
for (i = 0; i < tll->nch; i++) {
@@ -403,11 +403,6 @@ static int usbtll_runtime_suspend(struct device *dev)
dev_dbg(dev, "usbtll_runtime_suspend\n");
- if (!pdata) {
- dev_dbg(dev, "missing platform_data\n");
- return -ENODEV;
- }
-
spin_lock_irqsave(&tll->lock, flags);
for (i = 0; i < tll->nch; i++) {
--
1.7.4.1
^ permalink raw reply related [flat|nested] 26+ messages in thread
* [PATCH v5 07/22] mfd: omap-usb-tll: Fix error message
[not found] ` <1357138842-28964-1-git-send-email-rogerq-l0cyMroinI0@public.gmane.org>
@ 2013-01-02 15:00 ` Roger Quadros
0 siblings, 0 replies; 26+ messages in thread
From: Roger Quadros @ 2013-01-02 15:00 UTC (permalink / raw)
To: balbi-l0cyMroinI0, sameo-VuQAYsv1563Yd54FQh9/CA,
tony-4v6yS6AI5VpBDgjK7y7TUQ
Cc: keshava_mgowda-l0cyMroinI0, sshtylyov-Igf4POYTYCDQT0dZR+AlfA,
bjorn-yOkvZcmFvRU, rogerq-l0cyMroinI0,
linux-usb-u79uwXL29TY76Z2rM5mHXA,
linux-omap-u79uwXL29TY76Z2rM5mHXA,
linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r,
linux-kernel-u79uwXL29TY76Z2rM5mHXA
omap_enable/disable_tll() can fail if TLL device is not
initialized. It could be due to multiple reasons and not only
due to missing platform data.
Also make local variables static and use 'struct device *'
instead of 'struct platform_device *' for global reference.
Signed-off-by: Roger Quadros <rogerq-l0cyMroinI0@public.gmane.org>
---
drivers/mfd/omap-usb-tll.c | 21 ++++++++++++---------
1 files changed, 12 insertions(+), 9 deletions(-)
diff --git a/drivers/mfd/omap-usb-tll.c b/drivers/mfd/omap-usb-tll.c
index f319ac9..5f61352 100644
--- a/drivers/mfd/omap-usb-tll.c
+++ b/drivers/mfd/omap-usb-tll.c
@@ -109,8 +109,8 @@ struct usbtll_omap {
/*-------------------------------------------------------------------------*/
-const char usbtll_driver_name[] = USBTLL_DRIVER_NAME;
-struct platform_device *tll_pdev;
+static const char usbtll_driver_name[] = USBTLL_DRIVER_NAME;
+static struct device *tll_dev;
/*-------------------------------------------------------------------------*/
@@ -334,7 +334,8 @@ static int usbtll_omap_probe(struct platform_device *pdev)
spin_unlock_irqrestore(&tll->lock, flags);
pm_runtime_put_sync(dev);
- tll_pdev = pdev;
+ /* only after this can omap_tll_enable/disable work */
+ tll_dev = dev;
return 0;
@@ -356,6 +357,8 @@ static int usbtll_omap_remove(struct platform_device *pdev)
struct usbtll_omap *tll = platform_get_drvdata(pdev);
int i;
+ tll_dev = NULL;
+
for (i = 0; i < tll->nch; i++)
clk_put(tll->ch_clk[i]);
@@ -435,21 +438,21 @@ static struct platform_driver usbtll_omap_driver = {
int omap_tll_enable(void)
{
- if (!tll_pdev) {
- pr_err("missing omap usbhs tll platform_data\n");
+ if (!tll_dev) {
+ pr_err("%s: OMAP USB TLL not initialized\n", __func__);
return -ENODEV;
}
- return pm_runtime_get_sync(&tll_pdev->dev);
+ return pm_runtime_get_sync(tll_dev);
}
EXPORT_SYMBOL_GPL(omap_tll_enable);
int omap_tll_disable(void)
{
- if (!tll_pdev) {
- pr_err("missing omap usbhs tll platform_data\n");
+ if (!tll_dev) {
+ pr_err("%s: OMAP USB TLL not initialized\n", __func__);
return -ENODEV;
}
- return pm_runtime_put_sync(&tll_pdev->dev);
+ return pm_runtime_put_sync(tll_dev);
}
EXPORT_SYMBOL_GPL(omap_tll_disable);
--
1.7.4.1
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply related [flat|nested] 26+ messages in thread
* [PATCH v5 08/22] mfd: omap-usb-tll: serialize access to TLL device
2013-01-02 15:00 [PATCH v5 00/22] OMAP USB Host cleanup Roger Quadros
` (6 preceding siblings ...)
[not found] ` <1357138842-28964-1-git-send-email-rogerq-l0cyMroinI0@public.gmane.org>
@ 2013-01-02 15:00 ` Roger Quadros
2013-01-02 15:00 ` [PATCH v5 09/22] mfd: omap-usb-tll: Add OMAP5 revision and HSIC support Roger Quadros
` (14 subsequent siblings)
22 siblings, 0 replies; 26+ messages in thread
From: Roger Quadros @ 2013-01-02 15:00 UTC (permalink / raw)
To: balbi, sameo, tony
Cc: keshava_mgowda, sshtylyov, bjorn, rogerq, linux-usb, linux-omap,
linux-arm-kernel, linux-kernel
Get rid of the unnecessary spin_lock_irqsave/restore() as there is
no interrupt handler for this driver. Instead we serialize access
to tll_dev using a global spinlock.
Signed-off-by: Roger Quadros <rogerq@ti.com>
---
drivers/mfd/omap-usb-tll.c | 53 ++++++++++++++++++++++---------------------
1 files changed, 27 insertions(+), 26 deletions(-)
diff --git a/drivers/mfd/omap-usb-tll.c b/drivers/mfd/omap-usb-tll.c
index 5f61352..3dadacb 100644
--- a/drivers/mfd/omap-usb-tll.c
+++ b/drivers/mfd/omap-usb-tll.c
@@ -103,14 +103,13 @@ struct usbtll_omap {
int nch; /* num. of channels */
struct usbtll_omap_platform_data *pdata;
struct clk **ch_clk;
- /* secure the register updates */
- spinlock_t lock;
};
/*-------------------------------------------------------------------------*/
static const char usbtll_driver_name[] = USBTLL_DRIVER_NAME;
static struct device *tll_dev;
+static DEFINE_SPINLOCK(tll_lock); /* serialize access to tll_dev */
/*-------------------------------------------------------------------------*/
@@ -212,7 +211,6 @@ static int usbtll_omap_probe(struct platform_device *pdev)
struct resource *res;
struct usbtll_omap *tll;
unsigned reg;
- unsigned long flags;
int ret = 0;
int i, ver;
bool needs_tll;
@@ -230,8 +228,6 @@ static int usbtll_omap_probe(struct platform_device *pdev)
return -ENODEV;
}
- spin_lock_init(&tll->lock);
-
tll->pdata = pdata;
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
@@ -243,8 +239,6 @@ static int usbtll_omap_probe(struct platform_device *pdev)
pm_runtime_enable(dev);
pm_runtime_get_sync(dev);
- spin_lock_irqsave(&tll->lock, flags);
-
ver = usbtll_read(base, OMAP_USBTLL_REVISION);
switch (ver) {
case OMAP_USBTLL_REV1:
@@ -262,8 +256,6 @@ static int usbtll_omap_probe(struct platform_device *pdev)
break;
}
- spin_unlock_irqrestore(&tll->lock, flags);
-
tll->ch_clk = devm_kzalloc(dev, sizeof(struct clk * [tll->nch]),
GFP_KERNEL);
if (!tll->ch_clk) {
@@ -272,8 +264,6 @@ static int usbtll_omap_probe(struct platform_device *pdev)
goto err_clk_alloc;
}
- spin_lock_irqsave(&tll->lock, flags);
-
for (i = 0; i < tll->nch; i++) {
char clkname[] = "usb_tll_hs_usb_chx_clk";
struct clk *fck;
@@ -332,10 +322,11 @@ static int usbtll_omap_probe(struct platform_device *pdev)
}
}
- spin_unlock_irqrestore(&tll->lock, flags);
pm_runtime_put_sync(dev);
/* only after this can omap_tll_enable/disable work */
+ spin_lock(&tll_lock);
tll_dev = dev;
+ spin_unlock(&tll_lock);
return 0;
@@ -357,7 +348,9 @@ static int usbtll_omap_remove(struct platform_device *pdev)
struct usbtll_omap *tll = platform_get_drvdata(pdev);
int i;
+ spin_lock(&tll_lock);
tll_dev = NULL;
+ spin_unlock(&tll_lock);
for (i = 0; i < tll->nch; i++)
clk_put(tll->ch_clk[i]);
@@ -370,13 +363,10 @@ static int usbtll_runtime_resume(struct device *dev)
{
struct usbtll_omap *tll = dev_get_drvdata(dev);
struct usbtll_omap_platform_data *pdata = tll->pdata;
- unsigned long flags;
int i;
dev_dbg(dev, "usbtll_runtime_resume\n");
- spin_lock_irqsave(&tll->lock, flags);
-
for (i = 0; i < tll->nch; i++) {
if (omap_usb_mode_needs_tll(pdata->port_mode[i])) {
int r;
@@ -392,8 +382,6 @@ static int usbtll_runtime_resume(struct device *dev)
}
}
- spin_unlock_irqrestore(&tll->lock, flags);
-
return 0;
}
@@ -401,13 +389,10 @@ static int usbtll_runtime_suspend(struct device *dev)
{
struct usbtll_omap *tll = dev_get_drvdata(dev);
struct usbtll_omap_platform_data *pdata = tll->pdata;
- unsigned long flags;
int i;
dev_dbg(dev, "usbtll_runtime_suspend\n");
- spin_lock_irqsave(&tll->lock, flags);
-
for (i = 0; i < tll->nch; i++) {
if (omap_usb_mode_needs_tll(pdata->port_mode[i])) {
if (tll->ch_clk[i])
@@ -415,8 +400,6 @@ static int usbtll_runtime_suspend(struct device *dev)
}
}
- spin_unlock_irqrestore(&tll->lock, flags);
-
return 0;
}
@@ -438,21 +421,39 @@ static struct platform_driver usbtll_omap_driver = {
int omap_tll_enable(void)
{
+ int ret;
+
+ spin_lock(&tll_lock);
+
if (!tll_dev) {
pr_err("%s: OMAP USB TLL not initialized\n", __func__);
- return -ENODEV;
+ ret = -ENODEV;
+ } else {
+ ret = pm_runtime_get_sync(tll_dev);
}
- return pm_runtime_get_sync(tll_dev);
+
+ spin_unlock(&tll_lock);
+
+ return ret;
}
EXPORT_SYMBOL_GPL(omap_tll_enable);
int omap_tll_disable(void)
{
+ int ret;
+
+ spin_lock(&tll_lock);
+
if (!tll_dev) {
pr_err("%s: OMAP USB TLL not initialized\n", __func__);
- return -ENODEV;
+ ret = -ENODEV;
+ } else {
+ ret = pm_runtime_put_sync(tll_dev);
}
- return pm_runtime_put_sync(tll_dev);
+
+ spin_unlock(&tll_lock);
+
+ return ret;
}
EXPORT_SYMBOL_GPL(omap_tll_disable);
--
1.7.4.1
^ permalink raw reply related [flat|nested] 26+ messages in thread
* [PATCH v5 09/22] mfd: omap-usb-tll: Add OMAP5 revision and HSIC support
2013-01-02 15:00 [PATCH v5 00/22] OMAP USB Host cleanup Roger Quadros
` (7 preceding siblings ...)
2013-01-02 15:00 ` [PATCH v5 08/22] mfd: omap-usb-tll: serialize access to TLL device Roger Quadros
@ 2013-01-02 15:00 ` Roger Quadros
2013-01-02 15:00 ` [PATCH v5 10/22] mfd: omap_usb_host: Avoid creating copy of platform_data Roger Quadros
` (13 subsequent siblings)
22 siblings, 0 replies; 26+ messages in thread
From: Roger Quadros @ 2013-01-02 15:00 UTC (permalink / raw)
To: balbi, sameo, tony
Cc: sshtylyov, linux-usb, linux-kernel, keshava_mgowda,
linux-arm-kernel, linux-omap, bjorn, rogerq
The TLL module on OMAP5 has 3 channels.
HSIC mode requires the TLL channel to be in Transparent UTMI mode.
Signed-off-by: Roger Quadros <rogerq@ti.com>
---
drivers/mfd/omap-usb-tll.c | 14 ++++++++++++++
1 files changed, 14 insertions(+), 0 deletions(-)
diff --git a/drivers/mfd/omap-usb-tll.c b/drivers/mfd/omap-usb-tll.c
index 3dadacb..e63dc0b 100644
--- a/drivers/mfd/omap-usb-tll.c
+++ b/drivers/mfd/omap-usb-tll.c
@@ -54,10 +54,13 @@
#define OMAP_TLL_CHANNEL_CONF(num) (0x040 + 0x004 * num)
#define OMAP_TLL_CHANNEL_CONF_FSLSMODE_SHIFT 24
+#define OMAP_TLL_CHANNEL_CONF_DRVVBUS (1 << 16)
+#define OMAP_TLL_CHANNEL_CONF_CHRGVBUS (1 << 15)
#define OMAP_TLL_CHANNEL_CONF_ULPINOBITSTUFF (1 << 11)
#define OMAP_TLL_CHANNEL_CONF_ULPI_ULPIAUTOIDLE (1 << 10)
#define OMAP_TLL_CHANNEL_CONF_UTMIAUTOIDLE (1 << 9)
#define OMAP_TLL_CHANNEL_CONF_ULPIDDRMODE (1 << 8)
+#define OMAP_TLL_CHANNEL_CONF_MODE_TRANSPARENT_UTMI (2 << 1)
#define OMAP_TLL_CHANNEL_CONF_CHANMODE_FSLS (1 << 1)
#define OMAP_TLL_CHANNEL_CONF_CHANEN (1 << 0)
@@ -92,6 +95,7 @@
#define OMAP_USBTLL_REV1 0x00000015 /* OMAP3 */
#define OMAP_USBTLL_REV2 0x00000018 /* OMAP 3630 */
#define OMAP_USBTLL_REV3 0x00000004 /* OMAP4 */
+#define OMAP_USBTLL_REV4 0x00000006 /* OMAP5 */
#define is_ehci_tll_mode(x) (x == OMAP_EHCI_PORT_MODE_TLL)
@@ -242,6 +246,7 @@ static int usbtll_omap_probe(struct platform_device *pdev)
ver = usbtll_read(base, OMAP_USBTLL_REVISION);
switch (ver) {
case OMAP_USBTLL_REV1:
+ case OMAP_USBTLL_REV4:
tll->nch = OMAP_TLL_CHANNEL_COUNT;
break;
case OMAP_USBTLL_REV2:
@@ -310,6 +315,15 @@ static int usbtll_omap_probe(struct platform_device *pdev)
reg &= ~(OMAP_TLL_CHANNEL_CONF_UTMIAUTOIDLE
| OMAP_TLL_CHANNEL_CONF_ULPINOBITSTUFF
| OMAP_TLL_CHANNEL_CONF_ULPIDDRMODE);
+ } else if (pdata->port_mode[i] ==
+ OMAP_EHCI_PORT_MODE_HSIC) {
+ /*
+ * HSIC Mode requires UTMI port configurations
+ */
+ reg |= OMAP_TLL_CHANNEL_CONF_DRVVBUS
+ | OMAP_TLL_CHANNEL_CONF_CHRGVBUS
+ | OMAP_TLL_CHANNEL_CONF_MODE_TRANSPARENT_UTMI
+ | OMAP_TLL_CHANNEL_CONF_ULPINOBITSTUFF;
} else {
continue;
}
--
1.7.4.1
^ permalink raw reply related [flat|nested] 26+ messages in thread
* [PATCH v5 10/22] mfd: omap_usb_host: Avoid creating copy of platform_data
2013-01-02 15:00 [PATCH v5 00/22] OMAP USB Host cleanup Roger Quadros
` (8 preceding siblings ...)
2013-01-02 15:00 ` [PATCH v5 09/22] mfd: omap-usb-tll: Add OMAP5 revision and HSIC support Roger Quadros
@ 2013-01-02 15:00 ` Roger Quadros
2013-01-02 15:00 ` [PATCH v5 11/22] mfd: omap-usb-host: Use devm_kzalloc() and devm_request_and_ioremap() Roger Quadros
` (12 subsequent siblings)
22 siblings, 0 replies; 26+ messages in thread
From: Roger Quadros @ 2013-01-02 15:00 UTC (permalink / raw)
To: balbi, sameo, tony
Cc: keshava_mgowda, sshtylyov, bjorn, rogerq, linux-usb, linux-omap,
linux-arm-kernel, linux-kernel
We can just hold the pointer to the platform data instead
of creating a copy of it.
Also get rid of the unnecessary missing platform data checks
in runtime_suspend/resume. We are already checking for missing
platform data in probe.
Signed-off-by: Roger Quadros <rogerq@ti.com>
Acked-by: Felipe Balbi <balbi@ti.com>
---
drivers/mfd/omap-usb-host.c | 30 ++++++++----------------------
1 files changed, 8 insertions(+), 22 deletions(-)
diff --git a/drivers/mfd/omap-usb-host.c b/drivers/mfd/omap-usb-host.c
index 05164d7..85a4a43 100644
--- a/drivers/mfd/omap-usb-host.c
+++ b/drivers/mfd/omap-usb-host.c
@@ -102,7 +102,7 @@ struct usbhs_hcd_omap {
void __iomem *uhh_base;
- struct usbhs_omap_platform_data platdata;
+ struct usbhs_omap_platform_data *pdata;
u32 usbhs_rev;
spinlock_t lock;
@@ -194,8 +194,8 @@ static int omap_usbhs_alloc_children(struct platform_device *pdev)
int ret;
omap = platform_get_drvdata(pdev);
- ehci_data = omap->platdata.ehci_data;
- ohci_data = omap->platdata.ohci_data;
+ ehci_data = omap->pdata->ehci_data;
+ ohci_data = omap->pdata->ohci_data;
res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "ehci");
if (!res) {
@@ -278,16 +278,11 @@ static bool is_ohci_port(enum usbhs_omap_port_mode pmode)
static int usbhs_runtime_resume(struct device *dev)
{
struct usbhs_hcd_omap *omap = dev_get_drvdata(dev);
- struct usbhs_omap_platform_data *pdata = &omap->platdata;
unsigned long flags;
+ struct usbhs_omap_platform_data *pdata = omap->pdata;
dev_dbg(dev, "usbhs_runtime_resume\n");
- if (!pdata) {
- dev_dbg(dev, "missing platform_data\n");
- return -ENODEV;
- }
-
omap_tll_enable();
spin_lock_irqsave(&omap->lock, flags);
@@ -310,16 +305,11 @@ static int usbhs_runtime_resume(struct device *dev)
static int usbhs_runtime_suspend(struct device *dev)
{
struct usbhs_hcd_omap *omap = dev_get_drvdata(dev);
- struct usbhs_omap_platform_data *pdata = &omap->platdata;
unsigned long flags;
+ struct usbhs_omap_platform_data *pdata = omap->pdata;
dev_dbg(dev, "usbhs_runtime_suspend\n");
- if (!pdata) {
- dev_dbg(dev, "missing platform_data\n");
- return -ENODEV;
- }
-
spin_lock_irqsave(&omap->lock, flags);
if (is_ehci_tll_mode(pdata->port_mode[0]))
@@ -342,7 +332,7 @@ static int usbhs_runtime_suspend(struct device *dev)
static void omap_usbhs_init(struct device *dev)
{
struct usbhs_hcd_omap *omap = dev_get_drvdata(dev);
- struct usbhs_omap_platform_data *pdata = &omap->platdata;
+ struct usbhs_omap_platform_data *pdata = omap->pdata;
unsigned long flags;
unsigned reg;
@@ -449,7 +439,7 @@ static void omap_usbhs_init(struct device *dev)
static void omap_usbhs_deinit(struct device *dev)
{
struct usbhs_hcd_omap *omap = dev_get_drvdata(dev);
- struct usbhs_omap_platform_data *pdata = &omap->platdata;
+ struct usbhs_omap_platform_data *pdata = omap->pdata;
if (pdata->ehci_data->phy_reset) {
if (gpio_is_valid(pdata->ehci_data->reset_gpio_port[0]))
@@ -490,11 +480,7 @@ static int usbhs_omap_probe(struct platform_device *pdev)
spin_lock_init(&omap->lock);
- for (i = 0; i < OMAP3_HS_USB_PORTS; i++)
- omap->platdata.port_mode[i] = pdata->port_mode[i];
-
- omap->platdata.ehci_data = pdata->ehci_data;
- omap->platdata.ohci_data = pdata->ohci_data;
+ omap->pdata = pdata;
pm_runtime_enable(dev);
--
1.7.4.1
^ permalink raw reply related [flat|nested] 26+ messages in thread
* [PATCH v5 11/22] mfd: omap-usb-host: Use devm_kzalloc() and devm_request_and_ioremap()
2013-01-02 15:00 [PATCH v5 00/22] OMAP USB Host cleanup Roger Quadros
` (9 preceding siblings ...)
2013-01-02 15:00 ` [PATCH v5 10/22] mfd: omap_usb_host: Avoid creating copy of platform_data Roger Quadros
@ 2013-01-02 15:00 ` Roger Quadros
2013-01-02 15:00 ` [PATCH v5 12/22] mfd: omap-usb-host: know about number of ports from revision register Roger Quadros
` (11 subsequent siblings)
22 siblings, 0 replies; 26+ messages in thread
From: Roger Quadros @ 2013-01-02 15:00 UTC (permalink / raw)
To: balbi, sameo, tony
Cc: keshava_mgowda, sshtylyov, bjorn, rogerq, linux-usb, linux-omap,
linux-arm-kernel, linux-kernel
Use devm_ variants of kzalloc and ioremap. Also clean up error path.
Signed-off-by: Roger Quadros <rogerq@ti.com>
---
drivers/mfd/omap-usb-host.c | 36 +++++++++---------------------------
1 files changed, 9 insertions(+), 27 deletions(-)
diff --git a/drivers/mfd/omap-usb-host.c b/drivers/mfd/omap-usb-host.c
index 85a4a43..b24a3ab 100644
--- a/drivers/mfd/omap-usb-host.c
+++ b/drivers/mfd/omap-usb-host.c
@@ -467,17 +467,20 @@ static int usbhs_omap_probe(struct platform_device *pdev)
if (!pdata) {
dev_err(dev, "Missing platform data\n");
- ret = -ENOMEM;
- goto end_probe;
+ return -ENODEV;
}
- omap = kzalloc(sizeof(*omap), GFP_KERNEL);
+ omap = devm_kzalloc(dev, sizeof(*omap), GFP_KERNEL);
if (!omap) {
dev_err(dev, "Memory allocation failed\n");
- ret = -ENOMEM;
- goto end_probe;
+ return -ENOMEM;
}
+ res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "uhh");
+ omap->uhh_base = devm_request_and_ioremap(dev, res);
+ if (!omap->uhh_base)
+ return -EADDRNOTAVAIL;
+
spin_lock_init(&omap->lock);
omap->pdata = pdata;
@@ -575,20 +578,6 @@ static int usbhs_omap_probe(struct platform_device *pdev)
"failed error:%d\n", ret);
}
- res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "uhh");
- if (!res) {
- dev_err(dev, "UHH EHCI get resource failed\n");
- ret = -ENODEV;
- goto err_init_60m_fclk;
- }
-
- omap->uhh_base = ioremap(res->start, resource_size(res));
- if (!omap->uhh_base) {
- dev_err(dev, "UHH ioremap failed\n");
- ret = -ENOMEM;
- goto err_init_60m_fclk;
- }
-
platform_set_drvdata(pdev, omap);
omap_usbhs_init(dev);
@@ -598,13 +587,10 @@ static int usbhs_omap_probe(struct platform_device *pdev)
goto err_alloc;
}
- goto end_probe;
+ return 0;
err_alloc:
omap_usbhs_deinit(&pdev->dev);
- iounmap(omap->uhh_base);
-
-err_init_60m_fclk:
clk_put(omap->init_60m_fclk);
err_usbhost_p2_fck:
@@ -628,9 +614,7 @@ err_utmi_p1_fck:
err_end:
clk_put(omap->ehci_logic_fck);
pm_runtime_disable(dev);
- kfree(omap);
-end_probe:
return ret;
}
@@ -645,7 +629,6 @@ static int usbhs_omap_remove(struct platform_device *pdev)
struct usbhs_hcd_omap *omap = platform_get_drvdata(pdev);
omap_usbhs_deinit(&pdev->dev);
- iounmap(omap->uhh_base);
clk_put(omap->init_60m_fclk);
clk_put(omap->usbhost_p2_fck);
clk_put(omap->usbhost_p1_fck);
@@ -655,7 +638,6 @@ static int usbhs_omap_remove(struct platform_device *pdev)
clk_put(omap->utmi_p1_fck);
clk_put(omap->ehci_logic_fck);
pm_runtime_disable(&pdev->dev);
- kfree(omap);
return 0;
}
--
1.7.4.1
^ permalink raw reply related [flat|nested] 26+ messages in thread
* [PATCH v5 12/22] mfd: omap-usb-host: know about number of ports from revision register
2013-01-02 15:00 [PATCH v5 00/22] OMAP USB Host cleanup Roger Quadros
` (10 preceding siblings ...)
2013-01-02 15:00 ` [PATCH v5 11/22] mfd: omap-usb-host: Use devm_kzalloc() and devm_request_and_ioremap() Roger Quadros
@ 2013-01-02 15:00 ` Roger Quadros
2013-01-02 15:00 ` [PATCH v5 13/22] mfd: omap-usb-host: override number of ports from platform data Roger Quadros
` (10 subsequent siblings)
22 siblings, 0 replies; 26+ messages in thread
From: Roger Quadros @ 2013-01-02 15:00 UTC (permalink / raw)
To: balbi, sameo, tony
Cc: keshava_mgowda, sshtylyov, bjorn, rogerq, linux-usb, linux-omap,
linux-arm-kernel, linux-kernel
The revision register should tell us how many ports are present.
Signed-off-by: Roger Quadros <rogerq@ti.com>
---
drivers/mfd/omap-usb-host.c | 32 +++++++++++++++++++++++++++-----
1 files changed, 27 insertions(+), 5 deletions(-)
diff --git a/drivers/mfd/omap-usb-host.c b/drivers/mfd/omap-usb-host.c
index b24a3ab..5edb828 100644
--- a/drivers/mfd/omap-usb-host.c
+++ b/drivers/mfd/omap-usb-host.c
@@ -91,6 +91,8 @@
struct usbhs_hcd_omap {
+ int nports;
+
struct clk *xclk60mhsp1_ck;
struct clk *xclk60mhsp2_ck;
struct clk *utmi_p1_fck;
@@ -353,8 +355,6 @@ static void omap_usbhs_init(struct device *dev)
pm_runtime_get_sync(dev);
spin_lock_irqsave(&omap->lock, flags);
- omap->usbhs_rev = usbhs_read(omap->uhh_base, OMAP_UHH_REVISION);
- dev_dbg(dev, "OMAP UHH_REVISION 0x%x\n", omap->usbhs_rev);
reg = usbhs_read(omap->uhh_base, OMAP_UHH_HOSTCONFIG);
/* setup ULPI bypass and burst configurations */
@@ -487,8 +487,32 @@ static int usbhs_omap_probe(struct platform_device *pdev)
pm_runtime_enable(dev);
+ platform_set_drvdata(pdev, omap);
+ pm_runtime_get_sync(dev);
- for (i = 0; i < OMAP3_HS_USB_PORTS; i++)
+ omap->usbhs_rev = usbhs_read(omap->uhh_base, OMAP_UHH_REVISION);
+
+ /* we need to call runtime suspend before we update omap->nports
+ * to prevent unbalanced clk_disable()
+ */
+ pm_runtime_put_sync(dev);
+
+ switch (omap->usbhs_rev) {
+ case OMAP_USBHS_REV1:
+ omap->nports = 3;
+ break;
+ case OMAP_USBHS_REV2:
+ omap->nports = 2;
+ break;
+ default:
+ omap->nports = OMAP3_HS_USB_PORTS;
+ dev_dbg(dev,
+ "USB HOST Rev : 0x%d not recognized, assuming %d ports\n",
+ omap->usbhs_rev, omap->nports);
+ break;
+ }
+
+ for (i = 0; i < omap->nports; i++)
if (is_ehci_phy_mode(i) || is_ehci_tll_mode(i) ||
is_ehci_hsic_mode(i)) {
omap->ehci_logic_fck = clk_get(dev, "ehci_logic_fck");
@@ -578,8 +602,6 @@ static int usbhs_omap_probe(struct platform_device *pdev)
"failed error:%d\n", ret);
}
- platform_set_drvdata(pdev, omap);
-
omap_usbhs_init(dev);
ret = omap_usbhs_alloc_children(pdev);
if (ret) {
--
1.7.4.1
^ permalink raw reply related [flat|nested] 26+ messages in thread
* [PATCH v5 13/22] mfd: omap-usb-host: override number of ports from platform data
2013-01-02 15:00 [PATCH v5 00/22] OMAP USB Host cleanup Roger Quadros
` (11 preceding siblings ...)
2013-01-02 15:00 ` [PATCH v5 12/22] mfd: omap-usb-host: know about number of ports from revision register Roger Quadros
@ 2013-01-02 15:00 ` Roger Quadros
[not found] ` <1357138842-28964-14-git-send-email-rogerq-l0cyMroinI0@public.gmane.org>
2013-01-02 15:00 ` [PATCH v5 14/22] mfd: omap-usb-host: cleanup clock management code Roger Quadros
` (9 subsequent siblings)
22 siblings, 1 reply; 26+ messages in thread
From: Roger Quadros @ 2013-01-02 15:00 UTC (permalink / raw)
To: balbi, sameo, tony
Cc: keshava_mgowda, sshtylyov, bjorn, rogerq, linux-usb, linux-omap,
linux-arm-kernel, linux-kernel
Both OMAP4 and 5 exhibit the same revision ID in the REVISION register
but they have different number of ports i.e. 2 and 3 respectively.
So we can't rely on REVISION register for number of ports on OMAP5
and depend on platform data (or device tree) instead.
Signed-off-by: Roger Quadros <rogerq@ti.com>
---
arch/arm/mach-omap2/usb-host.c | 1 +
arch/arm/mach-omap2/usb.h | 1 +
drivers/mfd/omap-usb-host.c | 34 +++++++++++++++++++------------
include/linux/platform_data/usb-omap.h | 1 +
4 files changed, 24 insertions(+), 13 deletions(-)
diff --git a/arch/arm/mach-omap2/usb-host.c b/arch/arm/mach-omap2/usb-host.c
index 2e44e8a..ee8c473 100644
--- a/arch/arm/mach-omap2/usb-host.c
+++ b/arch/arm/mach-omap2/usb-host.c
@@ -504,6 +504,7 @@ void __init usbhs_init(const struct usbhs_omap_board_data *pdata)
ohci_data.es2_compatibility = pdata->es2_compatibility;
usbhs_data.ehci_data = &ehci_data;
usbhs_data.ohci_data = &ohci_data;
+ usbhs_data.nports = pdata->nports;
if (cpu_is_omap34xx()) {
setup_ehci_io_mux(pdata->port_mode);
diff --git a/arch/arm/mach-omap2/usb.h b/arch/arm/mach-omap2/usb.h
index 9b986ea..7dc0f04 100644
--- a/arch/arm/mach-omap2/usb.h
+++ b/arch/arm/mach-omap2/usb.h
@@ -54,6 +54,7 @@
#define USBPHY_DATA_POLARITY (1 << 23)
struct usbhs_omap_board_data {
+ int nports;
enum usbhs_omap_port_mode port_mode[OMAP3_HS_USB_PORTS];
/* have to be valid if phy_reset is true and portx is in phy mode */
diff --git a/drivers/mfd/omap-usb-host.c b/drivers/mfd/omap-usb-host.c
index 5edb828..710460d 100644
--- a/drivers/mfd/omap-usb-host.c
+++ b/drivers/mfd/omap-usb-host.c
@@ -497,19 +497,27 @@ static int usbhs_omap_probe(struct platform_device *pdev)
*/
pm_runtime_put_sync(dev);
- switch (omap->usbhs_rev) {
- case OMAP_USBHS_REV1:
- omap->nports = 3;
- break;
- case OMAP_USBHS_REV2:
- omap->nports = 2;
- break;
- default:
- omap->nports = OMAP3_HS_USB_PORTS;
- dev_dbg(dev,
- "USB HOST Rev : 0x%d not recognized, assuming %d ports\n",
- omap->usbhs_rev, omap->nports);
- break;
+ /*
+ * If platform data contains nports then use that
+ * else make out number of ports from USBHS revision
+ */
+ if (pdata->nports) {
+ omap->nports = pdata->nports;
+ } else {
+ switch (omap->usbhs_rev) {
+ case OMAP_USBHS_REV1:
+ omap->nports = 3;
+ break;
+ case OMAP_USBHS_REV2:
+ omap->nports = 2;
+ break;
+ default:
+ omap->nports = OMAP3_HS_USB_PORTS;
+ dev_dbg(dev,
+ "USB HOST Rev:0x%d not recognized, assuming %d ports\n",
+ omap->usbhs_rev, omap->nports);
+ break;
+ }
}
for (i = 0; i < omap->nports; i++)
diff --git a/include/linux/platform_data/usb-omap.h b/include/linux/platform_data/usb-omap.h
index ef65b67..57707c7 100644
--- a/include/linux/platform_data/usb-omap.h
+++ b/include/linux/platform_data/usb-omap.h
@@ -55,6 +55,7 @@ struct ohci_hcd_omap_platform_data {
};
struct usbhs_omap_platform_data {
+ int nports;
enum usbhs_omap_port_mode port_mode[OMAP3_HS_USB_PORTS];
struct ehci_hcd_omap_platform_data *ehci_data;
--
1.7.4.1
^ permalink raw reply related [flat|nested] 26+ messages in thread
* [PATCH v5 14/22] mfd: omap-usb-host: cleanup clock management code
2013-01-02 15:00 [PATCH v5 00/22] OMAP USB Host cleanup Roger Quadros
` (12 preceding siblings ...)
2013-01-02 15:00 ` [PATCH v5 13/22] mfd: omap-usb-host: override number of ports from platform data Roger Quadros
@ 2013-01-02 15:00 ` Roger Quadros
2013-01-02 15:00 ` [PATCH v5 15/22] mfd: omap-usb-host: Manage HSIC clocks for HSIC mode Roger Quadros
` (8 subsequent siblings)
22 siblings, 0 replies; 26+ messages in thread
From: Roger Quadros @ 2013-01-02 15:00 UTC (permalink / raw)
To: balbi, sameo, tony
Cc: keshava_mgowda, sshtylyov, bjorn, rogerq, linux-usb, linux-omap,
linux-arm-kernel, linux-kernel
All ports have similarly named port clocks so we can
bunch them into a port data structure and use for loop
to enable/disable the clocks.
Dynamically allocate and get clocks based on number of ports
available on the platform
Signed-off-by: Roger Quadros <rogerq@ti.com>
---
drivers/mfd/omap-usb-host.c | 180 ++++++++++++++++++++++++------------------
1 files changed, 103 insertions(+), 77 deletions(-)
diff --git a/drivers/mfd/omap-usb-host.c b/drivers/mfd/omap-usb-host.c
index 710460d..1c8e480 100644
--- a/drivers/mfd/omap-usb-host.c
+++ b/drivers/mfd/omap-usb-host.c
@@ -92,13 +92,12 @@
struct usbhs_hcd_omap {
int nports;
+ struct clk **utmi_clk;
struct clk *xclk60mhsp1_ck;
struct clk *xclk60mhsp2_ck;
- struct clk *utmi_p1_fck;
- struct clk *usbhost_p1_fck;
- struct clk *utmi_p2_fck;
- struct clk *usbhost_p2_fck;
+ struct clk *utmi_p1_gfclk;
+ struct clk *utmi_p2_gfclk;
struct clk *init_60m_fclk;
struct clk *ehci_logic_fck;
@@ -282,6 +281,7 @@ static int usbhs_runtime_resume(struct device *dev)
struct usbhs_hcd_omap *omap = dev_get_drvdata(dev);
unsigned long flags;
struct usbhs_omap_platform_data *pdata = omap->pdata;
+ int i, r;
dev_dbg(dev, "usbhs_runtime_resume\n");
@@ -291,13 +291,18 @@ static int usbhs_runtime_resume(struct device *dev)
if (omap->ehci_logic_fck && !IS_ERR(omap->ehci_logic_fck))
clk_enable(omap->ehci_logic_fck);
- if (is_ehci_tll_mode(pdata->port_mode[0]))
- clk_enable(omap->usbhost_p1_fck);
- if (is_ehci_tll_mode(pdata->port_mode[1]))
- clk_enable(omap->usbhost_p2_fck);
-
- clk_enable(omap->utmi_p1_fck);
- clk_enable(omap->utmi_p2_fck);
+ for (i = 0; i < omap->nports; i++) {
+ if (is_ehci_tll_mode(pdata->port_mode[i])) {
+ if (omap->utmi_clk[i]) {
+ r = clk_enable(omap->utmi_clk[i]);
+ if (r) {
+ dev_err(dev,
+ "Can't enable port %d clk : %d\n",
+ i, r);
+ }
+ }
+ }
+ }
spin_unlock_irqrestore(&omap->lock, flags);
@@ -309,18 +314,18 @@ static int usbhs_runtime_suspend(struct device *dev)
struct usbhs_hcd_omap *omap = dev_get_drvdata(dev);
unsigned long flags;
struct usbhs_omap_platform_data *pdata = omap->pdata;
+ int i;
dev_dbg(dev, "usbhs_runtime_suspend\n");
spin_lock_irqsave(&omap->lock, flags);
- if (is_ehci_tll_mode(pdata->port_mode[0]))
- clk_disable(omap->usbhost_p1_fck);
- if (is_ehci_tll_mode(pdata->port_mode[1]))
- clk_disable(omap->usbhost_p2_fck);
-
- clk_disable(omap->utmi_p2_fck);
- clk_disable(omap->utmi_p1_fck);
+ for (i = 0; i < omap->nports; i++) {
+ if (is_ehci_tll_mode(pdata->port_mode[i])) {
+ if (omap->utmi_clk[i])
+ clk_disable(omap->utmi_clk[i]);
+ }
+ }
if (omap->ehci_logic_fck && !IS_ERR(omap->ehci_logic_fck))
clk_disable(omap->ehci_logic_fck);
@@ -464,6 +469,7 @@ static int usbhs_omap_probe(struct platform_device *pdev)
struct resource *res;
int ret = 0;
int i;
+ bool need_logic_fck;
if (!pdata) {
dev_err(dev, "Missing platform data\n");
@@ -520,76 +526,93 @@ static int usbhs_omap_probe(struct platform_device *pdev)
}
}
- for (i = 0; i < omap->nports; i++)
+ i = sizeof(struct clk *) * omap->nports;
+ omap->utmi_clk = devm_kzalloc(dev, i, GFP_KERNEL);
+ if (!omap->utmi_clk) {
+ dev_err(dev, "Memory allocation failed\n");
+ ret = -ENOMEM;
+ goto err_mem;
+ }
+
+ need_logic_fck = false;
+ for (i = 0; i < omap->nports; i++) {
if (is_ehci_phy_mode(i) || is_ehci_tll_mode(i) ||
- is_ehci_hsic_mode(i)) {
- omap->ehci_logic_fck = clk_get(dev, "ehci_logic_fck");
- if (IS_ERR(omap->ehci_logic_fck)) {
- ret = PTR_ERR(omap->ehci_logic_fck);
- dev_warn(dev, "ehci_logic_fck failed:%d\n",
- ret);
- }
- break;
+ is_ehci_hsic_mode(i))
+ need_logic_fck |= true;
+ }
+
+ if (need_logic_fck) {
+ omap->ehci_logic_fck = clk_get(dev, "ehci_logic_fck");
+ if (IS_ERR(omap->ehci_logic_fck)) {
+ ret = PTR_ERR(omap->ehci_logic_fck);
+ dev_dbg(dev, "ehci_logic_fck failed:%d\n", ret);
}
+ }
- omap->utmi_p1_fck = clk_get(dev, "utmi_p1_gfclk");
- if (IS_ERR(omap->utmi_p1_fck)) {
- ret = PTR_ERR(omap->utmi_p1_fck);
- dev_err(dev, "utmi_p1_gfclk failed error:%d\n", ret);
- goto err_end;
+ omap->utmi_p1_gfclk = clk_get(dev, "utmi_p1_gfclk");
+ if (IS_ERR(omap->utmi_p1_gfclk)) {
+ ret = PTR_ERR(omap->utmi_p1_gfclk);
+ dev_err(dev, "utmi_p1_gfclk failed error:%d\n", ret);
+ goto err_p1_gfclk;
+ }
+
+ omap->utmi_p2_gfclk = clk_get(dev, "utmi_p2_gfclk");
+ if (IS_ERR(omap->utmi_p2_gfclk)) {
+ ret = PTR_ERR(omap->utmi_p2_gfclk);
+ dev_err(dev, "utmi_p2_gfclk failed error:%d\n", ret);
+ goto err_p2_gfclk;
}
omap->xclk60mhsp1_ck = clk_get(dev, "xclk60mhsp1_ck");
if (IS_ERR(omap->xclk60mhsp1_ck)) {
ret = PTR_ERR(omap->xclk60mhsp1_ck);
dev_err(dev, "xclk60mhsp1_ck failed error:%d\n", ret);
- goto err_utmi_p1_fck;
- }
-
- omap->utmi_p2_fck = clk_get(dev, "utmi_p2_gfclk");
- if (IS_ERR(omap->utmi_p2_fck)) {
- ret = PTR_ERR(omap->utmi_p2_fck);
- dev_err(dev, "utmi_p2_gfclk failed error:%d\n", ret);
- goto err_xclk60mhsp1_ck;
+ goto err_xclk60mhsp1;
}
omap->xclk60mhsp2_ck = clk_get(dev, "xclk60mhsp2_ck");
if (IS_ERR(omap->xclk60mhsp2_ck)) {
ret = PTR_ERR(omap->xclk60mhsp2_ck);
dev_err(dev, "xclk60mhsp2_ck failed error:%d\n", ret);
- goto err_utmi_p2_fck;
- }
-
- omap->usbhost_p1_fck = clk_get(dev, "usb_host_hs_utmi_p1_clk");
- if (IS_ERR(omap->usbhost_p1_fck)) {
- ret = PTR_ERR(omap->usbhost_p1_fck);
- dev_err(dev, "usbhost_p1_fck failed error:%d\n", ret);
- goto err_xclk60mhsp2_ck;
- }
-
- omap->usbhost_p2_fck = clk_get(dev, "usb_host_hs_utmi_p2_clk");
- if (IS_ERR(omap->usbhost_p2_fck)) {
- ret = PTR_ERR(omap->usbhost_p2_fck);
- dev_err(dev, "usbhost_p2_fck failed error:%d\n", ret);
- goto err_usbhost_p1_fck;
+ goto err_xclk60mhsp2;
}
omap->init_60m_fclk = clk_get(dev, "init_60m_fclk");
if (IS_ERR(omap->init_60m_fclk)) {
ret = PTR_ERR(omap->init_60m_fclk);
dev_err(dev, "init_60m_fclk failed error:%d\n", ret);
- goto err_usbhost_p2_fck;
+ goto err_init60m;
+ }
+
+ for (i = 0; i < omap->nports; i++) {
+ struct clk *pclk;
+ char clkname[] = "usb_host_hs_utmi_px_clk";
+
+ /* clock names are indexed from 1*/
+ snprintf(clkname, sizeof(clkname),
+ "usb_host_hs_utmi_p%d_clk", i + 1);
+
+ /* If a clock is not found we won't bail out as not all
+ * platforms have all clocks and we can function without
+ * them
+ */
+ pclk = clk_get(dev, clkname);
+ if (IS_ERR(pclk))
+ dev_dbg(dev, "Failed to get clock : %s : %ld\n",
+ clkname, PTR_ERR(pclk));
+ else
+ omap->utmi_clk[i] = pclk;
}
if (is_ehci_phy_mode(pdata->port_mode[0])) {
/* for OMAP3 , the clk set paretn fails */
- ret = clk_set_parent(omap->utmi_p1_fck,
+ ret = clk_set_parent(omap->utmi_p1_gfclk,
omap->xclk60mhsp1_ck);
if (ret != 0)
dev_err(dev, "xclk60mhsp1_ck set parent"
"failed error:%d\n", ret);
} else if (is_ehci_tll_mode(pdata->port_mode[0])) {
- ret = clk_set_parent(omap->utmi_p1_fck,
+ ret = clk_set_parent(omap->utmi_p1_gfclk,
omap->init_60m_fclk);
if (ret != 0)
dev_err(dev, "init_60m_fclk set parent"
@@ -597,13 +620,13 @@ static int usbhs_omap_probe(struct platform_device *pdev)
}
if (is_ehci_phy_mode(pdata->port_mode[1])) {
- ret = clk_set_parent(omap->utmi_p2_fck,
+ ret = clk_set_parent(omap->utmi_p2_gfclk,
omap->xclk60mhsp2_ck);
if (ret != 0)
dev_err(dev, "xclk60mhsp2_ck set parent"
"failed error:%d\n", ret);
} else if (is_ehci_tll_mode(pdata->port_mode[1])) {
- ret = clk_set_parent(omap->utmi_p2_fck,
+ ret = clk_set_parent(omap->utmi_p2_gfclk,
omap->init_60m_fclk);
if (ret != 0)
dev_err(dev, "init_60m_fclk set parent"
@@ -621,28 +644,28 @@ static int usbhs_omap_probe(struct platform_device *pdev)
err_alloc:
omap_usbhs_deinit(&pdev->dev);
- clk_put(omap->init_60m_fclk);
-err_usbhost_p2_fck:
- clk_put(omap->usbhost_p2_fck);
+ for (i = 0; i < omap->nports; i++)
+ clk_put(omap->utmi_clk[i]);
-err_usbhost_p1_fck:
- clk_put(omap->usbhost_p1_fck);
+ clk_put(omap->init_60m_fclk);
-err_xclk60mhsp2_ck:
+err_init60m:
clk_put(omap->xclk60mhsp2_ck);
-err_utmi_p2_fck:
- clk_put(omap->utmi_p2_fck);
-
-err_xclk60mhsp1_ck:
+err_xclk60mhsp2:
clk_put(omap->xclk60mhsp1_ck);
-err_utmi_p1_fck:
- clk_put(omap->utmi_p1_fck);
+err_xclk60mhsp1:
+ clk_put(omap->utmi_p2_gfclk);
-err_end:
+err_p2_gfclk:
+ clk_put(omap->utmi_p1_gfclk);
+
+err_p1_gfclk:
clk_put(omap->ehci_logic_fck);
+
+err_mem:
pm_runtime_disable(dev);
return ret;
@@ -657,15 +680,18 @@ err_end:
static int usbhs_omap_remove(struct platform_device *pdev)
{
struct usbhs_hcd_omap *omap = platform_get_drvdata(pdev);
+ int i;
omap_usbhs_deinit(&pdev->dev);
+
+ for (i = 0; i < omap->nports; i++)
+ clk_put(omap->utmi_clk[i]);
+
clk_put(omap->init_60m_fclk);
- clk_put(omap->usbhost_p2_fck);
- clk_put(omap->usbhost_p1_fck);
+ clk_put(omap->utmi_p1_gfclk);
+ clk_put(omap->utmi_p2_gfclk);
clk_put(omap->xclk60mhsp2_ck);
- clk_put(omap->utmi_p2_fck);
clk_put(omap->xclk60mhsp1_ck);
- clk_put(omap->utmi_p1_fck);
clk_put(omap->ehci_logic_fck);
pm_runtime_disable(&pdev->dev);
--
1.7.4.1
^ permalink raw reply related [flat|nested] 26+ messages in thread
* [PATCH v5 15/22] mfd: omap-usb-host: Manage HSIC clocks for HSIC mode
2013-01-02 15:00 [PATCH v5 00/22] OMAP USB Host cleanup Roger Quadros
` (13 preceding siblings ...)
2013-01-02 15:00 ` [PATCH v5 14/22] mfd: omap-usb-host: cleanup clock management code Roger Quadros
@ 2013-01-02 15:00 ` Roger Quadros
2013-01-02 15:00 ` [PATCH v5 16/22] mfd: omap-usb-host: Get rid of unnecessary spinlock Roger Quadros
` (7 subsequent siblings)
22 siblings, 0 replies; 26+ messages in thread
From: Roger Quadros @ 2013-01-02 15:00 UTC (permalink / raw)
To: balbi, sameo, tony
Cc: keshava_mgowda, sshtylyov, bjorn, rogerq, linux-usb, linux-omap,
linux-arm-kernel, linux-kernel
Enable the optional HSIC clocks (60MHz and 480MHz) for the ports
that are configured in HSIC mode.
Signed-off-by: Roger Quadros <rogerq@ti.com>
---
drivers/mfd/omap-usb-host.c | 77 +++++++++++++++++++++++++++++++++++++++---
1 files changed, 71 insertions(+), 6 deletions(-)
diff --git a/drivers/mfd/omap-usb-host.c b/drivers/mfd/omap-usb-host.c
index 1c8e480..a58da22 100644
--- a/drivers/mfd/omap-usb-host.c
+++ b/drivers/mfd/omap-usb-host.c
@@ -93,6 +93,8 @@
struct usbhs_hcd_omap {
int nports;
struct clk **utmi_clk;
+ struct clk **hsic60m_clk;
+ struct clk **hsic480m_clk;
struct clk *xclk60mhsp1_ck;
struct clk *xclk60mhsp2_ck;
@@ -292,7 +294,28 @@ static int usbhs_runtime_resume(struct device *dev)
clk_enable(omap->ehci_logic_fck);
for (i = 0; i < omap->nports; i++) {
- if (is_ehci_tll_mode(pdata->port_mode[i])) {
+ switch (pdata->port_mode[i]) {
+ case OMAP_EHCI_PORT_MODE_HSIC:
+ if (omap->hsic60m_clk[i]) {
+ r = clk_enable(omap->hsic60m_clk[i]);
+ if (r) {
+ dev_err(dev,
+ "Can't enable port %d hsic60m clk:%d\n",
+ i, r);
+ }
+ }
+
+ if (omap->hsic480m_clk[i]) {
+ r = clk_enable(omap->hsic480m_clk[i]);
+ if (r) {
+ dev_err(dev,
+ "Can't enable port %d hsic480m clk:%d\n",
+ i, r);
+ }
+ }
+ /* Fall through as HSIC mode needs utmi_clk */
+
+ case OMAP_EHCI_PORT_MODE_TLL:
if (omap->utmi_clk[i]) {
r = clk_enable(omap->utmi_clk[i]);
if (r) {
@@ -301,6 +324,9 @@ static int usbhs_runtime_resume(struct device *dev)
i, r);
}
}
+ break;
+ default:
+ break;
}
}
@@ -321,9 +347,21 @@ static int usbhs_runtime_suspend(struct device *dev)
spin_lock_irqsave(&omap->lock, flags);
for (i = 0; i < omap->nports; i++) {
- if (is_ehci_tll_mode(pdata->port_mode[i])) {
+ switch (pdata->port_mode[i]) {
+ case OMAP_EHCI_PORT_MODE_HSIC:
+ if (omap->hsic60m_clk[i])
+ clk_disable(omap->hsic60m_clk[i]);
+
+ if (omap->hsic480m_clk[i])
+ clk_disable(omap->hsic480m_clk[i]);
+ /* Fall through as utmi_clks were used in HSIC mode */
+
+ case OMAP_EHCI_PORT_MODE_TLL:
if (omap->utmi_clk[i])
clk_disable(omap->utmi_clk[i]);
+ break;
+ default:
+ break;
}
}
@@ -528,7 +566,10 @@ static int usbhs_omap_probe(struct platform_device *pdev)
i = sizeof(struct clk *) * omap->nports;
omap->utmi_clk = devm_kzalloc(dev, i, GFP_KERNEL);
- if (!omap->utmi_clk) {
+ omap->hsic480m_clk = devm_kzalloc(dev, i, GFP_KERNEL);
+ omap->hsic60m_clk = devm_kzalloc(dev, i, GFP_KERNEL);
+
+ if (!omap->utmi_clk || !omap->hsic480m_clk || !omap->hsic60m_clk) {
dev_err(dev, "Memory allocation failed\n");
ret = -ENOMEM;
goto err_mem;
@@ -586,7 +627,7 @@ static int usbhs_omap_probe(struct platform_device *pdev)
for (i = 0; i < omap->nports; i++) {
struct clk *pclk;
- char clkname[] = "usb_host_hs_utmi_px_clk";
+ char clkname[] = "usb_host_hs_hsic480m_px_clk";
/* clock names are indexed from 1*/
snprintf(clkname, sizeof(clkname),
@@ -602,6 +643,24 @@ static int usbhs_omap_probe(struct platform_device *pdev)
clkname, PTR_ERR(pclk));
else
omap->utmi_clk[i] = pclk;
+
+ snprintf(clkname, sizeof(clkname),
+ "usb_host_hs_hsic480m_p%d_clk", i + 1);
+ pclk = clk_get(dev, clkname);
+ if (IS_ERR(pclk))
+ dev_dbg(dev, "Failed to get clock : %s : %ld\n",
+ clkname, PTR_ERR(pclk));
+ else
+ omap->hsic480m_clk[i] = pclk;
+
+ snprintf(clkname, sizeof(clkname),
+ "usb_host_hs_hsic60m_p%d_clk", i + 1);
+ pclk = clk_get(dev, clkname);
+ if (IS_ERR(pclk))
+ dev_dbg(dev, "Failed to get clock : %s : %ld\n",
+ clkname, PTR_ERR(pclk));
+ else
+ omap->hsic60m_clk[i] = pclk;
}
if (is_ehci_phy_mode(pdata->port_mode[0])) {
@@ -645,8 +704,11 @@ static int usbhs_omap_probe(struct platform_device *pdev)
err_alloc:
omap_usbhs_deinit(&pdev->dev);
- for (i = 0; i < omap->nports; i++)
+ for (i = 0; i < omap->nports; i++) {
clk_put(omap->utmi_clk[i]);
+ clk_put(omap->hsic60m_clk[i]);
+ clk_put(omap->hsic480m_clk[i]);
+ }
clk_put(omap->init_60m_fclk);
@@ -684,8 +746,11 @@ static int usbhs_omap_remove(struct platform_device *pdev)
omap_usbhs_deinit(&pdev->dev);
- for (i = 0; i < omap->nports; i++)
+ for (i = 0; i < omap->nports; i++) {
clk_put(omap->utmi_clk[i]);
+ clk_put(omap->hsic60m_clk[i]);
+ clk_put(omap->hsic480m_clk[i]);
+ }
clk_put(omap->init_60m_fclk);
clk_put(omap->utmi_p1_gfclk);
--
1.7.4.1
^ permalink raw reply related [flat|nested] 26+ messages in thread
* [PATCH v5 16/22] mfd: omap-usb-host: Get rid of unnecessary spinlock
2013-01-02 15:00 [PATCH v5 00/22] OMAP USB Host cleanup Roger Quadros
` (14 preceding siblings ...)
2013-01-02 15:00 ` [PATCH v5 15/22] mfd: omap-usb-host: Manage HSIC clocks for HSIC mode Roger Quadros
@ 2013-01-02 15:00 ` Roger Quadros
2013-01-02 15:00 ` [PATCH v5 17/22] mfd: omap-usb-host: clean up omap_usbhs_init() Roger Quadros
` (6 subsequent siblings)
22 siblings, 0 replies; 26+ messages in thread
From: Roger Quadros @ 2013-01-02 15:00 UTC (permalink / raw)
To: balbi, sameo, tony
Cc: keshava_mgowda, sshtylyov, bjorn, rogerq, linux-usb, linux-omap,
linux-arm-kernel, linux-kernel
The driver does not have an interrupt handler and
we don't really need a spinlock, so get rid of it.
Signed-off-by: Roger Quadros <rogerq@ti.com>
---
drivers/mfd/omap-usb-host.c | 16 ----------------
1 files changed, 0 insertions(+), 16 deletions(-)
diff --git a/drivers/mfd/omap-usb-host.c b/drivers/mfd/omap-usb-host.c
index a58da22..bef7249 100644
--- a/drivers/mfd/omap-usb-host.c
+++ b/drivers/mfd/omap-usb-host.c
@@ -23,7 +23,6 @@
#include <linux/delay.h>
#include <linux/clk.h>
#include <linux/dma-mapping.h>
-#include <linux/spinlock.h>
#include <linux/gpio.h>
#include <linux/platform_device.h>
#include <linux/platform_data/usb-omap.h>
@@ -108,7 +107,6 @@ struct usbhs_hcd_omap {
struct usbhs_omap_platform_data *pdata;
u32 usbhs_rev;
- spinlock_t lock;
};
/*-------------------------------------------------------------------------*/
@@ -281,14 +279,12 @@ static bool is_ohci_port(enum usbhs_omap_port_mode pmode)
static int usbhs_runtime_resume(struct device *dev)
{
struct usbhs_hcd_omap *omap = dev_get_drvdata(dev);
- unsigned long flags;
struct usbhs_omap_platform_data *pdata = omap->pdata;
int i, r;
dev_dbg(dev, "usbhs_runtime_resume\n");
omap_tll_enable();
- spin_lock_irqsave(&omap->lock, flags);
if (omap->ehci_logic_fck && !IS_ERR(omap->ehci_logic_fck))
clk_enable(omap->ehci_logic_fck);
@@ -330,22 +326,17 @@ static int usbhs_runtime_resume(struct device *dev)
}
}
- spin_unlock_irqrestore(&omap->lock, flags);
-
return 0;
}
static int usbhs_runtime_suspend(struct device *dev)
{
struct usbhs_hcd_omap *omap = dev_get_drvdata(dev);
- unsigned long flags;
struct usbhs_omap_platform_data *pdata = omap->pdata;
int i;
dev_dbg(dev, "usbhs_runtime_suspend\n");
- spin_lock_irqsave(&omap->lock, flags);
-
for (i = 0; i < omap->nports; i++) {
switch (pdata->port_mode[i]) {
case OMAP_EHCI_PORT_MODE_HSIC:
@@ -368,7 +359,6 @@ static int usbhs_runtime_suspend(struct device *dev)
if (omap->ehci_logic_fck && !IS_ERR(omap->ehci_logic_fck))
clk_disable(omap->ehci_logic_fck);
- spin_unlock_irqrestore(&omap->lock, flags);
omap_tll_disable();
return 0;
@@ -378,7 +368,6 @@ static void omap_usbhs_init(struct device *dev)
{
struct usbhs_hcd_omap *omap = dev_get_drvdata(dev);
struct usbhs_omap_platform_data *pdata = omap->pdata;
- unsigned long flags;
unsigned reg;
dev_dbg(dev, "starting TI HSUSB Controller\n");
@@ -397,7 +386,6 @@ static void omap_usbhs_init(struct device *dev)
}
pm_runtime_get_sync(dev);
- spin_lock_irqsave(&omap->lock, flags);
reg = usbhs_read(omap->uhh_base, OMAP_UHH_HOSTCONFIG);
/* setup ULPI bypass and burst configurations */
@@ -460,8 +448,6 @@ static void omap_usbhs_init(struct device *dev)
usbhs_write(omap->uhh_base, OMAP_UHH_HOSTCONFIG, reg);
dev_dbg(dev, "UHH setup done, uhh_hostconfig=%x\n", reg);
- spin_unlock_irqrestore(&omap->lock, flags);
-
pm_runtime_put_sync(dev);
if (pdata->ehci_data->phy_reset) {
/* Hold the PHY in RESET for enough time till
@@ -525,8 +511,6 @@ static int usbhs_omap_probe(struct platform_device *pdev)
if (!omap->uhh_base)
return -EADDRNOTAVAIL;
- spin_lock_init(&omap->lock);
-
omap->pdata = pdata;
pm_runtime_enable(dev);
--
1.7.4.1
^ permalink raw reply related [flat|nested] 26+ messages in thread
* [PATCH v5 17/22] mfd: omap-usb-host: clean up omap_usbhs_init()
2013-01-02 15:00 [PATCH v5 00/22] OMAP USB Host cleanup Roger Quadros
` (15 preceding siblings ...)
2013-01-02 15:00 ` [PATCH v5 16/22] mfd: omap-usb-host: Get rid of unnecessary spinlock Roger Quadros
@ 2013-01-02 15:00 ` Roger Quadros
2013-01-02 15:00 ` [PATCH v5 18/22] USB: ehci-omap: Don't free gpios that we didn't request Roger Quadros
` (5 subsequent siblings)
22 siblings, 0 replies; 26+ messages in thread
From: Roger Quadros @ 2013-01-02 15:00 UTC (permalink / raw)
To: balbi, sameo, tony
Cc: keshava_mgowda, sshtylyov, bjorn, rogerq, linux-usb, linux-omap,
linux-arm-kernel, linux-kernel
We split initializing revision 1 and revision 2 into different
functions. Initialization is now done dynamically so that only
the number of ports available on the system are initialized.
Signed-off-by: Roger Quadros <rogerq@ti.com>
---
drivers/mfd/omap-usb-host.c | 122 +++++++++++++++++++++++++-----------------
1 files changed, 73 insertions(+), 49 deletions(-)
diff --git a/drivers/mfd/omap-usb-host.c b/drivers/mfd/omap-usb-host.c
index bef7249..9166df3 100644
--- a/drivers/mfd/omap-usb-host.c
+++ b/drivers/mfd/omap-usb-host.c
@@ -364,6 +364,75 @@ static int usbhs_runtime_suspend(struct device *dev)
return 0;
}
+static unsigned omap_usbhs_rev1_hostconfig(struct usbhs_hcd_omap *omap,
+ unsigned reg)
+{
+ struct usbhs_omap_platform_data *pdata = omap->pdata;
+ int i;
+
+ for (i = 0; i < omap->nports; i++) {
+ switch (pdata->port_mode[i]) {
+ case OMAP_USBHS_PORT_MODE_UNUSED:
+ reg &= ~(OMAP_UHH_HOSTCONFIG_P1_CONNECT_STATUS << i);
+ break;
+ case OMAP_EHCI_PORT_MODE_PHY:
+ if (pdata->single_ulpi_bypass)
+ break;
+
+ if (i == 0)
+ reg &= ~OMAP_UHH_HOSTCONFIG_ULPI_P1_BYPASS;
+ else
+ reg &= ~(OMAP_UHH_HOSTCONFIG_ULPI_P2_BYPASS
+ << (i-1));
+ break;
+ default:
+ if (pdata->single_ulpi_bypass)
+ break;
+
+ if (i == 0)
+ reg |= OMAP_UHH_HOSTCONFIG_ULPI_P1_BYPASS;
+ else
+ reg |= OMAP_UHH_HOSTCONFIG_ULPI_P2_BYPASS
+ << (i-1);
+ break;
+ }
+ }
+
+ if (pdata->single_ulpi_bypass) {
+ /* bypass ULPI only if none of the ports use PHY mode */
+ reg |= OMAP_UHH_HOSTCONFIG_ULPI_BYPASS;
+
+ for (i = 0; i < omap->nports; i++) {
+ if (is_ehci_phy_mode(pdata->port_mode[i])) {
+ reg &= OMAP_UHH_HOSTCONFIG_ULPI_BYPASS;
+ break;
+ }
+ }
+ }
+
+ return reg;
+}
+
+static unsigned omap_usbhs_rev2_hostconfig(struct usbhs_hcd_omap *omap,
+ unsigned reg)
+{
+ struct usbhs_omap_platform_data *pdata = omap->pdata;
+ int i;
+
+ for (i = 0; i < omap->nports; i++) {
+ /* Clear port mode fields for PHY mode */
+ reg &= ~(OMAP4_P1_MODE_CLEAR << 2 * i);
+
+ if (is_ehci_tll_mode(pdata->port_mode[i]) ||
+ (is_ohci_port(pdata->port_mode[i])))
+ reg |= OMAP4_P1_MODE_TLL << 2 * i;
+ else if (is_ehci_hsic_mode(pdata->port_mode[i]))
+ reg |= OMAP4_P1_MODE_HSIC << 2 * i;
+ }
+
+ return reg;
+}
+
static void omap_usbhs_init(struct device *dev)
{
struct usbhs_hcd_omap *omap = dev_get_drvdata(dev);
@@ -395,55 +464,10 @@ static void omap_usbhs_init(struct device *dev)
reg |= OMAP4_UHH_HOSTCONFIG_APP_START_CLK;
reg &= ~OMAP_UHH_HOSTCONFIG_INCRX_ALIGN_EN;
- if (is_omap_usbhs_rev1(omap)) {
- if (pdata->port_mode[0] == OMAP_USBHS_PORT_MODE_UNUSED)
- reg &= ~OMAP_UHH_HOSTCONFIG_P1_CONNECT_STATUS;
- if (pdata->port_mode[1] == OMAP_USBHS_PORT_MODE_UNUSED)
- reg &= ~OMAP_UHH_HOSTCONFIG_P2_CONNECT_STATUS;
- if (pdata->port_mode[2] == OMAP_USBHS_PORT_MODE_UNUSED)
- reg &= ~OMAP_UHH_HOSTCONFIG_P3_CONNECT_STATUS;
-
- /* Bypass the TLL module for PHY mode operation */
- if (pdata->single_ulpi_bypass) {
- dev_dbg(dev, "OMAP3 ES version <= ES2.1\n");
- if (is_ehci_phy_mode(pdata->port_mode[0]) ||
- is_ehci_phy_mode(pdata->port_mode[1]) ||
- is_ehci_phy_mode(pdata->port_mode[2]))
- reg &= ~OMAP_UHH_HOSTCONFIG_ULPI_BYPASS;
- else
- reg |= OMAP_UHH_HOSTCONFIG_ULPI_BYPASS;
- } else {
- dev_dbg(dev, "OMAP3 ES version > ES2.1\n");
- if (is_ehci_phy_mode(pdata->port_mode[0]))
- reg &= ~OMAP_UHH_HOSTCONFIG_ULPI_P1_BYPASS;
- else
- reg |= OMAP_UHH_HOSTCONFIG_ULPI_P1_BYPASS;
- if (is_ehci_phy_mode(pdata->port_mode[1]))
- reg &= ~OMAP_UHH_HOSTCONFIG_ULPI_P2_BYPASS;
- else
- reg |= OMAP_UHH_HOSTCONFIG_ULPI_P2_BYPASS;
- if (is_ehci_phy_mode(pdata->port_mode[2]))
- reg &= ~OMAP_UHH_HOSTCONFIG_ULPI_P3_BYPASS;
- else
- reg |= OMAP_UHH_HOSTCONFIG_ULPI_P3_BYPASS;
- }
- } else if (is_omap_usbhs_rev2(omap)) {
- /* Clear port mode fields for PHY mode*/
- reg &= ~OMAP4_P1_MODE_CLEAR;
- reg &= ~OMAP4_P2_MODE_CLEAR;
-
- if (is_ehci_tll_mode(pdata->port_mode[0]) ||
- (is_ohci_port(pdata->port_mode[0])))
- reg |= OMAP4_P1_MODE_TLL;
- else if (is_ehci_hsic_mode(pdata->port_mode[0]))
- reg |= OMAP4_P1_MODE_HSIC;
-
- if (is_ehci_tll_mode(pdata->port_mode[1]) ||
- (is_ohci_port(pdata->port_mode[1])))
- reg |= OMAP4_P2_MODE_TLL;
- else if (is_ehci_hsic_mode(pdata->port_mode[1]))
- reg |= OMAP4_P2_MODE_HSIC;
- }
+ if (is_omap_usbhs_rev1(omap))
+ reg = omap_usbhs_rev1_hostconfig(omap, reg);
+ else if (is_omap_usbhs_rev2(omap))
+ reg = omap_usbhs_rev2_hostconfig(omap, reg);
usbhs_write(omap->uhh_base, OMAP_UHH_HOSTCONFIG, reg);
dev_dbg(dev, "UHH setup done, uhh_hostconfig=%x\n", reg);
--
1.7.4.1
^ permalink raw reply related [flat|nested] 26+ messages in thread
* [PATCH v5 18/22] USB: ehci-omap: Don't free gpios that we didn't request
2013-01-02 15:00 [PATCH v5 00/22] OMAP USB Host cleanup Roger Quadros
` (16 preceding siblings ...)
2013-01-02 15:00 ` [PATCH v5 17/22] mfd: omap-usb-host: clean up omap_usbhs_init() Roger Quadros
@ 2013-01-02 15:00 ` Roger Quadros
2013-01-02 15:00 ` [PATCH v5 19/22] ARM: OMAP3: clock data: get rid of unused USB host clock aliases and dummies Roger Quadros
` (4 subsequent siblings)
22 siblings, 0 replies; 26+ messages in thread
From: Roger Quadros @ 2013-01-02 15:00 UTC (permalink / raw)
To: balbi, sameo, tony
Cc: keshava_mgowda, sshtylyov, bjorn, rogerq, linux-usb, linux-omap,
linux-arm-kernel, linux-kernel
This driver does not request any gpios so don't free them.
Fixes L3 bus error on multiple modprobe/rmmod of ehci_hcd
with ehci-omap in use.
Signed-off-by: Roger Quadros <rogerq@ti.com>
---
drivers/usb/host/ehci-omap.c | 8 --------
1 files changed, 0 insertions(+), 8 deletions(-)
diff --git a/drivers/usb/host/ehci-omap.c b/drivers/usb/host/ehci-omap.c
index ac17a7c..e9d9b09 100644
--- a/drivers/usb/host/ehci-omap.c
+++ b/drivers/usb/host/ehci-omap.c
@@ -288,7 +288,6 @@ static int ehci_hcd_omap_remove(struct platform_device *pdev)
{
struct device *dev = &pdev->dev;
struct usb_hcd *hcd = dev_get_drvdata(dev);
- struct ehci_hcd_omap_platform_data *pdata = dev->platform_data;
usb_remove_hcd(hcd);
disable_put_regulator(dev->platform_data);
@@ -298,13 +297,6 @@ static int ehci_hcd_omap_remove(struct platform_device *pdev)
pm_runtime_put_sync(dev);
pm_runtime_disable(dev);
- if (pdata->phy_reset) {
- if (gpio_is_valid(pdata->reset_gpio_port[0]))
- gpio_free(pdata->reset_gpio_port[0]);
-
- if (gpio_is_valid(pdata->reset_gpio_port[1]))
- gpio_free(pdata->reset_gpio_port[1]);
- }
return 0;
}
--
1.7.4.1
^ permalink raw reply related [flat|nested] 26+ messages in thread
* [PATCH v5 19/22] ARM: OMAP3: clock data: get rid of unused USB host clock aliases and dummies
2013-01-02 15:00 [PATCH v5 00/22] OMAP USB Host cleanup Roger Quadros
` (17 preceding siblings ...)
2013-01-02 15:00 ` [PATCH v5 18/22] USB: ehci-omap: Don't free gpios that we didn't request Roger Quadros
@ 2013-01-02 15:00 ` Roger Quadros
2013-01-02 15:00 ` [PATCH v5 20/22] ARM: OMAP4: clock data: get rid of unused USB host clock aliases Roger Quadros
` (3 subsequent siblings)
22 siblings, 0 replies; 26+ messages in thread
From: Roger Quadros @ 2013-01-02 15:00 UTC (permalink / raw)
To: balbi, sameo, tony
Cc: keshava_mgowda, sshtylyov, bjorn, rogerq, linux-usb, linux-omap,
linux-arm-kernel, linux-kernel, Paul Walmsley, Rajendra Nayak,
Benoit Cousson, Mike Turquette
We don't need multiple aliases for the OMAP USB host clocks and neither
the dummy clocks so remove them.
CC: Paul Walmsley <paul@pwsan.com>
CC: Rajendra Nayak <rnayak@ti.com>
CC: Benoit Cousson <b-cousson@ti.com>
CC: Mike Turquette <mturquette@linaro.com>
Signed-off-by: Roger Quadros <rogerq@ti.com>
Acked-by: Paul Walmsley <paul@pwsan.com>
---
arch/arm/mach-omap2/cclock3xxx_data.c | 11 -----------
1 files changed, 0 insertions(+), 11 deletions(-)
diff --git a/arch/arm/mach-omap2/cclock3xxx_data.c b/arch/arm/mach-omap2/cclock3xxx_data.c
index bdf3948..da9b4f9 100644
--- a/arch/arm/mach-omap2/cclock3xxx_data.c
+++ b/arch/arm/mach-omap2/cclock3xxx_data.c
@@ -3289,8 +3289,6 @@ static struct omap_clk omap3xxx_clks[] = {
CLK(NULL, "cpefuse_fck", &cpefuse_fck, CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
CLK(NULL, "ts_fck", &ts_fck, CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
CLK(NULL, "usbtll_fck", &usbtll_fck, CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
- CLK("usbhs_omap", "usbtll_fck", &usbtll_fck, CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
- CLK("usbhs_tll", "usbtll_fck", &usbtll_fck, CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
CLK(NULL, "core_96m_fck", &core_96m_fck, CK_3XXX),
CLK(NULL, "mmchs3_fck", &mmchs3_fck, CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
CLK(NULL, "mmchs2_fck", &mmchs2_fck, CK_3XXX),
@@ -3327,8 +3325,6 @@ static struct omap_clk omap3xxx_clks[] = {
CLK(NULL, "pka_ick", &pka_ick, CK_34XX | CK_36XX),
CLK(NULL, "core_l4_ick", &core_l4_ick, CK_3XXX),
CLK(NULL, "usbtll_ick", &usbtll_ick, CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
- CLK("usbhs_omap", "usbtll_ick", &usbtll_ick, CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
- CLK("usbhs_tll", "usbtll_ick", &usbtll_ick, CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
CLK("omap_hsmmc.2", "ick", &mmchs3_ick, CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
CLK(NULL, "mmchs3_ick", &mmchs3_ick, CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
CLK(NULL, "icr_ick", &icr_ick, CK_34XX | CK_36XX),
@@ -3391,17 +3387,10 @@ static struct omap_clk omap3xxx_clks[] = {
CLK(NULL, "usbhost_120m_fck", &usbhost_120m_fck, CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
CLK(NULL, "usbhost_48m_fck", &usbhost_48m_fck, CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
CLK(NULL, "usbhost_ick", &usbhost_ick, CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
- CLK("usbhs_omap", "usbhost_ick", &usbhost_ick, CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
CLK(NULL, "utmi_p1_gfclk", &dummy_ck, CK_3XXX),
CLK(NULL, "utmi_p2_gfclk", &dummy_ck, CK_3XXX),
CLK(NULL, "xclk60mhsp1_ck", &dummy_ck, CK_3XXX),
CLK(NULL, "xclk60mhsp2_ck", &dummy_ck, CK_3XXX),
- CLK(NULL, "usb_host_hs_utmi_p1_clk", &dummy_ck, CK_3XXX),
- CLK(NULL, "usb_host_hs_utmi_p2_clk", &dummy_ck, CK_3XXX),
- CLK("usbhs_omap", "usb_tll_hs_usb_ch0_clk", &dummy_ck, CK_3XXX),
- CLK("usbhs_omap", "usb_tll_hs_usb_ch1_clk", &dummy_ck, CK_3XXX),
- CLK("usbhs_tll", "usb_tll_hs_usb_ch0_clk", &dummy_ck, CK_3XXX),
- CLK("usbhs_tll", "usb_tll_hs_usb_ch1_clk", &dummy_ck, CK_3XXX),
CLK(NULL, "init_60m_fclk", &dummy_ck, CK_3XXX),
CLK(NULL, "usim_fck", &usim_fck, CK_3430ES2PLUS | CK_36XX),
CLK(NULL, "gpt1_fck", &gpt1_fck, CK_3XXX),
--
1.7.4.1
^ permalink raw reply related [flat|nested] 26+ messages in thread
* [PATCH v5 20/22] ARM: OMAP4: clock data: get rid of unused USB host clock aliases
2013-01-02 15:00 [PATCH v5 00/22] OMAP USB Host cleanup Roger Quadros
` (18 preceding siblings ...)
2013-01-02 15:00 ` [PATCH v5 19/22] ARM: OMAP3: clock data: get rid of unused USB host clock aliases and dummies Roger Quadros
@ 2013-01-02 15:00 ` Roger Quadros
2013-01-02 15:00 ` [PATCH v5 21/22] mfd: omap-usb-host: Don't spam console on clk_set_parent failure Roger Quadros
` (2 subsequent siblings)
22 siblings, 0 replies; 26+ messages in thread
From: Roger Quadros @ 2013-01-02 15:00 UTC (permalink / raw)
To: balbi, sameo, tony
Cc: keshava_mgowda, sshtylyov, bjorn, rogerq, linux-usb, linux-omap,
linux-arm-kernel, linux-kernel, Paul Walmsley, Rajendra Nayak,
Benoit Cousson, Mike Turquette
We don't need multiple aliases for the OMAP USB host clocks so remove them.
CC: Paul Walmsley <paul@pwsan.com>
CC: Rajendra Nayak <rnayak@ti.com>
CC: Benoit Cousson <b-cousson@ti.com>
CC: Mike Turquette <mturquette@linaro.org>
Signed-off-by: Roger Quadros <rogerq@ti.com>
Acked-by: Paul Walmsley <paul@pwsan.com>
---
arch/arm/mach-omap2/cclock44xx_data.c | 7 -------
1 files changed, 0 insertions(+), 7 deletions(-)
diff --git a/arch/arm/mach-omap2/cclock44xx_data.c b/arch/arm/mach-omap2/cclock44xx_data.c
index 5789a5e..5ee78f3 100644
--- a/arch/arm/mach-omap2/cclock44xx_data.c
+++ b/arch/arm/mach-omap2/cclock44xx_data.c
@@ -1875,7 +1875,6 @@ static struct omap_clk omap44xx_clks[] = {
CLK(NULL, "uart3_fck", &uart3_fck, CK_443X),
CLK(NULL, "uart4_fck", &uart4_fck, CK_443X),
CLK(NULL, "usb_host_fs_fck", &usb_host_fs_fck, CK_443X),
- CLK("usbhs_omap", "fs_fck", &usb_host_fs_fck, CK_443X),
CLK(NULL, "utmi_p1_gfclk", &utmi_p1_gfclk, CK_443X),
CLK(NULL, "usb_host_hs_utmi_p1_clk", &usb_host_hs_utmi_p1_clk, CK_443X),
CLK(NULL, "utmi_p2_gfclk", &utmi_p2_gfclk, CK_443X),
@@ -1887,7 +1886,6 @@ static struct omap_clk omap44xx_clks[] = {
CLK(NULL, "usb_host_hs_hsic480m_p2_clk", &usb_host_hs_hsic480m_p2_clk, CK_443X),
CLK(NULL, "usb_host_hs_func48mclk", &usb_host_hs_func48mclk, CK_443X),
CLK(NULL, "usb_host_hs_fck", &usb_host_hs_fck, CK_443X),
- CLK("usbhs_omap", "hs_fck", &usb_host_hs_fck, CK_443X),
CLK(NULL, "otg_60m_gfclk", &otg_60m_gfclk, CK_443X),
CLK(NULL, "usb_otg_hs_xclk", &usb_otg_hs_xclk, CK_443X),
CLK(NULL, "usb_otg_hs_ick", &usb_otg_hs_ick, CK_443X),
@@ -1897,8 +1895,6 @@ static struct omap_clk omap44xx_clks[] = {
CLK(NULL, "usb_tll_hs_usb_ch0_clk", &usb_tll_hs_usb_ch0_clk, CK_443X),
CLK(NULL, "usb_tll_hs_usb_ch1_clk", &usb_tll_hs_usb_ch1_clk, CK_443X),
CLK(NULL, "usb_tll_hs_ick", &usb_tll_hs_ick, CK_443X),
- CLK("usbhs_omap", "usbtll_ick", &usb_tll_hs_ick, CK_443X),
- CLK("usbhs_tll", "usbtll_ick", &usb_tll_hs_ick, CK_443X),
CLK(NULL, "usim_ck", &usim_ck, CK_443X),
CLK(NULL, "usim_fclk", &usim_fclk, CK_443X),
CLK(NULL, "usim_fck", &usim_fck, CK_443X),
@@ -1949,9 +1945,6 @@ static struct omap_clk omap44xx_clks[] = {
CLK(NULL, "uart2_ick", &dummy_ck, CK_443X),
CLK(NULL, "uart3_ick", &dummy_ck, CK_443X),
CLK(NULL, "uart4_ick", &dummy_ck, CK_443X),
- CLK("usbhs_omap", "usbhost_ick", &dummy_ck, CK_443X),
- CLK("usbhs_omap", "usbtll_fck", &dummy_ck, CK_443X),
- CLK("usbhs_tll", "usbtll_fck", &dummy_ck, CK_443X),
CLK("omap_wdt", "ick", &dummy_ck, CK_443X),
CLK(NULL, "timer_32k_ck", &sys_32k_ck, CK_443X),
/* TODO: Remove "omap_timer.X" aliases once DT migration is complete */
--
1.7.4.1
^ permalink raw reply related [flat|nested] 26+ messages in thread
* [PATCH v5 21/22] mfd: omap-usb-host: Don't spam console on clk_set_parent failure
2013-01-02 15:00 [PATCH v5 00/22] OMAP USB Host cleanup Roger Quadros
` (19 preceding siblings ...)
2013-01-02 15:00 ` [PATCH v5 20/22] ARM: OMAP4: clock data: get rid of unused USB host clock aliases Roger Quadros
@ 2013-01-02 15:00 ` Roger Quadros
2013-01-02 15:00 ` [PATCH v5 22/22] mdf: omap-usb-host: get rid of build warning Roger Quadros
2013-01-04 14:17 ` [PATCH v5 00/22] OMAP USB Host cleanup Roger Quadros
22 siblings, 0 replies; 26+ messages in thread
From: Roger Quadros @ 2013-01-02 15:00 UTC (permalink / raw)
To: balbi, sameo, tony
Cc: keshava_mgowda, sshtylyov, bjorn, rogerq, linux-usb, linux-omap,
linux-arm-kernel, linux-kernel
clk_set_parent is expected to fail on OMAP3 platforms. We don't
consider that as fatal so don't spam console.
Signed-off-by: Roger Quadros <rogerq@ti.com>
---
drivers/mfd/omap-usb-host.c | 18 +++++++++---------
1 files changed, 9 insertions(+), 9 deletions(-)
diff --git a/drivers/mfd/omap-usb-host.c b/drivers/mfd/omap-usb-host.c
index 9166df3..bf2a06a 100644
--- a/drivers/mfd/omap-usb-host.c
+++ b/drivers/mfd/omap-usb-host.c
@@ -672,32 +672,32 @@ static int usbhs_omap_probe(struct platform_device *pdev)
}
if (is_ehci_phy_mode(pdata->port_mode[0])) {
- /* for OMAP3 , the clk set paretn fails */
+ /* for OMAP3, clk_set_parent fails */
ret = clk_set_parent(omap->utmi_p1_gfclk,
omap->xclk60mhsp1_ck);
if (ret != 0)
- dev_err(dev, "xclk60mhsp1_ck set parent"
- "failed error:%d\n", ret);
+ dev_dbg(dev, "xclk60mhsp1_ck set parent failed: %d\n",
+ ret);
} else if (is_ehci_tll_mode(pdata->port_mode[0])) {
ret = clk_set_parent(omap->utmi_p1_gfclk,
omap->init_60m_fclk);
if (ret != 0)
- dev_err(dev, "init_60m_fclk set parent"
- "failed error:%d\n", ret);
+ dev_dbg(dev, "P0 init_60m_fclk set parent failed: %d\n",
+ ret);
}
if (is_ehci_phy_mode(pdata->port_mode[1])) {
ret = clk_set_parent(omap->utmi_p2_gfclk,
omap->xclk60mhsp2_ck);
if (ret != 0)
- dev_err(dev, "xclk60mhsp2_ck set parent"
- "failed error:%d\n", ret);
+ dev_dbg(dev, "xclk60mhsp2_ck set parent failed: %d\n",
+ ret);
} else if (is_ehci_tll_mode(pdata->port_mode[1])) {
ret = clk_set_parent(omap->utmi_p2_gfclk,
omap->init_60m_fclk);
if (ret != 0)
- dev_err(dev, "init_60m_fclk set parent"
- "failed error:%d\n", ret);
+ dev_dbg(dev, "P1 init_60m_fclk set parent failed: %d\n",
+ ret);
}
omap_usbhs_init(dev);
--
1.7.4.1
^ permalink raw reply related [flat|nested] 26+ messages in thread
* [PATCH v5 22/22] mdf: omap-usb-host: get rid of build warning
2013-01-02 15:00 [PATCH v5 00/22] OMAP USB Host cleanup Roger Quadros
` (20 preceding siblings ...)
2013-01-02 15:00 ` [PATCH v5 21/22] mfd: omap-usb-host: Don't spam console on clk_set_parent failure Roger Quadros
@ 2013-01-02 15:00 ` Roger Quadros
2013-01-04 14:17 ` [PATCH v5 00/22] OMAP USB Host cleanup Roger Quadros
22 siblings, 0 replies; 26+ messages in thread
From: Roger Quadros @ 2013-01-02 15:00 UTC (permalink / raw)
To: balbi, sameo, tony
Cc: keshava_mgowda, sshtylyov, bjorn, rogerq, linux-usb, linux-omap,
linux-arm-kernel, linux-kernel
Fixes the below build warning when driver is built-in.
drivers/mfd/omap-usb-host.c:750:12: warning:
‘usbhs_omap_remove’ defined but not used [-Wunused-function]
Signed-off-by: Roger Quadros <rogerq@ti.com>
---
drivers/mfd/omap-usb-host.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/drivers/mfd/omap-usb-host.c b/drivers/mfd/omap-usb-host.c
index bf2a06a..ecdafbd 100644
--- a/drivers/mfd/omap-usb-host.c
+++ b/drivers/mfd/omap-usb-host.c
@@ -782,7 +782,7 @@ static struct platform_driver usbhs_omap_driver = {
.owner = THIS_MODULE,
.pm = &usbhsomap_dev_pm_ops,
},
- .remove = __exit_p(usbhs_omap_remove),
+ .remove = usbhs_omap_remove,
};
MODULE_AUTHOR("Keshava Munegowda <keshava_mgowda@ti.com>");
--
1.7.4.1
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply related [flat|nested] 26+ messages in thread
* Re: [PATCH v5 13/22] mfd: omap-usb-host: override number of ports from platform data
[not found] ` <1357138842-28964-14-git-send-email-rogerq-l0cyMroinI0@public.gmane.org>
@ 2013-01-03 12:52 ` Sergei Shtylyov
2013-01-04 14:06 ` Roger Quadros
0 siblings, 1 reply; 26+ messages in thread
From: Sergei Shtylyov @ 2013-01-03 12:52 UTC (permalink / raw)
To: Roger Quadros
Cc: balbi-l0cyMroinI0, sameo-VuQAYsv1563Yd54FQh9/CA,
tony-4v6yS6AI5VpBDgjK7y7TUQ, keshava_mgowda-l0cyMroinI0,
bjorn-yOkvZcmFvRU, linux-usb-u79uwXL29TY76Z2rM5mHXA,
linux-omap-u79uwXL29TY76Z2rM5mHXA,
linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r,
linux-kernel-u79uwXL29TY76Z2rM5mHXA
Hello.
On 02-01-2013 19:00, Roger Quadros wrote:
> Both OMAP4 and 5 exhibit the same revision ID in the REVISION register
> but they have different number of ports i.e. 2 and 3 respectively.
> So we can't rely on REVISION register for number of ports on OMAP5
> and depend on platform data (or device tree) instead.
> Signed-off-by: Roger Quadros <rogerq-l0cyMroinI0@public.gmane.org>
[...]
> diff --git a/drivers/mfd/omap-usb-host.c b/drivers/mfd/omap-usb-host.c
> index 5edb828..710460d 100644
> --- a/drivers/mfd/omap-usb-host.c
> +++ b/drivers/mfd/omap-usb-host.c
> @@ -497,19 +497,27 @@ static int usbhs_omap_probe(struct platform_device *pdev)
> */
> pm_runtime_put_sync(dev);
>
> - switch (omap->usbhs_rev) {
> - case OMAP_USBHS_REV1:
> - omap->nports = 3;
> - break;
> - case OMAP_USBHS_REV2:
> - omap->nports = 2;
> - break;
> - default:
> - omap->nports = OMAP3_HS_USB_PORTS;
> - dev_dbg(dev,
> - "USB HOST Rev : 0x%d not recognized, assuming %d ports\n",
> - omap->usbhs_rev, omap->nports);
> - break;
> + /*
> + * If platform data contains nports then use that
> + * else make out number of ports from USBHS revision
> + */
> + if (pdata->nports) {
> + omap->nports = pdata->nports;
> + } else {
> + switch (omap->usbhs_rev) {
> + case OMAP_USBHS_REV1:
> + omap->nports = 3;
> + break;
> + case OMAP_USBHS_REV2:
> + omap->nports = 2;
> + break;
> + default:
> + omap->nports = OMAP3_HS_USB_PORTS;
> + dev_dbg(dev,
> + "USB HOST Rev:0x%d not recognized, assuming %d ports\n",
Please indent the string to the right somewhat, as it was before.
WBR, Sergei
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [PATCH v5 13/22] mfd: omap-usb-host: override number of ports from platform data
2013-01-03 12:52 ` Sergei Shtylyov
@ 2013-01-04 14:06 ` Roger Quadros
0 siblings, 0 replies; 26+ messages in thread
From: Roger Quadros @ 2013-01-04 14:06 UTC (permalink / raw)
To: Sergei Shtylyov
Cc: sameo, tony, linux-usb, linux-kernel, balbi, keshava_mgowda,
linux-arm-kernel, linux-omap, bjorn
On 01/03/2013 02:52 PM, Sergei Shtylyov wrote:
> Hello.
>
> On 02-01-2013 19:00, Roger Quadros wrote:
>
>> Both OMAP4 and 5 exhibit the same revision ID in the REVISION register
>> but they have different number of ports i.e. 2 and 3 respectively.
>> So we can't rely on REVISION register for number of ports on OMAP5
>> and depend on platform data (or device tree) instead.
>
>> Signed-off-by: Roger Quadros <rogerq@ti.com>
> [...]
>
>> diff --git a/drivers/mfd/omap-usb-host.c b/drivers/mfd/omap-usb-host.c
>> index 5edb828..710460d 100644
>> --- a/drivers/mfd/omap-usb-host.c
>> +++ b/drivers/mfd/omap-usb-host.c
>> @@ -497,19 +497,27 @@ static int usbhs_omap_probe(struct
>> platform_device *pdev)
>> */
>> pm_runtime_put_sync(dev);
>>
>> - switch (omap->usbhs_rev) {
>> - case OMAP_USBHS_REV1:
>> - omap->nports = 3;
>> - break;
>> - case OMAP_USBHS_REV2:
>> - omap->nports = 2;
>> - break;
>> - default:
>> - omap->nports = OMAP3_HS_USB_PORTS;
>> - dev_dbg(dev,
>> - "USB HOST Rev : 0x%d not recognized, assuming %d ports\n",
>> - omap->usbhs_rev, omap->nports);
>> - break;
>> + /*
>> + * If platform data contains nports then use that
>> + * else make out number of ports from USBHS revision
>> + */
>> + if (pdata->nports) {
>> + omap->nports = pdata->nports;
>> + } else {
>> + switch (omap->usbhs_rev) {
>> + case OMAP_USBHS_REV1:
>> + omap->nports = 3;
>> + break;
>> + case OMAP_USBHS_REV2:
>> + omap->nports = 2;
>> + break;
>> + default:
>> + omap->nports = OMAP3_HS_USB_PORTS;
>> + dev_dbg(dev,
>> + "USB HOST Rev:0x%d not recognized, assuming %d ports\n",
>
> Please indent the string to the right somewhat, as it was before.
>
OK. I will fix it in the pull request e-mail that i'll send in a while
as a reply to the first message in this patchset.
--
cheers,
-roger
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [PATCH v5 00/22] OMAP USB Host cleanup
2013-01-02 15:00 [PATCH v5 00/22] OMAP USB Host cleanup Roger Quadros
` (21 preceding siblings ...)
2013-01-02 15:00 ` [PATCH v5 22/22] mdf: omap-usb-host: get rid of build warning Roger Quadros
@ 2013-01-04 14:17 ` Roger Quadros
22 siblings, 0 replies; 26+ messages in thread
From: Roger Quadros @ 2013-01-04 14:17 UTC (permalink / raw)
To: sameo
Cc: Roger Quadros, balbi, tony, keshava_mgowda, sshtylyov, bjorn,
linux-usb, linux-omap, linux-arm-kernel, linux-kernel
Hi Samuel,
Below is the pull request for this series. I've addressed the recent
indentation issue pointed out by Sergei.
The following changes since commit cfa7abd7a92396923889fc870090b5d748c603ab:
Merge branch 'heads/fixes' into for-next (2013-01-02 12:40:04 -0800)
are available in the git repository at:
git://github.com/rogerq/linux.git arm-for-next-usbhost9-part
Roger Quadros (22):
mfd: omap-usb-tll: Avoid creating copy of platform data
mfd: omap-usb-tll: Fix channel count detection
mfd: omap-usb-tll: Use devm_kzalloc/ioremap and clean up error path
mfd: omap-usb-tll: Clean up clock handling
mfd: omap-usb-tll: introduce and use mode_needs_tll()
mfd: omap-usb-tll: Check for missing platform data in probe
mfd: omap-usb-tll: Fix error message
mfd: omap-usb-tll: serialize access to TLL device
mfd: omap-usb-tll: Add OMAP5 revision and HSIC support
mfd: omap_usb_host: Avoid creating copy of platform_data
mfd: omap-usb-host: Use devm_kzalloc() and devm_request_and_ioremap()
mfd: omap-usb-host: know about number of ports from revision register
mfd: omap-usb-host: override number of ports from platform data
mfd: omap-usb-host: cleanup clock management code
mfd: omap-usb-host: Manage HSIC clocks for HSIC mode
mfd: omap-usb-host: Get rid of unnecessary spinlock
mfd: omap-usb-host: clean up omap_usbhs_init()
USB: ehci-omap: Don't free gpios that we didn't request
ARM: OMAP3: clock data: get rid of unused USB host clock aliases
and dummies
ARM: OMAP4: clock data: get rid of unused USB host clock aliases
mfd: omap-usb-host: Don't spam console on clk_set_parent failure
mdf: omap-usb-host: get rid of build warning
arch/arm/mach-omap2/cclock3xxx_data.c | 11 -
arch/arm/mach-omap2/cclock44xx_data.c | 7 -
arch/arm/mach-omap2/usb-host.c | 1 +
arch/arm/mach-omap2/usb.h | 1 +
drivers/mfd/omap-usb-host.c | 499
+++++++++++++++++++-------------
drivers/mfd/omap-usb-tll.c | 244 +++++++++-------
drivers/usb/host/ehci-omap.c | 8 -
include/linux/platform_data/usb-omap.h | 1 +
8 files changed, 435 insertions(+), 337 deletions(-)
--
cheers,
-roger
On 01/02/2013 05:00 PM, Roger Quadros wrote:
> Hi,
>
> This patchset addresses the following
>
> - Avoid addressing clocks one by one by name and use a for loop + bunch
> of cleanups.
> - Get number of channels/ports dynamically either from revision register
> or from platform data. Avoids getting clocks that are not present.
> - Add OMAP5 and HSIC mode (Not tested)
>
> v5:
> - Rebased on top of todays arm-soc/for-next
> - Removed the clock merging patch from the list.
> - Updated patches 14, 19 and 20 to accomodate the above change.
> - Added patch 22 to fix a build warning.
>
> v4:
> - Added appropriate maintainers in to/cc
> - minor print message fix in patch 23 to maintain consistency
>
> v3:
> - Rebased on arm-soc/for-next commit f979306c4d38d213c6977aaf3b1115e8ded71e3a
> - Rearranged patch that get rids of cpu_is_omap..() macros
> - Coding style fixes
>
> v2:
> - Clocks are allocated dynamically based on number of ports available
> on the platform
> - Reduced console spam if non critical clocks are not found on the platform.
> - Get rid of cpu_is_.. macros from USB host driver.
>
> cheers,
> -roger
>
> ---
> Roger Quadros (22):
> mfd: omap-usb-tll: Avoid creating copy of platform data
> mfd: omap-usb-tll: Fix channel count detection
> mfd: omap-usb-tll: Use devm_kzalloc/ioremap and clean up error path
> mfd: omap-usb-tll: Clean up clock handling
> mfd: omap-usb-tll: introduce and use mode_needs_tll()
> mfd: omap-usb-tll: Check for missing platform data in probe
> mfd: omap-usb-tll: Fix error message
> mfd: omap-usb-tll: serialize access to TLL device
> mfd: omap-usb-tll: Add OMAP5 revision and HSIC support
> mfd: omap_usb_host: Avoid creating copy of platform_data
> mfd: omap-usb-host: Use devm_kzalloc() and devm_request_and_ioremap()
> mfd: omap-usb-host: know about number of ports from revision register
> mfd: omap-usb-host: override number of ports from platform data
> mfd: omap-usb-host: cleanup clock management code
> mfd: omap-usb-host: Manage HSIC clocks for HSIC mode
> mfd: omap-usb-host: Get rid of unnecessary spinlock
> mfd: omap-usb-host: clean up omap_usbhs_init()
> USB: ehci-omap: Don't free gpios that we didn't request
> ARM: OMAP3: clock data: get rid of unused USB host clock aliases and
> dummies
> ARM: OMAP4: clock data: get rid of unused USB host clock aliases
> mfd: omap-usb-host: Don't spam console on clk_set_parent failure
> mdf: omap-usb-host: get rid of build warning
>
> arch/arm/mach-omap2/cclock3xxx_data.c | 11 -
> arch/arm/mach-omap2/cclock44xx_data.c | 7 -
> arch/arm/mach-omap2/usb-host.c | 1 +
> arch/arm/mach-omap2/usb.h | 1 +
> drivers/mfd/omap-usb-host.c | 499 +++++++++++++++++++-------------
> drivers/mfd/omap-usb-tll.c | 244 +++++++++-------
> drivers/usb/host/ehci-omap.c | 8 -
> include/linux/platform_data/usb-omap.h | 1 +
> 8 files changed, 435 insertions(+), 337 deletions(-)
>
^ permalink raw reply [flat|nested] 26+ messages in thread
end of thread, other threads:[~2013-01-04 14:17 UTC | newest]
Thread overview: 26+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-01-02 15:00 [PATCH v5 00/22] OMAP USB Host cleanup Roger Quadros
2013-01-02 15:00 ` [PATCH v5 01/22] mfd: omap-usb-tll: Avoid creating copy of platform data Roger Quadros
2013-01-02 15:00 ` [PATCH v5 02/22] mfd: omap-usb-tll: Fix channel count detection Roger Quadros
2013-01-02 15:00 ` [PATCH v5 03/22] mfd: omap-usb-tll: Use devm_kzalloc/ioremap and clean up error path Roger Quadros
2013-01-02 15:00 ` [PATCH v5 04/22] mfd: omap-usb-tll: Clean up clock handling Roger Quadros
2013-01-02 15:00 ` [PATCH v5 05/22] mfd: omap-usb-tll: introduce and use mode_needs_tll() Roger Quadros
2013-01-02 15:00 ` [PATCH v5 06/22] mfd: omap-usb-tll: Check for missing platform data in probe Roger Quadros
[not found] ` <1357138842-28964-1-git-send-email-rogerq-l0cyMroinI0@public.gmane.org>
2013-01-02 15:00 ` [PATCH v5 07/22] mfd: omap-usb-tll: Fix error message Roger Quadros
2013-01-02 15:00 ` [PATCH v5 08/22] mfd: omap-usb-tll: serialize access to TLL device Roger Quadros
2013-01-02 15:00 ` [PATCH v5 09/22] mfd: omap-usb-tll: Add OMAP5 revision and HSIC support Roger Quadros
2013-01-02 15:00 ` [PATCH v5 10/22] mfd: omap_usb_host: Avoid creating copy of platform_data Roger Quadros
2013-01-02 15:00 ` [PATCH v5 11/22] mfd: omap-usb-host: Use devm_kzalloc() and devm_request_and_ioremap() Roger Quadros
2013-01-02 15:00 ` [PATCH v5 12/22] mfd: omap-usb-host: know about number of ports from revision register Roger Quadros
2013-01-02 15:00 ` [PATCH v5 13/22] mfd: omap-usb-host: override number of ports from platform data Roger Quadros
[not found] ` <1357138842-28964-14-git-send-email-rogerq-l0cyMroinI0@public.gmane.org>
2013-01-03 12:52 ` Sergei Shtylyov
2013-01-04 14:06 ` Roger Quadros
2013-01-02 15:00 ` [PATCH v5 14/22] mfd: omap-usb-host: cleanup clock management code Roger Quadros
2013-01-02 15:00 ` [PATCH v5 15/22] mfd: omap-usb-host: Manage HSIC clocks for HSIC mode Roger Quadros
2013-01-02 15:00 ` [PATCH v5 16/22] mfd: omap-usb-host: Get rid of unnecessary spinlock Roger Quadros
2013-01-02 15:00 ` [PATCH v5 17/22] mfd: omap-usb-host: clean up omap_usbhs_init() Roger Quadros
2013-01-02 15:00 ` [PATCH v5 18/22] USB: ehci-omap: Don't free gpios that we didn't request Roger Quadros
2013-01-02 15:00 ` [PATCH v5 19/22] ARM: OMAP3: clock data: get rid of unused USB host clock aliases and dummies Roger Quadros
2013-01-02 15:00 ` [PATCH v5 20/22] ARM: OMAP4: clock data: get rid of unused USB host clock aliases Roger Quadros
2013-01-02 15:00 ` [PATCH v5 21/22] mfd: omap-usb-host: Don't spam console on clk_set_parent failure Roger Quadros
2013-01-02 15:00 ` [PATCH v5 22/22] mdf: omap-usb-host: get rid of build warning Roger Quadros
2013-01-04 14:17 ` [PATCH v5 00/22] OMAP USB Host cleanup Roger Quadros
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).