blob: 12cf550912e15a856213cb4ee7f8755712714307 [file] [log] [blame]
#ifndef __GPIO_DEBUG_H_
#define __GPIO_DEBUG_H_
#include <linux/gpio.h>
struct gpio_debug;
#define TYPE_CONF_REG 0x00
#define TYPE_PIN_VALUE 0x01
#define TYPE_DIRECTION 0x02
#define TYPE_IRQ_TYPE 0x03
#define TYPE_PINMUX 0x04
#define TYPE_PULLMODE 0x05
#define TYPE_PULLSTRENGTH 0x06
#define TYPE_OPEN_DRAIN 0x07
#define TYPE_IRQ_COUNT 0x08
#define TYPE_WAKEUP 0x09
#define TYPE_WAKEUP_COUNT 0x0A
#define TYPE_OVERRIDE_OUTDIR 0x0B
#define TYPE_OVERRIDE_OUTVAL 0x0C
#define TYPE_OVERRIDE_INDIR 0x0D
#define TYPE_OVERRIDE_INVAL 0x0E
#define TYPE_DEBOUNCE 0x0F
#define TYPE_SBY_OVR_IO 0x10
#define TYPE_SBY_OVR_OUTVAL 0x11
#define TYPE_SBY_OVR_INVAL 0x12
#define TYPE_SBY_OVR_OUTDIR 0x13
#define TYPE_SBY_OVR_INDIR 0x14
#define TYPE_SBY_PUPD_STATE 0x15
#define TYPE_SBY_OD_DIS 0x16
#define TYPE_IRQ_LINE 0x17
#define TYPE_MAX 0x18
struct gpio_control {
unsigned type, num;
char **pininfo;
u32 reg, invert;
u32 shift, rshift;
u32 mask;
int (*get)(struct gpio_control *control, void *private_data,
unsigned gpio);
int (*set)(struct gpio_control *control, void *private_data,
unsigned gpio, unsigned int num);
int (*get_handle)(int val);
void (*set_handle)(unsigned int num, int *val);
};
struct gpio_debug_ops {
unsigned int (*get_conf_reg)(struct gpio_debug *debug, unsigned gpio);
void (*set_conf_reg)(struct gpio_debug *debug, unsigned gpio,
unsigned int value);
char **(*get_avl_pininfo)(struct gpio_debug *debug, unsigned gpio,
unsigned int type, unsigned *num);
char *(*get_cul_pininfo)(struct gpio_debug *debug, unsigned gpio,
unsigned int type);
void (*set_pininfo)(struct gpio_debug *debug, unsigned gpio,
unsigned int type, const char *info);
int (*get_register_msg)(char **buf, unsigned long *size);
};
struct gpio_debug {
unsigned long typebit[BITS_TO_LONGS(TYPE_MAX)];
struct gpio_chip *chip;
struct gpio_debug_ops *ops;
unsigned long irq_count[ARCH_NR_GPIOS];
unsigned long wakeup_count[ARCH_NR_GPIOS];
void *private_data;
};
#ifdef CONFIG_GPIODEBUG
#define DEFINE_DEBUG_IRQ_CONUNT_INCREASE(gpio) (debug->irq_count[gpio]++)
struct gpio_control *find_gpio_control(struct gpio_control *control, int num,
unsigned type);
int find_pininfo_num(struct gpio_control *control, const char *info);
struct gpio_debug *gpio_debug_alloc(void);
void gpio_debug_remove(struct gpio_debug *debug);
int gpio_debug_register(struct gpio_debug *debug);
#else
#define DEFINE_DEBUG_IRQ_CONUNT_INCREASE(gpio)
static inline struct gpio_control *find_gpio_control(
struct gpio_control *control, int num, unsigned type)
{
return NULL;
}
static inline int find_pininfo_num(struct gpio_control *control,
const char *info)
{
return 0;
}
static inline struct gpio_debug *gpio_debug_alloc(void)
{
return NULL;
}
static inline void gpio_debug_remove(struct gpio_debug *debug)
{
return NULL;
}
static inline int gpio_debug_register(struct gpio_debug *debug)
{
return 0;
}
#endif
#endif