mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-04-27 08:43:56 +00:00
clk: at91: generated: set audio_pll_allowed in at91_clk_register_generated()
Set gck->audio_pll_allowed in at91_clk_register_generated. This makes it
easier to do it from code that is not parsing device tree.
Also, this fixes an issue where the resulting clk_hw can be dereferenced
before being tested for error.
Fixes: 1a1a36d72e
("clk: at91: clk-generated: make gclk determine audio_pll rate")
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
Signed-off-by: Stephen Boyd <sboyd@kernel.org>
This commit is contained in:
parent
08979ee55a
commit
c1e4580a1d
1 changed files with 10 additions and 17 deletions
|
@ -280,7 +280,7 @@ static void clk_generated_startup(struct clk_generated *gck)
|
||||||
static struct clk_hw * __init
|
static struct clk_hw * __init
|
||||||
at91_clk_register_generated(struct regmap *regmap, spinlock_t *lock,
|
at91_clk_register_generated(struct regmap *regmap, spinlock_t *lock,
|
||||||
const char *name, const char **parent_names,
|
const char *name, const char **parent_names,
|
||||||
u8 num_parents, u8 id,
|
u8 num_parents, u8 id, bool pll_audio,
|
||||||
const struct clk_range *range)
|
const struct clk_range *range)
|
||||||
{
|
{
|
||||||
struct clk_generated *gck;
|
struct clk_generated *gck;
|
||||||
|
@ -304,6 +304,7 @@ at91_clk_register_generated(struct regmap *regmap, spinlock_t *lock,
|
||||||
gck->regmap = regmap;
|
gck->regmap = regmap;
|
||||||
gck->lock = lock;
|
gck->lock = lock;
|
||||||
gck->range = *range;
|
gck->range = *range;
|
||||||
|
gck->audio_pll_allowed = pll_audio;
|
||||||
|
|
||||||
clk_generated_startup(gck);
|
clk_generated_startup(gck);
|
||||||
hw = &gck->hw;
|
hw = &gck->hw;
|
||||||
|
@ -329,7 +330,6 @@ static void __init of_sama5d2_clk_generated_setup(struct device_node *np)
|
||||||
struct device_node *gcknp;
|
struct device_node *gcknp;
|
||||||
struct clk_range range = CLK_RANGE(0, 0);
|
struct clk_range range = CLK_RANGE(0, 0);
|
||||||
struct regmap *regmap;
|
struct regmap *regmap;
|
||||||
struct clk_generated *gck;
|
|
||||||
|
|
||||||
num_parents = of_clk_get_parent_count(np);
|
num_parents = of_clk_get_parent_count(np);
|
||||||
if (num_parents == 0 || num_parents > GENERATED_SOURCE_MAX)
|
if (num_parents == 0 || num_parents > GENERATED_SOURCE_MAX)
|
||||||
|
@ -346,6 +346,8 @@ static void __init of_sama5d2_clk_generated_setup(struct device_node *np)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
for_each_child_of_node(np, gcknp) {
|
for_each_child_of_node(np, gcknp) {
|
||||||
|
bool pll_audio = false;
|
||||||
|
|
||||||
if (of_property_read_u32(gcknp, "reg", &id))
|
if (of_property_read_u32(gcknp, "reg", &id))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
@ -358,23 +360,14 @@ static void __init of_sama5d2_clk_generated_setup(struct device_node *np)
|
||||||
of_at91_get_clk_range(gcknp, "atmel,clk-output-range",
|
of_at91_get_clk_range(gcknp, "atmel,clk-output-range",
|
||||||
&range);
|
&range);
|
||||||
|
|
||||||
|
if (of_device_is_compatible(np, "atmel,sama5d2-clk-generated") &&
|
||||||
|
(id == GCK_ID_I2S0 || id == GCK_ID_I2S1 ||
|
||||||
|
id == GCK_ID_CLASSD))
|
||||||
|
pll_audio = true;
|
||||||
|
|
||||||
hw = at91_clk_register_generated(regmap, &pmc_pcr_lock, name,
|
hw = at91_clk_register_generated(regmap, &pmc_pcr_lock, name,
|
||||||
parent_names, num_parents,
|
parent_names, num_parents,
|
||||||
id, &range);
|
id, pll_audio, &range);
|
||||||
|
|
||||||
gck = to_clk_generated(hw);
|
|
||||||
|
|
||||||
if (of_device_is_compatible(np,
|
|
||||||
"atmel,sama5d2-clk-generated")) {
|
|
||||||
if (gck->id == GCK_ID_I2S0 || gck->id == GCK_ID_I2S1 ||
|
|
||||||
gck->id == GCK_ID_CLASSD)
|
|
||||||
gck->audio_pll_allowed = true;
|
|
||||||
else
|
|
||||||
gck->audio_pll_allowed = false;
|
|
||||||
} else {
|
|
||||||
gck->audio_pll_allowed = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (IS_ERR(hw))
|
if (IS_ERR(hw))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue