15
15
16
16
#define MAX_RTC_TEST 3
17
17
18
+ struct rtc_test_data {
19
+ struct rtc_device * rtc ;
20
+ time64_t offset ;
21
+ };
22
+
18
23
struct platform_device * pdev [MAX_RTC_TEST ];
19
24
20
25
static int test_rtc_read_alarm (struct device * dev ,
@@ -29,16 +34,21 @@ static int test_rtc_set_alarm(struct device *dev,
29
34
return 0 ;
30
35
}
31
36
32
- static int test_rtc_read_time (struct device * dev ,
33
- struct rtc_time * tm )
37
+ static int test_rtc_read_time (struct device * dev , struct rtc_time * tm )
34
38
{
35
- rtc_time64_to_tm (ktime_get_real_seconds (), tm );
39
+ struct rtc_test_data * rtd = dev_get_drvdata (dev );
40
+
41
+ rtc_time64_to_tm (ktime_get_real_seconds () + rtd -> offset , tm );
42
+
36
43
return 0 ;
37
44
}
38
45
39
46
static int test_rtc_set_mmss64 (struct device * dev , time64_t secs )
40
47
{
41
- dev_info (dev , "%s, secs = %lld\n" , __func__ , (long long )secs );
48
+ struct rtc_test_data * rtd = dev_get_drvdata (dev );
49
+
50
+ rtd -> offset = secs - ktime_get_real_seconds ();
51
+
42
52
return 0 ;
43
53
}
44
54
@@ -88,21 +98,18 @@ static DEVICE_ATTR(irq, S_IRUGO | S_IWUSR, test_irq_show, test_irq_store);
88
98
89
99
static int test_probe (struct platform_device * plat_dev )
90
100
{
91
- int err ;
92
- struct rtc_device * rtc ;
101
+ struct rtc_test_data * rtd ;
93
102
94
- rtc = devm_rtc_device_register (& plat_dev -> dev , "test" ,
95
- & test_rtc_ops , THIS_MODULE );
96
- if (IS_ERR (rtc )) {
97
- return PTR_ERR (rtc );
98
- }
103
+ rtd = devm_kzalloc (& plat_dev -> dev , sizeof (* rtd ), GFP_KERNEL );
104
+ if (!rtd )
105
+ return - ENOMEM ;
99
106
100
- err = device_create_file (& plat_dev -> dev , & dev_attr_irq );
101
- if (err )
102
- dev_err (& plat_dev -> dev , "Unable to create sysfs entry: %s\n" ,
103
- dev_attr_irq .attr .name );
107
+ platform_set_drvdata (plat_dev , rtd );
104
108
105
- platform_set_drvdata (plat_dev , rtc );
109
+ rtd -> rtc = devm_rtc_device_register (& plat_dev -> dev , "test" ,
110
+ & test_rtc_ops , THIS_MODULE );
111
+ if (IS_ERR (rtd -> rtc ))
112
+ return PTR_ERR (rtd -> rtc );
106
113
107
114
return 0 ;
108
115
}
0 commit comments