Blame view
include/mxc_keyb.h
3.05 KB
7f8757016 MLK-12527-1 mxc_k... |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 |
/* * Copyright (C) 2009-2014 Freescale Semiconductor, Inc. All Rights Reserved. * * SPDX-License-Identifier: GPL-2.0+ */ /*! * @defgroup keypad Keypad Driver */ /*! * @file mxc_keyb.h * * @brief MXC keypad header file. * * @ingroup keypad */ #ifndef __MXC_KEYB_H__ #define __MXC_KEYB_H__ /*! * Keypad Module Name */ #define MOD_NAME "mxckpd" /*! * Keypad irq number */ #define KPP_IRQ MXC_INT_KPP /*! * XLATE mode selection */ #define KEYPAD_XLATE 0 /*! * RAW mode selection */ #define KEYPAD_RAW 1 /*! * Maximum number of keys. */ #define MAXROW 8 #define MAXCOL 8 #define MXC_MAXKEY (MAXROW * MAXCOL) /*! * This define indicates break scancode for every key release. A constant * of 128 is added to the key press scancode. */ #define MXC_KEYRELEASE 128 /* * _reg_KPP_KPCR _reg_KPP_KPSR _reg_KPP_KDDR _reg_KPP_KPDR * Keypad Control Register Address */ #define KPCR (KPP_BASE_ADDR + 0x00) /* * Keypad Status Register Address */ #define KPSR (KPP_BASE_ADDR + 0x02) /* * Keypad Data Direction Address */ #define KDDR (KPP_BASE_ADDR + 0x04) /* * Keypad Data Register */ #define KPDR (KPP_BASE_ADDR + 0x06) /* * Key Press Interrupt Status bit */ #define KBD_STAT_KPKD 0x01 /* * Key Release Interrupt Status bit */ #define KBD_STAT_KPKR 0x02 /* * Key Depress Synchronizer Chain Status bit */ #define KBD_STAT_KDSC 0x04 /* * Key Release Synchronizer Status bit */ #define KBD_STAT_KRSS 0x08 /* * Key Depress Interrupt Enable Status bit */ #define KBD_STAT_KDIE 0x100 /* * Key Release Interrupt Enable */ #define KBD_STAT_KRIE 0x200 /* * Keypad Clock Enable */ #define KBD_STAT_KPPEN 0x400 /*! * Buffer size of keypad queue. Should be a power of 2. */ #define KPP_BUF_SIZE 128 /*! * Test whether bit is set for integer c */ #define TEST_BIT(c, n) ((c) & (0x1 << (n))) /*! * Set nth bit in the integer c */ #define BITSET(c, n) ((c) | (1 << (n))) /*! * Reset nth bit in the integer c */ #define BITRESET(c, n) ((c) & ~(1 << (n))) enum KeyEvent { KDepress, KRelease }; /*! * This enum represents the keypad state machine to maintain debounce logic * for key press/release. */ enum KeyState { /*! * Key press state. */ KStateUp, /*! * Key press debounce state. */ KStateFirstDown, /*! * Key release state. */ KStateDown, /*! * Key release debounce state. */ KStateFirstUp }; /*! * Keypad Private Data Structure */ struct keypad_priv { /*! * Keypad state machine. */ enum KeyState iKeyState; /*! * Number of rows configured in the keypad matrix */ unsigned long kpp_rows; /*! * Number of Columns configured in the keypad matrix */ unsigned long kpp_cols; }; /*! * Keypad Data Structure * */ struct kpp_key_info { enum KeyEvent evt; unsigned short val; }; int mxc_kpp_init(void); int mxc_kpp_getc(struct kpp_key_info **); /*! * These functions are used to configure and the GPIO pins for keypad to * activate and deactivate it. */ void setup_mxc_kpd(void); #endif /* __MXC_KEYB_H__ */ |