82 lines
1.6 KiB
C
82 lines
1.6 KiB
C
/* SPDX-License-Identifier: (GPL-2.0+ OR MIT) */
|
|
/*
|
|
* common/cmd_keypad.c
|
|
*
|
|
* Copyright (C) 2020 Amlogic, Inc. All rights reserved.
|
|
*
|
|
*/
|
|
|
|
#include <common.h>
|
|
#include <command.h>
|
|
#include <asm/arch/mailbox.h>
|
|
#include <linux/ctype.h>
|
|
|
|
/*
|
|
* add a gpio/adc key for keypad
|
|
*
|
|
* key_id: unique key id
|
|
* GPIO KEY: ID(0 <= id < 512) from BL30 gpio-date.h
|
|
* ADC KEY : ID(id >= 512)
|
|
* Remove Keypad: ID = 0xFFFFFFFF
|
|
*
|
|
* status: response status
|
|
* GPIO KEY: 0(Low level), 1(High level)
|
|
* ADC KEY : voltage value(12 bits)
|
|
*
|
|
* channel: saradc channel, only for adc key
|
|
*
|
|
* event : key event, 1 - short press, 2 - long press
|
|
*/
|
|
|
|
static int do_keypad_set(cmd_tbl_t *cmdtp, int flag, int argc,
|
|
char * const argv[])
|
|
{
|
|
uint32_t key_info[4];
|
|
int i, base;
|
|
|
|
if (argc != 5) {
|
|
printf("illegal argc nums\n");
|
|
return -1;
|
|
}
|
|
|
|
for (i = 0; i < 4; i++) {
|
|
if (memcmp(argv[i + 1], "0x", 2))
|
|
base = 10;
|
|
else
|
|
base = 16;
|
|
|
|
key_info[i] = simple_strtoul(argv[i + 1], NULL, base);
|
|
}
|
|
|
|
scpi_send_data(AOCPU_REE_CHANNEL, CMD_SET_KEYPAD,
|
|
key_info, sizeof(key_info), NULL, 0);
|
|
|
|
return 0;
|
|
}
|
|
|
|
static cmd_tbl_t cmd_keypad_sub[] = {
|
|
U_BOOT_CMD_MKENT(set, 6, 0, do_keypad_set, "", ""),
|
|
};
|
|
|
|
static int do_keypad(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
|
|
{
|
|
cmd_tbl_t *c;
|
|
/* Strip off leading 'bmp' command argument */
|
|
argc--;
|
|
argv++;
|
|
c = find_cmd_tbl(argv[0], &cmd_keypad_sub[0],
|
|
ARRAY_SIZE(cmd_keypad_sub));
|
|
if (c) {
|
|
return c->cmd(cmdtp, flag, argc, argv);
|
|
} else {
|
|
cmd_usage(cmdtp);
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
U_BOOT_CMD(
|
|
keypad, 6, 0, do_keypad,
|
|
"set aocpu keypad",
|
|
"set <key_id> <status> <channel> <event>"
|
|
);
|