Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

ASoC: codecs: wcd-common: move WCD_SDW_CH to common

sdw_ch_info and WCD_SDW_CH macro is duplicated across wcd937x, wcd938x,
wcd939x soundwire codec drivers. Move this to wcd common driver to
remove this code duplication.

Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@oss.qualcomm.com>
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
Link: https://patch.msgid.link/20250909121954.225833-9-srinivas.kandagatla@oss.qualcomm.com
Signed-off-by: Mark Brown <broonie@kernel.org>

authored by

Srinivas Kandagatla and committed by
Mark Brown
4652f02c 4f16b635

+28 -47
+13
sound/soc/codecs/wcd-common.h
··· 14 14 15 15 #define WCD_MAX_MICBIAS 4 16 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 + 17 30 struct wcd_common { 18 31 struct device *dev; 19 32 int max_bias;
+2 -2
sound/soc/codecs/wcd937x-sdw.c
··· 19 19 #include <sound/soc.h> 20 20 #include "wcd937x.h" 21 21 22 - static struct wcd937x_sdw_ch_info wcd937x_sdw_rx_ch_info[] = { 22 + static struct wcd_sdw_ch_info wcd937x_sdw_rx_ch_info[] = { 23 23 WCD_SDW_CH(WCD937X_HPH_L, WCD937X_HPH_PORT, BIT(0)), 24 24 WCD_SDW_CH(WCD937X_HPH_R, WCD937X_HPH_PORT, BIT(1)), 25 25 WCD_SDW_CH(WCD937X_CLSH, WCD937X_CLSH_PORT, BIT(0)), ··· 30 30 WCD_SDW_CH(WCD937X_DSD_R, WCD937X_DSD_PORT, BIT(1)), 31 31 }; 32 32 33 - static struct wcd937x_sdw_ch_info wcd937x_sdw_tx_ch_info[] = { 33 + static struct wcd_sdw_ch_info wcd937x_sdw_tx_ch_info[] = { 34 34 WCD_SDW_CH(WCD937X_ADC1, WCD937X_ADC_1_PORT, BIT(0)), 35 35 WCD_SDW_CH(WCD937X_ADC2, WCD937X_ADC_2_3_PORT, BIT(0)), 36 36 WCD_SDW_CH(WCD937X_ADC3, WCD937X_ADC_2_3_PORT, BIT(0)),
+1 -1
sound/soc/codecs/wcd937x.c
··· 1183 1183 static int wcd937x_connect_port(struct wcd937x_sdw_priv *wcd, u8 port_idx, u8 ch_id, bool enable) 1184 1184 { 1185 1185 struct sdw_port_config *port_config = &wcd->port_config[port_idx - 1]; 1186 - const struct wcd937x_sdw_ch_info *ch_info = &wcd->ch_info[ch_id]; 1186 + const struct wcd_sdw_ch_info *ch_info = &wcd->ch_info[ch_id]; 1187 1187 u8 port_num = ch_info->port_num; 1188 1188 u8 ch_mask = ch_info->ch_mask; 1189 1189 u8 mstr_port_num, mstr_ch_mask;
+2 -14
sound/soc/codecs/wcd937x.h
··· 7 7 8 8 #include <linux/soundwire/sdw.h> 9 9 #include <linux/soundwire/sdw_type.h> 10 + #include "wcd-common.h" 10 11 11 12 #define WCD937X_BASE_ADDRESS 0x3000 12 13 #define WCD937X_ANA_BIAS 0x3001 ··· 508 507 WCD937X_MAX_SWR_PORTS = WCD937X_DSD_PORT, 509 508 }; 510 509 511 - struct wcd937x_sdw_ch_info { 512 - int port_num; 513 - unsigned int ch_mask; 514 - unsigned int master_ch_mask; 515 - }; 516 - 517 - #define WCD_SDW_CH(id, pn, cmask) \ 518 - [id] = { \ 519 - .port_num = pn, \ 520 - .ch_mask = cmask, \ 521 - .master_ch_mask = cmask, \ 522 - } 523 - 524 510 struct wcd937x_priv; 525 511 struct wcd937x_sdw_priv { 526 512 struct sdw_slave *sdev; 527 513 struct sdw_stream_config sconfig; 528 514 struct sdw_stream_runtime *sruntime; 529 515 struct sdw_port_config port_config[WCD937X_MAX_SWR_PORTS]; 530 - struct wcd937x_sdw_ch_info *ch_info; 516 + struct wcd_sdw_ch_info *ch_info; 531 517 bool port_enable[WCD937X_MAX_SWR_CH_IDS]; 532 518 unsigned int master_channel_map[SDW_MAX_PORTS]; 533 519 int active_ports;
+3 -2
sound/soc/codecs/wcd938x-sdw.c
··· 18 18 #include <sound/soc.h> 19 19 #include <sound/soc-dapm.h> 20 20 #include "wcd938x.h" 21 + #include "wcd-common.h" 21 22 22 23 #define SWRS_SCP_HOST_CLK_DIV2_CTL_BANK(m) (0xE0 + 0x10 * (m)) 23 24 24 - static const struct wcd938x_sdw_ch_info wcd938x_sdw_rx_ch_info[] = { 25 + static const struct wcd_sdw_ch_info wcd938x_sdw_rx_ch_info[] = { 25 26 WCD_SDW_CH(WCD938X_HPH_L, WCD938X_HPH_PORT, BIT(0)), 26 27 WCD_SDW_CH(WCD938X_HPH_R, WCD938X_HPH_PORT, BIT(1)), 27 28 WCD_SDW_CH(WCD938X_CLSH, WCD938X_CLSH_PORT, BIT(0)), ··· 33 32 WCD_SDW_CH(WCD938X_DSD_R, WCD938X_DSD_PORT, BIT(1)), 34 33 }; 35 34 36 - static const struct wcd938x_sdw_ch_info wcd938x_sdw_tx_ch_info[] = { 35 + static const struct wcd_sdw_ch_info wcd938x_sdw_tx_ch_info[] = { 37 36 WCD_SDW_CH(WCD938X_ADC1, WCD938X_ADC_1_2_PORT, BIT(0)), 38 37 WCD_SDW_CH(WCD938X_ADC2, WCD938X_ADC_1_2_PORT, BIT(1)), 39 38 WCD_SDW_CH(WCD938X_ADC3, WCD938X_ADC_3_4_PORT, BIT(0)),
+1 -1
sound/soc/codecs/wcd938x.c
··· 394 394 395 395 } 396 396 397 - static int wcd938x_sdw_connect_port(const struct wcd938x_sdw_ch_info *ch_info, 397 + static int wcd938x_sdw_connect_port(const struct wcd_sdw_ch_info *ch_info, 398 398 struct sdw_port_config *port_config, 399 399 u8 enable) 400 400 {
+1 -12
sound/soc/codecs/wcd938x.h
··· 587 587 588 588 #define WCD938X_MAX_SWR_CH_IDS 15 589 589 590 - struct wcd938x_sdw_ch_info { 591 - int port_num; 592 - unsigned int ch_mask; 593 - }; 594 - 595 - #define WCD_SDW_CH(id, pn, cmask) \ 596 - [id] = { \ 597 - .port_num = pn, \ 598 - .ch_mask = cmask, \ 599 - } 600 - 601 590 enum wcd938x_tx_sdw_ports { 602 591 WCD938X_ADC_1_2_PORT = 1, 603 592 WCD938X_ADC_3_4_PORT, ··· 638 649 struct sdw_stream_config sconfig; 639 650 struct sdw_stream_runtime *sruntime; 640 651 struct sdw_port_config port_config[WCD938X_MAX_SWR_PORTS]; 641 - const struct wcd938x_sdw_ch_info *ch_info; 652 + const struct wcd_sdw_ch_info *ch_info; 642 653 bool port_enable[WCD938X_MAX_SWR_CH_IDS]; 643 654 int active_ports; 644 655 bool is_tx;
+3 -2
sound/soc/codecs/wcd939x-sdw.c
··· 20 20 #include <sound/soc.h> 21 21 #include <sound/soc-dapm.h> 22 22 #include "wcd939x.h" 23 + #include "wcd-common.h" 23 24 24 25 #define SWRS_SCP_HOST_CLK_DIV2_CTL_BANK(m) (0xE0 + 0x10 * (m)) 25 26 26 - static const struct wcd939x_sdw_ch_info wcd939x_sdw_rx_ch_info[] = { 27 + static const struct wcd_sdw_ch_info wcd939x_sdw_rx_ch_info[] = { 27 28 WCD_SDW_CH(WCD939X_HPH_L, WCD939X_HPH_PORT, BIT(0)), 28 29 WCD_SDW_CH(WCD939X_HPH_R, WCD939X_HPH_PORT, BIT(1)), 29 30 WCD_SDW_CH(WCD939X_CLSH, WCD939X_CLSH_PORT, BIT(0)), ··· 37 36 WCD_SDW_CH(WCD939X_HIFI_PCM_R, WCD939X_HIFI_PCM_PORT, BIT(1)), 38 37 }; 39 38 40 - static const struct wcd939x_sdw_ch_info wcd939x_sdw_tx_ch_info[] = { 39 + static const struct wcd_sdw_ch_info wcd939x_sdw_tx_ch_info[] = { 41 40 WCD_SDW_CH(WCD939X_ADC1, WCD939X_ADC_1_4_PORT, BIT(0)), 42 41 WCD_SDW_CH(WCD939X_ADC2, WCD939X_ADC_1_4_PORT, BIT(1)), 43 42 WCD_SDW_CH(WCD939X_ADC3, WCD939X_ADC_1_4_PORT, BIT(2)),
+1 -1
sound/soc/codecs/wcd939x.c
··· 413 413 return 0; 414 414 } 415 415 416 - static int wcd939x_sdw_connect_port(const struct wcd939x_sdw_ch_info *ch_info, 416 + static int wcd939x_sdw_connect_port(const struct wcd_sdw_ch_info *ch_info, 417 417 struct sdw_port_config *port_config, 418 418 u8 enable) 419 419 {
+1 -12
sound/soc/codecs/wcd939x.h
··· 844 844 845 845 #define WCD939X_MAX_SWR_CH_IDS (15) 846 846 847 - struct wcd939x_sdw_ch_info { 848 - int port_num; 849 - unsigned int ch_mask; 850 - }; 851 - 852 - #define WCD_SDW_CH(id, pn, cmask) \ 853 - [id] = { \ 854 - .port_num = pn, \ 855 - .ch_mask = cmask, \ 856 - } 857 - 858 847 enum wcd939x_tx_sdw_ports { 859 848 WCD939X_ADC_1_4_PORT = 1, 860 849 WCD939X_ADC_DMIC_1_2_PORT, ··· 898 909 struct sdw_stream_config sconfig; 899 910 struct sdw_stream_runtime *sruntime; 900 911 struct sdw_port_config port_config[WCD939X_MAX_SWR_PORTS]; 901 - const struct wcd939x_sdw_ch_info *ch_info; 912 + const struct wcd_sdw_ch_info *ch_info; 902 913 bool port_enable[WCD939X_MAX_SWR_CH_IDS]; 903 914 int active_ports; 904 915 bool is_tx;