14
14
#include <linux/bcd.h>
15
15
#include <linux/mfd/rk808.h>
16
16
#include <linux/platform_device.h>
17
- #include <linux/i2c.h>
18
17
19
18
/* RTC_CTRL_REG bitfields */
20
19
#define BIT_RTC_CTRL_REG_STOP_RTC_M BIT(0)
@@ -51,7 +50,7 @@ struct rk_rtc_compat_reg {
51
50
};
52
51
53
52
struct rk808_rtc {
54
- struct rk808 * rk808 ;
53
+ struct regmap * regmap ;
55
54
struct rtc_device * rtc ;
56
55
struct rk_rtc_compat_reg * creg ;
57
56
int irq ;
@@ -97,12 +96,11 @@ static void gregorian_to_rockchip(struct rtc_time *tm)
97
96
static int rk808_rtc_readtime (struct device * dev , struct rtc_time * tm )
98
97
{
99
98
struct rk808_rtc * rk808_rtc = dev_get_drvdata (dev );
100
- struct rk808 * rk808 = rk808_rtc -> rk808 ;
101
99
u8 rtc_data [NUM_TIME_REGS ];
102
100
int ret ;
103
101
104
102
/* Force an update of the shadowed registers right now */
105
- ret = regmap_update_bits (rk808 -> regmap , rk808_rtc -> creg -> ctrl_reg ,
103
+ ret = regmap_update_bits (rk808_rtc -> regmap , rk808_rtc -> creg -> ctrl_reg ,
106
104
BIT_RTC_CTRL_REG_RTC_GET_TIME ,
107
105
BIT_RTC_CTRL_REG_RTC_GET_TIME );
108
106
if (ret ) {
@@ -116,15 +114,15 @@ static int rk808_rtc_readtime(struct device *dev, struct rtc_time *tm)
116
114
* 32khz. If we clear the GET_TIME bit here, the time of i2c transfer
117
115
* certainly more than 31.25us: 16 * 2.5us at 400kHz bus frequency.
118
116
*/
119
- ret = regmap_update_bits (rk808 -> regmap , rk808_rtc -> creg -> ctrl_reg ,
117
+ ret = regmap_update_bits (rk808_rtc -> regmap , rk808_rtc -> creg -> ctrl_reg ,
120
118
BIT_RTC_CTRL_REG_RTC_GET_TIME ,
121
119
0 );
122
120
if (ret ) {
123
121
dev_err (dev , "Failed to update bits rtc_ctrl: %d\n" , ret );
124
122
return ret ;
125
123
}
126
124
127
- ret = regmap_bulk_read (rk808 -> regmap , rk808_rtc -> creg -> seconds_reg ,
125
+ ret = regmap_bulk_read (rk808_rtc -> regmap , rk808_rtc -> creg -> seconds_reg ,
128
126
rtc_data , NUM_TIME_REGS );
129
127
if (ret ) {
130
128
dev_err (dev , "Failed to bulk read rtc_data: %d\n" , ret );
@@ -148,7 +146,6 @@ static int rk808_rtc_readtime(struct device *dev, struct rtc_time *tm)
148
146
static int rk808_rtc_set_time (struct device * dev , struct rtc_time * tm )
149
147
{
150
148
struct rk808_rtc * rk808_rtc = dev_get_drvdata (dev );
151
- struct rk808 * rk808 = rk808_rtc -> rk808 ;
152
149
u8 rtc_data [NUM_TIME_REGS ];
153
150
int ret ;
154
151
@@ -163,22 +160,22 @@ static int rk808_rtc_set_time(struct device *dev, struct rtc_time *tm)
163
160
rtc_data [6 ] = bin2bcd (tm -> tm_wday );
164
161
165
162
/* Stop RTC while updating the RTC registers */
166
- ret = regmap_update_bits (rk808 -> regmap , rk808_rtc -> creg -> ctrl_reg ,
163
+ ret = regmap_update_bits (rk808_rtc -> regmap , rk808_rtc -> creg -> ctrl_reg ,
167
164
BIT_RTC_CTRL_REG_STOP_RTC_M ,
168
165
BIT_RTC_CTRL_REG_STOP_RTC_M );
169
166
if (ret ) {
170
167
dev_err (dev , "Failed to update RTC control: %d\n" , ret );
171
168
return ret ;
172
169
}
173
170
174
- ret = regmap_bulk_write (rk808 -> regmap , rk808_rtc -> creg -> seconds_reg ,
171
+ ret = regmap_bulk_write (rk808_rtc -> regmap , rk808_rtc -> creg -> seconds_reg ,
175
172
rtc_data , NUM_TIME_REGS );
176
173
if (ret ) {
177
174
dev_err (dev , "Failed to bull write rtc_data: %d\n" , ret );
178
175
return ret ;
179
176
}
180
177
/* Start RTC again */
181
- ret = regmap_update_bits (rk808 -> regmap , rk808_rtc -> creg -> ctrl_reg ,
178
+ ret = regmap_update_bits (rk808_rtc -> regmap , rk808_rtc -> creg -> ctrl_reg ,
182
179
BIT_RTC_CTRL_REG_STOP_RTC_M , 0 );
183
180
if (ret ) {
184
181
dev_err (dev , "Failed to update RTC control: %d\n" , ret );
@@ -191,12 +188,11 @@ static int rk808_rtc_set_time(struct device *dev, struct rtc_time *tm)
191
188
static int rk808_rtc_readalarm (struct device * dev , struct rtc_wkalrm * alrm )
192
189
{
193
190
struct rk808_rtc * rk808_rtc = dev_get_drvdata (dev );
194
- struct rk808 * rk808 = rk808_rtc -> rk808 ;
195
191
u8 alrm_data [NUM_ALARM_REGS ];
196
192
uint32_t int_reg ;
197
193
int ret ;
198
194
199
- ret = regmap_bulk_read (rk808 -> regmap ,
195
+ ret = regmap_bulk_read (rk808_rtc -> regmap ,
200
196
rk808_rtc -> creg -> alarm_seconds_reg ,
201
197
alrm_data , NUM_ALARM_REGS );
202
198
if (ret ) {
@@ -212,7 +208,7 @@ static int rk808_rtc_readalarm(struct device *dev, struct rtc_wkalrm *alrm)
212
208
alrm -> time .tm_year = (bcd2bin (alrm_data [5 ] & YEARS_REG_MSK )) + 100 ;
213
209
rockchip_to_gregorian (& alrm -> time );
214
210
215
- ret = regmap_read (rk808 -> regmap , rk808_rtc -> creg -> int_reg , & int_reg );
211
+ ret = regmap_read (rk808_rtc -> regmap , rk808_rtc -> creg -> int_reg , & int_reg );
216
212
if (ret ) {
217
213
dev_err (dev , "Failed to read RTC INT REG: %d\n" , ret );
218
214
return ret ;
@@ -228,21 +224,19 @@ static int rk808_rtc_readalarm(struct device *dev, struct rtc_wkalrm *alrm)
228
224
229
225
static int rk808_rtc_stop_alarm (struct rk808_rtc * rk808_rtc )
230
226
{
231
- struct rk808 * rk808 = rk808_rtc -> rk808 ;
232
227
int ret ;
233
228
234
- ret = regmap_update_bits (rk808 -> regmap , rk808_rtc -> creg -> int_reg ,
229
+ ret = regmap_update_bits (rk808_rtc -> regmap , rk808_rtc -> creg -> int_reg ,
235
230
BIT_RTC_INTERRUPTS_REG_IT_ALARM_M , 0 );
236
231
237
232
return ret ;
238
233
}
239
234
240
235
static int rk808_rtc_start_alarm (struct rk808_rtc * rk808_rtc )
241
236
{
242
- struct rk808 * rk808 = rk808_rtc -> rk808 ;
243
237
int ret ;
244
238
245
- ret = regmap_update_bits (rk808 -> regmap , rk808_rtc -> creg -> int_reg ,
239
+ ret = regmap_update_bits (rk808_rtc -> regmap , rk808_rtc -> creg -> int_reg ,
246
240
BIT_RTC_INTERRUPTS_REG_IT_ALARM_M ,
247
241
BIT_RTC_INTERRUPTS_REG_IT_ALARM_M );
248
242
@@ -252,7 +246,6 @@ static int rk808_rtc_start_alarm(struct rk808_rtc *rk808_rtc)
252
246
static int rk808_rtc_setalarm (struct device * dev , struct rtc_wkalrm * alrm )
253
247
{
254
248
struct rk808_rtc * rk808_rtc = dev_get_drvdata (dev );
255
- struct rk808 * rk808 = rk808_rtc -> rk808 ;
256
249
u8 alrm_data [NUM_ALARM_REGS ];
257
250
int ret ;
258
251
@@ -272,7 +265,7 @@ static int rk808_rtc_setalarm(struct device *dev, struct rtc_wkalrm *alrm)
272
265
alrm_data [4 ] = bin2bcd (alrm -> time .tm_mon + 1 );
273
266
alrm_data [5 ] = bin2bcd (alrm -> time .tm_year - 100 );
274
267
275
- ret = regmap_bulk_write (rk808 -> regmap ,
268
+ ret = regmap_bulk_write (rk808_rtc -> regmap ,
276
269
rk808_rtc -> creg -> alarm_seconds_reg ,
277
270
alrm_data , NUM_ALARM_REGS );
278
271
if (ret ) {
@@ -313,20 +306,18 @@ static int rk808_rtc_alarm_irq_enable(struct device *dev,
313
306
static irqreturn_t rk808_alarm_irq (int irq , void * data )
314
307
{
315
308
struct rk808_rtc * rk808_rtc = data ;
316
- struct rk808 * rk808 = rk808_rtc -> rk808 ;
317
- struct i2c_client * client = rk808 -> i2c ;
318
309
int ret ;
319
310
320
- ret = regmap_write (rk808 -> regmap , rk808_rtc -> creg -> status_reg ,
311
+ ret = regmap_write (rk808_rtc -> regmap , rk808_rtc -> creg -> status_reg ,
321
312
RTC_STATUS_MASK );
322
313
if (ret ) {
323
- dev_err (& client -> dev ,
314
+ dev_err (& rk808_rtc -> rtc -> dev ,
324
315
"%s:Failed to update RTC status: %d\n" , __func__ , ret );
325
316
return ret ;
326
317
}
327
318
328
319
rtc_update_irq (rk808_rtc -> rtc , 1 , RTC_IRQF | RTC_AF );
329
- dev_dbg (& client -> dev ,
320
+ dev_dbg (& rk808_rtc -> rtc -> dev ,
330
321
"%s:irq=%d\n" , __func__ , irq );
331
322
return IRQ_HANDLED ;
332
323
}
@@ -404,10 +395,12 @@ static int rk808_rtc_probe(struct platform_device *pdev)
404
395
break ;
405
396
}
406
397
platform_set_drvdata (pdev , rk808_rtc );
407
- rk808_rtc -> rk808 = rk808 ;
398
+ rk808_rtc -> regmap = dev_get_regmap (pdev -> dev .parent , NULL );
399
+ if (!rk808_rtc -> regmap )
400
+ return - ENODEV ;
408
401
409
402
/* start rtc running by default, and use shadowed timer. */
410
- ret = regmap_update_bits (rk808 -> regmap , rk808_rtc -> creg -> ctrl_reg ,
403
+ ret = regmap_update_bits (rk808_rtc -> regmap , rk808_rtc -> creg -> ctrl_reg ,
411
404
BIT_RTC_CTRL_REG_STOP_RTC_M |
412
405
BIT_RTC_CTRL_REG_RTC_READSEL_M ,
413
406
BIT_RTC_CTRL_REG_RTC_READSEL_M );
@@ -417,7 +410,7 @@ static int rk808_rtc_probe(struct platform_device *pdev)
417
410
return ret ;
418
411
}
419
412
420
- ret = regmap_write (rk808 -> regmap , rk808_rtc -> creg -> status_reg ,
413
+ ret = regmap_write (rk808_rtc -> regmap , rk808_rtc -> creg -> status_reg ,
421
414
RTC_STATUS_MASK );
422
415
if (ret ) {
423
416
dev_err (& pdev -> dev ,
0 commit comments