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