forked from luck/tmp_suning_uos_patched
[POWERPC] cpm2: Add cpm2_set_pin().
This provides a generic way for board code to set up CPM pins, rather than directly poking magic values into registers. Signed-off-by: Scott Wood <scottwood@freescale.com> Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
This commit is contained in:
parent
2652d4ec4a
commit
7f21f52940
@ -422,3 +422,36 @@ void *cpm_dpram_addr(unsigned long offset)
|
||||
return (void *)(im_dprambase + offset);
|
||||
}
|
||||
EXPORT_SYMBOL(cpm_dpram_addr);
|
||||
|
||||
struct cpm2_ioports {
|
||||
u32 dir, par, sor, odr, dat;
|
||||
u32 res[3];
|
||||
};
|
||||
|
||||
void cpm2_set_pin(int port, int pin, int flags)
|
||||
{
|
||||
struct cpm2_ioports __iomem *iop =
|
||||
(struct cpm2_ioports __iomem *)&cpm2_immr->im_ioport;
|
||||
|
||||
pin = 1 << (31 - pin);
|
||||
|
||||
if (flags & CPM_PIN_OUTPUT)
|
||||
setbits32(&iop[port].dir, pin);
|
||||
else
|
||||
clrbits32(&iop[port].dir, pin);
|
||||
|
||||
if (!(flags & CPM_PIN_GPIO))
|
||||
setbits32(&iop[port].par, pin);
|
||||
else
|
||||
clrbits32(&iop[port].par, pin);
|
||||
|
||||
if (flags & CPM_PIN_SECONDARY)
|
||||
setbits32(&iop[port].sor, pin);
|
||||
else
|
||||
clrbits32(&iop[port].sor, pin);
|
||||
|
||||
if (flags & CPM_PIN_OPENDRAIN)
|
||||
setbits32(&iop[port].odr, pin);
|
||||
else
|
||||
clrbits32(&iop[port].odr, pin);
|
||||
}
|
||||
|
@ -1247,5 +1247,14 @@ enum cpm_clk {
|
||||
extern int cpm2_clk_setup(enum cpm_clk_target target, int clock, int mode);
|
||||
extern int cpm2_smc_clk_setup(enum cpm_clk_target target, int clock);
|
||||
|
||||
#define CPM_PIN_INPUT 0
|
||||
#define CPM_PIN_OUTPUT 1
|
||||
#define CPM_PIN_PRIMARY 0
|
||||
#define CPM_PIN_SECONDARY 2
|
||||
#define CPM_PIN_GPIO 4
|
||||
#define CPM_PIN_OPENDRAIN 8
|
||||
|
||||
void cpm2_set_pin(int port, int pin, int flags);
|
||||
|
||||
#endif /* __CPM2__ */
|
||||
#endif /* __KERNEL__ */
|
||||
|
Loading…
Reference in New Issue
Block a user