On Mon, 18 Sep 2023 20:10:44 +0200, Ivan Orlov wrote:
+#include <sound/core.h> +#include <sound/control.h> +#include <sound/pcm.h> +#include <sound/pcm_params.h> +#include <sound/core.h> +#include <sound/pcm.h> +#include <sound/initval.h> +#include <sound/info.h> +#include <linux/delay.h> +#include <linux/module.h> +#include <linux/pci.h> +#include <linux/interrupt.h>
We usually include linux/* at first, followed by sound/*.
+#define DEBUG
Any need to define this for the production system?
+struct marian_card_descriptor; +struct marian_card; + +struct marian_card_descriptor { + char *name; + char *port_names; + unsigned int speedmode_max; + unsigned int ch_in; + unsigned int ch_out; + unsigned int midi_in; + unsigned int midi_out; + unsigned int serial_in; + unsigned int serial_out; + unsigned int wck_in; + unsigned int wck_out; + + unsigned int dma_bufsize; + + void (*hw_constraints_func)(struct marian_card *marian, + struct snd_pcm_substream *substream, + struct snd_pcm_hw_params *params); + /* custom function to set up ALSA controls */ + void (*create_controls)(struct marian_card *marian); + /* init is called after probing the card */ + int (*init_card)(struct marian_card *marian); + void (*free_card)(struct marian_card *marian); + /* prepare is called when ALSA is opening the card */ + void (*prepare)(struct marian_card *marian); + void (*set_speedmode)(struct marian_card *marian, unsigned int speedmode); + void (*proc_status)(struct marian_card *marian, struct snd_info_buffer *buffer); + void (*proc_ports)(struct marian_card *marian, struct snd_info_buffer *buffer, + unsigned int type); + + struct snd_pcm_hardware info_playback; + struct snd_pcm_hardware info_capture;
Do we need this kind of abstraction inside the driver? As far as I see, the driver supports only a single model, hence there is no real merit of abstracted / indirect function calls. So I stop reading at this point. thanks, Takashi