From bf32a7675b95cf31bd29cbb51c3a360b4d9be5a6 Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Tue, 2 Mar 2021 11:10:21 -0500 Subject: [PATCH] fix(kscan): Allow composite driver to handle missing children. For split keyboards using an IO expander over TRRS/i2c, if the right half isn't connected, we should be able to gracefully fallback to the left side still working. --- app/drivers/kscan/kscan_composite.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/app/drivers/kscan/kscan_composite.c b/app/drivers/kscan/kscan_composite.c index 2aeb047c871b..0d40c6fad10d 100644 --- a/app/drivers/kscan/kscan_composite.c +++ b/app/drivers/kscan/kscan_composite.c @@ -41,7 +41,12 @@ static int kscan_composite_enable_callback(const struct device *dev) { for (int i = 0; i < ARRAY_SIZE(kscan_composite_children); i++) { const struct kscan_composite_child_config *cfg = &kscan_composite_children[i]; - kscan_enable_callback(device_get_binding(cfg->label)); + const struct device *dev = device_get_binding(cfg->label); + if (!dev) { + LOG_WRN("Failed to load child kscan device %s", log_strdup(cfg->label)); + continue; + } + kscan_enable_callback(dev); } return 0; } @@ -50,7 +55,12 @@ static int kscan_composite_disable_callback(const struct device *dev) { for (int i = 0; i < ARRAY_SIZE(kscan_composite_children); i++) { const struct kscan_composite_child_config *cfg = &kscan_composite_children[i]; - kscan_disable_callback(device_get_binding(cfg->label)); + const struct device *dev = device_get_binding(cfg->label); + if (!dev) { + LOG_WRN("Failed to load child kscan device %s", log_strdup(cfg->label)); + continue; + } + kscan_disable_callback(dev); } return 0; }