[PATCH 15/20] ASoC: fsl: make fsl_ssi driver compilable on ARM/IMX

Shawn Guo shawn.guo at linaro.org
Mon Mar 5 02:39:32 EST 2012


On Sun, Mar 04, 2012 at 11:13:09PM +0000, Tabi Timur-B04825 wrote:
> Shawn Guo wrote:
> > +#ifdef PPC
> > +#define read_ssi(addr)		in_be32(addr)
> > +#define write_ssi(val, addr)	out_be32(addr, val)
> > +#elif defined ARM
> > +#define read_ssi(addr)		readl(addr)
> > +#define write_ssi(val, addr)	writel(val, addr)
> > +#endif
> 
> Can you also add an ARM version of clrsetbits_be32()?  Something like this:
> 
> #ifdef PPC
> #define read_ssi(addr)		in_be32(addr)
> #define write_ssi(val, addr)	out_be32(addr, val)
> #define write_ssi_mask(addr, clear, set)	clrsetbits_be32(addr, clear, set)
> #elif defined ARM
> #define read_ssi(addr)		readl(addr)
> #define write_ssi(val, addr)	writel(val, addr)
> #define write_ssi_mask(addr, clear, set) \
> 	{ u32 __val; \
> 	val = readl(&ssi->scr); \
> 	val = (val & ~(clear) | (set); \
> 	writel(val, addr)
> #endif
> 
Yeah, it makes the diff neat.  However I would make it an inline
function which is easier to play.

#ifdef PPC
#define read_ssi(addr)                   in_be32(addr)
#define write_ssi(val, addr)             out_be32(addr, val)
#define write_ssi_mask(addr, clear, set) clrsetbits_be32(addr, clear, set)
#elif defined ARM
#define read_ssi(addr)                   readl(addr)
#define write_ssi(val, addr)             writel(val, addr)
static inline void write_ssi_mask(void __iomem *addr, u32 clear, u32 set)
{
        u32 val = readl(addr);
        val = (val & ~clear) | set;
        writel(val, addr);
}
#endif

-- 
Regards,
Shawn



More information about the linux-arm-kernel mailing list