diff options
Diffstat (limited to 'drivers/rtc/rtc-ds1672.c')
| -rw-r--r-- | drivers/rtc/rtc-ds1672.c | 65 | 
1 files changed, 30 insertions, 35 deletions
diff --git a/drivers/rtc/rtc-ds1672.c b/drivers/rtc/rtc-ds1672.c index 06dfb54f99b..a4888dbca2e 100644 --- a/drivers/rtc/rtc-ds1672.c +++ b/drivers/rtc/rtc-ds1672.c @@ -11,6 +11,7 @@  #include <linux/i2c.h>  #include <linux/rtc.h> +#include <linux/module.h>  #define DRV_VERSION "0.4" @@ -36,8 +37,17 @@ static int ds1672_get_datetime(struct i2c_client *client, struct rtc_time *tm)  	unsigned char buf[4];  	struct i2c_msg msgs[] = { -		{client->addr, 0, 1, &addr},	/* setup read ptr */ -		{client->addr, I2C_M_RD, 4, buf},	/* read date */ +		{/* setup read ptr */ +			.addr = client->addr, +			.len = 1, +			.buf = &addr +		}, +		{/* read date */ +			.addr = client->addr, +			.flags = I2C_M_RD, +			.len = 4, +			.buf = buf +		},  	};  	/* read date registers */ @@ -98,8 +108,17 @@ static int ds1672_get_control(struct i2c_client *client, u8 *status)  	unsigned char addr = DS1672_REG_CONTROL;  	struct i2c_msg msgs[] = { -		{client->addr, 0, 1, &addr},	/* setup read ptr */ -		{client->addr, I2C_M_RD, 1, status},	/* read control */ +		{/* setup read ptr */ +			.addr = client->addr, +			.len = 1, +			.buf = &addr +		}, +		{/* read control */ +			.addr = client->addr, +			.flags = I2C_M_RD, +			.len = 1, +			.buf = status +		},  	};  	/* read control register */ @@ -134,16 +153,6 @@ static const struct rtc_class_ops ds1672_rtc_ops = {  	.set_mmss = ds1672_rtc_set_mmss,  }; -static int ds1672_remove(struct i2c_client *client) -{ -	struct rtc_device *rtc = i2c_get_clientdata(client); - -	if (rtc) -		rtc_device_unregister(rtc); - -	return 0; -} -  static int ds1672_probe(struct i2c_client *client,  			const struct i2c_device_id *id)  { @@ -158,7 +167,7 @@ static int ds1672_probe(struct i2c_client *client,  	dev_info(&client->dev, "chip found, driver version " DRV_VERSION "\n"); -	rtc = rtc_device_register(ds1672_driver.driver.name, &client->dev, +	rtc = devm_rtc_device_register(&client->dev, ds1672_driver.driver.name,  				  &ds1672_rtc_ops, THIS_MODULE);  	if (IS_ERR(rtc)) @@ -168,8 +177,9 @@ static int ds1672_probe(struct i2c_client *client,  	/* read control register */  	err = ds1672_get_control(client, &control); -	if (err) -		goto exit_devreg; +	if (err) { +		dev_warn(&client->dev, "Unable to read the control register\n"); +	}  	if (control & DS1672_REG_CONTROL_EOSC)  		dev_warn(&client->dev, "Oscillator not enabled. " @@ -178,13 +188,10 @@ static int ds1672_probe(struct i2c_client *client,  	/* Register sysfs hooks */  	err = device_create_file(&client->dev, &dev_attr_control);  	if (err) -		goto exit_devreg; +		dev_err(&client->dev, "Unable to create sysfs entry: %s\n", +			dev_attr_control.attr.name);  	return 0; - - exit_devreg: -	rtc_device_unregister(rtc); -	return err;  }  static struct i2c_device_id ds1672_id[] = { @@ -197,24 +204,12 @@ static struct i2c_driver ds1672_driver = {  		   .name = "rtc-ds1672",  		   },  	.probe = &ds1672_probe, -	.remove = &ds1672_remove,  	.id_table = ds1672_id,  }; -static int __init ds1672_init(void) -{ -	return i2c_add_driver(&ds1672_driver); -} - -static void __exit ds1672_exit(void) -{ -	i2c_del_driver(&ds1672_driver); -} +module_i2c_driver(ds1672_driver);  MODULE_AUTHOR("Alessandro Zummo <a.zummo@towertech.it>");  MODULE_DESCRIPTION("Dallas/Maxim DS1672 timekeeper driver");  MODULE_LICENSE("GPL");  MODULE_VERSION(DRV_VERSION); - -module_init(ds1672_init); -module_exit(ds1672_exit);  | 
