* [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
* [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
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 a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox