static void clk_audio_pll_pmc_disable(struct clk_hw *hw)
{
	struct clk_audio_pmc *apmc_ck = to_clk_audio_pmc(hw);
	struct at91_pmc *pmc = apmc_ck->pmc;
	u32 tmp;

	pmc_lock(pmc);
	tmp = pmc_read(pmc, AT91_PMC_AUDIO_PLL0) & ~AT91_PMC_AUDIO_PLL_PMCEN;
	pmc_write(pmc, AT91_PMC_AUDIO_PLL0, tmp);
	pmc_unlock(pmc);
}
Esempio n. 2
0
/* make sure that pll is in reset state beforehand */
static int clk_audio_pll_prepare(struct clk_hw *hw)
{
    struct clk_audio_frac *fck = to_clk_audio_frac(hw);
    struct at91_pmc *pmc = fck->pmc;
    u32 tmp;

    pmc_lock(pmc);
    tmp = pmc_read(pmc, AT91_PMC_AUDIO_PLL0) & ~AT91_PMC_AUDIO_PLL_RESETN;
    pmc_write(pmc, AT91_PMC_AUDIO_PLL0, tmp);
    pmc_unlock(pmc);
    return 0;
}
Esempio n. 3
0
static void clk_audio_pll_disable(struct clk_hw *hw)
{
    struct clk_audio_frac *fck = to_clk_audio_frac(hw);
    struct at91_pmc *pmc = fck->pmc;
    u32 tmp;

    pmc_lock(pmc);
    tmp = pmc_read(pmc, AT91_PMC_AUDIO_PLL0) & ~AT91_PMC_AUDIO_PLL_PLLEN;
    pmc_write(pmc, AT91_PMC_AUDIO_PLL0, tmp);
    /* do it in 2 separated writes */
    pmc_write(pmc, AT91_PMC_AUDIO_PLL0, tmp & ~AT91_PMC_AUDIO_PLL_RESETN);
    pmc_unlock(pmc);
}
static int clk_audio_pll_pmc_enable(struct clk_hw *hw)
{
	struct clk_audio_pmc *apmc_ck = to_clk_audio_pmc(hw);
	struct at91_pmc *pmc = apmc_ck->pmc;
	u32 tmp;

	pmc_lock(pmc);
	tmp = pmc_read(pmc, AT91_PMC_AUDIO_PLL0) & ~AT91_PMC_AUDIO_PLL_QDPMC_MASK;
	tmp |= AT91_PMC_AUDIO_PLL_PMCEN | AT91_PMC_AUDIO_PLL_QDPMC(apmc_ck->qdpmc);
	pmc_write(pmc, AT91_PMC_AUDIO_PLL0, tmp);
	pmc_unlock(pmc);
	return 0;
}
Esempio n. 5
0
static int clk_sama5d4_h32mx_set_rate(struct clk_hw *hw, unsigned long rate,
				    unsigned long parent_rate)
{
	struct clk_sama5d4_h32mx *h32mxclk = to_clk_sama5d4_h32mx(hw);
	struct at91_pmc *pmc = h32mxclk->pmc;
	u32 tmp;

	if (parent_rate != rate && (parent_rate / 2) != rate)
		return -EINVAL;

	pmc_lock(pmc);
	tmp = pmc_read(pmc, AT91_PMC_MCKR) & ~AT91_PMC_H32MXDIV;
	if ((parent_rate / 2) == rate)
		tmp |= AT91_PMC_H32MXDIV;
	pmc_write(pmc, AT91_PMC_MCKR, tmp);
	pmc_unlock(pmc);

	return 0;
}
Esempio n. 6
0
static int clk_audio_pll_enable(struct clk_hw *hw)
{
    struct clk_audio_frac *fck = to_clk_audio_frac(hw);
    struct at91_pmc *pmc = fck->pmc;
    u32 tmp, tmp2;

    pmc_lock(pmc);
    tmp = pmc_read(pmc, AT91_PMC_AUDIO_PLL0);
    pmc_write(pmc, AT91_PMC_AUDIO_PLL0, tmp | AT91_PMC_AUDIO_PLL_RESETN);
    tmp2 = pmc_read(pmc, AT91_PMC_AUDIO_PLL1) & ~AT91_PMC_AUDIO_PLL_FRACR_MASK;
    pmc_write(pmc, AT91_PMC_AUDIO_PLL1, tmp2 | fck->fracr);

    /*
     * reset and enabled have to be done in 2 separated writes
     * for AT91_PMC_AUDIO_PLL0
     */
    tmp &= ~AT91_PMC_AUDIO_PLL_ND_MASK;
    pmc_write(pmc, AT91_PMC_AUDIO_PLL0, tmp | AT91_PMC_AUDIO_PLL_RESETN
              | AT91_PMC_AUDIO_PLL_PLLEN
              | AT91_PMC_AUDIO_PLL_ND(fck->nd));
    pmc_unlock(pmc);
    return 0;
}