Skip to content

Commit c83f013

Browse files
committed
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.
1 parent 22073c5 commit c83f013

File tree

1 file changed

+12
-2
lines changed

1 file changed

+12
-2
lines changed

app/drivers/kscan/kscan_composite.c

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,12 @@ static int kscan_composite_enable_callback(const struct device *dev) {
4141
for (int i = 0; i < ARRAY_SIZE(kscan_composite_children); i++) {
4242
const struct kscan_composite_child_config *cfg = &kscan_composite_children[i];
4343

44-
kscan_enable_callback(device_get_binding(cfg->label));
44+
const struct device *dev = device_get_binding(cfg->label);
45+
if (!dev) {
46+
LOG_WRN("Failed to load child kscan device %s", log_strdup(cfg->label));
47+
continue;
48+
}
49+
kscan_enable_callback(dev);
4550
}
4651
return 0;
4752
}
@@ -50,7 +55,12 @@ static int kscan_composite_disable_callback(const struct device *dev) {
5055
for (int i = 0; i < ARRAY_SIZE(kscan_composite_children); i++) {
5156
const struct kscan_composite_child_config *cfg = &kscan_composite_children[i];
5257

53-
kscan_disable_callback(device_get_binding(cfg->label));
58+
const struct device *dev = device_get_binding(cfg->label);
59+
if (!dev) {
60+
LOG_WRN("Failed to load child kscan device %s", log_strdup(cfg->label));
61+
continue;
62+
}
63+
kscan_disable_callback(dev);
5464
}
5565
return 0;
5666
}

0 commit comments

Comments
 (0)