1/* SPDX-License-Identifier: GPL-2.0-only */
2/*
3 * Copyright (C) 2008, Creative Technology Ltd. All Rights Reserved.
4 *
5 * @File ctdaio.h
6 *
7 * @Brief
8 * This file contains the definition of Digital Audio Input Output
9 * resource management object.
10 *
11 * @Author Liu Chun
12 * @Date May 23 2008
13 */
14
15#ifndef CTDAIO_H
16#define CTDAIO_H
17
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_DAIOTYP
36};
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

source code of linux/sound/pci/ctxfi/ctdaio.h