/* SPDX-License-Identifier: (GPL-2.0+ OR MIT) */ /* * common/cmd_keypad.c * * Copyright (C) 2020 Amlogic, Inc. All rights reserved. * */ #include #include #include /* * 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; if (argc != 5) { printf("illegal argc nums\n"); return -1; } for (i = 0; i < 4; i++) key_info[i] = simple_strtoul(argv[i + 1], NULL, 10); 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 " );