1/** 2 * Copyright (C) 2008, Creative Technology Ltd. All Rights Reserved. 3 * 4 * This source file is released under GPL v2 license (no other versions). 5 * See the COPYING file included in the main directory of this source 6 * distribution for the license terms and conditions. 7 * 8 * @File ctamixer.h 9 * 10 * @Brief 11 * This file contains the definition of the Audio Mixer 12 * resource management object. 13 * 14 * @Author Liu Chun 15 * @Date May 21 2008 16 * 17 */ 18 19#ifndef CTAMIXER_H 20#define CTAMIXER_H 21 22#include "ctresource.h" 23#include <linux/spinlock.h> 24#include <sound/core.h> 25 26/* Define the descriptor of a summation node resource */ 27struct sum { 28 struct rsc rsc; /* Basic resource info */ 29 unsigned char idx[8]; 30}; 31 32/* Define sum resource request description info */ 33struct sum_desc { 34 unsigned int msr; 35}; 36 37struct sum_mgr { 38 struct rsc_mgr mgr; /* Basic resource manager info */ 39 struct snd_card *card; /* pointer to this card */ 40 spinlock_t mgr_lock; 41 42 /* request one sum resource */ 43 int (*get_sum)(struct sum_mgr *mgr, 44 const struct sum_desc *desc, struct sum **rsum); 45 /* return one sum resource */ 46 int (*put_sum)(struct sum_mgr *mgr, struct sum *sum); 47}; 48 49/* Constructor and destructor of daio resource manager */ 50int sum_mgr_create(struct hw *hw, struct sum_mgr **rsum_mgr); 51int sum_mgr_destroy(struct sum_mgr *sum_mgr); 52 53/* Define the descriptor of a amixer resource */ 54struct amixer_rsc_ops; 55 56struct amixer { 57 struct rsc rsc; /* Basic resource info */ 58 unsigned char idx[8]; 59 struct rsc *input; /* pointer to a resource acting as source */ 60 struct sum *sum; /* Put amixer output to this summation node */ 61 const struct amixer_rsc_ops *ops; /* AMixer specific operations */ 62}; 63 64struct amixer_rsc_ops { 65 int (*set_input)(struct amixer *amixer, struct rsc *rsc); 66 int (*set_scale)(struct amixer *amixer, unsigned int scale); 67 int (*set_invalid_squash)(struct amixer *amixer, unsigned int iv); 68 int (*set_sum)(struct amixer *amixer, struct sum *sum); 69 int (*commit_write)(struct amixer *amixer); 70 /* Only for interleaved recording */ 71 int (*commit_raw_write)(struct amixer *amixer); 72 int (*setup)(struct amixer *amixer, struct rsc *input, 73 unsigned int scale, struct sum *sum); 74 int (*get_scale)(struct amixer *amixer); 75}; 76 77/* Define amixer resource request description info */ 78struct amixer_desc { 79 unsigned int msr; 80}; 81 82struct amixer_mgr { 83 struct rsc_mgr mgr; /* Basic resource manager info */ 84 struct snd_card *card; /* pointer to this card */ 85 spinlock_t mgr_lock; 86 87 /* request one amixer resource */ 88 int (*get_amixer)(struct amixer_mgr *mgr, 89 const struct amixer_desc *desc, 90 struct amixer **ramixer); 91 /* return one amixer resource */ 92 int (*put_amixer)(struct amixer_mgr *mgr, struct amixer *amixer); 93}; 94 95/* Constructor and destructor of amixer resource manager */ 96int amixer_mgr_create(struct hw *hw, struct amixer_mgr **ramixer_mgr); 97int amixer_mgr_destroy(struct amixer_mgr *amixer_mgr); 98 99#endif /* CTAMIXER_H */ 100