aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/i2c/chips/pcf50633.c117
1 files changed, 60 insertions, 57 deletions
diff --git a/drivers/i2c/chips/pcf50633.c b/drivers/i2c/chips/pcf50633.c
index 850bf934a2a..4cb333c9ba3 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;
}