xref: /linux/sound/soc/intel/boards/sof_board_helpers.h (revision ea89a742daf4317038fbab6776d36726dd7a1e2a)
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 /*
3  * Copyright(c) 2023 Intel Corporation.
4  */
5 
6 #ifndef __SOF_INTEL_BOARD_HELPERS_H
7 #define __SOF_INTEL_BOARD_HELPERS_H
8 
9 #include <sound/soc.h>
10 #include "sof_hdmi_common.h"
11 #include "sof_ssp_common.h"
12 
13 enum {
14 	SOF_LINK_NONE = 0,
15 	SOF_LINK_CODEC,
16 	SOF_LINK_DMIC01,
17 	SOF_LINK_DMIC16K,
18 	SOF_LINK_IDISP_HDMI,
19 	SOF_LINK_AMP,
20 	SOF_LINK_BT_OFFLOAD,
21 	SOF_LINK_HDMI_IN,
22 };
23 
24 #define SOF_LINK_ORDER_MASK	(0xF)
25 #define SOF_LINK_ORDER_SHIFT	(4)
26 
27 #define SOF_LINK_ORDER(k1, k2, k3, k4, k5, k6, k7) \
28 	((((k1) & SOF_LINK_ORDER_MASK) << (SOF_LINK_ORDER_SHIFT * 0)) | \
29 	 (((k2) & SOF_LINK_ORDER_MASK) << (SOF_LINK_ORDER_SHIFT * 1)) | \
30 	 (((k3) & SOF_LINK_ORDER_MASK) << (SOF_LINK_ORDER_SHIFT * 2)) | \
31 	 (((k4) & SOF_LINK_ORDER_MASK) << (SOF_LINK_ORDER_SHIFT * 3)) | \
32 	 (((k5) & SOF_LINK_ORDER_MASK) << (SOF_LINK_ORDER_SHIFT * 4)) | \
33 	 (((k6) & SOF_LINK_ORDER_MASK) << (SOF_LINK_ORDER_SHIFT * 5)) | \
34 	 (((k7) & SOF_LINK_ORDER_MASK) << (SOF_LINK_ORDER_SHIFT * 6)))
35 
36 /*
37  * sof_rt5682_private: private data for rt5682 machine driver
38  *
39  * @mclk: mclk clock data
40  * @is_legacy_cpu: true for BYT/CHT boards
41  */
42 struct sof_rt5682_private {
43 	struct clk *mclk;
44 	bool is_legacy_cpu;
45 };
46 
47 /*
48  * sof_card_private: common data for machine drivers
49  *
50  * @headset_jack: headset jack data
51  * @hdmi: init data for hdmi dai link
52  * @codec_type: type of headset codec
53  * @amp_type: type of speaker amplifier
54  * @dmic_be_num: number of Intel PCH DMIC BE link
55  * @hdmi_num: number of Intel HDMI BE link
56  * @ssp_codec: ssp port number of headphone BE link
57  * @ssp_amp: ssp port number of speaker BE link
58  * @ssp_bt: ssp port number of BT offload BE link
59  * @ssp_mask_hdmi_in: ssp port mask of HDMI-IN BE link
60  * @bt_offload_present: true to create BT offload BE link
61  * @codec_link: pointer to headset codec dai link
62  * @amp_link: pointer to speaker amplifier dai link
63  * @link_order_overwrite: custom DAI link order
64  * @rt5682: private data for rt5682 machine driver
65  */
66 struct sof_card_private {
67 	struct snd_soc_jack headset_jack;
68 	struct sof_hdmi_private hdmi;
69 
70 	enum sof_ssp_codec codec_type;
71 	enum sof_ssp_codec amp_type;
72 
73 	int dmic_be_num;
74 	int hdmi_num;
75 
76 	int ssp_codec;
77 	int ssp_amp;
78 	int ssp_bt;
79 	unsigned long ssp_mask_hdmi_in;
80 
81 	bool bt_offload_present;
82 
83 	struct snd_soc_dai_link *codec_link;
84 	struct snd_soc_dai_link *amp_link;
85 
86 	unsigned long link_order_overwrite;
87 
88 	union {
89 		struct sof_rt5682_private rt5682;
90 	};
91 };
92 
93 enum sof_dmic_be_type {
94 	SOF_DMIC_01,
95 	SOF_DMIC_16K,
96 };
97 
98 int sof_intel_board_card_late_probe(struct snd_soc_card *card);
99 int sof_intel_board_set_dai_link(struct device *dev, struct snd_soc_card *card,
100 				 struct sof_card_private *ctx);
101 
102 int sof_intel_board_set_codec_link(struct device *dev,
103 				   struct snd_soc_dai_link *link, int be_id,
104 				   enum sof_ssp_codec codec_type, int ssp_codec);
105 int sof_intel_board_set_dmic_link(struct device *dev,
106 				  struct snd_soc_dai_link *link, int be_id,
107 				  enum sof_dmic_be_type be_type);
108 int sof_intel_board_set_intel_hdmi_link(struct device *dev,
109 					struct snd_soc_dai_link *link, int be_id,
110 					int hdmi_id, bool idisp_codec);
111 int sof_intel_board_set_ssp_amp_link(struct device *dev,
112 				     struct snd_soc_dai_link *link, int be_id,
113 				     enum sof_ssp_codec amp_type, int ssp_amp);
114 int sof_intel_board_set_bt_link(struct device *dev,
115 				struct snd_soc_dai_link *link, int be_id,
116 				int ssp_bt);
117 int sof_intel_board_set_hdmi_in_link(struct device *dev,
118 				     struct snd_soc_dai_link *link, int be_id,
119 				     int ssp_hdmi);
120 
121 struct snd_soc_dai *get_codec_dai_by_name(struct snd_soc_pcm_runtime *rtd,
122 					  const char * const dai_name[], int num_dais);
123 
124 #endif /* __SOF_INTEL_BOARD_HELPERS_H */
125