* [PATCH 0/7] TWL4030 Changes
@ 2008-03-19 13:42 Felipe Balbi
0 siblings, 0 replies; 13+ messages in thread
From: Felipe Balbi @ 2008-03-19 13:42 UTC (permalink / raw)
To: linux-omap
Hi all,
The following patches implements some clean ups in twl4030 driver
also let twl4030-usb.c initialize struct otg_transceiver and
deliver it to omap2430.c.
musb clock is now comming from musb_platform_data as it should
and we avoid clk_get():ing twice (on omap2430.c and musb_core.c)
TODO:
. twl4030-gpio.c: moves to gpiolib
. twl4030-usb.c: irq is not waking up the phy and
transceiver doesn't notify musb_core.c id pin
state.
For now that's all,
Thanks everybody.
As usual, comments are welcome
diffstat:
arch/arm/mach-omap2/board-2430sdp-usb.c | 27 +
arch/arm/mach-omap2/board-3430sdp-usb.c | 29 +-
arch/arm/mach-omap2/board-3430sdp.c | 2 +-
arch/arm/mach-omap2/board-sdp-hsmmc.c | 2 +-
drivers/i2c/chips/Makefile | 8 +-
drivers/i2c/chips/twl4030-core.c | 904 +++++++++++++++++++++++++++
drivers/i2c/chips/twl4030-gpio.c | 836 +++++++++++++++++++++++++
drivers/i2c/chips/twl4030-poweroff.c | 75 +++
drivers/i2c/chips/twl4030-usb.c | 784 +++++++++++++++++++++++
drivers/i2c/chips/twl4030_core.c | 900 --------------------------
drivers/i2c/chips/twl4030_gpio.c | 836 -------------------------
drivers/i2c/chips/twl4030_poweroff.c | 75 ---
drivers/i2c/chips/twl4030_usb.c | 693 --------------------
drivers/input/keyboard/omap-twl4030keypad.c | 2 +-
drivers/rtc/rtc-twl4030.c | 4 +-
drivers/usb/musb/musb_core.h | 4 +-
drivers/usb/musb/omap2430.c | 34 +-
drivers/usb/musb/omap2430.h | 8 -
include/asm-arm/arch-omap/twl4030-rtc.h | 230 -------
include/asm-arm/arch-omap/twl4030.h | 118 ----
include/linux/i2c/twl4030-rtc.h | 230 +++++++
include/linux/i2c/twl4030.h | 118 ++++
22 files changed, 3028 insertions(+), 2891 deletions(-)
br,
- Balbi
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH 0/7] twl4030 changes
@ 2008-03-27 17:16 Felipe Balbi
2008-03-27 17:16 ` [PATCH 1/7] I2C: TWL4030: Move twl4030's headers under include/linux/i2c/ Felipe Balbi
2008-03-28 7:49 ` [PATCH 0/7] twl4030 changes Tony Lindgren
0 siblings, 2 replies; 13+ messages in thread
From: Felipe Balbi @ 2008-03-27 17:16 UTC (permalink / raw)
To: linux-omap; +Cc: Felipe Balbi
Hi Tony,
I'm resending this series cuz I changed a bit patch #5 to set
session bit on musb_platform_set_mode so musb core will really
go to a_host mode when we echo sysfs.
Without this small change the sysfs interface will work only with
a few devices, most likely usb sticks.
Below is a shortlog and diffstat of the changes.
Best regards,
- Balbi
Felipe Balbi (7):
I2C: TWL4030: Move twl4030's headers under include/linux/i2c/
I2C: TWL4030: Move all *_*.c to *-*.c
I2C: TWL4030: General cleanup in twl4030-core.c
I2C: TWL4030: Cleanup twl4030-usb.c
I2C: TWL4030: Make twl4030-usb.c initialize otg_transceiver
I2C: TWL4030: Reorganize code in twl4030-usb.c
USB: MUSB: Let board specific code handle clock initialization
arch/arm/mach-omap2/board-2430sdp-usb.c | 27 ++
arch/arm/mach-omap2/board-3430sdp-usb.c | 29 ++-
arch/arm/mach-omap2/board-3430sdp.c | 2 +-
arch/arm/mach-omap2/board-sdp-hsmmc.c | 2 +-
drivers/i2c/chips/Makefile | 8 +-
.../i2c/chips/{twl4030_core.c => twl4030-core.c} | 80 ++++---
.../i2c/chips/{twl4030_gpio.c => twl4030-gpio.c} | 2 +-
.../{twl4030_poweroff.c => twl4030-poweroff.c} | 2 +-
drivers/i2c/chips/{twl4030_usb.c => twl4030-usb.c} | 255 +++++++++++++-------
drivers/input/keyboard/omap-twl4030keypad.c | 2 +-
drivers/rtc/rtc-twl4030.c | 4 +-
drivers/usb/musb/musb_core.h | 4 +-
drivers/usb/musb/omap2430.c | 39 ++--
drivers/usb/musb/omap2430.h | 8 -
.../{asm-arm/arch-omap => linux/i2c}/twl4030-rtc.h | 0
include/{asm-arm/arch-omap => linux/i2c}/twl4030.h | 0
16 files changed, 303 insertions(+), 161 deletions(-)
rename drivers/i2c/chips/{twl4030_core.c => twl4030-core.c} (93%)
rename drivers/i2c/chips/{twl4030_gpio.c => twl4030-gpio.c} (99%)
rename drivers/i2c/chips/{twl4030_poweroff.c => twl4030-poweroff.c} (98%)
rename drivers/i2c/chips/{twl4030_usb.c => twl4030-usb.c} (87%)
rename include/{asm-arm/arch-omap => linux/i2c}/twl4030-rtc.h (100%)
rename include/{asm-arm/arch-omap => linux/i2c}/twl4030.h (100%)
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH 1/7] I2C: TWL4030: Move twl4030's headers under include/linux/i2c/
2008-03-27 17:16 [PATCH 0/7] twl4030 changes Felipe Balbi
@ 2008-03-27 17:16 ` Felipe Balbi
2008-03-27 17:16 ` [PATCH 2/7] I2C: TWL4030: Move all *_*.c to *-*.c Felipe Balbi
2008-03-28 7:49 ` [PATCH 0/7] twl4030 changes Tony Lindgren
1 sibling, 1 reply; 13+ messages in thread
From: Felipe Balbi @ 2008-03-27 17:16 UTC (permalink / raw)
To: linux-omap; +Cc: Felipe Balbi
Now that we have this directory we can use it.
Signed-off-by: Felipe Balbi <felipe.balbi@nokia.com>
---
arch/arm/mach-omap2/board-3430sdp.c | 2 +-
arch/arm/mach-omap2/board-sdp-hsmmc.c | 2 +-
drivers/i2c/chips/twl4030_core.c | 2 +-
drivers/i2c/chips/twl4030_gpio.c | 2 +-
drivers/i2c/chips/twl4030_poweroff.c | 2 +-
drivers/i2c/chips/twl4030_usb.c | 2 +-
drivers/input/keyboard/omap-twl4030keypad.c | 2 +-
drivers/rtc/rtc-twl4030.c | 4 ++--
.../{asm-arm/arch-omap => linux/i2c}/twl4030-rtc.h | 0
include/{asm-arm/arch-omap => linux/i2c}/twl4030.h | 0
10 files changed, 9 insertions(+), 9 deletions(-)
rename include/{asm-arm/arch-omap => linux/i2c}/twl4030-rtc.h (100%)
rename include/{asm-arm/arch-omap => linux/i2c}/twl4030.h (100%)
diff --git a/arch/arm/mach-omap2/board-3430sdp.c b/arch/arm/mach-omap2/board-3430sdp.c
index f3a316f..1eb84a6 100644
--- a/arch/arm/mach-omap2/board-3430sdp.c
+++ b/arch/arm/mach-omap2/board-3430sdp.c
@@ -20,6 +20,7 @@
#include <linux/workqueue.h>
#include <linux/err.h>
#include <linux/clk.h>
+#include <linux/i2c/twl4030.h>
#include <linux/spi/spi.h>
#include <linux/spi/ads7846.h>
@@ -28,7 +29,6 @@
#include <asm/mach/arch.h>
#include <asm/mach/map.h>
-#include <asm/arch/twl4030.h>
#include <asm/arch/mcspi.h>
#include <asm/arch/gpio.h>
#include <asm/arch/mux.h>
diff --git a/arch/arm/mach-omap2/board-sdp-hsmmc.c b/arch/arm/mach-omap2/board-sdp-hsmmc.c
index 7661a79..3ae5b20 100644
--- a/arch/arm/mach-omap2/board-sdp-hsmmc.c
+++ b/arch/arm/mach-omap2/board-sdp-hsmmc.c
@@ -13,8 +13,8 @@
#include <linux/platform_device.h>
#include <linux/interrupt.h>
#include <linux/delay.h>
+#include <linux/i2c/twl4030.h>
#include <asm/hardware.h>
-#include <asm/arch/twl4030.h>
#include <asm/arch/mmc.h>
#include <asm/arch/board.h>
#include <asm/io.h>
diff --git a/drivers/i2c/chips/twl4030_core.c b/drivers/i2c/chips/twl4030_core.c
index e733195..4f0f465 100644
--- a/drivers/i2c/chips/twl4030_core.c
+++ b/drivers/i2c/chips/twl4030_core.c
@@ -38,6 +38,7 @@
#include <linux/kthread.h>
#include <linux/i2c.h>
+#include <linux/i2c/twl4030.h>
#include <linux/slab.h>
#include <linux/clk.h>
#include <linux/device.h>
@@ -45,7 +46,6 @@
#include <asm/irq.h>
#include <asm/mach/irq.h>
-#include <asm/arch/twl4030.h>
#include <asm/arch/gpio.h>
#include <asm/arch/mux.h>
diff --git a/drivers/i2c/chips/twl4030_gpio.c b/drivers/i2c/chips/twl4030_gpio.c
index 9054cc9..a9f3b1d 100644
--- a/drivers/i2c/chips/twl4030_gpio.c
+++ b/drivers/i2c/chips/twl4030_gpio.c
@@ -36,9 +36,9 @@
#include <linux/kthread.h>
#include <linux/i2c.h>
+#include <linux/i2c/twl4030.h>
#include <linux/slab.h>
-#include <asm/arch/twl4030.h>
#include <asm/arch/irqs.h>
#include <asm/irq.h>
#include <asm/mach/irq.h>
diff --git a/drivers/i2c/chips/twl4030_poweroff.c b/drivers/i2c/chips/twl4030_poweroff.c
index 7a176d9..dbe413a 100644
--- a/drivers/i2c/chips/twl4030_poweroff.c
+++ b/drivers/i2c/chips/twl4030_poweroff.c
@@ -23,7 +23,7 @@
#include <linux/module.h>
#include <linux/pm.h>
-#include <asm/arch/twl4030.h>
+#include <linux/i2c/twl4030.h>
#define PWR_P1_SW_EVENTS 0x10
#define PWR_DEVOFF (1<<0)
diff --git a/drivers/i2c/chips/twl4030_usb.c b/drivers/i2c/chips/twl4030_usb.c
index b3365f6..cf86d3e 100644
--- a/drivers/i2c/chips/twl4030_usb.c
+++ b/drivers/i2c/chips/twl4030_usb.c
@@ -29,7 +29,7 @@
#include <linux/interrupt.h>
#include <linux/usb.h>
-#include <asm/arch/twl4030.h>
+#include <linux/i2c/twl4030.h>
/* Register defines */
diff --git a/drivers/input/keyboard/omap-twl4030keypad.c b/drivers/input/keyboard/omap-twl4030keypad.c
index 4750dba..3bc3045 100644
--- a/drivers/input/keyboard/omap-twl4030keypad.c
+++ b/drivers/input/keyboard/omap-twl4030keypad.c
@@ -33,9 +33,9 @@
#include <linux/delay.h>
#include <linux/platform_device.h>
#include <linux/i2c.h>
+#include <linux/i2c/twl4030.h>
#include <asm/irq.h>
#include <asm/arch/keypad.h>
-#include <asm/arch/twl4030.h>
#include "twl4030-keypad.h"
#define OMAP_TWL4030KP_LOG_LEVEL 0
diff --git a/drivers/rtc/rtc-twl4030.c b/drivers/rtc/rtc-twl4030.c
index b50de5f..929a788 100644
--- a/drivers/rtc/rtc-twl4030.c
+++ b/drivers/rtc/rtc-twl4030.c
@@ -34,14 +34,14 @@
#include <linux/spinlock.h>
#include <linux/interrupt.h>
#include <linux/device.h>
+#include <linux/i2c/twl4030.h>
+#include <linux/i2c/twl4030-rtc.h>
#include <asm/io.h>
#include <asm/mach/time.h>
#include <asm/system.h>
#include <asm/hardware.h>
#include <asm/irq.h>
-#include <asm/arch/twl4030.h>
-#include <asm/arch/twl4030-rtc.h>
#define ALL_TIME_REGS 6
diff --git a/include/asm-arm/arch-omap/twl4030-rtc.h b/include/linux/i2c/twl4030-rtc.h
similarity index 100%
rename from include/asm-arm/arch-omap/twl4030-rtc.h
rename to include/linux/i2c/twl4030-rtc.h
diff --git a/include/asm-arm/arch-omap/twl4030.h b/include/linux/i2c/twl4030.h
similarity index 100%
rename from include/asm-arm/arch-omap/twl4030.h
rename to include/linux/i2c/twl4030.h
--
1.5.5.rc1.12.g660b9
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH 2/7] I2C: TWL4030: Move all *_*.c to *-*.c
2008-03-27 17:16 ` [PATCH 1/7] I2C: TWL4030: Move twl4030's headers under include/linux/i2c/ Felipe Balbi
@ 2008-03-27 17:16 ` Felipe Balbi
2008-03-27 17:16 ` [PATCH 3/7] I2C: TWL4030: General cleanup in twl4030-core.c Felipe Balbi
0 siblings, 1 reply; 13+ messages in thread
From: Felipe Balbi @ 2008-03-27 17:16 UTC (permalink / raw)
To: linux-omap; +Cc: Felipe Balbi
Rename to use the name style.
Signed-off-by: Felipe Balbi <felipe.balbi@nokia.com>
---
drivers/i2c/chips/Makefile | 8 ++++----
.../i2c/chips/{twl4030_core.c => twl4030-core.c} | 0
.../i2c/chips/{twl4030_gpio.c => twl4030-gpio.c} | 0
.../{twl4030_poweroff.c => twl4030-poweroff.c} | 0
drivers/i2c/chips/{twl4030_usb.c => twl4030-usb.c} | 0
5 files changed, 4 insertions(+), 4 deletions(-)
rename drivers/i2c/chips/{twl4030_core.c => twl4030-core.c} (100%)
rename drivers/i2c/chips/{twl4030_gpio.c => twl4030-gpio.c} (100%)
rename drivers/i2c/chips/{twl4030_poweroff.c => twl4030-poweroff.c} (100%)
rename drivers/i2c/chips/{twl4030_usb.c => twl4030-usb.c} (100%)
diff --git a/drivers/i2c/chips/Makefile b/drivers/i2c/chips/Makefile
index 939ef5c..255fbb1 100644
--- a/drivers/i2c/chips/Makefile
+++ b/drivers/i2c/chips/Makefile
@@ -22,10 +22,10 @@ obj-$(CONFIG_SENSORS_TLV320AIC23) += tlv320aic23.o
obj-$(CONFIG_GPIOEXPANDER_OMAP) += gpio_expander_omap.o
obj-$(CONFIG_MENELAUS) += menelaus.o
obj-$(CONFIG_SENSORS_TSL2550) += tsl2550.o
-obj-$(CONFIG_TWL4030_CORE) += twl4030_core.o
-obj-$(CONFIG_TWL4030_GPIO) += twl4030_gpio.o
-obj-$(CONFIG_TWL4030_USB) += twl4030_usb.o
-obj-$(CONFIG_TWL4030_POWEROFF) += twl4030_poweroff.o
+obj-$(CONFIG_TWL4030_CORE) += twl4030-core.o
+obj-$(CONFIG_TWL4030_GPIO) += twl4030-gpio.o
+obj-$(CONFIG_TWL4030_USB) += twl4030-usb.o
+obj-$(CONFIG_TWL4030_POWEROFF) += twl4030-poweroff.o
obj-$(CONFIG_RTC_X1205_I2C) += x1205.o
ifeq ($(CONFIG_I2C_DEBUG_CHIP),y)
diff --git a/drivers/i2c/chips/twl4030_core.c b/drivers/i2c/chips/twl4030-core.c
similarity index 100%
rename from drivers/i2c/chips/twl4030_core.c
rename to drivers/i2c/chips/twl4030-core.c
diff --git a/drivers/i2c/chips/twl4030_gpio.c b/drivers/i2c/chips/twl4030-gpio.c
similarity index 100%
rename from drivers/i2c/chips/twl4030_gpio.c
rename to drivers/i2c/chips/twl4030-gpio.c
diff --git a/drivers/i2c/chips/twl4030_poweroff.c b/drivers/i2c/chips/twl4030-poweroff.c
similarity index 100%
rename from drivers/i2c/chips/twl4030_poweroff.c
rename to drivers/i2c/chips/twl4030-poweroff.c
diff --git a/drivers/i2c/chips/twl4030_usb.c b/drivers/i2c/chips/twl4030-usb.c
similarity index 100%
rename from drivers/i2c/chips/twl4030_usb.c
rename to drivers/i2c/chips/twl4030-usb.c
--
1.5.5.rc1.12.g660b9
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH 3/7] I2C: TWL4030: General cleanup in twl4030-core.c
2008-03-27 17:16 ` [PATCH 2/7] I2C: TWL4030: Move all *_*.c to *-*.c Felipe Balbi
@ 2008-03-27 17:16 ` Felipe Balbi
2008-03-27 17:16 ` [PATCH 4/7] I2C: TWL4030: Cleanup twl4030-usb.c Felipe Balbi
0 siblings, 1 reply; 13+ messages in thread
From: Felipe Balbi @ 2008-03-27 17:16 UTC (permalink / raw)
To: linux-omap; +Cc: Felipe Balbi
General cleanup in twl4030-core.c
Signed-off-by: Felipe Balbi <felipe.balbi@nokia.com>
---
drivers/i2c/chips/twl4030-core.c | 78 ++++++++++++++++++++------------------
1 files changed, 41 insertions(+), 37 deletions(-)
diff --git a/drivers/i2c/chips/twl4030-core.c b/drivers/i2c/chips/twl4030-core.c
index 4f0f465..c979241 100644
--- a/drivers/i2c/chips/twl4030-core.c
+++ b/drivers/i2c/chips/twl4030-core.c
@@ -32,6 +32,7 @@
#include <linux/kernel_stat.h>
#include <linux/init.h>
#include <linux/time.h>
+#include <linux/mutex.h>
#include <linux/interrupt.h>
#include <linux/random.h>
#include <linux/syscalls.h>
@@ -158,7 +159,7 @@ struct twl4030_client {
struct i2c_msg xfer_msg[2];
/* To lock access to xfer_msg */
- struct semaphore xfer_lock;
+ struct mutex xfer_lock;
};
/* Module Mapping */
@@ -218,7 +219,10 @@ static struct twl4030_client twl4030_modules[TWL4030_NUM_SLAVES] = {
/* One Client Driver , 4 Clients */
static struct i2c_driver twl4030_driver = {
- .driver.name = "TWL4030 I2C",
+ .driver = {
+ .name = DRIVER_NAME,
+ .owner = THIS_MODULE,
+ },
.attach_adapter = twl4030_attach_adapter,
.detach_client = twl4030_detach_client,
};
@@ -256,7 +260,7 @@ int twl4030_i2c_write(u8 mod_no, u8 * value, u8 reg, u8 num_bytes)
{
int ret;
int sid;
- struct twl4030_client *client;
+ struct twl4030_client *twl;
struct i2c_msg *msg;
if (unlikely(mod_no > TWL4030_MODULE_LAST)) {
@@ -264,27 +268,27 @@ int twl4030_i2c_write(u8 mod_no, u8 * value, u8 reg, u8 num_bytes)
return -EPERM;
}
sid = twl4030_map[mod_no].sid;
- client = &(twl4030_modules[sid]);
+ twl = &twl4030_modules[sid];
- if (unlikely(client->inuse != TWL_CLIENT_USED)) {
+ if (unlikely(twl->inuse != TWL_CLIENT_USED)) {
pr_err("I2C Client[%d] is not initialized[%d]\n",
sid, __LINE__);
return -EPERM;
}
- down(&(client->xfer_lock));
+ mutex_lock(&twl->xfer_lock);
/*
* [MSG1]: fill the register address data
* fill the data Tx buffer
*/
- msg = &(client->xfer_msg[0]);
- msg->addr = client->address;
+ msg = &twl->xfer_msg[0];
+ msg->addr = twl->address;
msg->len = num_bytes + 1;
msg->flags = 0;
msg->buf = value;
/* over write the first byte of buffer with the register address */
*value = twl4030_map[mod_no].base + reg;
- ret = i2c_transfer(client->client.adapter, client->xfer_msg, 1);
- up(&(client->xfer_lock));
+ ret = i2c_transfer(twl->client.adapter, twl->xfer_msg, 1);
+ mutex_unlock(&twl->xfer_lock);
/* i2cTransfer returns num messages.translate it pls.. */
if (ret >= 0)
@@ -307,7 +311,7 @@ int twl4030_i2c_read(u8 mod_no, u8 * value, u8 reg, u8 num_bytes)
int ret;
u8 val;
int sid;
- struct twl4030_client *client;
+ struct twl4030_client *twl;
struct i2c_msg *msg;
if (unlikely(mod_no > TWL4030_MODULE_LAST)) {
@@ -315,29 +319,29 @@ int twl4030_i2c_read(u8 mod_no, u8 * value, u8 reg, u8 num_bytes)
return -EPERM;
}
sid = twl4030_map[mod_no].sid;
- client = &(twl4030_modules[sid]);
+ twl = &twl4030_modules[sid];
- if (unlikely(client->inuse != TWL_CLIENT_USED)) {
+ if (unlikely(twl->inuse != TWL_CLIENT_USED)) {
pr_err("I2C Client[%d] is not initialized[%d]\n", sid,
__LINE__);
return -EPERM;
}
- down(&(client->xfer_lock));
+ mutex_lock(&twl->xfer_lock);
/* [MSG1] fill the register address data */
- msg = &(client->xfer_msg[0]);
- msg->addr = client->address;
+ msg = &twl->xfer_msg[0];
+ msg->addr = twl->address;
msg->len = 1;
msg->flags = 0; /* Read the register value */
val = twl4030_map[mod_no].base + reg;
msg->buf = &val;
/* [MSG2] fill the data rx buffer */
- msg = &(client->xfer_msg[1]);
- msg->addr = client->address;
+ msg = &twl->xfer_msg[1];
+ msg->addr = twl->address;
msg->flags = I2C_M_RD; /* Read the register value */
msg->len = num_bytes; /* only n bytes */
msg->buf = value;
- ret = i2c_transfer(client->client.adapter, client->xfer_msg, 2);
- up(&(client->xfer_lock));
+ ret = i2c_transfer(twl->client.adapter, twl->xfer_msg, 2);
+ mutex_unlock(&twl->xfer_lock);
/* i2cTransfer returns num messages.translate it pls.. */
if (ret >= 0)
@@ -530,7 +534,7 @@ static void do_twl4030_irq(unsigned int irq, irq_desc_t *desc)
static int twl4030_detect_client(struct i2c_adapter *adapter, unsigned char sid)
{
int err = 0;
- struct twl4030_client *client;
+ struct twl4030_client *twl;
if (unlikely(sid >= TWL4030_NUM_SLAVES)) {
pr_err("sid[%d] > MOD_LAST[%d]\n", sid, TWL4030_NUM_SLAVES);
@@ -543,30 +547,30 @@ static int twl4030_detect_client(struct i2c_adapter *adapter, unsigned char sid)
pr_err("SlaveID=%d functionality check failed\n", sid);
return err;
}
- client = &(twl4030_modules[sid]);
- if (unlikely(client->inuse)) {
- pr_err("Client %s is already in use\n", client->client_name);
+ twl = &twl4030_modules[sid];
+ if (unlikely(twl->inuse)) {
+ pr_err("Client %s is already in use\n", twl->client_name);
return -EPERM;
}
- memset(&(client->client), 0, sizeof(struct i2c_client));
+ memset(&twl->client, 0, sizeof(struct i2c_client));
- client->client.addr = client->address;
- client->client.adapter = adapter;
- client->client.driver = &twl4030_driver;
+ twl->client.addr = twl->address;
+ twl->client.adapter = adapter;
+ twl->client.driver = &twl4030_driver;
- memcpy(&(client->client.name), client->client_name,
+ memcpy(&twl->client.name, twl->client_name,
sizeof(TWL_CLIENT_STRING) + 1);
pr_info("TWL4030: TRY attach Slave %s on Adapter %s [%x]\n",
- client->client_name, adapter->name, err);
+ twl->client_name, adapter->name, err);
- if ((err = i2c_attach_client(&(client->client)))) {
+ if ((err = i2c_attach_client(&twl->client))) {
pr_err("Couldn't attach Slave %s on Adapter"
- "%s [%x]\n", client->client_name, adapter->name, err);
+ "%s [%x]\n", twl->client_name, adapter->name, err);
} else {
- client->inuse = TWL_CLIENT_USED;
- init_MUTEX(&client->xfer_lock);
+ twl->inuse = TWL_CLIENT_USED;
+ mutex_init(&twl->xfer_lock);
}
return err;
@@ -607,17 +611,17 @@ free_client:
while (i >= 0) {
/* now remove all those from the current adapter... */
if (twl4030_modules[i].adapter_index == twl_i2c_adapter)
- (void)twl4030_detach_client(&(twl4030_modules[i].client));
+ (void)twl4030_detach_client(&twl4030_modules[i].client);
i--;
}
return ret;
}
/* adapter's callback */
-static int twl4030_detach_client(struct i2c_client *iclient)
+static int twl4030_detach_client(struct i2c_client *client)
{
int err;
- if ((err = i2c_detach_client(iclient))) {
+ if ((err = i2c_detach_client(client))) {
pr_err("Client detach failed\n");
return err;
}
--
1.5.5.rc1.12.g660b9
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH 4/7] I2C: TWL4030: Cleanup twl4030-usb.c
2008-03-27 17:16 ` [PATCH 3/7] I2C: TWL4030: General cleanup in twl4030-core.c Felipe Balbi
@ 2008-03-27 17:16 ` Felipe Balbi
2008-03-27 17:16 ` [PATCH 5/7] I2C: TWL4030: Make twl4030-usb.c initialize otg_transceiver Felipe Balbi
0 siblings, 1 reply; 13+ messages in thread
From: Felipe Balbi @ 2008-03-27 17:16 UTC (permalink / raw)
To: linux-omap; +Cc: Felipe Balbi
General cleanup on twl4030-usb.c
Signed-off-by: Felipe Balbi <felipe.balbi@nokia.com>
---
drivers/i2c/chips/twl4030-usb.c | 27 +++++++++++++--------------
drivers/usb/musb/omap2430.c | 1 -
2 files changed, 13 insertions(+), 15 deletions(-)
diff --git a/drivers/i2c/chips/twl4030-usb.c b/drivers/i2c/chips/twl4030-usb.c
index cf86d3e..eca5aef 100644
--- a/drivers/i2c/chips/twl4030-usb.c
+++ b/drivers/i2c/chips/twl4030-usb.c
@@ -28,7 +28,6 @@
#include <linux/time.h>
#include <linux/interrupt.h>
#include <linux/usb.h>
-
#include <linux/i2c/twl4030.h>
/* Register defines */
@@ -248,6 +247,18 @@
/*-------------------------------------------------------------------------*/
+struct twl4030_usb {
+ int irq;
+ u8 usb_mode; /* pin configuration */
+#define T2_USB_MODE_ULPI 1
+/* #define T2_USB_MODE_CEA2011_3PIN 2 */
+ u8 asleep;
+};
+
+static struct twl4030_usb *the_transceiver;
+
+/*-------------------------------------------------------------------------*/
+
static int twl4030_i2c_write_u8_verify(u8 module, u8 data, u8 address)
{
u8 check;
@@ -307,18 +318,6 @@ static inline int twl4030_usb_read(u8 address)
/*-------------------------------------------------------------------------*/
-struct twl4030_usb {
- int irq;
- u8 usb_mode; /* pin configuration */
-#define T2_USB_MODE_ULPI 1
-/* #define T2_USB_MODE_CEA2011_3PIN 2 */
- u8 asleep;
-};
-
-static struct twl4030_usb *the_transceiver;
-
-/*-------------------------------------------------------------------------*/
-
static inline int
twl4030_usb_set_bits(struct twl4030_usb *twl, u8 reg, u8 bits)
{
@@ -616,7 +615,7 @@ static int __init twl4030_usb_init(void)
if (the_transceiver)
return 0;
- twl = kcalloc(1, sizeof *twl, GFP_KERNEL);
+ twl = kzalloc(sizeof *twl, GFP_KERNEL);
if (!twl)
return 0;
diff --git a/drivers/usb/musb/omap2430.c b/drivers/usb/musb/omap2430.c
index e19a15e..eacd6c4 100644
--- a/drivers/usb/musb/omap2430.c
+++ b/drivers/usb/musb/omap2430.c
@@ -227,7 +227,6 @@ int __init musb_platform_init(struct musb *musb)
omap_vbus_power(musb, musb->board_mode == MUSB_HOST, 1);
-
if (is_host_enabled(musb))
musb->board_set_vbus = omap_set_vbus;
if (is_peripheral_enabled(musb))
--
1.5.5.rc1.12.g660b9
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH 5/7] I2C: TWL4030: Make twl4030-usb.c initialize otg_transceiver
2008-03-27 17:16 ` [PATCH 4/7] I2C: TWL4030: Cleanup twl4030-usb.c Felipe Balbi
@ 2008-03-27 17:16 ` Felipe Balbi
2008-03-27 17:16 ` [PATCH 6/7] I2C: TWL4030: Reorganize code in twl4030-usb.c Felipe Balbi
0 siblings, 1 reply; 13+ messages in thread
From: Felipe Balbi @ 2008-03-27 17:16 UTC (permalink / raw)
To: linux-omap; +Cc: Felipe Balbi
Code still needs some reorganization which will come in later
patches but we can already put omap3 in host mode by echo:ing
sysfs node.
Signed-off-by: Felipe Balbi <felipe.balbi@nokia.com>
---
drivers/i2c/chips/twl4030-usb.c | 111 ++++++++++++++++++++++++++++++++++++---
drivers/usb/musb/musb_core.h | 4 +-
drivers/usb/musb/omap2430.c | 30 +++++++---
drivers/usb/musb/omap2430.h | 8 ---
4 files changed, 126 insertions(+), 27 deletions(-)
diff --git a/drivers/i2c/chips/twl4030-usb.c b/drivers/i2c/chips/twl4030-usb.c
index eca5aef..136e1c6 100644
--- a/drivers/i2c/chips/twl4030-usb.c
+++ b/drivers/i2c/chips/twl4030-usb.c
@@ -28,7 +28,11 @@
#include <linux/time.h>
#include <linux/interrupt.h>
#include <linux/usb.h>
+#include <linux/usb/ch9.h>
+#include <linux/usb/gadget.h>
+#include <linux/usb/otg.h>
#include <linux/i2c/twl4030.h>
+#include <asm/arch/usb.h>
/* Register defines */
@@ -245,9 +249,28 @@
#define REG_PWR_SIH_CTRL 0x07
#define COR (1 << 2)
+/* internal define on top of container_of */
+#define xceiv_to_twl(x) container_of((x), struct twl4030_usb, otg);
+
+/* bits in OTG_CTRL_REG */
+
+#define OTG_XCEIV_OUTPUTS \
+ (OTG_ASESSVLD|OTG_BSESSEND|OTG_BSESSVLD|OTG_VBUSVLD|OTG_ID)
+#define OTG_XCEIV_INPUTS \
+ (OTG_PULLDOWN|OTG_PULLUP|OTG_DRV_VBUS|OTG_PD_VBUS|OTG_PU_VBUS|OTG_PU_ID)
+#define OTG_CTRL_BITS \
+ (OTG_A_BUSREQ|OTG_A_SETB_HNPEN|OTG_B_BUSREQ|OTG_B_HNPEN|OTG_BUSDROP)
+ /* and OTG_PULLUP is sometimes written */
+
+#define OTG_CTRL_MASK (OTG_DRIVER_SEL| \
+ OTG_XCEIV_OUTPUTS|OTG_XCEIV_INPUTS| \
+ OTG_CTRL_BITS)
+
+
/*-------------------------------------------------------------------------*/
struct twl4030_usb {
+ struct otg_transceiver otg;
int irq;
u8 usb_mode; /* pin configuration */
#define T2_USB_MODE_ULPI 1
@@ -328,6 +351,7 @@ static inline int
twl4030_usb_clear_bits(struct twl4030_usb *twl, u8 reg, u8 bits)
{
return twl4030_usb_write(reg + 2, bits);
+
}
/*-------------------------------------------------------------------------*/
@@ -472,8 +496,8 @@ static void usb_irq_disable(void)
return;
}
-void twl4030_phy_suspend(int controller_off);
-void twl4030_phy_resume(void);
+static void twl4030_phy_suspend(int controller_off);
+static void twl4030_phy_resume(void);
static irqreturn_t twl4030_usb_irq(int irq, void *_twl)
{
@@ -565,7 +589,7 @@ static void twl4030_usb_ldo_init(struct twl4030_usb *twl)
twl4030_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER, 0, PROTECT_KEY);
}
-void twl4030_phy_suspend(int controller_off)
+static void twl4030_phy_suspend(int controller_off)
{
struct twl4030_usb *twl = the_transceiver;
@@ -583,10 +607,8 @@ void twl4030_phy_suspend(int controller_off)
twl->asleep = 1;
return;
}
-EXPORT_SYMBOL(twl4030_phy_suspend);
-
-void twl4030_phy_resume(void)
+static void twl4030_phy_resume(void)
{
struct twl4030_usb *twl = the_transceiver;
@@ -604,8 +626,76 @@ void twl4030_phy_resume(void)
twl->asleep = 0;
return;
}
-EXPORT_SYMBOL(twl4030_phy_resume);
+static int twl4030_set_suspend(struct otg_transceiver *x, int suspend)
+{
+ if (suspend)
+ twl4030_phy_suspend(1);
+ else
+ twl4030_phy_resume();
+
+ return 0;
+}
+
+static int twl4030_set_peripheral(struct otg_transceiver *xceiv, struct usb_gadget *gadget)
+{
+ struct twl4030_usb *twl = xceiv_to_twl(xceiv);
+
+ if (!xceiv)
+ return -ENODEV;
+
+ if (!gadget) {
+ OTG_IRQ_EN_REG = 0;
+ twl4030_phy_suspend(1);
+ twl->otg.gadget = NULL;
+
+ return -ENODEV;
+ }
+
+ twl->otg.gadget = gadget;
+ twl4030_phy_resume();
+
+ OTG_CTRL_REG = (OTG_CTRL_REG & OTG_CTRL_MASK
+ & ~(OTG_XCEIV_OUTPUTS|OTG_CTRL_BITS))
+ | OTG_ID;
+
+ twl->otg.state = OTG_STATE_B_IDLE;
+
+ twl4030_usb_set_bits(twl, USB_INT_EN_RISE,
+ USB_INT_SESSVALID | USB_INT_VBUSVALID);
+ twl4030_usb_set_bits(twl, USB_INT_EN_FALL,
+ USB_INT_SESSVALID | USB_INT_VBUSVALID);
+
+ return 0;
+}
+
+static int twl4030_set_host(struct otg_transceiver *xceiv, struct usb_bus *host)
+{
+ struct twl4030_usb *twl = xceiv_to_twl(xceiv);
+
+ if (!xceiv)
+ return -ENODEV;
+
+ if (!host) {
+ OTG_IRQ_EN_REG = 0;
+ twl4030_phy_suspend(1);
+ twl->otg.host = NULL;
+
+ return -ENODEV;
+ }
+
+ twl->otg.host = host;
+ twl4030_phy_resume();
+
+ twl4030_usb_set_bits(twl, OTG_CTRL,
+ OTG_CTRL_DMPULLDOWN | OTG_CTRL_DPPULLDOWN);
+ twl4030_usb_set_bits(twl, USB_INT_EN_RISE, USB_INT_IDGND);
+ twl4030_usb_set_bits(twl, USB_INT_EN_FALL, USB_INT_IDGND);
+ twl4030_usb_set_bits(twl, FUNC_CTRL, FUNC_CTRL_SUSPENDM);
+ twl4030_usb_set_bits(twl, OTG_CTRL, OTG_CTRL_DRVVBUS);
+
+ return 0;
+}
static int __init twl4030_usb_init(void)
{
@@ -621,7 +711,10 @@ static int __init twl4030_usb_init(void)
the_transceiver = twl;
- twl->irq = TWL4030_MODIRQ_PWR;
+ twl->irq = TWL4030_MODIRQ_PWR;
+ twl->otg.set_host = twl4030_set_host;
+ twl->otg.set_peripheral = twl4030_set_peripheral;
+ twl->otg.set_suspend = twl4030_set_suspend;
usb_irq_disable();
status = request_irq(twl->irq, twl4030_usb_irq,
@@ -648,6 +741,8 @@ static int __init twl4030_usb_init(void)
if (twl->usb_mode == T2_USB_MODE_ULPI)
twl4030_phy_suspend(1);
+ otg_set_transceiver(&twl->otg);
+
printk(KERN_INFO "Initialized TWL4030 USB module");
return 0;
diff --git a/drivers/usb/musb/musb_core.h b/drivers/usb/musb/musb_core.h
index a76ed82..3494b99 100644
--- a/drivers/usb/musb/musb_core.h
+++ b/drivers/usb/musb/musb_core.h
@@ -476,6 +476,8 @@ extern void musb_platform_disable(struct musb *musb);
extern void musb_hnp_stop(struct musb *musb);
+extern void musb_platform_set_mode(struct musb *musb, u8 musb_mode);
+
#if defined(CONFIG_USB_TUSB6010) || \
defined(CONFIG_ARCH_OMAP2430) || defined(CONFIG_ARCH_OMAP34XX)
extern void musb_platform_try_idle(struct musb *musb, unsigned long timeout);
@@ -485,10 +487,8 @@ extern void musb_platform_try_idle(struct musb *musb, unsigned long timeout);
#ifdef CONFIG_USB_TUSB6010
extern int musb_platform_get_vbus_status(struct musb *musb);
-extern void musb_platform_set_mode(struct musb *musb, u8 musb_mode);
#else
#define musb_platform_get_vbus_status(x) 0
-#define musb_platform_set_mode(x, y) do {} while (0)
#endif
extern int __init musb_platform_init(struct musb *musb);
diff --git a/drivers/usb/musb/omap2430.c b/drivers/usb/musb/omap2430.c
index eacd6c4..caae81b 100644
--- a/drivers/usb/musb/omap2430.c
+++ b/drivers/usb/musb/omap2430.c
@@ -192,19 +192,31 @@ static int omap_set_power(struct otg_transceiver *x, unsigned mA)
return 0;
}
-static int omap_set_suspend(struct otg_transceiver *x, int suspend)
+int musb_platform_resume(struct musb *musb);
+
+void musb_platform_set_mode(struct musb *musb, u8 musb_mode)
{
- if (suspend)
- twl4030_phy_suspend(1);
- else
- twl4030_phy_resume();
- return 0;
-}
+ u8 devctl = musb_readb(musb->mregs, MUSB_DEVCTL);
-int musb_platform_resume(struct musb *musb);
+ devctl |= MUSB_DEVCTL_SESSION;
+ musb_writeb(musb->mregs, MUSB_DEVCTL, devctl);
+
+ switch (musb_mode) {
+ case MUSB_HOST:
+ otg_set_host(&musb->xceiv, musb->xceiv.host);
+ break;
+ case MUSB_PERIPHERAL:
+ otg_set_peripheral(&musb->xceiv, musb->xceiv.gadget);
+ break;
+ case MUSB_OTG:
+ break;
+ }
+}
int __init musb_platform_init(struct musb *musb)
{
+ struct otg_transceiver *xceiv = otg_get_transceiver();
+
#if defined(CONFIG_ARCH_OMAP2430)
omap_cfg_reg(AE5_2430_USB0HS_STP);
/* get the clock */
@@ -215,7 +227,7 @@ int __init musb_platform_init(struct musb *musb)
if(IS_ERR(musb->clock))
return PTR_ERR(musb->clock);
- musb->xceiv.set_suspend = omap_set_suspend;
+ musb->xceiv = *xceiv;
musb_platform_resume(musb);
OTG_INTERFSEL_REG |= ULPI_12PIN;
diff --git a/drivers/usb/musb/omap2430.h b/drivers/usb/musb/omap2430.h
index e89d7bd..d036382 100644
--- a/drivers/usb/musb/omap2430.h
+++ b/drivers/usb/musb/omap2430.h
@@ -14,14 +14,6 @@
#include <asm/arch/hardware.h>
#include <asm/arch/usb.h>
-#if defined(CONFIG_TWL4030_USB_HS_ULPI)
-extern void twl4030_phy_suspend(int controller_off);
-extern void twl4030_phy_resume(void);
-#else
-#define twl4030_phy_suspend(x) do {} while (0)
-#define twl4030_phy_resume() do {} while (0)
-#endif
-
/*
* OMAP2430-specific definitions
*/
--
1.5.5.rc1.12.g660b9
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH 6/7] I2C: TWL4030: Reorganize code in twl4030-usb.c
2008-03-27 17:16 ` [PATCH 5/7] I2C: TWL4030: Make twl4030-usb.c initialize otg_transceiver Felipe Balbi
@ 2008-03-27 17:16 ` Felipe Balbi
2008-03-27 17:16 ` [PATCH 7/7] USB: MUSB: Let board specific code handle clock initialization Felipe Balbi
0 siblings, 1 reply; 13+ messages in thread
From: Felipe Balbi @ 2008-03-27 17:16 UTC (permalink / raw)
To: linux-omap; +Cc: Felipe Balbi
Code flow now makes sense.
Signed-off-by: Felipe Balbi <felipe.balbi@nokia.com>
---
drivers/i2c/chips/twl4030-usb.c | 131 +++++++++++++++++++--------------------
1 files changed, 64 insertions(+), 67 deletions(-)
diff --git a/drivers/i2c/chips/twl4030-usb.c b/drivers/i2c/chips/twl4030-usb.c
index 136e1c6..2db1c63 100644
--- a/drivers/i2c/chips/twl4030-usb.c
+++ b/drivers/i2c/chips/twl4030-usb.c
@@ -496,45 +496,6 @@ static void usb_irq_disable(void)
return;
}
-static void twl4030_phy_suspend(int controller_off);
-static void twl4030_phy_resume(void);
-
-static irqreturn_t twl4030_usb_irq(int irq, void *_twl)
-{
- int ret = IRQ_NONE;
- u8 val;
-
- if (twl4030_i2c_read_u8(TWL4030_MODULE_INT, &val, REG_PWR_ISR1) < 0) {
- printk(KERN_ERR "twl4030_usb: i2c read failed,"
- " line %d\n", __LINE__);
- goto done;
- }
-
- /* this interrupt line may be shared */
- if (!(val & USB_PRES))
- goto done;
-
- /* clear the interrupt */
- twl4030_i2c_write_u8(TWL4030_MODULE_INT, USB_PRES, REG_PWR_ISR1);
-
- /* action based on cable attach or detach */
- if (twl4030_i2c_read_u8(TWL4030_MODULE_INT, &val, REG_PWR_EDR1) < 0) {
- printk(KERN_ERR "twl4030_usb: i2c read failed,"
- " line %d\n", __LINE__);
- goto done;
- }
-
- if (val & USB_PRES_RISING)
- twl4030_phy_resume();
- else
- twl4030_phy_suspend(0);
-
- ret = IRQ_HANDLED;
-
-done:
- return ret;
-}
-
static void twl4030_phy_power(struct twl4030_usb *twl, int on)
{
u8 pwr;
@@ -561,34 +522,6 @@ static void twl4030_phy_power(struct twl4030_usb *twl, int on)
return;
}
-static void twl4030_usb_ldo_init(struct twl4030_usb *twl)
-{
- /* Enable writing to power configuration registers */
- twl4030_i2c_write_u8(TWL4030_MODULE_PM_MASTER, 0xC0, PROTECT_KEY);
- twl4030_i2c_write_u8(TWL4030_MODULE_PM_MASTER, 0x0C, PROTECT_KEY);
-
- /* put VUSB3V1 LDO in active state */
- twl4030_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER, 0, VUSB_DEDICATED2);
-
- /* input to VUSB3V1 LDO is from VBAT, not VBUS */
- twl4030_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER, 0x14, VUSB_DEDICATED1);
-
- /* turn on 3.1V regulator */
- twl4030_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER, 0x20, VUSB3V1_DEV_GRP);
- twl4030_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER, 0, VUSB3V1_TYPE);
-
- /* turn on 1.5V regulator */
- twl4030_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER, 0x20, VUSB1V5_DEV_GRP);
- twl4030_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER, 0, VUSB1V5_TYPE);
-
- /* turn on 1.8V regulator */
- twl4030_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER, 0x20, VUSB1V8_DEV_GRP);
- twl4030_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER, 0, VUSB1V8_TYPE);
-
- /* disable access to power configuration registers */
- twl4030_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER, 0, PROTECT_KEY);
-}
-
static void twl4030_phy_suspend(int controller_off)
{
struct twl4030_usb *twl = the_transceiver;
@@ -627,6 +560,70 @@ static void twl4030_phy_resume(void)
return;
}
+static void twl4030_usb_ldo_init(struct twl4030_usb *twl)
+{
+ /* Enable writing to power configuration registers */
+ twl4030_i2c_write_u8(TWL4030_MODULE_PM_MASTER, 0xC0, PROTECT_KEY);
+ twl4030_i2c_write_u8(TWL4030_MODULE_PM_MASTER, 0x0C, PROTECT_KEY);
+
+ /* put VUSB3V1 LDO in active state */
+ twl4030_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER, 0, VUSB_DEDICATED2);
+
+ /* input to VUSB3V1 LDO is from VBAT, not VBUS */
+ twl4030_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER, 0x14, VUSB_DEDICATED1);
+
+ /* turn on 3.1V regulator */
+ twl4030_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER, 0x20, VUSB3V1_DEV_GRP);
+ twl4030_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER, 0, VUSB3V1_TYPE);
+
+ /* turn on 1.5V regulator */
+ twl4030_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER, 0x20, VUSB1V5_DEV_GRP);
+ twl4030_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER, 0, VUSB1V5_TYPE);
+
+ /* turn on 1.8V regulator */
+ twl4030_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER, 0x20, VUSB1V8_DEV_GRP);
+ twl4030_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER, 0, VUSB1V8_TYPE);
+
+ /* disable access to power configuration registers */
+ twl4030_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER, 0, PROTECT_KEY);
+}
+
+static irqreturn_t twl4030_usb_irq(int irq, void *_twl)
+{
+ int ret = IRQ_NONE;
+ u8 val;
+
+ if (twl4030_i2c_read_u8(TWL4030_MODULE_INT, &val, REG_PWR_ISR1) < 0) {
+ printk(KERN_ERR "twl4030_usb: i2c read failed,"
+ " line %d\n", __LINE__);
+ goto done;
+ }
+
+ /* this interrupt line may be shared */
+ if (!(val & USB_PRES))
+ goto done;
+
+ /* clear the interrupt */
+ twl4030_i2c_write_u8(TWL4030_MODULE_INT, USB_PRES, REG_PWR_ISR1);
+
+ /* action based on cable attach or detach */
+ if (twl4030_i2c_read_u8(TWL4030_MODULE_INT, &val, REG_PWR_EDR1) < 0) {
+ printk(KERN_ERR "twl4030_usb: i2c read failed,"
+ " line %d\n", __LINE__);
+ goto done;
+ }
+
+ if (val & USB_PRES_RISING)
+ twl4030_phy_resume();
+ else
+ twl4030_phy_suspend(0);
+
+ ret = IRQ_HANDLED;
+
+done:
+ return ret;
+}
+
static int twl4030_set_suspend(struct otg_transceiver *x, int suspend)
{
if (suspend)
--
1.5.5.rc1.12.g660b9
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH 7/7] USB: MUSB: Let board specific code handle clock initialization
2008-03-27 17:16 ` [PATCH 6/7] I2C: TWL4030: Reorganize code in twl4030-usb.c Felipe Balbi
@ 2008-03-27 17:16 ` Felipe Balbi
2008-03-27 17:42 ` Felipe Balbi
0 siblings, 1 reply; 13+ messages in thread
From: Felipe Balbi @ 2008-03-27 17:16 UTC (permalink / raw)
To: linux-omap; +Cc: Felipe Balbi
Instead of clk_get() in omap2430.c driver, we can let
musb_core.c do it by setting the clock id in
musb_platform_data structure.
Signed-off-by: Felipe Balbi <felipe.balbi@nokia.com>
---
arch/arm/mach-omap2/board-2430sdp-usb.c | 27 +++++++++++++++++++++++++++
arch/arm/mach-omap2/board-3430sdp-usb.c | 29 +++++++++++++++++++++++++++--
drivers/usb/musb/omap2430.c | 8 --------
3 files changed, 54 insertions(+), 10 deletions(-)
diff --git a/arch/arm/mach-omap2/board-2430sdp-usb.c b/arch/arm/mach-omap2/board-2430sdp-usb.c
index 908a0c0..7f4e017 100644
--- a/arch/arm/mach-omap2/board-2430sdp-usb.c
+++ b/arch/arm/mach-omap2/board-2430sdp-usb.c
@@ -13,9 +13,11 @@
#include <linux/errno.h>
#include <linux/delay.h>
#include <linux/platform_device.h>
+#include <linux/clk.h>
#include <linux/usb/musb.h>
#include <asm/arch/hardware.h>
+#include <asm/arch/pm.h>
#include <asm/arch/usb.h>
static struct resource musb_resources[] = {
@@ -34,6 +36,29 @@ static struct resource musb_resources[] = {
},
};
+static int usbhs_ick_on;
+
+static int musb_set_clock(struct clk *clk, int state)
+{
+ if (state) {
+ if (usbhs_ick_on > 0)
+ return -ENODEV;
+
+ omap2_block_sleep();
+ clk_enable(clk);
+ usbhs_ick_on = 1;
+ } else {
+ if (usbhs_ick_on == 0)
+ return -ENODEV;
+
+ clk_disable(clk);
+ usbhs_ick_on = 0;
+ omap2_allow_sleep();
+ }
+
+ return 0;
+}
+
static struct musb_hdrc_platform_data musb_plat = {
#ifdef CONFIG_USB_MUSB_OTG
.mode = MUSB_OTG,
@@ -43,6 +68,8 @@ static struct musb_hdrc_platform_data musb_plat = {
.mode = MUSB_PERIPHERAL,
#endif
.multipoint = 1,
+ .clock = "usbhs_ick",
+ .set_clock = musb_set_clock,
};
static u64 musb_dmamask = ~(u32)0;
diff --git a/arch/arm/mach-omap2/board-3430sdp-usb.c b/arch/arm/mach-omap2/board-3430sdp-usb.c
index 77088b4..81c9af7 100644
--- a/arch/arm/mach-omap2/board-3430sdp-usb.c
+++ b/arch/arm/mach-omap2/board-3430sdp-usb.c
@@ -16,11 +16,13 @@
#include <linux/errno.h>
#include <linux/delay.h>
#include <linux/platform_device.h>
+#include <linux/clk.h>
#include <asm/io.h>
#include <asm/arch/mux.h>
#include <linux/usb/musb.h>
#include <asm/arch/hardware.h>
+#include <asm/arch/pm.h>
#include <asm/arch/usb.h>
#ifdef CONFIG_USB_MUSB_SOC
@@ -40,6 +42,29 @@ static struct resource musb_resources[] = {
},
};
+static int hsotgusb_ick_on;
+
+static int musb_set_clock(struct clk *clk, int state)
+{
+ if (state) {
+ if (hsotgusb_ick_on > 0)
+ return -ENODEV;
+
+ omap2_block_sleep();
+ clk_enable(clk);
+ hsotgusb_ick_on = 1;
+ } else {
+ if (hsotgusb_ick_on == 0)
+ return -ENODEV;
+
+ clk_disable(clk);
+ hsotgusb_ick_on = 0;
+ omap2_allow_sleep();
+ }
+
+ return 0;
+}
+
static struct musb_hdrc_platform_data musb_plat = {
#ifdef CONFIG_USB_MUSB_OTG
.mode = MUSB_OTG,
@@ -49,8 +74,8 @@ static struct musb_hdrc_platform_data musb_plat = {
.mode = MUSB_PERIPHERAL,
#endif
.multipoint = 1,
- .clock = NULL,
- .set_clock = NULL,
+ .clock = "hsotgusb_ick",
+ .set_clock = musb_set_clock,
};
static u64 musb_dmamask = ~(u32)0;
diff --git a/drivers/usb/musb/omap2430.c b/drivers/usb/musb/omap2430.c
index caae81b..364d746 100644
--- a/drivers/usb/musb/omap2430.c
+++ b/drivers/usb/musb/omap2430.c
@@ -219,13 +219,7 @@ int __init musb_platform_init(struct musb *musb)
#if defined(CONFIG_ARCH_OMAP2430)
omap_cfg_reg(AE5_2430_USB0HS_STP);
- /* get the clock */
- musb->clock = clk_get((struct device *)musb->controller, "usbhs_ick");
-#else
- musb->clock = clk_get((struct device *)musb->controller, "hsotgusb_ick");
#endif
- if(IS_ERR(musb->clock))
- return PTR_ERR(musb->clock);
musb->xceiv = *xceiv;
musb_platform_resume(musb);
@@ -261,13 +255,11 @@ int musb_platform_suspend(struct musb *musb)
OTG_SYSCONFIG_REG |= AUTOIDLE; /* enable auto idle */
musb->xceiv.set_suspend(&musb->xceiv, 1);
- clk_disable(musb->clock);
return 0;
}
int musb_platform_resume(struct musb *musb)
{
- clk_enable(musb->clock);
musb->xceiv.set_suspend(&musb->xceiv, 0);
OTG_FORCESTDBY_REG &= ~ENABLEFORCE; /* disable MSTANDBY */
--
1.5.5.rc1.12.g660b9
^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [PATCH 7/7] USB: MUSB: Let board specific code handle clock initialization
2008-03-27 17:16 ` [PATCH 7/7] USB: MUSB: Let board specific code handle clock initialization Felipe Balbi
@ 2008-03-27 17:42 ` Felipe Balbi
0 siblings, 0 replies; 13+ messages in thread
From: Felipe Balbi @ 2008-03-27 17:42 UTC (permalink / raw)
To: Felipe Balbi; +Cc: linux-omap
On Thu, Mar 27, 2008 at 07:16:07PM +0200, Felipe Balbi wrote:
> Instead of clk_get() in omap2430.c driver, we can let
> musb_core.c do it by setting the clock id in
> musb_platform_data structure.
board-rx51-usb.c was missing,
updated below:
>From 14e0ef4901509ac229aecc561c248a96d70ac46d Mon Sep 17 00:00:00 2001
From: Felipe Balbi <felipe.balbi@nokia.com>
Date: Tue, 25 Mar 2008 15:18:16 +0200
Subject: [PATCH 7/7] USB: MUSB: Let board specific code handle clock initialization
Instead of clk_get() in omap2430.c driver, we can let
musb_core.c do it by setting the clock id in
musb_platform_data structure.
Signed-off-by: Felipe Balbi <felipe.balbi@nokia.com>
---
arch/arm/mach-omap2/board-2430sdp-usb.c | 27 +++++++++++++++++++++++++++
arch/arm/mach-omap2/board-3430sdp-usb.c | 29 +++++++++++++++++++++++++++--
arch/arm/mach-omap2/board-rx51-usb.c | 26 +++++++++++++++++++++++++-
drivers/usb/musb/omap2430.c | 8 --------
4 files changed, 79 insertions(+), 11 deletions(-)
diff --git a/arch/arm/mach-omap2/board-2430sdp-usb.c b/arch/arm/mach-omap2/board-2430sdp-usb.c
index 908a0c0..7f4e017 100644
--- a/arch/arm/mach-omap2/board-2430sdp-usb.c
+++ b/arch/arm/mach-omap2/board-2430sdp-usb.c
@@ -13,9 +13,11 @@
#include <linux/errno.h>
#include <linux/delay.h>
#include <linux/platform_device.h>
+#include <linux/clk.h>
#include <linux/usb/musb.h>
#include <asm/arch/hardware.h>
+#include <asm/arch/pm.h>
#include <asm/arch/usb.h>
static struct resource musb_resources[] = {
@@ -34,6 +36,29 @@ static struct resource musb_resources[] = {
},
};
+static int usbhs_ick_on;
+
+static int musb_set_clock(struct clk *clk, int state)
+{
+ if (state) {
+ if (usbhs_ick_on > 0)
+ return -ENODEV;
+
+ omap2_block_sleep();
+ clk_enable(clk);
+ usbhs_ick_on = 1;
+ } else {
+ if (usbhs_ick_on == 0)
+ return -ENODEV;
+
+ clk_disable(clk);
+ usbhs_ick_on = 0;
+ omap2_allow_sleep();
+ }
+
+ return 0;
+}
+
static struct musb_hdrc_platform_data musb_plat = {
#ifdef CONFIG_USB_MUSB_OTG
.mode = MUSB_OTG,
@@ -43,6 +68,8 @@ static struct musb_hdrc_platform_data musb_plat = {
.mode = MUSB_PERIPHERAL,
#endif
.multipoint = 1,
+ .clock = "usbhs_ick",
+ .set_clock = musb_set_clock,
};
static u64 musb_dmamask = ~(u32)0;
diff --git a/arch/arm/mach-omap2/board-3430sdp-usb.c b/arch/arm/mach-omap2/board-3430sdp-usb.c
index 77088b4..81c9af7 100644
--- a/arch/arm/mach-omap2/board-3430sdp-usb.c
+++ b/arch/arm/mach-omap2/board-3430sdp-usb.c
@@ -16,11 +16,13 @@
#include <linux/errno.h>
#include <linux/delay.h>
#include <linux/platform_device.h>
+#include <linux/clk.h>
#include <asm/io.h>
#include <asm/arch/mux.h>
#include <linux/usb/musb.h>
#include <asm/arch/hardware.h>
+#include <asm/arch/pm.h>
#include <asm/arch/usb.h>
#ifdef CONFIG_USB_MUSB_SOC
@@ -40,6 +42,29 @@ static struct resource musb_resources[] = {
},
};
+static int hsotgusb_ick_on;
+
+static int musb_set_clock(struct clk *clk, int state)
+{
+ if (state) {
+ if (hsotgusb_ick_on > 0)
+ return -ENODEV;
+
+ omap2_block_sleep();
+ clk_enable(clk);
+ hsotgusb_ick_on = 1;
+ } else {
+ if (hsotgusb_ick_on == 0)
+ return -ENODEV;
+
+ clk_disable(clk);
+ hsotgusb_ick_on = 0;
+ omap2_allow_sleep();
+ }
+
+ return 0;
+}
+
static struct musb_hdrc_platform_data musb_plat = {
#ifdef CONFIG_USB_MUSB_OTG
.mode = MUSB_OTG,
@@ -49,8 +74,8 @@ static struct musb_hdrc_platform_data musb_plat = {
.mode = MUSB_PERIPHERAL,
#endif
.multipoint = 1,
- .clock = NULL,
- .set_clock = NULL,
+ .clock = "hsotgusb_ick",
+ .set_clock = musb_set_clock,
};
static u64 musb_dmamask = ~(u32)0;
diff --git a/arch/arm/mach-omap2/board-rx51-usb.c b/arch/arm/mach-omap2/board-rx51-usb.c
index 3c85dd0..f6e2a0b 100644
--- a/arch/arm/mach-omap2/board-rx51-usb.c
+++ b/arch/arm/mach-omap2/board-rx51-usb.c
@@ -62,10 +62,34 @@ static struct resource musb_resources[] = {
},
};
+static int hsotgusb_ick_on;
+
+static int musb_set_clock(struct clk *clk, int state)
+{
+ if (state) {
+ if (hsotgusb_ick_on > 0)
+ return -ENODEV;
+
+ omap2_block_sleep();
+ clk_enable(clk);
+ hsotgusb_ick_on = 1;
+ } else {
+ if (hsotgusb_ick_on == 0)
+ return -ENODEV;
+
+ clk_disable(clk);
+ hsotgusb_ick_on = 0;
+ omap2_allow_sleep();
+ }
+
+ return 0;
+}
+
static struct musb_hdrc_platform_data musb_plat = {
.mode = BOARD_MODE,
- .clock = NULL,
.multipoint = 1,
+ .clock = "hsotgusb_ick",
+ .set_clock = musb_set_clock,
#ifdef CONFIG_USB_OTG_TPL
.otg_tpl = tpl_table,
#endif
diff --git a/drivers/usb/musb/omap2430.c b/drivers/usb/musb/omap2430.c
index efdb795..29927d0 100644
--- a/drivers/usb/musb/omap2430.c
+++ b/drivers/usb/musb/omap2430.c
@@ -219,13 +219,7 @@ int __init musb_platform_init(struct musb *musb)
#if defined(CONFIG_ARCH_OMAP2430)
omap_cfg_reg(AE5_2430_USB0HS_STP);
- /* get the clock */
- musb->clock = clk_get((struct device *)musb->controller, "usbhs_ick");
-#else
- musb->clock = clk_get((struct device *)musb->controller, "hsotgusb_ick");
#endif
- if(IS_ERR(musb->clock))
- return PTR_ERR(musb->clock);
musb->xceiv = *xceiv;
musb_platform_resume(musb);
@@ -261,13 +255,11 @@ int musb_platform_suspend(struct musb *musb)
OTG_SYSCONFIG_REG |= AUTOIDLE; /* enable auto idle */
otg_set_suspend(&musb->xceiv, 1);
- clk_disable(musb->clock);
return 0;
}
int musb_platform_resume(struct musb *musb)
{
- clk_enable(musb->clock);
otg_set_suspend(&musb->xceiv, 0);
OTG_FORCESTDBY_REG &= ~ENABLEFORCE; /* disable MSTANDBY */
--
1.5.5.rc1.12.g660b9
--
- Balbi
^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [PATCH 0/7] twl4030 changes
2008-03-27 17:16 [PATCH 0/7] twl4030 changes Felipe Balbi
2008-03-27 17:16 ` [PATCH 1/7] I2C: TWL4030: Move twl4030's headers under include/linux/i2c/ Felipe Balbi
@ 2008-03-28 7:49 ` Tony Lindgren
2008-03-28 10:15 ` Felipe Balbi
1 sibling, 1 reply; 13+ messages in thread
From: Tony Lindgren @ 2008-03-28 7:49 UTC (permalink / raw)
To: Felipe Balbi; +Cc: linux-omap
* Felipe Balbi <felipe.balbi@nokia.com> [080327 19:20]:
> Hi Tony,
>
> I'm resending this series cuz I changed a bit patch #5 to set
> session bit on musb_platform_set_mode so musb core will really
> go to a_host mode when we echo sysfs.
>
> Without this small change the sysfs interface will work only with
> a few devices, most likely usb sticks.
>
> Below is a shortlog and diffstat of the changes.
Pushing this series today.
Tony
> Best regards,
>
> - Balbi
>
> Felipe Balbi (7):
> I2C: TWL4030: Move twl4030's headers under include/linux/i2c/
> I2C: TWL4030: Move all *_*.c to *-*.c
> I2C: TWL4030: General cleanup in twl4030-core.c
> I2C: TWL4030: Cleanup twl4030-usb.c
> I2C: TWL4030: Make twl4030-usb.c initialize otg_transceiver
> I2C: TWL4030: Reorganize code in twl4030-usb.c
> USB: MUSB: Let board specific code handle clock initialization
>
> arch/arm/mach-omap2/board-2430sdp-usb.c | 27 ++
> arch/arm/mach-omap2/board-3430sdp-usb.c | 29 ++-
> arch/arm/mach-omap2/board-3430sdp.c | 2 +-
> arch/arm/mach-omap2/board-sdp-hsmmc.c | 2 +-
> drivers/i2c/chips/Makefile | 8 +-
> .../i2c/chips/{twl4030_core.c => twl4030-core.c} | 80 ++++---
> .../i2c/chips/{twl4030_gpio.c => twl4030-gpio.c} | 2 +-
> .../{twl4030_poweroff.c => twl4030-poweroff.c} | 2 +-
> drivers/i2c/chips/{twl4030_usb.c => twl4030-usb.c} | 255 +++++++++++++-------
> drivers/input/keyboard/omap-twl4030keypad.c | 2 +-
> drivers/rtc/rtc-twl4030.c | 4 +-
> drivers/usb/musb/musb_core.h | 4 +-
> drivers/usb/musb/omap2430.c | 39 ++--
> drivers/usb/musb/omap2430.h | 8 -
> .../{asm-arm/arch-omap => linux/i2c}/twl4030-rtc.h | 0
> include/{asm-arm/arch-omap => linux/i2c}/twl4030.h | 0
> 16 files changed, 303 insertions(+), 161 deletions(-)
> rename drivers/i2c/chips/{twl4030_core.c => twl4030-core.c} (93%)
> rename drivers/i2c/chips/{twl4030_gpio.c => twl4030-gpio.c} (99%)
> rename drivers/i2c/chips/{twl4030_poweroff.c => twl4030-poweroff.c} (98%)
> rename drivers/i2c/chips/{twl4030_usb.c => twl4030-usb.c} (87%)
> rename include/{asm-arm/arch-omap => linux/i2c}/twl4030-rtc.h (100%)
> rename include/{asm-arm/arch-omap => linux/i2c}/twl4030.h (100%)
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-omap" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 0/7] twl4030 changes
2008-03-28 7:49 ` [PATCH 0/7] twl4030 changes Tony Lindgren
@ 2008-03-28 10:15 ` Felipe Balbi
2008-03-28 10:17 ` Tony Lindgren
0 siblings, 1 reply; 13+ messages in thread
From: Felipe Balbi @ 2008-03-28 10:15 UTC (permalink / raw)
To: Tony Lindgren; +Cc: Felipe Balbi, linux-omap
[-- Attachment #1: Type: text/plain, Size: 693 bytes --]
On Fri, 28 Mar 2008 09:49:00 +0200, Tony Lindgren <tony@atomide.com> wrote:
> * Felipe Balbi <felipe.balbi@nokia.com> [080327 19:20]:
>> Hi Tony,
>>
>> I'm resending this series cuz I changed a bit patch #5 to set
>> session bit on musb_platform_set_mode so musb core will really
>> go to a_host mode when we echo sysfs.
>>
>> Without this small change the sysfs interface will work only with
>> a few devices, most likely usb sticks.
>>
>> Below is a shortlog and diffstat of the changes.
>
> Pushing this series today.
Hi tony,
You missed the attached patch: Let board specific codee handle clock
initialization
--
Best Regards,
Felipe Balbi
http://felipebalbi.com
me@felipebalbi.com
[-- Attachment #2: 0001-USB-MUSB-Let-board-specific-code-handle-clock-initi.diff --]
[-- Type: text/x-diff, Size: 4523 bytes --]
From ad7a01e97dadbde2ef6c43b46182272ccc201683 Mon Sep 17 00:00:00 2001
From: Felipe Balbi <felipe.balbi@nokia.com>
Date: Tue, 18 Mar 2008 20:26:30 +0200
Subject: [PATCH 1/2] USB: MUSB: Let board specific code handle clock initialization
Instead of clk_get() in omap2430.c driver, we can let
musb_core.c do it by setting the clock id in
musb_platform_data structure.
Signed-off-by: Felipe Balbi <felipe.balbi@nokia.com>
---
arch/arm/mach-omap2/board-2430sdp-usb.c | 27 +++++++++++++++++++++++++++
arch/arm/mach-omap2/board-3430sdp-usb.c | 29 +++++++++++++++++++++++++++--
drivers/usb/musb/omap2430.c | 8 --------
3 files changed, 54 insertions(+), 10 deletions(-)
diff --git a/arch/arm/mach-omap2/board-2430sdp-usb.c b/arch/arm/mach-omap2/board-2430sdp-usb.c
index 908a0c0..7f4e017 100644
--- a/arch/arm/mach-omap2/board-2430sdp-usb.c
+++ b/arch/arm/mach-omap2/board-2430sdp-usb.c
@@ -13,9 +13,11 @@
#include <linux/errno.h>
#include <linux/delay.h>
#include <linux/platform_device.h>
+#include <linux/clk.h>
#include <linux/usb/musb.h>
#include <asm/arch/hardware.h>
+#include <asm/arch/pm.h>
#include <asm/arch/usb.h>
static struct resource musb_resources[] = {
@@ -34,6 +36,29 @@ static struct resource musb_resources[] = {
},
};
+static int usbhs_ick_on;
+
+static int musb_set_clock(struct clk *clk, int state)
+{
+ if (state) {
+ if (usbhs_ick_on > 0)
+ return -ENODEV;
+
+ omap2_block_sleep();
+ clk_enable(clk);
+ usbhs_ick_on = 1;
+ } else {
+ if (usbhs_ick_on == 0)
+ return -ENODEV;
+
+ clk_disable(clk);
+ usbhs_ick_on = 0;
+ omap2_allow_sleep();
+ }
+
+ return 0;
+}
+
static struct musb_hdrc_platform_data musb_plat = {
#ifdef CONFIG_USB_MUSB_OTG
.mode = MUSB_OTG,
@@ -43,6 +68,8 @@ static struct musb_hdrc_platform_data musb_plat = {
.mode = MUSB_PERIPHERAL,
#endif
.multipoint = 1,
+ .clock = "usbhs_ick",
+ .set_clock = musb_set_clock,
};
static u64 musb_dmamask = ~(u32)0;
diff --git a/arch/arm/mach-omap2/board-3430sdp-usb.c b/arch/arm/mach-omap2/board-3430sdp-usb.c
index 77088b4..81c9af7 100644
--- a/arch/arm/mach-omap2/board-3430sdp-usb.c
+++ b/arch/arm/mach-omap2/board-3430sdp-usb.c
@@ -16,11 +16,13 @@
#include <linux/errno.h>
#include <linux/delay.h>
#include <linux/platform_device.h>
+#include <linux/clk.h>
#include <asm/io.h>
#include <asm/arch/mux.h>
#include <linux/usb/musb.h>
#include <asm/arch/hardware.h>
+#include <asm/arch/pm.h>
#include <asm/arch/usb.h>
#ifdef CONFIG_USB_MUSB_SOC
@@ -40,6 +42,29 @@ static struct resource musb_resources[] = {
},
};
+static int hsotgusb_ick_on;
+
+static int musb_set_clock(struct clk *clk, int state)
+{
+ if (state) {
+ if (hsotgusb_ick_on > 0)
+ return -ENODEV;
+
+ omap2_block_sleep();
+ clk_enable(clk);
+ hsotgusb_ick_on = 1;
+ } else {
+ if (hsotgusb_ick_on == 0)
+ return -ENODEV;
+
+ clk_disable(clk);
+ hsotgusb_ick_on = 0;
+ omap2_allow_sleep();
+ }
+
+ return 0;
+}
+
static struct musb_hdrc_platform_data musb_plat = {
#ifdef CONFIG_USB_MUSB_OTG
.mode = MUSB_OTG,
@@ -49,8 +74,8 @@ static struct musb_hdrc_platform_data musb_plat = {
.mode = MUSB_PERIPHERAL,
#endif
.multipoint = 1,
- .clock = NULL,
- .set_clock = NULL,
+ .clock = "hsotgusb_ick",
+ .set_clock = musb_set_clock,
};
static u64 musb_dmamask = ~(u32)0;
diff --git a/drivers/usb/musb/omap2430.c b/drivers/usb/musb/omap2430.c
index caae81b..364d746 100644
--- a/drivers/usb/musb/omap2430.c
+++ b/drivers/usb/musb/omap2430.c
@@ -219,13 +219,7 @@ int __init musb_platform_init(struct musb *musb)
#if defined(CONFIG_ARCH_OMAP2430)
omap_cfg_reg(AE5_2430_USB0HS_STP);
- /* get the clock */
- musb->clock = clk_get((struct device *)musb->controller, "usbhs_ick");
-#else
- musb->clock = clk_get((struct device *)musb->controller, "hsotgusb_ick");
#endif
- if(IS_ERR(musb->clock))
- return PTR_ERR(musb->clock);
musb->xceiv = *xceiv;
musb_platform_resume(musb);
@@ -261,13 +255,11 @@ int musb_platform_suspend(struct musb *musb)
OTG_SYSCONFIG_REG |= AUTOIDLE; /* enable auto idle */
musb->xceiv.set_suspend(&musb->xceiv, 1);
- clk_disable(musb->clock);
return 0;
}
int musb_platform_resume(struct musb *musb)
{
- clk_enable(musb->clock);
musb->xceiv.set_suspend(&musb->xceiv, 0);
OTG_FORCESTDBY_REG &= ~ENABLEFORCE; /* disable MSTANDBY */
--
1.5.5.rc1.12.g660b9
^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [PATCH 0/7] twl4030 changes
2008-03-28 10:15 ` Felipe Balbi
@ 2008-03-28 10:17 ` Tony Lindgren
0 siblings, 0 replies; 13+ messages in thread
From: Tony Lindgren @ 2008-03-28 10:17 UTC (permalink / raw)
To: Felipe Balbi; +Cc: Felipe Balbi, linux-omap
* Felipe Balbi <me@felipebalbi.com> [080328 12:16]:
>
>
> On Fri, 28 Mar 2008 09:49:00 +0200, Tony Lindgren <tony@atomide.com> wrote:
> > * Felipe Balbi <felipe.balbi@nokia.com> [080327 19:20]:
> >> Hi Tony,
> >>
> >> I'm resending this series cuz I changed a bit patch #5 to set
> >> session bit on musb_platform_set_mode so musb core will really
> >> go to a_host mode when we echo sysfs.
> >>
> >> Without this small change the sysfs interface will work only with
> >> a few devices, most likely usb sticks.
> >>
> >> Below is a shortlog and diffstat of the changes.
> >
> > Pushing this series today.
>
> Hi tony,
>
> You missed the attached patch: Let board specific codee handle clock
> initialization
Oops, sorry pushing.
Tony
>
> --
> Best Regards,
>
> Felipe Balbi
> http://felipebalbi.com
> me@felipebalbi.com
> From ad7a01e97dadbde2ef6c43b46182272ccc201683 Mon Sep 17 00:00:00 2001
> From: Felipe Balbi <felipe.balbi@nokia.com>
> Date: Tue, 18 Mar 2008 20:26:30 +0200
> Subject: [PATCH 1/2] USB: MUSB: Let board specific code handle clock initialization
>
> Instead of clk_get() in omap2430.c driver, we can let
> musb_core.c do it by setting the clock id in
> musb_platform_data structure.
>
> Signed-off-by: Felipe Balbi <felipe.balbi@nokia.com>
> ---
> arch/arm/mach-omap2/board-2430sdp-usb.c | 27 +++++++++++++++++++++++++++
> arch/arm/mach-omap2/board-3430sdp-usb.c | 29 +++++++++++++++++++++++++++--
> drivers/usb/musb/omap2430.c | 8 --------
> 3 files changed, 54 insertions(+), 10 deletions(-)
>
> diff --git a/arch/arm/mach-omap2/board-2430sdp-usb.c b/arch/arm/mach-omap2/board-2430sdp-usb.c
> index 908a0c0..7f4e017 100644
> --- a/arch/arm/mach-omap2/board-2430sdp-usb.c
> +++ b/arch/arm/mach-omap2/board-2430sdp-usb.c
> @@ -13,9 +13,11 @@
> #include <linux/errno.h>
> #include <linux/delay.h>
> #include <linux/platform_device.h>
> +#include <linux/clk.h>
> #include <linux/usb/musb.h>
>
> #include <asm/arch/hardware.h>
> +#include <asm/arch/pm.h>
> #include <asm/arch/usb.h>
>
> static struct resource musb_resources[] = {
> @@ -34,6 +36,29 @@ static struct resource musb_resources[] = {
> },
> };
>
> +static int usbhs_ick_on;
> +
> +static int musb_set_clock(struct clk *clk, int state)
> +{
> + if (state) {
> + if (usbhs_ick_on > 0)
> + return -ENODEV;
> +
> + omap2_block_sleep();
> + clk_enable(clk);
> + usbhs_ick_on = 1;
> + } else {
> + if (usbhs_ick_on == 0)
> + return -ENODEV;
> +
> + clk_disable(clk);
> + usbhs_ick_on = 0;
> + omap2_allow_sleep();
> + }
> +
> + return 0;
> +}
> +
> static struct musb_hdrc_platform_data musb_plat = {
> #ifdef CONFIG_USB_MUSB_OTG
> .mode = MUSB_OTG,
> @@ -43,6 +68,8 @@ static struct musb_hdrc_platform_data musb_plat = {
> .mode = MUSB_PERIPHERAL,
> #endif
> .multipoint = 1,
> + .clock = "usbhs_ick",
> + .set_clock = musb_set_clock,
> };
>
> static u64 musb_dmamask = ~(u32)0;
> diff --git a/arch/arm/mach-omap2/board-3430sdp-usb.c b/arch/arm/mach-omap2/board-3430sdp-usb.c
> index 77088b4..81c9af7 100644
> --- a/arch/arm/mach-omap2/board-3430sdp-usb.c
> +++ b/arch/arm/mach-omap2/board-3430sdp-usb.c
> @@ -16,11 +16,13 @@
> #include <linux/errno.h>
> #include <linux/delay.h>
> #include <linux/platform_device.h>
> +#include <linux/clk.h>
> #include <asm/io.h>
> #include <asm/arch/mux.h>
> #include <linux/usb/musb.h>
>
> #include <asm/arch/hardware.h>
> +#include <asm/arch/pm.h>
> #include <asm/arch/usb.h>
>
> #ifdef CONFIG_USB_MUSB_SOC
> @@ -40,6 +42,29 @@ static struct resource musb_resources[] = {
> },
> };
>
> +static int hsotgusb_ick_on;
> +
> +static int musb_set_clock(struct clk *clk, int state)
> +{
> + if (state) {
> + if (hsotgusb_ick_on > 0)
> + return -ENODEV;
> +
> + omap2_block_sleep();
> + clk_enable(clk);
> + hsotgusb_ick_on = 1;
> + } else {
> + if (hsotgusb_ick_on == 0)
> + return -ENODEV;
> +
> + clk_disable(clk);
> + hsotgusb_ick_on = 0;
> + omap2_allow_sleep();
> + }
> +
> + return 0;
> +}
> +
> static struct musb_hdrc_platform_data musb_plat = {
> #ifdef CONFIG_USB_MUSB_OTG
> .mode = MUSB_OTG,
> @@ -49,8 +74,8 @@ static struct musb_hdrc_platform_data musb_plat = {
> .mode = MUSB_PERIPHERAL,
> #endif
> .multipoint = 1,
> - .clock = NULL,
> - .set_clock = NULL,
> + .clock = "hsotgusb_ick",
> + .set_clock = musb_set_clock,
> };
>
> static u64 musb_dmamask = ~(u32)0;
> diff --git a/drivers/usb/musb/omap2430.c b/drivers/usb/musb/omap2430.c
> index caae81b..364d746 100644
> --- a/drivers/usb/musb/omap2430.c
> +++ b/drivers/usb/musb/omap2430.c
> @@ -219,13 +219,7 @@ int __init musb_platform_init(struct musb *musb)
>
> #if defined(CONFIG_ARCH_OMAP2430)
> omap_cfg_reg(AE5_2430_USB0HS_STP);
> - /* get the clock */
> - musb->clock = clk_get((struct device *)musb->controller, "usbhs_ick");
> -#else
> - musb->clock = clk_get((struct device *)musb->controller, "hsotgusb_ick");
> #endif
> - if(IS_ERR(musb->clock))
> - return PTR_ERR(musb->clock);
>
> musb->xceiv = *xceiv;
> musb_platform_resume(musb);
> @@ -261,13 +255,11 @@ int musb_platform_suspend(struct musb *musb)
> OTG_SYSCONFIG_REG |= AUTOIDLE; /* enable auto idle */
>
> musb->xceiv.set_suspend(&musb->xceiv, 1);
> - clk_disable(musb->clock);
> return 0;
> }
>
> int musb_platform_resume(struct musb *musb)
> {
> - clk_enable(musb->clock);
> musb->xceiv.set_suspend(&musb->xceiv, 0);
>
> OTG_FORCESTDBY_REG &= ~ENABLEFORCE; /* disable MSTANDBY */
> --
> 1.5.5.rc1.12.g660b9
>
^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2008-03-28 10:17 UTC | newest]
Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-03-27 17:16 [PATCH 0/7] twl4030 changes Felipe Balbi
2008-03-27 17:16 ` [PATCH 1/7] I2C: TWL4030: Move twl4030's headers under include/linux/i2c/ Felipe Balbi
2008-03-27 17:16 ` [PATCH 2/7] I2C: TWL4030: Move all *_*.c to *-*.c Felipe Balbi
2008-03-27 17:16 ` [PATCH 3/7] I2C: TWL4030: General cleanup in twl4030-core.c Felipe Balbi
2008-03-27 17:16 ` [PATCH 4/7] I2C: TWL4030: Cleanup twl4030-usb.c Felipe Balbi
2008-03-27 17:16 ` [PATCH 5/7] I2C: TWL4030: Make twl4030-usb.c initialize otg_transceiver Felipe Balbi
2008-03-27 17:16 ` [PATCH 6/7] I2C: TWL4030: Reorganize code in twl4030-usb.c Felipe Balbi
2008-03-27 17:16 ` [PATCH 7/7] USB: MUSB: Let board specific code handle clock initialization Felipe Balbi
2008-03-27 17:42 ` Felipe Balbi
2008-03-28 7:49 ` [PATCH 0/7] twl4030 changes Tony Lindgren
2008-03-28 10:15 ` Felipe Balbi
2008-03-28 10:17 ` Tony Lindgren
-- strict thread matches above, loose matches on Subject: below --
2008-03-19 13:42 [PATCH 0/7] TWL4030 Changes Felipe Balbi
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.