blob: 14e7778d7f80c1f335b21a26c5d4496ad2c09783 [file] [log] [blame]
Jeeja KPa40e6932015-07-09 15:20:08 +05301/*
2 * skl.h - HD Audio skylake defintions.
3 *
4 * Copyright (C) 2015 Intel Corp
5 * Author: Jeeja KP <jeeja.kp@intel.com>
6 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; version 2 of the License.
11 *
12 * This program is distributed in the hope that it will be useful, but
13 * WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * General Public License for more details.
16 *
17 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
18 *
19 */
20
21#ifndef __SOUND_SOC_SKL_H
22#define __SOUND_SOC_SKL_H
23
24#include <sound/hda_register.h>
25#include <sound/hdaudio_ext.h>
Vinod Kould14700a2017-06-30 09:06:06 +053026#include <sound/soc.h>
Jeeja KP473eb872015-07-21 23:53:55 +053027#include "skl-nhlt.h"
Jeeja KPa40e6932015-07-09 15:20:08 +053028
29#define SKL_SUSPEND_DELAY 2000
30
Dharageswari R51a01b82016-06-03 18:29:37 +053031#define AZX_PCIREG_PGCTL 0x44
32#define AZX_PGCTL_LSRMD_MASK (1 << 4)
Jayachandran B0c8ba9d2015-12-18 15:12:03 +053033#define AZX_PCIREG_CGCTL 0x48
34#define AZX_CGCTL_MISCBDCGE_MASK (1 << 6)
Pardha Saradhi Ka26a3f52016-11-03 17:07:16 +053035/* D0I3C Register fields */
36#define AZX_REG_VS_D0I3C_CIP 0x1 /* Command in progress */
37#define AZX_REG_VS_D0I3C_I3 0x4 /* D0i3 enable */
Jayachandran B0c8ba9d2015-12-18 15:12:03 +053038
Jeeja KPe4e2d2f2015-10-07 11:31:52 +010039struct skl_dsp_resource {
40 u32 max_mcps;
41 u32 max_mem;
42 u32 mcps;
43 u32 mem;
44};
45
Vinod Koul5cdf6c02017-06-30 09:06:05 +053046struct skl_debug;
47
Jeeja KPa40e6932015-07-09 15:20:08 +053048struct skl {
49 struct hdac_ext_bus ebus;
50 struct pci_dev *pci;
51
Vinod Koulab1b7322017-05-04 14:09:10 +053052 unsigned int init_done:1; /* delayed init status */
Jeeja KPa40e6932015-07-09 15:20:08 +053053 struct platform_device *dmic_dev;
Vinod Koulcc18c5f2015-11-05 21:34:13 +053054 struct platform_device *i2s_dev;
Dharageswari Rfe3f4442016-06-03 18:29:39 +053055 struct snd_soc_platform *platform;
Jeeja KP473eb872015-07-21 23:53:55 +053056
Jeeja KPc286b3f2016-05-05 11:19:19 +053057 struct nhlt_acpi_table *nhlt; /* nhlt ptr */
Jeeja KPd255b092015-07-21 23:53:56 +053058 struct skl_sst *skl_sst; /* sst skl ctx */
Jeeja KPe4e2d2f2015-10-07 11:31:52 +010059
60 struct skl_dsp_resource resource;
61 struct list_head ppl_list;
Jeeja KPb8c722d2017-03-24 23:10:34 +053062 struct list_head bind_list;
Vinod Koulaecf6fd2015-11-05 21:34:15 +053063
64 const char *fw_name;
Vinod Koul4b235c42016-02-19 11:42:34 +053065 char tplg_name[64];
66 unsigned short pci_id;
Vinod Kould8018362016-01-05 17:16:04 +053067 const struct firmware *tplg;
Jeeja KP4557c302015-12-03 23:30:00 +053068
69 int supend_active;
Vinod Koulab1b7322017-05-04 14:09:10 +053070
71 struct work_struct probe_work;
Vinod Koul5cdf6c02017-06-30 09:06:05 +053072
73 struct skl_debug *debugfs;
Jeeja KPa40e6932015-07-09 15:20:08 +053074};
75
76#define skl_to_ebus(s) (&(s)->ebus)
77#define ebus_to_skl(sbus) \
78 container_of(sbus, struct skl, sbus)
79
80/* to pass dai dma data */
81struct skl_dma_params {
82 u32 format;
83 u8 stream_tag;
84};
85
Yong Zhif65cf7d62016-05-26 21:30:15 -070086/* to pass dmic data */
87struct skl_machine_pdata {
88 u32 dmic_num;
89};
90
Jeeja KPbc23ca32016-03-11 10:12:53 +053091struct skl_dsp_ops {
92 int id;
93 struct skl_dsp_loader_ops (*loader_ops)(void);
94 int (*init)(struct device *dev, void __iomem *mmio_base,
95 int irq, const char *fw_name,
96 struct skl_dsp_loader_ops loader_ops,
97 struct skl_sst **skl_sst);
Vinod Koul78cdbbd2016-07-26 18:06:42 +053098 int (*init_fw)(struct device *dev, struct skl_sst *ctx);
Jeeja KPbc23ca32016-03-11 10:12:53 +053099 void (*cleanup)(struct device *dev, struct skl_sst *ctx);
100};
101
Jeeja KPa40e6932015-07-09 15:20:08 +0530102int skl_platform_unregister(struct device *dev);
103int skl_platform_register(struct device *dev);
104
Jeeja KPc286b3f2016-05-05 11:19:19 +0530105struct nhlt_acpi_table *skl_nhlt_init(struct device *dev);
106void skl_nhlt_free(struct nhlt_acpi_table *addr);
Jeeja KP473eb872015-07-21 23:53:55 +0530107struct nhlt_specific_cfg *skl_get_ep_blob(struct skl *skl, u32 instance,
Senthilnathan Veppurdb2f5862017-02-09 16:44:01 +0530108 u8 link_type, u8 s_fmt, u8 no_ch,
109 u32 s_rate, u8 dirn, u8 dev_type);
Jeeja KPd255b092015-07-21 23:53:56 +0530110
Yong Zhif65cf7d62016-05-26 21:30:15 -0700111int skl_get_dmic_geo(struct skl *skl);
Vinod Koul4b235c42016-02-19 11:42:34 +0530112int skl_nhlt_update_topology_bin(struct skl *skl);
Jeeja KPd255b092015-07-21 23:53:56 +0530113int skl_init_dsp(struct skl *skl);
Jeeja KPbc23ca32016-03-11 10:12:53 +0530114int skl_free_dsp(struct skl *skl);
Jayachandran B8b4a1332016-11-03 17:07:21 +0530115int skl_suspend_late_dsp(struct skl *skl);
Jeeja KPd255b092015-07-21 23:53:56 +0530116int skl_suspend_dsp(struct skl *skl);
117int skl_resume_dsp(struct skl *skl);
Dharageswari Rfe3f4442016-06-03 18:29:39 +0530118void skl_cleanup_resources(struct skl *skl);
Vinod Koul73a67582016-07-26 18:06:41 +0530119const struct skl_dsp_ops *skl_get_dsp_ops(int pci_id);
Pardha Saradhi Ka26a3f52016-11-03 17:07:16 +0530120void skl_update_d0i3c(struct device *dev, bool enable);
Subhransu S. Prusty0cf5a172017-01-11 16:31:02 +0530121int skl_nhlt_create_sysfs(struct skl *skl);
122void skl_nhlt_remove_sysfs(struct skl *skl);
Pardha Saradhi Ka26a3f52016-11-03 17:07:16 +0530123
Vinod Kould14700a2017-06-30 09:06:06 +0530124struct skl_module_cfg;
125
Vinod Koul5cdf6c02017-06-30 09:06:05 +0530126#ifdef CONFIG_DEBUG_FS
127struct skl_debug *skl_debugfs_init(struct skl *skl);
128void skl_debugfs_exit(struct skl_debug *d);
Vinod Kould14700a2017-06-30 09:06:06 +0530129void skl_debug_init_module(struct skl_debug *d,
130 struct snd_soc_dapm_widget *w,
131 struct skl_module_cfg *mconfig);
Vinod Koul5cdf6c02017-06-30 09:06:05 +0530132#else
133static inline struct skl_debug *skl_debugfs_init(struct skl *skl)
134{
135 return NULL;
136}
137static inline void skl_debugfs_exit(struct skl_debug *d)
138{}
Vinod Kould14700a2017-06-30 09:06:06 +0530139static inline void skl_debug_init_module(struct skl_debug *d,
140 struct snd_soc_dapm_widget *w,
141 struct skl_module_cfg *mconfig)
142{}
Vinod Koul5cdf6c02017-06-30 09:06:05 +0530143#endif
144
Jeeja KPa40e6932015-07-09 15:20:08 +0530145#endif /* __SOUND_SOC_SKL_H */