Skip to content

Commit fae507a

Browse files
Georgi Djakovbebarino
authored andcommitted
clk: qcom: Do some error handling in configure_bank()
Currently configure_bank() returns void. Add some error checking on the regmap calls and propagate if there is any error. Signed-off-by: Georgi Djakov <[email protected]> Signed-off-by: Stephen Boyd <[email protected]>
1 parent 7f21897 commit fae507a

File tree

1 file changed

+42
-21
lines changed

1 file changed

+42
-21
lines changed

drivers/clk/qcom/clk-rcg.c

Lines changed: 42 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -203,10 +203,10 @@ static u32 mn_to_reg(struct mn *mn, u32 m, u32 n, u32 val)
203203
return val;
204204
}
205205

206-
static void configure_bank(struct clk_dyn_rcg *rcg, const struct freq_tbl *f)
206+
static int configure_bank(struct clk_dyn_rcg *rcg, const struct freq_tbl *f)
207207
{
208208
u32 ns, md, reg;
209-
int bank, new_bank;
209+
int bank, new_bank, ret;
210210
struct mn *mn;
211211
struct pre_div *p;
212212
struct src_sel *s;
@@ -218,38 +218,56 @@ static void configure_bank(struct clk_dyn_rcg *rcg, const struct freq_tbl *f)
218218

219219
enabled = __clk_is_enabled(hw->clk);
220220

221-
regmap_read(rcg->clkr.regmap, rcg->bank_reg, &reg);
221+
ret = regmap_read(rcg->clkr.regmap, rcg->bank_reg, &reg);
222+
if (ret)
223+
return ret;
222224
bank = reg_to_bank(rcg, reg);
223225
new_bank = enabled ? !bank : bank;
224226

225227
ns_reg = rcg->ns_reg[new_bank];
226-
regmap_read(rcg->clkr.regmap, ns_reg, &ns);
228+
ret = regmap_read(rcg->clkr.regmap, ns_reg, &ns);
229+
if (ret)
230+
return ret;
227231

228232
if (banked_mn) {
229233
mn = &rcg->mn[new_bank];
230234
md_reg = rcg->md_reg[new_bank];
231235

232236
ns |= BIT(mn->mnctr_reset_bit);
233-
regmap_write(rcg->clkr.regmap, ns_reg, ns);
237+
ret = regmap_write(rcg->clkr.regmap, ns_reg, ns);
238+
if (ret)
239+
return ret;
234240

235-
regmap_read(rcg->clkr.regmap, md_reg, &md);
241+
ret = regmap_read(rcg->clkr.regmap, md_reg, &md);
242+
if (ret)
243+
return ret;
236244
md = mn_to_md(mn, f->m, f->n, md);
237-
regmap_write(rcg->clkr.regmap, md_reg, md);
238-
245+
ret = regmap_write(rcg->clkr.regmap, md_reg, md);
246+
if (ret)
247+
return ret;
239248
ns = mn_to_ns(mn, f->m, f->n, ns);
240-
regmap_write(rcg->clkr.regmap, ns_reg, ns);
249+
ret = regmap_write(rcg->clkr.regmap, ns_reg, ns);
250+
if (ret)
251+
return ret;
241252

242253
/* Two NS registers means mode control is in NS register */
243254
if (rcg->ns_reg[0] != rcg->ns_reg[1]) {
244255
ns = mn_to_reg(mn, f->m, f->n, ns);
245-
regmap_write(rcg->clkr.regmap, ns_reg, ns);
256+
ret = regmap_write(rcg->clkr.regmap, ns_reg, ns);
257+
if (ret)
258+
return ret;
246259
} else {
247260
reg = mn_to_reg(mn, f->m, f->n, reg);
248-
regmap_write(rcg->clkr.regmap, rcg->bank_reg, reg);
261+
ret = regmap_write(rcg->clkr.regmap, rcg->bank_reg,
262+
reg);
263+
if (ret)
264+
return ret;
249265
}
250266

251267
ns &= ~BIT(mn->mnctr_reset_bit);
252-
regmap_write(rcg->clkr.regmap, ns_reg, ns);
268+
ret = regmap_write(rcg->clkr.regmap, ns_reg, ns);
269+
if (ret)
270+
return ret;
253271
}
254272

255273
if (banked_p) {
@@ -259,13 +277,20 @@ static void configure_bank(struct clk_dyn_rcg *rcg, const struct freq_tbl *f)
259277

260278
s = &rcg->s[new_bank];
261279
ns = src_to_ns(s, s->parent_map[f->src], ns);
262-
regmap_write(rcg->clkr.regmap, ns_reg, ns);
280+
ret = regmap_write(rcg->clkr.regmap, ns_reg, ns);
281+
if (ret)
282+
return ret;
263283

264284
if (enabled) {
265-
regmap_read(rcg->clkr.regmap, rcg->bank_reg, &reg);
285+
ret = regmap_read(rcg->clkr.regmap, rcg->bank_reg, &reg);
286+
if (ret)
287+
return ret;
266288
reg ^= BIT(rcg->mux_sel_bit);
267-
regmap_write(rcg->clkr.regmap, rcg->bank_reg, reg);
289+
ret = regmap_write(rcg->clkr.regmap, rcg->bank_reg, reg);
290+
if (ret)
291+
return ret;
268292
}
293+
return 0;
269294
}
270295

271296
static int clk_dyn_rcg_set_parent(struct clk_hw *hw, u8 index)
@@ -292,9 +317,7 @@ static int clk_dyn_rcg_set_parent(struct clk_hw *hw, u8 index)
292317
f.pre_div = ns_to_pre_div(&rcg->p[bank], ns) + 1;
293318

294319
f.src = index;
295-
configure_bank(rcg, &f);
296-
297-
return 0;
320+
return configure_bank(rcg, &f);
298321
}
299322

300323
/*
@@ -567,9 +590,7 @@ static int __clk_dyn_rcg_set_rate(struct clk_hw *hw, unsigned long rate)
567590
if (!f)
568591
return -EINVAL;
569592

570-
configure_bank(rcg, f);
571-
572-
return 0;
593+
return configure_bank(rcg, f);
573594
}
574595

575596
static int clk_dyn_rcg_set_rate(struct clk_hw *hw, unsigned long rate,

0 commit comments

Comments
 (0)