/* * 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 /*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