ssam_controller_init(9)
β¨ ssam_controller_init(9) β¨
okay so this is a page from the Kernel API Manual and it's literally all about ssam_controller_init β yes bestie, we're getting into Surface Aggregator territory, buckle up π
πΈ NAME πΈ
ssam_controller_init β Initialize SSAM controller.
π SYNOPSIS π
int ssam_controller_init (struct ssam_controller *ctrl , struct
serdev_device *serdev );
π¦ ARGUMENTS π¦
ctrlβ The controller to initialize. this is the main character, the one getting set up πserdevβ The serial device representing the underlying data transport. like, the actual wire-level vibe that carries your bytes around π«Ά
π DESCRIPTION π
So what this does: it initializes the given controller. That's it. That's the whole thing. β¨
But here's the tea β it does neither start receiver nor transmitter threads. Not a single thread, ngl. So after this call, the controller is not ready to just go do stuff, and you need to know the rest of the pipeline or you'll be sitting there confused π
After this call, the controller has to be hooked up to the serdev core separately via struct serdev_device_ops, relaying calls to ssam_controller_receive_buf and ssam_controller_write_wakeup. Like, you gotta do that glue work yourself, no cap.
Once the controller has been hooked up, transmitter and receiver threads may be started via ssam_controller_start. π₯
π Important caveat bestie: these setup steps need to be completed before controller can be used for requests. Don't skip ahead, fr fr β do the steps in order or nothing works.
π SEE ALSO π
Kernel file ./drivers/platform/surface/aggregator/controller.c β go read the source, it's giving main character energy:
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_start(9)ssam_controller_shutdown(9)ssam_controller_destroy(9)ssam_controller_suspend(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)
like, that's a whole friend group of functions and honestly? obsessed π§π
and that's the page!! one last lil sign-off from the footer bestie: this came out of ./drivers/platform/surface/agg... and it's stamped October 2026, all under the name ssam_controller_init(9). 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