diff options
Diffstat (limited to 'drivers/rtc/rtc-pcf8583.c')
| -rw-r--r-- | drivers/rtc/rtc-pcf8583.c | 52 | 
1 files changed, 12 insertions, 40 deletions
diff --git a/drivers/rtc/rtc-pcf8583.c b/drivers/rtc/rtc-pcf8583.c index 2d201afead3..c2639845186 100644 --- a/drivers/rtc/rtc-pcf8583.c +++ b/drivers/rtc/rtc-pcf8583.c @@ -17,6 +17,7 @@  #include <linux/slab.h>  #include <linux/rtc.h>  #include <linux/init.h> +#include <linux/err.h>  #include <linux/errno.h>  #include <linux/bcd.h> @@ -185,10 +186,11 @@ static int pcf8583_rtc_read_time(struct device *dev, struct rtc_time *tm)  	if (ctrl & (CTRL_STOP | CTRL_HOLD)) {  		unsigned char new_ctrl = ctrl & ~(CTRL_STOP | CTRL_HOLD); -		printk(KERN_WARNING "RTC: resetting control %02x -> %02x\n", -		       ctrl, new_ctrl); +		dev_warn(dev, "resetting control %02x -> %02x\n", +			ctrl, new_ctrl); -		if ((err = pcf8583_set_ctrl(client, &new_ctrl)) < 0) +		err = pcf8583_set_ctrl(client, &new_ctrl); +		if (err < 0)  			return err;  	} @@ -268,40 +270,22 @@ static int pcf8583_probe(struct i2c_client *client,  				const struct i2c_device_id *id)  {  	struct pcf8583 *pcf8583; -	int err;  	if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C))  		return -ENODEV; -	pcf8583 = kzalloc(sizeof(struct pcf8583), GFP_KERNEL); +	pcf8583 = devm_kzalloc(&client->dev, sizeof(struct pcf8583), +				GFP_KERNEL);  	if (!pcf8583)  		return -ENOMEM;  	i2c_set_clientdata(client, pcf8583); -	pcf8583->rtc = rtc_device_register(pcf8583_driver.driver.name, -			&client->dev, &pcf8583_rtc_ops, THIS_MODULE); +	pcf8583->rtc = devm_rtc_device_register(&client->dev, +				pcf8583_driver.driver.name, +				&pcf8583_rtc_ops, THIS_MODULE); -	if (IS_ERR(pcf8583->rtc)) { -		err = PTR_ERR(pcf8583->rtc); -		goto exit_kfree; -	} - -	return 0; - -exit_kfree: -	kfree(pcf8583); -	return err; -} - -static int __devexit pcf8583_remove(struct i2c_client *client) -{ -	struct pcf8583 *pcf8583 = i2c_get_clientdata(client); - -	if (pcf8583->rtc) -		rtc_device_unregister(pcf8583->rtc); -	kfree(pcf8583); -	return 0; +	return PTR_ERR_OR_ZERO(pcf8583->rtc);  }  static const struct i2c_device_id pcf8583_id[] = { @@ -316,22 +300,10 @@ static struct i2c_driver pcf8583_driver = {  		.owner	= THIS_MODULE,  	},  	.probe		= pcf8583_probe, -	.remove		= __devexit_p(pcf8583_remove),  	.id_table	= pcf8583_id,  }; -static __init int pcf8583_init(void) -{ -	return i2c_add_driver(&pcf8583_driver); -} - -static __exit void pcf8583_exit(void) -{ -	i2c_del_driver(&pcf8583_driver); -} - -module_init(pcf8583_init); -module_exit(pcf8583_exit); +module_i2c_driver(pcf8583_driver);  MODULE_AUTHOR("Russell King");  MODULE_DESCRIPTION("PCF8583 I2C RTC driver");  | 
