@@ -43,6 +43,8 @@ struct rzg2l_wdt_priv {
43
43
struct reset_control * rstc ;
44
44
unsigned long osc_clk_rate ;
45
45
unsigned long delay ;
46
+ struct clk * pclk ;
47
+ struct clk * osc_clk ;
46
48
};
47
49
48
50
static void rzg2l_wdt_wait_delay (struct rzg2l_wdt_priv * priv )
@@ -118,7 +120,9 @@ static int rzg2l_wdt_restart(struct watchdog_device *wdev,
118
120
119
121
/* Reset the module before we modify any register */
120
122
reset_control_reset (priv -> rstc );
121
- pm_runtime_get_sync (wdev -> parent );
123
+
124
+ clk_prepare_enable (priv -> pclk );
125
+ clk_prepare_enable (priv -> osc_clk );
122
126
123
127
/* smallest counter value to reboot soon */
124
128
rzg2l_wdt_write (priv , WDTSET_COUNTER_VAL (1 ), WDTSET );
@@ -165,7 +169,6 @@ static int rzg2l_wdt_probe(struct platform_device *pdev)
165
169
struct device * dev = & pdev -> dev ;
166
170
struct rzg2l_wdt_priv * priv ;
167
171
unsigned long pclk_rate ;
168
- struct clk * wdt_clk ;
169
172
int ret ;
170
173
171
174
priv = devm_kzalloc (dev , sizeof (* priv ), GFP_KERNEL );
@@ -177,22 +180,20 @@ static int rzg2l_wdt_probe(struct platform_device *pdev)
177
180
return PTR_ERR (priv -> base );
178
181
179
182
/* Get watchdog main clock */
180
- wdt_clk = clk_get (& pdev -> dev , "oscclk" );
181
- if (IS_ERR (wdt_clk ))
182
- return dev_err_probe (& pdev -> dev , PTR_ERR (wdt_clk ), "no oscclk" );
183
+ priv -> osc_clk = devm_clk_get (& pdev -> dev , "oscclk" );
184
+ if (IS_ERR (priv -> osc_clk ))
185
+ return dev_err_probe (& pdev -> dev , PTR_ERR (priv -> osc_clk ), "no oscclk" );
183
186
184
- priv -> osc_clk_rate = clk_get_rate (wdt_clk );
185
- clk_put (wdt_clk );
187
+ priv -> osc_clk_rate = clk_get_rate (priv -> osc_clk );
186
188
if (!priv -> osc_clk_rate )
187
189
return dev_err_probe (& pdev -> dev , - EINVAL , "oscclk rate is 0" );
188
190
189
191
/* Get Peripheral clock */
190
- wdt_clk = clk_get (& pdev -> dev , "pclk" );
191
- if (IS_ERR (wdt_clk ))
192
- return dev_err_probe (& pdev -> dev , PTR_ERR (wdt_clk ), "no pclk" );
192
+ priv -> pclk = devm_clk_get (& pdev -> dev , "pclk" );
193
+ if (IS_ERR (priv -> pclk ))
194
+ return dev_err_probe (& pdev -> dev , PTR_ERR (priv -> pclk ), "no pclk" );
193
195
194
- pclk_rate = clk_get_rate (wdt_clk );
195
- clk_put (wdt_clk );
196
+ pclk_rate = clk_get_rate (priv -> pclk );
196
197
if (!pclk_rate )
197
198
return dev_err_probe (& pdev -> dev , - EINVAL , "pclk rate is 0" );
198
199
0 commit comments