• Home
  • Raw
  • Download

Lines Matching +full:comp +full:- +full:disable

1 // SPDX-License-Identifier: GPL-2.0
2 // Copyright (c) 2015-2017, The Linux Foundation.
399 /* COMP */
687 struct regmap *rm = wsa881x->regmap; in wsa881x_init()
690 regmap_read(rm, WSA881X_CHIP_ID1, &wsa881x->version); in wsa881x_init()
691 regmap_register_patch(wsa881x->regmap, wsa881x_rev_2_0, in wsa881x_init()
730 static int wsa881x_component_probe(struct snd_soc_component *comp) in wsa881x_component_probe() argument
732 struct wsa881x_priv *wsa881x = snd_soc_component_get_drvdata(comp); in wsa881x_component_probe()
734 snd_soc_component_init_regmap(comp, wsa881x->regmap); in wsa881x_component_probe()
742 struct snd_soc_component *comp = snd_soc_kcontrol_component(kc); in wsa881x_put_pa_gain() local
744 (struct soc_mixer_control *)kc->private_value; in wsa881x_put_pa_gain()
745 int max = mc->max; in wsa881x_put_pa_gain()
746 unsigned int mask = (1 << fls(max)) - 1; in wsa881x_put_pa_gain()
749 max_gain = (max - ucontrol->value.integer.value[0]) & mask; in wsa881x_put_pa_gain()
764 for (val = min_gain; max_gain <= val; val--) { in wsa881x_put_pa_gain()
765 ret = snd_soc_component_update_bits(comp, in wsa881x_put_pa_gain()
770 dev_err(comp->dev, "Failed to change PA gain"); in wsa881x_put_pa_gain()
781 struct snd_soc_component *comp = snd_soc_kcontrol_component(kcontrol); in wsa881x_get_port() local
782 struct wsa881x_priv *data = snd_soc_component_get_drvdata(comp); in wsa881x_get_port()
784 (struct soc_mixer_control *)kcontrol->private_value; in wsa881x_get_port()
785 int portidx = mixer->reg; in wsa881x_get_port()
787 ucontrol->value.integer.value[0] = data->port_enable[portidx]; in wsa881x_get_port()
793 static int wsa881x_boost_ctrl(struct snd_soc_component *comp, bool enable) in wsa881x_boost_ctrl() argument
796 snd_soc_component_update_bits(comp, WSA881X_BOOST_EN_CTL, in wsa881x_boost_ctrl()
800 snd_soc_component_update_bits(comp, WSA881X_BOOST_EN_CTL, in wsa881x_boost_ctrl()
803 * 1.5ms sleep is needed after boost enable/disable as per in wsa881x_boost_ctrl()
813 struct snd_soc_component *comp = snd_soc_kcontrol_component(kcontrol); in wsa881x_set_port() local
814 struct wsa881x_priv *data = snd_soc_component_get_drvdata(comp); in wsa881x_set_port()
816 (struct soc_mixer_control *)kcontrol->private_value; in wsa881x_set_port()
817 int portidx = mixer->reg; in wsa881x_set_port()
819 if (ucontrol->value.integer.value[0]) { in wsa881x_set_port()
820 if (data->port_enable[portidx]) in wsa881x_set_port()
823 data->port_enable[portidx] = true; in wsa881x_set_port()
825 if (!data->port_enable[portidx]) in wsa881x_set_port()
828 data->port_enable[portidx] = false; in wsa881x_set_port()
832 wsa881x_boost_ctrl(comp, data->port_enable[portidx]); in wsa881x_set_port()
857 SOC_SINGLE_EXT("COMP Switch", WSA881X_PORT_COMP, 0, 1, 0,
874 static int wsa881x_visense_txfe_ctrl(struct snd_soc_component *comp, in wsa881x_visense_txfe_ctrl() argument
877 struct wsa881x_priv *wsa881x = snd_soc_component_get_drvdata(comp); in wsa881x_visense_txfe_ctrl()
880 regmap_multi_reg_write(wsa881x->regmap, wsa881x_vi_txfe_en_2_0, in wsa881x_visense_txfe_ctrl()
883 snd_soc_component_update_bits(comp, in wsa881x_visense_txfe_ctrl()
887 * 200us sleep is needed after visense txfe disable as per in wsa881x_visense_txfe_ctrl()
891 snd_soc_component_update_bits(comp, WSA881X_SPKR_PROT_FE_GAIN, in wsa881x_visense_txfe_ctrl()
897 static int wsa881x_visense_adc_ctrl(struct snd_soc_component *comp, in wsa881x_visense_adc_ctrl() argument
900 snd_soc_component_update_bits(comp, WSA881X_ADC_EN_MODU_V, BIT(7), in wsa881x_visense_adc_ctrl()
902 snd_soc_component_update_bits(comp, WSA881X_ADC_EN_MODU_I, BIT(7), in wsa881x_visense_adc_ctrl()
910 struct snd_soc_component *comp = snd_soc_dapm_to_component(w->dapm); in wsa881x_spkr_pa_event() local
911 struct wsa881x_priv *wsa881x = snd_soc_component_get_drvdata(comp); in wsa881x_spkr_pa_event()
915 snd_soc_component_update_bits(comp, WSA881X_SPKR_OCP_CTL, in wsa881x_spkr_pa_event()
918 regmap_multi_reg_write(wsa881x->regmap, wsa881x_pre_pmu_pa_2_0, in wsa881x_spkr_pa_event()
921 snd_soc_component_update_bits(comp, WSA881X_SPKR_DRV_GAIN, in wsa881x_spkr_pa_event()
926 if (wsa881x->port_prepared[WSA881X_PORT_VISENSE]) { in wsa881x_spkr_pa_event()
927 wsa881x_visense_txfe_ctrl(comp, true); in wsa881x_spkr_pa_event()
928 snd_soc_component_update_bits(comp, in wsa881x_spkr_pa_event()
931 wsa881x_visense_adc_ctrl(comp, true); in wsa881x_spkr_pa_event()
936 if (wsa881x->port_prepared[WSA881X_PORT_VISENSE]) { in wsa881x_spkr_pa_event()
937 wsa881x_visense_adc_ctrl(comp, false); in wsa881x_spkr_pa_event()
938 wsa881x_visense_txfe_ctrl(comp, false); in wsa881x_spkr_pa_event()
941 snd_soc_component_update_bits(comp, WSA881X_SPKR_OCP_CTL, in wsa881x_spkr_pa_event()
972 struct wsa881x_priv *wsa881x = dev_get_drvdata(dai->dev); in wsa881x_hw_params()
975 wsa881x->active_ports = 0; in wsa881x_hw_params()
977 if (!wsa881x->port_enable[i]) in wsa881x_hw_params()
980 wsa881x->port_config[wsa881x->active_ports] = in wsa881x_hw_params()
982 wsa881x->active_ports++; in wsa881x_hw_params()
985 return sdw_stream_add_slave(wsa881x->slave, &wsa881x->sconfig, in wsa881x_hw_params()
986 wsa881x->port_config, wsa881x->active_ports, in wsa881x_hw_params()
987 wsa881x->sruntime); in wsa881x_hw_params()
993 struct wsa881x_priv *wsa881x = dev_get_drvdata(dai->dev); in wsa881x_hw_free()
995 sdw_stream_remove_slave(wsa881x->slave, wsa881x->sruntime); in wsa881x_hw_free()
1003 struct wsa881x_priv *wsa881x = dev_get_drvdata(dai->dev); in wsa881x_set_sdw_stream()
1005 wsa881x->sruntime = stream; in wsa881x_set_sdw_stream()
1012 struct wsa881x_priv *wsa881x = dev_get_drvdata(dai->dev); in wsa881x_digital_mute()
1015 regmap_update_bits(wsa881x->regmap, WSA881X_SPKR_DRV_EN, 0x80, in wsa881x_digital_mute()
1018 regmap_update_bits(wsa881x->regmap, WSA881X_SPKR_DRV_EN, 0x80, in wsa881x_digital_mute()
1062 struct wsa881x_priv *wsa881x = dev_get_drvdata(&slave->dev); in wsa881x_update_status()
1064 if (status == SDW_SLAVE_ATTACHED && slave->dev_num > 0) in wsa881x_update_status()
1074 struct wsa881x_priv *wsa881x = dev_get_drvdata(&slave->dev); in wsa881x_port_prep()
1077 wsa881x->port_prepared[prepare_ch->num - 1] = true; in wsa881x_port_prep()
1079 wsa881x->port_prepared[prepare_ch->num - 1] = false; in wsa881x_port_prep()
1087 sdw_write(slave, SWRS_SCP_HOST_CLK_DIV2_CTL_BANK(params->next_bank), in wsa881x_bus_config()
1104 wsa881x = devm_kzalloc(&pdev->dev, sizeof(*wsa881x), GFP_KERNEL); in wsa881x_probe()
1106 return -ENOMEM; in wsa881x_probe()
1108 wsa881x->sd_n = devm_gpiod_get_optional(&pdev->dev, "powerdown", in wsa881x_probe()
1110 if (IS_ERR(wsa881x->sd_n)) { in wsa881x_probe()
1111 dev_err(&pdev->dev, "Shutdown Control GPIO not found\n"); in wsa881x_probe()
1112 return PTR_ERR(wsa881x->sd_n); in wsa881x_probe()
1115 dev_set_drvdata(&pdev->dev, wsa881x); in wsa881x_probe()
1116 wsa881x->slave = pdev; in wsa881x_probe()
1117 wsa881x->dev = &pdev->dev; in wsa881x_probe()
1118 wsa881x->sconfig.ch_count = 1; in wsa881x_probe()
1119 wsa881x->sconfig.bps = 1; in wsa881x_probe()
1120 wsa881x->sconfig.frame_rate = 48000; in wsa881x_probe()
1121 wsa881x->sconfig.direction = SDW_DATA_DIR_RX; in wsa881x_probe()
1122 wsa881x->sconfig.type = SDW_STREAM_PDM; in wsa881x_probe()
1123 pdev->prop.sink_ports = GENMASK(WSA881X_MAX_SWR_PORTS, 0); in wsa881x_probe()
1124 pdev->prop.sink_dpn_prop = wsa_sink_dpn_prop; in wsa881x_probe()
1125 pdev->prop.scp_int1_mask = SDW_SCP_INT1_BUS_CLASH | SDW_SCP_INT1_PARITY; in wsa881x_probe()
1126 gpiod_direction_output(wsa881x->sd_n, 1); in wsa881x_probe()
1128 wsa881x->regmap = devm_regmap_init_sdw(pdev, &wsa881x_regmap_config); in wsa881x_probe()
1129 if (IS_ERR(wsa881x->regmap)) { in wsa881x_probe()
1130 dev_err(&pdev->dev, "regmap_init failed\n"); in wsa881x_probe()
1131 return PTR_ERR(wsa881x->regmap); in wsa881x_probe()
1134 return devm_snd_soc_register_component(&pdev->dev, in wsa881x_probe()
1152 .name = "wsa881x-codec",