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 ctdaio.h 68cc72361SWai Yew CHAY * 78cc72361SWai Yew CHAY * @Brief 88cc72361SWai Yew CHAY * This file contains the definition of Digital Audio Input Output 98cc72361SWai Yew CHAY * resource management object. 108cc72361SWai Yew CHAY * 118cc72361SWai Yew CHAY * @Author Liu Chun 128cc72361SWai Yew CHAY * @Date May 23 2008 138cc72361SWai Yew CHAY */ 148cc72361SWai Yew CHAY 158cc72361SWai Yew CHAY #ifndef CTDAIO_H 168cc72361SWai Yew CHAY #define CTDAIO_H 178cc72361SWai Yew CHAY 188cc72361SWai Yew CHAY #include "ctresource.h" 198cc72361SWai Yew CHAY #include "ctimap.h" 208cc72361SWai Yew CHAY #include <linux/spinlock.h> 218cc72361SWai Yew CHAY #include <linux/list.h> 223d0fdc86SSudip Mukherjee #include <sound/core.h> 238cc72361SWai Yew CHAY 248cc72361SWai Yew CHAY /* Define the descriptor of a daio resource */ 258cc72361SWai Yew CHAY enum DAIOTYP { 268cc72361SWai Yew CHAY LINEO1, 278cc72361SWai Yew CHAY LINEO2, 288cc72361SWai Yew CHAY LINEO3, 298cc72361SWai Yew CHAY LINEO4, 308cc72361SWai Yew CHAY SPDIFOO, /* S/PDIF Out (Flexijack/Optical) */ 318cc72361SWai Yew CHAY LINEIM, 328cc72361SWai Yew CHAY SPDIFIO, /* S/PDIF In (Flexijack/Optical) on the card */ 3355309216SHarry Butterworth MIC, /* Dedicated mic on Titanium HD */ 348cc72361SWai Yew CHAY SPDIFI1, /* S/PDIF In on internal Drive Bay */ 358cc72361SWai Yew CHAY NUM_DAIOTYP 368cc72361SWai Yew CHAY }; 378cc72361SWai Yew CHAY 388cc72361SWai Yew CHAY struct dao_rsc_ops; 398cc72361SWai Yew CHAY struct dai_rsc_ops; 408cc72361SWai Yew CHAY struct daio_mgr; 418cc72361SWai Yew CHAY 428cc72361SWai Yew CHAY struct daio { 438cc72361SWai Yew CHAY struct rsc rscl; /* Basic resource info for left TX/RX */ 448cc72361SWai Yew CHAY struct rsc rscr; /* Basic resource info for right TX/RX */ 458cc72361SWai Yew CHAY enum DAIOTYP type; 468cc72361SWai Yew CHAY }; 478cc72361SWai Yew CHAY 488cc72361SWai Yew CHAY struct dao { 498cc72361SWai Yew CHAY struct daio daio; 5043f2cdebSJulia Lawall const struct dao_rsc_ops *ops; /* DAO specific operations */ 518cc72361SWai Yew CHAY struct imapper **imappers; 528cc72361SWai Yew CHAY struct daio_mgr *mgr; 5366640898SSudip Mukherjee struct hw *hw; 548cc72361SWai Yew CHAY void *ctrl_blk; 558cc72361SWai Yew CHAY }; 568cc72361SWai Yew CHAY 578cc72361SWai Yew CHAY struct dai { 588cc72361SWai Yew CHAY struct daio daio; 5943f2cdebSJulia Lawall const struct dai_rsc_ops *ops; /* DAI specific operations */ 6066640898SSudip Mukherjee struct hw *hw; 618cc72361SWai Yew CHAY void *ctrl_blk; 628cc72361SWai Yew CHAY }; 638cc72361SWai Yew CHAY 648cc72361SWai Yew CHAY struct dao_desc { 658cc72361SWai Yew CHAY unsigned int msr:4; 668cc72361SWai Yew CHAY unsigned int passthru:1; 678cc72361SWai Yew CHAY }; 688cc72361SWai Yew CHAY 698cc72361SWai Yew CHAY struct dao_rsc_ops { 708cc72361SWai Yew CHAY int (*set_spos)(struct dao *dao, unsigned int spos); 718cc72361SWai Yew CHAY int (*commit_write)(struct dao *dao); 728cc72361SWai Yew CHAY int (*get_spos)(struct dao *dao, unsigned int *spos); 738cc72361SWai Yew CHAY int (*reinit)(struct dao *dao, const struct dao_desc *desc); 748cc72361SWai Yew CHAY int (*set_left_input)(struct dao *dao, struct rsc *input); 758cc72361SWai Yew CHAY int (*set_right_input)(struct dao *dao, struct rsc *input); 768cc72361SWai Yew CHAY int (*clear_left_input)(struct dao *dao); 778cc72361SWai Yew CHAY int (*clear_right_input)(struct dao *dao); 788cc72361SWai Yew CHAY }; 798cc72361SWai Yew CHAY 808cc72361SWai Yew CHAY struct dai_rsc_ops { 818cc72361SWai Yew CHAY int (*set_srt_srcl)(struct dai *dai, struct rsc *src); 828cc72361SWai Yew CHAY int (*set_srt_srcr)(struct dai *dai, struct rsc *src); 838cc72361SWai Yew CHAY int (*set_srt_msr)(struct dai *dai, unsigned int msr); 848cc72361SWai Yew CHAY int (*set_enb_src)(struct dai *dai, unsigned int enb); 858cc72361SWai Yew CHAY int (*set_enb_srt)(struct dai *dai, unsigned int enb); 868cc72361SWai Yew CHAY int (*commit_write)(struct dai *dai); 878cc72361SWai Yew CHAY }; 888cc72361SWai Yew CHAY 898cc72361SWai Yew CHAY /* Define daio resource request description info */ 908cc72361SWai Yew CHAY struct daio_desc { 918cc72361SWai Yew CHAY unsigned int type:4; 928cc72361SWai Yew CHAY unsigned int msr:4; 938cc72361SWai Yew CHAY unsigned int passthru:1; 948cc72361SWai Yew CHAY }; 958cc72361SWai Yew CHAY 968cc72361SWai Yew CHAY struct daio_mgr { 978cc72361SWai Yew CHAY struct rsc_mgr mgr; /* Basic resource manager info */ 983d0fdc86SSudip Mukherjee struct snd_card *card; /* pointer to this card */ 998cc72361SWai Yew CHAY spinlock_t mgr_lock; 1008cc72361SWai Yew CHAY spinlock_t imap_lock; 1018cc72361SWai Yew CHAY struct list_head imappers; 1028cc72361SWai Yew CHAY struct imapper *init_imap; 1038cc72361SWai Yew CHAY unsigned int init_imap_added; 1048cc72361SWai Yew CHAY 1058cc72361SWai Yew CHAY /* request one daio resource */ 1068cc72361SWai Yew CHAY int (*get_daio)(struct daio_mgr *mgr, 1078cc72361SWai Yew CHAY const struct daio_desc *desc, struct daio **rdaio); 1088cc72361SWai Yew CHAY /* return one daio resource */ 1098cc72361SWai Yew CHAY int (*put_daio)(struct daio_mgr *mgr, struct daio *daio); 1108cc72361SWai Yew CHAY int (*daio_enable)(struct daio_mgr *mgr, struct daio *daio); 1118cc72361SWai Yew CHAY int (*daio_disable)(struct daio_mgr *mgr, struct daio *daio); 1128cc72361SWai Yew CHAY int (*imap_add)(struct daio_mgr *mgr, struct imapper *entry); 1138cc72361SWai Yew CHAY int (*imap_delete)(struct daio_mgr *mgr, struct imapper *entry); 1148cc72361SWai Yew CHAY int (*commit_write)(struct daio_mgr *mgr); 1158cc72361SWai Yew CHAY }; 1168cc72361SWai Yew CHAY 1178cc72361SWai Yew CHAY /* Constructor and destructor of daio resource manager */ 11866640898SSudip Mukherjee int daio_mgr_create(struct hw *hw, struct daio_mgr **rdaio_mgr); 1198cc72361SWai Yew CHAY int daio_mgr_destroy(struct daio_mgr *daio_mgr); 1208cc72361SWai Yew CHAY 1218cc72361SWai Yew CHAY #endif /* CTDAIO_H */ 122