Lines Matching full:mixer

3  *  OSS emulation layer for the mixer interface
23 MODULE_DESCRIPTION("Mixer OSS emulation for ALSA.");
57 fmixer->mixer = card->mixer_oss; in snd_mixer_oss_open()
86 struct snd_mixer_oss *mixer = fmixer->mixer; in snd_mixer_oss_info() local
90 strscpy(info.id, mixer && mixer->id[0] ? mixer->id : card->driver, sizeof(info.id)); in snd_mixer_oss_info()
91 strscpy(info.name, mixer && mixer->name[0] ? mixer->name : card->mixername, sizeof(info.name)); in snd_mixer_oss_info()
102 struct snd_mixer_oss *mixer = fmixer->mixer; in snd_mixer_oss_info_obsolete() local
106 strscpy(info.id, mixer && mixer->id[0] ? mixer->id : card->driver, sizeof(info.id)); in snd_mixer_oss_info_obsolete()
107 strscpy(info.name, mixer && mixer->name[0] ? mixer->name : card->mixername, sizeof(info.name)); in snd_mixer_oss_info_obsolete()
115 struct snd_mixer_oss *mixer = fmixer->mixer; in snd_mixer_oss_caps() local
118 if (mixer == NULL) in snd_mixer_oss_caps()
120 if (mixer->get_recsrc && mixer->put_recsrc) in snd_mixer_oss_caps()
127 struct snd_mixer_oss *mixer = fmixer->mixer; in snd_mixer_oss_devmask() local
131 if (mixer == NULL) in snd_mixer_oss_devmask()
133 guard(mutex)(&mixer->reg_mutex); in snd_mixer_oss_devmask()
135 pslot = &mixer->slots[chn]; in snd_mixer_oss_devmask()
144 struct snd_mixer_oss *mixer = fmixer->mixer; in snd_mixer_oss_stereodevs() local
148 if (mixer == NULL) in snd_mixer_oss_stereodevs()
150 guard(mutex)(&mixer->reg_mutex); in snd_mixer_oss_stereodevs()
152 pslot = &mixer->slots[chn]; in snd_mixer_oss_stereodevs()
161 struct snd_mixer_oss *mixer = fmixer->mixer; in snd_mixer_oss_recmask() local
164 if (mixer == NULL) in snd_mixer_oss_recmask()
166 guard(mutex)(&mixer->reg_mutex); in snd_mixer_oss_recmask()
167 if (mixer->put_recsrc && mixer->get_recsrc) { /* exclusive */ in snd_mixer_oss_recmask()
168 result = mixer->mask_recsrc; in snd_mixer_oss_recmask()
173 pslot = &mixer->slots[chn]; in snd_mixer_oss_recmask()
183 struct snd_mixer_oss *mixer = fmixer->mixer; in snd_mixer_oss_get_recsrc() local
186 if (mixer == NULL) in snd_mixer_oss_get_recsrc()
188 guard(mutex)(&mixer->reg_mutex); in snd_mixer_oss_get_recsrc()
189 if (mixer->put_recsrc && mixer->get_recsrc) { /* exclusive */ in snd_mixer_oss_get_recsrc()
191 result = mixer->get_recsrc(fmixer, &index); in snd_mixer_oss_get_recsrc()
199 pslot = &mixer->slots[chn]; in snd_mixer_oss_get_recsrc()
208 mixer->oss_recsrc = result; in snd_mixer_oss_get_recsrc()
214 struct snd_mixer_oss *mixer = fmixer->mixer; in snd_mixer_oss_set_recsrc() local
220 if (mixer == NULL) in snd_mixer_oss_set_recsrc()
222 guard(mutex)(&mixer->reg_mutex); in snd_mixer_oss_set_recsrc()
223 if (mixer->get_recsrc && mixer->put_recsrc) { /* exclusive input */ in snd_mixer_oss_set_recsrc()
224 if (recsrc & ~mixer->oss_recsrc) in snd_mixer_oss_set_recsrc()
225 recsrc &= ~mixer->oss_recsrc; in snd_mixer_oss_set_recsrc()
226 mixer->put_recsrc(fmixer, ffz(~recsrc)); in snd_mixer_oss_set_recsrc()
227 mixer->get_recsrc(fmixer, &index); in snd_mixer_oss_set_recsrc()
231 pslot = &mixer->slots[chn]; in snd_mixer_oss_set_recsrc()
239 pslot = &mixer->slots[chn]; in snd_mixer_oss_set_recsrc()
253 struct snd_mixer_oss *mixer = fmixer->mixer; in snd_mixer_oss_get_volume() local
257 if (mixer == NULL || slot > 30) in snd_mixer_oss_get_volume()
259 guard(mutex)(&mixer->reg_mutex); in snd_mixer_oss_get_volume()
260 pslot = &mixer->slots[slot]; in snd_mixer_oss_get_volume()
282 struct snd_mixer_oss *mixer = fmixer->mixer; in snd_mixer_oss_set_volume() local
286 if (mixer == NULL || slot > 30) in snd_mixer_oss_set_volume()
288 guard(mutex)(&mixer->reg_mutex); in snd_mixer_oss_set_volume()
289 pslot = &mixer->slots[slot]; in snd_mixer_oss_set_volume()
389 fmixer.mixer = card->mixer_oss; in snd_mixer_oss_ioctl_card()
449 struct snd_mixer_oss *mixer = card->mixer_oss;
450 if (mixer)
451 mixer->mask_recsrc |= 1 << slot;
456 struct snd_mixer_oss *mixer = card->mixer_oss;
457 if (mixer && (mixer->mask_recsrc & (1 << slot)))
503 static struct snd_kcontrol *snd_mixer_oss_test_id(struct snd_mixer_oss *mixer, const char *name, in… in snd_mixer_oss_test_id() argument
505 struct snd_card *card = mixer->card; in snd_mixer_oss_test_id()
782 struct snd_mixer_oss *mixer = fmixer->mixer; in snd_mixer_oss_get_recsrc2() local
795 kctl = snd_mixer_oss_test_id(mixer, "Capture Source", 0); in snd_mixer_oss_get_recsrc2()
805 if (!(mixer->mask_recsrc & (1 << idx))) in snd_mixer_oss_get_recsrc2()
807 pslot = &mixer->slots[idx]; in snd_mixer_oss_get_recsrc2()
824 struct snd_mixer_oss *mixer = fmixer->mixer; in snd_mixer_oss_put_recsrc2() local
838 kctl = snd_mixer_oss_test_id(mixer, "Capture Source", 0); in snd_mixer_oss_put_recsrc2()
845 if (!(mixer->mask_recsrc & (1 << idx))) in snd_mixer_oss_put_recsrc2()
847 pslot = &mixer->slots[idx]; in snd_mixer_oss_put_recsrc2()
873 static int snd_mixer_oss_build_test(struct snd_mixer_oss *mixer, struct slot *slot, const char *nam… in snd_mixer_oss_build_test() argument
877 struct snd_card *card = mixer->card; in snd_mixer_oss_build_test()
881 kcontrol = snd_mixer_oss_test_id(mixer, name, index); in snd_mixer_oss_build_test()
921 static int snd_mixer_oss_build_test_all(struct snd_mixer_oss *mixer, in snd_mixer_oss_build_test_all() argument
928 err = snd_mixer_oss_build_test(mixer, slot, ptr->name, ptr->index, in snd_mixer_oss_build_test_all()
933 err = snd_mixer_oss_build_test(mixer, slot, str, ptr->index, in snd_mixer_oss_build_test_all()
938 err = snd_mixer_oss_build_test(mixer, slot, str, ptr->index, in snd_mixer_oss_build_test_all()
943 err = snd_mixer_oss_build_test(mixer, slot, str, ptr->index, in snd_mixer_oss_build_test_all()
948 err = snd_mixer_oss_build_test(mixer, slot, str, ptr->index, in snd_mixer_oss_build_test_all()
953 err = snd_mixer_oss_build_test(mixer, slot, str, ptr->index, in snd_mixer_oss_build_test_all()
958 err = snd_mixer_oss_build_test(mixer, slot, str, ptr->index, in snd_mixer_oss_build_test_all()
963 err = snd_mixer_oss_build_test(mixer, slot, str, ptr->index, in snd_mixer_oss_build_test_all()
968 err = snd_mixer_oss_build_test(mixer, slot, str, ptr->index, in snd_mixer_oss_build_test_all()
973 err = snd_mixer_oss_build_test(mixer, slot, str, ptr->index, in snd_mixer_oss_build_test_all()
982 * build an OSS mixer element.
986 static int snd_mixer_oss_build_input(struct snd_mixer_oss *mixer, in snd_mixer_oss_build_input() argument
997 if (mixer->slots[ptr->oss_id].get_volume && ! replace_old) in snd_mixer_oss_build_input()
1002 if (snd_mixer_oss_build_test_all(mixer, ptr, &slot)) in snd_mixer_oss_build_input()
1004 guard(rwsem_read)(&mixer->card->controls_rwsem); in snd_mixer_oss_build_input()
1007 kctl = snd_mixer_oss_test_id(mixer, "Capture Source", 0); in snd_mixer_oss_build_input()
1045 rslot = &mixer->slots[ptr->oss_id]; in snd_mixer_oss_build_input()
1058 mixer->mask_recsrc |= 1 << ptr->oss_id; in snd_mixer_oss_build_input()
1106 struct snd_mixer_oss *mixer = entry->private_data; in snd_mixer_oss_proc_read() local
1109 guard(mutex)(&mixer->reg_mutex); in snd_mixer_oss_proc_read()
1115 p = (struct slot *)mixer->slots[i].private_data; in snd_mixer_oss_proc_read()
1129 struct snd_mixer_oss *mixer = entry->private_data; in snd_mixer_oss_proc_write() local
1150 scoped_guard(mutex, &mixer->reg_mutex) in snd_mixer_oss_proc_write()
1151 mixer_slot_clear(&mixer->slots[ch]); in snd_mixer_oss_proc_write()
1160 scoped_guard(mutex, &mixer->reg_mutex) { in snd_mixer_oss_proc_write()
1161 slot = (struct slot *)mixer->slots[ch].private_data; in snd_mixer_oss_proc_write()
1176 if (snd_mixer_oss_build_input(mixer, tbl, 1, 1) <= 0) { in snd_mixer_oss_proc_write()
1184 static void snd_mixer_oss_proc_init(struct snd_mixer_oss *mixer) in snd_mixer_oss_proc_init() argument
1188 entry = snd_info_create_card_entry(mixer->card, "oss_mixer", in snd_mixer_oss_proc_init()
1189 mixer->card->proc_root); in snd_mixer_oss_proc_init()
1196 entry->private_data = mixer; in snd_mixer_oss_proc_init()
1201 mixer->proc_entry = entry; in snd_mixer_oss_proc_init()
1204 static void snd_mixer_oss_proc_done(struct snd_mixer_oss *mixer) in snd_mixer_oss_proc_done() argument
1206 snd_info_free_entry(mixer->proc_entry); in snd_mixer_oss_proc_done()
1207 mixer->proc_entry = NULL; in snd_mixer_oss_proc_done()
1214 static void snd_mixer_oss_build(struct snd_mixer_oss *mixer) in snd_mixer_oss_build() argument
1259 snd_mixer_oss_build_input(mixer, &table[idx], 0, 0); in snd_mixer_oss_build()
1260 if (mixer->mask_recsrc) { in snd_mixer_oss_build()
1261 mixer->get_recsrc = snd_mixer_oss_get_recsrc2; in snd_mixer_oss_build()
1262 mixer->put_recsrc = snd_mixer_oss_put_recsrc2; in snd_mixer_oss_build()
1272 struct snd_mixer_oss *mixer = private; in snd_mixer_oss_free1() local
1276 if (!mixer) in snd_mixer_oss_free1()
1278 card = mixer->card; in snd_mixer_oss_free1()
1279 if (snd_BUG_ON(mixer != card->mixer_oss)) in snd_mixer_oss_free1()
1283 struct snd_mixer_oss_slot *chn = &mixer->slots[idx]; in snd_mixer_oss_free1()
1287 kfree(mixer); in snd_mixer_oss_free1()
1293 struct snd_mixer_oss *mixer; in snd_mixer_oss_notify_handler() local
1298 mixer = kcalloc(2, sizeof(*mixer), GFP_KERNEL); in snd_mixer_oss_notify_handler()
1299 if (mixer == NULL) in snd_mixer_oss_notify_handler()
1301 mutex_init(&mixer->reg_mutex); in snd_mixer_oss_notify_handler()
1307 "unable to register OSS mixer device %i:%i\n", in snd_mixer_oss_notify_handler()
1309 kfree(mixer); in snd_mixer_oss_notify_handler()
1312 mixer->oss_dev_alloc = 1; in snd_mixer_oss_notify_handler()
1313 mixer->card = card; in snd_mixer_oss_notify_handler()
1315 strscpy(mixer->name, card->mixername, sizeof(mixer->name)); in snd_mixer_oss_notify_handler()
1317 snprintf(mixer->name, sizeof(mixer->name), in snd_mixer_oss_notify_handler()
1318 "mixer%i", card->number); in snd_mixer_oss_notify_handler()
1322 mixer->name); in snd_mixer_oss_notify_handler()
1325 mixer->slots[idx].number = idx; in snd_mixer_oss_notify_handler()
1326 card->mixer_oss = mixer; in snd_mixer_oss_notify_handler()
1327 snd_mixer_oss_build(mixer); in snd_mixer_oss_notify_handler()
1328 snd_mixer_oss_proc_init(mixer); in snd_mixer_oss_notify_handler()
1330 mixer = card->mixer_oss; in snd_mixer_oss_notify_handler()
1331 if (mixer == NULL) in snd_mixer_oss_notify_handler()
1333 if (mixer->oss_dev_alloc) { in snd_mixer_oss_notify_handler()
1335 snd_oss_info_unregister(SNDRV_OSS_INFO_DEV_MIXERS, mixer->card->number); in snd_mixer_oss_notify_handler()
1337 snd_unregister_oss_device(SNDRV_OSS_DEVICE_TYPE_MIXER, mixer->card, 0); in snd_mixer_oss_notify_handler()
1338 mixer->oss_dev_alloc = 0; in snd_mixer_oss_notify_handler()
1342 snd_mixer_oss_proc_done(mixer); in snd_mixer_oss_notify_handler()
1343 return snd_mixer_oss_free1(mixer); in snd_mixer_oss_notify_handler()