xref: /openbmc/linux/sound/pci/ctxfi/ctamixer.h (revision 8be98d2f2a0a262f8bf8a0bc1fdf522b3c7aab17)
15765e78eSThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */
2*a08b9f2fSAditya Srivastava /*
38cc72361SWai Yew CHAY  * Copyright (C) 2008, Creative Technology Ltd. All Rights Reserved.
48cc72361SWai Yew CHAY  *
58cc72361SWai Yew CHAY  * @File	ctamixer.h
68cc72361SWai Yew CHAY  *
78cc72361SWai Yew CHAY  * @Brief
88cc72361SWai Yew CHAY  * This file contains the definition of the Audio Mixer
98cc72361SWai Yew CHAY  * resource management object.
108cc72361SWai Yew CHAY  *
118cc72361SWai Yew CHAY  * @Author	Liu Chun
128cc72361SWai Yew CHAY  * @Date 	May 21 2008
138cc72361SWai Yew CHAY  */
148cc72361SWai Yew CHAY 
158cc72361SWai Yew CHAY #ifndef CTAMIXER_H
168cc72361SWai Yew CHAY #define CTAMIXER_H
178cc72361SWai Yew CHAY 
188cc72361SWai Yew CHAY #include "ctresource.h"
198cc72361SWai Yew CHAY #include <linux/spinlock.h>
203d0fdc86SSudip Mukherjee #include <sound/core.h>
218cc72361SWai Yew CHAY 
228cc72361SWai Yew CHAY /* Define the descriptor of a summation node resource */
238cc72361SWai Yew CHAY struct sum {
248cc72361SWai Yew CHAY 	struct rsc rsc;		/* Basic resource info */
258cc72361SWai Yew CHAY 	unsigned char idx[8];
268cc72361SWai Yew CHAY };
278cc72361SWai Yew CHAY 
288cc72361SWai Yew CHAY /* Define sum resource request description info */
298cc72361SWai Yew CHAY struct sum_desc {
308cc72361SWai Yew CHAY 	unsigned int msr;
318cc72361SWai Yew CHAY };
328cc72361SWai Yew CHAY 
338cc72361SWai Yew CHAY struct sum_mgr {
348cc72361SWai Yew CHAY 	struct rsc_mgr mgr;	/* Basic resource manager info */
353d0fdc86SSudip Mukherjee 	struct snd_card *card;	/* pointer to this card */
368cc72361SWai Yew CHAY 	spinlock_t mgr_lock;
378cc72361SWai Yew CHAY 
388cc72361SWai Yew CHAY 	 /* request one sum resource */
398cc72361SWai Yew CHAY 	int (*get_sum)(struct sum_mgr *mgr,
408cc72361SWai Yew CHAY 			const struct sum_desc *desc, struct sum **rsum);
418cc72361SWai Yew CHAY 	/* return one sum resource */
428cc72361SWai Yew CHAY 	int (*put_sum)(struct sum_mgr *mgr, struct sum *sum);
438cc72361SWai Yew CHAY };
448cc72361SWai Yew CHAY 
458cc72361SWai Yew CHAY /* Constructor and destructor of daio resource manager */
4666640898SSudip Mukherjee int sum_mgr_create(struct hw *hw, struct sum_mgr **rsum_mgr);
478cc72361SWai Yew CHAY int sum_mgr_destroy(struct sum_mgr *sum_mgr);
488cc72361SWai Yew CHAY 
498cc72361SWai Yew CHAY /* Define the descriptor of a amixer resource */
508cc72361SWai Yew CHAY struct amixer_rsc_ops;
518cc72361SWai Yew CHAY 
528cc72361SWai Yew CHAY struct amixer {
538cc72361SWai Yew CHAY 	struct rsc rsc;		/* Basic resource info */
548cc72361SWai Yew CHAY 	unsigned char idx[8];
558cc72361SWai Yew CHAY 	struct rsc *input;	/* pointer to a resource acting as source */
568cc72361SWai Yew CHAY 	struct sum *sum;	/* Put amixer output to this summation node */
5743f2cdebSJulia Lawall 	const struct amixer_rsc_ops *ops;	/* AMixer specific operations */
588cc72361SWai Yew CHAY };
598cc72361SWai Yew CHAY 
608cc72361SWai Yew CHAY struct amixer_rsc_ops {
618cc72361SWai Yew CHAY 	int (*set_input)(struct amixer *amixer, struct rsc *rsc);
628cc72361SWai Yew CHAY 	int (*set_scale)(struct amixer *amixer, unsigned int scale);
638cc72361SWai Yew CHAY 	int (*set_invalid_squash)(struct amixer *amixer, unsigned int iv);
648cc72361SWai Yew CHAY 	int (*set_sum)(struct amixer *amixer, struct sum *sum);
658cc72361SWai Yew CHAY 	int (*commit_write)(struct amixer *amixer);
668cc72361SWai Yew CHAY 	/* Only for interleaved recording */
678cc72361SWai Yew CHAY 	int (*commit_raw_write)(struct amixer *amixer);
688cc72361SWai Yew CHAY 	int (*setup)(struct amixer *amixer, struct rsc *input,
698cc72361SWai Yew CHAY 			unsigned int scale, struct sum *sum);
708cc72361SWai Yew CHAY 	int (*get_scale)(struct amixer *amixer);
718cc72361SWai Yew CHAY };
728cc72361SWai Yew CHAY 
738cc72361SWai Yew CHAY /* Define amixer resource request description info */
748cc72361SWai Yew CHAY struct amixer_desc {
758cc72361SWai Yew CHAY 	unsigned int msr;
768cc72361SWai Yew CHAY };
778cc72361SWai Yew CHAY 
788cc72361SWai Yew CHAY struct amixer_mgr {
798cc72361SWai Yew CHAY 	struct rsc_mgr mgr;	/* Basic resource manager info */
803d0fdc86SSudip Mukherjee 	struct snd_card *card;	/* pointer to this card */
818cc72361SWai Yew CHAY 	spinlock_t mgr_lock;
828cc72361SWai Yew CHAY 
838cc72361SWai Yew CHAY 	 /* request one amixer resource */
848cc72361SWai Yew CHAY 	int (*get_amixer)(struct amixer_mgr *mgr,
858cc72361SWai Yew CHAY 			  const struct amixer_desc *desc,
868cc72361SWai Yew CHAY 			  struct amixer **ramixer);
878cc72361SWai Yew CHAY 	/* return one amixer resource */
888cc72361SWai Yew CHAY 	int (*put_amixer)(struct amixer_mgr *mgr, struct amixer *amixer);
898cc72361SWai Yew CHAY };
908cc72361SWai Yew CHAY 
918cc72361SWai Yew CHAY /* Constructor and destructor of amixer resource manager */
9266640898SSudip Mukherjee int amixer_mgr_create(struct hw *hw, struct amixer_mgr **ramixer_mgr);
938cc72361SWai Yew CHAY int amixer_mgr_destroy(struct amixer_mgr *amixer_mgr);
948cc72361SWai Yew CHAY 
958cc72361SWai Yew CHAY #endif /* CTAMIXER_H */
96