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;
114 /* initialize master volume */
115 static int master_init(struct link_master *master)
119 if (master->info.count)
122 list_for_each_entry(follower, &master->followers, list) {
126 master->info = follower->info;
127 master->info.count = 1; /* always mono */
129 master->val = master->info.max_val;
130 if (master->hook)
131 master->hook(master->hook_private_data, master->val);
155 err = master_init(follower->master);
163 !!follower->master->val;
167 /* max master volume is supposed to be 0 dB */
169 vol += follower->master->val - follower->master->info.max_val;
235 if (follower->master)
241 * Add a follower control to the group with the given master control
250 * - master can only attenuate the volume, no gain
252 int _snd_ctl_add_follower(struct snd_kcontrol *master,
256 struct link_master *master_link = snd_kcontrol_chip(master);
266 srec->master = master_link;
286 * @master: the target vmaster kcontrol object
292 int snd_ctl_add_followers(struct snd_card *card, struct snd_kcontrol *master,
301 err = snd_ctl_add_follower(master, follower);
312 * ctl callbacks for master controls
317 struct link_master *master = snd_kcontrol_chip(kcontrol);
320 ret = master_init(master);
323 uinfo->type = master->info.type;
324 uinfo->count = master->info.count;
325 uinfo->value.integer.min = master->info.min_val;
326 uinfo->value.integer.max = master->info.max_val;
333 struct link_master *master = snd_kcontrol_chip(kcontrol);
334 int err = master_init(master);
337 ucontrol->value.integer.value[0] = master->val;
341 static int sync_followers(struct link_master *master, int old_val, int new_val)
349 list_for_each_entry(follower, &master->followers, list) {
350 master->val = old_val;
353 master->val = new_val;
363 struct link_master *master = snd_kcontrol_chip(kcontrol);
367 err = master_init(master);
371 old_val = master->val;
376 err = sync_followers(master, old_val, new_val);
379 if (master->hook && !first_init)
380 master->hook(master->hook_private_data, master->val);
386 struct link_master *master = snd_kcontrol_chip(kcontrol);
390 list_for_each_entry_safe(follower, n, &master->followers, list) {
399 kfree(master);
404 * snd_ctl_make_virtual_master - Create a virtual master control
408 * Creates a virtual master control with the given name string.
414 * for dB scale of the master control. It should be a single element
423 struct link_master *master;
432 master = kzalloc(sizeof(*master), GFP_KERNEL);
433 if (!master)
435 INIT_LIST_HEAD(&master->followers);
437 kctl = snd_ctl_new1(&knew, master);
439 kfree(master);
455 memcpy(master->tlv, tlv, sizeof(master->tlv));
456 kctl->tlv.p = master->tlv;
479 struct link_master *master = snd_kcontrol_chip(kcontrol);
480 master->hook = hook;
481 master->hook_private_data = private_data;
497 struct link_master *master;
502 master = snd_kcontrol_chip(kcontrol);
504 int err = master_init(master);
508 err = sync_followers(master, master->val, master->val);
513 if (master->hook && !first_init)
514 master->hook(master->hook_private_data, master->val);
534 struct link_master *master;
538 master = snd_kcontrol_chip(kctl);
539 err = master_init(master);
542 list_for_each_entry(follower, &master->followers, list) {