diff options
author | mirko <mirko@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2008-12-12 00:02:36 +0000 |
---|---|---|
committer | mirko <mirko@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2008-12-12 00:02:36 +0000 |
commit | cc3146824acbf585f487a803b4a2eadf36b9b47d (patch) | |
tree | efab142ef89b35ce42e8a79e028eff15be362af8 /target/linux/s3c24xx/patches/0183-fix-pcf50633-use-pcf-not-data-in-probe-for-context.p.patch | |
parent | 22b3854919b7cb44d725eb7a7efd018ad9aec25c (diff) |
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
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@13609 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'target/linux/s3c24xx/patches/0183-fix-pcf50633-use-pcf-not-data-in-probe-for-context.p.patch')
-rwxr-xr-x | target/linux/s3c24xx/patches/0183-fix-pcf50633-use-pcf-not-data-in-probe-for-context.p.patch | 219 |
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 + |