/* Check if the rate is within the voltage limits of the clock. */ static bool is_rate_valid(struct clk *clk, unsigned long rate) { int level; if (!clk->vdd_class) return true; level = find_vdd_level(clk, rate); return level >= 0; }
/* Remove vote for a voltage level corresponding to a clock's rate. */ static void unvote_rate_vdd(struct clk *clk, unsigned long rate) { int level; if (!clk->vdd_class) return; level = find_vdd_level(clk, rate); if (level < 0) return; unvote_vdd_level(clk->vdd_class, level); }
/* Vote for a voltage level corresponding to a clock's rate. */ static int vote_rate_vdd(struct clk *clk, unsigned long rate) { int ret; int level; if (!clk->vdd_class) return 0; level = find_vdd_level(clk, rate); if (level < 0) return level; ret = vote_vdd_level(clk->vdd_class, level); if (clk->flags & CLKFLAG_VOTE_VDD_DELAY) udelay(60); return ret; }
static int fmax_rates_show(struct seq_file *m, void *unused) { struct clk *clock = m->private; int level = 0; int vdd_level = find_vdd_level(clock, clock->rate); if (vdd_level < 0) { seq_printf(m, "could not find_vdd_level for %s, %ld\n", clock->dbg_name, clock->rate); return 0; } for (level = 0; level < clock->num_fmax; level++) { if (vdd_level == level) seq_printf(m, "[%lu] ", clock->fmax[level]); else seq_printf(m, "%lu ", clock->fmax[level]); } seq_printf(m, "\n"); return 0; }