Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 339685
b: refs/heads/master
c: e24c357
h: refs/heads/master
i:
  339683: 0fe024c
v: v3
  • Loading branch information
Paul Walmsley committed Oct 21, 2012
1 parent 194a979 commit 191aa11
Show file tree
Hide file tree
Showing 3 changed files with 64 additions and 1 deletion.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 4bd5259e53accda0fe295d3b25da348f4d5f4b09
refs/heads/master: e24c35737413c8626f9c4e8f47e33926b7ab7f23
11 changes: 11 additions & 0 deletions trunk/arch/arm/mach-omap2/prm.h
Original file line number Diff line number Diff line change
Expand Up @@ -52,5 +52,16 @@
#define OMAP_POWERSTATE_SHIFT 0
#define OMAP_POWERSTATE_MASK (0x3 << 0)

#ifndef __ASSEMBLER__

/**
* struct prm_ll_data - fn ptrs to per-SoC PRM function implementations
*/
struct prm_ll_data {};

extern int prm_register(struct prm_ll_data *pld);
extern int prm_unregister(struct prm_ll_data *pld);

#endif

#endif
52 changes: 52 additions & 0 deletions trunk/arch/arm/mach-omap2/prm_common.c
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,13 @@ static struct irq_chip_generic **prcm_irq_chips;
*/
static struct omap_prcm_irq_setup *prcm_irq_setup;

/*
* prm_ll_data: function pointers to SoC-specific implementations of
* common PRM functions
*/
static struct prm_ll_data null_prm_ll_data;
static struct prm_ll_data *prm_ll_data = &null_prm_ll_data;

/* Private functions */

/*
Expand Down Expand Up @@ -318,3 +325,48 @@ int omap_prcm_register_chain_handler(struct omap_prcm_irq_setup *irq_setup)
omap_prcm_irq_cleanup();
return -ENOMEM;
}

/**
* prm_register - register per-SoC low-level data with the PRM
* @pld: low-level per-SoC OMAP PRM data & function pointers to register
*
* Register per-SoC low-level OMAP PRM data and function pointers with
* the OMAP PRM common interface. The caller must keep the data
* pointed to by @pld valid until it calls prm_unregister() and
* it returns successfully. Returns 0 upon success, -EINVAL if @pld
* is NULL, or -EEXIST if prm_register() has already been called
* without an intervening prm_unregister().
*/
int prm_register(struct prm_ll_data *pld)
{
if (!pld)
return -EINVAL;

if (prm_ll_data != &null_prm_ll_data)
return -EEXIST;

prm_ll_data = pld;

return 0;
}

/**
* prm_unregister - unregister per-SoC low-level data & function pointers
* @pld: low-level per-SoC OMAP PRM data & function pointers to unregister
*
* Unregister per-SoC low-level OMAP PRM data and function pointers
* that were previously registered with prm_register(). The
* caller may not destroy any of the data pointed to by @pld until
* this function returns successfully. Returns 0 upon success, or
* -EINVAL if @pld is NULL or if @pld does not match the struct
* prm_ll_data * previously registered by prm_register().
*/
int prm_unregister(struct prm_ll_data *pld)
{
if (!pld || prm_ll_data != pld)
return -EINVAL;

prm_ll_data = &null_prm_ll_data;

return 0;
}

0 comments on commit 191aa11

Please sign in to comment.