blob: a383da363d9bfe7c4eb86ab8b7a9a0e3a3f3e4cb [file] [log] [blame]
/*
* dbmdx-interface.h -- DBMDX interface definitions
*
* Copyright (C) 2014 DSP Group
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*/
#ifndef _DBMDX_H
#define _DBMDX_H
#include <linux/device.h>
#include <sound/soc.h>
#define MAX_NUM_OF_INTERFACES 4
enum dbmdx_va_speeds {
DBMDX_VA_SPEED_NORMAL = 0,
DBMDX_VA_SPEED_BUFFERING,
DBMDX_VA_SPEED_MAX,
DBMDX_VA_NR_OF_SPEEDS,
};
struct va_speed {
u32 cfg;
u32 uart_baud;
u32 i2c_rate;
u32 spi_rate;
};
enum dbmdx_clocks {
DBMDX_CLK_CONSTANT = 0,
DBMDX_CLK_MASTER,
DBMDX_NR_OF_CLKS,
};
enum dbmdx_interface_type {
DBMDX_PREBOOT_INTERFACE = 0,
DBMDX_BOOT_INTERFACE,
DBMDX_CMD_INTERFACE,
DBMDX_DEBUG_INTERFACE,
DBMDX_MAX_INTERFACES,
};
struct dbmdx_platform_data {
int gpio_wakeup;
int gpio_reset;
int gpio_sv;
int gpio_d2strap1;
int gpio_d2strap1_rst_val;
int wakeup_disabled;
int wakeup_set_value;
int send_wakeup_seq;
int use_gpio_for_wakeup;
const char *cd_interfaces[MAX_NUM_OF_INTERFACES];
const char *va_firmware_name;
const char *va_preboot_firmware_name;
const char *vqe_firmware_name;
const char *vqe_non_overlay_firmware_name;
#ifdef DBMDX_VA_NS_SUPPORT
const char *va_asrp_params_firmware_name;
#endif
int firmware_id;
int clock_rates[DBMDX_NR_OF_CLKS];
int feature_va;
int feature_vqe;
int feature_fw_overlay;
unsigned int va_cfg_values;
u32 *va_cfg_value;
#ifdef DBMDX_VA_NS_SUPPORT
unsigned int va_ns_supported;
unsigned int va_ns_cfg_values;
unsigned int va_ns_num_of_configs;
u32 *va_ns_cfg_value;
#endif
unsigned int vqe_cfg_values;
u32 *vqe_cfg_value;
unsigned int vqe_modes_values;
u32 *vqe_modes_value;
int auto_buffering;
int auto_detection;
int detection_after_buffering;
int send_uevent_on_detection;
int send_uevent_after_buffering;
int uart_low_speed_enabled;
u32 va_backlog_length;
u32 va_backlog_length_okg;
int max_detection_buffer_size;
int detection_buffer_channels;
u32 min_samples_chunk_size;
u32 pcm_streaming_mode;
int buffering_timeout;
struct va_speed va_speed_cfg[DBMDX_VA_NR_OF_SPEEDS];
u32 va_mic_config[5];
u32 va_initial_mic_config;
u32 va_mic_gain_config[3];
int va_audio_channels;
u32 vqe_tdm_bypass_config;
unsigned int va_buffering_pcm_rate;
unsigned int va_recovery_disabled;
u32 multi_interface_support;
u32 boot_options;
u32 amodel_options;
int va_interfaces[DBMDX_MAX_INTERFACES];
int vqe_interfaces[DBMDX_MAX_INTERFACES];
};
int dbmdx_get_samples(struct snd_soc_codec *codec,
char *buffer, unsigned int samples);
int dbmdx_codec_lock(struct snd_soc_codec *codec);
int dbmdx_start_pcm_streaming(struct snd_soc_codec *codec,
struct snd_pcm_substream *substream);
int dbmdx_stop_pcm_streaming(struct snd_soc_codec *codec);
int dbmdx_codec_unlock(struct snd_soc_codec *codec);
#endif