| From 68af4fa8f39b542a6cde7ac19518d88e9b3099dc Mon Sep 17 00:00:00 2001 |
| From: Boris Brezillon <boris.brezillon@free-electrons.com> |
| Date: Thu, 1 Dec 2016 20:27:21 +0100 |
| Subject: clk: bcm2835: Avoid overwriting the div info when disabling a pll_div clk |
| |
| From: Boris Brezillon <boris.brezillon@free-electrons.com> |
| |
| commit 68af4fa8f39b542a6cde7ac19518d88e9b3099dc upstream. |
| |
| bcm2835_pll_divider_off() is resetting the divider field in the A2W reg |
| to zero when disabling the clock. |
| |
| Make sure we preserve this value by reading the previous a2w_reg value |
| first and ORing the result with A2W_PLL_CHANNEL_DISABLE. |
| |
| Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com> |
| Fixes: 41691b8862e2 ("clk: bcm2835: Add support for programming the audio domain clocks") |
| Reviewed-by: Eric Anholt <eric@anholt.net> |
| Signed-off-by: Stephen Boyd <sboyd@codeaurora.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/clk/bcm/clk-bcm2835.c | 4 +++- |
| 1 file changed, 3 insertions(+), 1 deletion(-) |
| |
| --- a/drivers/clk/bcm/clk-bcm2835.c |
| +++ b/drivers/clk/bcm/clk-bcm2835.c |
| @@ -751,7 +751,9 @@ static void bcm2835_pll_divider_off(stru |
| cprman_write(cprman, data->cm_reg, |
| (cprman_read(cprman, data->cm_reg) & |
| ~data->load_mask) | data->hold_mask); |
| - cprman_write(cprman, data->a2w_reg, A2W_PLL_CHANNEL_DISABLE); |
| + cprman_write(cprman, data->a2w_reg, |
| + cprman_read(cprman, data->a2w_reg) | |
| + A2W_PLL_CHANNEL_DISABLE); |
| spin_unlock(&cprman->regs_lock); |
| } |
| |