aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/rtc/rtc-ds1307.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/rtc/rtc-ds1307.c')
-rw-r--r--drivers/rtc/rtc-ds1307.c60
1 files changed, 33 insertions, 27 deletions
diff --git a/drivers/rtc/rtc-ds1307.c b/drivers/rtc/rtc-ds1307.c
index 4e75345a559a..9e2aad68f96d 100644
--- a/drivers/rtc/rtc-ds1307.c
+++ b/drivers/rtc/rtc-ds1307.c
@@ -930,52 +930,58 @@ read_rtc:
930 ds1307->rtc = devm_rtc_device_register(&client->dev, client->name, 930 ds1307->rtc = devm_rtc_device_register(&client->dev, client->name,
931 &ds13xx_rtc_ops, THIS_MODULE); 931 &ds13xx_rtc_ops, THIS_MODULE);
932 if (IS_ERR(ds1307->rtc)) { 932 if (IS_ERR(ds1307->rtc)) {
933 err = PTR_ERR(ds1307->rtc); 933 return PTR_ERR(ds1307->rtc);
934 dev_err(&client->dev,
935 "unable to register the class device\n");
936 goto exit;
937 } 934 }
938 935
939 if (want_irq) { 936 if (want_irq) {
940 err = request_irq(client->irq, ds1307_irq, IRQF_SHARED, 937 err = request_irq(client->irq, ds1307_irq, IRQF_SHARED,
941 ds1307->rtc->name, client); 938 ds1307->rtc->name, client);
942 if (err) { 939 if (err) {
943 dev_err(&client->dev, 940 client->irq = 0;
944 "unable to request IRQ!\n"); 941 dev_err(&client->dev, "unable to request IRQ!\n");
945 goto exit; 942 } else {
946 }
947 943
948 device_set_wakeup_capable(&client->dev, 1); 944 device_set_wakeup_capable(&client->dev, 1);
949 set_bit(HAS_ALARM, &ds1307->flags); 945 set_bit(HAS_ALARM, &ds1307->flags);
950 dev_dbg(&client->dev, "got IRQ %d\n", client->irq); 946 dev_dbg(&client->dev, "got IRQ %d\n", client->irq);
947 }
951 } 948 }
952 949
953 if (chip->nvram_size) { 950 if (chip->nvram_size) {
951
954 ds1307->nvram = devm_kzalloc(&client->dev, 952 ds1307->nvram = devm_kzalloc(&client->dev,
955 sizeof(struct bin_attribute), 953 sizeof(struct bin_attribute),
956 GFP_KERNEL); 954 GFP_KERNEL);
957 if (!ds1307->nvram) { 955 if (!ds1307->nvram) {
958 err = -ENOMEM; 956 dev_err(&client->dev, "cannot allocate memory for nvram sysfs\n");
959 goto err_irq; 957 } else {
958
959 ds1307->nvram->attr.name = "nvram";
960 ds1307->nvram->attr.mode = S_IRUGO | S_IWUSR;
961
962 sysfs_bin_attr_init(ds1307->nvram);
963
964 ds1307->nvram->read = ds1307_nvram_read;
965 ds1307->nvram->write = ds1307_nvram_write;
966 ds1307->nvram->size = chip->nvram_size;
967 ds1307->nvram_offset = chip->nvram_offset;
968
969 err = sysfs_create_bin_file(&client->dev.kobj,
970 ds1307->nvram);
971 if (err) {
972 dev_err(&client->dev,
973 "unable to create sysfs file: %s\n",
974 ds1307->nvram->attr.name);
975 } else {
976 set_bit(HAS_NVRAM, &ds1307->flags);
977 dev_info(&client->dev, "%zu bytes nvram\n",
978 ds1307->nvram->size);
979 }
960 } 980 }
961 ds1307->nvram->attr.name = "nvram";
962 ds1307->nvram->attr.mode = S_IRUGO | S_IWUSR;
963 sysfs_bin_attr_init(ds1307->nvram);
964 ds1307->nvram->read = ds1307_nvram_read;
965 ds1307->nvram->write = ds1307_nvram_write;
966 ds1307->nvram->size = chip->nvram_size;
967 ds1307->nvram_offset = chip->nvram_offset;
968 err = sysfs_create_bin_file(&client->dev.kobj, ds1307->nvram);
969 if (err)
970 goto err_irq;
971 set_bit(HAS_NVRAM, &ds1307->flags);
972 dev_info(&client->dev, "%zu bytes nvram\n", ds1307->nvram->size);
973 } 981 }
974 982
975 return 0; 983 return 0;
976 984
977err_irq:
978 free_irq(client->irq, client);
979exit: 985exit:
980 return err; 986 return err;
981} 987}