Lines Matching refs:master

3  * Virtual master and follower controls
24 * link master - this contains a list of follower controls that are
28 * The master control is so far only mono volume/switch for simplicity.
34 int val; /* the master value */
44 * master control. A follower may have either one or two channels.
49 struct link_master *master;
108 /* initialize master volume */
109 static int master_init(struct link_master *master)
113 if (master->info.count)
116 list_for_each_entry(follower, &master->followers, list) {
120 master->info = follower->info;
121 master->info.count = 1; /* always mono */
123 master->val = master->info.max_val;
124 if (master->hook)
125 master->hook(master->hook_private_data, master->val);
149 err = master_init(follower->master);
157 !!follower->master->val;
161 /* max master volume is supposed to be 0 dB */
163 vol += follower->master->val - follower->master->info.max_val;
229 if (follower->master)
235 * Add a follower control to the group with the given master control
244 * - master can only attenuate the volume, no gain
246 int _snd_ctl_add_follower(struct snd_kcontrol *master,
250 struct link_master *master_link = snd_kcontrol_chip(master);
260 srec->master = master_link;
280 * @master: the target vmaster kcontrol object
286 int snd_ctl_add_followers(struct snd_card *card, struct snd_kcontrol *master,
295 err = snd_ctl_add_follower(master, follower);
306 * ctl callbacks for master controls
311 struct link_master *master = snd_kcontrol_chip(kcontrol);
314 ret = master_init(master);
317 uinfo->type = master->info.type;
318 uinfo->count = master->info.count;
319 uinfo->value.integer.min = master->info.min_val;
320 uinfo->value.integer.max = master->info.max_val;
327 struct link_master *master = snd_kcontrol_chip(kcontrol);
328 int err = master_init(master);
331 ucontrol->value.integer.value[0] = master->val;
335 static int sync_followers(struct link_master *master, int old_val, int new_val)
343 list_for_each_entry(follower, &master->followers, list) {
344 master->val = old_val;
347 master->val = new_val;
356 struct link_master *master = snd_kcontrol_chip(kcontrol);
360 err = master_init(master);
364 old_val = master->val;
369 err = sync_followers(master, old_val, new_val);
372 if (master->hook && !first_init)
373 master->hook(master->hook_private_data, master->val);
379 struct link_master *master = snd_kcontrol_chip(kcontrol);
383 list_for_each_entry_safe(follower, n, &master->followers, list) {
392 kfree(master);
397 * snd_ctl_make_virtual_master - Create a virtual master control
401 * Creates a virtual master control with the given name string.
407 * for dB scale of the master control. It should be a single element
416 struct link_master *master;
425 master = kzalloc(sizeof(*master), GFP_KERNEL);
426 if (!master)
428 INIT_LIST_HEAD(&master->followers);
430 kctl = snd_ctl_new1(&knew, master);
432 kfree(master);
448 memcpy(master->tlv, tlv, sizeof(master->tlv));
449 kctl->tlv.p = master->tlv;
472 struct link_master *master = snd_kcontrol_chip(kcontrol);
473 master->hook = hook;
474 master->hook_private_data = private_data;
490 struct link_master *master;
495 master = snd_kcontrol_chip(kcontrol);
497 int err = master_init(master);
501 err = sync_followers(master, master->val, master->val);
506 if (master->hook && !first_init)
507 master->hook(master->hook_private_data, master->val);
527 struct link_master *master;
531 master = snd_kcontrol_chip(kctl);
532 err = master_init(master);
535 list_for_each_entry(follower, &master->followers, list) {