From 91621be2cbfa8140a14d7ca4c1cf7de32368273c Mon Sep 17 00:00:00 2001 From: Andy Green Date: Wed, 19 Nov 2008 17:09:51 +0000 Subject: fix-pcf50633-migrate-gta02-peripherals-out.patch pcf50633.c shouldn't know GTAxx at all. Move to using a platform callback to allow definition of platform devices with pcf50633 as parent device (good for enforcing suspend / resume ordering). Remove all code references to GTAxx from the sources (one string left for compatability). Signed-off-by: Andy Green --- drivers/i2c/chips/pcf50633.c | 57 ++++++++++++++++++++++---------------------- 1 file changed, 29 insertions(+), 28 deletions(-) (limited to 'drivers/i2c') diff --git a/drivers/i2c/chips/pcf50633.c b/drivers/i2c/chips/pcf50633.c index 67459935c3b..850bf934a2a 100644 --- a/drivers/i2c/chips/pcf50633.c +++ b/drivers/i2c/chips/pcf50633.c @@ -50,7 +50,6 @@ #include #include -#include #include "pcf50633.h" #include @@ -2004,18 +2003,6 @@ static DEVICE_ATTR(dump_regs, 0400, show_dump_regs, NULL); * Driver initialization ***********************************************************************/ -#ifdef CONFIG_MACH_NEO1973_GTA02 -/* We currently place those platform devices here to make sure the device - * suspend/resume order is correct */ -static struct platform_device gta01_pm_gps_dev = { - .name = "neo1973-pm-gps", -}; - -static struct platform_device gta01_pm_bt_dev = { - .name = "neo1973-pm-bt", -}; -#endif - /* * CARE! This table is modified at runtime! */ @@ -2209,14 +2196,15 @@ static int pcf50633_detect(struct i2c_adapter *adapter, int address, int kind) apm_get_power_status = pcf50633_get_power_status; data->probe_completed = 1; -#ifdef CONFIG_MACH_NEO1973_GTA02 - if (machine_is_neo1973_gta02()) { - gta01_pm_gps_dev.dev.parent = &new_client->dev; - gta01_pm_bt_dev.dev.parent = &new_client->dev; - platform_device_register(>a01_pm_bt_dev); - platform_device_register(>a01_pm_gps_dev); - } -#endif + if (data->pdata->flag_use_apm_emulation) + apm_get_power_status = pcf50633_get_power_status; + + /* if platform was interested, give him a chance to register + * platform devices that switch power with us as the parent + * at registration time -- ensures suspend / resume ordering + */ + if (data->pdata->attach_child_devices) + (data->pdata->attach_child_devices)(&new_client->dev); return 0; exit_rtc: @@ -2261,13 +2249,6 @@ static int pcf50633_detach_client(struct i2c_client *client) if (pcf->pdata->used_features & PCF50633_FEAT_RTC) rtc_device_unregister(pcf->rtc); -#ifdef CONFIG_MACH_NEO1973_GTA02 - if (machine_is_neo1973_gta02()) { - platform_device_unregister(>a01_pm_bt_dev); - platform_device_unregister(>a01_pm_gps_dev); - } -#endif - sysfs_remove_group(&client->dev.kobj, &pcf_attr_group); pm_power_off = NULL; @@ -2465,6 +2446,26 @@ int pcf50633_ready(struct pcf50633_data *pcf) } EXPORT_SYMBOL_GPL(pcf50633_ready); +int pcf50633_wait_for_ready(struct pcf50633_data *pcf, int timeout_ms, + char *name) +{ + /* so we always go once */ + timeout_ms += 5; + + while ((timeout_ms >= 5) && (pcf50633_ready(pcf))) { + timeout_ms -= 5; /* well, it isn't very accurate, but OK */ + msleep(5); + } + + if (timeout_ms < 5) { + printk(KERN_ERR"pcf50633_wait_for_ready: " + "%s BAILING on timeout\n", name); + return -EBUSY; + } + + return 0; +} +EXPORT_SYMBOL_GPL(pcf50633_wait_for_ready); /* * if backlight resume is selected to be deferred by platform, then it -- cgit v1.2.3