* [PATCH v7 00/22] OMAP USB Host cleanup
@ 2013-01-17 11:30 Roger Quadros
2013-01-17 11:30 ` [PATCH v7 01/22] mfd: omap-usb-host: Consolidate OMAP USB-HS platform data Roger Quadros
` (22 more replies)
0 siblings, 23 replies; 51+ messages in thread
From: Roger Quadros @ 2013-01-17 11:30 UTC (permalink / raw)
To: linux-arm-kernel
Hi,
This patchset addresses the following
- Consolidate USB Host platform data.
- 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).
v7:
- Updated patch 4 to not hold a spinlock when using clk_get().
- Updated patches 3 and 11 to return -EADDRNOTAVAIL on failure of
demv_request_and_ioremap().
v6:
- Added USB Host platform data consolidation patch as the first patch.
based on request from Tony.
- Rebased on v3.8-rc3.
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
The following changes since commit 9931faca02c604c22335f5a935a501bb2ace6e20:
Linux 3.8-rc3 (2013-01-09 18:59:55 -0800)
are available in the git repository at:
git at github.com:rogerq/linux.git linux-usbhost12-part
Roger Quadros (22):
mfd: omap-usb-host: Consolidate OMAP USB-HS 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 missing platform data checks in
suspend/resume
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/board-3430sdp.c | 2 +-
arch/arm/mach-omap2/board-3630sdp.c | 2 +-
arch/arm/mach-omap2/board-am3517crane.c | 2 +-
arch/arm/mach-omap2/board-am3517evm.c | 2 +-
arch/arm/mach-omap2/board-cm-t35.c | 2 +-
arch/arm/mach-omap2/board-cm-t3517.c | 2 +-
arch/arm/mach-omap2/board-devkit8000.c | 2 +-
arch/arm/mach-omap2/board-igep0020.c | 4 +-
arch/arm/mach-omap2/board-omap3beagle.c | 2 +-
arch/arm/mach-omap2/board-omap3evm.c | 2 +-
arch/arm/mach-omap2/board-omap3pandora.c | 2 +-
arch/arm/mach-omap2/board-omap3stalker.c | 2 +-
arch/arm/mach-omap2/board-omap3touchbook.c | 2 +-
arch/arm/mach-omap2/board-omap4panda.c | 2 +-
arch/arm/mach-omap2/board-overo.c | 2 +-
arch/arm/mach-omap2/board-zoom.c | 2 +-
arch/arm/mach-omap2/cclock3xxx_data.c | 11 -
arch/arm/mach-omap2/cclock44xx_data.c | 7 -
arch/arm/mach-omap2/usb-host.c | 29 +--
arch/arm/mach-omap2/usb.h | 20 +-
drivers/mfd/omap-usb-host.c | 543 ++++++++++++++++------------
drivers/mfd/omap-usb-tll.c | 245 +++++++------
drivers/usb/host/ehci-omap.c | 14 +-
include/linux/platform_data/usb-omap.h | 24 +-
24 files changed, 485 insertions(+), 442 deletions(-)
--
1.7.4.1
^ permalink raw reply [flat|nested] 51+ messages in thread
* [PATCH v7 01/22] mfd: omap-usb-host: Consolidate OMAP USB-HS platform data
2013-01-17 11:30 [PATCH v7 00/22] OMAP USB Host cleanup Roger Quadros
@ 2013-01-17 11:30 ` Roger Quadros
2013-01-17 15:16 ` Alan Stern
2013-01-17 11:30 ` [PATCH v7 02/22] mfd: omap-usb-tll: Fix channel count detection Roger Quadros
` (21 subsequent siblings)
22 siblings, 1 reply; 51+ messages in thread
From: Roger Quadros @ 2013-01-17 11:30 UTC (permalink / raw)
To: linux-arm-kernel
Let's have a single platform data structure for the OMAP's High-Speed
USB host subsystem instead of having 3 separate ones i.e. one for
board data, one for USB Host (UHH) module and one for USB-TLL module.
This makes the code much simpler and avoids creating multiple copies of
platform data.
CC: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Roger Quadros <rogerq@ti.com>
---
arch/arm/mach-omap2/board-3430sdp.c | 2 +-
arch/arm/mach-omap2/board-3630sdp.c | 2 +-
arch/arm/mach-omap2/board-am3517crane.c | 2 +-
arch/arm/mach-omap2/board-am3517evm.c | 2 +-
arch/arm/mach-omap2/board-cm-t35.c | 2 +-
arch/arm/mach-omap2/board-cm-t3517.c | 2 +-
arch/arm/mach-omap2/board-devkit8000.c | 2 +-
arch/arm/mach-omap2/board-igep0020.c | 4 +-
arch/arm/mach-omap2/board-omap3beagle.c | 2 +-
arch/arm/mach-omap2/board-omap3evm.c | 2 +-
arch/arm/mach-omap2/board-omap3pandora.c | 2 +-
arch/arm/mach-omap2/board-omap3stalker.c | 2 +-
arch/arm/mach-omap2/board-omap3touchbook.c | 2 +-
arch/arm/mach-omap2/board-omap4panda.c | 2 +-
arch/arm/mach-omap2/board-overo.c | 2 +-
arch/arm/mach-omap2/board-zoom.c | 2 +-
arch/arm/mach-omap2/usb-host.c | 29 ++-----------
arch/arm/mach-omap2/usb.h | 20 +--------
drivers/mfd/omap-usb-host.c | 63 +++++++++++----------------
drivers/mfd/omap-usb-tll.c | 11 ++---
drivers/usb/host/ehci-omap.c | 8 ++--
include/linux/platform_data/usb-omap.h | 23 ++--------
22 files changed, 62 insertions(+), 126 deletions(-)
diff --git a/arch/arm/mach-omap2/board-3430sdp.c b/arch/arm/mach-omap2/board-3430sdp.c
index bb73afc..46147c8 100644
--- a/arch/arm/mach-omap2/board-3430sdp.c
+++ b/arch/arm/mach-omap2/board-3430sdp.c
@@ -424,7 +424,7 @@ static void enable_board_wakeup_source(void)
OMAP_WAKEUP_EN | OMAP_PIN_INPUT_PULLUP);
}
-static const struct usbhs_omap_board_data usbhs_bdata __initconst = {
+static struct usbhs_omap_platform_data usbhs_bdata __initdata = {
.port_mode[0] = OMAP_EHCI_PORT_MODE_PHY,
.port_mode[1] = OMAP_EHCI_PORT_MODE_PHY,
diff --git a/arch/arm/mach-omap2/board-3630sdp.c b/arch/arm/mach-omap2/board-3630sdp.c
index 050aaa7..78b1724 100644
--- a/arch/arm/mach-omap2/board-3630sdp.c
+++ b/arch/arm/mach-omap2/board-3630sdp.c
@@ -53,7 +53,7 @@ static void enable_board_wakeup_source(void)
OMAP_WAKEUP_EN | OMAP_PIN_INPUT_PULLUP);
}
-static const struct usbhs_omap_board_data usbhs_bdata __initconst = {
+static struct usbhs_omap_platform_data usbhs_bdata __initdata = {
.port_mode[0] = OMAP_EHCI_PORT_MODE_PHY,
.port_mode[1] = OMAP_EHCI_PORT_MODE_PHY,
diff --git a/arch/arm/mach-omap2/board-am3517crane.c b/arch/arm/mach-omap2/board-am3517crane.c
index 51b96a1..26f1916 100644
--- a/arch/arm/mach-omap2/board-am3517crane.c
+++ b/arch/arm/mach-omap2/board-am3517crane.c
@@ -40,7 +40,7 @@ static struct omap_board_mux board_mux[] __initdata = {
};
#endif
-static struct usbhs_omap_board_data usbhs_bdata __initdata = {
+static struct usbhs_omap_platform_data usbhs_bdata __initdata = {
.port_mode[0] = OMAP_EHCI_PORT_MODE_PHY,
.port_mode[1] = OMAP_USBHS_PORT_MODE_UNUSED,
.port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED,
diff --git a/arch/arm/mach-omap2/board-am3517evm.c b/arch/arm/mach-omap2/board-am3517evm.c
index f81a303..c76725d 100644
--- a/arch/arm/mach-omap2/board-am3517evm.c
+++ b/arch/arm/mach-omap2/board-am3517evm.c
@@ -274,7 +274,7 @@ static __init void am3517_evm_mcbsp1_init(void)
omap_ctrl_writel(devconf0, OMAP2_CONTROL_DEVCONF0);
}
-static const struct usbhs_omap_board_data usbhs_bdata __initconst = {
+static struct usbhs_omap_platform_data usbhs_bdata __initdata = {
.port_mode[0] = OMAP_EHCI_PORT_MODE_PHY,
#if defined(CONFIG_PANEL_SHARP_LQ043T1DG01) || \
defined(CONFIG_PANEL_SHARP_LQ043T1DG01_MODULE)
diff --git a/arch/arm/mach-omap2/board-cm-t35.c b/arch/arm/mach-omap2/board-cm-t35.c
index b3102c2..cdf1d6e 100644
--- a/arch/arm/mach-omap2/board-cm-t35.c
+++ b/arch/arm/mach-omap2/board-cm-t35.c
@@ -418,7 +418,7 @@ static struct omap2_hsmmc_info mmc[] = {
{} /* Terminator */
};
-static struct usbhs_omap_board_data usbhs_bdata __initdata = {
+static struct usbhs_omap_platform_data usbhs_bdata __initdata = {
.port_mode[0] = OMAP_EHCI_PORT_MODE_PHY,
.port_mode[1] = OMAP_EHCI_PORT_MODE_PHY,
.port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED,
diff --git a/arch/arm/mach-omap2/board-cm-t3517.c b/arch/arm/mach-omap2/board-cm-t3517.c
index ebbc2ad..cfa9098 100644
--- a/arch/arm/mach-omap2/board-cm-t3517.c
+++ b/arch/arm/mach-omap2/board-cm-t3517.c
@@ -166,7 +166,7 @@ static inline void cm_t3517_init_rtc(void) {}
#define HSUSB2_RESET_GPIO (147)
#define USB_HUB_RESET_GPIO (152)
-static struct usbhs_omap_board_data cm_t3517_ehci_pdata __initdata = {
+static struct usbhs_omap_platform_data cm_t3517_ehci_pdata __initdata = {
.port_mode[0] = OMAP_EHCI_PORT_MODE_PHY,
.port_mode[1] = OMAP_EHCI_PORT_MODE_PHY,
.port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED,
diff --git a/arch/arm/mach-omap2/board-devkit8000.c b/arch/arm/mach-omap2/board-devkit8000.c
index 12865af..051ec0d 100644
--- a/arch/arm/mach-omap2/board-devkit8000.c
+++ b/arch/arm/mach-omap2/board-devkit8000.c
@@ -435,7 +435,7 @@ static struct platform_device *devkit8000_devices[] __initdata = {
&omap_dm9000_dev,
};
-static const struct usbhs_omap_board_data usbhs_bdata __initconst = {
+static struct usbhs_omap_platform_data usbhs_bdata __initdata = {
.port_mode[0] = OMAP_EHCI_PORT_MODE_PHY,
.port_mode[1] = OMAP_USBHS_PORT_MODE_UNUSED,
diff --git a/arch/arm/mach-omap2/board-igep0020.c b/arch/arm/mach-omap2/board-igep0020.c
index 0f24cb8..cfba790 100644
--- a/arch/arm/mach-omap2/board-igep0020.c
+++ b/arch/arm/mach-omap2/board-igep0020.c
@@ -526,7 +526,7 @@ static void __init igep_i2c_init(void)
omap3_pmic_init("twl4030", &igep_twldata);
}
-static const struct usbhs_omap_board_data igep2_usbhs_bdata __initconst = {
+static struct usbhs_omap_platform_data igep2_usbhs_bdata __initdata = {
.port_mode[0] = OMAP_EHCI_PORT_MODE_PHY,
.port_mode[1] = OMAP_USBHS_PORT_MODE_UNUSED,
.port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED,
@@ -537,7 +537,7 @@ static const struct usbhs_omap_board_data igep2_usbhs_bdata __initconst = {
.reset_gpio_port[2] = -EINVAL,
};
-static const struct usbhs_omap_board_data igep3_usbhs_bdata __initconst = {
+static struct usbhs_omap_platform_data igep3_usbhs_bdata __initdata = {
.port_mode[0] = OMAP_USBHS_PORT_MODE_UNUSED,
.port_mode[1] = OMAP_EHCI_PORT_MODE_PHY,
.port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED,
diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
index 22c483d..1cb114e 100644
--- a/arch/arm/mach-omap2/board-omap3beagle.c
+++ b/arch/arm/mach-omap2/board-omap3beagle.c
@@ -430,7 +430,7 @@ static struct platform_device *omap3_beagle_devices[] __initdata = {
&madc_hwmon,
};
-static const struct usbhs_omap_board_data usbhs_bdata __initconst = {
+static struct usbhs_omap_platform_data usbhs_bdata __initdata = {
.port_mode[0] = OMAP_USBHS_PORT_MODE_UNUSED,
.port_mode[1] = OMAP_EHCI_PORT_MODE_PHY,
diff --git a/arch/arm/mach-omap2/board-omap3evm.c b/arch/arm/mach-omap2/board-omap3evm.c
index 3985f35..7bdc8a4 100644
--- a/arch/arm/mach-omap2/board-omap3evm.c
+++ b/arch/arm/mach-omap2/board-omap3evm.c
@@ -538,7 +538,7 @@ static int __init omap3_evm_i2c_init(void)
return 0;
}
-static struct usbhs_omap_board_data usbhs_bdata __initdata = {
+static struct usbhs_omap_platform_data usbhs_bdata __initdata = {
.port_mode[0] = OMAP_USBHS_PORT_MODE_UNUSED,
.port_mode[1] = OMAP_EHCI_PORT_MODE_PHY,
diff --git a/arch/arm/mach-omap2/board-omap3pandora.c b/arch/arm/mach-omap2/board-omap3pandora.c
index a53a668..145a6f8 100644
--- a/arch/arm/mach-omap2/board-omap3pandora.c
+++ b/arch/arm/mach-omap2/board-omap3pandora.c
@@ -567,7 +567,7 @@ static struct platform_device *omap3pandora_devices[] __initdata = {
&pandora_backlight,
};
-static const struct usbhs_omap_board_data usbhs_bdata __initconst = {
+static struct usbhs_omap_platform_data usbhs_bdata __initdata = {
.port_mode[0] = OMAP_USBHS_PORT_MODE_UNUSED,
.port_mode[1] = OMAP_EHCI_PORT_MODE_PHY,
diff --git a/arch/arm/mach-omap2/board-omap3stalker.c b/arch/arm/mach-omap2/board-omap3stalker.c
index 53a6cbc..278ae95 100644
--- a/arch/arm/mach-omap2/board-omap3stalker.c
+++ b/arch/arm/mach-omap2/board-omap3stalker.c
@@ -361,7 +361,7 @@ static struct platform_device *omap3_stalker_devices[] __initdata = {
&keys_gpio,
};
-static struct usbhs_omap_board_data usbhs_bdata __initconst = {
+static struct usbhs_omap_platform_data usbhs_bdata __initdata = {
.port_mode[0] = OMAP_USBHS_PORT_MODE_UNUSED,
.port_mode[1] = OMAP_EHCI_PORT_MODE_PHY,
.port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED,
diff --git a/arch/arm/mach-omap2/board-omap3touchbook.c b/arch/arm/mach-omap2/board-omap3touchbook.c
index 263cb9c..65a285f 100644
--- a/arch/arm/mach-omap2/board-omap3touchbook.c
+++ b/arch/arm/mach-omap2/board-omap3touchbook.c
@@ -309,7 +309,7 @@ static struct platform_device *omap3_touchbook_devices[] __initdata = {
&keys_gpio,
};
-static const struct usbhs_omap_board_data usbhs_bdata __initconst = {
+static struct usbhs_omap_platform_data usbhs_bdata __initdata = {
.port_mode[0] = OMAP_EHCI_PORT_MODE_PHY,
.port_mode[1] = OMAP_EHCI_PORT_MODE_PHY,
diff --git a/arch/arm/mach-omap2/board-omap4panda.c b/arch/arm/mach-omap2/board-omap4panda.c
index 5c8e9ce..ee76830 100644
--- a/arch/arm/mach-omap2/board-omap4panda.c
+++ b/arch/arm/mach-omap2/board-omap4panda.c
@@ -139,7 +139,7 @@ static struct platform_device *panda_devices[] __initdata = {
&btwilink_device,
};
-static const struct usbhs_omap_board_data usbhs_bdata __initconst = {
+static struct usbhs_omap_platform_data usbhs_bdata __initdata = {
.port_mode[0] = OMAP_EHCI_PORT_MODE_PHY,
.port_mode[1] = OMAP_USBHS_PORT_MODE_UNUSED,
.port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED,
diff --git a/arch/arm/mach-omap2/board-overo.c b/arch/arm/mach-omap2/board-overo.c
index c8fde3e..b1b0f09 100644
--- a/arch/arm/mach-omap2/board-overo.c
+++ b/arch/arm/mach-omap2/board-overo.c
@@ -457,7 +457,7 @@ static int __init overo_spi_init(void)
return 0;
}
-static const struct usbhs_omap_board_data usbhs_bdata __initconst = {
+static struct usbhs_omap_platform_data usbhs_bdata __initdata = {
.port_mode[0] = OMAP_USBHS_PORT_MODE_UNUSED,
.port_mode[1] = OMAP_EHCI_PORT_MODE_PHY,
.port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED,
diff --git a/arch/arm/mach-omap2/board-zoom.c b/arch/arm/mach-omap2/board-zoom.c
index d7fa31e..2d7a457 100644
--- a/arch/arm/mach-omap2/board-zoom.c
+++ b/arch/arm/mach-omap2/board-zoom.c
@@ -92,7 +92,7 @@ static struct mtd_partition zoom_nand_partitions[] = {
},
};
-static const struct usbhs_omap_board_data usbhs_bdata __initconst = {
+static struct usbhs_omap_platform_data usbhs_bdata __initdata = {
.port_mode[0] = OMAP_USBHS_PORT_MODE_UNUSED,
.port_mode[1] = OMAP_EHCI_PORT_MODE_PHY,
.port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED,
diff --git a/arch/arm/mach-omap2/usb-host.c b/arch/arm/mach-omap2/usb-host.c
index 2e44e8a..940aad4 100644
--- a/arch/arm/mach-omap2/usb-host.c
+++ b/arch/arm/mach-omap2/usb-host.c
@@ -37,11 +37,6 @@
#define USBHS_UHH_HWMODNAME "usb_host_hs"
#define USBHS_TLL_HWMODNAME "usb_tll_hs"
-static struct usbhs_omap_platform_data usbhs_data;
-static struct usbtll_omap_platform_data usbtll_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,
@@ -485,32 +480,18 @@ void __init setup_4430ohci_io_mux(const enum usbhs_omap_port_mode *port_mode)
}
}
-void __init usbhs_init(const struct usbhs_omap_board_data *pdata)
+void __init usbhs_init(struct usbhs_omap_platform_data *pdata)
{
struct omap_hwmod *uhh_hwm, *tll_hwm;
struct platform_device *pdev;
int bus_id = -1;
- int i;
-
- for (i = 0; i < OMAP3_HS_USB_PORTS; i++) {
- usbhs_data.port_mode[i] = pdata->port_mode[i];
- usbtll_data.port_mode[i] = pdata->port_mode[i];
- ohci_data.port_mode[i] = pdata->port_mode[i];
- ehci_data.port_mode[i] = pdata->port_mode[i];
- ehci_data.reset_gpio_port[i] = pdata->reset_gpio_port[i];
- ehci_data.regulator[i] = pdata->regulator[i];
- }
- ehci_data.phy_reset = pdata->phy_reset;
- ohci_data.es2_compatibility = pdata->es2_compatibility;
- usbhs_data.ehci_data = &ehci_data;
- usbhs_data.ohci_data = &ohci_data;
if (cpu_is_omap34xx()) {
setup_ehci_io_mux(pdata->port_mode);
setup_ohci_io_mux(pdata->port_mode);
if (omap_rev() <= OMAP3430_REV_ES2_1)
- usbhs_data.single_ulpi_bypass = true;
+ pdata->single_ulpi_bypass = true;
} else if (cpu_is_omap44xx()) {
setup_4430ehci_io_mux(pdata->port_mode);
@@ -530,7 +511,7 @@ void __init usbhs_init(const struct usbhs_omap_board_data *pdata)
}
pdev = omap_device_build(OMAP_USBTLL_DEVICE, bus_id, tll_hwm,
- &usbtll_data, sizeof(usbtll_data),
+ pdata, sizeof(*pdata),
omap_uhhtll_latency,
ARRAY_SIZE(omap_uhhtll_latency), false);
if (IS_ERR(pdev)) {
@@ -540,7 +521,7 @@ void __init usbhs_init(const struct usbhs_omap_board_data *pdata)
}
pdev = omap_device_build(OMAP_USBHS_DEVICE, bus_id, uhh_hwm,
- &usbhs_data, sizeof(usbhs_data),
+ pdata, sizeof(*pdata),
omap_uhhtll_latency,
ARRAY_SIZE(omap_uhhtll_latency), false);
if (IS_ERR(pdev)) {
@@ -552,7 +533,7 @@ void __init usbhs_init(const struct usbhs_omap_board_data *pdata)
#else
-void __init usbhs_init(const struct usbhs_omap_board_data *pdata)
+void __init usbhs_init(struct usbhs_omap_platform_data *pdata)
{
}
diff --git a/arch/arm/mach-omap2/usb.h b/arch/arm/mach-omap2/usb.h
index 9b986ea..3319f5c 100644
--- a/arch/arm/mach-omap2/usb.h
+++ b/arch/arm/mach-omap2/usb.h
@@ -53,26 +53,8 @@
#define USBPHY_OTGSESSEND_EN (1 << 20)
#define USBPHY_DATA_POLARITY (1 << 23)
-struct usbhs_omap_board_data {
- 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 */
- int reset_gpio_port[OMAP3_HS_USB_PORTS];
-
- /* Set this to true for ES2.x silicon */
- unsigned es2_compatibility:1;
-
- unsigned phy_reset:1;
-
- /*
- * Regulators for USB PHYs.
- * Each PHY can have a separate regulator.
- */
- struct regulator *regulator[OMAP3_HS_USB_PORTS];
-};
-
extern void usb_musb_init(struct omap_musb_board_data *board_data);
-extern void usbhs_init(const struct usbhs_omap_board_data *pdata);
+extern void usbhs_init(struct usbhs_omap_platform_data *pdata);
extern void am35x_musb_reset(void);
extern void am35x_musb_phy_power(u8 on);
diff --git a/drivers/mfd/omap-usb-host.c b/drivers/mfd/omap-usb-host.c
index 05164d7..d6e6b8c 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;
@@ -184,19 +184,13 @@ err_end:
static int omap_usbhs_alloc_children(struct platform_device *pdev)
{
struct device *dev = &pdev->dev;
- struct usbhs_hcd_omap *omap;
- struct ehci_hcd_omap_platform_data *ehci_data;
- struct ohci_hcd_omap_platform_data *ohci_data;
+ struct usbhs_omap_platform_data *pdata = dev->platform_data;
struct platform_device *ehci;
struct platform_device *ohci;
struct resource *res;
struct resource resources[2];
int ret;
- omap = platform_get_drvdata(pdev);
- ehci_data = omap->platdata.ehci_data;
- ohci_data = omap->platdata.ohci_data;
-
res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "ehci");
if (!res) {
dev_err(dev, "EHCI get resource IORESOURCE_MEM failed\n");
@@ -213,8 +207,8 @@ static int omap_usbhs_alloc_children(struct platform_device *pdev)
}
resources[1] = *res;
- ehci = omap_usbhs_alloc_child(OMAP_EHCI_DEVICE, resources, 2, ehci_data,
- sizeof(*ehci_data), dev);
+ ehci = omap_usbhs_alloc_child(OMAP_EHCI_DEVICE, resources, 2, pdata,
+ sizeof(*pdata), dev);
if (!ehci) {
dev_err(dev, "omap_usbhs_alloc_child failed\n");
@@ -238,8 +232,8 @@ static int omap_usbhs_alloc_children(struct platform_device *pdev)
}
resources[1] = *res;
- ohci = omap_usbhs_alloc_child(OMAP_OHCI_DEVICE, resources, 2, ohci_data,
- sizeof(*ohci_data), dev);
+ ohci = omap_usbhs_alloc_child(OMAP_OHCI_DEVICE, resources, 2, pdata,
+ sizeof(*pdata), dev);
if (!ohci) {
dev_err(dev, "omap_usbhs_alloc_child failed\n");
ret = -ENOMEM;
@@ -278,7 +272,7 @@ 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;
+ struct usbhs_omap_platform_data *pdata = omap->pdata;
unsigned long flags;
dev_dbg(dev, "usbhs_runtime_resume\n");
@@ -310,7 +304,7 @@ 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;
+ struct usbhs_omap_platform_data *pdata = omap->pdata;
unsigned long flags;
dev_dbg(dev, "usbhs_runtime_suspend\n");
@@ -342,19 +336,19 @@ 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;
dev_dbg(dev, "starting TI HSUSB Controller\n");
- if (pdata->ehci_data->phy_reset) {
- if (gpio_is_valid(pdata->ehci_data->reset_gpio_port[0]))
- gpio_request_one(pdata->ehci_data->reset_gpio_port[0],
+ if (pdata->phy_reset) {
+ if (gpio_is_valid(pdata->reset_gpio_port[0]))
+ gpio_request_one(pdata->reset_gpio_port[0],
GPIOF_OUT_INIT_LOW, "USB1 PHY reset");
- if (gpio_is_valid(pdata->ehci_data->reset_gpio_port[1]))
- gpio_request_one(pdata->ehci_data->reset_gpio_port[1],
+ if (gpio_is_valid(pdata->reset_gpio_port[1]))
+ gpio_request_one(pdata->reset_gpio_port[1],
GPIOF_OUT_INIT_LOW, "USB2 PHY reset");
/* Hold the PHY in RESET for enough time till DIR is high */
@@ -430,33 +424,33 @@ static void omap_usbhs_init(struct device *dev)
spin_unlock_irqrestore(&omap->lock, flags);
pm_runtime_put_sync(dev);
- if (pdata->ehci_data->phy_reset) {
+ if (pdata->phy_reset) {
/* Hold the PHY in RESET for enough time till
* PHY is settled and ready
*/
udelay(10);
- if (gpio_is_valid(pdata->ehci_data->reset_gpio_port[0]))
+ if (gpio_is_valid(pdata->reset_gpio_port[0]))
gpio_set_value_cansleep
- (pdata->ehci_data->reset_gpio_port[0], 1);
+ (pdata->reset_gpio_port[0], 1);
- if (gpio_is_valid(pdata->ehci_data->reset_gpio_port[1]))
+ if (gpio_is_valid(pdata->reset_gpio_port[1]))
gpio_set_value_cansleep
- (pdata->ehci_data->reset_gpio_port[1], 1);
+ (pdata->reset_gpio_port[1], 1);
}
}
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]))
- gpio_free(pdata->ehci_data->reset_gpio_port[0]);
+ 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->ehci_data->reset_gpio_port[1]))
- gpio_free(pdata->ehci_data->reset_gpio_port[1]);
+ if (gpio_is_valid(pdata->reset_gpio_port[1]))
+ gpio_free(pdata->reset_gpio_port[1]);
}
}
@@ -490,15 +484,10 @@ 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);
-
for (i = 0; i < OMAP3_HS_USB_PORTS; i++)
if (is_ehci_phy_mode(i) || is_ehci_tll_mode(i) ||
is_ehci_hsic_mode(i)) {
diff --git a/drivers/mfd/omap-usb-tll.c b/drivers/mfd/omap-usb-tll.c
index eb86915..e459489 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 usbhs_omap_platform_data *pdata;
/* secure the register updates */
spinlock_t lock;
};
@@ -203,7 +203,7 @@ static unsigned ohci_omap3_fslsmode(enum usbhs_omap_port_mode mode)
static int usbtll_omap_probe(struct platform_device *pdev)
{
struct device *dev = &pdev->dev;
- struct usbtll_omap_platform_data *pdata = dev->platform_data;
+ struct usbhs_omap_platform_data *pdata = dev->platform_data;
void __iomem *base;
struct resource *res;
struct usbtll_omap *tll;
@@ -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 usbhs_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 usbhs_omap_platform_data *pdata = tll->pdata;
unsigned long flags;
dev_dbg(dev, "usbtll_runtime_suspend\n");
diff --git a/drivers/usb/host/ehci-omap.c b/drivers/usb/host/ehci-omap.c
index ac17a7c..134c789 100644
--- a/drivers/usb/host/ehci-omap.c
+++ b/drivers/usb/host/ehci-omap.c
@@ -107,7 +107,7 @@ static int omap_ehci_init(struct usb_hcd *hcd)
{
struct ehci_hcd *ehci = hcd_to_ehci(hcd);
int rc;
- struct ehci_hcd_omap_platform_data *pdata;
+ struct usbhs_omap_platform_data *pdata;
pdata = hcd->self.controller->platform_data;
@@ -151,7 +151,7 @@ static int omap_ehci_init(struct usb_hcd *hcd)
}
static void disable_put_regulator(
- struct ehci_hcd_omap_platform_data *pdata)
+ struct usbhs_omap_platform_data *pdata)
{
int i;
@@ -176,7 +176,7 @@ static void disable_put_regulator(
static int ehci_hcd_omap_probe(struct platform_device *pdev)
{
struct device *dev = &pdev->dev;
- struct ehci_hcd_omap_platform_data *pdata = dev->platform_data;
+ struct usbhs_omap_platform_data *pdata = dev->platform_data;
struct resource *res;
struct usb_hcd *hcd;
void __iomem *regs;
@@ -288,7 +288,7 @@ 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;
+ struct usbhs_omap_platform_data *pdata = dev->platform_data;
usb_remove_hcd(hcd);
disable_put_regulator(dev->platform_data);
diff --git a/include/linux/platform_data/usb-omap.h b/include/linux/platform_data/usb-omap.h
index ef65b67..04c7537 100644
--- a/include/linux/platform_data/usb-omap.h
+++ b/include/linux/platform_data/usb-omap.h
@@ -38,30 +38,15 @@ enum usbhs_omap_port_mode {
OMAP_OHCI_PORT_MODE_TLL_2PIN_DPDM
};
-struct usbtll_omap_platform_data {
- enum usbhs_omap_port_mode port_mode[OMAP3_HS_USB_PORTS];
-};
-
-struct ehci_hcd_omap_platform_data {
+struct usbhs_omap_platform_data {
enum usbhs_omap_port_mode port_mode[OMAP3_HS_USB_PORTS];
int reset_gpio_port[OMAP3_HS_USB_PORTS];
struct regulator *regulator[OMAP3_HS_USB_PORTS];
- unsigned phy_reset:1;
-};
-
-struct ohci_hcd_omap_platform_data {
- enum usbhs_omap_port_mode port_mode[OMAP3_HS_USB_PORTS];
- unsigned es2_compatibility:1;
-};
-
-struct usbhs_omap_platform_data {
- enum usbhs_omap_port_mode port_mode[OMAP3_HS_USB_PORTS];
-
- struct ehci_hcd_omap_platform_data *ehci_data;
- struct ohci_hcd_omap_platform_data *ohci_data;
/* OMAP3 <= ES2.1 have a single ulpi bypass control bit */
- unsigned single_ulpi_bypass:1;
+ unsigned single_ulpi_bypass:1;
+ unsigned es2_compatibility:1;
+ unsigned phy_reset:1;
};
/*-------------------------------------------------------------------------*/
--
1.7.4.1
^ permalink raw reply related [flat|nested] 51+ messages in thread
* [PATCH v7 02/22] mfd: omap-usb-tll: Fix channel count detection
2013-01-17 11:30 [PATCH v7 00/22] OMAP USB Host cleanup Roger Quadros
2013-01-17 11:30 ` [PATCH v7 01/22] mfd: omap-usb-host: Consolidate OMAP USB-HS platform data Roger Quadros
@ 2013-01-17 11:30 ` Roger Quadros
2013-01-17 11:30 ` [PATCH v7 03/22] mfd: omap-usb-tll: Use devm_kzalloc/ioremap and clean up error path Roger Quadros
` (20 subsequent siblings)
22 siblings, 0 replies; 51+ messages in thread
From: Roger Quadros @ 2013-01-17 11:30 UTC (permalink / raw)
To: linux-arm-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 e459489..9658e18 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 usbhs_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] 51+ messages in thread
* [PATCH v7 03/22] mfd: omap-usb-tll: Use devm_kzalloc/ioremap and clean up error path
2013-01-17 11:30 [PATCH v7 00/22] OMAP USB Host cleanup Roger Quadros
2013-01-17 11:30 ` [PATCH v7 01/22] mfd: omap-usb-host: Consolidate OMAP USB-HS platform data Roger Quadros
2013-01-17 11:30 ` [PATCH v7 02/22] mfd: omap-usb-tll: Fix channel count detection Roger Quadros
@ 2013-01-17 11:30 ` Roger Quadros
2013-01-17 11:30 ` [PATCH v7 04/22] mfd: omap-usb-tll: Clean up clock handling Roger Quadros
` (19 subsequent siblings)
22 siblings, 0 replies; 51+ messages in thread
From: Roger Quadros @ 2013-01-17 11:30 UTC (permalink / raw)
To: linux-arm-kernel
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 | 38 ++++++++++++--------------------------
1 files changed, 12 insertions(+), 26 deletions(-)
diff --git a/drivers/mfd/omap-usb-tll.c b/drivers/mfd/omap-usb-tll.c
index 9658e18..9a19cc7 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,22 @@ 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;
+ dev_err(dev, "Resource request/ioremap failed:%d\n", ret);
+ goto err_res;
}
platform_set_drvdata(pdev, tll);
@@ -323,23 +316,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 +343,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] 51+ messages in thread
* [PATCH v7 04/22] mfd: omap-usb-tll: Clean up clock handling
2013-01-17 11:30 [PATCH v7 00/22] OMAP USB Host cleanup Roger Quadros
` (2 preceding siblings ...)
2013-01-17 11:30 ` [PATCH v7 03/22] mfd: omap-usb-tll: Use devm_kzalloc/ioremap and clean up error path Roger Quadros
@ 2013-01-17 11:30 ` Roger Quadros
2013-01-17 11:30 ` [PATCH v7 05/22] mfd: omap-usb-tll: introduce and use mode_needs_tll() Roger Quadros
` (18 subsequent siblings)
22 siblings, 0 replies; 51+ messages in thread
From: Roger Quadros @ 2013-01-17 11:30 UTC (permalink / raw)
To: linux-arm-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 | 89 +++++++++++++++++++++++++++----------------
1 files changed, 56 insertions(+), 33 deletions(-)
diff --git a/drivers/mfd/omap-usb-tll.c b/drivers/mfd/omap-usb-tll.c
index 9a19cc7..4ce134b 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 usbhs_omap_platform_data *pdata;
+ struct clk **ch_clk;
/* secure the register updates */
spinlock_t lock;
};
@@ -225,26 +224,12 @@ 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;
dev_err(dev, "Resource request/ioremap failed:%d\n", ret);
- goto err_res;
+ return ret;
}
platform_set_drvdata(pdev, tll);
@@ -270,6 +255,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;
+ }
+
+ 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;
+ }
+
+ spin_lock_irqsave(&tll->lock, flags);
+
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]) ||
@@ -321,11 +332,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;
}
@@ -339,9 +348,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;
}
@@ -351,6 +362,7 @@ static int usbtll_runtime_resume(struct device *dev)
struct usbtll_omap *tll = dev_get_drvdata(dev);
struct usbhs_omap_platform_data *pdata = tll->pdata;
unsigned long flags;
+ int i;
dev_dbg(dev, "usbtll_runtime_resume\n");
@@ -361,11 +373,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);
@@ -377,6 +398,7 @@ static int usbtll_runtime_suspend(struct device *dev)
struct usbtll_omap *tll = dev_get_drvdata(dev);
struct usbhs_omap_platform_data *pdata = tll->pdata;
unsigned long flags;
+ int i;
dev_dbg(dev, "usbtll_runtime_suspend\n");
@@ -387,11 +409,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] 51+ messages in thread
* [PATCH v7 05/22] mfd: omap-usb-tll: introduce and use mode_needs_tll()
2013-01-17 11:30 [PATCH v7 00/22] OMAP USB Host cleanup Roger Quadros
` (3 preceding siblings ...)
2013-01-17 11:30 ` [PATCH v7 04/22] mfd: omap-usb-tll: Clean up clock handling Roger Quadros
@ 2013-01-17 11:30 ` Roger Quadros
2013-01-17 11:30 ` [PATCH v7 06/22] mfd: omap-usb-tll: Check for missing platform data in probe Roger Quadros
` (17 subsequent siblings)
22 siblings, 0 replies; 51+ messages in thread
From: Roger Quadros @ 2013-01-17 11:30 UTC (permalink / raw)
To: linux-arm-kernel
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 4ce134b..6a43391 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 usbhs_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");
@@ -281,12 +286,11 @@ static int usbtll_omap_probe(struct platform_device *pdev)
spin_lock_irqsave(&tll->lock, flags);
- 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);
@@ -374,7 +378,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])
@@ -410,7 +414,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] 51+ messages in thread
* [PATCH v7 06/22] mfd: omap-usb-tll: Check for missing platform data in probe
2013-01-17 11:30 [PATCH v7 00/22] OMAP USB Host cleanup Roger Quadros
` (4 preceding siblings ...)
2013-01-17 11:30 ` [PATCH v7 05/22] mfd: omap-usb-tll: introduce and use mode_needs_tll() Roger Quadros
@ 2013-01-17 11:30 ` Roger Quadros
2013-01-17 11:30 ` [PATCH v7 07/22] mfd: omap-usb-tll: Fix error message Roger Quadros
` (16 subsequent siblings)
22 siblings, 0 replies; 51+ messages in thread
From: Roger Quadros @ 2013-01-17 11:30 UTC (permalink / raw)
To: linux-arm-kernel
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 6a43391..0e68c8a 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;
@@ -370,11 +375,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++) {
@@ -406,11 +406,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] 51+ messages in thread
* [PATCH v7 07/22] mfd: omap-usb-tll: Fix error message
2013-01-17 11:30 [PATCH v7 00/22] OMAP USB Host cleanup Roger Quadros
` (5 preceding siblings ...)
2013-01-17 11:30 ` [PATCH v7 06/22] mfd: omap-usb-tll: Check for missing platform data in probe Roger Quadros
@ 2013-01-17 11:30 ` Roger Quadros
2013-01-17 11:30 ` [PATCH v7 08/22] mfd: omap-usb-tll: serialize access to TLL device Roger Quadros
` (15 subsequent siblings)
22 siblings, 0 replies; 51+ messages in thread
From: Roger Quadros @ 2013-01-17 11:30 UTC (permalink / raw)
To: linux-arm-kernel
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@ti.com>
---
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 0e68c8a..81d2cac 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;
/*-------------------------------------------------------------------------*/
@@ -337,7 +337,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;
@@ -359,6 +360,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]);
@@ -438,21 +441,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
^ permalink raw reply related [flat|nested] 51+ messages in thread
* [PATCH v7 08/22] mfd: omap-usb-tll: serialize access to TLL device
2013-01-17 11:30 [PATCH v7 00/22] OMAP USB Host cleanup Roger Quadros
` (6 preceding siblings ...)
2013-01-17 11:30 ` [PATCH v7 07/22] mfd: omap-usb-tll: Fix error message Roger Quadros
@ 2013-01-17 11:30 ` Roger Quadros
2013-01-17 11:30 ` [PATCH v7 09/22] mfd: omap-usb-tll: Add OMAP5 revision and HSIC support Roger Quadros
` (14 subsequent siblings)
22 siblings, 0 replies; 51+ messages in thread
From: Roger Quadros @ 2013-01-17 11:30 UTC (permalink / raw)
To: linux-arm-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 81d2cac..9f9cfc2 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 usbhs_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);
@@ -246,8 +242,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:
@@ -265,8 +259,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) {
@@ -289,8 +281,6 @@ static int usbtll_omap_probe(struct platform_device *pdev)
tll->ch_clk[i] = fck;
}
- spin_lock_irqsave(&tll->lock, flags);
-
needs_tll = false;
for (i = 0; i < tll->nch; i++)
needs_tll |= omap_usb_mode_needs_tll(pdata->port_mode[i]);
@@ -335,10 +325,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;
@@ -360,7 +351,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]);
@@ -373,13 +366,10 @@ static int usbtll_runtime_resume(struct device *dev)
{
struct usbtll_omap *tll = dev_get_drvdata(dev);
struct usbhs_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;
@@ -395,8 +385,6 @@ static int usbtll_runtime_resume(struct device *dev)
}
}
- spin_unlock_irqrestore(&tll->lock, flags);
-
return 0;
}
@@ -404,13 +392,10 @@ static int usbtll_runtime_suspend(struct device *dev)
{
struct usbtll_omap *tll = dev_get_drvdata(dev);
struct usbhs_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])
@@ -418,8 +403,6 @@ static int usbtll_runtime_suspend(struct device *dev)
}
}
- spin_unlock_irqrestore(&tll->lock, flags);
-
return 0;
}
@@ -441,21 +424,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] 51+ messages in thread
* [PATCH v7 09/22] mfd: omap-usb-tll: Add OMAP5 revision and HSIC support
2013-01-17 11:30 [PATCH v7 00/22] OMAP USB Host cleanup Roger Quadros
` (7 preceding siblings ...)
2013-01-17 11:30 ` [PATCH v7 08/22] mfd: omap-usb-tll: serialize access to TLL device Roger Quadros
@ 2013-01-17 11:30 ` Roger Quadros
2013-01-17 11:30 ` [PATCH v7 10/22] mfd: omap_usb_host: Avoid missing platform data checks in suspend/resume Roger Quadros
` (13 subsequent siblings)
22 siblings, 0 replies; 51+ messages in thread
From: Roger Quadros @ 2013-01-17 11:30 UTC (permalink / raw)
To: linux-arm-kernel
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 9f9cfc2..fc0ac9f 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)
@@ -245,6 +249,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:
@@ -313,6 +318,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] 51+ messages in thread
* [PATCH v7 10/22] mfd: omap_usb_host: Avoid missing platform data checks in suspend/resume
2013-01-17 11:30 [PATCH v7 00/22] OMAP USB Host cleanup Roger Quadros
` (8 preceding siblings ...)
2013-01-17 11:30 ` [PATCH v7 09/22] mfd: omap-usb-tll: Add OMAP5 revision and HSIC support Roger Quadros
@ 2013-01-17 11:30 ` Roger Quadros
2013-01-17 11:30 ` [PATCH v7 11/22] mfd: omap-usb-host: Use devm_kzalloc() and devm_request_and_ioremap() Roger Quadros
` (12 subsequent siblings)
22 siblings, 0 replies; 51+ messages in thread
From: Roger Quadros @ 2013-01-17 11:30 UTC (permalink / raw)
To: linux-arm-kernel
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>
---
drivers/mfd/omap-usb-host.c | 10 ----------
1 files changed, 0 insertions(+), 10 deletions(-)
diff --git a/drivers/mfd/omap-usb-host.c b/drivers/mfd/omap-usb-host.c
index d6e6b8c..061366d 100644
--- a/drivers/mfd/omap-usb-host.c
+++ b/drivers/mfd/omap-usb-host.c
@@ -277,11 +277,6 @@ static int usbhs_runtime_resume(struct device *dev)
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);
@@ -309,11 +304,6 @@ static int usbhs_runtime_suspend(struct device *dev)
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]))
--
1.7.4.1
^ permalink raw reply related [flat|nested] 51+ messages in thread
* [PATCH v7 11/22] mfd: omap-usb-host: Use devm_kzalloc() and devm_request_and_ioremap()
2013-01-17 11:30 [PATCH v7 00/22] OMAP USB Host cleanup Roger Quadros
` (9 preceding siblings ...)
2013-01-17 11:30 ` [PATCH v7 10/22] mfd: omap_usb_host: Avoid missing platform data checks in suspend/resume Roger Quadros
@ 2013-01-17 11:30 ` Roger Quadros
2013-01-17 11:30 ` [PATCH v7 12/22] mfd: omap-usb-host: know about number of ports from revision register Roger Quadros
` (11 subsequent siblings)
22 siblings, 0 replies; 51+ messages in thread
From: Roger Quadros @ 2013-01-17 11:30 UTC (permalink / raw)
To: linux-arm-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 | 38 +++++++++++---------------------------
1 files changed, 11 insertions(+), 27 deletions(-)
diff --git a/drivers/mfd/omap-usb-host.c b/drivers/mfd/omap-usb-host.c
index 061366d..310aaa9 100644
--- a/drivers/mfd/omap-usb-host.c
+++ b/drivers/mfd/omap-usb-host.c
@@ -461,15 +461,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) {
+ dev_err(dev, "Resource request/ioremap failed\n");
+ return -EADDRNOTAVAIL;
}
spin_lock_init(&omap->lock);
@@ -568,20 +573,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);
@@ -591,13 +582,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:
@@ -621,9 +609,7 @@ err_utmi_p1_fck:
err_end:
clk_put(omap->ehci_logic_fck);
pm_runtime_disable(dev);
- kfree(omap);
-end_probe:
return ret;
}
@@ -638,7 +624,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);
@@ -648,7 +633,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] 51+ messages in thread
* [PATCH v7 12/22] mfd: omap-usb-host: know about number of ports from revision register
2013-01-17 11:30 [PATCH v7 00/22] OMAP USB Host cleanup Roger Quadros
` (10 preceding siblings ...)
2013-01-17 11:30 ` [PATCH v7 11/22] mfd: omap-usb-host: Use devm_kzalloc() and devm_request_and_ioremap() Roger Quadros
@ 2013-01-17 11:30 ` Roger Quadros
2013-01-17 11:30 ` [PATCH v7 13/22] mfd: omap-usb-host: override number of ports from platform data Roger Quadros
` (10 subsequent siblings)
22 siblings, 0 replies; 51+ messages in thread
From: Roger Quadros @ 2013-01-17 11:30 UTC (permalink / raw)
To: linux-arm-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 | 33 ++++++++++++++++++++++++++++-----
1 files changed, 28 insertions(+), 5 deletions(-)
diff --git a/drivers/mfd/omap-usb-host.c b/drivers/mfd/omap-usb-host.c
index 310aaa9..26319ca 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;
@@ -347,8 +349,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 */
@@ -483,7 +483,32 @@ static int usbhs_omap_probe(struct platform_device *pdev)
pm_runtime_enable(dev);
- for (i = 0; i < OMAP3_HS_USB_PORTS; i++)
+ platform_set_drvdata(pdev, omap);
+ pm_runtime_get_sync(dev);
+
+ 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");
@@ -573,8 +598,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] 51+ messages in thread
* [PATCH v7 13/22] mfd: omap-usb-host: override number of ports from platform data
2013-01-17 11:30 [PATCH v7 00/22] OMAP USB Host cleanup Roger Quadros
` (11 preceding siblings ...)
2013-01-17 11:30 ` [PATCH v7 12/22] mfd: omap-usb-host: know about number of ports from revision register Roger Quadros
@ 2013-01-17 11:30 ` Roger Quadros
2013-01-17 11:30 ` [PATCH v7 14/22] mfd: omap-usb-host: cleanup clock management code Roger Quadros
` (9 subsequent siblings)
22 siblings, 0 replies; 51+ messages in thread
From: Roger Quadros @ 2013-01-17 11:30 UTC (permalink / raw)
To: linux-arm-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>
---
drivers/mfd/omap-usb-host.c | 34 +++++++++++++++++++------------
include/linux/platform_data/usb-omap.h | 1 +
2 files changed, 22 insertions(+), 13 deletions(-)
diff --git a/drivers/mfd/omap-usb-host.c b/drivers/mfd/omap-usb-host.c
index 26319ca..779588b 100644
--- a/drivers/mfd/omap-usb-host.c
+++ b/drivers/mfd/omap-usb-host.c
@@ -493,19 +493,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 04c7537..925a4a7 100644
--- a/include/linux/platform_data/usb-omap.h
+++ b/include/linux/platform_data/usb-omap.h
@@ -39,6 +39,7 @@ enum usbhs_omap_port_mode {
};
struct usbhs_omap_platform_data {
+ int nports;
enum usbhs_omap_port_mode port_mode[OMAP3_HS_USB_PORTS];
int reset_gpio_port[OMAP3_HS_USB_PORTS];
struct regulator *regulator[OMAP3_HS_USB_PORTS];
--
1.7.4.1
^ permalink raw reply related [flat|nested] 51+ messages in thread
* [PATCH v7 14/22] mfd: omap-usb-host: cleanup clock management code
2013-01-17 11:30 [PATCH v7 00/22] OMAP USB Host cleanup Roger Quadros
` (12 preceding siblings ...)
2013-01-17 11:30 ` [PATCH v7 13/22] mfd: omap-usb-host: override number of ports from platform data Roger Quadros
@ 2013-01-17 11:30 ` Roger Quadros
2013-01-17 11:44 ` Felipe Balbi
2013-01-17 11:30 ` [PATCH v7 15/22] mfd: omap-usb-host: Manage HSIC clocks for HSIC mode Roger Quadros
` (8 subsequent siblings)
22 siblings, 1 reply; 51+ messages in thread
From: Roger Quadros @ 2013-01-17 11:30 UTC (permalink / raw)
To: linux-arm-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 779588b..c75b79d 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;
@@ -276,6 +275,7 @@ static int usbhs_runtime_resume(struct device *dev)
struct usbhs_hcd_omap *omap = dev_get_drvdata(dev);
struct usbhs_omap_platform_data *pdata = omap->pdata;
unsigned long flags;
+ int i, r;
dev_dbg(dev, "usbhs_runtime_resume\n");
@@ -285,13 +285,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);
@@ -303,18 +308,18 @@ static int usbhs_runtime_suspend(struct device *dev)
struct usbhs_hcd_omap *omap = dev_get_drvdata(dev);
struct usbhs_omap_platform_data *pdata = omap->pdata;
unsigned long flags;
+ 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);
@@ -458,6 +463,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");
@@ -516,76 +522,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"
@@ -593,13 +616,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"
@@ -617,28 +640,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;
@@ -653,15 +676,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] 51+ messages in thread
* [PATCH v7 15/22] mfd: omap-usb-host: Manage HSIC clocks for HSIC mode
2013-01-17 11:30 [PATCH v7 00/22] OMAP USB Host cleanup Roger Quadros
` (13 preceding siblings ...)
2013-01-17 11:30 ` [PATCH v7 14/22] mfd: omap-usb-host: cleanup clock management code Roger Quadros
@ 2013-01-17 11:30 ` Roger Quadros
2013-01-17 11:45 ` Felipe Balbi
2013-01-17 11:30 ` [PATCH v7 16/22] mfd: omap-usb-host: Get rid of unnecessary spinlock Roger Quadros
` (7 subsequent siblings)
22 siblings, 1 reply; 51+ messages in thread
From: Roger Quadros @ 2013-01-17 11:30 UTC (permalink / raw)
To: linux-arm-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 c75b79d..d9a242b 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;
@@ -286,7 +288,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) {
@@ -295,6 +318,9 @@ static int usbhs_runtime_resume(struct device *dev)
i, r);
}
}
+ break;
+ default:
+ break;
}
}
@@ -315,9 +341,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;
}
}
@@ -524,7 +562,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;
@@ -582,7 +623,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),
@@ -598,6 +639,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])) {
@@ -641,8 +700,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);
@@ -680,8 +742,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] 51+ messages in thread
* [PATCH v7 16/22] mfd: omap-usb-host: Get rid of unnecessary spinlock
2013-01-17 11:30 [PATCH v7 00/22] OMAP USB Host cleanup Roger Quadros
` (14 preceding siblings ...)
2013-01-17 11:30 ` [PATCH v7 15/22] mfd: omap-usb-host: Manage HSIC clocks for HSIC mode Roger Quadros
@ 2013-01-17 11:30 ` Roger Quadros
2013-01-17 11:30 ` [PATCH v7 17/22] mfd: omap-usb-host: clean up omap_usbhs_init() Roger Quadros
` (6 subsequent siblings)
22 siblings, 0 replies; 51+ messages in thread
From: Roger Quadros @ 2013-01-17 11:30 UTC (permalink / raw)
To: linux-arm-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 d9a242b..fcace6f 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;
};
/*-------------------------------------------------------------------------*/
@@ -276,13 +274,11 @@ static int usbhs_runtime_resume(struct device *dev)
{
struct usbhs_hcd_omap *omap = dev_get_drvdata(dev);
struct usbhs_omap_platform_data *pdata = omap->pdata;
- unsigned long flags;
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);
@@ -324,8 +320,6 @@ static int usbhs_runtime_resume(struct device *dev)
}
}
- spin_unlock_irqrestore(&omap->lock, flags);
-
return 0;
}
@@ -333,13 +327,10 @@ static int usbhs_runtime_suspend(struct device *dev)
{
struct usbhs_hcd_omap *omap = dev_get_drvdata(dev);
struct usbhs_omap_platform_data *pdata = omap->pdata;
- unsigned long flags;
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:
@@ -362,7 +353,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;
@@ -372,7 +362,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");
@@ -391,7 +380,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 */
@@ -454,8 +442,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->phy_reset) {
/* Hold the PHY in RESET for enough time till
@@ -521,8 +507,6 @@ static int usbhs_omap_probe(struct platform_device *pdev)
return -EADDRNOTAVAIL;
}
- spin_lock_init(&omap->lock);
-
omap->pdata = pdata;
pm_runtime_enable(dev);
--
1.7.4.1
^ permalink raw reply related [flat|nested] 51+ messages in thread
* [PATCH v7 17/22] mfd: omap-usb-host: clean up omap_usbhs_init()
2013-01-17 11:30 [PATCH v7 00/22] OMAP USB Host cleanup Roger Quadros
` (15 preceding siblings ...)
2013-01-17 11:30 ` [PATCH v7 16/22] mfd: omap-usb-host: Get rid of unnecessary spinlock Roger Quadros
@ 2013-01-17 11:30 ` Roger Quadros
2013-01-17 11:48 ` Felipe Balbi
2013-01-17 11:30 ` [PATCH v7 18/22] USB: ehci-omap: Don't free gpios that we didn't request Roger Quadros
` (5 subsequent siblings)
22 siblings, 1 reply; 51+ messages in thread
From: Roger Quadros @ 2013-01-17 11:30 UTC (permalink / raw)
To: linux-arm-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 fcace6f..ecde38d 100644
--- a/drivers/mfd/omap-usb-host.c
+++ b/drivers/mfd/omap-usb-host.c
@@ -358,6 +358,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);
@@ -389,55 +458,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] 51+ messages in thread
* [PATCH v7 18/22] USB: ehci-omap: Don't free gpios that we didn't request
2013-01-17 11:30 [PATCH v7 00/22] OMAP USB Host cleanup Roger Quadros
` (16 preceding siblings ...)
2013-01-17 11:30 ` [PATCH v7 17/22] mfd: omap-usb-host: clean up omap_usbhs_init() Roger Quadros
@ 2013-01-17 11:30 ` Roger Quadros
2013-01-17 11:48 ` Felipe Balbi
2013-01-17 15:15 ` Alan Stern
2013-01-17 11:30 ` [PATCH v7 19/22] ARM: OMAP3: clock data: get rid of unused USB host clock aliases and dummies Roger Quadros
` (4 subsequent siblings)
22 siblings, 2 replies; 51+ messages in thread
From: Roger Quadros @ 2013-01-17 11:30 UTC (permalink / raw)
To: linux-arm-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.
CC: Alan Stern <stern@rowland.harvard.edu>
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 134c789..b96a4bf 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 usbhs_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] 51+ messages in thread
* [PATCH v7 19/22] ARM: OMAP3: clock data: get rid of unused USB host clock aliases and dummies
2013-01-17 11:30 [PATCH v7 00/22] OMAP USB Host cleanup Roger Quadros
` (17 preceding siblings ...)
2013-01-17 11:30 ` [PATCH v7 18/22] USB: ehci-omap: Don't free gpios that we didn't request Roger Quadros
@ 2013-01-17 11:30 ` Roger Quadros
2013-01-17 17:03 ` Tony Lindgren
2013-01-17 11:30 ` [PATCH v7 20/22] ARM: OMAP4: clock data: get rid of unused USB host clock aliases Roger Quadros
` (3 subsequent siblings)
22 siblings, 1 reply; 51+ messages in thread
From: Roger Quadros @ 2013-01-17 11:30 UTC (permalink / raw)
To: linux-arm-kernel
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 6ef8758..b58ec96 100644
--- a/arch/arm/mach-omap2/cclock3xxx_data.c
+++ b/arch/arm/mach-omap2/cclock3xxx_data.c
@@ -3291,8 +3291,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),
@@ -3329,8 +3327,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),
@@ -3393,17 +3389,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] 51+ messages in thread
* [PATCH v7 20/22] ARM: OMAP4: clock data: get rid of unused USB host clock aliases
2013-01-17 11:30 [PATCH v7 00/22] OMAP USB Host cleanup Roger Quadros
` (18 preceding siblings ...)
2013-01-17 11:30 ` [PATCH v7 19/22] ARM: OMAP3: clock data: get rid of unused USB host clock aliases and dummies Roger Quadros
@ 2013-01-17 11:30 ` Roger Quadros
2013-01-17 11:30 ` [PATCH v7 21/22] mfd: omap-usb-host: Don't spam console on clk_set_parent failure Roger Quadros
` (2 subsequent siblings)
22 siblings, 0 replies; 51+ messages in thread
From: Roger Quadros @ 2013-01-17 11:30 UTC (permalink / raw)
To: linux-arm-kernel
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] 51+ messages in thread
* [PATCH v7 21/22] mfd: omap-usb-host: Don't spam console on clk_set_parent failure
2013-01-17 11:30 [PATCH v7 00/22] OMAP USB Host cleanup Roger Quadros
` (19 preceding siblings ...)
2013-01-17 11:30 ` [PATCH v7 20/22] ARM: OMAP4: clock data: get rid of unused USB host clock aliases Roger Quadros
@ 2013-01-17 11:30 ` Roger Quadros
2013-01-17 11:30 ` [PATCH v7 22/22] mdf: omap-usb-host: get rid of build warning Roger Quadros
2013-01-17 11:52 ` [PATCH v7 00/22] OMAP USB Host cleanup Felipe Balbi
22 siblings, 0 replies; 51+ messages in thread
From: Roger Quadros @ 2013-01-17 11:30 UTC (permalink / raw)
To: linux-arm-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 ecde38d..a1f73dc 100644
--- a/drivers/mfd/omap-usb-host.c
+++ b/drivers/mfd/omap-usb-host.c
@@ -668,32 +668,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] 51+ messages in thread
* [PATCH v7 22/22] mdf: omap-usb-host: get rid of build warning
2013-01-17 11:30 [PATCH v7 00/22] OMAP USB Host cleanup Roger Quadros
` (20 preceding siblings ...)
2013-01-17 11:30 ` [PATCH v7 21/22] mfd: omap-usb-host: Don't spam console on clk_set_parent failure Roger Quadros
@ 2013-01-17 11:30 ` Roger Quadros
2013-01-17 11:50 ` Felipe Balbi
2013-01-17 11:52 ` [PATCH v7 00/22] OMAP USB Host cleanup Felipe Balbi
22 siblings, 1 reply; 51+ messages in thread
From: Roger Quadros @ 2013-01-17 11:30 UTC (permalink / raw)
To: linux-arm-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 a1f73dc..b726a74 100644
--- a/drivers/mfd/omap-usb-host.c
+++ b/drivers/mfd/omap-usb-host.c
@@ -778,7 +778,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
^ permalink raw reply related [flat|nested] 51+ messages in thread
* [PATCH v7 14/22] mfd: omap-usb-host: cleanup clock management code
2013-01-17 11:30 ` [PATCH v7 14/22] mfd: omap-usb-host: cleanup clock management code Roger Quadros
@ 2013-01-17 11:44 ` Felipe Balbi
2013-01-17 12:07 ` Roger Quadros
0 siblings, 1 reply; 51+ messages in thread
From: Felipe Balbi @ 2013-01-17 11:44 UTC (permalink / raw)
To: linux-arm-kernel
On Thu, Jan 17, 2013 at 01:30:23PM +0200, Roger Quadros wrote:
> 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 779588b..c75b79d 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;
>
> @@ -276,6 +275,7 @@ static int usbhs_runtime_resume(struct device *dev)
> struct usbhs_hcd_omap *omap = dev_get_drvdata(dev);
> struct usbhs_omap_platform_data *pdata = omap->pdata;
> unsigned long flags;
> + int i, r;
>
> dev_dbg(dev, "usbhs_runtime_resume\n");
>
> @@ -285,13 +285,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);
> + }
> + }
> + }
> + }
you can decrease indentation here a little bit:
for (i = 0; i < omap->nports; i++) {
if (!is_ehci_tll_mode(pdata->port_mode[i]))
continue;
if (!omap->utmi_clk[i])
continue;
r = clk_enable(omap->utmi_clk[i]);
if (r) {
dev_err(dev,
"Can't enable port %d clk : %d\n",
i, r);
}
}
> @@ -303,18 +308,18 @@ static int usbhs_runtime_suspend(struct device *dev)
> struct usbhs_hcd_omap *omap = dev_get_drvdata(dev);
> struct usbhs_omap_platform_data *pdata = omap->pdata;
> unsigned long flags;
> + 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]);
> + }
> + }
same as above.
--
balbi
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 836 bytes
Desc: Digital signature
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20130117/02da2976/attachment-0001.sig>
^ permalink raw reply [flat|nested] 51+ messages in thread
* [PATCH v7 15/22] mfd: omap-usb-host: Manage HSIC clocks for HSIC mode
2013-01-17 11:30 ` [PATCH v7 15/22] mfd: omap-usb-host: Manage HSIC clocks for HSIC mode Roger Quadros
@ 2013-01-17 11:45 ` Felipe Balbi
2013-01-17 12:10 ` Roger Quadros
0 siblings, 1 reply; 51+ messages in thread
From: Felipe Balbi @ 2013-01-17 11:45 UTC (permalink / raw)
To: linux-arm-kernel
Hi,
On Thu, Jan 17, 2013 at 01:30:24PM +0200, Roger Quadros wrote:
> @@ -598,6 +639,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);
do we really need to know the exact clock node name ?
--
balbi
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 836 bytes
Desc: Digital signature
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20130117/921dd41d/attachment.sig>
^ permalink raw reply [flat|nested] 51+ messages in thread
* [PATCH v7 17/22] mfd: omap-usb-host: clean up omap_usbhs_init()
2013-01-17 11:30 ` [PATCH v7 17/22] mfd: omap-usb-host: clean up omap_usbhs_init() Roger Quadros
@ 2013-01-17 11:48 ` Felipe Balbi
2013-01-17 12:13 ` Roger Quadros
0 siblings, 1 reply; 51+ messages in thread
From: Felipe Balbi @ 2013-01-17 11:48 UTC (permalink / raw)
To: linux-arm-kernel
Hi,
On Thu, Jan 17, 2013 at 01:30:26PM +0200, Roger Quadros wrote:
> + 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);
Any way you could maybe:
rev = omap_usbhs_revision(omap)
switch(rev) {
case REV1:
foo();
break;
case REV2:
bar();
break;
default: /* highest revision */
baz();
}
could be done in a later patch however.
--
balbi
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 836 bytes
Desc: Digital signature
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20130117/65ddb966/attachment.sig>
^ permalink raw reply [flat|nested] 51+ messages in thread
* [PATCH v7 18/22] USB: ehci-omap: Don't free gpios that we didn't request
2013-01-17 11:30 ` [PATCH v7 18/22] USB: ehci-omap: Don't free gpios that we didn't request Roger Quadros
@ 2013-01-17 11:48 ` Felipe Balbi
2013-01-17 12:46 ` Roger Quadros
2013-01-17 15:15 ` Alan Stern
1 sibling, 1 reply; 51+ messages in thread
From: Felipe Balbi @ 2013-01-17 11:48 UTC (permalink / raw)
To: linux-arm-kernel
On Thu, Jan 17, 2013 at 01:30:27PM +0200, Roger Quadros wrote:
> 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.
>
> CC: Alan Stern <stern@rowland.harvard.edu>
>
> Signed-off-by: Roger Quadros <rogerq@ti.com>
should this go to stable ?
--
balbi
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 836 bytes
Desc: Digital signature
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20130117/8b52f64b/attachment.sig>
^ permalink raw reply [flat|nested] 51+ messages in thread
* [PATCH v7 22/22] mdf: omap-usb-host: get rid of build warning
2013-01-17 11:30 ` [PATCH v7 22/22] mdf: omap-usb-host: get rid of build warning Roger Quadros
@ 2013-01-17 11:50 ` Felipe Balbi
2013-01-17 13:30 ` Roger Quadros
0 siblings, 1 reply; 51+ messages in thread
From: Felipe Balbi @ 2013-01-17 11:50 UTC (permalink / raw)
To: linux-arm-kernel
On Thu, Jan 17, 2013 at 01:30:31PM +0200, Roger Quadros wrote:
> 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>
should this go to stable too ?
(though it's not really a bug, so doesn't really matter, I guess).
--
balbi
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 836 bytes
Desc: Digital signature
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20130117/87e1ca1a/attachment.sig>
^ permalink raw reply [flat|nested] 51+ messages in thread
* [PATCH v7 00/22] OMAP USB Host cleanup
2013-01-17 11:30 [PATCH v7 00/22] OMAP USB Host cleanup Roger Quadros
` (21 preceding siblings ...)
2013-01-17 11:30 ` [PATCH v7 22/22] mdf: omap-usb-host: get rid of build warning Roger Quadros
@ 2013-01-17 11:52 ` Felipe Balbi
22 siblings, 0 replies; 51+ messages in thread
From: Felipe Balbi @ 2013-01-17 11:52 UTC (permalink / raw)
To: linux-arm-kernel
Hi,
On Thu, Jan 17, 2013 at 01:30:09PM +0200, Roger Quadros wrote:
> Hi,
>
> This patchset addresses the following
>
> - Consolidate USB Host platform data.
> - 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).
>
> v7:
> - Updated patch 4 to not hold a spinlock when using clk_get().
> - Updated patches 3 and 11 to return -EADDRNOTAVAIL on failure of
> demv_request_and_ioremap().
>
> v6:
> - Added USB Host platform data consolidation patch as the first patch.
> based on request from Tony.
> - Rebased on v3.8-rc3.
>
> 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
>
> The following changes since commit 9931faca02c604c22335f5a935a501bb2ace6e20:
>
> Linux 3.8-rc3 (2013-01-09 18:59:55 -0800)
>
> are available in the git repository at:
> git at github.com:rogerq/linux.git linux-usbhost12-part
not everybody has account on github, you need to set url to something
non-authenticated and pushurl to the ssh url.
anyway, after fixing a few comments on the patches below, I guess this
is all ready for mailine, you can add to the entire series:
Reviewed-by: Felipe Balbi <balbi@ti.com>
--
balbi
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 836 bytes
Desc: Digital signature
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20130117/3899f155/attachment-0001.sig>
^ permalink raw reply [flat|nested] 51+ messages in thread
* [PATCH v7 14/22] mfd: omap-usb-host: cleanup clock management code
2013-01-17 11:44 ` Felipe Balbi
@ 2013-01-17 12:07 ` Roger Quadros
0 siblings, 0 replies; 51+ messages in thread
From: Roger Quadros @ 2013-01-17 12:07 UTC (permalink / raw)
To: linux-arm-kernel
On 01/17/2013 01:44 PM, Felipe Balbi wrote:
> On Thu, Jan 17, 2013 at 01:30:23PM +0200, Roger Quadros wrote:
>> 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 779588b..c75b79d 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;
>>
>> @@ -276,6 +275,7 @@ static int usbhs_runtime_resume(struct device *dev)
>> struct usbhs_hcd_omap *omap = dev_get_drvdata(dev);
>> struct usbhs_omap_platform_data *pdata = omap->pdata;
>> unsigned long flags;
>> + int i, r;
>>
>> dev_dbg(dev, "usbhs_runtime_resume\n");
>>
>> @@ -285,13 +285,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);
>> + }
>> + }
>> + }
>> + }
>
> you can decrease indentation here a little bit:
>
> for (i = 0; i < omap->nports; i++) {
> if (!is_ehci_tll_mode(pdata->port_mode[i]))
> continue;
>
> if (!omap->utmi_clk[i])
> continue;
>
> r = clk_enable(omap->utmi_clk[i]);
> if (r) {
> dev_err(dev,
> "Can't enable port %d clk : %d\n",
> i, r);
> }
> }
OK.
--
cheers,
-roger
^ permalink raw reply [flat|nested] 51+ messages in thread
* [PATCH v7 15/22] mfd: omap-usb-host: Manage HSIC clocks for HSIC mode
2013-01-17 11:45 ` Felipe Balbi
@ 2013-01-17 12:10 ` Roger Quadros
2013-01-17 12:27 ` Felipe Balbi
0 siblings, 1 reply; 51+ messages in thread
From: Roger Quadros @ 2013-01-17 12:10 UTC (permalink / raw)
To: linux-arm-kernel
On 01/17/2013 01:45 PM, Felipe Balbi wrote:
> Hi,
>
> On Thu, Jan 17, 2013 at 01:30:24PM +0200, Roger Quadros wrote:
>> @@ -598,6 +639,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);
>
> do we really need to know the exact clock node name ?
>
I think so. Do you have a better suggestion?
--
cheers,
-roger
^ permalink raw reply [flat|nested] 51+ messages in thread
* [PATCH v7 17/22] mfd: omap-usb-host: clean up omap_usbhs_init()
2013-01-17 11:48 ` Felipe Balbi
@ 2013-01-17 12:13 ` Roger Quadros
0 siblings, 0 replies; 51+ messages in thread
From: Roger Quadros @ 2013-01-17 12:13 UTC (permalink / raw)
To: linux-arm-kernel
On 01/17/2013 01:48 PM, Felipe Balbi wrote:
> Hi,
>
> On Thu, Jan 17, 2013 at 01:30:26PM +0200, Roger Quadros wrote:
>> + 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);
>
> Any way you could maybe:
>
> rev = omap_usbhs_revision(omap)
> switch(rev) {
> case REV1:
> foo();
> break;
> case REV2:
> bar();
> break;
> default: /* highest revision */
> baz();
> }
>
> could be done in a later patch however.
>
I'll fix it in this series.
--
cheers,
-roger
^ permalink raw reply [flat|nested] 51+ messages in thread
* [PATCH v7 15/22] mfd: omap-usb-host: Manage HSIC clocks for HSIC mode
2013-01-17 12:10 ` Roger Quadros
@ 2013-01-17 12:27 ` Felipe Balbi
2013-01-17 12:45 ` Roger Quadros
0 siblings, 1 reply; 51+ messages in thread
From: Felipe Balbi @ 2013-01-17 12:27 UTC (permalink / raw)
To: linux-arm-kernel
On Thu, Jan 17, 2013 at 02:10:18PM +0200, Roger Quadros wrote:
> On 01/17/2013 01:45 PM, Felipe Balbi wrote:
> > Hi,
> >
> > On Thu, Jan 17, 2013 at 01:30:24PM +0200, Roger Quadros wrote:
> >> @@ -598,6 +639,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);
> >
> > do we really need to know the exact clock node name ?
> >
> I think so. Do you have a better suggestion?
update CLKDEV entries ? I mean, what if we have a new OMAP or AMxxxx
device with a different clock name ? That will be a big bummer.
--
balbi
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 836 bytes
Desc: Digital signature
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20130117/ec954106/attachment-0001.sig>
^ permalink raw reply [flat|nested] 51+ messages in thread
* [PATCH v7 15/22] mfd: omap-usb-host: Manage HSIC clocks for HSIC mode
2013-01-17 12:27 ` Felipe Balbi
@ 2013-01-17 12:45 ` Roger Quadros
2013-01-17 12:48 ` Felipe Balbi
0 siblings, 1 reply; 51+ messages in thread
From: Roger Quadros @ 2013-01-17 12:45 UTC (permalink / raw)
To: linux-arm-kernel
On 01/17/2013 02:27 PM, Felipe Balbi wrote:
> On Thu, Jan 17, 2013 at 02:10:18PM +0200, Roger Quadros wrote:
>> On 01/17/2013 01:45 PM, Felipe Balbi wrote:
>>> Hi,
>>>
>>> On Thu, Jan 17, 2013 at 01:30:24PM +0200, Roger Quadros wrote:
>>>> @@ -598,6 +639,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);
>>>
>>> do we really need to know the exact clock node name ?
>>>
>> I think so. Do you have a better suggestion?
>
> update CLKDEV entries ? I mean, what if we have a new OMAP or AMxxxx
> device with a different clock name ? That will be a big bummer.
>
In that case we simply need to add the relevant CLKDEV entries/aliases
for the new platform. I don't think anything needs to be changed in the
driver. We are still using clk_get(dev, clk_name), so the CLKDEV
framework will return the best matching clock for the device.
--
cheers,
-roger
^ permalink raw reply [flat|nested] 51+ messages in thread
* [PATCH v7 18/22] USB: ehci-omap: Don't free gpios that we didn't request
2013-01-17 11:48 ` Felipe Balbi
@ 2013-01-17 12:46 ` Roger Quadros
0 siblings, 0 replies; 51+ messages in thread
From: Roger Quadros @ 2013-01-17 12:46 UTC (permalink / raw)
To: linux-arm-kernel
On 01/17/2013 01:48 PM, Felipe Balbi wrote:
> On Thu, Jan 17, 2013 at 01:30:27PM +0200, Roger Quadros wrote:
>> 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.
>>
>> CC: Alan Stern <stern@rowland.harvard.edu>
>>
>> Signed-off-by: Roger Quadros <rogerq@ti.com>
>
> should this go to stable ?
>
Yes it should.
--
cheers,
-roger
^ permalink raw reply [flat|nested] 51+ messages in thread
* [PATCH v7 15/22] mfd: omap-usb-host: Manage HSIC clocks for HSIC mode
2013-01-17 12:45 ` Roger Quadros
@ 2013-01-17 12:48 ` Felipe Balbi
0 siblings, 0 replies; 51+ messages in thread
From: Felipe Balbi @ 2013-01-17 12:48 UTC (permalink / raw)
To: linux-arm-kernel
On Thu, Jan 17, 2013 at 02:45:16PM +0200, Roger Quadros wrote:
> On 01/17/2013 02:27 PM, Felipe Balbi wrote:
> > On Thu, Jan 17, 2013 at 02:10:18PM +0200, Roger Quadros wrote:
> >> On 01/17/2013 01:45 PM, Felipe Balbi wrote:
> >>> Hi,
> >>>
> >>> On Thu, Jan 17, 2013 at 01:30:24PM +0200, Roger Quadros wrote:
> >>>> @@ -598,6 +639,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);
> >>>
> >>> do we really need to know the exact clock node name ?
> >>>
> >> I think so. Do you have a better suggestion?
> >
> > update CLKDEV entries ? I mean, what if we have a new OMAP or AMxxxx
> > device with a different clock name ? That will be a big bummer.
> >
>
> In that case we simply need to add the relevant CLKDEV entries/aliases
> for the new platform. I don't think anything needs to be changed in the
> driver. We are still using clk_get(dev, clk_name), so the CLKDEV
> framework will return the best matching clock for the device.
fair enough ;-)
--
balbi
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 836 bytes
Desc: Digital signature
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20130117/16e1b126/attachment.sig>
^ permalink raw reply [flat|nested] 51+ messages in thread
* [PATCH v7 22/22] mdf: omap-usb-host: get rid of build warning
2013-01-17 11:50 ` Felipe Balbi
@ 2013-01-17 13:30 ` Roger Quadros
0 siblings, 0 replies; 51+ messages in thread
From: Roger Quadros @ 2013-01-17 13:30 UTC (permalink / raw)
To: linux-arm-kernel
On 01/17/2013 01:50 PM, Felipe Balbi wrote:
> On Thu, Jan 17, 2013 at 01:30:31PM +0200, Roger Quadros wrote:
>> 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>
>
> should this go to stable too ?
>
> (though it's not really a bug, so doesn't really matter, I guess).
>
not a bug so let's not send this to stable.
--
cheers,
-roger
^ permalink raw reply [flat|nested] 51+ messages in thread
* [PATCH v7 18/22] USB: ehci-omap: Don't free gpios that we didn't request
2013-01-17 11:30 ` [PATCH v7 18/22] USB: ehci-omap: Don't free gpios that we didn't request Roger Quadros
2013-01-17 11:48 ` Felipe Balbi
@ 2013-01-17 15:15 ` Alan Stern
1 sibling, 0 replies; 51+ messages in thread
From: Alan Stern @ 2013-01-17 15:15 UTC (permalink / raw)
To: linux-arm-kernel
On Thu, 17 Jan 2013, Roger Quadros wrote:
> 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.
>
> CC: Alan Stern <stern@rowland.harvard.edu>
>
> Signed-off-by: Roger Quadros <rogerq@ti.com>
Acked-by: Alan Stern <stern@rowland.harvard.edu>
> ---
> 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 134c789..b96a4bf 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 usbhs_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;
> }
>
>
^ permalink raw reply [flat|nested] 51+ messages in thread
* [PATCH v7 01/22] mfd: omap-usb-host: Consolidate OMAP USB-HS platform data
2013-01-17 11:30 ` [PATCH v7 01/22] mfd: omap-usb-host: Consolidate OMAP USB-HS platform data Roger Quadros
@ 2013-01-17 15:16 ` Alan Stern
2013-01-17 16:59 ` Tony Lindgren
0 siblings, 1 reply; 51+ messages in thread
From: Alan Stern @ 2013-01-17 15:16 UTC (permalink / raw)
To: linux-arm-kernel
On Thu, 17 Jan 2013, Roger Quadros wrote:
> Let's have a single platform data structure for the OMAP's High-Speed
> USB host subsystem instead of having 3 separate ones i.e. one for
> board data, one for USB Host (UHH) module and one for USB-TLL module.
>
> This makes the code much simpler and avoids creating multiple copies of
> platform data.
>
> CC: Alan Stern <stern@rowland.harvard.edu>
>
> Signed-off-by: Roger Quadros <rogerq@ti.com>
For the ehci-omap.c part:
Acked-by: Alan Stern <stern@rowland.harvard.edu>
^ permalink raw reply [flat|nested] 51+ messages in thread
* [PATCH v7 01/22] mfd: omap-usb-host: Consolidate OMAP USB-HS platform data
2013-01-17 15:16 ` Alan Stern
@ 2013-01-17 16:59 ` Tony Lindgren
2013-01-18 9:45 ` Roger Quadros
2013-02-11 6:46 ` Olof Johansson
0 siblings, 2 replies; 51+ messages in thread
From: Tony Lindgren @ 2013-01-17 16:59 UTC (permalink / raw)
To: linux-arm-kernel
* Alan Stern <stern@rowland.harvard.edu> [130117 07:19]:
> On Thu, 17 Jan 2013, Roger Quadros wrote:
>
> > Let's have a single platform data structure for the OMAP's High-Speed
> > USB host subsystem instead of having 3 separate ones i.e. one for
> > board data, one for USB Host (UHH) module and one for USB-TLL module.
> >
> > This makes the code much simpler and avoids creating multiple copies of
> > platform data.
> >
> > CC: Alan Stern <stern@rowland.harvard.edu>
> >
> > Signed-off-by: Roger Quadros <rogerq@ti.com>
>
> For the ehci-omap.c part:
>
> Acked-by: Alan Stern <stern@rowland.harvard.edu>
If Samuel acks this patch, I can apply just this patch alone on v3.8-rc3
into an immutable branch omap-for-v3.9/board-usb so we all merge it in
as needed.
Regards,
Tony
^ permalink raw reply [flat|nested] 51+ messages in thread
* [PATCH v7 19/22] ARM: OMAP3: clock data: get rid of unused USB host clock aliases and dummies
2013-01-17 11:30 ` [PATCH v7 19/22] ARM: OMAP3: clock data: get rid of unused USB host clock aliases and dummies Roger Quadros
@ 2013-01-17 17:03 ` Tony Lindgren
2013-01-17 19:00 ` Paul Walmsley
0 siblings, 1 reply; 51+ messages in thread
From: Tony Lindgren @ 2013-01-17 17:03 UTC (permalink / raw)
To: linux-arm-kernel
* Roger Quadros <rogerq@ti.com> [130117 03:34]:
> We don't need multiple aliases for the OMAP USB host clocks and neither
> the dummy clocks so remove them.
It's best that Paul queues this and the next patch as these clock alias
clean-up patches can be done separately. That way the dependency between
arch/arm/*omap* code is cut away as these files should be moved to live
under drivers/clk/omap.
Regards,
Tony
> 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 6ef8758..b58ec96 100644
> --- a/arch/arm/mach-omap2/cclock3xxx_data.c
> +++ b/arch/arm/mach-omap2/cclock3xxx_data.c
> @@ -3291,8 +3291,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),
> @@ -3329,8 +3327,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),
> @@ -3393,17 +3389,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 [flat|nested] 51+ messages in thread
* [PATCH v7 19/22] ARM: OMAP3: clock data: get rid of unused USB host clock aliases and dummies
2013-01-17 17:03 ` Tony Lindgren
@ 2013-01-17 19:00 ` Paul Walmsley
2013-01-17 21:00 ` Felipe Balbi
0 siblings, 1 reply; 51+ messages in thread
From: Paul Walmsley @ 2013-01-17 19:00 UTC (permalink / raw)
To: linux-arm-kernel
Hi Roger,
On Thu, 17 Jan 2013, Tony Lindgren wrote:
> * Roger Quadros <rogerq@ti.com> [130117 03:34]:
> > We don't need multiple aliases for the OMAP USB host clocks and neither
> > the dummy clocks so remove them.
>
> It's best that Paul queues this and the next patch as these clock alias
> clean-up patches can be done separately. That way the dependency between
> arch/arm/*omap* code is cut away as these files should be moved to live
> under drivers/clk/omap.
Per Tony's request, I'll queue these two cleanup patches for 3.10 -- or
whatever Linus will call it.
- Paul
^ permalink raw reply [flat|nested] 51+ messages in thread
* [PATCH v7 19/22] ARM: OMAP3: clock data: get rid of unused USB host clock aliases and dummies
2013-01-17 19:00 ` Paul Walmsley
@ 2013-01-17 21:00 ` Felipe Balbi
2013-01-17 22:29 ` Paul Walmsley
0 siblings, 1 reply; 51+ messages in thread
From: Felipe Balbi @ 2013-01-17 21:00 UTC (permalink / raw)
To: linux-arm-kernel
Hi,
On Thu, Jan 17, 2013 at 07:00:00PM +0000, Paul Walmsley wrote:
> Hi Roger,
>
> On Thu, 17 Jan 2013, Tony Lindgren wrote:
>
> > * Roger Quadros <rogerq@ti.com> [130117 03:34]:
> > > We don't need multiple aliases for the OMAP USB host clocks and neither
> > > the dummy clocks so remove them.
> >
> > It's best that Paul queues this and the next patch as these clock alias
> > clean-up patches can be done separately. That way the dependency between
> > arch/arm/*omap* code is cut away as these files should be moved to live
> > under drivers/clk/omap.
>
> Per Tony's request, I'll queue these two cleanup patches for 3.10 -- or
> whatever Linus will call it.
do you mean v3.9 ?
--
balbi
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 836 bytes
Desc: Digital signature
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20130117/6f1fd568/attachment.sig>
^ permalink raw reply [flat|nested] 51+ messages in thread
* [PATCH v7 19/22] ARM: OMAP3: clock data: get rid of unused USB host clock aliases and dummies
2013-01-17 21:00 ` Felipe Balbi
@ 2013-01-17 22:29 ` Paul Walmsley
2013-01-17 22:31 ` Tony Lindgren
2013-01-17 22:32 ` Felipe Balbi
0 siblings, 2 replies; 51+ messages in thread
From: Paul Walmsley @ 2013-01-17 22:29 UTC (permalink / raw)
To: linux-arm-kernel
On Thu, 17 Jan 2013, Felipe Balbi wrote:
> do you mean v3.9 ?
It sounds like the other patches need to be merged first before these
cleanups can be merged. So rather than adding a merge order dependency
during 3.9, it seems best to queue the non-essential clock cleanup side
for 3.10.
- Paul
^ permalink raw reply [flat|nested] 51+ messages in thread
* [PATCH v7 19/22] ARM: OMAP3: clock data: get rid of unused USB host clock aliases and dummies
2013-01-17 22:29 ` Paul Walmsley
@ 2013-01-17 22:31 ` Tony Lindgren
2013-01-17 22:38 ` Paul Walmsley
2013-01-17 22:32 ` Felipe Balbi
1 sibling, 1 reply; 51+ messages in thread
From: Tony Lindgren @ 2013-01-17 22:31 UTC (permalink / raw)
To: linux-arm-kernel
* Paul Walmsley <paul@pwsan.com> [130117 14:33]:
> On Thu, 17 Jan 2013, Felipe Balbi wrote:
>
> > do you mean v3.9 ?
>
> It sounds like the other patches need to be merged first before these
> cleanups can be merged. So rather than adding a merge order dependency
> during 3.9, it seems best to queue the non-essential clock cleanup side
> for 3.10.
How about let's do it in a late cleanup branch towards the end of the
v3.9 merge window?
Regards,
Tony
^ permalink raw reply [flat|nested] 51+ messages in thread
* [PATCH v7 19/22] ARM: OMAP3: clock data: get rid of unused USB host clock aliases and dummies
2013-01-17 22:29 ` Paul Walmsley
2013-01-17 22:31 ` Tony Lindgren
@ 2013-01-17 22:32 ` Felipe Balbi
1 sibling, 0 replies; 51+ messages in thread
From: Felipe Balbi @ 2013-01-17 22:32 UTC (permalink / raw)
To: linux-arm-kernel
On Thu, Jan 17, 2013 at 10:29:52PM +0000, Paul Walmsley wrote:
> On Thu, 17 Jan 2013, Felipe Balbi wrote:
>
> > do you mean v3.9 ?
>
> It sounds like the other patches need to be merged first before these
> cleanups can be merged. So rather than adding a merge order dependency
> during 3.9, it seems best to queue the non-essential clock cleanup side
> for 3.10.
got it
--
balbi
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 836 bytes
Desc: Digital signature
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20130118/4ebd110f/attachment.sig>
^ permalink raw reply [flat|nested] 51+ messages in thread
* [PATCH v7 19/22] ARM: OMAP3: clock data: get rid of unused USB host clock aliases and dummies
2013-01-17 22:31 ` Tony Lindgren
@ 2013-01-17 22:38 ` Paul Walmsley
0 siblings, 0 replies; 51+ messages in thread
From: Paul Walmsley @ 2013-01-17 22:38 UTC (permalink / raw)
To: linux-arm-kernel
On Thu, 17 Jan 2013, Tony Lindgren wrote:
> * Paul Walmsley <paul@pwsan.com> [130117 14:33]:
> > On Thu, 17 Jan 2013, Felipe Balbi wrote:
> >
> > > do you mean v3.9 ?
> >
> > It sounds like the other patches need to be merged first before these
> > cleanups can be merged. So rather than adding a merge order dependency
> > during 3.9, it seems best to queue the non-essential clock cleanup side
> > for 3.10.
>
> How about let's do it in a late cleanup branch towards the end of the
> v3.9 merge window?
That's fine with me too if the arm-soc folks are willing.
- Paul
^ permalink raw reply [flat|nested] 51+ messages in thread
* [PATCH v7 01/22] mfd: omap-usb-host: Consolidate OMAP USB-HS platform data
2013-01-17 16:59 ` Tony Lindgren
@ 2013-01-18 9:45 ` Roger Quadros
2013-02-11 6:46 ` Olof Johansson
1 sibling, 0 replies; 51+ messages in thread
From: Roger Quadros @ 2013-01-18 9:45 UTC (permalink / raw)
To: linux-arm-kernel
On 01/17/2013 06:59 PM, Tony Lindgren wrote:
> * Alan Stern <stern@rowland.harvard.edu> [130117 07:19]:
>> On Thu, 17 Jan 2013, Roger Quadros wrote:
>>
>>> Let's have a single platform data structure for the OMAP's High-Speed
>>> USB host subsystem instead of having 3 separate ones i.e. one for
>>> board data, one for USB Host (UHH) module and one for USB-TLL module.
>>>
>>> This makes the code much simpler and avoids creating multiple copies of
>>> platform data.
>>>
>>> CC: Alan Stern <stern@rowland.harvard.edu>
>>>
>>> Signed-off-by: Roger Quadros <rogerq@ti.com>
>>
>> For the ehci-omap.c part:
>>
>> Acked-by: Alan Stern <stern@rowland.harvard.edu>
>
> If Samuel acks this patch, I can apply just this patch alone on v3.8-rc3
> into an immutable branch omap-for-v3.9/board-usb so we all merge it in
> as needed.
>
I'll be sending a v8 of this series with one stable patch candidate
before this patch and Felipe's comments addressed.
--
cheers,
-roger
^ permalink raw reply [flat|nested] 51+ messages in thread
* [PATCH v7 01/22] mfd: omap-usb-host: Consolidate OMAP USB-HS platform data
2013-01-17 16:59 ` Tony Lindgren
2013-01-18 9:45 ` Roger Quadros
@ 2013-02-11 6:46 ` Olof Johansson
2013-02-11 7:58 ` Roger Quadros
1 sibling, 1 reply; 51+ messages in thread
From: Olof Johansson @ 2013-02-11 6:46 UTC (permalink / raw)
To: linux-arm-kernel
On Thu, Jan 17, 2013 at 8:59 AM, Tony Lindgren <tony@atomide.com> wrote:
> * Alan Stern <stern@rowland.harvard.edu> [130117 07:19]:
>> On Thu, 17 Jan 2013, Roger Quadros wrote:
>>
>> > Let's have a single platform data structure for the OMAP's High-Speed
>> > USB host subsystem instead of having 3 separate ones i.e. one for
>> > board data, one for USB Host (UHH) module and one for USB-TLL module.
>> >
>> > This makes the code much simpler and avoids creating multiple copies of
>> > platform data.
>> >
>> > CC: Alan Stern <stern@rowland.harvard.edu>
>> >
>> > Signed-off-by: Roger Quadros <rogerq@ti.com>
>>
>> For the ehci-omap.c part:
>>
>> Acked-by: Alan Stern <stern@rowland.harvard.edu>
>
> If Samuel acks this patch, I can apply just this patch alone on v3.8-rc3
> into an immutable branch omap-for-v3.9/board-usb so we all merge it in
> as needed.
So, that didn't happen; Samuel applied it from the mailing list and
sfr just hit merge conflicts due to it.
Sigh.
This patch (touching arch/arm/mach-omap2) didn't have acks from Tony either.
Samuel, Tony, can you sort this out with a stable short topic branch
as Tony suggested? It'd be nice to avoid the merge conflict by a
little coordination here. :(
-Olof
^ permalink raw reply [flat|nested] 51+ messages in thread
* [PATCH v7 01/22] mfd: omap-usb-host: Consolidate OMAP USB-HS platform data
2013-02-11 6:46 ` Olof Johansson
@ 2013-02-11 7:58 ` Roger Quadros
2013-02-11 19:02 ` Tony Lindgren
0 siblings, 1 reply; 51+ messages in thread
From: Roger Quadros @ 2013-02-11 7:58 UTC (permalink / raw)
To: linux-arm-kernel
On 02/11/2013 08:46 AM, Olof Johansson wrote:
> On Thu, Jan 17, 2013 at 8:59 AM, Tony Lindgren <tony@atomide.com> wrote:
>> * Alan Stern <stern@rowland.harvard.edu> [130117 07:19]:
>>> On Thu, 17 Jan 2013, Roger Quadros wrote:
>>>
>>>> Let's have a single platform data structure for the OMAP's High-Speed
>>>> USB host subsystem instead of having 3 separate ones i.e. one for
>>>> board data, one for USB Host (UHH) module and one for USB-TLL module.
>>>>
>>>> This makes the code much simpler and avoids creating multiple copies of
>>>> platform data.
>>>>
>>>> CC: Alan Stern <stern@rowland.harvard.edu>
>>>>
>>>> Signed-off-by: Roger Quadros <rogerq@ti.com>
>>>
>>> For the ehci-omap.c part:
>>>
>>> Acked-by: Alan Stern <stern@rowland.harvard.edu>
>>
>> If Samuel acks this patch, I can apply just this patch alone on v3.8-rc3
>> into an immutable branch omap-for-v3.9/board-usb so we all merge it in
>> as needed.
>
> So, that didn't happen; Samuel applied it from the mailing list and
> sfr just hit merge conflicts due to it.
>
> Sigh.
>
> This patch (touching arch/arm/mach-omap2) didn't have acks from Tony either.
Oops, this is my bad :(. Should have flagged Samuel about it. Will be more careful
next time.
>
> Samuel, Tony, can you sort this out with a stable short topic branch
> as Tony suggested? It'd be nice to avoid the merge conflict by a
> little coordination here. :(
>
>
cheers,
-roger
^ permalink raw reply [flat|nested] 51+ messages in thread
* [PATCH v7 01/22] mfd: omap-usb-host: Consolidate OMAP USB-HS platform data
2013-02-11 7:58 ` Roger Quadros
@ 2013-02-11 19:02 ` Tony Lindgren
0 siblings, 0 replies; 51+ messages in thread
From: Tony Lindgren @ 2013-02-11 19:02 UTC (permalink / raw)
To: linux-arm-kernel
* Roger Quadros <rogerq@ti.com> [130211 00:02]:
> On 02/11/2013 08:46 AM, Olof Johansson wrote:
> > On Thu, Jan 17, 2013 at 8:59 AM, Tony Lindgren <tony@atomide.com> wrote:
> >> * Alan Stern <stern@rowland.harvard.edu> [130117 07:19]:
> >>> On Thu, 17 Jan 2013, Roger Quadros wrote:
> >>>
> >>>> Let's have a single platform data structure for the OMAP's High-Speed
> >>>> USB host subsystem instead of having 3 separate ones i.e. one for
> >>>> board data, one for USB Host (UHH) module and one for USB-TLL module.
> >>>>
> >>>> This makes the code much simpler and avoids creating multiple copies of
> >>>> platform data.
> >>>>
> >>>> CC: Alan Stern <stern@rowland.harvard.edu>
> >>>>
> >>>> Signed-off-by: Roger Quadros <rogerq@ti.com>
> >>>
> >>> For the ehci-omap.c part:
> >>>
> >>> Acked-by: Alan Stern <stern@rowland.harvard.edu>
> >>
> >> If Samuel acks this patch, I can apply just this patch alone on v3.8-rc3
> >> into an immutable branch omap-for-v3.9/board-usb so we all merge it in
> >> as needed.
> >
> > So, that didn't happen; Samuel applied it from the mailing list and
> > sfr just hit merge conflicts due to it.
> >
> > Sigh.
> >
> > This patch (touching arch/arm/mach-omap2) didn't have acks from Tony either.
>
> Oops, this is my bad :(. Should have flagged Samuel about it. Will be more careful
> next time.
>
> >
> > Samuel, Tony, can you sort this out with a stable short topic branch
> > as Tony suggested? It'd be nice to avoid the merge conflict by a
> > little coordination here. :(
Let's see if Samuel can still drop these like I suggested in the
merge conflict mail from Stephen.
Regards,
Tony
^ permalink raw reply [flat|nested] 51+ messages in thread
end of thread, other threads:[~2013-02-11 19:02 UTC | newest]
Thread overview: 51+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-01-17 11:30 [PATCH v7 00/22] OMAP USB Host cleanup Roger Quadros
2013-01-17 11:30 ` [PATCH v7 01/22] mfd: omap-usb-host: Consolidate OMAP USB-HS platform data Roger Quadros
2013-01-17 15:16 ` Alan Stern
2013-01-17 16:59 ` Tony Lindgren
2013-01-18 9:45 ` Roger Quadros
2013-02-11 6:46 ` Olof Johansson
2013-02-11 7:58 ` Roger Quadros
2013-02-11 19:02 ` Tony Lindgren
2013-01-17 11:30 ` [PATCH v7 02/22] mfd: omap-usb-tll: Fix channel count detection Roger Quadros
2013-01-17 11:30 ` [PATCH v7 03/22] mfd: omap-usb-tll: Use devm_kzalloc/ioremap and clean up error path Roger Quadros
2013-01-17 11:30 ` [PATCH v7 04/22] mfd: omap-usb-tll: Clean up clock handling Roger Quadros
2013-01-17 11:30 ` [PATCH v7 05/22] mfd: omap-usb-tll: introduce and use mode_needs_tll() Roger Quadros
2013-01-17 11:30 ` [PATCH v7 06/22] mfd: omap-usb-tll: Check for missing platform data in probe Roger Quadros
2013-01-17 11:30 ` [PATCH v7 07/22] mfd: omap-usb-tll: Fix error message Roger Quadros
2013-01-17 11:30 ` [PATCH v7 08/22] mfd: omap-usb-tll: serialize access to TLL device Roger Quadros
2013-01-17 11:30 ` [PATCH v7 09/22] mfd: omap-usb-tll: Add OMAP5 revision and HSIC support Roger Quadros
2013-01-17 11:30 ` [PATCH v7 10/22] mfd: omap_usb_host: Avoid missing platform data checks in suspend/resume Roger Quadros
2013-01-17 11:30 ` [PATCH v7 11/22] mfd: omap-usb-host: Use devm_kzalloc() and devm_request_and_ioremap() Roger Quadros
2013-01-17 11:30 ` [PATCH v7 12/22] mfd: omap-usb-host: know about number of ports from revision register Roger Quadros
2013-01-17 11:30 ` [PATCH v7 13/22] mfd: omap-usb-host: override number of ports from platform data Roger Quadros
2013-01-17 11:30 ` [PATCH v7 14/22] mfd: omap-usb-host: cleanup clock management code Roger Quadros
2013-01-17 11:44 ` Felipe Balbi
2013-01-17 12:07 ` Roger Quadros
2013-01-17 11:30 ` [PATCH v7 15/22] mfd: omap-usb-host: Manage HSIC clocks for HSIC mode Roger Quadros
2013-01-17 11:45 ` Felipe Balbi
2013-01-17 12:10 ` Roger Quadros
2013-01-17 12:27 ` Felipe Balbi
2013-01-17 12:45 ` Roger Quadros
2013-01-17 12:48 ` Felipe Balbi
2013-01-17 11:30 ` [PATCH v7 16/22] mfd: omap-usb-host: Get rid of unnecessary spinlock Roger Quadros
2013-01-17 11:30 ` [PATCH v7 17/22] mfd: omap-usb-host: clean up omap_usbhs_init() Roger Quadros
2013-01-17 11:48 ` Felipe Balbi
2013-01-17 12:13 ` Roger Quadros
2013-01-17 11:30 ` [PATCH v7 18/22] USB: ehci-omap: Don't free gpios that we didn't request Roger Quadros
2013-01-17 11:48 ` Felipe Balbi
2013-01-17 12:46 ` Roger Quadros
2013-01-17 15:15 ` Alan Stern
2013-01-17 11:30 ` [PATCH v7 19/22] ARM: OMAP3: clock data: get rid of unused USB host clock aliases and dummies Roger Quadros
2013-01-17 17:03 ` Tony Lindgren
2013-01-17 19:00 ` Paul Walmsley
2013-01-17 21:00 ` Felipe Balbi
2013-01-17 22:29 ` Paul Walmsley
2013-01-17 22:31 ` Tony Lindgren
2013-01-17 22:38 ` Paul Walmsley
2013-01-17 22:32 ` Felipe Balbi
2013-01-17 11:30 ` [PATCH v7 20/22] ARM: OMAP4: clock data: get rid of unused USB host clock aliases Roger Quadros
2013-01-17 11:30 ` [PATCH v7 21/22] mfd: omap-usb-host: Don't spam console on clk_set_parent failure Roger Quadros
2013-01-17 11:30 ` [PATCH v7 22/22] mdf: omap-usb-host: get rid of build warning Roger Quadros
2013-01-17 11:50 ` Felipe Balbi
2013-01-17 13:30 ` Roger Quadros
2013-01-17 11:52 ` [PATCH v7 00/22] OMAP USB Host cleanup Felipe Balbi
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).