Lines Matching refs:worker

162 	struct asus_worker *worker;  member
393 static void asus_worker_schedule(struct asus_worker *worker, struct asus_work_action *action) in asus_worker_schedule() argument
395 if (worker->removed) { in asus_worker_schedule()
400 list_add_tail(&action->node, &worker->actions); in asus_worker_schedule()
401 schedule_work(&worker->work); in asus_worker_schedule()
418 spin_lock_irqsave(&drvdata->worker->lock, flags); in asus_kbd_fn_lock_set()
419 asus_worker_schedule(drvdata->worker, action); in asus_kbd_fn_lock_set()
420 spin_unlock_irqrestore(&drvdata->worker->lock, flags); in asus_kbd_fn_lock_set()
445 spin_lock_irqsave(&drvdata->worker->lock, flags); in asus_kbd_wmi_fan_send()
446 asus_worker_schedule(drvdata->worker, action); in asus_kbd_wmi_fan_send()
447 spin_unlock_irqrestore(&drvdata->worker->lock, flags); in asus_kbd_wmi_fan_send()
743 struct asus_worker *worker = drvdata->worker; in asus_kbd_backlight_set() local
757 spin_lock_irqsave(&worker->lock, flags); in asus_kbd_backlight_set()
758 asus_worker_schedule(worker, action); in asus_kbd_backlight_set()
759 spin_unlock_irqrestore(&worker->lock, flags); in asus_kbd_backlight_set()
764 struct asus_worker *worker = container_of(work, struct asus_worker, work); in asus_work() local
769 spin_lock_irqsave(&worker->lock, flags); in asus_work()
770 if (!list_empty(&worker->actions)) { in asus_work()
771 action = list_first_entry(&worker->actions, in asus_work()
775 spin_unlock_irqrestore(&worker->lock, flags); in asus_work()
782 asus_kbd_set_brightness(worker->hdev, action->data.brightness); in asus_work()
785 asus_kbd_set_fn_lock(worker->hdev, action->data.fn_lock); in asus_work()
788 asus_kbd_wmi_fan(worker->hdev, &action->data.fan_hid_data); in asus_work()
791 hid_err(worker->hdev, "Invalid action type: %d\n", action->type); in asus_work()
798 spin_lock_irqsave(&worker->lock, flags); in asus_work()
799 if (!list_empty(&worker->actions)) in asus_work()
800 schedule_work(&worker->work); in asus_work()
801 spin_unlock_irqrestore(&worker->lock, flags); in asus_work()
806 drvdata->worker = devm_kzalloc(&hdev->dev, sizeof(struct asus_worker), GFP_KERNEL); in asus_worker_create()
807 if (!drvdata->worker) in asus_worker_create()
810 drvdata->worker->removed = false; in asus_worker_create()
811 drvdata->worker->hdev = hdev; in asus_worker_create()
812 INIT_LIST_HEAD(&drvdata->worker->actions); in asus_worker_create()
814 INIT_WORK(&drvdata->worker->work, asus_work); in asus_worker_create()
815 spin_lock_init(&drvdata->worker->lock); in asus_worker_create()
820 static void asus_worker_stop(struct asus_worker *worker) in asus_worker_stop() argument
825 spin_lock_irqsave(&worker->lock, flags); in asus_worker_stop()
826 worker->removed = true; in asus_worker_stop()
827 list_for_each_entry_safe(action, tmp, &worker->actions, node) { in asus_worker_stop()
831 spin_unlock_irqrestore(&worker->lock, flags); in asus_worker_stop()
833 cancel_work_sync(&worker->work); in asus_worker_stop()
1491 asus_worker_stop(drvdata->worker); in asus_probe()
1542 asus_worker_stop(drvdata->worker); in asus_probe()
1554 asus_worker_stop(drvdata->worker); in asus_remove()