Skip to content

Commit 73c950d

Browse files
Russell Kingbebarino
authored andcommitted
clk: si5351: fix PLL reset
Changing the audio sample rate on the SolidRun Cubox disrupts the video output. The Si5351 provides both the video clock (using PLLA on output 0) and the audio clock (using PLLB on output 2). When the rate of clock output 2 is changed, it reconfigures PLLB, which results in both PLLA and PLLB being reset. The reset of PLLA causes clock output 0 to be disrupted, thereby causing a loss of sync by the attached display device. Hence, each time the audio sample rate changes (eg, when a video player starts up, or when starting to play music) the video display momentarily blanks while the Si5351 settles down. Prior to the commit below, this behaviour did not happen. Fix this by only resetting only the PLL which has been changed. Fixes: 6dc669a ("clk: si5351: Add PLL soft reset") Signed-off-by: Russell King <[email protected]> Acked-by: Sebastian Hesselbarth <[email protected]> Signed-off-by: Stephen Boyd <[email protected]>
1 parent 4ab6cf1 commit 73c950d

File tree

1 file changed

+5
-7
lines changed

1 file changed

+5
-7
lines changed

drivers/clk/clk-si5351.c

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -519,6 +519,11 @@ static int si5351_pll_set_rate(struct clk_hw *hw, unsigned long rate,
519519
SI5351_CLK_INTEGER_MODE,
520520
(hwdata->params.p2 == 0) ? SI5351_CLK_INTEGER_MODE : 0);
521521

522+
/* Do a pll soft reset on the affected pll */
523+
si5351_reg_write(hwdata->drvdata, SI5351_PLL_RESET,
524+
hwdata->num == 0 ? SI5351_PLL_RESET_A :
525+
SI5351_PLL_RESET_B);
526+
522527
dev_dbg(&hwdata->drvdata->client->dev,
523528
"%s - %s: p1 = %lu, p2 = %lu, p3 = %lu, parent_rate = %lu, rate = %lu\n",
524529
__func__, clk_hw_get_name(hw),
@@ -1091,13 +1096,6 @@ static int si5351_clkout_set_rate(struct clk_hw *hw, unsigned long rate,
10911096
si5351_set_bits(hwdata->drvdata, SI5351_CLK0_CTRL + hwdata->num,
10921097
SI5351_CLK_POWERDOWN, 0);
10931098

1094-
/*
1095-
* Do a pll soft reset on both plls, needed in some cases to get
1096-
* all outputs running.
1097-
*/
1098-
si5351_reg_write(hwdata->drvdata, SI5351_PLL_RESET,
1099-
SI5351_PLL_RESET_A | SI5351_PLL_RESET_B);
1100-
11011099
dev_dbg(&hwdata->drvdata->client->dev,
11021100
"%s - %s: rdiv = %u, parent_rate = %lu, rate = %lu\n",
11031101
__func__, clk_hw_get_name(hw), (1 << rdiv),

0 commit comments

Comments
 (0)