* [PATCH 3/5 v12] arm: omap: usb: register hwmods of usbhs
2011-09-29 14:24 ` [PATCH 2/5 v12] arm: omap: usb: ehci and ohci hwmod structures for omap3 Keshava Munegowda
@ 2011-09-29 14:24 ` Keshava Munegowda
0 siblings, 0 replies; 8+ messages in thread
From: Keshava Munegowda @ 2011-09-29 14:24 UTC (permalink / raw)
To: linux-usb, linux-omap, linux-kernel, balbi, khilman, b-cousson,
paul
Cc: Keshava Munegowda, gadiyar, sameo, parthab, tony, johnstul,
vishwanath.bs
The hwmod structure of usb_host_hs and usb_tll are
retrieved and registered with omap device
Signed-off-by: Keshava Munegowda <keshava_mgowda@ti.com>
Reviewed-by: Partha Basak <parthab@india.ti.com>
---
arch/arm/mach-omap2/usb-host.c | 100 ++++++++++++++--------------------------
1 files changed, 34 insertions(+), 66 deletions(-)
diff --git a/arch/arm/mach-omap2/usb-host.c b/arch/arm/mach-omap2/usb-host.c
index 89ae298..771dc78 100644
--- a/arch/arm/mach-omap2/usb-host.c
+++ b/arch/arm/mach-omap2/usb-host.c
@@ -28,51 +28,28 @@
#include <mach/hardware.h>
#include <mach/irqs.h>
#include <plat/usb.h>
+#include <plat/omap_device.h>
#include "mux.h"
#ifdef CONFIG_MFD_OMAP_USB_HOST
-#define OMAP_USBHS_DEVICE "usbhs-omap"
-
-static struct resource usbhs_resources[] = {
- {
- .name = "uhh",
- .flags = IORESOURCE_MEM,
- },
- {
- .name = "tll",
- .flags = IORESOURCE_MEM,
- },
- {
- .name = "ehci",
- .flags = IORESOURCE_MEM,
- },
- {
- .name = "ehci-irq",
- .flags = IORESOURCE_IRQ,
- },
- {
- .name = "ohci",
- .flags = IORESOURCE_MEM,
- },
- {
- .name = "ohci-irq",
- .flags = IORESOURCE_IRQ,
- }
-};
-
-static struct platform_device usbhs_device = {
- .name = OMAP_USBHS_DEVICE,
- .id = 0,
- .num_resources = ARRAY_SIZE(usbhs_resources),
- .resource = usbhs_resources,
-};
+#define OMAP_USBHS_DEVICE "usbhs_omap"
+#define USBHS_UHH_HWMODNAME "usb_host_hs"
+#define USBHS_TLL_HWMODNAME "usb_tll_hs"
static struct usbhs_omap_platform_data usbhs_data;
static struct ehci_hcd_omap_platform_data ehci_data;
static struct ohci_hcd_omap_platform_data ohci_data;
+static struct omap_device_pm_latency omap_uhhtll_latency[] = {
+ {
+ .deactivate_func = omap_device_idle_hwmods,
+ .activate_func = omap_device_enable_hwmods,
+ .flags = OMAP_DEVICE_LATENCY_AUTO_ADJUST,
+ },
+};
+
/* MUX settings for EHCI pins */
/*
* setup_ehci_io_mux - initialize IO pad mux for USBHOST
@@ -508,7 +485,10 @@ static void setup_4430ohci_io_mux(const enum usbhs_omap_port_mode *port_mode)
void __init usbhs_init(const struct usbhs_omap_board_data *pdata)
{
- int i;
+ struct omap_hwmod *oh[2];
+ struct omap_device *od;
+ int bus_id = -1;
+ int i;
for (i = 0; i < OMAP3_HS_USB_PORTS; i++) {
usbhs_data.port_mode[i] = pdata->port_mode[i];
@@ -523,44 +503,34 @@ void __init usbhs_init(const struct usbhs_omap_board_data *pdata)
usbhs_data.ohci_data = &ohci_data;
if (cpu_is_omap34xx()) {
- usbhs_resources[0].start = OMAP34XX_UHH_CONFIG_BASE;
- usbhs_resources[0].end = OMAP34XX_UHH_CONFIG_BASE + SZ_1K - 1;
- usbhs_resources[1].start = OMAP34XX_USBTLL_BASE;
- usbhs_resources[1].end = OMAP34XX_USBTLL_BASE + SZ_4K - 1;
- usbhs_resources[2].start = OMAP34XX_EHCI_BASE;
- usbhs_resources[2].end = OMAP34XX_EHCI_BASE + SZ_1K - 1;
- usbhs_resources[3].start = INT_34XX_EHCI_IRQ;
- usbhs_resources[4].start = OMAP34XX_OHCI_BASE;
- usbhs_resources[4].end = OMAP34XX_OHCI_BASE + SZ_1K - 1;
- usbhs_resources[5].start = INT_34XX_OHCI_IRQ;
setup_ehci_io_mux(pdata->port_mode);
setup_ohci_io_mux(pdata->port_mode);
} else if (cpu_is_omap44xx()) {
- usbhs_resources[0].start = OMAP44XX_UHH_CONFIG_BASE;
- usbhs_resources[0].end = OMAP44XX_UHH_CONFIG_BASE + SZ_1K - 1;
- usbhs_resources[1].start = OMAP44XX_USBTLL_BASE;
- usbhs_resources[1].end = OMAP44XX_USBTLL_BASE + SZ_4K - 1;
- usbhs_resources[2].start = OMAP44XX_HSUSB_EHCI_BASE;
- usbhs_resources[2].end = OMAP44XX_HSUSB_EHCI_BASE + SZ_1K - 1;
- usbhs_resources[3].start = OMAP44XX_IRQ_EHCI;
- usbhs_resources[4].start = OMAP44XX_HSUSB_OHCI_BASE;
- usbhs_resources[4].end = OMAP44XX_HSUSB_OHCI_BASE + SZ_1K - 1;
- usbhs_resources[5].start = OMAP44XX_IRQ_OHCI;
setup_4430ehci_io_mux(pdata->port_mode);
setup_4430ohci_io_mux(pdata->port_mode);
}
- if (platform_device_add_data(&usbhs_device,
- &usbhs_data, sizeof(usbhs_data)) < 0) {
- printk(KERN_ERR "USBHS platform_device_add_data failed\n");
- goto init_end;
+ oh[0] = omap_hwmod_lookup(USBHS_UHH_HWMODNAME);
+ if (!oh[0]) {
+ pr_err("Could not look up %s\n", USBHS_UHH_HWMODNAME);
+ return;
}
- if (platform_device_register(&usbhs_device) < 0)
- printk(KERN_ERR "USBHS platform_device_register failed\n");
+ oh[1] = omap_hwmod_lookup(USBHS_TLL_HWMODNAME);
+ if (!oh[1]) {
+ pr_err("Could not look up %s\n", USBHS_TLL_HWMODNAME);
+ return;
+ }
-init_end:
- return;
+ od = omap_device_build_ss(OMAP_USBHS_DEVICE, bus_id, oh, 2,
+ (void *)&usbhs_data, sizeof(usbhs_data),
+ omap_uhhtll_latency,
+ ARRAY_SIZE(omap_uhhtll_latency), false);
+ if (IS_ERR(od)) {
+ pr_err("Could not build hwmod devices %s,%s\n",
+ USBHS_UHH_HWMODNAME, USBHS_TLL_HWMODNAME);
+ return;
+ }
}
#else
@@ -570,5 +540,3 @@ void __init usbhs_init(const struct usbhs_omap_board_data *pdata)
}
#endif
-
-
--
1.6.0.4
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 3/5 v12] arm: omap: usb: register hwmods of usbhs
@ 2011-09-30 5:41 Keshava Munegowda
2011-09-30 7:15 ` Paul Walmsley
0 siblings, 1 reply; 8+ messages in thread
From: Keshava Munegowda @ 2011-09-30 5:41 UTC (permalink / raw)
To: linux-usb, linux-omap, linux-kernel, balbi, khilman, b-cousson,
paul
Cc: Keshava Munegowda, gadiyar, sameo, parthab, tony, johnstul,
vishwanath.bs
The hwmod structure of usb_host_hs and usb_tll are
retrieved and registered with omap device
Signed-off-by: Keshava Munegowda <keshava_mgowda@ti.com>
Reviewed-by: Partha Basak <parthab@india.ti.com>
---
arch/arm/mach-omap2/usb-host.c | 100 ++++++++++++++--------------------------
1 files changed, 34 insertions(+), 66 deletions(-)
diff --git a/arch/arm/mach-omap2/usb-host.c b/arch/arm/mach-omap2/usb-host.c
index 89ae298..771dc78 100644
--- a/arch/arm/mach-omap2/usb-host.c
+++ b/arch/arm/mach-omap2/usb-host.c
@@ -28,51 +28,28 @@
#include <mach/hardware.h>
#include <mach/irqs.h>
#include <plat/usb.h>
+#include <plat/omap_device.h>
#include "mux.h"
#ifdef CONFIG_MFD_OMAP_USB_HOST
-#define OMAP_USBHS_DEVICE "usbhs-omap"
-
-static struct resource usbhs_resources[] = {
- {
- .name = "uhh",
- .flags = IORESOURCE_MEM,
- },
- {
- .name = "tll",
- .flags = IORESOURCE_MEM,
- },
- {
- .name = "ehci",
- .flags = IORESOURCE_MEM,
- },
- {
- .name = "ehci-irq",
- .flags = IORESOURCE_IRQ,
- },
- {
- .name = "ohci",
- .flags = IORESOURCE_MEM,
- },
- {
- .name = "ohci-irq",
- .flags = IORESOURCE_IRQ,
- }
-};
-
-static struct platform_device usbhs_device = {
- .name = OMAP_USBHS_DEVICE,
- .id = 0,
- .num_resources = ARRAY_SIZE(usbhs_resources),
- .resource = usbhs_resources,
-};
+#define OMAP_USBHS_DEVICE "usbhs_omap"
+#define USBHS_UHH_HWMODNAME "usb_host_hs"
+#define USBHS_TLL_HWMODNAME "usb_tll_hs"
static struct usbhs_omap_platform_data usbhs_data;
static struct ehci_hcd_omap_platform_data ehci_data;
static struct ohci_hcd_omap_platform_data ohci_data;
+static struct omap_device_pm_latency omap_uhhtll_latency[] = {
+ {
+ .deactivate_func = omap_device_idle_hwmods,
+ .activate_func = omap_device_enable_hwmods,
+ .flags = OMAP_DEVICE_LATENCY_AUTO_ADJUST,
+ },
+};
+
/* MUX settings for EHCI pins */
/*
* setup_ehci_io_mux - initialize IO pad mux for USBHOST
@@ -508,7 +485,10 @@ static void setup_4430ohci_io_mux(const enum usbhs_omap_port_mode *port_mode)
void __init usbhs_init(const struct usbhs_omap_board_data *pdata)
{
- int i;
+ struct omap_hwmod *oh[2];
+ struct omap_device *od;
+ int bus_id = -1;
+ int i;
for (i = 0; i < OMAP3_HS_USB_PORTS; i++) {
usbhs_data.port_mode[i] = pdata->port_mode[i];
@@ -523,44 +503,34 @@ void __init usbhs_init(const struct usbhs_omap_board_data *pdata)
usbhs_data.ohci_data = &ohci_data;
if (cpu_is_omap34xx()) {
- usbhs_resources[0].start = OMAP34XX_UHH_CONFIG_BASE;
- usbhs_resources[0].end = OMAP34XX_UHH_CONFIG_BASE + SZ_1K - 1;
- usbhs_resources[1].start = OMAP34XX_USBTLL_BASE;
- usbhs_resources[1].end = OMAP34XX_USBTLL_BASE + SZ_4K - 1;
- usbhs_resources[2].start = OMAP34XX_EHCI_BASE;
- usbhs_resources[2].end = OMAP34XX_EHCI_BASE + SZ_1K - 1;
- usbhs_resources[3].start = INT_34XX_EHCI_IRQ;
- usbhs_resources[4].start = OMAP34XX_OHCI_BASE;
- usbhs_resources[4].end = OMAP34XX_OHCI_BASE + SZ_1K - 1;
- usbhs_resources[5].start = INT_34XX_OHCI_IRQ;
setup_ehci_io_mux(pdata->port_mode);
setup_ohci_io_mux(pdata->port_mode);
} else if (cpu_is_omap44xx()) {
- usbhs_resources[0].start = OMAP44XX_UHH_CONFIG_BASE;
- usbhs_resources[0].end = OMAP44XX_UHH_CONFIG_BASE + SZ_1K - 1;
- usbhs_resources[1].start = OMAP44XX_USBTLL_BASE;
- usbhs_resources[1].end = OMAP44XX_USBTLL_BASE + SZ_4K - 1;
- usbhs_resources[2].start = OMAP44XX_HSUSB_EHCI_BASE;
- usbhs_resources[2].end = OMAP44XX_HSUSB_EHCI_BASE + SZ_1K - 1;
- usbhs_resources[3].start = OMAP44XX_IRQ_EHCI;
- usbhs_resources[4].start = OMAP44XX_HSUSB_OHCI_BASE;
- usbhs_resources[4].end = OMAP44XX_HSUSB_OHCI_BASE + SZ_1K - 1;
- usbhs_resources[5].start = OMAP44XX_IRQ_OHCI;
setup_4430ehci_io_mux(pdata->port_mode);
setup_4430ohci_io_mux(pdata->port_mode);
}
- if (platform_device_add_data(&usbhs_device,
- &usbhs_data, sizeof(usbhs_data)) < 0) {
- printk(KERN_ERR "USBHS platform_device_add_data failed\n");
- goto init_end;
+ oh[0] = omap_hwmod_lookup(USBHS_UHH_HWMODNAME);
+ if (!oh[0]) {
+ pr_err("Could not look up %s\n", USBHS_UHH_HWMODNAME);
+ return;
}
- if (platform_device_register(&usbhs_device) < 0)
- printk(KERN_ERR "USBHS platform_device_register failed\n");
+ oh[1] = omap_hwmod_lookup(USBHS_TLL_HWMODNAME);
+ if (!oh[1]) {
+ pr_err("Could not look up %s\n", USBHS_TLL_HWMODNAME);
+ return;
+ }
-init_end:
- return;
+ od = omap_device_build_ss(OMAP_USBHS_DEVICE, bus_id, oh, 2,
+ (void *)&usbhs_data, sizeof(usbhs_data),
+ omap_uhhtll_latency,
+ ARRAY_SIZE(omap_uhhtll_latency), false);
+ if (IS_ERR(od)) {
+ pr_err("Could not build hwmod devices %s,%s\n",
+ USBHS_UHH_HWMODNAME, USBHS_TLL_HWMODNAME);
+ return;
+ }
}
#else
@@ -570,5 +540,3 @@ void __init usbhs_init(const struct usbhs_omap_board_data *pdata)
}
#endif
-
-
--
1.6.0.4
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH 3/5 v12] arm: omap: usb: register hwmods of usbhs
2011-09-30 5:41 [PATCH 3/5 v12] arm: omap: usb: register hwmods of usbhs Keshava Munegowda
@ 2011-09-30 7:15 ` Paul Walmsley
2011-09-30 7:34 ` Felipe Balbi
0 siblings, 1 reply; 8+ messages in thread
From: Paul Walmsley @ 2011-09-30 7:15 UTC (permalink / raw)
To: Keshava Munegowda
Cc: linux-usb, linux-omap, linux-kernel, balbi, khilman, b-cousson,
gadiyar, sameo, parthab, tony, johnstul, vishwanath.bs
Hi
On Fri, 30 Sep 2011, Keshava Munegowda wrote:
> The hwmod structure of usb_host_hs and usb_tll are
> retrieved and registered with omap device
>
> Signed-off-by: Keshava Munegowda <keshava_mgowda@ti.com>
> Reviewed-by: Partha Basak <parthab@india.ti.com>
> ---
> arch/arm/mach-omap2/usb-host.c | 100 ++++++++++++++--------------------------
> 1 files changed, 34 insertions(+), 66 deletions(-)
>
> diff --git a/arch/arm/mach-omap2/usb-host.c b/arch/arm/mach-omap2/usb-host.c
> index 89ae298..771dc78 100644
> --- a/arch/arm/mach-omap2/usb-host.c
> +++ b/arch/arm/mach-omap2/usb-host.c
> @@ -28,51 +28,28 @@
> + oh[0] = omap_hwmod_lookup(USBHS_UHH_HWMODNAME);
> + if (!oh[0]) {
> + pr_err("Could not look up %s\n", USBHS_UHH_HWMODNAME);
> + return;
> }
>
> - if (platform_device_register(&usbhs_device) < 0)
> - printk(KERN_ERR "USBHS platform_device_register failed\n");
> + oh[1] = omap_hwmod_lookup(USBHS_TLL_HWMODNAME);
> + if (!oh[1]) {
> + pr_err("Could not look up %s\n", USBHS_TLL_HWMODNAME);
> + return;
> + }
>
> -init_end:
> - return;
> + od = omap_device_build_ss(OMAP_USBHS_DEVICE, bus_id, oh, 2,
> + (void *)&usbhs_data, sizeof(usbhs_data),
> + omap_uhhtll_latency,
> + ARRAY_SIZE(omap_uhhtll_latency), false);
Usually there's something wrong with omap_devices that contain
multiple hwmods. Is there some reason why there isn't a separate driver
for the TLL? Judging by a brief look at drivers/mfd/omap_usb_host.c, the
TLL handling looks logically distinct?
- Paul
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 3/5 v12] arm: omap: usb: register hwmods of usbhs
2011-09-30 7:15 ` Paul Walmsley
@ 2011-09-30 7:34 ` Felipe Balbi
2011-09-30 9:15 ` Munegowda, Keshava
0 siblings, 1 reply; 8+ messages in thread
From: Felipe Balbi @ 2011-09-30 7:34 UTC (permalink / raw)
To: Paul Walmsley
Cc: Keshava Munegowda, linux-usb, linux-omap, linux-kernel, balbi,
khilman, b-cousson, gadiyar, sameo, parthab, tony, johnstul,
vishwanath.bs
[-- Attachment #1: Type: text/plain, Size: 1867 bytes --]
Hi,
On Fri, Sep 30, 2011 at 01:15:55AM -0600, Paul Walmsley wrote:
> > The hwmod structure of usb_host_hs and usb_tll are
> > retrieved and registered with omap device
> >
> > Signed-off-by: Keshava Munegowda <keshava_mgowda@ti.com>
> > Reviewed-by: Partha Basak <parthab@india.ti.com>
> > ---
> > arch/arm/mach-omap2/usb-host.c | 100 ++++++++++++++--------------------------
> > 1 files changed, 34 insertions(+), 66 deletions(-)
> >
> > diff --git a/arch/arm/mach-omap2/usb-host.c b/arch/arm/mach-omap2/usb-host.c
> > index 89ae298..771dc78 100644
> > --- a/arch/arm/mach-omap2/usb-host.c
> > +++ b/arch/arm/mach-omap2/usb-host.c
> > @@ -28,51 +28,28 @@
>
> > + oh[0] = omap_hwmod_lookup(USBHS_UHH_HWMODNAME);
> > + if (!oh[0]) {
> > + pr_err("Could not look up %s\n", USBHS_UHH_HWMODNAME);
> > + return;
> > }
> >
> > - if (platform_device_register(&usbhs_device) < 0)
> > - printk(KERN_ERR "USBHS platform_device_register failed\n");
> > + oh[1] = omap_hwmod_lookup(USBHS_TLL_HWMODNAME);
> > + if (!oh[1]) {
> > + pr_err("Could not look up %s\n", USBHS_TLL_HWMODNAME);
> > + return;
> > + }
> >
> > -init_end:
> > - return;
> > + od = omap_device_build_ss(OMAP_USBHS_DEVICE, bus_id, oh, 2,
> > + (void *)&usbhs_data, sizeof(usbhs_data),
> > + omap_uhhtll_latency,
> > + ARRAY_SIZE(omap_uhhtll_latency), false);
>
> Usually there's something wrong with omap_devices that contain
> multiple hwmods. Is there some reason why there isn't a separate driver
> for the TLL? Judging by a brief look at drivers/mfd/omap_usb_host.c, the
> TLL handling looks logically distinct?
Yes, I have the same feeling. To my understanding, USB Host Subsystem on
OMAP is composed of the Transceiver-less link (TLL) and USB Host (UHH).
Aparently, they could be handled by separate drivers.
--
balbi
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 490 bytes --]
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 3/5 v12] arm: omap: usb: register hwmods of usbhs
2011-09-30 7:34 ` Felipe Balbi
@ 2011-09-30 9:15 ` Munegowda, Keshava
2011-09-30 9:19 ` Felipe Balbi
0 siblings, 1 reply; 8+ messages in thread
From: Munegowda, Keshava @ 2011-09-30 9:15 UTC (permalink / raw)
To: balbi
Cc: Paul Walmsley, linux-usb, linux-omap, linux-kernel, khilman,
b-cousson, gadiyar, sameo, parthab, tony, johnstul, vishwanath.bs
On Fri, Sep 30, 2011 at 1:04 PM, Felipe Balbi <balbi@ti.com> wrote:
> Hi,
>
> On Fri, Sep 30, 2011 at 01:15:55AM -0600, Paul Walmsley wrote:
>> > The hwmod structure of usb_host_hs and usb_tll are
>> > retrieved and registered with omap device
>> >
>> > Signed-off-by: Keshava Munegowda <keshava_mgowda@ti.com>
>> > Reviewed-by: Partha Basak <parthab@india.ti.com>
>> > ---
>> > arch/arm/mach-omap2/usb-host.c | 100 ++++++++++++++--------------------------
>> > 1 files changed, 34 insertions(+), 66 deletions(-)
>> >
>> > diff --git a/arch/arm/mach-omap2/usb-host.c b/arch/arm/mach-omap2/usb-host.c
>> > index 89ae298..771dc78 100644
>> > --- a/arch/arm/mach-omap2/usb-host.c
>> > +++ b/arch/arm/mach-omap2/usb-host.c
>> > @@ -28,51 +28,28 @@
>>
>> > + oh[0] = omap_hwmod_lookup(USBHS_UHH_HWMODNAME);
>> > + if (!oh[0]) {
>> > + pr_err("Could not look up %s\n", USBHS_UHH_HWMODNAME);
>> > + return;
>> > }
>> >
>> > - if (platform_device_register(&usbhs_device) < 0)
>> > - printk(KERN_ERR "USBHS platform_device_register failed\n");
>> > + oh[1] = omap_hwmod_lookup(USBHS_TLL_HWMODNAME);
>> > + if (!oh[1]) {
>> > + pr_err("Could not look up %s\n", USBHS_TLL_HWMODNAME);
>> > + return;
>> > + }
>> >
>> > -init_end:
>> > - return;
>> > + od = omap_device_build_ss(OMAP_USBHS_DEVICE, bus_id, oh, 2,
>> > + (void *)&usbhs_data, sizeof(usbhs_data),
>> > + omap_uhhtll_latency,
>> > + ARRAY_SIZE(omap_uhhtll_latency), false);
>>
>> Usually there's something wrong with omap_devices that contain
>> multiple hwmods. Is there some reason why there isn't a separate driver
>> for the TLL? Judging by a brief look at drivers/mfd/omap_usb_host.c, the
>> TLL handling looks logically distinct?
>
> Yes, I have the same feeling. To my understanding, USB Host Subsystem on
> OMAP is composed of the Transceiver-less link (TLL) and USB Host (UHH).
> Aparently, they could be handled by separate drivers.
>
> --
> balbi
yes, it can be as two separate drivers for uhh and tll; But i don't
think driver can be used effectively.
Now ehci and ohci gets the clocks , config reg and port settings
through usb host which is sufficient.
If you make them as two different drivers; then ehci and ohci has to
interact with both the drivers separately.
which will be an unnecessary complications. I feel not divided this
driver into two
regards
keshava
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 3/5 v12] arm: omap: usb: register hwmods of usbhs
2011-09-30 9:15 ` Munegowda, Keshava
@ 2011-09-30 9:19 ` Felipe Balbi
2011-09-30 9:26 ` Munegowda, Keshava
0 siblings, 1 reply; 8+ messages in thread
From: Felipe Balbi @ 2011-09-30 9:19 UTC (permalink / raw)
To: Munegowda, Keshava
Cc: balbi, Paul Walmsley, linux-usb, linux-omap, linux-kernel,
khilman, b-cousson, gadiyar, sameo, parthab, tony, johnstul,
vishwanath.bs
[-- Attachment #1: Type: text/plain, Size: 2903 bytes --]
Hi,
On Fri, Sep 30, 2011 at 02:45:32PM +0530, Munegowda, Keshava wrote:
> On Fri, Sep 30, 2011 at 1:04 PM, Felipe Balbi <balbi@ti.com> wrote:
> > Hi,
> >
> > On Fri, Sep 30, 2011 at 01:15:55AM -0600, Paul Walmsley wrote:
> >> > The hwmod structure of usb_host_hs and usb_tll are
> >> > retrieved and registered with omap device
> >> >
> >> > Signed-off-by: Keshava Munegowda <keshava_mgowda@ti.com>
> >> > Reviewed-by: Partha Basak <parthab@india.ti.com>
> >> > ---
> >> > arch/arm/mach-omap2/usb-host.c | 100 ++++++++++++++--------------------------
> >> > 1 files changed, 34 insertions(+), 66 deletions(-)
> >> >
> >> > diff --git a/arch/arm/mach-omap2/usb-host.c b/arch/arm/mach-omap2/usb-host.c
> >> > index 89ae298..771dc78 100644
> >> > --- a/arch/arm/mach-omap2/usb-host.c
> >> > +++ b/arch/arm/mach-omap2/usb-host.c
> >> > @@ -28,51 +28,28 @@
> >>
> >> > + oh[0] = omap_hwmod_lookup(USBHS_UHH_HWMODNAME);
> >> > + if (!oh[0]) {
> >> > + pr_err("Could not look up %s\n", USBHS_UHH_HWMODNAME);
> >> > + return;
> >> > }
> >> >
> >> > - if (platform_device_register(&usbhs_device) < 0)
> >> > - printk(KERN_ERR "USBHS platform_device_register failed\n");
> >> > + oh[1] = omap_hwmod_lookup(USBHS_TLL_HWMODNAME);
> >> > + if (!oh[1]) {
> >> > + pr_err("Could not look up %s\n", USBHS_TLL_HWMODNAME);
> >> > + return;
> >> > + }
> >> >
> >> > -init_end:
> >> > - return;
> >> > + od = omap_device_build_ss(OMAP_USBHS_DEVICE, bus_id, oh, 2,
> >> > + (void *)&usbhs_data, sizeof(usbhs_data),
> >> > + omap_uhhtll_latency,
> >> > + ARRAY_SIZE(omap_uhhtll_latency), false);
> >>
> >> Usually there's something wrong with omap_devices that contain
> >> multiple hwmods. Is there some reason why there isn't a separate driver
> >> for the TLL? Judging by a brief look at drivers/mfd/omap_usb_host.c, the
> >> TLL handling looks logically distinct?
> >
> > Yes, I have the same feeling. To my understanding, USB Host Subsystem on
> > OMAP is composed of the Transceiver-less link (TLL) and USB Host (UHH).
> > Aparently, they could be handled by separate drivers.
> >
> > --
> > balbi
>
> yes, it can be as two separate drivers for uhh and tll; But i don't
> think driver can be used effectively.
> Now ehci and ohci gets the clocks , config reg and port settings
> through usb host which is sufficient.
> If you make them as two different drivers; then ehci and ohci has to
> interact with both the drivers separately.
> which will be an unnecessary complications. I feel not divided this
> driver into two
Come again, EHCI/OHCI need clocks from UHH and TLL ?? If that's the
case, then there's really no easy way to handle this as a device can
have only one parent.
--
balbi
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 490 bytes --]
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 3/5 v12] arm: omap: usb: register hwmods of usbhs
2011-09-30 9:19 ` Felipe Balbi
@ 2011-09-30 9:26 ` Munegowda, Keshava
2011-09-30 9:32 ` Felipe Balbi
0 siblings, 1 reply; 8+ messages in thread
From: Munegowda, Keshava @ 2011-09-30 9:26 UTC (permalink / raw)
To: balbi
Cc: Paul Walmsley, linux-usb, linux-omap, linux-kernel, khilman,
b-cousson, gadiyar, sameo, parthab, tony, johnstul, vishwanath.bs
On Fri, Sep 30, 2011 at 2:49 PM, Felipe Balbi <balbi@ti.com> wrote:
> Hi,
>
> On Fri, Sep 30, 2011 at 02:45:32PM +0530, Munegowda, Keshava wrote:
>> On Fri, Sep 30, 2011 at 1:04 PM, Felipe Balbi <balbi@ti.com> wrote:
>> > Hi,
>> >
>> > On Fri, Sep 30, 2011 at 01:15:55AM -0600, Paul Walmsley wrote:
>> >> > The hwmod structure of usb_host_hs and usb_tll are
>> >> > retrieved and registered with omap device
>> >> >
>> >> > Signed-off-by: Keshava Munegowda <keshava_mgowda@ti.com>
>> >> > Reviewed-by: Partha Basak <parthab@india.ti.com>
>> >> > ---
>> >> > arch/arm/mach-omap2/usb-host.c | 100 ++++++++++++++--------------------------
>> >> > 1 files changed, 34 insertions(+), 66 deletions(-)
>> >> >
>> >> > diff --git a/arch/arm/mach-omap2/usb-host.c b/arch/arm/mach-omap2/usb-host.c
>> >> > index 89ae298..771dc78 100644
>> >> > --- a/arch/arm/mach-omap2/usb-host.c
>> >> > +++ b/arch/arm/mach-omap2/usb-host.c
>> >> > @@ -28,51 +28,28 @@
>> >>
>> >> > + oh[0] = omap_hwmod_lookup(USBHS_UHH_HWMODNAME);
>> >> > + if (!oh[0]) {
>> >> > + pr_err("Could not look up %s\n", USBHS_UHH_HWMODNAME);
>> >> > + return;
>> >> > }
>> >> >
>> >> > - if (platform_device_register(&usbhs_device) < 0)
>> >> > - printk(KERN_ERR "USBHS platform_device_register failed\n");
>> >> > + oh[1] = omap_hwmod_lookup(USBHS_TLL_HWMODNAME);
>> >> > + if (!oh[1]) {
>> >> > + pr_err("Could not look up %s\n", USBHS_TLL_HWMODNAME);
>> >> > + return;
>> >> > + }
>> >> >
>> >> > -init_end:
>> >> > - return;
>> >> > + od = omap_device_build_ss(OMAP_USBHS_DEVICE, bus_id, oh, 2,
>> >> > + (void *)&usbhs_data, sizeof(usbhs_data),
>> >> > + omap_uhhtll_latency,
>> >> > + ARRAY_SIZE(omap_uhhtll_latency), false);
>> >>
>> >> Usually there's something wrong with omap_devices that contain
>> >> multiple hwmods. Is there some reason why there isn't a separate driver
>> >> for the TLL? Judging by a brief look at drivers/mfd/omap_usb_host.c, the
>> >> TLL handling looks logically distinct?
>> >
>> > Yes, I have the same feeling. To my understanding, USB Host Subsystem on
>> > OMAP is composed of the Transceiver-less link (TLL) and USB Host (UHH).
>> > Aparently, they could be handled by separate drivers.
>> >
>> > --
>> > balbi
>>
>> yes, it can be as two separate drivers for uhh and tll; But i don't
>> think driver can be used effectively.
>> Now ehci and ohci gets the clocks , config reg and port settings
>> through usb host which is sufficient.
>> If you make them as two different drivers; then ehci and ohci has to
>> interact with both the drivers separately.
>> which will be an unnecessary complications. I feel not divided this
>> driver into two
>
> Come again, EHCI/OHCI need clocks from UHH and TLL ?? If that's the
> case, then there's really no easy way to handle this as a device can
> have only one parent.
yes, if you are using ehci phy mode ( port modes of UHH_HOSTCONFIG register)
then uhh functional ( omap3: interface clocks too) is sufficient;
if you are using ehci in tll mode , then you need tll functional clock too.
regards
keshava
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 3/5 v12] arm: omap: usb: register hwmods of usbhs
2011-09-30 9:26 ` Munegowda, Keshava
@ 2011-09-30 9:32 ` Felipe Balbi
0 siblings, 0 replies; 8+ messages in thread
From: Felipe Balbi @ 2011-09-30 9:32 UTC (permalink / raw)
To: Munegowda, Keshava
Cc: balbi, Paul Walmsley, linux-usb, linux-omap, linux-kernel,
khilman, b-cousson, gadiyar, sameo, parthab, tony, johnstul,
vishwanath.bs
[-- Attachment #1: Type: text/plain, Size: 2255 bytes --]
Hi,
On Fri, Sep 30, 2011 at 02:56:40PM +0530, Munegowda, Keshava wrote:
> >> >> Usually there's something wrong with omap_devices that contain
> >> >> multiple hwmods. Is there some reason why there isn't a separate driver
> >> >> for the TLL? Judging by a brief look at drivers/mfd/omap_usb_host.c, the
> >> >> TLL handling looks logically distinct?
> >> >
> >> > Yes, I have the same feeling. To my understanding, USB Host Subsystem on
> >> > OMAP is composed of the Transceiver-less link (TLL) and USB Host (UHH).
> >> > Aparently, they could be handled by separate drivers.
> >> >
> >> > --
> >> > balbi
> >>
> >> yes, it can be as two separate drivers for uhh and tll; But i don't
> >> think driver can be used effectively.
> >> Now ehci and ohci gets the clocks , config reg and port settings
> >> through usb host which is sufficient.
> >> If you make them as two different drivers; then ehci and ohci has to
> >> interact with both the drivers separately.
> >> which will be an unnecessary complications. I feel not divided this
> >> driver into two
> >
> > Come again, EHCI/OHCI need clocks from UHH and TLL ?? If that's the
> > case, then there's really no easy way to handle this as a device can
> > have only one parent.
>
> yes, if you are using ehci phy mode ( port modes of UHH_HOSTCONFIG register)
> then uhh functional ( omap3: interface clocks too) is sufficient;
> if you are using ehci in tll mode , then you need tll functional clock too.
But those clocks are fed into UHH and TLL respectively, not EHCI/OHCI,
right ? IOW, EHCI/OHCI only need those clocks to be stable in order for
it to work.
I'm trying to think of a way to decouple that but nothing comes to mind
right now... Ideally, calling pm_runtime_get_sync() on EHCI/OHCI would
make all clocks enabled and the only way I see for that to happen is to
make TLL parent of UHH which is parent of EHCI/OHCI, but I'm not sure
that makes a lot of sense.
Paul, do you have any tip which we could use ? What we need is to be
able to call pm_runtime_get_sync() or ehci-omap.c and that should enable
UHH clocks and if (port->mode == TLL) enable TLL clocks.
We still want to split UHH and TLL into separate drivers.
--
balbi
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 490 bytes --]
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2011-09-30 9:32 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-09-30 5:41 [PATCH 3/5 v12] arm: omap: usb: register hwmods of usbhs Keshava Munegowda
2011-09-30 7:15 ` Paul Walmsley
2011-09-30 7:34 ` Felipe Balbi
2011-09-30 9:15 ` Munegowda, Keshava
2011-09-30 9:19 ` Felipe Balbi
2011-09-30 9:26 ` Munegowda, Keshava
2011-09-30 9:32 ` Felipe Balbi
-- strict thread matches above, loose matches on Subject: below --
2011-09-29 14:24 [PATCH 0/5 v12] mfd: omap: usb: Runtime PM support for EHCI and OHCI drivers Keshava Munegowda
2011-09-29 14:24 ` [PATCH 1/5 v12] arm: omap: usb: ehci and ohci hwmod structures for omap4 Keshava Munegowda
2011-09-29 14:24 ` [PATCH 2/5 v12] arm: omap: usb: ehci and ohci hwmod structures for omap3 Keshava Munegowda
2011-09-29 14:24 ` [PATCH 3/5 v12] arm: omap: usb: register hwmods of usbhs Keshava Munegowda
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox