66
66
67
67
#define SHDW_CFG_NOT_USED (32)
68
68
69
- struct shdwc_config {
69
+ struct shdwc_reg_config {
70
70
u8 wkup_pin_input ;
71
71
u8 mr_rtcwk_shift ;
72
72
u8 mr_rttwk_shift ;
73
73
u8 sr_rtcwk_shift ;
74
74
u8 sr_rttwk_shift ;
75
75
};
76
76
77
+ struct reg_config {
78
+ struct shdwc_reg_config shdwc ;
79
+ };
80
+
77
81
struct shdwc {
78
- const struct shdwc_config * cfg ;
82
+ const struct reg_config * rcfg ;
79
83
struct clk * sclk ;
80
84
void __iomem * shdwc_base ;
81
85
void __iomem * mpddrc_base ;
@@ -95,6 +99,7 @@ static const unsigned long long sdwc_dbc_period[] = {
95
99
static void __init at91_wakeup_status (struct platform_device * pdev )
96
100
{
97
101
struct shdwc * shdw = platform_get_drvdata (pdev );
102
+ const struct reg_config * rcfg = shdw -> rcfg ;
98
103
u32 reg ;
99
104
char * reason = "unknown" ;
100
105
@@ -106,11 +111,11 @@ static void __init at91_wakeup_status(struct platform_device *pdev)
106
111
if (!reg )
107
112
return ;
108
113
109
- if (SHDW_WK_PIN (reg , shdw -> cfg ))
114
+ if (SHDW_WK_PIN (reg , & rcfg -> shdwc ))
110
115
reason = "WKUP pin" ;
111
- else if (SHDW_RTCWK (reg , shdw -> cfg ))
116
+ else if (SHDW_RTCWK (reg , & rcfg -> shdwc ))
112
117
reason = "RTC" ;
113
- else if (SHDW_RTTWK (reg , shdw -> cfg ))
118
+ else if (SHDW_RTTWK (reg , & rcfg -> shdwc ))
114
119
reason = "RTT" ;
115
120
116
121
pr_info ("AT91: Wake-Up source: %s\n" , reason );
@@ -215,6 +220,7 @@ static u32 at91_shdwc_get_wakeup_input(struct platform_device *pdev,
215
220
static void at91_shdwc_dt_configure (struct platform_device * pdev )
216
221
{
217
222
struct shdwc * shdw = platform_get_drvdata (pdev );
223
+ const struct reg_config * rcfg = shdw -> rcfg ;
218
224
struct device_node * np = pdev -> dev .of_node ;
219
225
u32 mode = 0 , tmp , input ;
220
226
@@ -227,10 +233,10 @@ static void at91_shdwc_dt_configure(struct platform_device *pdev)
227
233
mode |= AT91_SHDW_WKUPDBC (at91_shdwc_debouncer_value (pdev , tmp ));
228
234
229
235
if (of_property_read_bool (np , "atmel,wakeup-rtc-timer" ))
230
- mode |= SHDW_RTCWKEN (shdw -> cfg );
236
+ mode |= SHDW_RTCWKEN (& rcfg -> shdwc );
231
237
232
238
if (of_property_read_bool (np , "atmel,wakeup-rtt-timer" ))
233
- mode |= SHDW_RTTWKEN (shdw -> cfg );
239
+ mode |= SHDW_RTTWKEN (& rcfg -> shdwc );
234
240
235
241
dev_dbg (& pdev -> dev , "%s: mode = %#x\n" , __func__ , mode );
236
242
writel (mode , shdw -> shdwc_base + AT91_SHDW_MR );
@@ -239,30 +245,34 @@ static void at91_shdwc_dt_configure(struct platform_device *pdev)
239
245
writel (input , shdw -> shdwc_base + AT91_SHDW_WUIR );
240
246
}
241
247
242
- static const struct shdwc_config sama5d2_shdwc_config = {
243
- .wkup_pin_input = 0 ,
244
- .mr_rtcwk_shift = 17 ,
245
- .mr_rttwk_shift = SHDW_CFG_NOT_USED ,
246
- .sr_rtcwk_shift = 5 ,
247
- .sr_rttwk_shift = SHDW_CFG_NOT_USED ,
248
+ static const struct reg_config sama5d2_reg_config = {
249
+ .shdwc = {
250
+ .wkup_pin_input = 0 ,
251
+ .mr_rtcwk_shift = 17 ,
252
+ .mr_rttwk_shift = SHDW_CFG_NOT_USED ,
253
+ .sr_rtcwk_shift = 5 ,
254
+ .sr_rttwk_shift = SHDW_CFG_NOT_USED ,
255
+ },
248
256
};
249
257
250
- static const struct shdwc_config sam9x60_shdwc_config = {
251
- .wkup_pin_input = 0 ,
252
- .mr_rtcwk_shift = 17 ,
253
- .mr_rttwk_shift = 16 ,
254
- .sr_rtcwk_shift = 5 ,
255
- .sr_rttwk_shift = 4 ,
258
+ static const struct reg_config sam9x60_reg_config = {
259
+ .shdwc = {
260
+ .wkup_pin_input = 0 ,
261
+ .mr_rtcwk_shift = 17 ,
262
+ .mr_rttwk_shift = 16 ,
263
+ .sr_rtcwk_shift = 5 ,
264
+ .sr_rttwk_shift = 4 ,
265
+ },
256
266
};
257
267
258
268
static const struct of_device_id at91_shdwc_of_match [] = {
259
269
{
260
270
.compatible = "atmel,sama5d2-shdwc" ,
261
- .data = & sama5d2_shdwc_config ,
271
+ .data = & sama5d2_reg_config ,
262
272
},
263
273
{
264
274
.compatible = "microchip,sam9x60-shdwc" ,
265
- .data = & sam9x60_shdwc_config ,
275
+ .data = & sam9x60_reg_config ,
266
276
}, {
267
277
/*sentinel*/
268
278
}
@@ -303,7 +313,7 @@ static int __init at91_shdwc_probe(struct platform_device *pdev)
303
313
}
304
314
305
315
match = of_match_node (at91_shdwc_of_match , pdev -> dev .of_node );
306
- at91_shdwc -> cfg = match -> data ;
316
+ at91_shdwc -> rcfg = match -> data ;
307
317
308
318
at91_shdwc -> sclk = devm_clk_get (& pdev -> dev , NULL );
309
319
if (IS_ERR (at91_shdwc -> sclk ))
0 commit comments