Esempio n. 1
0
static int clk_utmi_is_prepared(struct clk_hw *hw)
{
	struct clk_utmi *utmi = to_clk_utmi(hw);
	struct at91_pmc *pmc = utmi->pmc;

	return !!(pmc_read(pmc, AT91_PMC_SR) & AT91_PMC_LOCKU);
}
Esempio n. 2
0
static void clk_utmi_disable(struct clk *clk)
{
	struct clk_utmi *utmi = to_clk_utmi(clk);

	regmap_write_bits(utmi->regmap_pmc, AT91_CKGR_UCKR,
			  AT91_PMC_UPLLEN, 0);
}
Esempio n. 3
0
static void clk_utmi_unprepare(struct clk_hw *hw)
{
	struct clk_utmi *utmi = to_clk_utmi(hw);
	struct at91_pmc *pmc = utmi->pmc;
	u32 tmp = at91_pmc_read(AT91_CKGR_UCKR) & ~AT91_PMC_UPLLEN;

	pmc_write(pmc, AT91_CKGR_UCKR, tmp);
}
Esempio n. 4
0
static int clk_utmi_enable(struct clk *clk)
{
	struct clk *hw_parent;
	struct clk_utmi *utmi = to_clk_utmi(clk);
	unsigned int uckr = AT91_PMC_UPLLEN | AT91_PMC_UPLLCOUNT |
			    AT91_PMC_BIASEN;
	unsigned int utmi_ref_clk_freq;
	unsigned long parent_rate;

	/*
	 * If mainck rate is different from 12 MHz, we have to configure the
	 * FREQ field of the SFR_UTMICKTRIM register to generate properly
	 * the utmi clock.
	 */
	hw_parent = clk_get_parent(clk);
	parent_rate = clk_get_rate(hw_parent);

	switch (parent_rate) {
	case 12000000:
		utmi_ref_clk_freq = 0;
		break;
	case 16000000:
		utmi_ref_clk_freq = 1;
		break;
	case 24000000:
		utmi_ref_clk_freq = 2;
		break;
	/*
	 * Not supported on SAMA5D2 but it's not an issue since MAINCK
	 * maximum value is 24 MHz.
	 */
	case 48000000:
		utmi_ref_clk_freq = 3;
		break;
	default:
		pr_err("UTMICK: unsupported mainck rate\n");
		return -EINVAL;
	}


	if (utmi->regmap_sfr) {
		regmap_write_bits(utmi->regmap_sfr, AT91_SFR_UTMICKTRIM,
				  AT91_UTMICKTRIM_FREQ, utmi_ref_clk_freq);
	} else if (utmi_ref_clk_freq) {
		pr_err("UTMICK: sfr node required\n");
		return -EINVAL;
	}
	regmap_write_bits(utmi->regmap_pmc, AT91_CKGR_UCKR, uckr, uckr);


	while (!clk_utmi_ready(utmi->regmap_pmc))
		barrier();

	return 0;
}
Esempio n. 5
0
static int clk_utmi_prepare(struct clk_hw *hw)
{
	struct clk_utmi *utmi = to_clk_utmi(hw);
	unsigned int uckr = AT91_PMC_UPLLEN | AT91_PMC_UPLLCOUNT |
			    AT91_PMC_BIASEN;

	regmap_update_bits(utmi->regmap, AT91_CKGR_UCKR, uckr, uckr);

	while (!clk_utmi_ready(utmi->regmap))
		cpu_relax();

	return 0;
}
Esempio n. 6
0
static int clk_utmi_prepare(struct clk_hw *hw)
{
	struct clk_utmi *utmi = to_clk_utmi(hw);
	struct at91_pmc *pmc = utmi->pmc;
	u32 tmp = at91_pmc_read(AT91_CKGR_UCKR) | AT91_PMC_UPLLEN |
		  AT91_PMC_UPLLCOUNT | AT91_PMC_BIASEN;

	pmc_write(pmc, AT91_CKGR_UCKR, tmp);

	while (!(pmc_read(pmc, AT91_PMC_SR) & AT91_PMC_LOCKU)) {
		enable_irq(utmi->irq);
		wait_event(utmi->wait,
			   pmc_read(pmc, AT91_PMC_SR) & AT91_PMC_LOCKU);
	}

	return 0;
}
Esempio n. 7
0
static void clk_utmi_unprepare(struct clk_hw *hw)
{
	struct clk_utmi *utmi = to_clk_utmi(hw);

	regmap_update_bits(utmi->regmap, AT91_CKGR_UCKR, AT91_PMC_UPLLEN, 0);
}
Esempio n. 8
0
static int clk_utmi_is_prepared(struct clk_hw *hw)
{
	struct clk_utmi *utmi = to_clk_utmi(hw);

	return clk_utmi_ready(utmi->regmap);
}
Esempio n. 9
0
static int clk_utmi_is_enabled(struct clk *clk)
{
	struct clk_utmi *utmi = to_clk_utmi(clk);

	return clk_utmi_ready(utmi->regmap_pmc);
}