Lines Matching +full:zero +full:- +full:initialised

1 // SPDX-License-Identifier: GPL-2.0-or-later
45 struct snd_jack *jack = device->device_data; in snd_jack_dev_disconnect()
50 guard(mutex)(&jack->input_dev_lock); in snd_jack_dev_disconnect()
51 if (!jack->input_dev) in snd_jack_dev_disconnect()
56 if (jack->registered) in snd_jack_dev_disconnect()
57 input_unregister_device(jack->input_dev); in snd_jack_dev_disconnect()
59 input_free_device(jack->input_dev); in snd_jack_dev_disconnect()
60 jack->input_dev = NULL; in snd_jack_dev_disconnect()
67 struct snd_jack *jack = device->device_data; in snd_jack_dev_free()
68 struct snd_card *card = device->card; in snd_jack_dev_free()
71 list_for_each_entry_safe(jack_kctl, tmp_jack_kctl, &jack->kctl_list, list) { in snd_jack_dev_free()
72 list_del_init(&jack_kctl->list); in snd_jack_dev_free()
73 snd_ctl_remove(card, jack_kctl->kctl); in snd_jack_dev_free()
76 if (jack->private_free) in snd_jack_dev_free()
77 jack->private_free(jack); in snd_jack_dev_free()
81 kfree(jack->id); in snd_jack_dev_free()
90 struct snd_jack *jack = device->device_data; in snd_jack_dev_register()
91 struct snd_card *card = device->card; in snd_jack_dev_register()
94 snprintf(jack->name, sizeof(jack->name), "%s %s", in snd_jack_dev_register()
95 card->shortname, jack->id); in snd_jack_dev_register()
97 guard(mutex)(&jack->input_dev_lock); in snd_jack_dev_register()
98 if (!jack->input_dev) in snd_jack_dev_register()
101 jack->input_dev->name = jack->name; in snd_jack_dev_register()
104 if (!jack->input_dev->dev.parent) in snd_jack_dev_register()
105 jack->input_dev->dev.parent = snd_card_get_device_link(card); in snd_jack_dev_register()
108 for (i = 0; i < ARRAY_SIZE(jack->key); i++) { in snd_jack_dev_register()
111 if (!(jack->type & testbit)) in snd_jack_dev_register()
114 if (!jack->key[i]) in snd_jack_dev_register()
115 jack->key[i] = BTN_0 + i; in snd_jack_dev_register()
117 input_set_capability(jack->input_dev, EV_KEY, jack->key[i]); in snd_jack_dev_register()
120 err = input_register_device(jack->input_dev); in snd_jack_dev_register()
122 jack->registered = 1; in snd_jack_dev_register()
138 jack = jack_kctl->jack; in snd_jack_inject_report()
140 if (jack_kctl->sw_inject_enable) in snd_jack_inject_report()
141 snd_kctl_jack_report(jack->card, jack_kctl->kctl, in snd_jack_inject_report()
142 status & jack_kctl->mask_bits); in snd_jack_inject_report()
145 if (!jack->input_dev) in snd_jack_inject_report()
148 for (i = 0; i < ARRAY_SIZE(jack->key); i++) { in snd_jack_inject_report()
149 int testbit = ((SND_JACK_BTN_0 >> i) & jack_kctl->mask_bits); in snd_jack_inject_report()
151 if (jack->type & testbit) in snd_jack_inject_report()
152 input_report_key(jack->input_dev, jack->key[i], in snd_jack_inject_report()
157 int testbit = ((1 << i) & jack_kctl->mask_bits); in snd_jack_inject_report()
159 if (jack->type & testbit) in snd_jack_inject_report()
160 input_report_switch(jack->input_dev, in snd_jack_inject_report()
165 input_sync(jack->input_dev); in snd_jack_inject_report()
172 struct snd_jack_kctl *jack_kctl = file->private_data; in sw_inject_enable_read()
176 len = scnprintf(buf, sizeof(buf), "%s: %s\t\t%s: %i\n", "Jack", jack_kctl->kctl->id.name, in sw_inject_enable_read()
177 "Inject Enabled", jack_kctl->sw_inject_enable); in sw_inject_enable_read()
186 struct snd_jack_kctl *jack_kctl = file->private_data; in sw_inject_enable_write()
191 ret = simple_write_to_buffer(buf, sizeof(buf) - 1, ppos, from, count); in sw_inject_enable_write()
196 if (jack_kctl->sw_inject_enable == (!!enable)) in sw_inject_enable_write()
199 jack_kctl->sw_inject_enable = !!enable; in sw_inject_enable_write()
201 if (!jack_kctl->sw_inject_enable) in sw_inject_enable_write()
202 snd_jack_report(jack_kctl->jack, jack_kctl->jack->hw_status_cache); in sw_inject_enable_write()
210 struct snd_jack_kctl *jack_kctl = file->private_data; in jackin_inject_write()
215 if (!jack_kctl->sw_inject_enable) in jackin_inject_write()
216 return -EINVAL; in jackin_inject_write()
218 ret = simple_write_to_buffer(buf, sizeof(buf) - 1, ppos, from, count); in jackin_inject_write()
223 snd_jack_inject_report(jack_kctl, !!enable ? jack_kctl->mask_bits : 0); in jackin_inject_write()
231 struct snd_jack_kctl *jack_kctl = file->private_data; in jack_kctl_id_read()
235 len = scnprintf(buf, sizeof(buf), "%s\n", jack_kctl->kctl->id.name); in jack_kctl_id_read()
270 struct snd_jack_kctl *jack_kctl = file->private_data; in jack_kctl_mask_bits_read()
274 len = parse_mask_bits(jack_kctl->mask_bits, buf, sizeof(buf)); in jack_kctl_mask_bits_read()
283 struct snd_jack_kctl *jack_kctl = file->private_data; in jack_kctl_status_read()
287 len = scnprintf(buf, sizeof(buf), "%s\n", jack_kctl->kctl->private_value ? in jack_kctl_status_read()
298 struct snd_jack_kctl *jack_kctl = file->private_data; in jack_type_read()
302 len = parse_mask_bits(jack_kctl->jack->type, buf, sizeof(buf)); in jack_type_read()
353 if (strstr(jack_kctl->kctl->id.name, "Phantom")) in snd_jack_debugfs_add_inject_node()
356 tname = kstrdup(jack_kctl->kctl->id.name, GFP_KERNEL); in snd_jack_debugfs_add_inject_node()
358 return -ENOMEM; in snd_jack_debugfs_add_inject_node()
365 jack_kctl->jack_debugfs_root = debugfs_create_dir(tname, jack->card->debugfs_root); in snd_jack_debugfs_add_inject_node()
368 debugfs_create_file("sw_inject_enable", 0644, jack_kctl->jack_debugfs_root, jack_kctl, in snd_jack_debugfs_add_inject_node()
371 debugfs_create_file("jackin_inject", 0200, jack_kctl->jack_debugfs_root, jack_kctl, in snd_jack_debugfs_add_inject_node()
374 debugfs_create_file("kctl_id", 0444, jack_kctl->jack_debugfs_root, jack_kctl, in snd_jack_debugfs_add_inject_node()
377 debugfs_create_file("mask_bits", 0444, jack_kctl->jack_debugfs_root, jack_kctl, in snd_jack_debugfs_add_inject_node()
380 debugfs_create_file("status", 0444, jack_kctl->jack_debugfs_root, jack_kctl, in snd_jack_debugfs_add_inject_node()
384 debugfs_create_file("type", 0444, jack_kctl->jack_debugfs_root, jack_kctl, in snd_jack_debugfs_add_inject_node()
394 list_for_each_entry(jack_kctl, &jack->kctl_list, list) { in snd_jack_remove_debugfs()
395 debugfs_remove(jack_kctl->jack_debugfs_root); in snd_jack_remove_debugfs()
396 jack_kctl->jack_debugfs_root = NULL; in snd_jack_remove_debugfs()
415 jack_kctl = kctl->private_data; in snd_jack_kctl_private_free()
417 list_del(&jack_kctl->list); in snd_jack_kctl_private_free()
424 jack_kctl->jack = jack; in snd_jack_kctl_add()
425 list_add_tail(&jack_kctl->list, &jack->kctl_list); in snd_jack_kctl_add()
448 jack_kctl->kctl = kctl; in snd_jack_kctl_new()
449 jack_kctl->mask_bits = mask; in snd_jack_kctl_new()
451 kctl->private_data = jack_kctl; in snd_jack_kctl_new()
452 kctl->private_free = snd_jack_kctl_private_free; in snd_jack_kctl_new()
461 * snd_jack_add_new_kctl - Create a new snd_jack_kctl and add it to jack
469 * Return: Zero if successful, or a negative error code on failure.
475 jack_kctl = snd_jack_kctl_new(jack->card, name, mask); in snd_jack_add_new_kctl()
477 return -ENOMEM; in snd_jack_add_new_kctl()
485 * snd_jack_new - Create a new jack
496 * Return: Zero if successful, or a negative error code on failure.
497 * On success @jjack will be initialised.
516 return -ENOMEM; in snd_jack_new()
521 return -ENOMEM; in snd_jack_new()
523 jack->id = kstrdup(id, GFP_KERNEL); in snd_jack_new()
524 if (jack->id == NULL) { in snd_jack_new()
526 return -ENOMEM; in snd_jack_new()
530 mutex_init(&jack->input_dev_lock); in snd_jack_new()
536 jack->input_dev = input_allocate_device(); in snd_jack_new()
537 if (jack->input_dev == NULL) { in snd_jack_new()
538 err = -ENOMEM; in snd_jack_new()
542 jack->input_dev->phys = "ALSA"; in snd_jack_new()
544 jack->type = type; in snd_jack_new()
548 input_set_capability(jack->input_dev, EV_SW, in snd_jack_new()
558 jack->card = card; in snd_jack_new()
559 INIT_LIST_HEAD(&jack->kctl_list); in snd_jack_new()
570 input_free_device(jack->input_dev); in snd_jack_new()
572 kfree(jack->id); in snd_jack_new()
580 * snd_jack_set_key - Set a key mapping on a jack
596 * access the input device directly - devices with complex input
602 * Return: Zero if successful, or a negative error code on failure.
607 int key = fls(SND_JACK_BTN_0) - fls(type); in snd_jack_set_key()
609 WARN_ON(jack->registered); in snd_jack_set_key()
611 if (!keytype || key >= ARRAY_SIZE(jack->key)) in snd_jack_set_key()
612 return -EINVAL; in snd_jack_set_key()
614 jack->type |= type; in snd_jack_set_key()
615 jack->key[key] = keytype; in snd_jack_set_key()
622 * snd_jack_report - Report the current status of a jack
641 jack->hw_status_cache = status; in snd_jack_report()
643 list_for_each_entry(jack_kctl, &jack->kctl_list, list) in snd_jack_report()
644 if (jack_kctl->sw_inject_enable) in snd_jack_report()
645 mask_bits |= jack_kctl->mask_bits; in snd_jack_report()
647 snd_kctl_jack_report(jack->card, jack_kctl->kctl, in snd_jack_report()
648 status & jack_kctl->mask_bits); in snd_jack_report()
651 idev = input_get_device(jack->input_dev); in snd_jack_report()
655 for (i = 0; i < ARRAY_SIZE(jack->key); i++) { in snd_jack_report()
658 if (jack->type & testbit) in snd_jack_report()
659 input_report_key(idev, jack->key[i], in snd_jack_report()
666 if (jack->type & testbit) in snd_jack_report()