aboutsummaryrefslogtreecommitdiff
path: root/arch
diff options
context:
space:
mode:
authorAndy Green <andy@openmoko.com>2008-11-19 17:09:48 +0000
committerAndy Green <agreen@pads.home.warmcat.com>2008-11-19 17:09:48 +0000
commit8ea2da6e862ac3cd234cf2645645267a1d7fcde9 (patch)
tree331ee6214f839496c7306a28bdabcc832390d57f /arch
parent3608fada489ebc4abedcc5754d9644a52b372492 (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')
-rw-r--r--arch/arm/mach-s3c2440/mach-gta02.c23
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(&gta02_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(&gta02_udc_vbus_drawer.work, __gta02_udc_vbus_draw);
s3c24xx_udc_set_platdata(&gta02_udc_cfg);
set_s3c2410ts_info(&gta02_ts_cfg);