Lines Matching refs:slave
54 struct snd_kcontrol slave; /* the copy of original control entry */ member
57 static int slave_update(struct link_slave *slave) in slave_update() argument
65 uctl->id = slave->slave.id; in slave_update()
66 err = slave->slave.get(&slave->slave, uctl); in slave_update()
69 for (ch = 0; ch < slave->info.count; ch++) in slave_update()
70 slave->vals[ch] = uctl->value.integer.value[ch]; in slave_update()
77 static int slave_init(struct link_slave *slave) in slave_init() argument
82 if (slave->info.count) { in slave_init()
84 if (slave->flags & SND_CTL_SLAVE_NEED_UPDATE) in slave_init()
85 return slave_update(slave); in slave_init()
92 uinfo->id = slave->slave.id; in slave_init()
93 err = slave->slave.info(&slave->slave, uinfo); in slave_init()
98 slave->info.type = uinfo->type; in slave_init()
99 slave->info.count = uinfo->count; in slave_init()
100 if (slave->info.count > 2 || in slave_init()
101 (slave->info.type != SNDRV_CTL_ELEM_TYPE_INTEGER && in slave_init()
102 slave->info.type != SNDRV_CTL_ELEM_TYPE_BOOLEAN)) { in slave_init()
107 slave->info.min_val = uinfo->value.integer.min; in slave_init()
108 slave->info.max_val = uinfo->value.integer.max; in slave_init()
111 return slave_update(slave); in slave_init()
117 struct link_slave *slave; in master_init() local
122 list_for_each_entry(slave, &master->slaves, list) { in master_init()
123 int err = slave_init(slave); in master_init()
126 master->info = slave->info; in master_init()
137 static int slave_get_val(struct link_slave *slave, in slave_get_val() argument
142 err = slave_init(slave); in slave_get_val()
145 for (ch = 0; ch < slave->info.count; ch++) in slave_get_val()
146 ucontrol->value.integer.value[ch] = slave->vals[ch]; in slave_get_val()
150 static int slave_put_val(struct link_slave *slave, in slave_put_val() argument
155 err = master_init(slave->master); in slave_put_val()
159 switch (slave->info.type) { in slave_put_val()
161 for (ch = 0; ch < slave->info.count; ch++) in slave_put_val()
163 !!slave->master->val; in slave_put_val()
166 for (ch = 0; ch < slave->info.count; ch++) { in slave_put_val()
169 vol += slave->master->val - slave->master->info.max_val; in slave_put_val()
170 if (vol < slave->info.min_val) in slave_put_val()
171 vol = slave->info.min_val; in slave_put_val()
172 else if (vol > slave->info.max_val) in slave_put_val()
173 vol = slave->info.max_val; in slave_put_val()
178 return slave->slave.put(&slave->slave, ucontrol); in slave_put_val()
187 struct link_slave *slave = snd_kcontrol_chip(kcontrol); in slave_info() local
188 return slave->slave.info(&slave->slave, uinfo); in slave_info()
194 struct link_slave *slave = snd_kcontrol_chip(kcontrol); in slave_get() local
195 return slave_get_val(slave, ucontrol); in slave_get()
201 struct link_slave *slave = snd_kcontrol_chip(kcontrol); in slave_put() local
204 err = slave_init(slave); in slave_put()
207 for (ch = 0; ch < slave->info.count; ch++) { in slave_put()
208 if (slave->vals[ch] != ucontrol->value.integer.value[ch]) { in slave_put()
210 slave->vals[ch] = ucontrol->value.integer.value[ch]; in slave_put()
215 err = slave_put_val(slave, ucontrol); in slave_put()
225 struct link_slave *slave = snd_kcontrol_chip(kcontrol); in slave_tlv_cmd() local
227 return slave->slave.tlv.c(&slave->slave, op_flag, size, tlv); in slave_tlv_cmd()
232 struct link_slave *slave = snd_kcontrol_chip(kcontrol); in slave_free() local
233 if (slave->slave.private_free) in slave_free()
234 slave->slave.private_free(&slave->slave); in slave_free()
235 if (slave->master) in slave_free()
236 list_del(&slave->list); in slave_free()
237 kfree(slave); in slave_free()
252 int _snd_ctl_add_slave(struct snd_kcontrol *master, struct snd_kcontrol *slave, in _snd_ctl_add_slave() argument
258 srec = kzalloc(struct_size(srec, slave.vd, slave->count), in _snd_ctl_add_slave()
262 srec->kctl = slave; in _snd_ctl_add_slave()
263 srec->slave = *slave; in _snd_ctl_add_slave()
264 memcpy(srec->slave.vd, slave->vd, slave->count * sizeof(*slave->vd)); in _snd_ctl_add_slave()
269 slave->info = slave_info; in _snd_ctl_add_slave()
270 slave->get = slave_get; in _snd_ctl_add_slave()
271 slave->put = slave_put; in _snd_ctl_add_slave()
272 if (slave->vd[0].access & SNDRV_CTL_ELEM_ACCESS_TLV_CALLBACK) in _snd_ctl_add_slave()
273 slave->tlv.c = slave_tlv_cmd; in _snd_ctl_add_slave()
274 slave->private_data = srec; in _snd_ctl_add_slave()
275 slave->private_free = slave_free; in _snd_ctl_add_slave()
314 struct link_slave *slave; in sync_slaves() local
320 list_for_each_entry(slave, &master->slaves, list) { in sync_slaves()
322 uval->id = slave->slave.id; in sync_slaves()
323 slave_get_val(slave, uval); in sync_slaves()
325 slave_put_val(slave, uval); in sync_slaves()
358 struct link_slave *slave, *n; in master_free() local
361 list_for_each_entry_safe(slave, n, &master->slaves, list) { in master_free()
362 struct snd_kcontrol *sctl = slave->kctl; in master_free()
364 memcpy(sctl, &slave->slave, sizeof(*sctl)); in master_free()
365 memcpy(sctl->vd, slave->slave.vd, in master_free()
368 kfree(slave); in master_free()
500 struct snd_kcontrol *slave, in snd_ctl_apply_vmaster_slaves() argument
505 struct link_slave *slave; in snd_ctl_apply_vmaster_slaves() local
512 list_for_each_entry(slave, &master->slaves, list) { in snd_ctl_apply_vmaster_slaves()
513 err = func(slave->kctl, &slave->slave, arg); in snd_ctl_apply_vmaster_slaves()