xref: /openbmc/linux/sound/soc/qcom/qdsp6/q6afe.h (revision d3839145)
17fa2d70fSSrinivas Kandagatla /* SPDX-License-Identifier: GPL-2.0 */
27fa2d70fSSrinivas Kandagatla 
37fa2d70fSSrinivas Kandagatla #ifndef __Q6AFE_H__
47fa2d70fSSrinivas Kandagatla #define __Q6AFE_H__
57fa2d70fSSrinivas Kandagatla 
67fa2d70fSSrinivas Kandagatla #include <dt-bindings/sound/qcom,q6afe.h>
77fa2d70fSSrinivas Kandagatla 
87fa2d70fSSrinivas Kandagatla #define AFE_PORT_MAX		48
97fa2d70fSSrinivas Kandagatla 
107fa2d70fSSrinivas Kandagatla #define MSM_AFE_PORT_TYPE_RX 0
117fa2d70fSSrinivas Kandagatla #define MSM_AFE_PORT_TYPE_TX 1
127fa2d70fSSrinivas Kandagatla #define AFE_MAX_PORTS AFE_PORT_MAX
137fa2d70fSSrinivas Kandagatla 
14d3839145SSrinivas Kandagatla #define Q6AFE_MAX_MI2S_LINES	4
15d3839145SSrinivas Kandagatla 
164d430d5aSSrinivas Kandagatla #define AFE_MAX_CHAN_COUNT	8
174d430d5aSSrinivas Kandagatla #define AFE_PORT_MAX_AUDIO_CHAN_CNT	0x8
184d430d5aSSrinivas Kandagatla 
197fa2d70fSSrinivas Kandagatla struct q6afe_hdmi_cfg {
207fa2d70fSSrinivas Kandagatla 	u16                  datatype;
217fa2d70fSSrinivas Kandagatla 	u16                  channel_allocation;
227fa2d70fSSrinivas Kandagatla 	u32                  sample_rate;
237fa2d70fSSrinivas Kandagatla 	u16                  bit_width;
247fa2d70fSSrinivas Kandagatla };
257fa2d70fSSrinivas Kandagatla 
264d430d5aSSrinivas Kandagatla struct q6afe_slim_cfg {
274d430d5aSSrinivas Kandagatla 	u32	sample_rate;
284d430d5aSSrinivas Kandagatla 	u16	bit_width;
294d430d5aSSrinivas Kandagatla 	u16	data_format;
304d430d5aSSrinivas Kandagatla 	u16	num_channels;
314d430d5aSSrinivas Kandagatla 	u8	ch_mapping[AFE_MAX_CHAN_COUNT];
324d430d5aSSrinivas Kandagatla };
334d430d5aSSrinivas Kandagatla 
34d3839145SSrinivas Kandagatla struct q6afe_i2s_cfg {
35d3839145SSrinivas Kandagatla 	u32	sample_rate;
36d3839145SSrinivas Kandagatla 	u16	bit_width;
37d3839145SSrinivas Kandagatla 	u16	data_format;
38d3839145SSrinivas Kandagatla 	u16	num_channels;
39d3839145SSrinivas Kandagatla 	u32	sd_line_mask;
40d3839145SSrinivas Kandagatla 	int fmt;
41d3839145SSrinivas Kandagatla };
42d3839145SSrinivas Kandagatla 
437fa2d70fSSrinivas Kandagatla struct q6afe_port_config {
447fa2d70fSSrinivas Kandagatla 	struct q6afe_hdmi_cfg hdmi;
454d430d5aSSrinivas Kandagatla 	struct q6afe_slim_cfg slim;
46d3839145SSrinivas Kandagatla 	struct q6afe_i2s_cfg i2s_cfg;
477fa2d70fSSrinivas Kandagatla };
487fa2d70fSSrinivas Kandagatla 
497fa2d70fSSrinivas Kandagatla struct q6afe_port;
507fa2d70fSSrinivas Kandagatla 
517fa2d70fSSrinivas Kandagatla struct q6afe_port *q6afe_port_get_from_id(struct device *dev, int id);
527fa2d70fSSrinivas Kandagatla int q6afe_port_start(struct q6afe_port *port);
537fa2d70fSSrinivas Kandagatla int q6afe_port_stop(struct q6afe_port *port);
547fa2d70fSSrinivas Kandagatla void q6afe_port_put(struct q6afe_port *port);
557fa2d70fSSrinivas Kandagatla int q6afe_get_port_id(int index);
567fa2d70fSSrinivas Kandagatla void q6afe_hdmi_port_prepare(struct q6afe_port *port,
577fa2d70fSSrinivas Kandagatla 			    struct q6afe_hdmi_cfg *cfg);
584d430d5aSSrinivas Kandagatla void q6afe_slim_port_prepare(struct q6afe_port *port,
594d430d5aSSrinivas Kandagatla 			  struct q6afe_slim_cfg *cfg);
60d3839145SSrinivas Kandagatla int q6afe_i2s_port_prepare(struct q6afe_port *port, struct q6afe_i2s_cfg *cfg);
617fa2d70fSSrinivas Kandagatla 
627fa2d70fSSrinivas Kandagatla #endif /* __Q6AFE_H__ */
63