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