sound/soc/intel/atom/sst-mfld-platform.h

Source file repositories/reference/linux-study-clean/sound/soc/intel/atom/sst-mfld-platform.h

File Facts

System
Linux kernel
Corpus path
sound/soc/intel/atom/sst-mfld-platform.h
Extension
.h
Size
5216 bytes
Lines
179
Domain
Driver Families
Bucket
sound/soc
Inferred role
Driver Families: implementation source
Status
source implementation candidate

Why This File Exists

Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.

Dependency Surface

Detected Declarations

Annotated Snippet

struct pcm_stream_info {
	int str_id;
	void *arg;
	void (*period_elapsed) (void *arg);
	unsigned long long buffer_ptr;
	unsigned long long pcm_delay;
	int sfreq;
};

enum sst_drv_status {
	SST_PLATFORM_INIT = 1,
	SST_PLATFORM_STARTED,
	SST_PLATFORM_RUNNING,
	SST_PLATFORM_PAUSED,
	SST_PLATFORM_DROPPED,
};

enum sst_stream_ops {
	STREAM_OPS_PLAYBACK = 0,
	STREAM_OPS_CAPTURE,
};

enum sst_audio_device_type {
	SND_SST_DEVICE_HEADSET = 1,
	SND_SST_DEVICE_IHF,
	SND_SST_DEVICE_VIBRA,
	SND_SST_DEVICE_HAPTIC,
	SND_SST_DEVICE_CAPTURE,
	SND_SST_DEVICE_COMPRESS,
};

/* PCM Parameters */
struct sst_pcm_params {
	u16 codec;	/* codec type */
	u8 num_chan;	/* 1=Mono, 2=Stereo */
	u8 pcm_wd_sz;	/* 16/24 - bit*/
	u32 reserved;	/* Bitrate in bits per second */
	u32 sfreq;	/* Sampling rate in Hz */
	u32 ring_buffer_size;
	u32 period_count;	/* period elapsed in samples*/
	u32 ring_buffer_addr;
};

struct sst_stream_params {
	u32 result;
	u32 stream_id;
	u8 codec;
	u8 ops;
	u8 stream_type;
	u8 device_type;
	struct sst_pcm_params sparams;
};

struct sst_compress_cb {
	void *param;
	void (*compr_cb)(void *param);
	void *drain_cb_param;
	void (*drain_notify)(void *param);
};

struct compress_sst_ops {
	const char *name;
	int (*open)(struct device *dev,
		struct snd_sst_params *str_params, struct sst_compress_cb *cb);
	int (*stream_start)(struct device *dev, unsigned int str_id);
	int (*stream_drop)(struct device *dev, unsigned int str_id);
	int (*stream_drain)(struct device *dev, unsigned int str_id);
	int (*stream_partial_drain)(struct device *dev,	unsigned int str_id);
	int (*stream_pause)(struct device *dev, unsigned int str_id);
	int (*stream_pause_release)(struct device *dev,	unsigned int str_id);

	int (*tstamp)(struct device *dev, unsigned int str_id,
		      struct snd_compr_tstamp64 *tstamp);
	int (*ack)(struct device *dev, unsigned int str_id,
			unsigned long bytes);
	int (*close)(struct device *dev, unsigned int str_id);
	int (*get_caps)(struct snd_compr_caps *caps);
	int (*get_codec_caps)(struct snd_compr_codec_caps *codec);
	int (*set_metadata)(struct device *dev,	unsigned int str_id,
			struct snd_compr_metadata *mdata);
	int (*power)(struct device *dev, bool state);
};

struct sst_ops {
	int (*open)(struct device *dev, struct snd_sst_params *str_param);
	int (*stream_init)(struct device *dev, struct pcm_stream_info *str_info);
	int (*stream_start)(struct device *dev, int str_id);
	int (*stream_drop)(struct device *dev, int str_id);
	int (*stream_pause)(struct device *dev, int str_id);
	int (*stream_pause_release)(struct device *dev, int str_id);

Annotation

Implementation Notes