diff options
Diffstat (limited to 'drivers/rtc/rtc-rx8025.c')
| -rw-r--r-- | drivers/rtc/rtc-rx8025.c | 67 | 
1 files changed, 11 insertions, 56 deletions
diff --git a/drivers/rtc/rtc-rx8025.c b/drivers/rtc/rtc-rx8025.c index 1146e3522d3..e6298e02b40 100644 --- a/drivers/rtc/rtc-rx8025.c +++ b/drivers/rtc/rtc-rx8025.c @@ -424,37 +424,12 @@ static int rx8025_alarm_irq_enable(struct device *dev, unsigned int enabled)  	return 0;  } -static int rx8025_irq_set_state(struct device *dev, int enabled) -{ -	struct i2c_client *client = to_i2c_client(dev); -	struct rx8025_data *rx8025 = i2c_get_clientdata(client); -	int ctrl1; -	int err; - -	if (client->irq <= 0) -		return -ENXIO; - -	ctrl1 = rx8025->ctrl1 & ~RX8025_BIT_CTRL1_CT; -	if (enabled) -		ctrl1 |= RX8025_BIT_CTRL1_CT_1HZ; -	if (ctrl1 != rx8025->ctrl1) { -		rx8025->ctrl1 = ctrl1; -		err = rx8025_write_reg(rx8025->client, RX8025_REG_CTRL1, -				       rx8025->ctrl1); -		if (err) -			return err; -	} - -	return 0; -} -  static struct rtc_class_ops rx8025_rtc_ops = {  	.read_time = rx8025_get_time,  	.set_time = rx8025_set_time,  	.read_alarm = rx8025_read_alarm,  	.set_alarm = rx8025_set_alarm,  	.alarm_irq_enable = rx8025_alarm_irq_enable, -	.irq_set_state  = rx8025_irq_set_state,  };  /* @@ -559,8 +534,8 @@ static void rx8025_sysfs_unregister(struct device *dev)  	device_remove_file(dev, &dev_attr_clock_adjust_ppb);  } -static int __devinit rx8025_probe(struct i2c_client *client, -				  const struct i2c_device_id *id) +static int rx8025_probe(struct i2c_client *client, +			const struct i2c_device_id *id)  {  	struct i2c_adapter *adapter = to_i2c_adapter(client->dev.parent);  	struct rx8025_data *rx8025; @@ -574,9 +549,8 @@ static int __devinit rx8025_probe(struct i2c_client *client,  		goto errout;  	} -	rx8025 = kzalloc(sizeof(*rx8025), GFP_KERNEL); +	rx8025 = devm_kzalloc(&client->dev, sizeof(*rx8025), GFP_KERNEL);  	if (!rx8025) { -		dev_err(&adapter->dev, "failed to alloc memory\n");  		err = -ENOMEM;  		goto errout;  	} @@ -587,7 +561,7 @@ static int __devinit rx8025_probe(struct i2c_client *client,  	err = rx8025_init_client(client, &need_reset);  	if (err) -		goto errout_free; +		goto errout;  	if (need_reset) {  		struct rtc_time tm; @@ -597,12 +571,12 @@ static int __devinit rx8025_probe(struct i2c_client *client,  		rx8025_set_time(&client->dev, &tm);  	} -	rx8025->rtc = rtc_device_register(client->name, &client->dev, +	rx8025->rtc = devm_rtc_device_register(&client->dev, client->name,  					  &rx8025_rtc_ops, THIS_MODULE);  	if (IS_ERR(rx8025->rtc)) {  		err = PTR_ERR(rx8025->rtc);  		dev_err(&client->dev, "unable to register the class device\n"); -		goto errout_free; +		goto errout;  	}  	if (client->irq > 0) { @@ -611,7 +585,7 @@ static int __devinit rx8025_probe(struct i2c_client *client,  				  0, "rx8025", client);  		if (err) {  			dev_err(&client->dev, "unable to request IRQ\n"); -			goto errout_reg; +			goto errout;  		}  	} @@ -628,18 +602,12 @@ errout_irq:  	if (client->irq > 0)  		free_irq(client->irq, client); -errout_reg: -	rtc_device_unregister(rx8025->rtc); - -errout_free: -	kfree(rx8025); -  errout:  	dev_err(&adapter->dev, "probing for rx8025 failed\n");  	return err;  } -static int __devexit rx8025_remove(struct i2c_client *client) +static int rx8025_remove(struct i2c_client *client)  {  	struct rx8025_data *rx8025 = i2c_get_clientdata(client);  	struct mutex *lock = &rx8025->rtc->ops_lock; @@ -650,12 +618,10 @@ static int __devexit rx8025_remove(struct i2c_client *client)  		mutex_unlock(lock);  		free_irq(client->irq, client); -		flush_scheduled_work(); +		cancel_work_sync(&rx8025->work);  	}  	rx8025_sysfs_unregister(&client->dev); -	rtc_device_unregister(rx8025->rtc); -	kfree(rx8025);  	return 0;  } @@ -665,23 +631,12 @@ static struct i2c_driver rx8025_driver = {  		.owner = THIS_MODULE,  	},  	.probe		= rx8025_probe, -	.remove		= __devexit_p(rx8025_remove), +	.remove		= rx8025_remove,  	.id_table	= rx8025_id,  }; -static int __init rx8025_init(void) -{ -	return i2c_add_driver(&rx8025_driver); -} - -static void __exit rx8025_exit(void) -{ -	i2c_del_driver(&rx8025_driver); -} +module_i2c_driver(rx8025_driver);  MODULE_AUTHOR("Wolfgang Grandegger <wg@grandegger.com>");  MODULE_DESCRIPTION("RX-8025 SA/NB RTC driver");  MODULE_LICENSE("GPL"); - -module_init(rx8025_init); -module_exit(rx8025_exit);  | 
