Lines Matching +full:spk +full:- +full:mute
37 #include <sound/soc-dapm.h>
42 #include <linux/extcon-provider.h>
45 static int debug = -1;
56 #define INVALID_GPIO -1
63 * 0: -39dB
71 * 0: -18db
76 #define CAP_VOL 26 /*0-31 */
98 /* 1 spk; */
258 return -EINVAL; in rk312x_codec_ctl_gpio()
262 rk312x_priv->spk_ctl_gpio) { in rk312x_codec_ctl_gpio()
263 gpiod_set_value(rk312x_priv->spk_ctl_gpio, level); in rk312x_codec_ctl_gpio()
264 DBG(KERN_INFO"%s set spk clt %d\n", __func__, level); in rk312x_codec_ctl_gpio()
265 msleep(rk312x_priv->spk_mute_delay); in rk312x_codec_ctl_gpio()
269 rk312x_priv->hp_ctl_gpio) { in rk312x_codec_ctl_gpio()
270 gpiod_set_value(rk312x_priv->hp_ctl_gpio, level); in rk312x_codec_ctl_gpio()
272 msleep(rk312x_priv->hp_mute_delay); in rk312x_codec_ctl_gpio()
283 return -EINVAL;
286 if (rk312x_priv->spk_hp_switch_gpio != INVALID_GPIO) {
287 gpio_set_value(rk312x_priv->spk_hp_switch_gpio, rk312x_priv->spk_io);
288 DBG(KERN_INFO"%s switch to spk\n", __func__);
289 msleep(rk312x_priv->spk_mute_delay);
292 if (rk312x_priv->spk_hp_switch_gpio != INVALID_GPIO) {
293 gpio_set_value(rk312x_priv->spk_hp_switch_gpio, !rk312x_priv->spk_io);
295 msleep(rk312x_priv->hp_mute_delay);
305 regmap_write(rk312x_priv->regmap, RK312x_RESET, 0x00); in rk312x_reset()
307 regmap_write(rk312x_priv->regmap, RK312x_RESET, 0x43); in rk312x_reset()
313 static const DECLARE_TLV_DB_SCALE(out_vol_tlv, -3900, 150, 0);
314 static const DECLARE_TLV_DB_SCALE(pga_vol_tlv, -1800, 150, 0);
316 static const DECLARE_TLV_DB_SCALE(pga_agc_max_vol_tlv, -1350, 600, 0);
317 static const DECLARE_TLV_DB_SCALE(pga_agc_min_vol_tlv, -1800, 600, 0);
320 "Differential", "Single-Ended"};
372 "-39dB", "-45dB", "-51dB",
373 "-57dB", "-63dB", "-69dB", "-75dB", "-81dB"};
509 /* Add for set capture mute */
610 "OFF", "RCV", "SPK", "HP", "HP_NO_MIC",
618 "OFF", "RCV", "SPK", "HP", "HP_NO_MIC", "BT"};
632 int rk312x_codec_mute_dac(int mute) in rk312x_codec_mute_dac() argument
636 return -EINVAL; in rk312x_codec_mute_dac()
638 if (mute) { in rk312x_codec_mute_dac()
639 snd_soc_component_write(rk312x_priv->component, 0xb4, 0x40); in rk312x_codec_mute_dac()
640 snd_soc_component_write(rk312x_priv->component, 0xb8, 0x40); in rk312x_codec_mute_dac()
651 return -EINVAL; in rk312x_playback_path_get()
655 __func__, ucontrol->value.integer.value[0]); in rk312x_playback_path_get()
657 ucontrol->value.integer.value[0] = rk312x_priv->playback_path; in rk312x_playback_path_get()
669 return -EINVAL; in rk312x_playback_path_put()
672 if (rk312x_priv->playback_path == in rk312x_playback_path_put()
673 ucontrol->value.integer.value[0]) { in rk312x_playback_path_put()
678 pre_path = rk312x_priv->playback_path; in rk312x_playback_path_put()
679 rk312x_priv->playback_path = ucontrol->value.integer.value[0]; in rk312x_playback_path_put()
682 rk312x_priv->playback_path); in rk312x_playback_path_put()
684 switch (rk312x_priv->playback_path) { in rk312x_playback_path_put()
695 snd_soc_component_write(rk312x_priv->component, in rk312x_playback_path_put()
696 0xb4, rk312x_priv->spk_volume); in rk312x_playback_path_put()
697 snd_soc_component_write(rk312x_priv->component, in rk312x_playback_path_put()
698 0xb8, rk312x_priv->spk_volume); in rk312x_playback_path_put()
707 snd_soc_component_write(rk312x_priv->component, in rk312x_playback_path_put()
708 0xb4, rk312x_priv->hp_volume); in rk312x_playback_path_put()
709 snd_soc_component_write(rk312x_priv->component, in rk312x_playback_path_put()
710 0xb8, rk312x_priv->hp_volume); in rk312x_playback_path_put()
719 snd_soc_component_write(rk312x_priv->component, in rk312x_playback_path_put()
720 0xb4, rk312x_priv->spk_volume); in rk312x_playback_path_put()
721 snd_soc_component_write(rk312x_priv->component, in rk312x_playback_path_put()
722 0xb8, rk312x_priv->spk_volume); in rk312x_playback_path_put()
726 return -EINVAL; in rk312x_playback_path_put()
737 return -EINVAL; in rk312x_capture_path_get()
741 ucontrol->value.integer.value[0]); in rk312x_capture_path_get()
743 ucontrol->value.integer.value[0] = rk312x_priv->capture_path; in rk312x_capture_path_get()
755 return -EINVAL; in rk312x_capture_path_put()
758 if (rk312x_priv->capture_path == ucontrol->value.integer.value[0]) in rk312x_capture_path_put()
761 pre_path = rk312x_priv->capture_path; in rk312x_capture_path_put()
762 rk312x_priv->capture_path = ucontrol->value.integer.value[0]; in rk312x_capture_path_put()
765 rk312x_priv->capture_path); in rk312x_capture_path_put()
767 switch (rk312x_priv->capture_path) { in rk312x_capture_path_put()
775 snd_soc_component_write(rk312x_priv->component, 0x10c, in rk312x_capture_path_put()
776 0x20 | rk312x_priv->capture_volume); in rk312x_capture_path_put()
777 snd_soc_component_write(rk312x_priv->component, 0x14c, in rk312x_capture_path_put()
778 0x20 | rk312x_priv->capture_volume); in rk312x_capture_path_put()
784 snd_soc_component_write(rk312x_priv->component, in rk312x_capture_path_put()
785 0x10c, 0x20 | rk312x_priv->capture_volume); in rk312x_capture_path_put()
786 snd_soc_component_write(rk312x_priv->component, in rk312x_capture_path_put()
787 0x14c, 0x20 | rk312x_priv->capture_volume); in rk312x_capture_path_put()
794 return -EINVAL; in rk312x_capture_path_put()
805 return -EINVAL; in rk312x_voice_call_path_get()
809 ucontrol->value.integer.value[0]); in rk312x_voice_call_path_get()
811 ucontrol->value.integer.value[0] = rk312x_priv->voice_call_path; in rk312x_voice_call_path_get()
823 return -EINVAL; in rk312x_voice_call_path_put()
826 if (rk312x_priv->voice_call_path == ucontrol->value.integer.value[0]) in rk312x_voice_call_path_put()
829 pre_path = rk312x_priv->voice_call_path; in rk312x_voice_call_path_put()
830 rk312x_priv->voice_call_path = ucontrol->value.integer.value[0]; in rk312x_voice_call_path_put()
833 rk312x_priv->voice_call_path); in rk312x_voice_call_path_put()
837 if (rk312x_priv->playback_path != OFF) { in rk312x_voice_call_path_put()
838 /* mute output for incall route pop nosie */ in rk312x_voice_call_path_put()
842 snd_soc_component_write(rk312x_priv->component, in rk312x_voice_call_path_put()
843 0xb4, rk312x_priv->spk_volume); in rk312x_voice_call_path_put()
844 snd_soc_component_write(rk312x_priv->component, in rk312x_voice_call_path_put()
845 0xb8, rk312x_priv->spk_volume); in rk312x_voice_call_path_put()
849 switch (rk312x_priv->voice_call_path) { in rk312x_voice_call_path_put()
871 return -EINVAL; in rk312x_voice_call_path_put()
890 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm); in rk312x_dacl_event()
921 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm); in rk312x_dacr_event()
955 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm); in rk312x_adcl_event()
982 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm); in rk312x_adcr_event()
1028 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm); in rk312x_hpmixl_event()
1263 regmap_write(rk312x_priv->regmap, RK312x_DAC_INT_CTL3, 0x32); in rk312x_set_bias_level()
1314 regmap_write(rk312x_priv->regmap, RK312x_DAC_INT_CTL3, 0x22); in rk312x_set_bias_level()
1328 return -EINVAL; in rk312x_set_dai_sysclk()
1331 rk312x->stereo_sysclk = freq; in rk312x_set_dai_sysclk()
1339 struct snd_soc_component *component = codec_dai->component; in rk312x_set_dai_fmt()
1351 return -EINVAL; in rk312x_set_dai_fmt()
1375 return -EINVAL; in rk312x_set_dai_fmt()
1405 return -EINVAL; in rk312x_set_dai_fmt()
1427 struct snd_soc_component *component = dai->component; in rk312x_hw_params()
1435 return -EINVAL; in rk312x_hw_params()
1440 div = (((rk312x->stereo_sysclk / 4) / rate) / 2); in rk312x_hw_params()
1442 if ((rk312x->stereo_sysclk % (4 * rate * 2) > 0) || in rk312x_hw_params()
1445 return -EINVAL; in rk312x_hw_params()
1466 return -EINVAL; in rk312x_hw_params()
1471 __func__, rk312x->stereo_sysclk, rate, div); in rk312x_hw_params()
1491 return -EINVAL; in rk312x_hw_params()
1504 return -EINVAL; in rk312x_hw_params()
1512 rk312x->rate = rate; in rk312x_hw_params()
1536 static int rk312x_digital_mute(struct snd_soc_dai *dai, int mute, int stream) in rk312x_digital_mute() argument
1539 if (mute) { in rk312x_digital_mute()
1543 if (!rk312x_priv->rk312x_for_mid) { in rk312x_digital_mute()
1544 schedule_delayed_work(&rk312x_priv->mute_delayed_work, in rk312x_digital_mute()
1545 msecs_to_jiffies(rk312x_priv->spk_mute_delay)); in rk312x_digital_mute()
1547 switch (rk312x_priv->playback_path) { in rk312x_digital_mute()
1680 if (!rk312x_priv || !rk312x_priv->component) { in rk312x_codec_power_up()
1681 DBG("%s : rk312x_priv or rk312x_priv->codec is NULL\n", in rk312x_codec_power_up()
1683 return -EINVAL; in rk312x_codec_power_up()
1685 component = rk312x_priv->component; in rk312x_codec_power_up()
1699 if (rk312x_priv->rk312x_for_mid == 1) { in rk312x_codec_power_up()
1709 i < RK312x_CODEC_CAPTURE_POWER_UP_LIST_LEN - 4; in rk312x_codec_power_up()
1730 if (!rk312x_priv || !rk312x_priv->component) { in rk312x_codec_power_down()
1731 DBG("%s : rk312x_priv or rk312x_priv->component is NULL\n", in rk312x_codec_power_down()
1733 return -EINVAL; in rk312x_codec_power_down()
1735 component = rk312x_priv->component; in rk312x_codec_power_down()
1775 snd_soc_component_write(rk312x_priv->component, in rk312x_codec_capture_work()
1776 0x10c, 0x20 | rk312x_priv->capture_volume); in rk312x_codec_capture_work()
1777 snd_soc_component_write(rk312x_priv->component, in rk312x_codec_capture_work()
1778 0x14c, 0x20 | rk312x_priv->capture_volume); in rk312x_codec_capture_work()
1791 bool playback = (substream->stream == SNDRV_PCM_STREAM_PLAYBACK); in rk312x_startup()
1795 if (rk312x_priv->rk312x_for_mid) { in rk312x_startup()
1800 return -EINVAL; in rk312x_startup()
1802 is_codec_playback_running = rk312x->playback_active > 0; in rk312x_startup()
1803 is_codec_capture_running = rk312x->capture_active > 0; in rk312x_startup()
1806 rk312x->playback_active++; in rk312x_startup()
1808 rk312x->capture_active++; in rk312x_startup()
1811 if (rk312x->playback_active > 0) in rk312x_startup()
1814 snd_soc_component_write(rk312x_priv->component, in rk312x_startup()
1815 0xb4, rk312x_priv->spk_volume); in rk312x_startup()
1816 snd_soc_component_write(rk312x_priv->component, in rk312x_startup()
1817 0xb8, rk312x_priv->spk_volume); in rk312x_startup()
1820 if (rk312x->capture_active > 0 && !is_codec_capture_running) { in rk312x_startup()
1838 bool playback = (substream->stream == SNDRV_PCM_STREAM_PLAYBACK); in rk312x_shutdown()
1842 if (rk312x_priv->rk312x_for_mid) { in rk312x_shutdown()
1850 is_codec_playback_running = rk312x->playback_active > 0; in rk312x_shutdown()
1851 is_codec_capture_running = rk312x->capture_active > 0; in rk312x_shutdown()
1854 rk312x->playback_active--; in rk312x_shutdown()
1856 rk312x->capture_active--; in rk312x_shutdown()
1859 if (rk312x->playback_active <= 0) { in rk312x_shutdown()
1867 if (rk312x->capture_active <= 0) { in rk312x_shutdown()
1932 .name = "rk312x-hifi",
1951 .name = "rk312x-voice",
1976 if (rk312x_priv->codec_hp_det) { in rk312x_suspend()
1978 regmap_read(rk312x_priv->grf, GRF_ACODEC_CON, &val); in rk312x_suspend()
1979 regmap_write(rk312x_priv->grf, GRF_ACODEC_CON, 0x1f0013); in rk312x_suspend()
1980 regmap_read(rk312x_priv->grf, GRF_ACODEC_CON, &val); in rk312x_suspend()
1981 cancel_delayed_work_sync(&rk312x_priv->hpdet_work); in rk312x_suspend()
1984 if (rk312x_priv->rk312x_for_mid) { in rk312x_suspend()
2013 snd_soc_component_get_drvdata(rk312x_priv->component); in gpio_store()
2020 if (rk312x->spk_ctl_gpio) { in gpio_store()
2021 gpiod_set_value(rk312x->spk_ctl_gpio, 0); in gpio_store()
2022 DBG(KERN_INFO"%s : spk gpio disable\n",__func__); in gpio_store()
2025 if (rk312x->hp_ctl_gpio) { in gpio_store()
2026 gpiod_set_value(rk312x->hp_ctl_gpio, 0); in gpio_store()
2031 if (rk312x->spk_ctl_gpio) { in gpio_store()
2032 gpiod_set_value(rk312x->spk_ctl_gpio, 1); in gpio_store()
2033 DBG(KERN_INFO"%s : spk gpio enable\n",__func__); in gpio_store()
2036 if (rk312x->hp_ctl_gpio) { in gpio_store()
2037 gpiod_set_value(rk312x->hp_ctl_gpio, 1); in gpio_store()
2042 DBG(KERN_ERR"--rk312x codec %s-- unknown cmd\n", __func__); in gpio_store()
2060 __ATTR(spk-ctl, S_IRUGO | S_IWUSR, gpio_show, gpio_store),
2067 if (rk312x_priv->codec_hp_det) { in rk312x_resume()
2071 printk("0xa0 -- 0x%x\n", val); in rk312x_resume()
2072 regmap_read(rk312x_priv->grf, GRF_ACODEC_CON, &val); in rk312x_resume()
2073 regmap_write(rk312x_priv->grf, GRF_ACODEC_CON, 0x1f001f); in rk312x_resume()
2074 regmap_read(rk312x_priv->grf, GRF_ACODEC_CON, &val); in rk312x_resume()
2076 schedule_delayed_work(&rk312x_priv->hpdet_work, msecs_to_jiffies(20)); in rk312x_resume()
2078 if (!rk312x_priv->rk312x_for_mid) in rk312x_resume()
2087 regmap_read(rk312x_priv->grf, GRF_ACODEC_CON, &val); in codec_hp_det_isr()
2088 DBG("%s GRF_ACODEC_CON -- 0x%x\n", __func__, val); in codec_hp_det_isr()
2091 regmap_write(rk312x_priv->grf, GRF_ACODEC_CON, val | 0x10001); in codec_hp_det_isr()
2094 regmap_write(rk312x_priv->grf, GRF_ACODEC_CON, val | 0x20002); in codec_hp_det_isr()
2096 cancel_delayed_work(&rk312x_priv->hpdet_work); in codec_hp_det_isr()
2097 schedule_delayed_work(&rk312x_priv->hpdet_work, msecs_to_jiffies(20)); in codec_hp_det_isr()
2104 regmap_read(rk312x_priv->grf, GRF_SOC_STATUS0, &val); in hpdet_work_func()
2105 DBG("%s GRF_SOC_STATUS0 -- 0x%x\n", __func__, val); in hpdet_work_func()
2109 extcon_set_state_sync(rk312x_priv->edev, in hpdet_work_func()
2114 extcon_set_state_sync(rk312x_priv->edev, in hpdet_work_func()
2129 if (!rk312x_priv || !rk312x_priv->component) { in rk312x_delay_workq()
2130 DBG("%s : rk312x_priv or rk312x_priv->component is NULL\n", in rk312x_delay_workq()
2134 rk312x_codec = snd_soc_component_get_drvdata(rk312x_priv->component); in rk312x_delay_workq()
2135 component = rk312x_codec->component; in rk312x_delay_workq()
2137 if (!rk312x_priv->rk312x_for_mid) { in rk312x_delay_workq()
2146 if (rk312x_codec->codec_hp_det) { in rk312x_delay_workq()
2148 ret = devm_request_irq(rk312x_priv->dev, rk312x_priv->irq, codec_hp_det_isr, in rk312x_delay_workq()
2153 regmap_read(rk312x_priv->grf, GRF_ACODEC_CON, &val); in rk312x_delay_workq()
2154 regmap_write(rk312x_priv->grf, GRF_ACODEC_CON, 0x1f001f); in rk312x_delay_workq()
2155 regmap_read(rk312x_priv->grf, GRF_ACODEC_CON, &val); in rk312x_delay_workq()
2160 DBG("0xa0 -- 0x%x\n", val); in rk312x_delay_workq()
2162 schedule_delayed_work(&rk312x_priv->hpdet_work, msecs_to_jiffies(100)); in rk312x_delay_workq()
2175 rk312x_codec->component = component; in rk312x_probe()
2177 clk_prepare_enable(rk312x_codec->pclk); in rk312x_probe()
2179 rk312x_codec->playback_active = 0; in rk312x_probe()
2180 rk312x_codec->capture_active = 0; in rk312x_probe()
2182 rk312x_codec_workq = create_freezable_workqueue("rk312x-codec"); in rk312x_probe()
2186 ret = -ENOMEM; in rk312x_probe()
2195 ret = -ENODEV; in rk312x_probe()
2201 INIT_DELAYED_WORK(&rk312x_priv->init_delayed_work, rk312x_delay_workq); in rk312x_probe()
2202 INIT_DELAYED_WORK(&rk312x_priv->mute_delayed_work, rk312x_codec_unpop); in rk312x_probe()
2203 INIT_DELAYED_WORK(&rk312x_priv->hpdet_work, hpdet_work_func); in rk312x_probe()
2205 schedule_delayed_work(&rk312x_priv->init_delayed_work, msecs_to_jiffies(3000)); in rk312x_probe()
2206 if (rk312x_codec->gpio_debug) { in rk312x_probe()
2207 gpio_kobj = kobject_create_and_add("codec-spk-ctl", NULL); in rk312x_probe()
2210 return -ENOMEM; in rk312x_probe()
2214 DBG(KERN_ERR"create codec-spk-ctl sysfs %d error\n", i); in rk312x_probe()
2236 if (rk312x_priv->spk_ctl_gpio) in rk312x_remove()
2237 gpiod_set_value(rk312x_priv->spk_ctl_gpio, 0); in rk312x_remove()
2239 if (rk312x_priv->hp_ctl_gpio) in rk312x_remove()
2240 gpiod_set_value(rk312x_priv->hp_ctl_gpio, 0); in rk312x_remove()
2244 if (rk312x_priv->rk312x_for_mid) { in rk312x_remove()
2280 struct device_node *rk312x_np = pdev->dev.of_node; in rk312x_platform_probe()
2285 rk312x = devm_kzalloc(&pdev->dev, sizeof(*rk312x), GFP_KERNEL); in rk312x_platform_probe()
2289 return -ENOMEM; in rk312x_platform_probe()
2293 rk312x->dev = &pdev->dev; in rk312x_platform_probe()
2296 rk312x->spk_hp_switch_gpio = of_get_named_gpio_flags(rk312x_np, in rk312x_platform_probe()
2297 "spk_hp_switch_gpio", 0, &rk312x->spk_io); in rk312x_platform_probe()
2298 rk312x->spk_io = !rk312x->spk_io; in rk312x_platform_probe()
2299 if (!gpio_is_valid(rk312x->spk_hp_switch_gpio)) { in rk312x_platform_probe()
2300 dbg_codec(2, "invalid spk hp switch_gpio : %d\n", in rk312x_platform_probe()
2301 rk312x->spk_hp_switch_gpio); in rk312x_platform_probe()
2302 rk312x->spk_hp_switch_gpio = INVALID_GPIO; in rk312x_platform_probe()
2303 /* ret = -ENOENT; */ in rk312x_platform_probe()
2306 DBG("%s : spk_hp_switch_gpio %d spk active_level %d \n", __func__, in rk312x_platform_probe()
2307 rk312x->spk_hp_switch_gpio, rk312x->spk_io); in rk312x_platform_probe()
2309 if(rk312x->spk_hp_switch_gpio != INVALID_GPIO) { in rk312x_platform_probe()
2310 ret = devm_gpio_request(&pdev->dev, rk312x->spk_hp_switch_gpio, "spk_hp_switch"); in rk312x_platform_probe()
2314 rk312x->spk_hp_switch_gpio = INVALID_GPIO; in rk312x_platform_probe()
2318 rk312x->edev = devm_extcon_dev_allocate(&pdev->dev, headset_extcon_cable); in rk312x_platform_probe()
2319 if (IS_ERR(rk312x->edev)) { in rk312x_platform_probe()
2320 dev_err(&pdev->dev, "failed to allocate extcon device\n"); in rk312x_platform_probe()
2321 return -ENOMEM; in rk312x_platform_probe()
2324 ret = devm_extcon_dev_register(&pdev->dev, rk312x->edev); in rk312x_platform_probe()
2326 dev_err(&pdev->dev, "failed to register extcon device\n"); in rk312x_platform_probe()
2330 rk312x->hp_ctl_gpio = devm_gpiod_get_optional(&pdev->dev, "hp-ctl", in rk312x_platform_probe()
2332 if (!IS_ERR_OR_NULL(rk312x->hp_ctl_gpio)) { in rk312x_platform_probe()
2333 DBG("%s : hp-ctl-gpio %d\n", __func__, in rk312x_platform_probe()
2334 desc_to_gpio(rk312x->hp_ctl_gpio)); in rk312x_platform_probe()
2337 rk312x->spk_ctl_gpio = devm_gpiod_get_optional(&pdev->dev, "spk-ctl", in rk312x_platform_probe()
2339 if (!IS_ERR_OR_NULL(rk312x->spk_ctl_gpio)) { in rk312x_platform_probe()
2340 DBG(KERN_INFO "%s : spk-ctl-gpio %d\n", __func__, in rk312x_platform_probe()
2341 desc_to_gpio(rk312x->spk_ctl_gpio)); in rk312x_platform_probe()
2344 ret = of_property_read_u32(rk312x_np, "spk-mute-delay", in rk312x_platform_probe()
2345 &rk312x->spk_mute_delay); in rk312x_platform_probe()
2347 DBG(KERN_ERR "%s() Can not read property spk-mute-delay\n", in rk312x_platform_probe()
2349 rk312x->spk_mute_delay = 0; in rk312x_platform_probe()
2352 ret = of_property_read_u32(rk312x_np, "hp-mute-delay", in rk312x_platform_probe()
2353 &rk312x->hp_mute_delay); in rk312x_platform_probe()
2355 DBG(KERN_ERR"%s() Can not read property hp-mute-delay\n", in rk312x_platform_probe()
2357 rk312x->hp_mute_delay = 0; in rk312x_platform_probe()
2359 DBG("spk mute delay %dms --- hp mute delay %dms\n",rk312x->spk_mute_delay,rk312x->hp_mute_delay); in rk312x_platform_probe()
2362 &rk312x->rk312x_for_mid); in rk312x_platform_probe()
2366 rk312x->rk312x_for_mid = 1; in rk312x_platform_probe()
2369 &rk312x->is_rk3128); in rk312x_platform_probe()
2373 rk312x->is_rk3128 = 0; in rk312x_platform_probe()
2376 &rk312x->spk_volume); in rk312x_platform_probe()
2380 rk312x->spk_volume = 25; in rk312x_platform_probe()
2383 &rk312x->hp_volume); in rk312x_platform_probe()
2387 rk312x->hp_volume = 25; in rk312x_platform_probe()
2390 &rk312x->capture_volume); in rk312x_platform_probe()
2394 rk312x->capture_volume = 26; in rk312x_platform_probe()
2396 ret = of_property_read_u32(rk312x_np, "gpio_debug", &rk312x->gpio_debug); in rk312x_platform_probe()
2399 rk312x->gpio_debug = 0; in rk312x_platform_probe()
2401 ret = of_property_read_u32(rk312x_np, "codec_hp_det", &rk312x->codec_hp_det); in rk312x_platform_probe()
2405 rk312x->codec_hp_det = 0; in rk312x_platform_probe()
2409 rk312x->regbase = devm_ioremap_resource(&pdev->dev, res); in rk312x_platform_probe()
2410 if (IS_ERR(rk312x->regbase)) in rk312x_platform_probe()
2411 return PTR_ERR(rk312x->regbase); in rk312x_platform_probe()
2412 rk312x->regmap = devm_regmap_init_mmio(&pdev->dev, rk312x->regbase, in rk312x_platform_probe()
2414 if (IS_ERR(rk312x->regmap)) in rk312x_platform_probe()
2415 return PTR_ERR(rk312x->regmap); in rk312x_platform_probe()
2417 rk312x->grf = syscon_regmap_lookup_by_phandle(rk312x_np, "rockchip,grf"); in rk312x_platform_probe()
2418 if (IS_ERR(rk312x->grf)) { in rk312x_platform_probe()
2419 dev_err(&pdev->dev, "needs 'rockchip,grf' property\n"); in rk312x_platform_probe()
2420 return PTR_ERR(rk312x->grf); in rk312x_platform_probe()
2422 ret = regmap_write(rk312x->grf, GRF_SOC_CON0, GRF_ACODEC_SEL); in rk312x_platform_probe()
2424 dev_err(&pdev->dev, "Could not write to GRF: %d\n", ret); in rk312x_platform_probe()
2428 if (rk312x->codec_hp_det) in rk312x_platform_probe()
2429 rk312x->irq = platform_get_irq(pdev, 0); in rk312x_platform_probe()
2431 rk312x->pclk = devm_clk_get(&pdev->dev, "g_pclk_acodec"); in rk312x_platform_probe()
2432 if (IS_ERR(rk312x->pclk)) { in rk312x_platform_probe()
2433 dev_err(&pdev->dev, "Unable to get acodec pclk\n"); in rk312x_platform_probe()
2434 ret = -ENXIO; in rk312x_platform_probe()
2437 rk312x->mclk = devm_clk_get(&pdev->dev, "i2s_clk"); in rk312x_platform_probe()
2438 if (IS_ERR(rk312x->mclk)) { in rk312x_platform_probe()
2439 dev_err(&pdev->dev, "Unable to get mclk\n"); in rk312x_platform_probe()
2440 ret = -ENXIO; in rk312x_platform_probe()
2444 clk_prepare_enable(rk312x->mclk); in rk312x_platform_probe()
2445 clk_set_rate(rk312x->mclk, 11289600); in rk312x_platform_probe()
2447 return devm_snd_soc_register_component(&pdev->dev, &soc_codec_dev_rk312x, in rk312x_platform_probe()
2467 if (!rk312x_priv || !rk312x_priv->component) { in rk312x_platform_shutdown()
2468 DBG("%s : rk312x_priv or rk312x_priv->component is NULL\n", in rk312x_platform_shutdown()
2472 if (rk312x_priv->codec_hp_det) { in rk312x_platform_shutdown()
2474 regmap_read(rk312x_priv->grf, GRF_ACODEC_CON, &val); in rk312x_platform_shutdown()
2475 regmap_write(rk312x_priv->grf, GRF_ACODEC_CON, 0x1f0013); in rk312x_platform_shutdown()
2476 regmap_read(rk312x_priv->grf, GRF_ACODEC_CON, &val); in rk312x_platform_shutdown()
2478 cancel_delayed_work_sync(&rk312x_priv->hpdet_work); in rk312x_platform_shutdown()
2481 if (rk312x_priv->spk_ctl_gpio) in rk312x_platform_shutdown()
2482 gpiod_set_value(rk312x_priv->spk_ctl_gpio, 0); in rk312x_platform_shutdown()
2484 if (rk312x_priv->hp_ctl_gpio) in rk312x_platform_shutdown()
2485 gpiod_set_value(rk312x_priv->hp_ctl_gpio, 0); in rk312x_platform_shutdown()
2489 if (rk312x_priv->rk312x_for_mid) { in rk312x_platform_shutdown()
2497 regmap_write(rk312x_priv->regmap, RK312x_RESET, 0xfc); in rk312x_platform_shutdown()
2499 regmap_write(rk312x_priv->regmap, RK312x_RESET, 0x03); in rk312x_platform_shutdown()
2505 { .compatible = "rockchip,rk3128-codec" },
2513 .name = "rk312x-codec",