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

Commit b550e47f authored by Tero Kristo's avatar Tero Kristo Committed by Paul Walmsley
Browse files

ARM: OMAP3/4: PRM: add support of late_init call to prm_ll_ops



SoC specific late_init call is now registered during PRM init, and will
be called automatically by PRM core. This helps to get rid of some
redundant initcalls and cpu_is_X checks from the PRM code.

Signed-off-by: default avatarTero Kristo <t-kristo@ti.com>
Signed-off-by: default avatarPaul Walmsley <paul@pwsan.com>
parent 2541d15f
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -126,6 +126,7 @@ struct prm_reset_src_map {
 * @read_reset_sources: ptr to the SoC PRM-specific get_reset_source impl
 * @was_any_context_lost_old: ptr to the SoC PRM context loss test fn
 * @clear_context_loss_flags_old: ptr to the SoC PRM context loss flag clear fn
 * @late_init: ptr to the late init function
 *
 * XXX @was_any_context_lost_old and @clear_context_loss_flags_old are
 * deprecated.
@@ -134,6 +135,7 @@ struct prm_ll_data {
	u32 (*read_reset_sources)(void);
	bool (*was_any_context_lost_old)(u8 part, s16 inst, u16 idx);
	void (*clear_context_loss_flags_old)(u8 part, s16 inst, u16 idx);
	int (*late_init)(void);
};

extern int prm_register(struct prm_ll_data *pld);
+3 −4
Original line number Diff line number Diff line
@@ -401,8 +401,11 @@ struct pwrdm_ops omap3_pwrdm_operations = {
 *
 */

static int omap3xxx_prm_late_init(void);

static struct prm_ll_data omap3xxx_prm_ll_data = {
	.read_reset_sources = &omap3xxx_prm_read_reset_sources,
	.late_init = &omap3xxx_prm_late_init,
};

int __init omap3xxx_prm_init(void)
@@ -417,9 +420,6 @@ static int __init omap3xxx_prm_late_init(void)
{
	int ret;

	if (!cpu_is_omap34xx())
		return 0;

	if (!(prm_features & PRM_HAS_IO_WAKEUP))
		return 0;

@@ -431,7 +431,6 @@ static int __init omap3xxx_prm_late_init(void)

	return ret;
}
omap_subsys_initcall(omap3xxx_prm_late_init);

static void __exit omap3xxx_prm_exit(void)
{
+3 −4
Original line number Diff line number Diff line
@@ -650,6 +650,8 @@ struct pwrdm_ops omap4_pwrdm_operations = {
	.pwrdm_has_voltdm	= omap4_check_vcvp,
};

static int omap44xx_prm_late_init(void);

/*
 * XXX document
 */
@@ -657,6 +659,7 @@ static struct prm_ll_data omap44xx_prm_ll_data = {
	.read_reset_sources = &omap44xx_prm_read_reset_sources,
	.was_any_context_lost_old = &omap44xx_prm_was_any_context_lost_old,
	.clear_context_loss_flags_old = &omap44xx_prm_clear_context_loss_flags_old,
	.late_init = &omap44xx_prm_late_init,
};

int __init omap44xx_prm_init(void)
@@ -669,9 +672,6 @@ int __init omap44xx_prm_init(void)

static int __init omap44xx_prm_late_init(void)
{
	if (!cpu_is_omap44xx())
		return 0;

	if (!(prm_features & PRM_HAS_IO_WAKEUP))
		return 0;

@@ -679,7 +679,6 @@ static int __init omap44xx_prm_late_init(void)

	return omap_prcm_register_chain_handler(&omap4_prcm_irq_setup);
}
omap_subsys_initcall(omap44xx_prm_late_init);

static void __exit omap44xx_prm_exit(void)
{
+8 −0
Original line number Diff line number Diff line
@@ -527,3 +527,11 @@ int __init of_prcm_init(void)

	return 0;
}

static int __init prm_late_init(void)
{
	if (prm_ll_data->late_init)
		return prm_ll_data->late_init();
	return 0;
}
subsys_initcall(prm_late_init);