Lines Matching refs:hub
359 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
364 status = ssam_retry(ssam_bas_query_opmode, hub->sdev->ctrl, &opmode); in ssam_base_hub_query_state()
366 dev_err(&hub->sdev->dev, "failed to query base state: %d\n", status); in ssam_base_hub_query_state()
381 struct ssam_base_hub *hub = dev_get_drvdata(dev); in ssam_base_hub_state_show() local
382 bool connected = hub->state == SSAM_BASE_HUB_CONNECTED; in ssam_base_hub_state_show()
401 struct ssam_base_hub *hub = container_of(work, struct ssam_base_hub, update_work.work); in ssam_base_hub_update_workfn() local
402 struct fwnode_handle *node = dev_fwnode(&hub->sdev->dev); in ssam_base_hub_update_workfn()
406 status = ssam_base_hub_query_state(hub, &state); in ssam_base_hub_update_workfn()
410 if (hub->state == state) in ssam_base_hub_update_workfn()
412 hub->state = state; in ssam_base_hub_update_workfn()
414 if (hub->state == SSAM_BASE_HUB_CONNECTED) in ssam_base_hub_update_workfn()
415 status = ssam_hub_add_devices(&hub->sdev->dev, hub->sdev->ctrl, node); in ssam_base_hub_update_workfn()
417 ssam_hub_remove_devices(&hub->sdev->dev); in ssam_base_hub_update_workfn()
420 dev_err(&hub->sdev->dev, "failed to update base-hub devices: %d\n", status); in ssam_base_hub_update_workfn()
425 struct ssam_base_hub *hub = container_of(nf, struct ssam_base_hub, notif); in ssam_base_hub_notif() local
432 dev_err(&hub->sdev->dev, "unexpected payload size: %u\n", event->length); in ssam_base_hub_notif()
442 schedule_delayed_work(&hub->update_work, delay); in ssam_base_hub_notif()
454 struct ssam_base_hub *hub = dev_get_drvdata(dev); in ssam_base_hub_resume() local
456 schedule_delayed_work(&hub->update_work, 0); in ssam_base_hub_resume()
463 struct ssam_base_hub *hub; in ssam_base_hub_probe() local
466 hub = devm_kzalloc(&sdev->dev, sizeof(*hub), GFP_KERNEL); in ssam_base_hub_probe()
467 if (!hub) in ssam_base_hub_probe()
470 hub->sdev = sdev; in ssam_base_hub_probe()
471 hub->state = SSAM_BASE_HUB_UNINITIALIZED; in ssam_base_hub_probe()
473 hub->notif.base.priority = INT_MAX; /* This notifier should run first. */ in ssam_base_hub_probe()
474 hub->notif.base.fn = ssam_base_hub_notif; in ssam_base_hub_probe()
475 hub->notif.event.reg = SSAM_EVENT_REGISTRY_SAM; in ssam_base_hub_probe()
476 hub->notif.event.id.target_category = SSAM_SSH_TC_BAS, in ssam_base_hub_probe()
477 hub->notif.event.id.instance = 0, in ssam_base_hub_probe()
478 hub->notif.event.mask = SSAM_EVENT_MASK_NONE; in ssam_base_hub_probe()
479 hub->notif.event.flags = SSAM_EVENT_SEQUENCED; in ssam_base_hub_probe()
481 INIT_DELAYED_WORK(&hub->update_work, ssam_base_hub_update_workfn); in ssam_base_hub_probe()
483 ssam_device_set_drvdata(sdev, hub); in ssam_base_hub_probe()
485 status = ssam_notifier_register(sdev->ctrl, &hub->notif); in ssam_base_hub_probe()
493 schedule_delayed_work(&hub->update_work, 0); in ssam_base_hub_probe()
497 ssam_notifier_unregister(sdev->ctrl, &hub->notif); in ssam_base_hub_probe()
498 cancel_delayed_work_sync(&hub->update_work); in ssam_base_hub_probe()
505 struct ssam_base_hub *hub = ssam_device_get_drvdata(sdev); in ssam_base_hub_remove() local
509 ssam_notifier_unregister(sdev->ctrl, &hub->notif); in ssam_base_hub_remove()
510 cancel_delayed_work_sync(&hub->update_work); in ssam_base_hub_remove()