97 lines
		
	
	
	
		
			2.7 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			97 lines
		
	
	
	
		
			2.7 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
|   | /**
 | ||
|  |  * 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>
 | ||
|  | 
 | ||
|  | /* 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 */ | ||
|  | 	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 */ | ||
|  | int sum_mgr_create(void *hw, struct sum_mgr **rsum_mgr); | ||
|  | 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 */ | ||
|  | 	struct amixer_rsc_ops *ops;	/* AMixer specific operations */ | ||
|  | }; | ||
|  | 
 | ||
|  | 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 */ | ||
|  | 	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 */ | ||
|  | int amixer_mgr_create(void *hw, struct amixer_mgr **ramixer_mgr); | ||
|  | int amixer_mgr_destroy(struct amixer_mgr *amixer_mgr); | ||
|  | 
 | ||
|  | #endif /* CTAMIXER_H */
 |