brintos

brintos / linux-shallow public Read only

0
0
Text · 3.2 KiB · 15147fe Raw
122 lines · c
1/* SPDX-License-Identifier: GPL-2.0-only */2/*3 * Copyright (C) 2008, Creative Technology Ltd. All Rights Reserved.4 *5 * @File	ctdaio.h6 *7 * @Brief8 * This file contains the definition of Digital Audio Input Output9 * resource management object.10 *11 * @Author	Liu Chun12 * @Date 	May 23 200813 */14 15#ifndef CTDAIO_H16#define CTDAIO_H17 18#include "ctresource.h"19#include "ctimap.h"20#include <linux/spinlock.h>21#include <linux/list.h>22#include <sound/core.h>23 24/* Define the descriptor of a daio resource */25enum DAIOTYP {26	LINEO1,27	LINEO2,28	LINEO3,29	LINEO4,30	SPDIFOO,	/* S/PDIF Out (Flexijack/Optical) */31	LINEIM,32	SPDIFIO,	/* S/PDIF In (Flexijack/Optical) on the card */33	MIC,		/* Dedicated mic on Titanium HD */34	SPDIFI1,	/* S/PDIF In on internal Drive Bay */35	NUM_DAIOTYP36};37 38struct dao_rsc_ops;39struct dai_rsc_ops;40struct daio_mgr;41 42struct daio {43	struct rsc rscl;	/* Basic resource info for left TX/RX */44	struct rsc rscr;	/* Basic resource info for right TX/RX */45	enum DAIOTYP type;46};47 48struct dao {49	struct daio daio;50	const struct dao_rsc_ops *ops;	/* DAO specific operations */51	struct imapper **imappers;52	struct daio_mgr *mgr;53	struct hw *hw;54	void *ctrl_blk;55};56 57struct dai {58	struct daio daio;59	const struct dai_rsc_ops *ops;	/* DAI specific operations */60	struct hw *hw;61	void *ctrl_blk;62};63 64struct dao_desc {65	unsigned int msr:4;66	unsigned int passthru:1;67};68 69struct dao_rsc_ops {70	int (*set_spos)(struct dao *dao, unsigned int spos);71	int (*commit_write)(struct dao *dao);72	int (*get_spos)(struct dao *dao, unsigned int *spos);73	int (*reinit)(struct dao *dao, const struct dao_desc *desc);74	int (*set_left_input)(struct dao *dao, struct rsc *input);75	int (*set_right_input)(struct dao *dao, struct rsc *input);76	int (*clear_left_input)(struct dao *dao);77	int (*clear_right_input)(struct dao *dao);78};79 80struct dai_rsc_ops {81	int (*set_srt_srcl)(struct dai *dai, struct rsc *src);82	int (*set_srt_srcr)(struct dai *dai, struct rsc *src);83	int (*set_srt_msr)(struct dai *dai, unsigned int msr);84	int (*set_enb_src)(struct dai *dai, unsigned int enb);85	int (*set_enb_srt)(struct dai *dai, unsigned int enb);86	int (*commit_write)(struct dai *dai);87};88 89/* Define daio resource request description info */90struct daio_desc {91	unsigned int type:4;92	unsigned int msr:4;93	unsigned int passthru:1;94};95 96struct daio_mgr {97	struct rsc_mgr mgr;	/* Basic resource manager info */98	struct snd_card *card;	/* pointer to this card */99	spinlock_t mgr_lock;100	spinlock_t imap_lock;101	struct list_head imappers;102	struct imapper *init_imap;103	unsigned int init_imap_added;104 105	 /* request one daio resource */106	int (*get_daio)(struct daio_mgr *mgr,107			const struct daio_desc *desc, struct daio **rdaio);108	/* return one daio resource */109	int (*put_daio)(struct daio_mgr *mgr, struct daio *daio);110	int (*daio_enable)(struct daio_mgr *mgr, struct daio *daio);111	int (*daio_disable)(struct daio_mgr *mgr, struct daio *daio);112	int (*imap_add)(struct daio_mgr *mgr, struct imapper *entry);113	int (*imap_delete)(struct daio_mgr *mgr, struct imapper *entry);114	int (*commit_write)(struct daio_mgr *mgr);115};116 117/* Constructor and destructor of daio resource manager */118int daio_mgr_create(struct hw *hw, void **ptr);119int daio_mgr_destroy(void *ptr);120 121#endif /* CTDAIO_H */122