1/* SPDX-License-Identifier: GPL-2.0-only */
2/*****************************************************************************
3 *
4 * Copyright (C) 2008 Cedric Bregardis <cedric.bregardis@free.fr> and
5 * Jean-Christian Hassler <jhassler@free.fr>
6 *
7 * This file is part of the Audiowerk2 ALSA driver
8 *
9 *****************************************************************************/
10
11#ifndef AW2_SAA7146_H
12#define AW2_SAA7146_H
13
14#define NB_STREAM_PLAYBACK 2
15#define NB_STREAM_CAPTURE 1
16
17#define NUM_STREAM_PLAYBACK_ANA 0
18#define NUM_STREAM_PLAYBACK_DIG 1
19
20#define NUM_STREAM_CAPTURE_ANA 0
21
22typedef void (*snd_aw2_saa7146_it_cb) (void *);
23
24struct snd_aw2_saa7146_cb_param {
25	snd_aw2_saa7146_it_cb p_it_callback;
26	void *p_callback_param;
27};
28
29/* definition of the chip-specific record */
30
31struct snd_aw2_saa7146 {
32	void __iomem *base_addr;
33};
34
35extern void snd_aw2_saa7146_setup(struct snd_aw2_saa7146 *chip,
36				  void __iomem *pci_base_addr);
37extern int snd_aw2_saa7146_free(struct snd_aw2_saa7146 *chip);
38
39extern void snd_aw2_saa7146_pcm_init_playback(struct snd_aw2_saa7146 *chip,
40					      int stream_number,
41					      unsigned long dma_addr,
42					      unsigned long period_size,
43					      unsigned long buffer_size);
44extern void snd_aw2_saa7146_pcm_init_capture(struct snd_aw2_saa7146 *chip,
45					     int stream_number,
46					     unsigned long dma_addr,
47					     unsigned long period_size,
48					     unsigned long buffer_size);
49extern void snd_aw2_saa7146_define_it_playback_callback(unsigned int
50							stream_number,
51							snd_aw2_saa7146_it_cb
52							p_it_callback,
53							void *p_callback_param);
54extern void snd_aw2_saa7146_define_it_capture_callback(unsigned int
55						       stream_number,
56						       snd_aw2_saa7146_it_cb
57						       p_it_callback,
58						       void *p_callback_param);
59extern void snd_aw2_saa7146_pcm_trigger_start_capture(struct snd_aw2_saa7146
60						      *chip, int stream_number);
61extern void snd_aw2_saa7146_pcm_trigger_stop_capture(struct snd_aw2_saa7146
62						     *chip, int stream_number);
63
64extern void snd_aw2_saa7146_pcm_trigger_start_playback(struct snd_aw2_saa7146
65						       *chip,
66						       int stream_number);
67extern void snd_aw2_saa7146_pcm_trigger_stop_playback(struct snd_aw2_saa7146
68						      *chip, int stream_number);
69
70extern irqreturn_t snd_aw2_saa7146_interrupt(int irq, void *dev_id);
71extern unsigned int snd_aw2_saa7146_get_hw_ptr_playback(struct snd_aw2_saa7146
72							*chip,
73							int stream_number,
74							unsigned char
75							*start_addr,
76							unsigned int
77							buffer_size);
78extern unsigned int snd_aw2_saa7146_get_hw_ptr_capture(struct snd_aw2_saa7146
79						       *chip,
80						       int stream_number,
81						       unsigned char
82						       *start_addr,
83						       unsigned int
84						       buffer_size);
85
86extern void snd_aw2_saa7146_use_digital_input(struct snd_aw2_saa7146 *chip,
87					      int use_digital);
88
89extern int snd_aw2_saa7146_is_using_digital_input(struct snd_aw2_saa7146
90						  *chip);
91
92#endif
93