44
44
#define WZRD_DR_INIT_REG_OFFSET 0x25C
45
45
#define WZRD_DR_DIV_TO_PHASE_OFFSET 4
46
46
#define WZRD_DR_BEGIN_DYNA_RECONF 0x03
47
+ #define WZRD_DR_BEGIN_DYNA_RECONF_5_2 0x07
48
+ #define WZRD_DR_BEGIN_DYNA_RECONF1_5_2 0x02
47
49
48
50
#define WZRD_USEC_POLL 10
49
51
#define WZRD_TIMEOUT_POLL 1000
@@ -165,7 +167,9 @@ static int clk_wzrd_dynamic_reconfig(struct clk_hw *hw, unsigned long rate,
165
167
goto err_reconfig ;
166
168
167
169
/* Initiate reconfiguration */
168
- writel (WZRD_DR_BEGIN_DYNA_RECONF ,
170
+ writel (WZRD_DR_BEGIN_DYNA_RECONF_5_2 ,
171
+ divider -> base + WZRD_DR_INIT_REG_OFFSET );
172
+ writel (WZRD_DR_BEGIN_DYNA_RECONF1_5_2 ,
169
173
divider -> base + WZRD_DR_INIT_REG_OFFSET );
170
174
171
175
/* Check status register */
@@ -224,7 +228,7 @@ static int clk_wzrd_dynamic_reconfig_f(struct clk_hw *hw, unsigned long rate,
224
228
struct clk_wzrd_divider * divider = to_clk_wzrd_divider (hw );
225
229
void __iomem * div_addr = divider -> base + divider -> offset ;
226
230
227
- rate_div = (( parent_rate * 1000 ) / rate );
231
+ rate_div = DIV_ROUND_DOWN_ULL ( parent_rate * 1000 , rate );
228
232
clockout0_div = rate_div / 1000 ;
229
233
230
234
pre = DIV_ROUND_CLOSEST ((parent_rate * 1000 ), rate );
@@ -246,7 +250,9 @@ static int clk_wzrd_dynamic_reconfig_f(struct clk_hw *hw, unsigned long rate,
246
250
return err ;
247
251
248
252
/* Initiate reconfiguration */
249
- writel (WZRD_DR_BEGIN_DYNA_RECONF ,
253
+ writel (WZRD_DR_BEGIN_DYNA_RECONF_5_2 ,
254
+ divider -> base + WZRD_DR_INIT_REG_OFFSET );
255
+ writel (WZRD_DR_BEGIN_DYNA_RECONF1_5_2 ,
250
256
divider -> base + WZRD_DR_INIT_REG_OFFSET );
251
257
252
258
/* Check status register */
0 commit comments