[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:
@@ -422,3 +422,36 @@ void *cpm_dpram_addr(unsigned long offset)
|
|||||||
return (void *)(im_dprambase + offset);
|
return (void *)(im_dprambase + offset);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(cpm_dpram_addr);
|
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_clk_setup(enum cpm_clk_target target, int clock, int mode);
|
||||||
extern int cpm2_smc_clk_setup(enum cpm_clk_target target, int clock);
|
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 /* __CPM2__ */
|
||||||
#endif /* __KERNEL__ */
|
#endif /* __KERNEL__ */
|
||||||
|
Reference in New Issue
Block a user