brintos

brintos / linux-shallow public Read only

0
0
Text · 5.1 KiB · 8b5777d Raw
179 lines · c
1/* SPDX-License-Identifier: GPL-2.0-only */2/*3 *  sst_mfld_platform.h - Intel MID Platform driver header file4 *5 *  Copyright (C) 2010 Intel Corp6 *  Author: Vinod Koul <vinod.koul@intel.com>7 *  Author: Harsha Priya <priya.harsha@intel.com>8 *  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~9 *10 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~11 */12 13#ifndef __SST_PLATFORMDRV_H__14#define __SST_PLATFORMDRV_H__15 16#include "sst-mfld-dsp.h"17#include "sst-atom-controls.h"18 19extern struct sst_device *sst;20extern const struct snd_compress_ops sst_platform_compress_ops;21 22#define DRV_NAME "sst"23 24#define SST_MONO		125#define SST_STEREO		226#define SST_MAX_CAP		527 28#define SST_MAX_BUFFER		(800*1024)29#define SST_MIN_BUFFER		(800*1024)30#define SST_MIN_PERIOD_BYTES	3231#define SST_MAX_PERIOD_BYTES	SST_MAX_BUFFER32#define SST_MIN_PERIODS		233#define SST_MAX_PERIODS		(1024*2)34#define SST_FIFO_SIZE		035 36struct pcm_stream_info {37	int str_id;38	void *arg;39	void (*period_elapsed) (void *arg);40	unsigned long long buffer_ptr;41	unsigned long long pcm_delay;42	int sfreq;43};44 45enum sst_drv_status {46	SST_PLATFORM_INIT = 1,47	SST_PLATFORM_STARTED,48	SST_PLATFORM_RUNNING,49	SST_PLATFORM_PAUSED,50	SST_PLATFORM_DROPPED,51};52 53enum sst_stream_ops {54	STREAM_OPS_PLAYBACK = 0,55	STREAM_OPS_CAPTURE,56};57 58enum sst_audio_device_type {59	SND_SST_DEVICE_HEADSET = 1,60	SND_SST_DEVICE_IHF,61	SND_SST_DEVICE_VIBRA,62	SND_SST_DEVICE_HAPTIC,63	SND_SST_DEVICE_CAPTURE,64	SND_SST_DEVICE_COMPRESS,65};66 67/* PCM Parameters */68struct sst_pcm_params {69	u16 codec;	/* codec type */70	u8 num_chan;	/* 1=Mono, 2=Stereo */71	u8 pcm_wd_sz;	/* 16/24 - bit*/72	u32 reserved;	/* Bitrate in bits per second */73	u32 sfreq;	/* Sampling rate in Hz */74	u32 ring_buffer_size;75	u32 period_count;	/* period elapsed in samples*/76	u32 ring_buffer_addr;77};78 79struct sst_stream_params {80	u32 result;81	u32 stream_id;82	u8 codec;83	u8 ops;84	u8 stream_type;85	u8 device_type;86	struct sst_pcm_params sparams;87};88 89struct sst_compress_cb {90	void *param;91	void (*compr_cb)(void *param);92	void *drain_cb_param;93	void (*drain_notify)(void *param);94};95 96struct compress_sst_ops {97	const char *name;98	int (*open)(struct device *dev,99		struct snd_sst_params *str_params, struct sst_compress_cb *cb);100	int (*stream_start)(struct device *dev, unsigned int str_id);101	int (*stream_drop)(struct device *dev, unsigned int str_id);102	int (*stream_drain)(struct device *dev, unsigned int str_id);103	int (*stream_partial_drain)(struct device *dev,	unsigned int str_id);104	int (*stream_pause)(struct device *dev, unsigned int str_id);105	int (*stream_pause_release)(struct device *dev,	unsigned int str_id);106 107	int (*tstamp)(struct device *dev, unsigned int str_id,108			struct snd_compr_tstamp *tstamp);109	int (*ack)(struct device *dev, unsigned int str_id,110			unsigned long bytes);111	int (*close)(struct device *dev, unsigned int str_id);112	int (*get_caps)(struct snd_compr_caps *caps);113	int (*get_codec_caps)(struct snd_compr_codec_caps *codec);114	int (*set_metadata)(struct device *dev,	unsigned int str_id,115			struct snd_compr_metadata *mdata);116	int (*power)(struct device *dev, bool state);117};118 119struct sst_ops {120	int (*open)(struct device *dev, struct snd_sst_params *str_param);121	int (*stream_init)(struct device *dev, struct pcm_stream_info *str_info);122	int (*stream_start)(struct device *dev, int str_id);123	int (*stream_drop)(struct device *dev, int str_id);124	int (*stream_pause)(struct device *dev, int str_id);125	int (*stream_pause_release)(struct device *dev, int str_id);126	int (*stream_read_tstamp)(struct device *dev, struct pcm_stream_info *str_info);127	int (*send_byte_stream)(struct device *dev, struct snd_sst_bytes_v2 *bytes);128	int (*close)(struct device *dev, unsigned int str_id);129	int (*power)(struct device *dev, bool state);130};131 132struct sst_runtime_stream {133	int     stream_status;134	unsigned int id;135	size_t bytes_written;136	struct pcm_stream_info stream_info;137	struct sst_ops *ops;138	struct compress_sst_ops *compr_ops;139	spinlock_t	status_lock;140};141 142struct sst_device {143	char *name;144	struct device *dev;145	struct sst_ops *ops;146	struct platform_device *pdev;147	struct compress_sst_ops *compr_ops;148};149 150struct sst_data;151 152int sst_dsp_init_v2_dpcm(struct snd_soc_component *component);153int sst_send_pipe_gains(struct snd_soc_dai *dai, int stream, int mute);154int send_ssp_cmd(struct snd_soc_dai *dai, const char *id, bool enable);155int sst_handle_vb_timer(struct snd_soc_dai *dai, bool enable);156 157void sst_set_stream_status(struct sst_runtime_stream *stream, int state);158int sst_fill_stream_params(void *substream, const struct sst_data *ctx,159			   struct snd_sst_params *str_params, bool is_compress);160 161struct sst_algo_int_control_v2 {162	struct soc_mixer_control mc;163	u16 module_id; /* module identifieer */164	u16 pipe_id; /* location info: pipe_id + instance_id */165	u16 instance_id;166	unsigned int value; /* Value received is stored here */167};168struct sst_data {169	struct platform_device *pdev;170	struct sst_platform_data *pdata;171	struct snd_sst_bytes_v2 *byte_stream;172	struct mutex lock;173	struct snd_soc_card *soc_card;174	struct sst_cmd_sba_hw_set_ssp ssp_cmd;175};176int sst_register_dsp(struct sst_device *dev);177int sst_unregister_dsp(struct sst_device *dev);178#endif179