|
@@ -113,15 +113,15 @@ static void _filter_clk_table(struct mmp_clk_mix *mix,
|
|
{
|
|
{
|
|
int i;
|
|
int i;
|
|
struct mmp_clk_mix_clk_table *item;
|
|
struct mmp_clk_mix_clk_table *item;
|
|
- struct clk *parent, *clk;
|
|
|
|
|
|
+ struct clk_hw *parent, *hw;
|
|
unsigned long parent_rate;
|
|
unsigned long parent_rate;
|
|
|
|
|
|
- clk = mix->hw.clk;
|
|
|
|
|
|
+ hw = &mix->hw;
|
|
|
|
|
|
for (i = 0; i < table_size; i++) {
|
|
for (i = 0; i < table_size; i++) {
|
|
item = &table[i];
|
|
item = &table[i];
|
|
- parent = clk_get_parent_by_index(clk, item->parent_index);
|
|
|
|
- parent_rate = __clk_get_rate(parent);
|
|
|
|
|
|
+ parent = clk_hw_get_parent_by_index(hw, item->parent_index);
|
|
|
|
+ parent_rate = clk_hw_get_rate(parent);
|
|
if (parent_rate % item->rate) {
|
|
if (parent_rate % item->rate) {
|
|
item->valid = 0;
|
|
item->valid = 0;
|
|
} else {
|
|
} else {
|
|
@@ -181,7 +181,7 @@ static int _set_rate(struct mmp_clk_mix *mix, u32 mux_val, u32 div_val,
|
|
|
|
|
|
if (timeout == 0) {
|
|
if (timeout == 0) {
|
|
pr_err("%s:%s cannot do frequency change\n",
|
|
pr_err("%s:%s cannot do frequency change\n",
|
|
- __func__, __clk_get_name(mix->hw.clk));
|
|
|
|
|
|
+ __func__, clk_hw_get_name(&mix->hw));
|
|
ret = -EBUSY;
|
|
ret = -EBUSY;
|
|
goto error;
|
|
goto error;
|
|
}
|
|
}
|
|
@@ -206,16 +206,14 @@ static int mmp_clk_mix_determine_rate(struct clk_hw *hw,
|
|
{
|
|
{
|
|
struct mmp_clk_mix *mix = to_clk_mix(hw);
|
|
struct mmp_clk_mix *mix = to_clk_mix(hw);
|
|
struct mmp_clk_mix_clk_table *item;
|
|
struct mmp_clk_mix_clk_table *item;
|
|
- struct clk *parent, *parent_best, *mix_clk;
|
|
|
|
|
|
+ struct clk_hw *parent, *parent_best;
|
|
unsigned long parent_rate, mix_rate, mix_rate_best, parent_rate_best;
|
|
unsigned long parent_rate, mix_rate, mix_rate_best, parent_rate_best;
|
|
unsigned long gap, gap_best;
|
|
unsigned long gap, gap_best;
|
|
u32 div_val_max;
|
|
u32 div_val_max;
|
|
unsigned int div;
|
|
unsigned int div;
|
|
int i, j;
|
|
int i, j;
|
|
|
|
|
|
- mix_clk = hw->clk;
|
|
|
|
|
|
|
|
- parent = NULL;
|
|
|
|
mix_rate_best = 0;
|
|
mix_rate_best = 0;
|
|
parent_rate_best = 0;
|
|
parent_rate_best = 0;
|
|
gap_best = ULONG_MAX;
|
|
gap_best = ULONG_MAX;
|
|
@@ -226,9 +224,9 @@ static int mmp_clk_mix_determine_rate(struct clk_hw *hw,
|
|
item = &mix->table[i];
|
|
item = &mix->table[i];
|
|
if (item->valid == 0)
|
|
if (item->valid == 0)
|
|
continue;
|
|
continue;
|
|
- parent = clk_get_parent_by_index(mix_clk,
|
|
|
|
|
|
+ parent = clk_hw_get_parent_by_index(hw,
|
|
item->parent_index);
|
|
item->parent_index);
|
|
- parent_rate = __clk_get_rate(parent);
|
|
|
|
|
|
+ parent_rate = clk_hw_get_rate(parent);
|
|
mix_rate = parent_rate / item->divisor;
|
|
mix_rate = parent_rate / item->divisor;
|
|
gap = abs(mix_rate - req->rate);
|
|
gap = abs(mix_rate - req->rate);
|
|
if (parent_best == NULL || gap < gap_best) {
|
|
if (parent_best == NULL || gap < gap_best) {
|
|
@@ -242,8 +240,8 @@ static int mmp_clk_mix_determine_rate(struct clk_hw *hw,
|
|
}
|
|
}
|
|
} else {
|
|
} else {
|
|
for (i = 0; i < clk_hw_get_num_parents(hw); i++) {
|
|
for (i = 0; i < clk_hw_get_num_parents(hw); i++) {
|
|
- parent = clk_get_parent_by_index(mix_clk, i);
|
|
|
|
- parent_rate = __clk_get_rate(parent);
|
|
|
|
|
|
+ parent = clk_hw_get_parent_by_index(hw, i);
|
|
|
|
+ parent_rate = clk_hw_get_rate(parent);
|
|
div_val_max = _get_maxdiv(mix);
|
|
div_val_max = _get_maxdiv(mix);
|
|
for (j = 0; j < div_val_max; j++) {
|
|
for (j = 0; j < div_val_max; j++) {
|
|
div = _get_div(mix, j);
|
|
div = _get_div(mix, j);
|
|
@@ -266,7 +264,7 @@ found:
|
|
return -EINVAL;
|
|
return -EINVAL;
|
|
|
|
|
|
req->best_parent_rate = parent_rate_best;
|
|
req->best_parent_rate = parent_rate_best;
|
|
- req->best_parent_hw = __clk_get_hw(parent_best);
|
|
|
|
|
|
+ req->best_parent_hw = parent_best;
|
|
req->rate = mix_rate_best;
|
|
req->rate = mix_rate_best;
|
|
|
|
|
|
return 0;
|
|
return 0;
|
|
@@ -382,20 +380,19 @@ static int mmp_clk_set_rate(struct clk_hw *hw, unsigned long rate,
|
|
struct mmp_clk_mix_clk_table *item;
|
|
struct mmp_clk_mix_clk_table *item;
|
|
unsigned long parent_rate;
|
|
unsigned long parent_rate;
|
|
unsigned int best_divisor;
|
|
unsigned int best_divisor;
|
|
- struct clk *mix_clk, *parent;
|
|
|
|
|
|
+ struct clk_hw *parent;
|
|
int i;
|
|
int i;
|
|
|
|
|
|
best_divisor = best_parent_rate / rate;
|
|
best_divisor = best_parent_rate / rate;
|
|
|
|
|
|
- mix_clk = hw->clk;
|
|
|
|
if (mix->table) {
|
|
if (mix->table) {
|
|
for (i = 0; i < mix->table_size; i++) {
|
|
for (i = 0; i < mix->table_size; i++) {
|
|
item = &mix->table[i];
|
|
item = &mix->table[i];
|
|
if (item->valid == 0)
|
|
if (item->valid == 0)
|
|
continue;
|
|
continue;
|
|
- parent = clk_get_parent_by_index(mix_clk,
|
|
|
|
|
|
+ parent = clk_hw_get_parent_by_index(hw,
|
|
item->parent_index);
|
|
item->parent_index);
|
|
- parent_rate = __clk_get_rate(parent);
|
|
|
|
|
|
+ parent_rate = clk_hw_get_rate(parent);
|
|
if (parent_rate == best_parent_rate
|
|
if (parent_rate == best_parent_rate
|
|
&& item->divisor == best_divisor)
|
|
&& item->divisor == best_divisor)
|
|
break;
|
|
break;
|
|
@@ -409,8 +406,8 @@ static int mmp_clk_set_rate(struct clk_hw *hw, unsigned long rate,
|
|
return -EINVAL;
|
|
return -EINVAL;
|
|
} else {
|
|
} else {
|
|
for (i = 0; i < clk_hw_get_num_parents(hw); i++) {
|
|
for (i = 0; i < clk_hw_get_num_parents(hw); i++) {
|
|
- parent = clk_get_parent_by_index(mix_clk, i);
|
|
|
|
- parent_rate = __clk_get_rate(parent);
|
|
|
|
|
|
+ parent = clk_hw_get_parent_by_index(hw, i);
|
|
|
|
+ parent_rate = clk_hw_get_rate(parent);
|
|
if (parent_rate == best_parent_rate)
|
|
if (parent_rate == best_parent_rate)
|
|
break;
|
|
break;
|
|
}
|
|
}
|