blob: c6e784745c0af86fb7f5c2cd389a7db8b0ccea88 [file] [log] [blame]
/*
* Overview:
* tc35892 gpio port expander register definitions
*
* Copyright (C) 2009 ST-Ericsson SA
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*/
#ifndef __TC35892_H_
#define __Tc35892_H_
#include <linux/gpio.h>
/*System registers Index*/
#define MANFACTURE_Code_Index 0x80
#define VERSION_ID_Index 0x81
#define IOCFG_Index 0xA7
/*clock control registers*/
#define CLKMODE_Index 0x88
#define CLKCFG_Index 0x89
#define CLKEN_Index 0x8A
/*Reset Control registers*/
#define RSTCTRL_Index 0x82
#define EXTRSTN_Index 0x83
#define RSTINTCLR_index 0x84
#define GPIO_OFFSET
/* Interrupt registers Index*/
#define GPIO_IS0_Index 0xC9
#define GPIO_IS1_Index 0xCA
#define GPIO_IS2_Index 0xCB
#define GPIO_IBE0_Index 0xCC
#define GPIO_IBE1_Index 0xCD
#define GPIO_IBE2_Index 0xCE
#define GPIO_IEV0_Index 0xCF
#define GPIO_IEV1_Index 0xD0
#define GPIO_IEV2_Index 0xD1
#define GPIO_IE0_Index 0xD2
#define GPIO_IE1_Index 0xD3
#define GPIO_IE2_Index 0xD4
#define GPIO_RIS0_Index 0xD6
#define GPIO_RIS1_Index 0xD7
#define GPIO_RIS2_Index 0xD8
#define GPIO_MIS0_Index 0xD9
#define GPIO_MIS1_Index 0xDA
#define GPIO_MIS2_Index 0xDB
#define GPIO_IC0_Index 0xDC
#define GPIO_IC1_Index 0xDD
#define GPIO_IC2_Index 0xDE
/*GPIO's defines*/
/*GPIO data register Index*/
#define GPIO_DATA0_Index 0xC0
#define GPIO_MASK0_Index 0xc1
#define GPIO_DATA1_Index 0xC2
#define GPIO_MASK1_Index 0xc3
#define GPIO_DATA2_Index 0xC4
#define GPIO_MASK2_Index 0xC5
/* GPIO direction register Index*/
#define GPIO_DIR0_Index 0xC6
#define GPIO_DIR1_Index 0xC7
#define GPIO_DIR2_Index 0xC8
/* GPIO Sync registers*/
#define GPIO_SYNC0_Index 0xE6
#define GPIO_SYNC1_Index 0xE7
#define GPIO_SYNC2_Index 0xE8
/*GPIO Wakeup registers*/
#define GPIO_WAKE0_Index 0xE9
#define GPIO_WAKE1_Index 0xEA
#define GPIO_WAKE2_Index 0xEB
/*GPIO OpenDrain registers*/
#define GPIO_ODM0_Index 0xE0
#define GPIO_ODE0_Index 0xE1
#define GPIO_ODM1_Index 0xE2
#define GPIO_ODE1_Index 0xE3
#define GPIO_ODM2_Index 0xE4
#define GPIO_ODE2_Index 0xE5
/*PULL UP REGISTERS*/
#define IOPC0_Index 0xAA
#define IOPC1_Index 0xAC
#define IOPC2_Index 0xAE
#define MAX_TC35892_GPIO 24
#define MAX_INT_EXP 24
#define HIGH 1
#define LOW 0
#define EDGE_SENSITIVE 0
#define LEVEl_SENSITIVE 1
#define DISABLE_INTERRUPT 0
#define ENABLE_INTERRUPT 1
#define TC35892_FALLING_EDGE_OR_LOWLEVEL 1
#define TC35892_RISING_EDGE_OR_HIGHLEVEL 2
#define TC35892_BOTH_EDGE 3
typedef enum {
EGPIO_PIN_0 = U8500_NR_GPIO,
EGPIO_PIN_1,
EGPIO_PIN_2,
EGPIO_PIN_3,
EGPIO_PIN_4,
EGPIO_PIN_5,
EGPIO_PIN_6,
EGPIO_PIN_7,
EGPIO_PIN_8,
EGPIO_PIN_9,
EGPIO_PIN_10,
EGPIO_PIN_11,
EGPIO_PIN_12,
EGPIO_PIN_13,
EGPIO_PIN_14,
EGPIO_PIN_15,
EGPIO_PIN_16,
EGPIO_PIN_17,
EGPIO_PIN_18,
EGPIO_PIN_19,
EGPIO_PIN_20,
EGPIO_PIN_21,
EGPIO_PIN_22,
EGPIO_PIN_23
} egpio_pin;
typedef enum {
TC35892_OK = 0,
TC35892_BAD_PARAMETER = -2,
TC35892_FEAT_NOT_SUPPORTED = -3,
TC35892_INTERNAL_ERROR = -4,
TC35892_TIMEOUT_ERROR = -5,
TC35892_INITIALIZATION_ERROR = -6,
TC35892_I2C_ERROR = -7,
TC35892_ERROR = -8
} t_tc35892_error;
/**
* struct tc35892_platform_data - tc35892 platform dependent structure
* @gpio_base: starting number of the gpio pin
* @irq: irq number of the port expander
*
* tc35892 platfoem dependent structure
**/
struct tc35892_platform_data {
unsigned gpio_base;
int irq;
};
int tc35892_remove_callback(int irq);
int tc35892_set_callback(int irq, void *handler, void *data);
t_tc35892_error tc35892_set_intr_enable (int pin_index, unsigned char intr_enable_disable);
t_tc35892_error tc35892_set_gpio_intr_conf (int pin_index, unsigned char edge_level_sensitive, unsigned char edge_level_type);
#endif