- data |= divp << PLL_DIVP_SHIFT;
- writel(data, &pll->pll_base);
+ misc_data = readl(&simple_pll->pll_misc);
+ misc_data &= ~(pllinfo->kcp_mask << pllinfo->kcp_shift);
+ misc_data |= cpcon << pllinfo->kcp_shift;
+ misc_data &= ~(pllinfo->kvco_mask << pllinfo->kvco_shift);
+ misc_data |= lfcon << pllinfo->kvco_shift;
+
+ data = (divm << pllinfo->m_shift) | (divn << pllinfo->n_shift);
+ data |= divp << pllinfo->p_shift;
+ data |= (1 << PLL_ENABLE_SHIFT); /* BYPASS s/b 0 already */
+
+ if (pll) {
+ writel(misc_data, &pll->pll_misc);
+ writel(data, &pll->pll_base);
+ } else {
+ writel(misc_data, &simple_pll->pll_misc);
+ writel(data, &simple_pll->pll_base);
+ }