diff options
author | Andy Green <andy@openmoko.com> | 2008-11-19 17:09:48 +0000 |
---|---|---|
committer | Andy Green <agreen@pads.home.warmcat.com> | 2008-11-19 17:09:48 +0000 |
commit | 8ea2da6e862ac3cd234cf2645645267a1d7fcde9 (patch) | |
tree | 331ee6214f839496c7306a28bdabcc832390d57f /arch/arm/mach-s3c2440/mach-gta02.c | |
parent | 3608fada489ebc4abedcc5754d9644a52b372492 (diff) |
fix-pcf50633-usb-curlim-workqueue-migration.patch
pcf50633 needs to take responsibility for managing current limit
changes asycnhrnously, ie, from USB stack enumeration. It's a feature of
pcf50633 not mach-gta02.c, and we can do better with taking care about
keeping it from firing at a bad time in there too.
Signed-off-by: Andy Green <andy@openmoko.com>
Diffstat (limited to 'arch/arm/mach-s3c2440/mach-gta02.c')
-rw-r--r-- | arch/arm/mach-s3c2440/mach-gta02.c | 23 |
1 files changed, 2 insertions, 21 deletions
diff --git a/arch/arm/mach-s3c2440/mach-gta02.c b/arch/arm/mach-s3c2440/mach-gta02.c index 64d275deee1..accdbc542e5 100644 --- a/arch/arm/mach-s3c2440/mach-gta02.c +++ b/arch/arm/mach-s3c2440/mach-gta02.c @@ -813,29 +813,11 @@ static void gta02_udc_command(enum s3c2410_udc_cmd_e cmd) } } -/* use a work queue, since I2C API inherently schedules - * and we get called in hardirq context from UDC driver */ - -struct vbus_draw { - struct work_struct work; - int ma; -}; -static struct vbus_draw gta02_udc_vbus_drawer; - -static void __gta02_udc_vbus_draw(struct work_struct *work) -{ - if (!pcf50633_global) { - printk(KERN_ERR "pcf50633 not initialized yet, can't change " - "vbus_draw\n"); - return; - } - pcf50633_usb_curlim_set(pcf50633_global, gta02_udc_vbus_drawer.ma); -} +/* get PMU to set USB current limit accordingly */ static void gta02_udc_vbus_draw(unsigned int ma) { - gta02_udc_vbus_drawer.ma = ma; - schedule_work(>a02_udc_vbus_drawer.work); + pcf50633_notify_usb_current_limit_change(pcf50633_global, ma); } static struct s3c2410_udc_mach_info gta02_udc_cfg = { @@ -1478,7 +1460,6 @@ static void __init gta02_machine_init(void) s3c2410_gpio_setpin(S3C2410_GPD13, 1); s3c2410_gpio_cfgpin(S3C2410_GPD13, S3C2410_GPIO_OUTPUT); - INIT_WORK(>a02_udc_vbus_drawer.work, __gta02_udc_vbus_draw); s3c24xx_udc_set_platdata(>a02_udc_cfg); set_s3c2410ts_info(>a02_ts_cfg); |