satip-axe/kernel/include/linux/stm/pio.h

75 lines
2.7 KiB
C

/*
* include/linux/stm/pio.h
*
* Copyright (c) 2004 STMicroelectronics Limited
* Author: Stuart Menefy <stuart.menefy@st.com>
*
* ST40 General Purpose IO pins support.
*
* This layer enables other device drivers to configure PIO
* pins, get and set their values, and register an interrupt
* routine for when input pins change state.
*/
#ifndef __LINUX_STM_PIO_H
#define __LINUX_STM_PIO_H
#include <linux/kernel.h>
/* Pin configuration constants */
/* Note that behaviour for modes 0, 6 and 7 differ between the ST40STB1
* datasheet (implementation restrictions appendix), and the ST40
* architectural defintions.
*/
#define STPIO_NONPIO 0 /* Non-PIO function (ST40 defn) */
#define STPIO_BIDIR_Z1 0 /* Input weak pull-up (arch defn) */
#define STPIO_BIDIR 1 /* Bidirectonal open-drain */
#define STPIO_OUT 2 /* Output push-pull */
#define STPIO_IN 4 /* Input Hi-Z */
#define STPIO_ALT_OUT 6 /* Alt output push-pull (arch defn) */
#define STPIO_ALT_BIDIR 7 /* Alt bidir open drain (arch defn) */
struct stpio_pin;
/* Request and release exclusive use of a PIO pin */
#define stpio_request_pin(portno, pinno, name, direction) \
__stpio_request_pin(portno, pinno, name, direction, 0, 0)
#define stpio_request_set_pin(portno, pinno, name, direction, value) \
__stpio_request_pin(portno, pinno, name, direction, 1, value)
struct stpio_pin *__stpio_request_pin(unsigned int portno,
unsigned int pinno, const char *name, int direction,
int __set_value, unsigned int value);
void stpio_free_pin(struct stpio_pin *pin);
/* Change the mode of an existing pin */
void stpio_configure_pin(struct stpio_pin *pin, int direction);
/* Get, set value */
void stpio_set_pin(struct stpio_pin* pin, unsigned int value);
unsigned int stpio_get_pin(struct stpio_pin* pin);
/* Interrupt on external value change */
int stpio_flagged_request_irq(struct stpio_pin *pin, int comp,
void (*handler)(struct stpio_pin *pin, void *dev),
void *dev, unsigned long irqflags);
static inline int __deprecated stpio_request_irq(struct stpio_pin *pin,
int comp,
void (*handler)(struct stpio_pin *pin, void *dev),
void *dev)
{
return stpio_flagged_request_irq(pin, comp, handler, dev, 0);
}
void stpio_free_irq(struct stpio_pin* pin);
void stpio_enable_irq(struct stpio_pin* pin, int mode);
void stpio_disable_irq(struct stpio_pin* pin);
void stpio_disable_irq_nosync(struct stpio_pin* pin);
void stpio_set_irq_type(struct stpio_pin* pin, int triggertype);
#ifdef CONFIG_PM
int stpio_set_wakeup(struct stpio_pin *pin, int enabled);
#else
#define stpio_set_wakeup(pin, enabled) do {} while(0)
#endif
#endif /* __LINUX_STM_PIO_H */