diff --git a/app/dts/bindings/zmk,kscan-composite.yaml b/app/dts/bindings/zmk,kscan-composite.yaml index ea6cc41619e..2600eab7be6 100644 --- a/app/dts/bindings/zmk,kscan-composite.yaml +++ b/app/dts/bindings/zmk,kscan-composite.yaml @@ -3,6 +3,8 @@ description: | compatible: "zmk,kscan-composite" +include: kscan.yaml + properties: label: type: string diff --git a/app/module/drivers/kscan/kscan_composite.c b/app/module/drivers/kscan/kscan_composite.c index 5b809d17211..18d957ec341 100644 --- a/app/module/drivers/kscan/kscan_composite.c +++ b/app/module/drivers/kscan/kscan_composite.c @@ -44,6 +44,13 @@ static int kscan_composite_enable_callback(const struct device *dev) { for (int i = 0; i < cfg->children_len; i++) { const struct kscan_composite_child_config *child_cfg = &cfg->children[i]; +#if IS_ENABLED(CONFIG_PM_DEVICE_RUNTIME) || IS_ENABLED(CONFIG_PM_DEVICE) + if (pm_device_wakeup_is_enabled(dev) && pm_device_wakeup_is_capable(child_cfg->child) && + !pm_device_wakeup_enable(child_cfg->child, true)) { + LOG_ERR("Failed to enable wakeup for %s", child_cfg->child->name); + } +#endif // IS_ENABLED(CONFIG_PM_DEVICE_RUNTIME) || IS_ENABLED(CONFIG_PM_DEVICE) + #if IS_ENABLED(CONFIG_PM_DEVICE_RUNTIME) if (!pm_device_runtime_is_enabled(dev) && pm_device_runtime_is_enabled(child_cfg->child)) { pm_device_runtime_get(child_cfg->child); @@ -62,6 +69,14 @@ static int kscan_composite_disable_callback(const struct device *dev) { for (int i = 0; i < cfg->children_len; i++) { const struct kscan_composite_child_config *child_cfg = &cfg->children[i]; +#if IS_ENABLED(CONFIG_PM_DEVICE_RUNTIME) || IS_ENABLED(CONFIG_PM_DEVICE) + if (pm_device_wakeup_is_capable(child_cfg->child) && + pm_device_wakeup_is_enabled(child_cfg->child) && + !pm_device_wakeup_enable(child_cfg->child, false)) { + LOG_ERR("Failed to disable wakeup for %s", child_cfg->child->name); + } +#endif // IS_ENABLED(CONFIG_PM_DEVICE_RUNTIME) || IS_ENABLED(CONFIG_PM_DEVICE) + kscan_disable_callback(child_cfg->child); #if IS_ENABLED(CONFIG_PM_DEVICE_RUNTIME) diff --git a/docs/docs/config/kscan.md b/docs/docs/config/kscan.md index 6e9aab02abe..70488e03c5c 100644 --- a/docs/docs/config/kscan.md +++ b/docs/docs/config/kscan.md @@ -223,11 +223,12 @@ Definition file: [zmk/app/dts/bindings/zmk,kscan-composite.yaml](https://github. The `zmk,kscan-composite` node should have one child node per keyboard scan driver that should be composited. Each child node can have the following properties: -| Property | Type | Description | Default | -| ------------ | ------- | ------------------------------------------------------------------------------ | ------- | -| `kscan` | phandle | Label of the kscan driver to include | | -| `row-offset` | int | Shifts row 0 of the included driver to a new row in the composite matrix | 0 | -| `col-offset` | int | Shifts column 0 of the included driver to a new column in the composite matrix | 0 | +| Property | Type | Description | Default | +| --------------- | ------- | ------------------------------------------------------------------------------ | ------- | +| `kscan` | phandle | Label of the kscan driver to include | | +| `row-offset` | int | Shifts row 0 of the included driver to a new row in the composite matrix | 0 | +| `col-offset` | int | Shifts column 0 of the included driver to a new column in the composite matrix | 0 | +| `wakeup-source` | bool | Mark this kscan instance as able to wake the keyboard | n | ### Example Configuration