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