summaryrefslogtreecommitdiff
path: root/include/tegra-kbc.h
blob: fd1fe3cdcbd054ba6a84f874cefee25f0b205b4e (plain)
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
/*
 * Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */

#ifndef __include_tegra_kbc_h__
#define __include_tegra_kbc_h__

#include <common.h>

enum KEYS {
	KEY_FIRST_MODIFIER = 220,
	KEY_RIGHT_CTRL = KEY_FIRST_MODIFIER,
	KEY_LEFT_CTRL,
	KEY_FN,
	KEY_SHIFT,
};

#define KEY_IS_MODIFIER(key) ((key) >= KEY_FIRST_MODIFIER)

enum {
	KBC_MAX_ROW	= 16,
	KBC_MAX_COL	= 8,
	KBC_KEY_COUNT	= KBC_MAX_ROW * KBC_MAX_COL,
};

struct tegra_keyboard_config {
	/* keycode tables, one for each row/col position */
	u8 plain_keycode[KBC_KEY_COUNT]; /* when no Shift or Fn */
	u8 shift_keycode[KBC_KEY_COUNT]; /* Shift modifier key is pressed */
	u8 fn_keycode[KBC_KEY_COUNT]; /* Fn modifier key is pressed */
	u8 ctrl_keycode[KBC_KEY_COUNT]; /* Ctrl modifier key is pressed */
};

struct kbc_tegra {
	u32 control;
	u32 interrupt;
	u32 row_cfg[4];
	u32 col_cfg[3];
	u32 timeout_cnt;
	u32 init_dly;
	u32 rpt_dly;
	u32 kp_ent[2];
	u32 row_mask[16];
};

#ifdef CONFIG_SYS_CONSOLE_OVERWRITE_ROUTINE
extern int overwrite_console(void);
#define OVERWRITE_CONSOLE overwrite_console()
#else
#define OVERWRITE_CONSOLE 0
#endif /* CONFIG_SYS_CONSOLE_OVERWRITE_ROUTINE */

extern struct tegra_keyboard_config board_keyboard_config;

#endif /* __include_tegra_kbc_h__ */