Lines Matching full:hub
44 /* Base device hub (devices attached to Surface Book 3 base). */
98 /* HID keyboard (base hub). */
104 /* HID touchpad (base hub). */
110 /* HID device instance 5 (unknown HID device, base hub). */
116 /* HID device instance 6 (unknown HID device, base hub). */
265 /* -- SSAM base-hub driver. ------------------------------------------------- */
299 static int ssam_base_hub_query_state(struct ssam_base_hub *hub, enum ssam_base_hub_state *state) in ssam_base_hub_query_state() argument
304 status = ssam_retry(ssam_bas_query_opmode, hub->sdev->ctrl, &opmode); in ssam_base_hub_query_state()
306 dev_err(&hub->sdev->dev, "failed to query base state: %d\n", status); in ssam_base_hub_query_state()
321 struct ssam_base_hub *hub = dev_get_drvdata(dev); in ssam_base_hub_state_show() local
322 bool connected = hub->state == SSAM_BASE_HUB_CONNECTED; in ssam_base_hub_state_show()
341 struct ssam_base_hub *hub = container_of(work, struct ssam_base_hub, update_work.work); in ssam_base_hub_update_workfn() local
342 struct fwnode_handle *node = dev_fwnode(&hub->sdev->dev); in ssam_base_hub_update_workfn()
346 status = ssam_base_hub_query_state(hub, &state); in ssam_base_hub_update_workfn()
350 if (hub->state == state) in ssam_base_hub_update_workfn()
352 hub->state = state; in ssam_base_hub_update_workfn()
354 if (hub->state == SSAM_BASE_HUB_CONNECTED) in ssam_base_hub_update_workfn()
355 status = ssam_hub_add_devices(&hub->sdev->dev, hub->sdev->ctrl, node); in ssam_base_hub_update_workfn()
357 ssam_hub_remove_devices(&hub->sdev->dev); in ssam_base_hub_update_workfn()
360 dev_err(&hub->sdev->dev, "failed to update base-hub devices: %d\n", status); in ssam_base_hub_update_workfn()
365 struct ssam_base_hub *hub = container_of(nf, struct ssam_base_hub, notif); in ssam_base_hub_notif() local
372 dev_err(&hub->sdev->dev, "unexpected payload size: %u\n", event->length); in ssam_base_hub_notif()
382 schedule_delayed_work(&hub->update_work, delay); in ssam_base_hub_notif()
394 struct ssam_base_hub *hub = dev_get_drvdata(dev); in ssam_base_hub_resume() local
396 schedule_delayed_work(&hub->update_work, 0); in ssam_base_hub_resume()
403 struct ssam_base_hub *hub; in ssam_base_hub_probe() local
406 hub = devm_kzalloc(&sdev->dev, sizeof(*hub), GFP_KERNEL); in ssam_base_hub_probe()
407 if (!hub) in ssam_base_hub_probe()
410 hub->sdev = sdev; in ssam_base_hub_probe()
411 hub->state = SSAM_BASE_HUB_UNINITIALIZED; in ssam_base_hub_probe()
413 hub->notif.base.priority = INT_MAX; /* This notifier should run first. */ in ssam_base_hub_probe()
414 hub->notif.base.fn = ssam_base_hub_notif; in ssam_base_hub_probe()
415 hub->notif.event.reg = SSAM_EVENT_REGISTRY_SAM; in ssam_base_hub_probe()
416 hub->notif.event.id.target_category = SSAM_SSH_TC_BAS, in ssam_base_hub_probe()
417 hub->notif.event.id.instance = 0, in ssam_base_hub_probe()
418 hub->notif.event.mask = SSAM_EVENT_MASK_NONE; in ssam_base_hub_probe()
419 hub->notif.event.flags = SSAM_EVENT_SEQUENCED; in ssam_base_hub_probe()
421 INIT_DELAYED_WORK(&hub->update_work, ssam_base_hub_update_workfn); in ssam_base_hub_probe()
423 ssam_device_set_drvdata(sdev, hub); in ssam_base_hub_probe()
425 status = ssam_notifier_register(sdev->ctrl, &hub->notif); in ssam_base_hub_probe()
433 schedule_delayed_work(&hub->update_work, 0); in ssam_base_hub_probe()
437 ssam_notifier_unregister(sdev->ctrl, &hub->notif); in ssam_base_hub_probe()
438 cancel_delayed_work_sync(&hub->update_work); in ssam_base_hub_probe()
445 struct ssam_base_hub *hub = ssam_device_get_drvdata(sdev); in ssam_base_hub_remove() local
449 ssam_notifier_unregister(sdev->ctrl, &hub->notif); in ssam_base_hub_remove()
450 cancel_delayed_work_sync(&hub->update_work); in ssam_base_hub_remove()
455 { SSAM_VDEV(HUB, 0x02, SSAM_ANY_IID, 0x00) },
471 /* -- SSAM platform/meta-hub driver. ---------------------------------------- */
530 * suspend/resume of the devices on this hub. in ssam_platform_hub_probe()