2009-05-14 08:05:58 +02:00
/**
* Copyright ( C ) 2008 , Creative Technology Ltd . All Rights Reserved .
*
* This source file is released under GPL v2 license ( no other versions ) .
* See the COPYING file included in the main directory of this source
* distribution for the license terms and conditions .
*
* @ File ctamixer . h
*
* @ Brief
* This file contains the definition of the Audio Mixer
* resource management object .
*
* @ Author Liu Chun
* @ Date May 21 2008
*
*/
# ifndef CTAMIXER_H
# define CTAMIXER_H
# include "ctresource.h"
# include <linux/spinlock.h>
2014-09-29 14:33:23 +05:30
# include <sound/core.h>
2009-05-14 08:05:58 +02:00
/* Define the descriptor of a summation node resource */
struct sum {
struct rsc rsc ; /* Basic resource info */
unsigned char idx [ 8 ] ;
} ;
/* Define sum resource request description info */
struct sum_desc {
unsigned int msr ;
} ;
struct sum_mgr {
struct rsc_mgr mgr ; /* Basic resource manager info */
2014-09-29 14:33:23 +05:30
struct snd_card * card ; /* pointer to this card */
2009-05-14 08:05:58 +02:00
spinlock_t mgr_lock ;
/* request one sum resource */
int ( * get_sum ) ( struct sum_mgr * mgr ,
const struct sum_desc * desc , struct sum * * rsum ) ;
/* return one sum resource */
int ( * put_sum ) ( struct sum_mgr * mgr , struct sum * sum ) ;
} ;
/* Constructor and destructor of daio resource manager */
2014-09-29 14:33:21 +05:30
int sum_mgr_create ( struct hw * hw , struct sum_mgr * * rsum_mgr ) ;
2009-05-14 08:05:58 +02:00
int sum_mgr_destroy ( struct sum_mgr * sum_mgr ) ;
/* Define the descriptor of a amixer resource */
struct amixer_rsc_ops ;
struct amixer {
struct rsc rsc ; /* Basic resource info */
unsigned char idx [ 8 ] ;
struct rsc * input ; /* pointer to a resource acting as source */
struct sum * sum ; /* Put amixer output to this summation node */
2015-11-08 23:40:41 +01:00
const struct amixer_rsc_ops * ops ; /* AMixer specific operations */
2009-05-14 08:05:58 +02:00
} ;
struct amixer_rsc_ops {
int ( * set_input ) ( struct amixer * amixer , struct rsc * rsc ) ;
int ( * set_scale ) ( struct amixer * amixer , unsigned int scale ) ;
int ( * set_invalid_squash ) ( struct amixer * amixer , unsigned int iv ) ;
int ( * set_sum ) ( struct amixer * amixer , struct sum * sum ) ;
int ( * commit_write ) ( struct amixer * amixer ) ;
/* Only for interleaved recording */
int ( * commit_raw_write ) ( struct amixer * amixer ) ;
int ( * setup ) ( struct amixer * amixer , struct rsc * input ,
unsigned int scale , struct sum * sum ) ;
int ( * get_scale ) ( struct amixer * amixer ) ;
} ;
/* Define amixer resource request description info */
struct amixer_desc {
unsigned int msr ;
} ;
struct amixer_mgr {
struct rsc_mgr mgr ; /* Basic resource manager info */
2014-09-29 14:33:23 +05:30
struct snd_card * card ; /* pointer to this card */
2009-05-14 08:05:58 +02:00
spinlock_t mgr_lock ;
/* request one amixer resource */
int ( * get_amixer ) ( struct amixer_mgr * mgr ,
const struct amixer_desc * desc ,
struct amixer * * ramixer ) ;
/* return one amixer resource */
int ( * put_amixer ) ( struct amixer_mgr * mgr , struct amixer * amixer ) ;
} ;
/* Constructor and destructor of amixer resource manager */
2014-09-29 14:33:21 +05:30
int amixer_mgr_create ( struct hw * hw , struct amixer_mgr * * ramixer_mgr ) ;
2009-05-14 08:05:58 +02:00
int amixer_mgr_destroy ( struct amixer_mgr * amixer_mgr ) ;
# endif /* CTAMIXER_H */