struct tpm_atmel_priv { … };
#ifdef CONFIG_PPC64
#include <linux/of.h>
#define atmel_getb …
#define atmel_putb …
#define atmel_request_region …
#define atmel_release_region …
static inline void atmel_put_base_addr(void __iomem *iobase)
{
iounmap(iobase);
}
static void __iomem * atmel_get_base_addr(unsigned long *base, int *region_size)
{
struct device_node *dn;
unsigned long address, size;
const unsigned int *reg;
int reglen;
int naddrc;
int nsizec;
dn = of_find_node_by_name(NULL, "tpm");
if (!dn)
return NULL;
if (!of_device_is_compatible(dn, "AT97SC3201")) {
of_node_put(dn);
return NULL;
}
reg = of_get_property(dn, "reg", ®len);
naddrc = of_n_addr_cells(dn);
nsizec = of_n_size_cells(dn);
of_node_put(dn);
if (naddrc == 2)
address = ((unsigned long) reg[0] << 32) | reg[1];
else
address = reg[0];
if (nsizec == 2)
size =
((unsigned long) reg[naddrc] << 32) | reg[naddrc + 1];
else
size = reg[naddrc];
*base = address;
*region_size = size;
return ioremap(*base, *region_size);
}
#else
#define atmel_getb(chip, offset) …
#define atmel_putb(val, chip, offset) …
#define atmel_request_region …
#define atmel_release_region …
enum tpm_atmel_addr { … };
static inline int tpm_read_index(int base, int index)
{ … }
static int atmel_verify_tpm11(void)
{ … }
static inline void atmel_put_base_addr(void __iomem *iobase)
{ … }
static void __iomem * atmel_get_base_addr(unsigned long *base, int *region_size)
{ … }
#endif