2012-10-11 11:54:02 +09:00
/*
* wm_adsp . h - - Wolfson ADSP support
*
* Copyright 2012 Wolfson Microelectronics plc
*
* Author : Mark Brown < broonie @ opensource . wolfsonmicro . com >
*
* 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 __WM_ADSP_H
# define __WM_ADSP_H
# include <sound/soc.h>
# include <sound/soc-dapm.h>
# include "wmfw.h"
struct wm_adsp_region {
int type ;
unsigned int base ;
} ;
2013-01-08 16:09:31 +00:00
struct wm_adsp_alg_region {
struct list_head list ;
unsigned int alg ;
int type ;
unsigned int base ;
} ;
2012-10-11 11:54:02 +09:00
struct wm_adsp {
const char * part ;
int num ;
int type ;
struct device * dev ;
struct regmap * regmap ;
2013-08-01 11:11:28 +01:00
struct snd_soc_card * card ;
2012-10-11 11:54:02 +09:00
int base ;
2013-01-18 08:43:09 +00:00
int sysclk_reg ;
int sysclk_mask ;
int sysclk_shift ;
2012-10-11 11:54:02 +09:00
2013-01-08 16:09:31 +00:00
struct list_head alg_regions ;
2013-03-05 22:39:54 +08:00
int fw_id ;
2015-06-11 11:32:32 +01:00
int fw_id_version ;
2013-03-05 22:39:54 +08:00
2012-10-11 11:54:02 +09:00
const struct wm_adsp_region * mem ;
int num_mems ;
2012-11-28 17:20:32 +00:00
2013-01-11 22:58:28 +00:00
int fw ;
2015-04-13 13:28:02 +01:00
int fw_ver ;
2015-09-26 15:04:07 -07:00
bool running ;
2013-01-11 22:58:28 +00:00
2013-07-29 13:51:59 +01:00
struct list_head ctl_list ;
2014-01-08 17:42:18 +00:00
struct work_struct boot_work ;
2015-06-11 11:32:32 +01:00
# ifdef CONFIG_DEBUG_FS
struct dentry * debugfs_root ;
struct mutex debugfs_lock ;
char * wmfw_file_name ;
char * bin_file_name ;
# endif
2012-10-11 11:54:02 +09:00
} ;
# define WM_ADSP1(wname, num) \
2013-06-19 19:34:02 +02:00
SND_SOC_DAPM_PGA_E ( wname , SND_SOC_NOPM , num , 0 , NULL , 0 , \
wm_adsp1_event , SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD )
2012-10-11 11:54:02 +09:00
2015-06-02 11:53:34 +01:00
# define WM_ADSP2_E(wname, num, event_fn) \
2014-01-08 17:42:19 +00:00
{ . id = snd_soc_dapm_dai_link , . name = wname " Preloader " , \
2015-06-02 11:53:34 +01:00
. reg = SND_SOC_NOPM , . shift = num , . event = event_fn , \
. event_flags = SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD } , \
2014-01-08 17:42:19 +00:00
{ . id = snd_soc_dapm_out_drv , . name = wname , \
. reg = SND_SOC_NOPM , . shift = num , . event = wm_adsp2_event , \
. event_flags = SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD }
2012-10-11 11:54:02 +09:00
2015-06-02 11:53:34 +01:00
# define WM_ADSP2(wname, num) \
WM_ADSP2_E ( wname , num , wm_adsp2_early_event )
2015-06-18 13:43:19 +01:00
extern const struct snd_kcontrol_new wm_adsp_fw_controls [ ] ;
2013-01-11 22:58:28 +00:00
2015-04-13 13:27:54 +01:00
int wm_adsp1_init ( struct wm_adsp * dsp ) ;
2015-06-02 11:53:34 +01:00
int wm_adsp2_init ( struct wm_adsp * dsp ) ;
2015-06-11 11:32:30 +01:00
int wm_adsp2_codec_probe ( struct wm_adsp * dsp , struct snd_soc_codec * codec ) ;
int wm_adsp2_codec_remove ( struct wm_adsp * dsp , struct snd_soc_codec * codec ) ;
2012-10-11 11:54:02 +09:00
int wm_adsp1_event ( struct snd_soc_dapm_widget * w ,
struct snd_kcontrol * kcontrol , int event ) ;
2014-01-08 17:42:19 +00:00
int wm_adsp2_early_event ( struct snd_soc_dapm_widget * w ,
struct snd_kcontrol * kcontrol , int event ) ;
2012-10-11 11:54:02 +09:00
int wm_adsp2_event ( struct snd_soc_dapm_widget * w ,
struct snd_kcontrol * kcontrol , int event ) ;
# endif