xref: /linux/sound/soc/codecs/wcd-common.h (revision 68a052239fc4b351e961f698b824f7654a346091)
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 /*
3  * Copyright (c) 2025, Qualcomm Technologies, Inc. and/or its subsidiaries.
4  */
5 
6 #ifndef __WCD_COMMON_H__
7 #define __WCD_COMMON_H__
8 
9 struct device;
10 struct sdw_slave;
11 struct sdw_bus_params;
12 struct irq_domain;
13 enum sdw_slave_status;
14 
15 #define WCD_MAX_MICBIAS		4
16 
17 struct wcd_sdw_ch_info {
18 	int port_num;
19 	unsigned int ch_mask;
20 	unsigned int master_ch_mask;
21 };
22 
23 #define WCD_SDW_CH(id, pn, cmask)	\
24 	[id] = {			\
25 		.port_num = pn,		\
26 		.ch_mask = cmask,	\
27 		.master_ch_mask = cmask,	\
28 	}
29 
30 struct wcd_common {
31 	struct device *dev;
32 	int max_bias;
33 	u32 micb_mv[WCD_MAX_MICBIAS];
34 	u32 micb_vout[WCD_MAX_MICBIAS];
35 };
36 
37 extern const struct component_ops wcd_sdw_component_ops;
38 int wcd_get_micb_vout_ctl_val(struct device *dev, u32 micb_mv);
39 int wcd_dt_parse_micbias_info(struct wcd_common *common);
40 int wcd_update_status(struct sdw_slave *slave, enum sdw_slave_status status);
41 int wcd_bus_config(struct sdw_slave *slave, struct sdw_bus_params *params);
42 int wcd_interrupt_callback(struct sdw_slave *slave, struct irq_domain *slave_irq,
43 		unsigned int wcd_intr_status0, unsigned int wcd_intr_status1,
44 		unsigned int wcd_intr_status2);
45 
46 #endif /* __WCD_COMMON_H__  */
47