Lines Matching +full:wcd9370 +full:- +full:codec
1 // SPDX-License-Identifier: GPL-2.0-only
2 // Copyright (c) 2023-2024 Qualcomm Innovation Center, Inc. All rights reserved.
18 #include <sound/soc-dapm.h>
96 wcd->sconfig.ch_count = 1; in wcd937x_sdw_hw_params()
97 wcd->active_ports = 0; in wcd937x_sdw_hw_params()
99 ch_mask = wcd->port_config[i].ch_mask; in wcd937x_sdw_hw_params()
104 wcd->sconfig.ch_count++; in wcd937x_sdw_hw_params()
106 port_config[wcd->active_ports] = wcd->port_config[i]; in wcd937x_sdw_hw_params()
107 wcd->active_ports++; in wcd937x_sdw_hw_params()
110 wcd->sconfig.bps = 1; in wcd937x_sdw_hw_params()
111 wcd->sconfig.frame_rate = params_rate(params); in wcd937x_sdw_hw_params()
112 wcd->sconfig.direction = wcd->is_tx ? SDW_DATA_DIR_TX : SDW_DATA_DIR_RX; in wcd937x_sdw_hw_params()
113 wcd->sconfig.type = SDW_STREAM_PCM; in wcd937x_sdw_hw_params()
115 return sdw_stream_add_slave(wcd->sdev, &wcd->sconfig, in wcd937x_sdw_hw_params()
116 &port_config[0], wcd->active_ports, in wcd937x_sdw_hw_params()
117 wcd->sruntime); in wcd937x_sdw_hw_params()
123 struct wcd937x_sdw_priv *wcd = dev_get_drvdata(&slave->dev); in wcd9370_update_status()
125 if (wcd->regmap && status == SDW_SLAVE_ATTACHED) { in wcd9370_update_status()
127 regcache_cache_only(wcd->regmap, false); in wcd9370_update_status()
128 return regcache_sync(wcd->regmap); in wcd9370_update_status()
135 * Handle Soundwire out-of-band interrupt event by triggering
143 struct wcd937x_sdw_priv *wcd = dev_get_drvdata(&slave->dev); in wcd9370_interrupt_callback()
144 struct irq_domain *slave_irq = wcd->slave_irq; in wcd9370_interrupt_callback()
149 regmap_read(wcd->regmap, WCD937X_DIGITAL_INTR_STATUS_0, &sts1); in wcd9370_interrupt_callback()
150 regmap_read(wcd->regmap, WCD937X_DIGITAL_INTR_STATUS_1, &sts2); in wcd9370_interrupt_callback()
151 regmap_read(wcd->regmap, WCD937X_DIGITAL_INTR_STATUS_2, &sts3); in wcd9370_interrupt_callback()
159 /* Default values except for Read-Only & Volatile registers */
1020 struct device *dev = &pdev->dev; in wcd9370_probe()
1026 return -ENOMEM; in wcd9370_probe()
1028 /* Port map index starts at 0, however the data port for this codec start at index 1 */ in wcd9370_probe()
1029 if (of_property_read_bool(dev->of_node, "qcom,tx-port-mapping")) { in wcd9370_probe()
1030 wcd->is_tx = true; in wcd9370_probe()
1031 ret = of_property_read_u32_array(dev->of_node, "qcom,tx-port-mapping", in wcd9370_probe()
1032 &pdev->m_port_map[1], in wcd9370_probe()
1035 ret = of_property_read_u32_array(dev->of_node, "qcom,rx-port-mapping", in wcd9370_probe()
1036 &pdev->m_port_map[1], in wcd9370_probe()
1041 wcd->is_tx ? "TX" : "RX", ret); in wcd9370_probe()
1043 wcd->sdev = pdev; in wcd9370_probe()
1046 pdev->prop.scp_int1_mask = SDW_SCP_INT1_IMPL_DEF | in wcd9370_probe()
1049 pdev->prop.lane_control_support = true; in wcd9370_probe()
1050 pdev->prop.simple_clk_stop_capable = true; in wcd9370_probe()
1051 if (wcd->is_tx) { in wcd9370_probe()
1052 pdev->prop.source_ports = GENMASK(WCD937X_MAX_TX_SWR_PORTS - 1, 0); in wcd9370_probe()
1053 pdev->prop.src_dpn_prop = wcd937x_dpn_prop; in wcd9370_probe()
1054 wcd->ch_info = &wcd937x_sdw_tx_ch_info[0]; in wcd9370_probe()
1055 pdev->prop.wake_capable = true; in wcd9370_probe()
1057 wcd->regmap = devm_regmap_init_sdw(pdev, &wcd937x_regmap_config); in wcd9370_probe()
1058 if (IS_ERR(wcd->regmap)) in wcd9370_probe()
1059 return dev_err_probe(dev, PTR_ERR(wcd->regmap), in wcd9370_probe()
1062 /* Start in cache-only until device is enumerated */ in wcd9370_probe()
1063 regcache_cache_only(wcd->regmap, true); in wcd9370_probe()
1065 pdev->prop.sink_ports = GENMASK(WCD937X_MAX_SWR_PORTS - 1, 0); in wcd9370_probe()
1066 pdev->prop.sink_dpn_prop = wcd937x_dpn_prop; in wcd9370_probe()
1067 wcd->ch_info = &wcd937x_sdw_rx_ch_info[0]; in wcd9370_probe()
1083 struct device *dev = &pdev->dev; in wcd9370_remove()
1091 SDW_SLAVE_ENTRY(0x0217, 0x10a, 0), /* WCD9370 RX/TX Device ID */
1100 if (wcd->regmap) { in wcd937x_sdw_runtime_suspend()
1101 regcache_cache_only(wcd->regmap, true); in wcd937x_sdw_runtime_suspend()
1102 regcache_mark_dirty(wcd->regmap); in wcd937x_sdw_runtime_suspend()
1112 if (wcd->regmap) { in wcd937x_sdw_runtime_resume()
1113 regcache_cache_only(wcd->regmap, false); in wcd937x_sdw_runtime_resume()
1114 regcache_sync(wcd->regmap); in wcd937x_sdw_runtime_resume()
1130 .name = "wcd9370-codec",
1136 MODULE_DESCRIPTION("WCD937X SDW codec driver");