Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bdb08cb2 authored by Russell King's avatar Russell King Committed by Russell King
Browse files

[ARM] pxa: allow clk aliases



We need to support more than one name+device for a struct clk for a
small number of peripherals.  We do this by re-using struct clk alias
to another struct clk - IOW, if we find that the entry we're using is
an alias, we return the aliased entry not the one we found.

Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
parent 5e329d1c
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -47,6 +47,9 @@ struct clk *clk_get(struct device *dev, const char *id)
		clk = p;
	mutex_unlock(&clocks_mutex);

	if (!IS_ERR(clk) && clk->ops == NULL)
		clk = clk->other;

	return clk;
}
EXPORT_SYMBOL(clk_get);
+12 −0
Original line number Diff line number Diff line
@@ -15,6 +15,7 @@ struct clk {
	unsigned int		cken;
	unsigned int		delay;
	unsigned int		enabled;
	struct clk		*other;
};

#define INIT_CKEN(_name, _cken, _rate, _delay, _dev)	\
@@ -35,6 +36,17 @@ struct clk {
		.cken	= CKEN_##_cken,			\
	}

/*
 * This is a placeholder to alias one clock device+name pair
 * to another struct clk.
 */
#define INIT_CKOTHER(_name, _other, _dev)		\
	{						\
		.name	= _name,			\
		.dev	= _dev,				\
		.other	= _other,			\
	}

extern const struct clkops clk_cken_ops;

void clk_cken_enable(struct clk *clk);
+8 −0
Original line number Diff line number Diff line
@@ -117,6 +117,10 @@ static struct clk pxa25x_hwuart_clk =
	INIT_CKEN("UARTCLK", HWUART, 14745600, 1, &pxa_device_hwuart.dev)
;

/*
 * PXA 2xx clock declarations. Order is important (see aliases below)
 * Please be careful not to disrupt the ordering.
 */
static struct clk pxa25x_clks[] = {
	INIT_CK("LCDCLK", LCD, &clk_pxa25x_lcd_ops, &pxa_device_fb.dev),
	INIT_CKEN("UARTCLK", FFUART, 14745600, 1, &pxa_device_ffuart.dev),
@@ -140,6 +144,8 @@ static struct clk pxa25x_clks[] = {
	INIT_CKEN("FICPCLK", FICP, 47923000, 0, NULL),
};

static struct clk gpio7_clk = INIT_CKOTHER("GPIO7_CK", &pxa25x_clks[4], NULL);

#ifdef CONFIG_PM

#define SAVE(x)		sleep_save[SLEEP_SAVE_##x] = x
@@ -311,6 +317,8 @@ static int __init pxa25x_init(void)
	if (cpu_is_pxa25x())
		ret = platform_device_register(&pxa_device_hwuart);

	clks_register(&gpio7_clk, 1);

	return ret;
}