ssam_controller_suspend(9)
π NAME
ssam_controller_suspend β bestie, this is literally the "go the heck to sleep" button for your Surface controller β¨
(oh and hi, you're reading the Kernel API Manual page for ssam_controller_suspend(9) β welcome to the group chat π)
π SYNOPSIS
int ssam_controller_suspend (struct ssam_controller *ctrl);
π¦ ARGUMENTS
ctrlβ the controller you're about to tuck into bed π like, this one, the one you're suspending. no other controller. just her.
π« DESCRIPTION
okay so what this does is marks the controller as suspended. that's the whole vibe. it flips the little "she's asleep" flag π€
but β and I need you to hear me on this β display-off and D0-exit notifications have to be sent manually before you transition the controller into the suspended state via this function. the function does not do it for you. it will not hold your hand. you gotta send those yourself first, then call this. iykyk π
if you wanna wake her back up later (and you will), see ssam_controller_resume for the corresponding resume function β it's the matching set, they're giving complementary energies fr fr π«Ά
π₯ RETURN
Returns -EINVAL if the controller is currently not in the "started" state. so like, wrong state = she's not hearing it, you get -EINVAL and that's that π
π SEE ALSO
the source lives in the kernel file ./drivers/platform/surface/aggregator/controller.c β go read it, it ate π
and here's the whole extended friend group, no cap, every single one:
ssh_seq_reset(9),ssh_seq_next(9),ssh_rqid_reset(9),ssh_rqid_next(9)ssam_event_matches_notifier(9)ssam_nfblk_call_chain(9),ssam_nfblk_insert(9),ssam_nfblk_find(9),ssam_nfblk_remove(9)ssam_nf_head_init(9),ssam_nf_head_destroy(9)struct ssam_nf_refcount_key(9),struct ssam_nf_refcount_entry(9)ssam_nf_refcount_inc(9),ssam_nf_refcount_dec(9),ssam_nf_refcount_dec_free(9),ssam_nf_refcount_empty(9)ssam_nf_call(9),ssam_nf_init(9),ssam_nf_destroy(9)ssam_event_item_cache_init(9),ssam_event_item_cache_destroy(9),ssam_event_item_free(9),ssam_event_item_alloc(9)ssam_event_queue_push(9),ssam_event_queue_pop(9),ssam_event_queue_is_empty(9)ssam_cplt_get_event_queue(9),ssam_cplt_submit(9),ssam_cplt_submit_event(9),ssam_cplt_flush(9)ssam_event_queue_init(9),ssam_cplt_init(9),ssam_cplt_destroy(9)ssam_controller_device(9),ssam_controller_get(9),ssam_controller_put(9)ssam_controller_statelock(9),ssam_controller_stateunlock(9),ssam_controller_lock(9)ssam_controller_caps_load_from_acpi(9),ssam_controller_caps_load_from_of(9),ssam_controller_caps_load(9)ssam_controller_init(9),ssam_controller_start(9),ssam_controller_shutdown(9),ssam_controller_destroy(9),ssam_controller_resume(9)ssam_request_write_data(9),ssam_request_sync_alloc(9),ssam_request_sync_free(9),ssam_request_sync_init(9),ssam_request_sync_submit(9),ssam_request_do_sync(9),ssam_request_do_sync_with_buffer(9)struct ssh_notification_params(9),ssam_ssh_event_enable(9),ssam_ssh_event_disable(9)ssam_get_firmware_version(9)ssam_ctrl_notif_display_off(9),ssam_ctrl_notif_display_on(9),ssam_ctrl_notif_d0_exit(9),ssam_ctrl_notif_d0_entry(9)ssam_nf_refcount_enable(9),ssam_nf_refcount_disable_free(9)ssam_notifier_register(9),__ssam_notifier_unregister(9)ssam_controller_event_enable(9),ssam_controller_event_disable(9)ssam_notifier_disable_registered(9),ssam_notifier_restore_registered(9),ssam_notifier_is_empty(9),ssam_notifier_unregister_all(9)ssam_irq_setup(9),ssam_irq_free(9),ssam_irq_arm_for_wakeup(9),ssam_irq_disarm_wakeup(9)
πΈ okay that's the whole page, mwah π this came from ./drivers/platform/surface/agg... and it's dated October 2026 β so like, future vibes, main character documentation energy β go put your controller to sleep responsibly, bestie, and remember: notifications first, then suspend. periodt π
π
π¦ where this page comes from
- nixpkgs unstable: linux-manual 7.3.1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms