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