Home | History | Annotate | Download | only in simple
      1 /*
      2  *  Mixer Interface - AC97 simple abstact module
      3  *  Copyright (c) 2005 by Jaroslav Kysela <perex (at) perex.cz>
      4  *
      5  *
      6  *   This library is free software; you can redistribute it and/or modify
      7  *   it under the terms of the GNU Lesser General Public License as
      8  *   published by the Free Software Foundation; either version 2.1 of
      9  *   the License, or (at your option) any later version.
     10  *
     11  *   This program is distributed in the hope that it will be useful,
     12  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
     13  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     14  *   GNU Lesser General Public License for more details.
     15  *
     16  *   You should have received a copy of the GNU Lesser General Public
     17  *   License along with this library; if not, write to the Free Software
     18  *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
     19  *
     20  */
     21 
     22 #include <stdio.h>
     23 #include <stdlib.h>
     24 #include <unistd.h>
     25 #include <string.h>
     26 #include <fcntl.h>
     27 #include <sys/ioctl.h>
     28 #include <math.h>
     29 #include "asoundlib.h"
     30 #include "mixer_abst.h"
     31 #include "sbase.h"
     32 
     33 static struct sm_elem_ops simple_ac97_ops;
     34 
     35 struct melem_sids sids[] = {
     36 	{
     37 		.sid	= SID_MASTER,
     38 		.sname	= "Master",
     39 		.sindex	= 0,
     40 		.weight = 1,
     41 		.chanmap = { 3, 0 },
     42 		.sops = &simple_ac97_ops,
     43 	}
     44 };
     45 
     46 #define SELECTORS (sizeof(selectors)/sizeof(selectors[0]))
     47 
     48 struct helem_selector selectors[] = {
     49 	{
     50 		.iface =	SND_CTL_ELEM_IFACE_MIXER,
     51 		.name =		"Master Playback Volume",
     52 		.index = 	0,
     53 		.sid =		SID_MASTER,
     54 		.purpose =	PURPOSE_VOLUME,
     55 		.caps = 	SM_CAP_PVOLUME,
     56 	},
     57 	{
     58 		.iface =	SND_CTL_ELEM_IFACE_MIXER,
     59 		.name =		"Master Playback Switch",
     60 		.index = 	0,
     61 		.sid =		SID_MASTER,
     62 		.purpose =	PURPOSE_SWITCH,
     63 		.caps = 	SM_CAP_PSWITCH,
     64 	}
     65 };
     66 
     67 int alsa_mixer_simple_event(snd_mixer_class_t *class, unsigned int mask,
     68 			    snd_hctl_elem_t *helem, snd_mixer_elem_t *melem)
     69 {
     70 	struct bclass_private *priv = snd_mixer_sbasic_get_private(class);
     71 	return priv->ops.event(class, mask, helem, melem);
     72 }
     73 
     74 int alsa_mixer_simple_init(snd_mixer_class_t *class)
     75 {
     76 	struct bclass_base_ops *ops;
     77 	int err;
     78 
     79 	err = mixer_simple_basic_dlopen(class, &ops);
     80 	if (err < 0)
     81 		return 0;
     82 	err = ops->selreg(class, selectors, SELECTORS);
     83 	if (err < 0)
     84 		return err;
     85 	err = ops->sidreg(class, sids, SELECTORS);
     86 	if (err < 0)
     87 		return err;
     88 	return 0;
     89 }
     90