aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/s3c24xx/patches/0183-fix-pcf50633-use-pcf-not-data-in-probe-for-context.p.patch
diff options
context:
space:
mode:
authorMirko Vogt <mirko@openwrt.org>2008-12-12 00:02:36 +0000
committerMirko Vogt <mirko@openwrt.org>2008-12-12 00:02:36 +0000
commitb9dfb81f2aa45be745a8aed9684076210aed4152 (patch)
treeaceadd7f37096911a29c929988cbcf7c964a1c0b /target/linux/s3c24xx/patches/0183-fix-pcf50633-use-pcf-not-data-in-probe-for-context.p.patch
parent4571721ec22de116ad9998657e0a3c12da6405fb (diff)
downloadupstream-b9dfb81f2aa45be745a8aed9684076210aed4152.tar.gz
upstream-b9dfb81f2aa45be745a8aed9684076210aed4152.tar.bz2
upstream-b9dfb81f2aa45be745a8aed9684076210aed4152.zip
add support for target 3c24xx (more known as Openmoko GTA02 "Freerunner") and merge it with the openmoko-target and the work Michael Buesch <mb> did
SVN-Revision: 13609
Diffstat (limited to 'target/linux/s3c24xx/patches/0183-fix-pcf50633-use-pcf-not-data-in-probe-for-context.p.patch')
-rwxr-xr-xtarget/linux/s3c24xx/patches/0183-fix-pcf50633-use-pcf-not-data-in-probe-for-context.p.patch219
1 files changed, 219 insertions, 0 deletions
diff --git a/target/linux/s3c24xx/patches/0183-fix-pcf50633-use-pcf-not-data-in-probe-for-context.p.patch b/target/linux/s3c24xx/patches/0183-fix-pcf50633-use-pcf-not-data-in-probe-for-context.p.patch
new file mode 100755
index 0000000000..360052aaf0
--- /dev/null
+++ b/target/linux/s3c24xx/patches/0183-fix-pcf50633-use-pcf-not-data-in-probe-for-context.p.patch
@@ -0,0 +1,219 @@
+From 22bdcec1c140689c6fce71ca04d7afcaa44d52f0 Mon Sep 17 00:00:00 2001
+From: Andy Green <andy@openmoko.com>
+Date: Fri, 25 Jul 2008 23:06:15 +0100
+Subject: [PATCH] fix-pcf50633-use-pcf-not-data-in-probe-for-context.patch
+
+Everywhere in the sources except the probe function the context
+pointer is called "pcf"... in there it's called "data" for some
+reason. This stops confusion by changing it to be "pcf" in there
+as well.
+
+Signed-off-by: Andy Green <andy@openmoko.com>
+---
+ drivers/i2c/chips/pcf50633.c | 117 +++++++++++++++++++++--------------------
+ 1 files changed, 60 insertions(+), 57 deletions(-)
+
+diff --git a/drivers/i2c/chips/pcf50633.c b/drivers/i2c/chips/pcf50633.c
+index 850bf93..4cb333c 100644
+--- a/drivers/i2c/chips/pcf50633.c
++++ b/drivers/i2c/chips/pcf50633.c
+@@ -2063,7 +2063,7 @@ static void populate_sysfs_group(struct pcf50633_data *pcf)
+ static int pcf50633_detect(struct i2c_adapter *adapter, int address, int kind)
+ {
+ struct i2c_client *new_client;
+- struct pcf50633_data *data;
++ struct pcf50633_data *pcf;
+ int err = 0;
+ int irq;
+
+@@ -2086,23 +2086,24 @@ static int pcf50633_detect(struct i2c_adapter *adapter, int address, int kind)
+ return -EBUSY;
+ }
+
+- if (!(data = kzalloc(sizeof(*data), GFP_KERNEL)))
++ pcf = kzalloc(sizeof(*pcf), GFP_KERNEL);
++ if (!pcf)
+ return -ENOMEM;
+
+- mutex_init(&data->lock);
+- mutex_init(&data->working_lock);
+- mutex_init(&data->working_lock_nobat);
+- mutex_init(&data->working_lock_usb_curlimit);
+- INIT_WORK(&data->work, pcf50633_work);
+- INIT_WORK(&data->work_nobat, pcf50633_work_nobat);
+- INIT_WORK(&data->work_usb_curlimit, pcf50633_work_usbcurlim);
+- data->irq = irq;
+- data->working = 0;
+- data->onkey_seconds = -1;
+- data->pdata = pcf50633_pdev->dev.platform_data;
+-
+- new_client = &data->client;
+- i2c_set_clientdata(new_client, data);
++ mutex_init(&pcf->lock);
++ mutex_init(&pcf->working_lock);
++ mutex_init(&pcf->working_lock_nobat);
++ mutex_init(&pcf->working_lock_usb_curlimit);
++ INIT_WORK(&pcf->work, pcf50633_work);
++ INIT_WORK(&pcf->work_nobat, pcf50633_work_nobat);
++ INIT_WORK(&pcf->work_usb_curlimit, pcf50633_work_usbcurlim);
++ pcf->irq = irq;
++ pcf->working = 0;
++ pcf->onkey_seconds = -1;
++ pcf->pdata = pcf50633_pdev->dev.platform_data;
++
++ new_client = &pcf->client;
++ i2c_set_clientdata(new_client, pcf);
+ new_client->addr = address;
+ new_client->adapter = adapter;
+ new_client->driver = &pcf50633_driver;
+@@ -2118,11 +2119,11 @@ static int pcf50633_detect(struct i2c_adapter *adapter, int address, int kind)
+ goto exit_free;
+ }
+
+- pcf50633_global = data;
++ pcf50633_global = pcf;
+
+- init_resume_dependency_list(&data->resume_dependency);
++ init_resume_dependency_list(&pcf->resume_dependency);
+
+- populate_sysfs_group(data);
++ populate_sysfs_group(pcf);
+
+ err = sysfs_create_group(&new_client->dev.kobj, &pcf_attr_group);
+ if (err) {
+@@ -2135,32 +2136,35 @@ static int pcf50633_detect(struct i2c_adapter *adapter, int address, int kind)
+ /* register power off handler with core power management */
+ pm_power_off = &pcf50633_go_standby;
+
+- data->input_dev = input_allocate_device();
+- if (!data->input_dev)
++ pcf->input_dev = input_allocate_device();
++ if (!pcf->input_dev)
+ goto exit_sysfs;
+
+- data->input_dev->name = "GTA02 PMU events";
+- data->input_dev->phys = "FIXME";
+- data->input_dev->id.bustype = BUS_I2C;
++ pcf->input_dev->name = "GTA02 PMU events";
++ pcf->input_dev->phys = "FIXME";
++ pcf->input_dev->id.bustype = BUS_I2C;
++ pcf->input_dev->cdev.dev = &new_client->dev;
+
+- data->input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_PWR);
+- set_bit(KEY_POWER, data->input_dev->keybit);
+- set_bit(KEY_POWER2, data->input_dev->keybit);
+- set_bit(KEY_BATTERY, data->input_dev->keybit);
++ pcf->input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_PWR);
++ set_bit(KEY_POWER, pcf->input_dev->keybit);
++ set_bit(KEY_POWER2, pcf->input_dev->keybit);
++ set_bit(KEY_BATTERY, pcf->input_dev->keybit);
+
+- err = input_register_device(data->input_dev);
++ err = input_register_device(pcf->input_dev);
+ if (err)
+ goto exit_sysfs;
+
+ /* configure interrupt mask */
+- reg_write(data, PCF50633_REG_INT1M, 0x00); /* we want SECOND to kick */
+- reg_write(data, PCF50633_REG_INT2M, 0x00);
+- reg_write(data, PCF50633_REG_INT3M, 0x00);
+- reg_write(data, PCF50633_REG_INT4M, 0x00);
+- reg_write(data, PCF50633_REG_INT5M, 0x00);
++
++ /* we want SECOND to kick for the coldplug initialisation */
++ reg_write(pcf, PCF50633_REG_INT1M, 0x00);
++ reg_write(pcf, PCF50633_REG_INT2M, 0x00);
++ reg_write(pcf, PCF50633_REG_INT3M, 0x00);
++ reg_write(pcf, PCF50633_REG_INT4M, 0x00);
++ reg_write(pcf, PCF50633_REG_INT5M, 0x00);
+
+ err = request_irq(irq, pcf50633_irq, IRQF_TRIGGER_FALLING,
+- "pcf50633", data);
++ "pcf50633", pcf);
+ if (err < 0)
+ goto exit_input;
+
+@@ -2168,59 +2172,58 @@ static int pcf50633_detect(struct i2c_adapter *adapter, int address, int kind)
+ dev_err(&new_client->dev, "IRQ %u cannot be enabled as wake-up"
+ "source in this hardware revision!", irq);
+
+- if (data->pdata->used_features & PCF50633_FEAT_RTC) {
+- data->rtc = rtc_device_register("pcf50633", &new_client->dev,
++ if (pcf->pdata->used_features & PCF50633_FEAT_RTC) {
++ pcf->rtc = rtc_device_register("pcf50633", &new_client->dev,
+ &pcf50633_rtc_ops, THIS_MODULE);
+- if (IS_ERR(data->rtc)) {
+- err = PTR_ERR(data->rtc);
++ if (IS_ERR(pcf->rtc)) {
++ err = PTR_ERR(pcf->rtc);
+ goto exit_irq;
+ }
+ }
+
+- if (data->pdata->used_features & PCF50633_FEAT_PWM_BL) {
+- data->backlight = backlight_device_register("pcf50633-bl",
++ if (pcf->pdata->used_features & PCF50633_FEAT_PWM_BL) {
++ pcf->backlight = backlight_device_register("pcf50633-bl",
+ &new_client->dev,
+- data,
++ pcf,
+ &pcf50633bl_ops);
+- if (!data->backlight)
++ if (!pcf->backlight)
+ goto exit_rtc;
+ /* FIXME: are we sure we want default == off? */
+- data->backlight->props.max_brightness = 0x3f;
+- data->backlight->props.power = FB_BLANK_UNBLANK;
+- data->backlight->props.fb_blank = FB_BLANK_UNBLANK;
+- data->backlight->props.brightness =
+- data->backlight->props.max_brightness;
+- backlight_update_status(data->backlight);
++ pcf->backlight->props.max_brightness = 0x3f;
++ pcf->backlight->props.power = FB_BLANK_UNBLANK;
++ pcf->backlight->props.fb_blank = FB_BLANK_UNBLANK;
++ pcf->backlight->props.brightness =
++ pcf->backlight->props.max_brightness;
++ backlight_update_status(pcf->backlight);
+ }
+
+- apm_get_power_status = pcf50633_get_power_status;
+- data->probe_completed = 1;
++ pcf->probe_completed = 1;
+
+- if (data->pdata->flag_use_apm_emulation)
++ if (pcf->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);
++ if (pcf->pdata->attach_child_devices)
++ (pcf->pdata->attach_child_devices)(&new_client->dev);
+
+ return 0;
+ exit_rtc:
+- if (data->pdata->used_features & PCF50633_FEAT_RTC)
++ if (pcf->pdata->used_features & PCF50633_FEAT_RTC)
+ rtc_device_unregister(pcf50633_global->rtc);
+ exit_irq:
+ free_irq(pcf50633_global->irq, pcf50633_global);
+ exit_input:
+- input_unregister_device(data->input_dev);
++ input_unregister_device(pcf->input_dev);
+ exit_sysfs:
+ pm_power_off = NULL;
+ sysfs_remove_group(&new_client->dev.kobj, &pcf_attr_group);
+ exit_detach:
+ i2c_detach_client(new_client);
+ exit_free:
+- kfree(data);
++ kfree(pcf);
+ pcf50633_global = NULL;
+ return err;
+ }
+--
+1.5.6.3
+