/* * bfin_sport.h - interface to Blackfin SPORTs * * Copyright 2004-2009 Analog Devices Inc. * * Licensed under the GPL-2 or later. */ #ifndef __BFIN_SPORT_H__ #define __BFIN_SPORT_H__ #include <linux/types.h> #include <uapi/asm/bfin_sport.h> /* * All Blackfin system MMRs are padded to 32bits even if the register * itself is only 16bits. So use a helper macro to streamline this. */ #define __BFP(m) u16 m; u16 __pad_##m struct sport_register { __BFP(tcr1); __BFP(tcr2); __BFP(tclkdiv); __BFP(tfsdiv); union { u32 tx32; u16 tx16; }; u32 __pad_tx; union { u32 rx32; /* use the anomaly wrapper below */ u16 rx16; }; u32 __pad_rx; __BFP(rcr1); __BFP(rcr2); __BFP(rclkdiv); __BFP(rfsdiv); __BFP(stat); __BFP(chnl); __BFP(mcmc1); __BFP(mcmc2); u32 mtcs0; u32 mtcs1; u32 mtcs2; u32 mtcs3; u32 mrcs0; u32 mrcs1; u32 mrcs2; u32 mrcs3; }; #undef __BFP struct bfin_snd_platform_data { const unsigned short *pin_req; }; #define bfin_read_sport_rx32(base) \ ({ \ struct sport_register *__mmrs = (void *)base; \ u32 __ret; \ unsigned long flags; \ if (ANOMALY_05000473) \ local_irq_save(flags); \ __ret = __mmrs->rx32; \ if (ANOMALY_05000473) \ local_irq_restore(flags); \ __ret; \ }) #endif