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