Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-only */
0002 /*
0003  * Copyright (C) 2008, Creative Technology Ltd. All Rights Reserved.
0004  *
0005  * @File    ctamixer.h
0006  *
0007  * @Brief
0008  * This file contains the definition of the Audio Mixer
0009  * resource management object.
0010  *
0011  * @Author  Liu Chun
0012  * @Date    May 21 2008
0013  */
0014 
0015 #ifndef CTAMIXER_H
0016 #define CTAMIXER_H
0017 
0018 #include "ctresource.h"
0019 #include <linux/spinlock.h>
0020 #include <sound/core.h>
0021 
0022 /* Define the descriptor of a summation node resource */
0023 struct sum {
0024     struct rsc rsc;     /* Basic resource info */
0025     unsigned char idx[8];
0026 };
0027 
0028 /* Define sum resource request description info */
0029 struct sum_desc {
0030     unsigned int msr;
0031 };
0032 
0033 struct sum_mgr {
0034     struct rsc_mgr mgr; /* Basic resource manager info */
0035     struct snd_card *card;  /* pointer to this card */
0036     spinlock_t mgr_lock;
0037 
0038      /* request one sum resource */
0039     int (*get_sum)(struct sum_mgr *mgr,
0040             const struct sum_desc *desc, struct sum **rsum);
0041     /* return one sum resource */
0042     int (*put_sum)(struct sum_mgr *mgr, struct sum *sum);
0043 };
0044 
0045 /* Constructor and destructor of daio resource manager */
0046 int sum_mgr_create(struct hw *hw, struct sum_mgr **rsum_mgr);
0047 int sum_mgr_destroy(struct sum_mgr *sum_mgr);
0048 
0049 /* Define the descriptor of a amixer resource */
0050 struct amixer_rsc_ops;
0051 
0052 struct amixer {
0053     struct rsc rsc;     /* Basic resource info */
0054     unsigned char idx[8];
0055     struct rsc *input;  /* pointer to a resource acting as source */
0056     struct sum *sum;    /* Put amixer output to this summation node */
0057     const struct amixer_rsc_ops *ops;   /* AMixer specific operations */
0058 };
0059 
0060 struct amixer_rsc_ops {
0061     int (*set_input)(struct amixer *amixer, struct rsc *rsc);
0062     int (*set_scale)(struct amixer *amixer, unsigned int scale);
0063     int (*set_invalid_squash)(struct amixer *amixer, unsigned int iv);
0064     int (*set_sum)(struct amixer *amixer, struct sum *sum);
0065     int (*commit_write)(struct amixer *amixer);
0066     /* Only for interleaved recording */
0067     int (*commit_raw_write)(struct amixer *amixer);
0068     int (*setup)(struct amixer *amixer, struct rsc *input,
0069             unsigned int scale, struct sum *sum);
0070     int (*get_scale)(struct amixer *amixer);
0071 };
0072 
0073 /* Define amixer resource request description info */
0074 struct amixer_desc {
0075     unsigned int msr;
0076 };
0077 
0078 struct amixer_mgr {
0079     struct rsc_mgr mgr; /* Basic resource manager info */
0080     struct snd_card *card;  /* pointer to this card */
0081     spinlock_t mgr_lock;
0082 
0083      /* request one amixer resource */
0084     int (*get_amixer)(struct amixer_mgr *mgr,
0085               const struct amixer_desc *desc,
0086               struct amixer **ramixer);
0087     /* return one amixer resource */
0088     int (*put_amixer)(struct amixer_mgr *mgr, struct amixer *amixer);
0089 };
0090 
0091 /* Constructor and destructor of amixer resource manager */
0092 int amixer_mgr_create(struct hw *hw, struct amixer_mgr **ramixer_mgr);
0093 int amixer_mgr_destroy(struct amixer_mgr *amixer_mgr);
0094 
0095 #endif /* CTAMIXER_H */