satip-axe/kernel/drivers/stm/reg_pio.h
2015-03-26 17:24:57 +01:00

410 lines
12 KiB
C

#ifndef __STM_PIO_H
#define __STM_PIO_H
/*
* PIO_POUT
*/
#define offset__PIO_POUT() 0x00
#define get__PIO_POUT(base) readl(base + offset__PIO_POUT())
#define set__PIO_POUT(base, value) writel(value, base + \
offset__PIO_POUT())
/* POUT */
#define shift__PIO_POUT__POUT(pin) pin
#define mask__PIO_POUT__POUT(pin) 0x1
#define get__PIO_POUT__POUT(base, pin) ((readl(base + \
offset__PIO_POUT()) >> shift__PIO_POUT__POUT(pin)) & \
mask__PIO_POUT__POUT(pin))
#define set__PIO_POUT__POUT(base, pin, value) writel((readl(base + \
offset__PIO_POUT()) & ~(mask__PIO_POUT__POUT(pin) << \
shift__PIO_POUT__POUT(pin))) | (((value) & mask__PIO_POUT__POUT(pin)) \
<< shift__PIO_POUT__POUT(pin)), base + offset__PIO_POUT())
/*
* PIO_SET_POUT
*/
#define offset__PIO_SET_POUT() 0x04
#define set__PIO_SET_POUT(base, value) writel(value, base + \
offset__PIO_SET_POUT())
/* SET_POUT */
#define shift__PIO_SET_POUT__SET_POUT(pin) pin
#define mask__PIO_SET_POUT__SET_POUT(pin) 0x1
#define set__PIO_SET_POUT__SET_POUT(base, pin, value) writel(((value) \
& mask__PIO_SET_POUT__SET_POUT(pin)) << \
shift__PIO_SET_POUT__SET_POUT(pin), base + offset__PIO_SET_POUT())
#define value__PIO_SET_POUT__SET_POUT__SET() 0x1
#define mask__PIO_SET_POUT__SET_POUT__SET(pin) \
(value__PIO_SET_POUT__SET_POUT__SET() << \
shift__PIO_SET_POUT__SET_POUT(pin))
#define set__PIO_SET_POUT__SET_POUT__SET(base, pin) \
set__PIO_SET_POUT__SET_POUT(base, pin, \
value__PIO_SET_POUT__SET_POUT__SET())
/*
* PIO_CLR_POUT
*/
#define offset__PIO_CLR_POUT() 0x08
#define set__PIO_CLR_POUT(base, value) writel(value, base + \
offset__PIO_CLR_POUT())
/* CLR_POUT */
#define shift__PIO_CLR_POUT__CLR_POUT(pin) pin
#define mask__PIO_CLR_POUT__CLR_POUT(pin) 0x1
#define set__PIO_CLR_POUT__CLR_POUT(base, pin, value) writel(((value) \
& mask__PIO_CLR_POUT__CLR_POUT(pin)) << \
shift__PIO_CLR_POUT__CLR_POUT(pin), base + offset__PIO_CLR_POUT())
#define value__PIO_CLR_POUT__CLR_POUT__CLEAR() 0x1
#define mask__PIO_CLR_POUT__CLR_POUT__CLEAR(pin) \
(value__PIO_CLR_POUT__CLR_POUT__CLEAR() << \
shift__PIO_CLR_POUT__CLR_POUT(pin))
#define set__PIO_CLR_POUT__CLR_POUT__CLEAR(base, pin) \
set__PIO_CLR_POUT__CLR_POUT(base, pin, \
value__PIO_CLR_POUT__CLR_POUT__CLEAR())
/*
* PIO_PIN
*/
#define offset__PIO_PIN() 0x10
#define get__PIO_PIN(base) readl(base + offset__PIO_PIN())
#define set__PIO_PIN(base, value) writel(value, base + \
offset__PIO_PIN())
/* PIN */
#define shift__PIO_PIN__PIN(pin) pin
#define mask__PIO_PIN__PIN(pin) 0x1
#define get__PIO_PIN__PIN(base, pin) ((readl(base + offset__PIO_PIN()) \
>> shift__PIO_PIN__PIN(pin)) & mask__PIO_PIN__PIN(pin))
#define set__PIO_PIN__PIN(base, pin, value) writel((readl(base + \
offset__PIO_PIN()) & ~(mask__PIO_PIN__PIN(pin) << \
shift__PIO_PIN__PIN(pin))) | (((value) & mask__PIO_PIN__PIN(pin)) << \
shift__PIO_PIN__PIN(pin)), base + offset__PIO_PIN())
/*
* PIO_PC
*/
#define offset__PIO_PC(n) (0x20 + (n) * 0x10)
#define get__PIO_PC(base, n) readl(base + offset__PIO_PC(n))
#define set__PIO_PC(base, n, value) writel(value, base + \
offset__PIO_PC(n))
/* CONFIGDATA */
#define shift__PIO_PC__CONFIGDATA(pin) pin
#define mask__PIO_PC__CONFIGDATA(pin) 0x1
#define get__PIO_PC__CONFIGDATA(base, n, pin) ((readl(base + \
offset__PIO_PC(n)) >> shift__PIO_PC__CONFIGDATA(pin)) & \
mask__PIO_PC__CONFIGDATA(pin))
#define set__PIO_PC__CONFIGDATA(base, n, pin, value) \
writel((readl(base + offset__PIO_PC(n)) & \
~(mask__PIO_PC__CONFIGDATA(pin) << shift__PIO_PC__CONFIGDATA(pin))) | \
(((value) & mask__PIO_PC__CONFIGDATA(pin)) << \
shift__PIO_PC__CONFIGDATA(pin)), base + offset__PIO_PC(n))
/*
* PIO_SET_PC
*/
#define offset__PIO_SET_PC(n) (0x24 + (n) * 0x10)
#define set__PIO_SET_PC(base, n, value) writel(value, base + \
offset__PIO_SET_PC(n))
/* SET_PC */
#define shift__PIO_SET_PC__SET_PC(pin) pin
#define mask__PIO_SET_PC__SET_PC(pin) 0x1
#define set__PIO_SET_PC__SET_PC(base, n, pin, value) writel(((value) & \
mask__PIO_SET_PC__SET_PC(pin)) << shift__PIO_SET_PC__SET_PC(pin), base \
+ offset__PIO_SET_PC(n))
#define value__PIO_SET_PC__SET_PC__SET() 0x1
#define mask__PIO_SET_PC__SET_PC__SET(pin) \
(value__PIO_SET_PC__SET_PC__SET() << shift__PIO_SET_PC__SET_PC(pin))
#define set__PIO_SET_PC__SET_PC__SET(base, n, pin) \
set__PIO_SET_PC__SET_PC(base, n, pin, \
value__PIO_SET_PC__SET_PC__SET())
/*
* PIO_CLR_PC
*/
#define offset__PIO_CLR_PC(n) (0x28 + (n) * 0x10)
#define set__PIO_CLR_PC(base, n, value) writel(value, base + \
offset__PIO_CLR_PC(n))
/* CLR_PC */
#define shift__PIO_CLR_PC__CLR_PC(pin) pin
#define mask__PIO_CLR_PC__CLR_PC(pin) 0x1
#define set__PIO_CLR_PC__CLR_PC(base, n, pin, value) writel(((value) & \
mask__PIO_CLR_PC__CLR_PC(pin)) << shift__PIO_CLR_PC__CLR_PC(pin), base \
+ offset__PIO_CLR_PC(n))
#define value__PIO_CLR_PC__CLR_PC__CLEAR() 0x1
#define mask__PIO_CLR_PC__CLR_PC__CLEAR(pin) \
(value__PIO_CLR_PC__CLR_PC__CLEAR() << shift__PIO_CLR_PC__CLR_PC(pin))
#define set__PIO_CLR_PC__CLR_PC__CLEAR(base, n, pin) \
set__PIO_CLR_PC__CLR_PC(base, n, pin, \
value__PIO_CLR_PC__CLR_PC__CLEAR())
/*
* PIO_PCx (concurrent PC0..2 access)
*/
static inline unsigned long get__PIO_PCx(void *base, int pin)
{
unsigned long result = 0;
int i;
for (i = 0; i <= 2; i++)
result |= get__PIO_PC__CONFIGDATA(base, i, pin) << i;
return result;
}
static inline void set__PIO_PCx(void *base, int pin, unsigned long value)
{
int i;
for (i = 0; i <= 2; i++)
if (value & (1 << i))
set__PIO_SET_PC__SET_PC__SET(base, i, pin);
else
set__PIO_CLR_PC__CLR_PC__CLEAR(base, i, pin);
}
#define value__PIO_PCx__INPUT_WEAK_PULL_UP() 0x0
static inline void set__PIO_PCx__INPUT_WEAK_PULL_UP(void *base, int pin)
{
set__PIO_CLR_PC__CLR_PC__CLEAR(base, 2, pin);
set__PIO_CLR_PC__CLR_PC__CLEAR(base, 1, pin);
set__PIO_CLR_PC__CLR_PC__CLEAR(base, 0, pin);
}
#define value__PIO_PCx__BIDIR_OPEN_DRAIN() 0x1
#define value__PIO_PCx__BIDIR_OPEN_DRAIN__alt() 0x3
static inline void set__PIO_PCx__BIDIR_OPEN_DRAIN(void *base, int pin)
{
set__PIO_CLR_PC__CLR_PC__CLEAR(base, 2, pin);
set__PIO_CLR_PC__CLR_PC__CLEAR(base, 1, pin);
set__PIO_SET_PC__SET_PC__SET(base, 0, pin);
}
#define value__PIO_PCx__OUTPUT_PUSH_PULL() 0x2
static inline void set__PIO_PCx__OUTPUT_PUSH_PULL(void *base, int pin)
{
set__PIO_CLR_PC__CLR_PC__CLEAR(base, 2, pin);
set__PIO_SET_PC__SET_PC__SET(base, 1, pin);
set__PIO_CLR_PC__CLR_PC__CLEAR(base, 0, pin);
}
#define value__PIO_PCx__INPUT_HIGH_IMPEDANCE() 0x4
#define value__PIO_PCx__INPUT_HIGH_IMPEDANCE__alt() 0x5
static inline void set__PIO_PCx__INPUT_HIGH_IMPEDANCE(void *base, int pin)
{
set__PIO_SET_PC__SET_PC__SET(base, 2, pin);
set__PIO_CLR_PC__CLR_PC__CLEAR(base, 1, pin);
set__PIO_CLR_PC__CLR_PC__CLEAR(base, 0, pin);
}
#define value__PIO_PCx__ALTERNATIVE_OUTPUT_PUSH_PULL() 0x6
static inline void set__PIO_PCx__ALTERNATIVE_OUTPUT_PUSH_PULL(void *base,
int pin)
{
set__PIO_SET_PC__SET_PC__SET(base, 2, pin);
set__PIO_SET_PC__SET_PC__SET(base, 1, pin);
set__PIO_CLR_PC__CLR_PC__CLEAR(base, 0, pin);
}
#define value__PIO_PCx__ALTERNATIVE_BIDIR_OPEN_DRAIN() 0x7
static inline void set__PIO_PCx__ALTERNATIVE_BIDIR_OPEN_DRAIN(void *base,
int pin)
{
set__PIO_SET_PC__SET_PC__SET(base, 2, pin);
set__PIO_SET_PC__SET_PC__SET(base, 1, pin);
set__PIO_SET_PC__SET_PC__SET(base, 0, pin);
}
/*
* PIO_PCOMP
*/
#define offset__PIO_PCOMP() 0x50
#define get__PIO_PCOMP(base) readl(base + offset__PIO_PCOMP())
#define set__PIO_PCOMP(base, value) writel(value, base + \
offset__PIO_PCOMP())
/* PCOMP */
#define shift__PIO_PCOMP__PCOMP(pin) pin
#define mask__PIO_PCOMP__PCOMP(pin) 0x1
#define get__PIO_PCOMP__PCOMP(base, pin) ((readl(base + \
offset__PIO_PCOMP()) >> shift__PIO_PCOMP__PCOMP(pin)) & \
mask__PIO_PCOMP__PCOMP(pin))
#define set__PIO_PCOMP__PCOMP(base, pin, value) writel((readl(base + \
offset__PIO_PCOMP()) & ~(mask__PIO_PCOMP__PCOMP(pin) << \
shift__PIO_PCOMP__PCOMP(pin))) | (((value) & \
mask__PIO_PCOMP__PCOMP(pin)) << shift__PIO_PCOMP__PCOMP(pin)), base + \
offset__PIO_PCOMP())
/*
* PIO_SET_PCOMP
*/
#define offset__PIO_SET_PCOMP() 0x54
#define set__PIO_SET_PCOMP(base, value) writel(value, base + \
offset__PIO_SET_PCOMP())
/* SET_PCOMP */
#define shift__PIO_SET_PCOMP__SET_PCOMP(pin) pin
#define mask__PIO_SET_PCOMP__SET_PCOMP(pin) 0x1
#define set__PIO_SET_PCOMP__SET_PCOMP(base, pin, value) \
writel(((value) & mask__PIO_SET_PCOMP__SET_PCOMP(pin)) << \
shift__PIO_SET_PCOMP__SET_PCOMP(pin), base + offset__PIO_SET_PCOMP())
#define value__PIO_SET_PCOMP__SET_PCOMP__SET() 0x1
#define mask__PIO_SET_PCOMP__SET_PCOMP__SET(pin) \
(value__PIO_SET_PCOMP__SET_PCOMP__SET() << \
shift__PIO_SET_PCOMP__SET_PCOMP(pin))
#define set__PIO_SET_PCOMP__SET_PCOMP__SET(base, pin) \
set__PIO_SET_PCOMP__SET_PCOMP(base, pin, \
value__PIO_SET_PCOMP__SET_PCOMP__SET())
/*
* PIO_CLR_PCOMP
*/
#define offset__PIO_CLR_PCOMP() 0x58
#define set__PIO_CLR_PCOMP(base, value) writel(value, base + \
offset__PIO_CLR_PCOMP())
/* CLR_PCOMP */
#define shift__PIO_CLR_PCOMP__CLR_PCOMP(pin) pin
#define mask__PIO_CLR_PCOMP__CLR_PCOMP(pin) 0x1
#define set__PIO_CLR_PCOMP__CLR_PCOMP(base, pin, value) \
writel(((value) & mask__PIO_CLR_PCOMP__CLR_PCOMP(pin)) << \
shift__PIO_CLR_PCOMP__CLR_PCOMP(pin), base + offset__PIO_CLR_PCOMP())
#define value__PIO_CLR_PCOMP__CLR_PCOMP__CLEAR() 0x1
#define mask__PIO_CLR_PCOMP__CLR_PCOMP__CLEAR(pin) \
(value__PIO_CLR_PCOMP__CLR_PCOMP__CLEAR() << \
shift__PIO_CLR_PCOMP__CLR_PCOMP(pin))
#define set__PIO_CLR_PCOMP__CLR_PCOMP__CLEAR(base, pin) \
set__PIO_CLR_PCOMP__CLR_PCOMP(base, pin, \
value__PIO_CLR_PCOMP__CLR_PCOMP__CLEAR())
/*
* PIO_PMASK
*/
#define offset__PIO_PMASK() 0x60
#define get__PIO_PMASK(base) readl(base + offset__PIO_PMASK())
#define set__PIO_PMASK(base, value) writel(value, base + \
offset__PIO_PMASK())
/* PMASK */
#define shift__PIO_PMASK__PMASK(pin) pin
#define mask__PIO_PMASK__PMASK(pin) 0x1
#define get__PIO_PMASK__PMASK(base, pin) ((readl(base + \
offset__PIO_PMASK()) >> shift__PIO_PMASK__PMASK(pin)) & \
mask__PIO_PMASK__PMASK(pin))
#define set__PIO_PMASK__PMASK(base, pin, value) writel((readl(base + \
offset__PIO_PMASK()) & ~(mask__PIO_PMASK__PMASK(pin) << \
shift__PIO_PMASK__PMASK(pin))) | (((value) & \
mask__PIO_PMASK__PMASK(pin)) << shift__PIO_PMASK__PMASK(pin)), base + \
offset__PIO_PMASK())
/*
* PIO_SET_PMASK
*/
#define offset__PIO_SET_PMASK() 0x64
#define set__PIO_SET_PMASK(base, value) writel(value, base + \
offset__PIO_SET_PMASK())
/* SET_PMASK */
#define shift__PIO_SET_PMASK__SET_PMASK(pin) pin
#define mask__PIO_SET_PMASK__SET_PMASK(pin) 0x1
#define set__PIO_SET_PMASK__SET_PMASK(base, pin, value) \
writel(((value) & mask__PIO_SET_PMASK__SET_PMASK(pin)) << \
shift__PIO_SET_PMASK__SET_PMASK(pin), base + offset__PIO_SET_PMASK())
#define value__PIO_SET_PMASK__SET_PMASK__SET() 0x1
#define mask__PIO_SET_PMASK__SET_PMASK__SET(pin) \
(value__PIO_SET_PMASK__SET_PMASK__SET() << \
shift__PIO_SET_PMASK__SET_PMASK(pin))
#define set__PIO_SET_PMASK__SET_PMASK__SET(base, pin) \
set__PIO_SET_PMASK__SET_PMASK(base, pin, \
value__PIO_SET_PMASK__SET_PMASK__SET())
/*
* PIO_CLR_PMASK
*/
#define offset__PIO_CLR_PMASK() 0x68
#define set__PIO_CLR_PMASK(base, value) writel(value, base + \
offset__PIO_CLR_PMASK())
/* CLR_PMASK */
#define shift__PIO_CLR_PMASK__CLR_PMASK(pin) pin
#define mask__PIO_CLR_PMASK__CLR_PMASK(pin) 0x1
#define set__PIO_CLR_PMASK__CLR_PMASK(base, pin, value) \
writel(((value) & mask__PIO_CLR_PMASK__CLR_PMASK(pin)) << \
shift__PIO_CLR_PMASK__CLR_PMASK(pin), base + offset__PIO_CLR_PMASK())
#define value__PIO_CLR_PMASK__CLR_PMASK__CLEAR() 0x1
#define mask__PIO_CLR_PMASK__CLR_PMASK__CLEAR(pin) \
(value__PIO_CLR_PMASK__CLR_PMASK__CLEAR() << \
shift__PIO_CLR_PMASK__CLR_PMASK(pin))
#define set__PIO_CLR_PMASK__CLR_PMASK__CLEAR(base, pin) \
set__PIO_CLR_PMASK__CLR_PMASK(base, pin, \
value__PIO_CLR_PMASK__CLR_PMASK__CLEAR())
#endif