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

1 // SPDX-License-Identifier: GPL-2.0-or-later
2 // sma1307.c -- sma1307 ALSA SoC Audio driver
114 /* Initial register value - 6.0W SPK (8ohm load) */
255 static const DECLARE_TLV_DB_SCALE(sma1307_spk_tlv, -6000, 50, 0);
310 ucontrol->value.integer.value[0] = (int)sma1307->force_mute_status; in sma1307_force_mute_get()
321 bool change = false, val = (bool)ucontrol->value.integer.value[0]; in sma1307_force_mute_put()
323 if (sma1307->force_mute_status == val) { in sma1307_force_mute_put()
327 sma1307->force_mute_status = val; in sma1307_force_mute_put()
341 regmap_read(sma1307->regmap, SMA1307_A5_TDM1, &val1); in sma1307_tdm_slot_get()
342 regmap_read(sma1307->regmap, SMA1307_A6_TDM2, &val2); in sma1307_tdm_slot_get()
344 if (!strcmp(kcontrol->id.name, SMA1307_TDM_RX0_POS_NAME)) { in sma1307_tdm_slot_get()
345 ucontrol->value.integer.value[0] in sma1307_tdm_slot_get()
347 sma1307->tdm_slot0_rx = ucontrol->value.integer.value[0]; in sma1307_tdm_slot_get()
348 } else if (!strcmp(kcontrol->id.name, SMA1307_TDM_RX1_POS_NAME)) { in sma1307_tdm_slot_get()
349 ucontrol->value.integer.value[0] in sma1307_tdm_slot_get()
351 sma1307->tdm_slot1_rx = ucontrol->value.integer.value[0]; in sma1307_tdm_slot_get()
352 } else if (!strcmp(kcontrol->id.name, SMA1307_TDM_TX0_POS_NAME)) { in sma1307_tdm_slot_get()
353 ucontrol->value.integer.value[0] in sma1307_tdm_slot_get()
355 sma1307->tdm_slot0_tx = ucontrol->value.integer.value[0]; in sma1307_tdm_slot_get()
356 } else if (!strcmp(kcontrol->id.name, SMA1307_TDM_TX1_POS_NAME)) { in sma1307_tdm_slot_get()
357 ucontrol->value.integer.value[0] in sma1307_tdm_slot_get()
359 sma1307->tdm_slot1_tx = ucontrol->value.integer.value[0]; in sma1307_tdm_slot_get()
361 return -EINVAL; in sma1307_tdm_slot_get()
373 int val = (int)ucontrol->value.integer.value[0]; in sma1307_tdm_slot_put()
376 if (!strcmp(kcontrol->id.name, SMA1307_TDM_RX0_POS_NAME)) { in sma1307_tdm_slot_put()
377 if (sma1307->tdm_slot0_rx == val) in sma1307_tdm_slot_put()
381 sma1307->tdm_slot0_rx = val; in sma1307_tdm_slot_put()
382 regmap_update_bits(sma1307->regmap, SMA1307_A5_TDM1, in sma1307_tdm_slot_put()
385 } else if (!strcmp(kcontrol->id.name, SMA1307_TDM_RX1_POS_NAME)) { in sma1307_tdm_slot_put()
386 if (sma1307->tdm_slot1_rx == val) in sma1307_tdm_slot_put()
390 sma1307->tdm_slot1_rx = val; in sma1307_tdm_slot_put()
391 regmap_update_bits(sma1307->regmap, SMA1307_A5_TDM1, in sma1307_tdm_slot_put()
394 } else if (!strcmp(kcontrol->id.name, SMA1307_TDM_TX0_POS_NAME)) { in sma1307_tdm_slot_put()
395 if (sma1307->tdm_slot0_tx == val) in sma1307_tdm_slot_put()
399 sma1307->tdm_slot0_tx = val; in sma1307_tdm_slot_put()
400 regmap_update_bits(sma1307->regmap, SMA1307_A6_TDM2, in sma1307_tdm_slot_put()
403 } else if (!strcmp(kcontrol->id.name, SMA1307_TDM_TX1_POS_NAME)) { in sma1307_tdm_slot_put()
404 if (sma1307->tdm_slot1_tx == val) in sma1307_tdm_slot_put()
408 sma1307->tdm_slot1_tx = val; in sma1307_tdm_slot_put()
409 regmap_update_bits(sma1307->regmap, SMA1307_A6_TDM2, in sma1307_tdm_slot_put()
413 dev_err(sma1307->dev, "%s: Invalid Control ID - %s\n", in sma1307_tdm_slot_put()
414 __func__, kcontrol->id.name); in sma1307_tdm_slot_put()
415 return -EINVAL; in sma1307_tdm_slot_put()
428 ucontrol->value.integer.value[0] = (int)sma1307->sw_ot1_prot; in sma1307_sw_ot1_prot_get()
439 bool change = false, val = (bool)ucontrol->value.integer.value[0]; in sma1307_sw_ot1_prot_put()
441 if (sma1307->sw_ot1_prot == val) in sma1307_sw_ot1_prot_put()
445 sma1307->sw_ot1_prot = val; in sma1307_sw_ot1_prot_put()
458 ucontrol->value.integer.value[0] = (int)sma1307->check_fault_status; in sma1307_check_fault_status_get()
469 bool change = false, val = (bool)ucontrol->value.integer.value[0]; in sma1307_check_fault_status_put()
471 if (sma1307->check_fault_status == val) { in sma1307_check_fault_status_put()
475 sma1307->check_fault_status = val; in sma1307_check_fault_status_put()
488 ucontrol->value.integer.value[0] = sma1307->check_fault_period; in sma1307_check_fault_period_get()
500 (struct soc_mixer_control *)kcontrol->private_value; in sma1307_check_fault_period_put()
502 int val = ucontrol->value.integer.value[0]; in sma1307_check_fault_period_put()
504 if (val < mc->min || val > mc->max) in sma1307_check_fault_period_put()
505 return -EINVAL; in sma1307_check_fault_period_put()
506 if (sma1307->check_fault_period == val) { in sma1307_check_fault_period_put()
510 sma1307->check_fault_period = val; in sma1307_check_fault_period_put()
523 regmap_update_bits(sma1307->regmap, SMA1307_00_SYSTEM_CTRL, in sma1307_reset_put()
527 snd_ctl_notify(component->card->snd_card, SNDRV_CTL_EVENT_MASK_VALUE, in sma1307_reset_put()
528 &kcontrol->id); in sma1307_reset_put()
540 sma1307->binary_mode = (int)ucontrol->value.enumerated.item[0]; in sma1307_binary_mode_put()
541 if (sma1307->set.status) in sma1307_binary_mode_put()
551 regmap_update_bits(sma1307->regmap, SMA1307_A2_TOP_MAN1, in sma1307_startup()
553 regmap_update_bits(sma1307->regmap, SMA1307_00_SYSTEM_CTRL, in sma1307_startup()
556 if (sma1307->amp_mode == SMA1307_MONO_MODE) { in sma1307_startup()
557 regmap_update_bits(sma1307->regmap, in sma1307_startup()
562 regmap_update_bits(sma1307->regmap, in sma1307_startup()
568 if (sma1307->check_fault_status) { in sma1307_startup()
569 if (sma1307->check_fault_period > 0) in sma1307_startup()
571 &sma1307->check_fault_work, in sma1307_startup()
572 sma1307->check_fault_period * HZ); in sma1307_startup()
575 &sma1307->check_fault_work, in sma1307_startup()
585 cancel_delayed_work_sync(&sma1307->check_fault_work); in sma1307_shutdown()
587 regmap_update_bits(sma1307->regmap, SMA1307_0E_MUTE_VOL_CTRL, in sma1307_shutdown()
589 /* Need to wait time for mute slope */ in sma1307_shutdown()
592 regmap_update_bits(sma1307->regmap, SMA1307_10_SYSTEM_CTRL1, in sma1307_shutdown()
594 regmap_update_bits(sma1307->regmap, SMA1307_A2_TOP_MAN1, in sma1307_shutdown()
596 regmap_update_bits(sma1307->regmap, SMA1307_00_SYSTEM_CTRL, in sma1307_shutdown()
604 snd_soc_dapm_to_component(w->dapm); in sma1307_aif_in_event()
606 unsigned int mux = sma1307->dapm_aif_in; in sma1307_aif_in_event()
612 regmap_update_bits(sma1307->regmap, in sma1307_aif_in_event()
618 regmap_update_bits(sma1307->regmap, in sma1307_aif_in_event()
622 regmap_update_bits(sma1307->regmap, in sma1307_aif_in_event()
628 regmap_update_bits(sma1307->regmap, in sma1307_aif_in_event()
632 regmap_update_bits(sma1307->regmap, in sma1307_aif_in_event()
639 dev_err(sma1307->dev, "%s: Invalid value (%d)\n", in sma1307_aif_in_event()
641 return -EINVAL; in sma1307_aif_in_event()
643 sma1307->amp_mode = mux; in sma1307_aif_in_event()
653 snd_soc_dapm_to_component(w->dapm); in sma1307_sdo_setting_event()
655 unsigned int mux = sma1307->dapm_sdo_setting; in sma1307_sdo_setting_event()
661 regmap_update_bits(sma1307->regmap, in sma1307_sdo_setting_event()
665 regmap_update_bits(sma1307->regmap, in sma1307_sdo_setting_event()
674 regmap_update_bits(sma1307->regmap, in sma1307_sdo_setting_event()
678 regmap_update_bits(sma1307->regmap, in sma1307_sdo_setting_event()
687 regmap_update_bits(sma1307->regmap, in sma1307_sdo_setting_event()
691 regmap_update_bits(sma1307->regmap, in sma1307_sdo_setting_event()
700 regmap_update_bits(sma1307->regmap, in sma1307_sdo_setting_event()
707 regmap_update_bits(sma1307->regmap, in sma1307_sdo_setting_event()
714 dev_err(sma1307->dev, "%s: Invalid value (%d)\n", in sma1307_sdo_setting_event()
716 return -EINVAL; in sma1307_sdo_setting_event()
727 snd_soc_dapm_to_component(w->dapm); in sma1307_aif_out_event()
731 if (!strcmp(w->name, SMA1307_AIF_OUT0_NAME)) { in sma1307_aif_out_event()
732 mux = sma1307->dapm_aif_out0; in sma1307_aif_out_event()
735 } else if (!strcmp(w->name, SMA1307_AIF_OUT1_NAME)) { in sma1307_aif_out_event()
736 mux = sma1307->dapm_aif_out1; in sma1307_aif_out_event()
740 dev_err(sma1307->dev, "%s: Invalid widget - %s\n", in sma1307_aif_out_event()
741 __func__, w->name); in sma1307_aif_out_event()
742 return -EINVAL; in sma1307_aif_out_event()
746 regmap_update_bits(sma1307->regmap, SMA1307_09_OUTPUT_CTRL, in sma1307_aif_out_event()
757 snd_soc_dapm_to_component(w->dapm); in sma1307_sdo_event()
762 regmap_update_bits(sma1307->regmap, in sma1307_sdo_event()
766 regmap_update_bits(sma1307->regmap, in sma1307_sdo_event()
772 regmap_update_bits(sma1307->regmap, in sma1307_sdo_event()
776 regmap_update_bits(sma1307->regmap, in sma1307_sdo_event()
789 snd_soc_dapm_to_component(w->dapm); in sma1307_power_event()
808 snd_soc_component_get_drvdata(dapm->component); in sma1307_dapm_aif_in_get()
810 ucontrol->value.enumerated.item[0] = (unsigned int)sma1307->dapm_aif_in; in sma1307_dapm_aif_in_get()
822 snd_soc_component_get_drvdata(dapm->component); in sma1307_dapm_aif_in_put()
823 int val = (int)ucontrol->value.enumerated.item[0]; in sma1307_dapm_aif_in_put()
827 dev_err(sma1307->dev, "%s: Out of range\n", __func__); in sma1307_dapm_aif_in_put()
828 return -EINVAL; in sma1307_dapm_aif_in_put()
831 if (sma1307->dapm_aif_in != val) { in sma1307_dapm_aif_in_put()
833 sma1307->dapm_aif_in = val; in sma1307_dapm_aif_in_put()
848 snd_soc_component_get_drvdata(dapm->component); in sma1307_dapm_sdo_setting_get()
850 ucontrol->value.enumerated.item[0] = in sma1307_dapm_sdo_setting_get()
851 (unsigned int)sma1307->dapm_sdo_setting; in sma1307_dapm_sdo_setting_get()
863 snd_soc_component_get_drvdata(dapm->component); in sma1307_dapm_sdo_setting_put()
864 int val = (int)ucontrol->value.enumerated.item[0]; in sma1307_dapm_sdo_setting_put()
868 dev_err(sma1307->dev, "%s: Out of range\n", __func__); in sma1307_dapm_sdo_setting_put()
869 return -EINVAL; in sma1307_dapm_sdo_setting_put()
872 if (sma1307->dapm_sdo_setting != val) { in sma1307_dapm_sdo_setting_put()
874 sma1307->dapm_sdo_setting = val; in sma1307_dapm_sdo_setting_put()
889 snd_soc_component_get_drvdata(dapm->component); in sma1307_dapm_aif_out_get()
892 if (!strcmp(kcontrol->id.name, SMA1307_AIF_OUT0_NAME)) { in sma1307_dapm_aif_out_get()
893 val = (unsigned int)sma1307->dapm_aif_out0; in sma1307_dapm_aif_out_get()
894 } else if (!strcmp(kcontrol->id.name, SMA1307_AIF_OUT1_NAME)) { in sma1307_dapm_aif_out_get()
895 val = (unsigned int)sma1307->dapm_aif_out1; in sma1307_dapm_aif_out_get()
897 dev_err(sma1307->dev, "%s: Invalid Control ID - %s\n", in sma1307_dapm_aif_out_get()
898 __func__, kcontrol->id.name); in sma1307_dapm_aif_out_get()
899 return -EINVAL; in sma1307_dapm_aif_out_get()
901 ucontrol->value.enumerated.item[0] = val; in sma1307_dapm_aif_out_get()
913 snd_soc_component_get_drvdata(dapm->component); in sma1307_dapm_aif_out_put()
914 int val = (int)ucontrol->value.enumerated.item[0]; in sma1307_dapm_aif_out_put()
918 dev_err(sma1307->dev, "%s: Out of range\n", __func__); in sma1307_dapm_aif_out_put()
919 return -EINVAL; in sma1307_dapm_aif_out_put()
922 if (!strcmp(kcontrol->id.name, SMA1307_AIF_OUT0_NAME)) { in sma1307_dapm_aif_out_put()
923 if (sma1307->dapm_aif_out0 != val) { in sma1307_dapm_aif_out_put()
925 sma1307->dapm_aif_out0 = val; in sma1307_dapm_aif_out_put()
928 } else if (!strcmp(kcontrol->id.name, SMA1307_AIF_OUT1_NAME)) { in sma1307_dapm_aif_out_put()
929 if (sma1307->dapm_aif_out1 != val) { in sma1307_dapm_aif_out_put()
931 sma1307->dapm_aif_out1 = val; in sma1307_dapm_aif_out_put()
935 dev_err(sma1307->dev, "%s: Invalid Control ID - %s\n", in sma1307_dapm_aif_out_put()
936 __func__, kcontrol->id.name); in sma1307_dapm_aif_out_put()
937 return -EINVAL; in sma1307_dapm_aif_out_put()
951 snd_soc_component_get_drvdata(dapm->component); in sma1307_dapm_sdo_enable_get()
953 ucontrol->value.integer.value[0] = (long)sma1307->dapm_sdo_en; in sma1307_dapm_sdo_enable_get()
965 snd_soc_component_get_drvdata(dapm->component); in sma1307_dapm_sdo_enable_put()
966 int val = (int)ucontrol->value.integer.value[0]; in sma1307_dapm_sdo_enable_put()
970 dev_err(sma1307->dev, "%s: Out of range\n", __func__); in sma1307_dapm_sdo_enable_put()
971 return -EINVAL; in sma1307_dapm_sdo_enable_put()
974 if (sma1307->dapm_sdo_en != val) { in sma1307_dapm_sdo_enable_put()
976 sma1307->dapm_sdo_en = val; in sma1307_dapm_sdo_enable_put()
1060 SND_SOC_DAPM_OUTPUT("SPK"),
1136 { "SPK", NULL, "AMP Enable" },
1149 dev_dbg(component->dev, "%s: BCLK = %dHz\n", __func__, bclk); in sma1307_setup_pll()
1151 if (sma1307->sys_clk_id == SMA1307_PLL_CLKIN_MCLK) { in sma1307_setup_pll()
1152 dev_warn(component->dev, "%s: MCLK is not supported\n", in sma1307_setup_pll()
1154 } else if (sma1307->sys_clk_id == SMA1307_PLL_CLKIN_BCLK) { in sma1307_setup_pll()
1155 for (i = 0; i < sma1307->num_of_pll_matches; i++) { in sma1307_setup_pll()
1156 if (sma1307->pll_matches[i].input_clk == bclk) in sma1307_setup_pll()
1159 if (i == sma1307->num_of_pll_matches) { in sma1307_setup_pll()
1160 dev_warn(component->dev, in sma1307_setup_pll()
1166 regmap_update_bits(sma1307->regmap, in sma1307_setup_pll()
1171 regmap_write(sma1307->regmap, SMA1307_8B_PLL_POST_N, in sma1307_setup_pll()
1172 sma1307->pll_matches[i].post_n); in sma1307_setup_pll()
1173 regmap_write(sma1307->regmap, SMA1307_8C_PLL_N, in sma1307_setup_pll()
1174 sma1307->pll_matches[i].n); in sma1307_setup_pll()
1175 regmap_write(sma1307->regmap, SMA1307_8D_PLL_A_SETTING, in sma1307_setup_pll()
1176 sma1307->pll_matches[i].vco); in sma1307_setup_pll()
1177 regmap_write(sma1307->regmap, SMA1307_8E_PLL_P_CP, in sma1307_setup_pll()
1178 sma1307->pll_matches[i].p_cp); in sma1307_setup_pll()
1185 struct snd_soc_component *component = dai->component; in sma1307_dai_hw_params_amp()
1189 if (sma1307->format == SND_SOC_DAIFMT_DSP_A) in sma1307_dai_hw_params_amp()
1190 bclk = params_rate(params) * sma1307->frame_size; in sma1307_dai_hw_params_amp()
1195 dev_dbg(component->dev, in sma1307_dai_hw_params_amp()
1200 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) { in sma1307_dai_hw_params_amp()
1201 if (sma1307->sys_clk_id == SMA1307_PLL_CLKIN_BCLK) { in sma1307_dai_hw_params_amp()
1202 if (sma1307->last_bclk != bclk) { in sma1307_dai_hw_params_amp()
1204 sma1307->last_bclk = bclk; in sma1307_dai_hw_params_amp()
1219 dev_warn(component->dev, in sma1307_dai_hw_params_amp()
1225 dev_err(component->dev, "%s: not support rate : %d\n", in sma1307_dai_hw_params_amp()
1228 return -EINVAL; in sma1307_dai_hw_params_amp()
1231 /* substream->stream is SNDRV_PCM_STREAM_CAPTURE */ in sma1307_dai_hw_params_amp()
1236 regmap_update_bits(sma1307->regmap, in sma1307_dai_hw_params_amp()
1246 regmap_update_bits(sma1307->regmap, in sma1307_dai_hw_params_amp()
1256 regmap_update_bits(sma1307->regmap, in sma1307_dai_hw_params_amp()
1265 dev_err(component->dev, in sma1307_dai_hw_params_amp()
1268 return -EINVAL; in sma1307_dai_hw_params_amp()
1272 switch (sma1307->format) { in sma1307_dai_hw_params_amp()
1274 regmap_update_bits(sma1307->regmap, in sma1307_dai_hw_params_amp()
1278 regmap_update_bits(sma1307->regmap, in sma1307_dai_hw_params_amp()
1284 regmap_update_bits(sma1307->regmap, in sma1307_dai_hw_params_amp()
1287 regmap_update_bits(sma1307->regmap, in sma1307_dai_hw_params_amp()
1295 regmap_update_bits(sma1307->regmap, in sma1307_dai_hw_params_amp()
1302 regmap_update_bits(sma1307->regmap, in sma1307_dai_hw_params_amp()
1310 regmap_update_bits(sma1307->regmap, in sma1307_dai_hw_params_amp()
1314 regmap_update_bits(sma1307->regmap, in sma1307_dai_hw_params_amp()
1327 dev_err(component->dev, in sma1307_dai_hw_params_amp()
1330 return -EINVAL; in sma1307_dai_hw_params_amp()
1339 struct snd_soc_component *component = dai->component; in sma1307_dai_set_sysclk_amp()
1349 dev_err(component->dev, "%s: Invalid clk id: %d\n", in sma1307_dai_set_sysclk_amp()
1351 return -EINVAL; in sma1307_dai_set_sysclk_amp()
1353 sma1307->sys_clk_id = clk_id; in sma1307_dai_set_sysclk_amp()
1360 struct snd_soc_component *component = dai->component; in sma1307_dai_set_fmt_amp()
1366 dev_dbg(component->dev, in sma1307_dai_set_fmt_amp()
1368 regmap_update_bits(sma1307->regmap, in sma1307_dai_set_fmt_amp()
1375 dev_dbg(component->dev, in sma1307_dai_set_fmt_amp()
1377 regmap_update_bits(sma1307->regmap, in sma1307_dai_set_fmt_amp()
1384 dev_err(component->dev, in sma1307_dai_set_fmt_amp()
1387 return -EINVAL; in sma1307_dai_set_fmt_amp()
1396 sma1307->format = fmt & SND_SOC_DAIFMT_FORMAT_MASK; in sma1307_dai_set_fmt_amp()
1399 dev_err(component->dev, in sma1307_dai_set_fmt_amp()
1402 return -EINVAL; in sma1307_dai_set_fmt_amp()
1408 dev_dbg(component->dev, "%s: %s\n", in sma1307_dai_set_fmt_amp()
1410 regmap_update_bits(sma1307->regmap, in sma1307_dai_set_fmt_amp()
1416 dev_dbg(component->dev, "%s: %s\n", in sma1307_dai_set_fmt_amp()
1418 regmap_update_bits(sma1307->regmap, in sma1307_dai_set_fmt_amp()
1426 dev_dbg(component->dev, "%s: %s\n", in sma1307_dai_set_fmt_amp()
1428 regmap_update_bits(sma1307->regmap, in sma1307_dai_set_fmt_amp()
1434 dev_dbg(component->dev, "%s: %s\n", in sma1307_dai_set_fmt_amp()
1438 dev_err(component->dev, in sma1307_dai_set_fmt_amp()
1441 return -EINVAL; in sma1307_dai_set_fmt_amp()
1451 struct snd_soc_component *component = dai->component; in sma1307_dai_set_tdm_slot()
1454 dev_dbg(component->dev, "%s: slots = %d, slot_width - %d\n", in sma1307_dai_set_tdm_slot()
1457 sma1307->frame_size = slot_width * slots; in sma1307_dai_set_tdm_slot()
1459 regmap_update_bits(sma1307->regmap, in sma1307_dai_set_tdm_slot()
1463 regmap_update_bits(sma1307->regmap, in sma1307_dai_set_tdm_slot()
1470 regmap_update_bits(sma1307->regmap, in sma1307_dai_set_tdm_slot()
1476 regmap_update_bits(sma1307->regmap, in sma1307_dai_set_tdm_slot()
1482 dev_err(component->dev, "%s: not support TDM %d slot_width\n", in sma1307_dai_set_tdm_slot()
1484 return -EINVAL; in sma1307_dai_set_tdm_slot()
1489 regmap_update_bits(sma1307->regmap, in sma1307_dai_set_tdm_slot()
1495 regmap_update_bits(sma1307->regmap, in sma1307_dai_set_tdm_slot()
1501 dev_err(component->dev, "%s: not support TDM %d slots\n", in sma1307_dai_set_tdm_slot()
1503 return -EINVAL; in sma1307_dai_set_tdm_slot()
1506 if (sma1307->tdm_slot0_rx < slots) in sma1307_dai_set_tdm_slot()
1507 regmap_update_bits(sma1307->regmap, in sma1307_dai_set_tdm_slot()
1510 sma1307->tdm_slot0_rx << 3); in sma1307_dai_set_tdm_slot()
1512 dev_err(component->dev, "%s: Incorrect tdm-slot0-rx %d set\n", in sma1307_dai_set_tdm_slot()
1513 __func__, sma1307->tdm_slot0_rx); in sma1307_dai_set_tdm_slot()
1515 if (sma1307->tdm_slot1_rx < slots) in sma1307_dai_set_tdm_slot()
1516 regmap_update_bits(sma1307->regmap, in sma1307_dai_set_tdm_slot()
1519 sma1307->tdm_slot1_rx); in sma1307_dai_set_tdm_slot()
1521 dev_err(component->dev, "%s: Incorrect tdm-slot1-rx %d set\n", in sma1307_dai_set_tdm_slot()
1522 __func__, sma1307->tdm_slot1_rx); in sma1307_dai_set_tdm_slot()
1524 if (sma1307->tdm_slot0_tx < slots) in sma1307_dai_set_tdm_slot()
1525 regmap_update_bits(sma1307->regmap, in sma1307_dai_set_tdm_slot()
1528 sma1307->tdm_slot0_tx << 3); in sma1307_dai_set_tdm_slot()
1530 dev_err(component->dev, "%s: Incorrect tdm-slot0-tx %d set\n", in sma1307_dai_set_tdm_slot()
1531 __func__, sma1307->tdm_slot0_tx); in sma1307_dai_set_tdm_slot()
1533 if (sma1307->tdm_slot1_tx < slots) in sma1307_dai_set_tdm_slot()
1534 regmap_update_bits(sma1307->regmap, in sma1307_dai_set_tdm_slot()
1537 sma1307->tdm_slot1_tx); in sma1307_dai_set_tdm_slot()
1539 dev_err(component->dev, "%s: Incorrect tdm-slot1-tx %d set\n", in sma1307_dai_set_tdm_slot()
1540 __func__, sma1307->tdm_slot1_tx); in sma1307_dai_set_tdm_slot()
1545 static int sma1307_dai_mute_stream(struct snd_soc_dai *dai, int mute, in sma1307_dai_mute_stream() argument
1548 struct snd_soc_component *component = dai->component; in sma1307_dai_mute_stream()
1553 if (mute) { in sma1307_dai_mute_stream()
1554 dev_dbg(component->dev, "%s: %s\n", __func__, "MUTE"); in sma1307_dai_mute_stream()
1555 regmap_update_bits(sma1307->regmap, in sma1307_dai_mute_stream()
1560 if (!sma1307->force_mute_status) { in sma1307_dai_mute_stream()
1561 dev_dbg(component->dev, "%s: %s\n", __func__, in sma1307_dai_mute_stream()
1563 regmap_update_bits(sma1307->regmap, in sma1307_dai_mute_stream()
1568 dev_dbg(sma1307->dev, "%s: FORCE MUTE!!!\n", __func__); in sma1307_dai_mute_stream()
1590 .name = "sma1307-amplifier",
1617 if (sma1307->tsdw_cnt) in sma1307_check_fault_worker()
1618 regmap_read(sma1307->regmap, in sma1307_check_fault_worker()
1619 SMA1307_0A_SPK_VOL, &sma1307->cur_vol); in sma1307_check_fault_worker()
1621 regmap_read(sma1307->regmap, in sma1307_check_fault_worker()
1622 SMA1307_0A_SPK_VOL, &sma1307->init_vol); in sma1307_check_fault_worker()
1624 regmap_read(sma1307->regmap, SMA1307_FA_STATUS1, &status1_val); in sma1307_check_fault_worker()
1625 regmap_read(sma1307->regmap, SMA1307_FB_STATUS2, &status2_val); in sma1307_check_fault_worker()
1628 dev_crit(sma1307->dev, in sma1307_check_fault_worker()
1631 if (sma1307->sw_ot1_prot) { in sma1307_check_fault_worker()
1632 /* Volume control (Current Volume -3dB) */ in sma1307_check_fault_worker()
1633 if ((sma1307->cur_vol + 6) <= 0xFA) { in sma1307_check_fault_worker()
1634 sma1307->cur_vol += 6; in sma1307_check_fault_worker()
1635 regmap_write(sma1307->regmap, in sma1307_check_fault_worker()
1637 sma1307->cur_vol); in sma1307_check_fault_worker()
1639 "VOLUME=0x%02X", sma1307->cur_vol); in sma1307_check_fault_worker()
1642 sma1307->tsdw_cnt++; in sma1307_check_fault_worker()
1643 } else if (sma1307->tsdw_cnt) { in sma1307_check_fault_worker()
1644 regmap_write(sma1307->regmap, in sma1307_check_fault_worker()
1645 SMA1307_0A_SPK_VOL, sma1307->init_vol); in sma1307_check_fault_worker()
1646 sma1307->tsdw_cnt = 0; in sma1307_check_fault_worker()
1647 sma1307->cur_vol = sma1307->init_vol; in sma1307_check_fault_worker()
1650 "VOLUME=0x%02X", sma1307->cur_vol); in sma1307_check_fault_worker()
1654 dev_crit(sma1307->dev, in sma1307_check_fault_worker()
1659 dev_crit(sma1307->dev, in sma1307_check_fault_worker()
1664 dev_crit(sma1307->dev, in sma1307_check_fault_worker()
1669 dev_crit(sma1307->dev, in sma1307_check_fault_worker()
1670 "%s: OCP_SPK(Over Current Protect SPK)\n", __func__); in sma1307_check_fault_worker()
1674 dev_crit(sma1307->dev, in sma1307_check_fault_worker()
1679 dev_crit(sma1307->dev, in sma1307_check_fault_worker()
1685 if (kobject_uevent_env(sma1307->kobj, KOBJ_CHANGE, envp)) in sma1307_check_fault_worker()
1686 dev_err(sma1307->dev, in sma1307_check_fault_worker()
1692 if (sma1307->check_fault_status) { in sma1307_check_fault_worker()
1693 if (sma1307->check_fault_period > 0) in sma1307_check_fault_worker()
1695 &sma1307->check_fault_work, in sma1307_check_fault_worker()
1696 sma1307->check_fault_period * HZ); in sma1307_check_fault_worker()
1699 &sma1307->check_fault_work, in sma1307_check_fault_worker()
1710 ret = request_firmware(&fw, file, sma1307->dev); in sma1307_setting_loaded()
1713 dev_err(sma1307->dev, "%s: failed to read \"%s\": %pe\n", in sma1307_setting_loaded()
1715 sma1307->set.status = false; in sma1307_setting_loaded()
1717 } else if ((fw->size) < SMA1307_SETTING_HEADER_SIZE) { in sma1307_setting_loaded()
1718 dev_err(sma1307->dev, "%s: Invalid file\n", __func__); in sma1307_setting_loaded()
1720 sma1307->set.status = false; in sma1307_setting_loaded()
1724 int *data __free(kfree) = kzalloc(fw->size, GFP_KERNEL); in sma1307_setting_loaded()
1727 sma1307->set.status = false; in sma1307_setting_loaded()
1730 size = fw->size >> 2; in sma1307_setting_loaded()
1731 memcpy(data, fw->data, fw->size); in sma1307_setting_loaded()
1736 sma1307->set.header_size = SMA1307_SETTING_HEADER_SIZE; in sma1307_setting_loaded()
1737 sma1307->set.checksum = data[sma1307->set.header_size - 2]; in sma1307_setting_loaded()
1738 sma1307->set.num_mode = data[sma1307->set.header_size - 1]; in sma1307_setting_loaded()
1739 num_mode = sma1307->set.num_mode; in sma1307_setting_loaded()
1740 sma1307->set.header = devm_kmalloc_array(sma1307->dev, in sma1307_setting_loaded()
1741 sma1307->set.header_size, in sma1307_setting_loaded()
1744 if (!sma1307->set.header) { in sma1307_setting_loaded()
1745 sma1307->set.status = false; in sma1307_setting_loaded()
1749 memcpy(sma1307->set.header, data, in sma1307_setting_loaded()
1750 sma1307->set.header_size * sizeof(int)); in sma1307_setting_loaded()
1752 if ((sma1307->set.checksum >> 8) != SMA1307_SETTING_CHECKSUM) { in sma1307_setting_loaded()
1753 dev_err(sma1307->dev, "%s: checksum failed \"%s\"\n", in sma1307_setting_loaded()
1755 sma1307->set.status = false; in sma1307_setting_loaded()
1760 sma1307->set.def_size = SMA1307_SETTING_DEFAULT_SIZE; in sma1307_setting_loaded()
1761 sma1307->set.def in sma1307_setting_loaded()
1762 = devm_kzalloc(sma1307->dev, in sma1307_setting_loaded()
1763 sma1307->set.def_size * sizeof(int), GFP_KERNEL); in sma1307_setting_loaded()
1764 if (!sma1307->set.def) { in sma1307_setting_loaded()
1765 sma1307->set.status = false; in sma1307_setting_loaded()
1769 memcpy(sma1307->set.def, in sma1307_setting_loaded()
1770 &data[sma1307->set.header_size], in sma1307_setting_loaded()
1771 sma1307->set.def_size * sizeof(int)); in sma1307_setting_loaded()
1774 offset = sma1307->set.header_size + sma1307->set.def_size; in sma1307_setting_loaded()
1775 sma1307->set.mode_size = DIV_ROUND_CLOSEST(size - offset, num_mode + 1); in sma1307_setting_loaded()
1777 sma1307->set.mode_set[i] in sma1307_setting_loaded()
1778 = devm_kzalloc(sma1307->dev, in sma1307_setting_loaded()
1779 sma1307->set.mode_size * 2 * sizeof(int), in sma1307_setting_loaded()
1781 if (!sma1307->set.mode_set[i]) { in sma1307_setting_loaded()
1783 kfree(sma1307->set.mode_set[j]); in sma1307_setting_loaded()
1784 sma1307->set.status = false; in sma1307_setting_loaded()
1788 for (int j = 0; j < sma1307->set.mode_size; j++) { in sma1307_setting_loaded()
1789 sma1307->set.mode_set[i][2 * j] in sma1307_setting_loaded()
1791 sma1307->set.mode_set[i][2 * j + 1] in sma1307_setting_loaded()
1796 sma1307->set.status = true; in sma1307_setting_loaded()
1805 regmap_read(sma1307->regmap, SMA1307_FF_DEVICE_INDEX, &status); in sma1307_reset()
1807 sma1307->rev_num = status & SMA1307_REV_NUM_STATUS; in sma1307_reset()
1808 dev_dbg(component->dev, "%s: SMA1307 Revision %d\n", in sma1307_reset()
1809 __func__, sma1307->rev_num); in sma1307_reset()
1810 regmap_read(sma1307->regmap, SMA1307_99_OTP_TRM2, &sma1307->otp_trm2); in sma1307_reset()
1811 regmap_read(sma1307->regmap, SMA1307_9A_OTP_TRM3, &sma1307->otp_trm3); in sma1307_reset()
1813 if ((sma1307->otp_trm2 & SMA1307_OTP_STAT_MASK) != SMA1307_OTP_STAT_1) in sma1307_reset()
1814 dev_warn(component->dev, "%s: SMA1307 OTP Status Fail\n", in sma1307_reset()
1819 if (sma1307->set.status) in sma1307_reset()
1824 regmap_update_bits(sma1307->regmap, in sma1307_reset()
1827 regmap_write(sma1307->regmap, SMA1307_0A_SPK_VOL, sma1307->init_vol); in sma1307_reset()
1835 for (i = 0; i < (sma1307->set.def_size); i++) { in sma1307_set_binary()
1836 if (sma1307_writeable_register(sma1307->dev, i) in sma1307_set_binary()
1839 regmap_write(sma1307->regmap, i, sma1307->set.def[i]); in sma1307_set_binary()
1843 for (i = 0; i < (sma1307->set.mode_size); i++) { in sma1307_set_binary()
1844 if (sma1307_writeable_register(sma1307->dev, i) in sma1307_set_binary()
1847 mode = sma1307->binary_mode; in sma1307_set_binary()
1848 regmap_write(sma1307->regmap, in sma1307_set_binary()
1849 sma1307->set.mode_set[mode][2 * i], in sma1307_set_binary()
1850 sma1307->set.mode_set[mode][2 * i + in sma1307_set_binary()
1862 regmap_write(sma1307->regmap, in sma1307_set_default()
1866 if (!strcmp(sma1307->name, DEVICE_NAME_SMA1307AQ)) in sma1307_set_default()
1867 sma1307->data->init(sma1307->regmap); in sma1307_set_default()
1952 sma1307 = devm_kzalloc(&client->dev, in sma1307_i2c_probe()
1955 return -ENOMEM; in sma1307_i2c_probe()
1957 sma1307->regmap = devm_regmap_init_i2c(client, &sma_i2c_regmap); in sma1307_i2c_probe()
1958 if (IS_ERR(sma1307->regmap)) { in sma1307_i2c_probe()
1959 return dev_err_probe(&client->dev, PTR_ERR(sma1307->regmap), in sma1307_i2c_probe()
1963 data = device_get_match_data(&client->dev); in sma1307_i2c_probe()
1965 return -ENODEV; in sma1307_i2c_probe()
1967 sma1307->data = data; in sma1307_i2c_probe()
1970 sma1307->name = client->name; in sma1307_i2c_probe()
1971 sma1307->format = SND_SOC_DAIFMT_I2S; in sma1307_i2c_probe()
1972 sma1307->sys_clk_id = SMA1307_PLL_CLKIN_BCLK; in sma1307_i2c_probe()
1973 sma1307->num_of_pll_matches = ARRAY_SIZE(sma1307_pll_matches); in sma1307_i2c_probe()
1975 sma1307->check_fault_period = CHECK_PERIOD_TIME; in sma1307_i2c_probe()
1976 sma1307->check_fault_status = true; in sma1307_i2c_probe()
1977 sma1307->init_vol = 0x32; in sma1307_i2c_probe()
1978 sma1307->cur_vol = sma1307->init_vol; in sma1307_i2c_probe()
1979 sma1307->sw_ot1_prot = true; in sma1307_i2c_probe()
1981 mutex_init(&sma1307->default_lock); in sma1307_i2c_probe()
1983 INIT_DELAYED_WORK(&sma1307->check_fault_work, in sma1307_i2c_probe()
1986 sma1307->dev = &client->dev; in sma1307_i2c_probe()
1987 sma1307->kobj = &client->dev.kobj; in sma1307_i2c_probe()
1991 sma1307->pll_matches = sma1307_pll_matches; in sma1307_i2c_probe()
1993 regmap_read(sma1307->regmap, in sma1307_i2c_probe()
1997 dev_err(&client->dev, in sma1307_i2c_probe()
2000 return -ENODEV; in sma1307_i2c_probe()
2002 dev_dbg(&client->dev, "%s: chip version 0x%02X\n", in sma1307_i2c_probe()
2007 ret = devm_snd_soc_register_component(&client->dev, in sma1307_i2c_probe()
2012 dev_err(&client->dev, "%s: failed to register component\n", in sma1307_i2c_probe()
2026 cancel_delayed_work_sync(&sma1307->check_fault_work); in sma1307_i2c_remove()
2043 .data = &sma1307aq_data //AEC-Q100 Qualificated