From 8ea2da6e862ac3cd234cf2645645267a1d7fcde9 Mon Sep 17 00:00:00 2001 From: Andy Green Date: Wed, 19 Nov 2008 17:09:48 +0000 Subject: 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 --- arch/arm/mach-s3c2440/mach-gta02.c | 23 ++--------------------- 1 file changed, 2 insertions(+), 21 deletions(-) (limited to 'arch') 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); -- cgit v1.2.3