|
|
|
@ -10,7 +10,6 @@ |
|
|
|
|
#include <cros_ec.h> |
|
|
|
|
#include <dm.h> |
|
|
|
|
#include <errno.h> |
|
|
|
|
#include <fdtdec.h> |
|
|
|
|
#include <input.h> |
|
|
|
|
#include <keyboard.h> |
|
|
|
|
#include <key_matrix.h> |
|
|
|
@ -161,15 +160,15 @@ int cros_ec_kbc_check(struct input_config *input) |
|
|
|
|
* @param config Configuration data read from fdt |
|
|
|
|
* @return 0 if ok, -1 on error |
|
|
|
|
*/ |
|
|
|
|
static int cros_ec_keyb_decode_fdt(const void *blob, int node, |
|
|
|
|
struct cros_ec_keyb_priv *config) |
|
|
|
|
static int cros_ec_keyb_decode_fdt(struct udevice *dev, |
|
|
|
|
struct cros_ec_keyb_priv *config) |
|
|
|
|
{ |
|
|
|
|
/*
|
|
|
|
|
* Get keyboard rows and columns - at present we are limited to |
|
|
|
|
* 8 columns by the protocol (one byte per row scan) |
|
|
|
|
*/ |
|
|
|
|
config->key_rows = fdtdec_get_int(blob, node, "keypad,num-rows", 0); |
|
|
|
|
config->key_cols = fdtdec_get_int(blob, node, "keypad,num-columns", 0); |
|
|
|
|
config->key_rows = dev_read_u32_default(dev, "keypad,num-rows", 0); |
|
|
|
|
config->key_cols = dev_read_u32_default(dev, "keypad,num-columns", 0); |
|
|
|
|
if (!config->key_rows || !config->key_cols || |
|
|
|
|
config->key_rows * config->key_cols / 8 |
|
|
|
|
> CROS_EC_KEYSCAN_COLS) { |
|
|
|
@ -177,8 +176,8 @@ static int cros_ec_keyb_decode_fdt(const void *blob, int node, |
|
|
|
|
config->key_rows, config->key_cols); |
|
|
|
|
return -1; |
|
|
|
|
} |
|
|
|
|
config->ghost_filter = fdtdec_get_bool(blob, node, |
|
|
|
|
"google,needs-ghost-filter"); |
|
|
|
|
config->ghost_filter = dev_read_bool(dev, "google,needs-ghost-filter"); |
|
|
|
|
|
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -188,12 +187,13 @@ static int cros_ec_kbd_probe(struct udevice *dev) |
|
|
|
|
struct keyboard_priv *uc_priv = dev_get_uclass_priv(dev); |
|
|
|
|
struct stdio_dev *sdev = &uc_priv->sdev; |
|
|
|
|
struct input_config *input = &uc_priv->input; |
|
|
|
|
const void *blob = gd->fdt_blob; |
|
|
|
|
int node = dev_of_offset(dev); |
|
|
|
|
int ret; |
|
|
|
|
|
|
|
|
|
if (cros_ec_keyb_decode_fdt(blob, node, priv)) |
|
|
|
|
return -1; |
|
|
|
|
ret = cros_ec_keyb_decode_fdt(dev, priv); |
|
|
|
|
if (ret) { |
|
|
|
|
debug("%s: Cannot decode node (ret=%d)\n", __func__, ret); |
|
|
|
|
return -EINVAL; |
|
|
|
|
} |
|
|
|
|
input_set_delays(input, KBC_REPEAT_DELAY_MS, KBC_REPEAT_RATE_MS); |
|
|
|
|
ret = key_matrix_init(&priv->matrix, priv->key_rows, priv->key_cols, |
|
|
|
|
priv->ghost_filter); |
|
|
|
@ -201,7 +201,7 @@ static int cros_ec_kbd_probe(struct udevice *dev) |
|
|
|
|
debug("%s: cannot init key matrix\n", __func__); |
|
|
|
|
return ret; |
|
|
|
|
} |
|
|
|
|
ret = key_matrix_decode_fdt(&priv->matrix, gd->fdt_blob, node); |
|
|
|
|
ret = key_matrix_decode_fdt(dev, &priv->matrix); |
|
|
|
|
if (ret) { |
|
|
|
|
debug("%s: Could not decode key matrix from fdt\n", __func__); |
|
|
|
|
return ret; |
|
|
|
|