Lines Matching +full:spk +full:- +full:mute

1 // SPDX-License-Identifier: GPL-2.0-or-later
2 // sma1307.c -- sma1307 ALSA SoC Audio driver
115 /* Initial register value - 6.0W SPK (8ohm load) */
256 static const DECLARE_TLV_DB_SCALE(sma1307_spk_tlv, -6000, 50, 0);
311 ucontrol->value.integer.value[0] = (int)sma1307->force_mute_status; in sma1307_force_mute_get()
322 bool change = false, val = (bool)ucontrol->value.integer.value[0]; in sma1307_force_mute_put()
324 if (sma1307->force_mute_status == val) { in sma1307_force_mute_put()
328 sma1307->force_mute_status = val; in sma1307_force_mute_put()
342 regmap_read(sma1307->regmap, SMA1307_A5_TDM1, &val1); in sma1307_tdm_slot_get()
343 regmap_read(sma1307->regmap, SMA1307_A6_TDM2, &val2); in sma1307_tdm_slot_get()
345 if (!strcmp(kcontrol->id.name, SMA1307_TDM_RX0_POS_NAME)) { in sma1307_tdm_slot_get()
346 ucontrol->value.integer.value[0] in sma1307_tdm_slot_get()
348 sma1307->tdm_slot0_rx = ucontrol->value.integer.value[0]; in sma1307_tdm_slot_get()
349 } else if (!strcmp(kcontrol->id.name, SMA1307_TDM_RX1_POS_NAME)) { in sma1307_tdm_slot_get()
350 ucontrol->value.integer.value[0] in sma1307_tdm_slot_get()
352 sma1307->tdm_slot1_rx = ucontrol->value.integer.value[0]; in sma1307_tdm_slot_get()
353 } else if (!strcmp(kcontrol->id.name, SMA1307_TDM_TX0_POS_NAME)) { in sma1307_tdm_slot_get()
354 ucontrol->value.integer.value[0] in sma1307_tdm_slot_get()
356 sma1307->tdm_slot0_tx = ucontrol->value.integer.value[0]; in sma1307_tdm_slot_get()
357 } else if (!strcmp(kcontrol->id.name, SMA1307_TDM_TX1_POS_NAME)) { in sma1307_tdm_slot_get()
358 ucontrol->value.integer.value[0] in sma1307_tdm_slot_get()
360 sma1307->tdm_slot1_tx = ucontrol->value.integer.value[0]; in sma1307_tdm_slot_get()
362 return -EINVAL; in sma1307_tdm_slot_get()
374 int val = (int)ucontrol->value.integer.value[0]; in sma1307_tdm_slot_put()
377 if (!strcmp(kcontrol->id.name, SMA1307_TDM_RX0_POS_NAME)) { in sma1307_tdm_slot_put()
378 if (sma1307->tdm_slot0_rx == val) in sma1307_tdm_slot_put()
382 sma1307->tdm_slot0_rx = val; in sma1307_tdm_slot_put()
383 regmap_update_bits(sma1307->regmap, SMA1307_A5_TDM1, in sma1307_tdm_slot_put()
386 } else if (!strcmp(kcontrol->id.name, SMA1307_TDM_RX1_POS_NAME)) { in sma1307_tdm_slot_put()
387 if (sma1307->tdm_slot1_rx == val) in sma1307_tdm_slot_put()
391 sma1307->tdm_slot1_rx = val; in sma1307_tdm_slot_put()
392 regmap_update_bits(sma1307->regmap, SMA1307_A5_TDM1, in sma1307_tdm_slot_put()
395 } else if (!strcmp(kcontrol->id.name, SMA1307_TDM_TX0_POS_NAME)) { in sma1307_tdm_slot_put()
396 if (sma1307->tdm_slot0_tx == val) in sma1307_tdm_slot_put()
400 sma1307->tdm_slot0_tx = val; in sma1307_tdm_slot_put()
401 regmap_update_bits(sma1307->regmap, SMA1307_A6_TDM2, in sma1307_tdm_slot_put()
404 } else if (!strcmp(kcontrol->id.name, SMA1307_TDM_TX1_POS_NAME)) { in sma1307_tdm_slot_put()
405 if (sma1307->tdm_slot1_tx == val) in sma1307_tdm_slot_put()
409 sma1307->tdm_slot1_tx = val; in sma1307_tdm_slot_put()
410 regmap_update_bits(sma1307->regmap, SMA1307_A6_TDM2, in sma1307_tdm_slot_put()
414 dev_err(sma1307->dev, "%s: Invalid Control ID - %s\n", in sma1307_tdm_slot_put()
415 __func__, kcontrol->id.name); in sma1307_tdm_slot_put()
416 return -EINVAL; in sma1307_tdm_slot_put()
429 ucontrol->value.integer.value[0] = (int)sma1307->sw_ot1_prot; in sma1307_sw_ot1_prot_get()
440 bool change = false, val = (bool)ucontrol->value.integer.value[0]; in sma1307_sw_ot1_prot_put()
442 if (sma1307->sw_ot1_prot == val) in sma1307_sw_ot1_prot_put()
446 sma1307->sw_ot1_prot = val; in sma1307_sw_ot1_prot_put()
459 ucontrol->value.integer.value[0] = (int)sma1307->check_fault_status; in sma1307_check_fault_status_get()
470 bool change = false, val = (bool)ucontrol->value.integer.value[0]; in sma1307_check_fault_status_put()
472 if (sma1307->check_fault_status == val) { in sma1307_check_fault_status_put()
476 sma1307->check_fault_status = val; in sma1307_check_fault_status_put()
489 ucontrol->value.integer.value[0] = sma1307->check_fault_period; in sma1307_check_fault_period_get()
501 (struct soc_mixer_control *)kcontrol->private_value; in sma1307_check_fault_period_put()
503 int val = ucontrol->value.integer.value[0]; in sma1307_check_fault_period_put()
505 if (val < mc->min || val > mc->max) in sma1307_check_fault_period_put()
506 return -EINVAL; in sma1307_check_fault_period_put()
507 if (sma1307->check_fault_period == val) { in sma1307_check_fault_period_put()
511 sma1307->check_fault_period = val; in sma1307_check_fault_period_put()
524 regmap_update_bits(sma1307->regmap, SMA1307_00_SYSTEM_CTRL, in sma1307_reset_put()
528 snd_ctl_notify(component->card->snd_card, SNDRV_CTL_EVENT_MASK_VALUE, in sma1307_reset_put()
529 &kcontrol->id); in sma1307_reset_put()
541 sma1307->binary_mode = (int)ucontrol->value.enumerated.item[0]; in sma1307_binary_mode_put()
542 if (sma1307->set.status) in sma1307_binary_mode_put()
552 regmap_update_bits(sma1307->regmap, SMA1307_A2_TOP_MAN1, in sma1307_startup()
554 regmap_update_bits(sma1307->regmap, SMA1307_00_SYSTEM_CTRL, in sma1307_startup()
557 if (sma1307->amp_mode == SMA1307_MONO_MODE) { in sma1307_startup()
558 regmap_update_bits(sma1307->regmap, in sma1307_startup()
563 regmap_update_bits(sma1307->regmap, in sma1307_startup()
569 if (sma1307->check_fault_status) { in sma1307_startup()
570 if (sma1307->check_fault_period > 0) in sma1307_startup()
572 &sma1307->check_fault_work, in sma1307_startup()
573 sma1307->check_fault_period * HZ); in sma1307_startup()
576 &sma1307->check_fault_work, in sma1307_startup()
586 cancel_delayed_work_sync(&sma1307->check_fault_work); in sma1307_shutdown()
588 regmap_update_bits(sma1307->regmap, SMA1307_0E_MUTE_VOL_CTRL, in sma1307_shutdown()
590 /* Need to wait time for mute slope */ in sma1307_shutdown()
593 regmap_update_bits(sma1307->regmap, SMA1307_10_SYSTEM_CTRL1, in sma1307_shutdown()
595 regmap_update_bits(sma1307->regmap, SMA1307_A2_TOP_MAN1, in sma1307_shutdown()
597 regmap_update_bits(sma1307->regmap, SMA1307_00_SYSTEM_CTRL, in sma1307_shutdown()
605 snd_soc_dapm_to_component(w->dapm); in sma1307_aif_in_event()
607 unsigned int mux = sma1307->dapm_aif_in; in sma1307_aif_in_event()
613 regmap_update_bits(sma1307->regmap, in sma1307_aif_in_event()
619 regmap_update_bits(sma1307->regmap, in sma1307_aif_in_event()
623 regmap_update_bits(sma1307->regmap, in sma1307_aif_in_event()
629 regmap_update_bits(sma1307->regmap, in sma1307_aif_in_event()
633 regmap_update_bits(sma1307->regmap, in sma1307_aif_in_event()
640 dev_err(sma1307->dev, "%s: Invalid value (%d)\n", in sma1307_aif_in_event()
642 return -EINVAL; in sma1307_aif_in_event()
644 sma1307->amp_mode = mux; in sma1307_aif_in_event()
654 snd_soc_dapm_to_component(w->dapm); in sma1307_sdo_setting_event()
656 unsigned int mux = sma1307->dapm_sdo_setting; in sma1307_sdo_setting_event()
662 regmap_update_bits(sma1307->regmap, in sma1307_sdo_setting_event()
666 regmap_update_bits(sma1307->regmap, in sma1307_sdo_setting_event()
675 regmap_update_bits(sma1307->regmap, in sma1307_sdo_setting_event()
679 regmap_update_bits(sma1307->regmap, in sma1307_sdo_setting_event()
688 regmap_update_bits(sma1307->regmap, in sma1307_sdo_setting_event()
692 regmap_update_bits(sma1307->regmap, in sma1307_sdo_setting_event()
701 regmap_update_bits(sma1307->regmap, in sma1307_sdo_setting_event()
708 regmap_update_bits(sma1307->regmap, in sma1307_sdo_setting_event()
715 dev_err(sma1307->dev, "%s: Invalid value (%d)\n", in sma1307_sdo_setting_event()
717 return -EINVAL; in sma1307_sdo_setting_event()
728 snd_soc_dapm_to_component(w->dapm); in sma1307_aif_out_event()
732 if (!strcmp(w->name, SMA1307_AIF_OUT0_NAME)) { in sma1307_aif_out_event()
733 mux = sma1307->dapm_aif_out0; in sma1307_aif_out_event()
736 } else if (!strcmp(w->name, SMA1307_AIF_OUT1_NAME)) { in sma1307_aif_out_event()
737 mux = sma1307->dapm_aif_out1; in sma1307_aif_out_event()
741 dev_err(sma1307->dev, "%s: Invalid widget - %s\n", in sma1307_aif_out_event()
742 __func__, w->name); in sma1307_aif_out_event()
743 return -EINVAL; in sma1307_aif_out_event()
747 regmap_update_bits(sma1307->regmap, SMA1307_09_OUTPUT_CTRL, in sma1307_aif_out_event()
758 snd_soc_dapm_to_component(w->dapm); in sma1307_sdo_event()
763 regmap_update_bits(sma1307->regmap, in sma1307_sdo_event()
767 regmap_update_bits(sma1307->regmap, in sma1307_sdo_event()
773 regmap_update_bits(sma1307->regmap, in sma1307_sdo_event()
777 regmap_update_bits(sma1307->regmap, in sma1307_sdo_event()
790 snd_soc_dapm_to_component(w->dapm); in sma1307_power_event()
809 snd_soc_component_get_drvdata(dapm->component); in sma1307_dapm_aif_in_get()
811 ucontrol->value.enumerated.item[0] = (unsigned int)sma1307->dapm_aif_in; in sma1307_dapm_aif_in_get()
823 snd_soc_component_get_drvdata(dapm->component); in sma1307_dapm_aif_in_put()
824 int val = (int)ucontrol->value.enumerated.item[0]; in sma1307_dapm_aif_in_put()
828 dev_err(sma1307->dev, "%s: Out of range\n", __func__); in sma1307_dapm_aif_in_put()
829 return -EINVAL; in sma1307_dapm_aif_in_put()
832 if (sma1307->dapm_aif_in != val) { in sma1307_dapm_aif_in_put()
834 sma1307->dapm_aif_in = val; in sma1307_dapm_aif_in_put()
849 snd_soc_component_get_drvdata(dapm->component); in sma1307_dapm_sdo_setting_get()
851 ucontrol->value.enumerated.item[0] = in sma1307_dapm_sdo_setting_get()
852 (unsigned int)sma1307->dapm_sdo_setting; in sma1307_dapm_sdo_setting_get()
864 snd_soc_component_get_drvdata(dapm->component); in sma1307_dapm_sdo_setting_put()
865 int val = (int)ucontrol->value.enumerated.item[0]; in sma1307_dapm_sdo_setting_put()
869 dev_err(sma1307->dev, "%s: Out of range\n", __func__); in sma1307_dapm_sdo_setting_put()
870 return -EINVAL; in sma1307_dapm_sdo_setting_put()
873 if (sma1307->dapm_sdo_setting != val) { in sma1307_dapm_sdo_setting_put()
875 sma1307->dapm_sdo_setting = val; in sma1307_dapm_sdo_setting_put()
890 snd_soc_component_get_drvdata(dapm->component); in sma1307_dapm_aif_out_get()
893 if (!strcmp(kcontrol->id.name, SMA1307_AIF_OUT0_NAME)) { in sma1307_dapm_aif_out_get()
894 val = (unsigned int)sma1307->dapm_aif_out0; in sma1307_dapm_aif_out_get()
895 } else if (!strcmp(kcontrol->id.name, SMA1307_AIF_OUT1_NAME)) { in sma1307_dapm_aif_out_get()
896 val = (unsigned int)sma1307->dapm_aif_out1; in sma1307_dapm_aif_out_get()
898 dev_err(sma1307->dev, "%s: Invalid Control ID - %s\n", in sma1307_dapm_aif_out_get()
899 __func__, kcontrol->id.name); in sma1307_dapm_aif_out_get()
900 return -EINVAL; in sma1307_dapm_aif_out_get()
902 ucontrol->value.enumerated.item[0] = val; in sma1307_dapm_aif_out_get()
914 snd_soc_component_get_drvdata(dapm->component); in sma1307_dapm_aif_out_put()
915 int val = (int)ucontrol->value.enumerated.item[0]; in sma1307_dapm_aif_out_put()
919 dev_err(sma1307->dev, "%s: Out of range\n", __func__); in sma1307_dapm_aif_out_put()
920 return -EINVAL; in sma1307_dapm_aif_out_put()
923 if (!strcmp(kcontrol->id.name, SMA1307_AIF_OUT0_NAME)) { in sma1307_dapm_aif_out_put()
924 if (sma1307->dapm_aif_out0 != val) { in sma1307_dapm_aif_out_put()
926 sma1307->dapm_aif_out0 = val; in sma1307_dapm_aif_out_put()
929 } else if (!strcmp(kcontrol->id.name, SMA1307_AIF_OUT1_NAME)) { in sma1307_dapm_aif_out_put()
930 if (sma1307->dapm_aif_out1 != val) { in sma1307_dapm_aif_out_put()
932 sma1307->dapm_aif_out1 = val; in sma1307_dapm_aif_out_put()
936 dev_err(sma1307->dev, "%s: Invalid Control ID - %s\n", in sma1307_dapm_aif_out_put()
937 __func__, kcontrol->id.name); in sma1307_dapm_aif_out_put()
938 return -EINVAL; in sma1307_dapm_aif_out_put()
952 snd_soc_component_get_drvdata(dapm->component); in sma1307_dapm_sdo_enable_get()
954 ucontrol->value.integer.value[0] = (long)sma1307->dapm_sdo_en; in sma1307_dapm_sdo_enable_get()
966 snd_soc_component_get_drvdata(dapm->component); in sma1307_dapm_sdo_enable_put()
967 int val = (int)ucontrol->value.integer.value[0]; in sma1307_dapm_sdo_enable_put()
971 dev_err(sma1307->dev, "%s: Out of range\n", __func__); in sma1307_dapm_sdo_enable_put()
972 return -EINVAL; in sma1307_dapm_sdo_enable_put()
975 if (sma1307->dapm_sdo_en != val) { in sma1307_dapm_sdo_enable_put()
977 sma1307->dapm_sdo_en = val; in sma1307_dapm_sdo_enable_put()
1066 SND_SOC_DAPM_OUTPUT("SPK"),
1142 { "SPK", NULL, "AMP Enable" },
1155 dev_dbg(component->dev, "%s: BCLK = %dHz\n", __func__, bclk); in sma1307_setup_pll()
1157 if (sma1307->sys_clk_id == SMA1307_PLL_CLKIN_MCLK) { in sma1307_setup_pll()
1158 dev_warn(component->dev, "%s: MCLK is not supported\n", in sma1307_setup_pll()
1160 } else if (sma1307->sys_clk_id == SMA1307_PLL_CLKIN_BCLK) { in sma1307_setup_pll()
1161 for (i = 0; i < sma1307->num_of_pll_matches; i++) { in sma1307_setup_pll()
1162 if (sma1307->pll_matches[i].input_clk == bclk) in sma1307_setup_pll()
1165 if (i == sma1307->num_of_pll_matches) { in sma1307_setup_pll()
1166 dev_warn(component->dev, in sma1307_setup_pll()
1172 regmap_update_bits(sma1307->regmap, in sma1307_setup_pll()
1177 regmap_write(sma1307->regmap, SMA1307_8B_PLL_POST_N, in sma1307_setup_pll()
1178 sma1307->pll_matches[i].post_n); in sma1307_setup_pll()
1179 regmap_write(sma1307->regmap, SMA1307_8C_PLL_N, in sma1307_setup_pll()
1180 sma1307->pll_matches[i].n); in sma1307_setup_pll()
1181 regmap_write(sma1307->regmap, SMA1307_8D_PLL_A_SETTING, in sma1307_setup_pll()
1182 sma1307->pll_matches[i].vco); in sma1307_setup_pll()
1183 regmap_write(sma1307->regmap, SMA1307_8E_PLL_P_CP, in sma1307_setup_pll()
1184 sma1307->pll_matches[i].p_cp); in sma1307_setup_pll()
1191 struct snd_soc_component *component = dai->component; in sma1307_dai_hw_params_amp()
1195 if (sma1307->format == SND_SOC_DAIFMT_DSP_A) in sma1307_dai_hw_params_amp()
1196 bclk = params_rate(params) * sma1307->frame_size; in sma1307_dai_hw_params_amp()
1201 dev_dbg(component->dev, in sma1307_dai_hw_params_amp()
1206 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) { in sma1307_dai_hw_params_amp()
1207 if (sma1307->sys_clk_id == SMA1307_PLL_CLKIN_BCLK) { in sma1307_dai_hw_params_amp()
1208 if (sma1307->last_bclk != bclk) { in sma1307_dai_hw_params_amp()
1210 sma1307->last_bclk = bclk; in sma1307_dai_hw_params_amp()
1225 dev_warn(component->dev, in sma1307_dai_hw_params_amp()
1231 dev_err(component->dev, "%s: not support rate : %d\n", in sma1307_dai_hw_params_amp()
1234 return -EINVAL; in sma1307_dai_hw_params_amp()
1237 /* substream->stream is SNDRV_PCM_STREAM_CAPTURE */ in sma1307_dai_hw_params_amp()
1242 regmap_update_bits(sma1307->regmap, in sma1307_dai_hw_params_amp()
1252 regmap_update_bits(sma1307->regmap, in sma1307_dai_hw_params_amp()
1262 regmap_update_bits(sma1307->regmap, in sma1307_dai_hw_params_amp()
1271 dev_err(component->dev, in sma1307_dai_hw_params_amp()
1274 return -EINVAL; in sma1307_dai_hw_params_amp()
1278 switch (sma1307->format) { in sma1307_dai_hw_params_amp()
1280 regmap_update_bits(sma1307->regmap, in sma1307_dai_hw_params_amp()
1284 regmap_update_bits(sma1307->regmap, in sma1307_dai_hw_params_amp()
1290 regmap_update_bits(sma1307->regmap, in sma1307_dai_hw_params_amp()
1293 regmap_update_bits(sma1307->regmap, in sma1307_dai_hw_params_amp()
1301 regmap_update_bits(sma1307->regmap, in sma1307_dai_hw_params_amp()
1308 regmap_update_bits(sma1307->regmap, in sma1307_dai_hw_params_amp()
1316 regmap_update_bits(sma1307->regmap, in sma1307_dai_hw_params_amp()
1320 regmap_update_bits(sma1307->regmap, in sma1307_dai_hw_params_amp()
1333 dev_err(component->dev, in sma1307_dai_hw_params_amp()
1336 return -EINVAL; in sma1307_dai_hw_params_amp()
1345 struct snd_soc_component *component = dai->component; in sma1307_dai_set_sysclk_amp()
1355 dev_err(component->dev, "%s: Invalid clk id: %d\n", in sma1307_dai_set_sysclk_amp()
1357 return -EINVAL; in sma1307_dai_set_sysclk_amp()
1359 sma1307->sys_clk_id = clk_id; in sma1307_dai_set_sysclk_amp()
1366 struct snd_soc_component *component = dai->component; in sma1307_dai_set_fmt_amp()
1372 dev_dbg(component->dev, in sma1307_dai_set_fmt_amp()
1374 regmap_update_bits(sma1307->regmap, in sma1307_dai_set_fmt_amp()
1381 dev_dbg(component->dev, in sma1307_dai_set_fmt_amp()
1383 regmap_update_bits(sma1307->regmap, in sma1307_dai_set_fmt_amp()
1390 dev_err(component->dev, in sma1307_dai_set_fmt_amp()
1393 return -EINVAL; in sma1307_dai_set_fmt_amp()
1402 sma1307->format = fmt & SND_SOC_DAIFMT_FORMAT_MASK; in sma1307_dai_set_fmt_amp()
1405 dev_err(component->dev, in sma1307_dai_set_fmt_amp()
1408 return -EINVAL; in sma1307_dai_set_fmt_amp()
1414 dev_dbg(component->dev, "%s: %s\n", in sma1307_dai_set_fmt_amp()
1416 regmap_update_bits(sma1307->regmap, in sma1307_dai_set_fmt_amp()
1422 dev_dbg(component->dev, "%s: %s\n", in sma1307_dai_set_fmt_amp()
1424 regmap_update_bits(sma1307->regmap, in sma1307_dai_set_fmt_amp()
1432 dev_dbg(component->dev, "%s: %s\n", in sma1307_dai_set_fmt_amp()
1434 regmap_update_bits(sma1307->regmap, in sma1307_dai_set_fmt_amp()
1440 dev_dbg(component->dev, "%s: %s\n", in sma1307_dai_set_fmt_amp()
1444 dev_err(component->dev, in sma1307_dai_set_fmt_amp()
1447 return -EINVAL; in sma1307_dai_set_fmt_amp()
1457 struct snd_soc_component *component = dai->component; in sma1307_dai_set_tdm_slot()
1460 dev_dbg(component->dev, "%s: slots = %d, slot_width - %d\n", in sma1307_dai_set_tdm_slot()
1463 sma1307->frame_size = slot_width * slots; in sma1307_dai_set_tdm_slot()
1465 regmap_update_bits(sma1307->regmap, in sma1307_dai_set_tdm_slot()
1469 regmap_update_bits(sma1307->regmap, in sma1307_dai_set_tdm_slot()
1476 regmap_update_bits(sma1307->regmap, in sma1307_dai_set_tdm_slot()
1482 regmap_update_bits(sma1307->regmap, in sma1307_dai_set_tdm_slot()
1488 dev_err(component->dev, "%s: not support TDM %d slot_width\n", in sma1307_dai_set_tdm_slot()
1490 return -EINVAL; in sma1307_dai_set_tdm_slot()
1495 regmap_update_bits(sma1307->regmap, in sma1307_dai_set_tdm_slot()
1501 regmap_update_bits(sma1307->regmap, in sma1307_dai_set_tdm_slot()
1507 dev_err(component->dev, "%s: not support TDM %d slots\n", in sma1307_dai_set_tdm_slot()
1509 return -EINVAL; in sma1307_dai_set_tdm_slot()
1512 if (sma1307->tdm_slot0_rx < slots) in sma1307_dai_set_tdm_slot()
1513 regmap_update_bits(sma1307->regmap, in sma1307_dai_set_tdm_slot()
1516 sma1307->tdm_slot0_rx << 3); in sma1307_dai_set_tdm_slot()
1518 dev_err(component->dev, "%s: Incorrect tdm-slot0-rx %d set\n", in sma1307_dai_set_tdm_slot()
1519 __func__, sma1307->tdm_slot0_rx); in sma1307_dai_set_tdm_slot()
1521 if (sma1307->tdm_slot1_rx < slots) in sma1307_dai_set_tdm_slot()
1522 regmap_update_bits(sma1307->regmap, in sma1307_dai_set_tdm_slot()
1525 sma1307->tdm_slot1_rx); in sma1307_dai_set_tdm_slot()
1527 dev_err(component->dev, "%s: Incorrect tdm-slot1-rx %d set\n", in sma1307_dai_set_tdm_slot()
1528 __func__, sma1307->tdm_slot1_rx); in sma1307_dai_set_tdm_slot()
1530 if (sma1307->tdm_slot0_tx < slots) in sma1307_dai_set_tdm_slot()
1531 regmap_update_bits(sma1307->regmap, in sma1307_dai_set_tdm_slot()
1534 sma1307->tdm_slot0_tx << 3); in sma1307_dai_set_tdm_slot()
1536 dev_err(component->dev, "%s: Incorrect tdm-slot0-tx %d set\n", in sma1307_dai_set_tdm_slot()
1537 __func__, sma1307->tdm_slot0_tx); in sma1307_dai_set_tdm_slot()
1539 if (sma1307->tdm_slot1_tx < slots) in sma1307_dai_set_tdm_slot()
1540 regmap_update_bits(sma1307->regmap, in sma1307_dai_set_tdm_slot()
1543 sma1307->tdm_slot1_tx); in sma1307_dai_set_tdm_slot()
1545 dev_err(component->dev, "%s: Incorrect tdm-slot1-tx %d set\n", in sma1307_dai_set_tdm_slot()
1546 __func__, sma1307->tdm_slot1_tx); in sma1307_dai_set_tdm_slot()
1551 static int sma1307_dai_mute_stream(struct snd_soc_dai *dai, int mute, in sma1307_dai_mute_stream() argument
1554 struct snd_soc_component *component = dai->component; in sma1307_dai_mute_stream()
1559 if (mute) { in sma1307_dai_mute_stream()
1560 dev_dbg(component->dev, "%s: %s\n", __func__, "MUTE"); in sma1307_dai_mute_stream()
1561 regmap_update_bits(sma1307->regmap, in sma1307_dai_mute_stream()
1566 if (!sma1307->force_mute_status) { in sma1307_dai_mute_stream()
1567 dev_dbg(component->dev, "%s: %s\n", __func__, in sma1307_dai_mute_stream()
1569 regmap_update_bits(sma1307->regmap, in sma1307_dai_mute_stream()
1574 dev_dbg(sma1307->dev, "%s: FORCE MUTE!!!\n", __func__); in sma1307_dai_mute_stream()
1596 .name = "sma1307-amplifier",
1623 if (sma1307->tsdw_cnt) in sma1307_check_fault_worker()
1624 regmap_read(sma1307->regmap, in sma1307_check_fault_worker()
1625 SMA1307_0A_SPK_VOL, &sma1307->cur_vol); in sma1307_check_fault_worker()
1627 regmap_read(sma1307->regmap, in sma1307_check_fault_worker()
1628 SMA1307_0A_SPK_VOL, &sma1307->init_vol); in sma1307_check_fault_worker()
1630 regmap_read(sma1307->regmap, SMA1307_FA_STATUS1, &status1_val); in sma1307_check_fault_worker()
1631 regmap_read(sma1307->regmap, SMA1307_FB_STATUS2, &status2_val); in sma1307_check_fault_worker()
1634 dev_crit(sma1307->dev, in sma1307_check_fault_worker()
1637 if (sma1307->sw_ot1_prot) { in sma1307_check_fault_worker()
1638 /* Volume control (Current Volume -3dB) */ in sma1307_check_fault_worker()
1639 if ((sma1307->cur_vol + 6) <= 0xFA) { in sma1307_check_fault_worker()
1640 sma1307->cur_vol += 6; in sma1307_check_fault_worker()
1641 regmap_write(sma1307->regmap, in sma1307_check_fault_worker()
1643 sma1307->cur_vol); in sma1307_check_fault_worker()
1645 "VOLUME=0x%02X", sma1307->cur_vol); in sma1307_check_fault_worker()
1648 sma1307->tsdw_cnt++; in sma1307_check_fault_worker()
1649 } else if (sma1307->tsdw_cnt) { in sma1307_check_fault_worker()
1650 regmap_write(sma1307->regmap, in sma1307_check_fault_worker()
1651 SMA1307_0A_SPK_VOL, sma1307->init_vol); in sma1307_check_fault_worker()
1652 sma1307->tsdw_cnt = 0; in sma1307_check_fault_worker()
1653 sma1307->cur_vol = sma1307->init_vol; in sma1307_check_fault_worker()
1656 "VOLUME=0x%02X", sma1307->cur_vol); in sma1307_check_fault_worker()
1660 dev_crit(sma1307->dev, in sma1307_check_fault_worker()
1665 dev_crit(sma1307->dev, in sma1307_check_fault_worker()
1670 dev_crit(sma1307->dev, in sma1307_check_fault_worker()
1675 dev_crit(sma1307->dev, in sma1307_check_fault_worker()
1676 "%s: OCP_SPK(Over Current Protect SPK)\n", __func__); in sma1307_check_fault_worker()
1680 dev_crit(sma1307->dev, in sma1307_check_fault_worker()
1685 dev_crit(sma1307->dev, in sma1307_check_fault_worker()
1691 if (kobject_uevent_env(sma1307->kobj, KOBJ_CHANGE, envp)) in sma1307_check_fault_worker()
1692 dev_err(sma1307->dev, in sma1307_check_fault_worker()
1698 if (sma1307->check_fault_status) { in sma1307_check_fault_worker()
1699 if (sma1307->check_fault_period > 0) in sma1307_check_fault_worker()
1701 &sma1307->check_fault_work, in sma1307_check_fault_worker()
1702 sma1307->check_fault_period * HZ); in sma1307_check_fault_worker()
1705 &sma1307->check_fault_work, in sma1307_check_fault_worker()
1716 ret = request_firmware(&fw, file, sma1307->dev); in sma1307_setting_loaded()
1719 dev_err(sma1307->dev, "%s: failed to read \"%s\": %pe\n", in sma1307_setting_loaded()
1721 sma1307->set.status = false; in sma1307_setting_loaded()
1723 } else if ((fw->size) < SMA1307_SETTING_HEADER_SIZE) { in sma1307_setting_loaded()
1724 dev_err(sma1307->dev, "%s: Invalid file\n", __func__); in sma1307_setting_loaded()
1726 sma1307->set.status = false; in sma1307_setting_loaded()
1730 data = kzalloc(fw->size, GFP_KERNEL); in sma1307_setting_loaded()
1731 size = fw->size >> 2; in sma1307_setting_loaded()
1732 memcpy(data, fw->data, fw->size); in sma1307_setting_loaded()
1737 sma1307->set.header_size = SMA1307_SETTING_HEADER_SIZE; in sma1307_setting_loaded()
1738 sma1307->set.checksum = data[sma1307->set.header_size - 2]; in sma1307_setting_loaded()
1739 sma1307->set.num_mode = data[sma1307->set.header_size - 1]; in sma1307_setting_loaded()
1740 num_mode = sma1307->set.num_mode; in sma1307_setting_loaded()
1741 sma1307->set.header = devm_kzalloc(sma1307->dev, in sma1307_setting_loaded()
1742 sma1307->set.header_size, in sma1307_setting_loaded()
1744 memcpy(sma1307->set.header, data, in sma1307_setting_loaded()
1745 sma1307->set.header_size * sizeof(int)); in sma1307_setting_loaded()
1747 if ((sma1307->set.checksum >> 8) != SMA1307_SETTING_CHECKSUM) { in sma1307_setting_loaded()
1748 dev_err(sma1307->dev, "%s: failed by dismatch \"%s\"\n", in sma1307_setting_loaded()
1750 sma1307->set.status = false; in sma1307_setting_loaded()
1755 sma1307->set.def_size = SMA1307_SETTING_DEFAULT_SIZE; in sma1307_setting_loaded()
1756 sma1307->set.def in sma1307_setting_loaded()
1757 = devm_kzalloc(sma1307->dev, in sma1307_setting_loaded()
1758 sma1307->set.def_size * sizeof(int), GFP_KERNEL); in sma1307_setting_loaded()
1759 memcpy(sma1307->set.def, in sma1307_setting_loaded()
1760 &data[sma1307->set.header_size], in sma1307_setting_loaded()
1761 sma1307->set.def_size * sizeof(int)); in sma1307_setting_loaded()
1764 offset = sma1307->set.header_size + sma1307->set.def_size; in sma1307_setting_loaded()
1765 sma1307->set.mode_size = DIV_ROUND_CLOSEST(size - offset, num_mode + 1); in sma1307_setting_loaded()
1767 sma1307->set.mode_set[i] in sma1307_setting_loaded()
1768 = devm_kzalloc(sma1307->dev, in sma1307_setting_loaded()
1769 sma1307->set.mode_size * 2 * sizeof(int), in sma1307_setting_loaded()
1771 for (int j = 0; j < sma1307->set.mode_size; j++) { in sma1307_setting_loaded()
1772 sma1307->set.mode_set[i][2 * j] in sma1307_setting_loaded()
1774 sma1307->set.mode_set[i][2 * j + 1] in sma1307_setting_loaded()
1780 sma1307->set.status = true; in sma1307_setting_loaded()
1789 regmap_read(sma1307->regmap, SMA1307_FF_DEVICE_INDEX, &status); in sma1307_reset()
1791 sma1307->rev_num = status & SMA1307_REV_NUM_STATUS; in sma1307_reset()
1792 dev_dbg(component->dev, "%s: SMA1307 Revision %d\n", in sma1307_reset()
1793 __func__, sma1307->rev_num); in sma1307_reset()
1794 regmap_read(sma1307->regmap, SMA1307_99_OTP_TRM2, &sma1307->otp_trm2); in sma1307_reset()
1795 regmap_read(sma1307->regmap, SMA1307_9A_OTP_TRM3, &sma1307->otp_trm3); in sma1307_reset()
1797 if ((sma1307->otp_trm2 & SMA1307_OTP_STAT_MASK) != SMA1307_OTP_STAT_1) in sma1307_reset()
1798 dev_warn(component->dev, "%s: SMA1307 OTP Status Fail\n", in sma1307_reset()
1803 if (sma1307->set.status) in sma1307_reset()
1808 regmap_update_bits(sma1307->regmap, in sma1307_reset()
1811 regmap_write(sma1307->regmap, SMA1307_0A_SPK_VOL, sma1307->init_vol); in sma1307_reset()
1819 for (i = 0; i < (sma1307->set.def_size); i++) { in sma1307_set_binary()
1820 if (sma1307_writeable_register(sma1307->dev, i) in sma1307_set_binary()
1823 regmap_write(sma1307->regmap, i, sma1307->set.def[i]); in sma1307_set_binary()
1827 for (i = 0; i < (sma1307->set.mode_size); i++) { in sma1307_set_binary()
1828 if (sma1307_writeable_register(sma1307->dev, i) in sma1307_set_binary()
1831 mode = sma1307->binary_mode; in sma1307_set_binary()
1832 regmap_write(sma1307->regmap, in sma1307_set_binary()
1833 sma1307->set.mode_set[mode][2 * i], in sma1307_set_binary()
1834 sma1307->set.mode_set[mode][2 * i + in sma1307_set_binary()
1846 regmap_write(sma1307->regmap, in sma1307_set_default()
1850 if (!strcmp(sma1307->name, DEVICE_NAME_SMA1307AQ)) in sma1307_set_default()
1851 sma1307->data->init(sma1307->regmap); in sma1307_set_default()
1936 sma1307 = devm_kzalloc(&client->dev, in sma1307_i2c_probe()
1939 return -ENOMEM; in sma1307_i2c_probe()
1941 sma1307->regmap = devm_regmap_init_i2c(client, &sma_i2c_regmap); in sma1307_i2c_probe()
1942 if (IS_ERR(sma1307->regmap)) { in sma1307_i2c_probe()
1943 return dev_err_probe(&client->dev, PTR_ERR(sma1307->regmap), in sma1307_i2c_probe()
1947 data = device_get_match_data(&client->dev); in sma1307_i2c_probe()
1949 return -ENODEV; in sma1307_i2c_probe()
1951 sma1307->data = data; in sma1307_i2c_probe()
1954 sma1307->name = client->name; in sma1307_i2c_probe()
1955 sma1307->format = SND_SOC_DAIFMT_I2S; in sma1307_i2c_probe()
1956 sma1307->sys_clk_id = SMA1307_PLL_CLKIN_BCLK; in sma1307_i2c_probe()
1957 sma1307->num_of_pll_matches = ARRAY_SIZE(sma1307_pll_matches); in sma1307_i2c_probe()
1959 sma1307->check_fault_period = CHECK_PERIOD_TIME; in sma1307_i2c_probe()
1960 sma1307->check_fault_status = true; in sma1307_i2c_probe()
1961 sma1307->init_vol = 0x32; in sma1307_i2c_probe()
1962 sma1307->cur_vol = sma1307->init_vol; in sma1307_i2c_probe()
1963 sma1307->sw_ot1_prot = true; in sma1307_i2c_probe()
1965 mutex_init(&sma1307->default_lock); in sma1307_i2c_probe()
1967 INIT_DELAYED_WORK(&sma1307->check_fault_work, in sma1307_i2c_probe()
1970 sma1307->dev = &client->dev; in sma1307_i2c_probe()
1971 sma1307->kobj = &client->dev.kobj; in sma1307_i2c_probe()
1975 sma1307->pll_matches = sma1307_pll_matches; in sma1307_i2c_probe()
1977 regmap_read(sma1307->regmap, in sma1307_i2c_probe()
1981 dev_err(&client->dev, in sma1307_i2c_probe()
1984 return -ENODEV; in sma1307_i2c_probe()
1986 dev_dbg(&client->dev, "%s: chip version 0x%02X\n", in sma1307_i2c_probe()
1991 ret = devm_snd_soc_register_component(&client->dev, in sma1307_i2c_probe()
1996 dev_err(&client->dev, "%s: failed to register component\n", in sma1307_i2c_probe()
2010 cancel_delayed_work_sync(&sma1307->check_fault_work); in sma1307_i2c_remove()
2027 .data = &sma1307aq_data //AEC-Q100 Qualificated