Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-or-later */
0002 /*
0003  * Analog Devices ADP5588 I/O Expander and QWERTY Keypad Controller
0004  *
0005  * Copyright 2009-2010 Analog Devices Inc.
0006  */
0007 
0008 #ifndef _ADP5588_H
0009 #define _ADP5588_H
0010 
0011 #define DEV_ID 0x00     /* Device ID */
0012 #define CFG 0x01        /* Configuration Register1 */
0013 #define INT_STAT 0x02       /* Interrupt Status Register */
0014 #define KEY_LCK_EC_STAT 0x03    /* Key Lock and Event Counter Register */
0015 #define Key_EVENTA 0x04     /* Key Event Register A */
0016 #define Key_EVENTB 0x05     /* Key Event Register B */
0017 #define Key_EVENTC 0x06     /* Key Event Register C */
0018 #define Key_EVENTD 0x07     /* Key Event Register D */
0019 #define Key_EVENTE 0x08     /* Key Event Register E */
0020 #define Key_EVENTF 0x09     /* Key Event Register F */
0021 #define Key_EVENTG 0x0A     /* Key Event Register G */
0022 #define Key_EVENTH 0x0B     /* Key Event Register H */
0023 #define Key_EVENTI 0x0C     /* Key Event Register I */
0024 #define Key_EVENTJ 0x0D     /* Key Event Register J */
0025 #define KP_LCK_TMR 0x0E     /* Keypad Lock1 to Lock2 Timer */
0026 #define UNLOCK1 0x0F        /* Unlock Key1 */
0027 #define UNLOCK2 0x10        /* Unlock Key2 */
0028 #define GPIO_INT_STAT1 0x11 /* GPIO Interrupt Status */
0029 #define GPIO_INT_STAT2 0x12 /* GPIO Interrupt Status */
0030 #define GPIO_INT_STAT3 0x13 /* GPIO Interrupt Status */
0031 #define GPIO_DAT_STAT1 0x14 /* GPIO Data Status, Read twice to clear */
0032 #define GPIO_DAT_STAT2 0x15 /* GPIO Data Status, Read twice to clear */
0033 #define GPIO_DAT_STAT3 0x16 /* GPIO Data Status, Read twice to clear */
0034 #define GPIO_DAT_OUT1 0x17  /* GPIO DATA OUT */
0035 #define GPIO_DAT_OUT2 0x18  /* GPIO DATA OUT */
0036 #define GPIO_DAT_OUT3 0x19  /* GPIO DATA OUT */
0037 #define GPIO_INT_EN1 0x1A   /* GPIO Interrupt Enable */
0038 #define GPIO_INT_EN2 0x1B   /* GPIO Interrupt Enable */
0039 #define GPIO_INT_EN3 0x1C   /* GPIO Interrupt Enable */
0040 #define KP_GPIO1 0x1D       /* Keypad or GPIO Selection */
0041 #define KP_GPIO2 0x1E       /* Keypad or GPIO Selection */
0042 #define KP_GPIO3 0x1F       /* Keypad or GPIO Selection */
0043 #define GPI_EM1 0x20        /* GPI Event Mode 1 */
0044 #define GPI_EM2 0x21        /* GPI Event Mode 2 */
0045 #define GPI_EM3 0x22        /* GPI Event Mode 3 */
0046 #define GPIO_DIR1 0x23      /* GPIO Data Direction */
0047 #define GPIO_DIR2 0x24      /* GPIO Data Direction */
0048 #define GPIO_DIR3 0x25      /* GPIO Data Direction */
0049 #define GPIO_INT_LVL1 0x26  /* GPIO Edge/Level Detect */
0050 #define GPIO_INT_LVL2 0x27  /* GPIO Edge/Level Detect */
0051 #define GPIO_INT_LVL3 0x28  /* GPIO Edge/Level Detect */
0052 #define Debounce_DIS1 0x29  /* Debounce Disable */
0053 #define Debounce_DIS2 0x2A  /* Debounce Disable */
0054 #define Debounce_DIS3 0x2B  /* Debounce Disable */
0055 #define GPIO_PULL1 0x2C     /* GPIO Pull Disable */
0056 #define GPIO_PULL2 0x2D     /* GPIO Pull Disable */
0057 #define GPIO_PULL3 0x2E     /* GPIO Pull Disable */
0058 #define CMP_CFG_STAT 0x30   /* Comparator Configuration and Status Register */
0059 #define CMP_CONFG_SENS1 0x31    /* Sensor1 Comparator Configuration Register */
0060 #define CMP_CONFG_SENS2 0x32    /* L2 Light Sensor Reference Level, Output Falling for Sensor 1 */
0061 #define CMP1_LVL2_TRIP 0x33 /* L2 Light Sensor Hysteresis (Active when Output Rising) for Sensor 1 */
0062 #define CMP1_LVL2_HYS 0x34  /* L3 Light Sensor Reference Level, Output Falling For Sensor 1 */
0063 #define CMP1_LVL3_TRIP 0x35 /* L3 Light Sensor Hysteresis (Active when Output Rising) For Sensor 1 */
0064 #define CMP1_LVL3_HYS 0x36  /* Sensor 2 Comparator Configuration Register */
0065 #define CMP2_LVL2_TRIP 0x37 /* L2 Light Sensor Reference Level, Output Falling for Sensor 2 */
0066 #define CMP2_LVL2_HYS 0x38  /* L2 Light Sensor Hysteresis (Active when Output Rising) for Sensor 2 */
0067 #define CMP2_LVL3_TRIP 0x39 /* L3 Light Sensor Reference Level, Output Falling For Sensor 2 */
0068 #define CMP2_LVL3_HYS 0x3A  /* L3 Light Sensor Hysteresis (Active when Output Rising) For Sensor 2 */
0069 #define CMP1_ADC_DAT_R1 0x3B    /* Comparator 1 ADC data Register1 */
0070 #define CMP1_ADC_DAT_R2 0x3C    /* Comparator 1 ADC data Register2 */
0071 #define CMP2_ADC_DAT_R1 0x3D    /* Comparator 2 ADC data Register1 */
0072 #define CMP2_ADC_DAT_R2 0x3E    /* Comparator 2 ADC data Register2 */
0073 
0074 #define ADP5588_DEVICE_ID_MASK  0xF
0075 
0076  /* Configuration Register1 */
0077 #define ADP5588_AUTO_INC    (1 << 7)
0078 #define ADP5588_GPIEM_CFG   (1 << 6)
0079 #define ADP5588_OVR_FLOW_M  (1 << 5)
0080 #define ADP5588_INT_CFG     (1 << 4)
0081 #define ADP5588_OVR_FLOW_IEN    (1 << 3)
0082 #define ADP5588_K_LCK_IM    (1 << 2)
0083 #define ADP5588_GPI_IEN     (1 << 1)
0084 #define ADP5588_KE_IEN      (1 << 0)
0085 
0086 /* Interrupt Status Register */
0087 #define ADP5588_CMP2_INT    (1 << 5)
0088 #define ADP5588_CMP1_INT    (1 << 4)
0089 #define ADP5588_OVR_FLOW_INT    (1 << 3)
0090 #define ADP5588_K_LCK_INT   (1 << 2)
0091 #define ADP5588_GPI_INT     (1 << 1)
0092 #define ADP5588_KE_INT      (1 << 0)
0093 
0094 /* Key Lock and Event Counter Register */
0095 #define ADP5588_K_LCK_EN    (1 << 6)
0096 #define ADP5588_LCK21       0x30
0097 #define ADP5588_KEC     0xF
0098 
0099 #define ADP5588_MAXGPIO     18
0100 #define ADP5588_BANK(offs)  ((offs) >> 3)
0101 #define ADP5588_BIT(offs)   (1u << ((offs) & 0x7))
0102 
0103 /* Put one of these structures in i2c_board_info platform_data */
0104 
0105 #define ADP5588_KEYMAPSIZE  80
0106 
0107 #define GPI_PIN_ROW0 97
0108 #define GPI_PIN_ROW1 98
0109 #define GPI_PIN_ROW2 99
0110 #define GPI_PIN_ROW3 100
0111 #define GPI_PIN_ROW4 101
0112 #define GPI_PIN_ROW5 102
0113 #define GPI_PIN_ROW6 103
0114 #define GPI_PIN_ROW7 104
0115 #define GPI_PIN_COL0 105
0116 #define GPI_PIN_COL1 106
0117 #define GPI_PIN_COL2 107
0118 #define GPI_PIN_COL3 108
0119 #define GPI_PIN_COL4 109
0120 #define GPI_PIN_COL5 110
0121 #define GPI_PIN_COL6 111
0122 #define GPI_PIN_COL7 112
0123 #define GPI_PIN_COL8 113
0124 #define GPI_PIN_COL9 114
0125 
0126 #define GPI_PIN_ROW_BASE GPI_PIN_ROW0
0127 #define GPI_PIN_ROW_END GPI_PIN_ROW7
0128 #define GPI_PIN_COL_BASE GPI_PIN_COL0
0129 #define GPI_PIN_COL_END GPI_PIN_COL9
0130 
0131 #define GPI_PIN_BASE GPI_PIN_ROW_BASE
0132 #define GPI_PIN_END GPI_PIN_COL_END
0133 
0134 #define ADP5588_GPIMAPSIZE_MAX (GPI_PIN_END - GPI_PIN_BASE + 1)
0135 
0136 struct adp5588_gpi_map {
0137     unsigned short pin;
0138     unsigned short sw_evt;
0139 };
0140 
0141 struct adp5588_kpad_platform_data {
0142     int rows;           /* Number of rows */
0143     int cols;           /* Number of columns */
0144     const unsigned short *keymap;   /* Pointer to keymap */
0145     unsigned short keymapsize;  /* Keymap size */
0146     unsigned repeat:1;      /* Enable key repeat */
0147     unsigned en_keylock:1;      /* Enable Key Lock feature */
0148     unsigned short unlock_key1; /* Unlock Key 1 */
0149     unsigned short unlock_key2; /* Unlock Key 2 */
0150     const struct adp5588_gpi_map *gpimap;
0151     unsigned short gpimapsize;
0152     const struct adp5588_gpio_platform_data *gpio_data;
0153 };
0154 
0155 struct i2c_client; /* forward declaration */
0156 
0157 struct adp5588_gpio_platform_data {
0158     int gpio_start;     /* GPIO Chip base # */
0159     const char *const *names;
0160     unsigned irq_base;  /* interrupt base # */
0161     unsigned pullup_dis_mask; /* Pull-Up Disable Mask */
0162     int (*setup)(struct i2c_client *client,
0163                 unsigned gpio, unsigned ngpio,
0164                 void *context);
0165     int (*teardown)(struct i2c_client *client,
0166                 unsigned gpio, unsigned ngpio,
0167                 void *context);
0168     void    *context;
0169 };
0170 
0171 #endif