Loading drivers/mfd/wcd9xxx-core.c +9 −1 Original line number Diff line number Diff line Loading @@ -773,7 +773,7 @@ static const struct wcd9xxx_codec_type wcd9xxx_codecs[] = { }, { TASHA_MAJOR, cpu_to_le16(0x0), tasha_devs, ARRAY_SIZE(tasha_devs), TASHA_NUM_IRQS, 1, ARRAY_SIZE(tasha_devs), TASHA_NUM_IRQS, -1, WCD9XXX_SLIM_SLAVE_ADDR_TYPE_TAIKO, 0x01 }, }; Loading Loading @@ -992,6 +992,14 @@ static const struct wcd9xxx_codec_type } else { if (d->version > -1) { *version = d->version; } else if (d->id_major == TASHA_MAJOR) { rc = __wcd9xxx_reg_read(wcd9xxx, WCD9335_CHIP_TIER_CTRL_EFUSE_VAL_OUT0); if (rc < 0) { d = NULL; goto exit; } *version = ((u8)rc & 0x80) >> 7; } else { rc = __wcd9xxx_reg_read(wcd9xxx, WCD9XXX_A_CHIP_VERSION); Loading include/linux/mfd/wcd9xxx/core.h +7 −0 Original line number Diff line number Diff line Loading @@ -48,6 +48,13 @@ #define TOMTOM_IS_1_0(ver) \ ((ver == TOMTOM_VERSION_1_0) ? 1 : 0) #define TASHA_VERSION_1_0 0 #define TASHA_VERSION_1_1 1 #define TASHA_IS_1_0(ver) \ ((ver == TASHA_VERSION_1_0) ? 1 : 0) #define TASHA_IS_1_1(ver) \ ((ver == TASHA_VERSION_1_1) ? 1 : 0) enum wcd9xxx_slim_slave_addr_type { WCD9XXX_SLIM_SLAVE_ADDR_TYPE_TABLA, WCD9XXX_SLIM_SLAVE_ADDR_TYPE_TAIKO, Loading sound/soc/codecs/wcd9335.c +50 −3 Original line number Diff line number Diff line Loading @@ -7149,6 +7149,26 @@ static int wcd9335_get_micb_vout_ctl_val(u32 micb_mv) return (micb_mv - 1000) / 50; } static const struct tasha_reg_mask_val tasha_reg_update_reset_val_1_1[] = { {WCD9335_RCO_CTRL_2, 0xFF, 0x47}, {WCD9335_FLYBACK_VNEG_DAC_CTRL_4, 0xFF, 0x60}, }; static const struct tasha_reg_mask_val tasha_codec_reg_init_val_1_1[] = { {WCD9335_FLYBACK_VNEG_DAC_CTRL_1, 0xFF, 0x65}, {WCD9335_FLYBACK_VNEG_DAC_CTRL_2, 0xFF, 0x52}, {WCD9335_FLYBACK_VNEG_DAC_CTRL_3, 0xFF, 0xAF}, {WCD9335_FLYBACK_VNEG_DAC_CTRL_4, 0xFF, 0x40}, {WCD9335_FLYBACK_VNEG_CTRL_3, 0xFF, 0xF4}, {WCD9335_FLYBACK_VNEG_CTRL_9, 0xFF, 0x40}, {WCD9335_FLYBACK_VNEG_CTRL_2, 0xFF, 0x4F}, {WCD9335_FLYBACK_EN, 0xFF, 0x6E}, }; static const struct tasha_reg_mask_val tasha_codec_reg_init_val_1_0[] = { {WCD9335_FLYBACK_VNEG_CTRL_3, 0xFF, 0x54}, }; static const struct tasha_reg_mask_val tasha_codec_reg_defaults[] = { {WCD9335_CODEC_RPM_CLK_GATE, 0x03, 0x00}, {WCD9335_CODEC_RPM_CLK_MCLK_CFG, 0x03, 0x01}, Loading Loading @@ -7214,7 +7234,6 @@ static const struct tasha_reg_mask_val tasha_codec_reg_init_val[] = { {WCD9335_CDC_RX7_RX_PATH_CFG1, 0x08, 0x08}, {WCD9335_CDC_RX8_RX_PATH_CFG1, 0x08, 0x08}, {WCD9335_FLYBACK_VNEG_CTRL_1, 0xFF, 0x63}, {WCD9335_FLYBACK_VNEG_CTRL_3, 0xFF, 0x54}, {WCD9335_FLYBACK_VNEG_CTRL_4, 0xFF, 0x7F}, {WCD9335_CLASSH_CTRL_VCL_1, 0xFF, 0x60}, {WCD9335_CLASSH_CTRL_CCL_5, 0xFF, 0x40}, Loading Loading @@ -7252,14 +7271,43 @@ static const struct tasha_reg_mask_val tasha_codec_reg_init_val[] = { {WCD9335_SOC_MAD_AUDIO_CTL_2, 0x03, 0x03}, }; static void tasha_update_reg_reset_values(struct snd_soc_codec *codec) { u32 i; struct wcd9xxx *tasha_core = dev_get_drvdata(codec->dev->parent); if (TASHA_IS_1_1(tasha_core->version)) { for (i = 0; i < ARRAY_SIZE(tasha_reg_update_reset_val_1_1); i++) snd_soc_write(codec, tasha_reg_update_reset_val_1_1[i].reg, tasha_reg_update_reset_val_1_1[i].val); } } static void tasha_codec_init_reg(struct snd_soc_codec *codec) { u32 i; struct wcd9xxx *wcd9xxx = dev_get_drvdata(codec->dev->parent); for (i = 0; i < ARRAY_SIZE(tasha_codec_reg_init_val); i++) snd_soc_update_bits(codec, tasha_codec_reg_init_val[i].reg, tasha_codec_reg_init_val[i].mask, tasha_codec_reg_init_val[i].val); if (TASHA_IS_1_1(wcd9xxx->version)) { for (i = 0; i < ARRAY_SIZE(tasha_codec_reg_init_val_1_1); i++) snd_soc_update_bits(codec, tasha_codec_reg_init_val_1_1[i].reg, tasha_codec_reg_init_val_1_1[i].mask, tasha_codec_reg_init_val_1_1[i].val); } else if (TASHA_IS_1_0(wcd9xxx->version)) { for (i = 0; i < ARRAY_SIZE(tasha_codec_reg_init_val_1_0); i++) snd_soc_update_bits(codec, tasha_codec_reg_init_val_1_0[i].reg, tasha_codec_reg_init_val_1_0[i].mask, tasha_codec_reg_init_val_1_0[i].val); } } static void tasha_update_reg_defaults(struct tasha_priv *tasha) Loading Loading @@ -7851,12 +7899,11 @@ static int tasha_codec_probe(struct snd_soc_codec *codec) /* Default HPH Mode to Class-H HiFi */ tasha->hph_mode = CLS_H_HIFI; /* MBHC Init */ tasha->codec = codec; for (i = 0; i < COMPANDER_MAX; i++) tasha->comp_enabled[i] = 0; tasha_update_reg_reset_values(codec); tasha->intf_type = wcd9xxx_get_intf_type(); pr_debug("%s: MCLK Rate = %x\n", __func__, control->mclk_rate); if (control->mclk_rate == TASHA_MCLK_CLK_12P288MHZ) Loading Loading
drivers/mfd/wcd9xxx-core.c +9 −1 Original line number Diff line number Diff line Loading @@ -773,7 +773,7 @@ static const struct wcd9xxx_codec_type wcd9xxx_codecs[] = { }, { TASHA_MAJOR, cpu_to_le16(0x0), tasha_devs, ARRAY_SIZE(tasha_devs), TASHA_NUM_IRQS, 1, ARRAY_SIZE(tasha_devs), TASHA_NUM_IRQS, -1, WCD9XXX_SLIM_SLAVE_ADDR_TYPE_TAIKO, 0x01 }, }; Loading Loading @@ -992,6 +992,14 @@ static const struct wcd9xxx_codec_type } else { if (d->version > -1) { *version = d->version; } else if (d->id_major == TASHA_MAJOR) { rc = __wcd9xxx_reg_read(wcd9xxx, WCD9335_CHIP_TIER_CTRL_EFUSE_VAL_OUT0); if (rc < 0) { d = NULL; goto exit; } *version = ((u8)rc & 0x80) >> 7; } else { rc = __wcd9xxx_reg_read(wcd9xxx, WCD9XXX_A_CHIP_VERSION); Loading
include/linux/mfd/wcd9xxx/core.h +7 −0 Original line number Diff line number Diff line Loading @@ -48,6 +48,13 @@ #define TOMTOM_IS_1_0(ver) \ ((ver == TOMTOM_VERSION_1_0) ? 1 : 0) #define TASHA_VERSION_1_0 0 #define TASHA_VERSION_1_1 1 #define TASHA_IS_1_0(ver) \ ((ver == TASHA_VERSION_1_0) ? 1 : 0) #define TASHA_IS_1_1(ver) \ ((ver == TASHA_VERSION_1_1) ? 1 : 0) enum wcd9xxx_slim_slave_addr_type { WCD9XXX_SLIM_SLAVE_ADDR_TYPE_TABLA, WCD9XXX_SLIM_SLAVE_ADDR_TYPE_TAIKO, Loading
sound/soc/codecs/wcd9335.c +50 −3 Original line number Diff line number Diff line Loading @@ -7149,6 +7149,26 @@ static int wcd9335_get_micb_vout_ctl_val(u32 micb_mv) return (micb_mv - 1000) / 50; } static const struct tasha_reg_mask_val tasha_reg_update_reset_val_1_1[] = { {WCD9335_RCO_CTRL_2, 0xFF, 0x47}, {WCD9335_FLYBACK_VNEG_DAC_CTRL_4, 0xFF, 0x60}, }; static const struct tasha_reg_mask_val tasha_codec_reg_init_val_1_1[] = { {WCD9335_FLYBACK_VNEG_DAC_CTRL_1, 0xFF, 0x65}, {WCD9335_FLYBACK_VNEG_DAC_CTRL_2, 0xFF, 0x52}, {WCD9335_FLYBACK_VNEG_DAC_CTRL_3, 0xFF, 0xAF}, {WCD9335_FLYBACK_VNEG_DAC_CTRL_4, 0xFF, 0x40}, {WCD9335_FLYBACK_VNEG_CTRL_3, 0xFF, 0xF4}, {WCD9335_FLYBACK_VNEG_CTRL_9, 0xFF, 0x40}, {WCD9335_FLYBACK_VNEG_CTRL_2, 0xFF, 0x4F}, {WCD9335_FLYBACK_EN, 0xFF, 0x6E}, }; static const struct tasha_reg_mask_val tasha_codec_reg_init_val_1_0[] = { {WCD9335_FLYBACK_VNEG_CTRL_3, 0xFF, 0x54}, }; static const struct tasha_reg_mask_val tasha_codec_reg_defaults[] = { {WCD9335_CODEC_RPM_CLK_GATE, 0x03, 0x00}, {WCD9335_CODEC_RPM_CLK_MCLK_CFG, 0x03, 0x01}, Loading Loading @@ -7214,7 +7234,6 @@ static const struct tasha_reg_mask_val tasha_codec_reg_init_val[] = { {WCD9335_CDC_RX7_RX_PATH_CFG1, 0x08, 0x08}, {WCD9335_CDC_RX8_RX_PATH_CFG1, 0x08, 0x08}, {WCD9335_FLYBACK_VNEG_CTRL_1, 0xFF, 0x63}, {WCD9335_FLYBACK_VNEG_CTRL_3, 0xFF, 0x54}, {WCD9335_FLYBACK_VNEG_CTRL_4, 0xFF, 0x7F}, {WCD9335_CLASSH_CTRL_VCL_1, 0xFF, 0x60}, {WCD9335_CLASSH_CTRL_CCL_5, 0xFF, 0x40}, Loading Loading @@ -7252,14 +7271,43 @@ static const struct tasha_reg_mask_val tasha_codec_reg_init_val[] = { {WCD9335_SOC_MAD_AUDIO_CTL_2, 0x03, 0x03}, }; static void tasha_update_reg_reset_values(struct snd_soc_codec *codec) { u32 i; struct wcd9xxx *tasha_core = dev_get_drvdata(codec->dev->parent); if (TASHA_IS_1_1(tasha_core->version)) { for (i = 0; i < ARRAY_SIZE(tasha_reg_update_reset_val_1_1); i++) snd_soc_write(codec, tasha_reg_update_reset_val_1_1[i].reg, tasha_reg_update_reset_val_1_1[i].val); } } static void tasha_codec_init_reg(struct snd_soc_codec *codec) { u32 i; struct wcd9xxx *wcd9xxx = dev_get_drvdata(codec->dev->parent); for (i = 0; i < ARRAY_SIZE(tasha_codec_reg_init_val); i++) snd_soc_update_bits(codec, tasha_codec_reg_init_val[i].reg, tasha_codec_reg_init_val[i].mask, tasha_codec_reg_init_val[i].val); if (TASHA_IS_1_1(wcd9xxx->version)) { for (i = 0; i < ARRAY_SIZE(tasha_codec_reg_init_val_1_1); i++) snd_soc_update_bits(codec, tasha_codec_reg_init_val_1_1[i].reg, tasha_codec_reg_init_val_1_1[i].mask, tasha_codec_reg_init_val_1_1[i].val); } else if (TASHA_IS_1_0(wcd9xxx->version)) { for (i = 0; i < ARRAY_SIZE(tasha_codec_reg_init_val_1_0); i++) snd_soc_update_bits(codec, tasha_codec_reg_init_val_1_0[i].reg, tasha_codec_reg_init_val_1_0[i].mask, tasha_codec_reg_init_val_1_0[i].val); } } static void tasha_update_reg_defaults(struct tasha_priv *tasha) Loading Loading @@ -7851,12 +7899,11 @@ static int tasha_codec_probe(struct snd_soc_codec *codec) /* Default HPH Mode to Class-H HiFi */ tasha->hph_mode = CLS_H_HIFI; /* MBHC Init */ tasha->codec = codec; for (i = 0; i < COMPANDER_MAX; i++) tasha->comp_enabled[i] = 0; tasha_update_reg_reset_values(codec); tasha->intf_type = wcd9xxx_get_intf_type(); pr_debug("%s: MCLK Rate = %x\n", __func__, control->mclk_rate); if (control->mclk_rate == TASHA_MCLK_CLK_12P288MHZ) Loading