xref: /openbmc/linux/sound/pci/ctxfi/ctdaio.h (revision a08b9f2f)
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