xref: /openbsd-src/sys/arch/macppc/dev/i2svar.h (revision cc5bdd413dc6810be27950ffc92a3e2dad4ebdcb)
1*cc5bdd41Skn /*	$OpenBSD: i2svar.h,v 1.10 2022/10/26 20:19:07 kn Exp $	*/
2da53b1f9Sjoris 
3da53b1f9Sjoris /*-
4da53b1f9Sjoris  * Copyright (c) 2001,2003 Tsubai Masanari.  All rights reserved.
5da53b1f9Sjoris  *
6da53b1f9Sjoris  * Redistribution and use in source and binary forms, with or without
7da53b1f9Sjoris  * modification, are permitted provided that the following conditions
8da53b1f9Sjoris  * are met:
9da53b1f9Sjoris  * 1. Redistributions of source code must retain the above copyright
10da53b1f9Sjoris  *    notice, this list of conditions and the following disclaimer.
11da53b1f9Sjoris  * 2. Redistributions in binary form must reproduce the above copyright
12da53b1f9Sjoris  *    notice, this list of conditions and the following disclaimer in the
13da53b1f9Sjoris  *    documentation and/or other materials provided with the distribution.
14da53b1f9Sjoris  * 3. The name of the author may not be used to endorse or promote products
15da53b1f9Sjoris  *    derived from this software without specific prior written permission.
16da53b1f9Sjoris  *
17da53b1f9Sjoris  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18da53b1f9Sjoris  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19da53b1f9Sjoris  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20da53b1f9Sjoris  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21da53b1f9Sjoris  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22da53b1f9Sjoris  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23da53b1f9Sjoris  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24da53b1f9Sjoris  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25da53b1f9Sjoris  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26da53b1f9Sjoris  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27da53b1f9Sjoris  */
28da53b1f9Sjoris 
29da53b1f9Sjoris #if !defined(I2S_H_INCLUDE)
30da53b1f9Sjoris #define I2S_H_INCLUDE
31da53b1f9Sjoris 
32da53b1f9Sjoris #define I2S_DMALIST_MAX		32
33da53b1f9Sjoris #define I2S_DMASEG_MAX		NBPG
34da53b1f9Sjoris 
35da53b1f9Sjoris struct i2s_dma {
36da53b1f9Sjoris 	bus_dmamap_t map;
37da53b1f9Sjoris 	caddr_t addr;
38da53b1f9Sjoris 	bus_dma_segment_t segs[I2S_DMALIST_MAX];
39da53b1f9Sjoris 	int nsegs;
40da53b1f9Sjoris 	size_t size;
41da53b1f9Sjoris 	struct i2s_dma *next;
42da53b1f9Sjoris };
43da53b1f9Sjoris 
44da53b1f9Sjoris struct i2s_softc {
45da53b1f9Sjoris 	struct device sc_dev;
46da53b1f9Sjoris 	int sc_flags;
47da53b1f9Sjoris 	int sc_node;
48224a5941Skettenis 	u_int sc_baseaddr;
49da53b1f9Sjoris 
50da53b1f9Sjoris 	void (*sc_ointr)(void *);	/* dma completion intr handler */
51da53b1f9Sjoris 	void *sc_oarg;			/* arg for sc_ointr() */
52da53b1f9Sjoris 	int sc_opages;			/* # of output pages */
53da53b1f9Sjoris 
54da53b1f9Sjoris 	void (*sc_iintr)(void *);	/* dma completion intr handler */
55da53b1f9Sjoris 	void *sc_iarg;			/* arg for sc_iintr() */
56da53b1f9Sjoris 
57da53b1f9Sjoris 	u_int sc_record_source;		/* recording source mask */
58da53b1f9Sjoris 	u_int sc_output_mask;		/* output source mask */
59da53b1f9Sjoris 
60da53b1f9Sjoris 	void (*sc_setvolume)(struct i2s_softc *, int, int);
61ddfa3b0dSjoris 	void (*sc_setbass)(struct i2s_softc *, int);
62ddfa3b0dSjoris 	void (*sc_settreble)(struct i2s_softc *, int);
63f0d5bc97Stodd 	void (*sc_setinput)(struct i2s_softc *, int);
64da53b1f9Sjoris 
65da53b1f9Sjoris 	u_char *sc_reg;
66da53b1f9Sjoris 	void *sc_i2c;
67da53b1f9Sjoris 
68da53b1f9Sjoris 	u_int sc_rate;
69da53b1f9Sjoris 	u_int sc_vol_l;
70da53b1f9Sjoris 	u_int sc_vol_r;
71ddfa3b0dSjoris 	u_int sc_bass;
72ddfa3b0dSjoris 	u_int sc_treble;
73041a1952Sjasper 	u_int sc_mute;
74da53b1f9Sjoris 
7555882323Smpi 	u_int sc_spkr;			/* amp mute gpio offset */
7655882323Smpi 	u_int sc_hp;			/* headphone mute gpio offset */
7755882323Smpi 	u_int sc_hp_detect;		/* headphone detect gpio */
7855882323Smpi 	u_int sc_hp_active;
7955882323Smpi 	u_int sc_line;			/* line out mute gpio offset */
8055882323Smpi 	u_int sc_line_detect;		/* line detect gpio */
8155882323Smpi 	u_int sc_line_active;
8255882323Smpi 	u_int sc_hw_reset;		/* hw reset gpio */
8355882323Smpi 
8455882323Smpi 
85da53b1f9Sjoris 	bus_dma_tag_t sc_dmat;
86da53b1f9Sjoris 	dbdma_regmap_t *sc_odma;
87da53b1f9Sjoris 	dbdma_regmap_t *sc_idma;
88da53b1f9Sjoris 	struct dbdma_command *sc_odmacmd, *sc_odmap;
89da53b1f9Sjoris 	struct dbdma_command *sc_idmacmd, *sc_idmap;
90da53b1f9Sjoris 	dbdma_t sc_odbdma, sc_idbdma;
91da53b1f9Sjoris 
92da53b1f9Sjoris 	struct i2s_dma *sc_dmas;
93da53b1f9Sjoris };
94da53b1f9Sjoris 
95da53b1f9Sjoris void i2s_attach(struct device *, struct i2s_softc *, struct confargs *);
96da53b1f9Sjoris int i2s_intr(void *);
97da53b1f9Sjoris int i2s_open(void *, int);
98da53b1f9Sjoris void i2s_close(void *);
99da53b1f9Sjoris int i2s_set_params(void *, int, int, struct audio_params *, struct audio_params *);
100da53b1f9Sjoris int i2s_round_blocksize(void *, int);
101da53b1f9Sjoris int i2s_halt_output(void *);
102da53b1f9Sjoris int i2s_halt_input(void *);
103da53b1f9Sjoris int i2s_set_port(void *, mixer_ctrl_t *);
104da53b1f9Sjoris int i2s_get_port(void *, mixer_ctrl_t *);
105da53b1f9Sjoris int i2s_query_devinfo(void *, mixer_devinfo_t *);
106da53b1f9Sjoris size_t i2s_round_buffersize(void *, int, size_t);
107da53b1f9Sjoris int i2s_trigger_output(void *, void *, void *, int, void (*)(void *),
108da53b1f9Sjoris     void *, struct audio_params *);
109da53b1f9Sjoris int i2s_trigger_input(void *, void *, void *, int, void (*)(void *),
110da53b1f9Sjoris     void *, struct audio_params *);
111da53b1f9Sjoris int i2s_set_rate(struct i2s_softc *, int);
112da53b1f9Sjoris void i2s_gpio_init(struct i2s_softc *, int, struct device *);
113da53b1f9Sjoris void *i2s_allocm(void *, int, size_t, int, int);
114da53b1f9Sjoris int deq_reset(struct i2s_softc *);
115da53b1f9Sjoris 
116da53b1f9Sjoris #endif
117