wcd939x-i2c: fix incorrect register setting for recording
For audio recording with USB-C analog headset, register settings for charge pump are not correct causing noise being recorded. Fix incorrect register settings for USB-C analog headset audio recording use-case. Change-Id: I6330766a220d74cd1e1b3e206b9379ef4fdd94c4 Signed-off-by: Phani Kumar Uppalapati <quic_phaniu@quicinc.com>
This commit is contained in:
parent
d8eb842415
commit
c05b38e9bd
@ -547,7 +547,8 @@ static int wcd_usbss_usbc_analog_setup_switches(struct wcd_usbss_ctxt *priv)
|
|||||||
*/
|
*/
|
||||||
if (priv->cable_status & (BIT(WCD_USBSS_AATC) |
|
if (priv->cable_status & (BIT(WCD_USBSS_AATC) |
|
||||||
BIT(WCD_USBSS_GND_MIC_SWAP_AATC) |
|
BIT(WCD_USBSS_GND_MIC_SWAP_AATC) |
|
||||||
BIT(WCD_USBSS_HSJ_CONNECT)))
|
BIT(WCD_USBSS_HSJ_CONNECT) |
|
||||||
|
BIT(WCD_USBSS_GND_MIC_SWAP_HSJ)))
|
||||||
cable_status_cache = true;
|
cable_status_cache = true;
|
||||||
/* notify call chain on event */
|
/* notify call chain on event */
|
||||||
blocking_notifier_call_chain(&priv->wcd_usbss_notifier,
|
blocking_notifier_call_chain(&priv->wcd_usbss_notifier,
|
||||||
@ -614,6 +615,7 @@ static int wcd_usbss_switch_update_defaults(struct wcd_usbss_ctxt *priv)
|
|||||||
regmap_update_bits(priv->regmap, WCD_USBSS_EQUALIZER1,
|
regmap_update_bits(priv->regmap, WCD_USBSS_EQUALIZER1,
|
||||||
WCD_USBSS_EQUALIZER1_EQ_EN_MASK, 0x00);
|
WCD_USBSS_EQUALIZER1_EQ_EN_MASK, 0x00);
|
||||||
regmap_update_bits(priv->regmap, WCD_USBSS_USB_SS_CNTL, 0x07, 0x05); /* Mode5: USB*/
|
regmap_update_bits(priv->regmap, WCD_USBSS_USB_SS_CNTL, 0x07, 0x05); /* Mode5: USB*/
|
||||||
|
regmap_write(priv->regmap, WCD_USBSS_PMP_EN, 0x0);
|
||||||
if (wcd_usbss_ctxt_->version == WCD_USBSS_2_0)
|
if (wcd_usbss_ctxt_->version == WCD_USBSS_2_0)
|
||||||
regmap_update_bits(wcd_usbss_ctxt_->regmap, WCD_USBSS_PMP_OUT1,
|
regmap_update_bits(wcd_usbss_ctxt_->regmap, WCD_USBSS_PMP_OUT1,
|
||||||
0x40, 0x00);
|
0x40, 0x00);
|
||||||
@ -751,13 +753,18 @@ int wcd_usbss_audio_config(bool enable, enum wcd_usbss_config_type config_type,
|
|||||||
|
|
||||||
if (!(wcd_usbss_ctxt_->cable_status & (BIT(WCD_USBSS_AATC) |
|
if (!(wcd_usbss_ctxt_->cable_status & (BIT(WCD_USBSS_AATC) |
|
||||||
BIT(WCD_USBSS_GND_MIC_SWAP_AATC) |
|
BIT(WCD_USBSS_GND_MIC_SWAP_AATC) |
|
||||||
BIT(WCD_USBSS_HSJ_CONNECT))))
|
BIT(WCD_USBSS_HSJ_CONNECT) |
|
||||||
|
BIT(WCD_USBSS_GND_MIC_SWAP_HSJ))))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
switch (config_type) {
|
switch (config_type) {
|
||||||
case WCD_USBSS_CONFIG_TYPE_POWER_MODE:
|
case WCD_USBSS_CONFIG_TYPE_POWER_MODE:
|
||||||
regmap_update_bits(wcd_usbss_ctxt_->regmap,
|
regmap_update_bits(wcd_usbss_ctxt_->regmap,
|
||||||
WCD_USBSS_USB_SS_CNTL, 0x07, power_mode);
|
WCD_USBSS_USB_SS_CNTL, 0x07, power_mode);
|
||||||
|
if (power_mode == 0x1) /* MBHC Mode */
|
||||||
|
regmap_write(wcd_usbss_ctxt_->regmap, WCD_USBSS_PMP_EN, 0xF);
|
||||||
|
else
|
||||||
|
regmap_write(wcd_usbss_ctxt_->regmap, WCD_USBSS_PMP_EN, 0x0);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
pr_err("%s Invalid config type %d\n", __func__, config_type);
|
pr_err("%s Invalid config type %d\n", __func__, config_type);
|
||||||
@ -849,6 +856,7 @@ int wcd_usbss_switch_update(enum wcd_usbss_cable_types ctype,
|
|||||||
/* Update power mode to mode 1 for AATC */
|
/* Update power mode to mode 1 for AATC */
|
||||||
regmap_update_bits(wcd_usbss_ctxt_->regmap,
|
regmap_update_bits(wcd_usbss_ctxt_->regmap,
|
||||||
WCD_USBSS_USB_SS_CNTL, 0x07, 0x01);
|
WCD_USBSS_USB_SS_CNTL, 0x07, 0x01);
|
||||||
|
regmap_write(wcd_usbss_ctxt_->regmap, WCD_USBSS_PMP_EN, 0xF);
|
||||||
if (wcd_usbss_ctxt_->version == WCD_USBSS_2_0)
|
if (wcd_usbss_ctxt_->version == WCD_USBSS_2_0)
|
||||||
regmap_update_bits(wcd_usbss_ctxt_->regmap,
|
regmap_update_bits(wcd_usbss_ctxt_->regmap,
|
||||||
WCD_USBSS_PMP_OUT1, 0x40, 0x40);
|
WCD_USBSS_PMP_OUT1, 0x40, 0x40);
|
||||||
@ -902,6 +910,7 @@ int wcd_usbss_switch_update(enum wcd_usbss_cable_types ctype,
|
|||||||
/* Update power mode to mode 1 for AATC */
|
/* Update power mode to mode 1 for AATC */
|
||||||
regmap_update_bits(wcd_usbss_ctxt_->regmap,
|
regmap_update_bits(wcd_usbss_ctxt_->regmap,
|
||||||
WCD_USBSS_USB_SS_CNTL, 0x07, 0x01);
|
WCD_USBSS_USB_SS_CNTL, 0x07, 0x01);
|
||||||
|
regmap_write(wcd_usbss_ctxt_->regmap, WCD_USBSS_PMP_EN, 0xF);
|
||||||
if (wcd_usbss_ctxt_->version == WCD_USBSS_2_0)
|
if (wcd_usbss_ctxt_->version == WCD_USBSS_2_0)
|
||||||
regmap_update_bits(wcd_usbss_ctxt_->regmap,
|
regmap_update_bits(wcd_usbss_ctxt_->regmap,
|
||||||
WCD_USBSS_PMP_OUT1, 0x40, 0x40);
|
WCD_USBSS_PMP_OUT1, 0x40, 0x40);
|
||||||
@ -935,6 +944,7 @@ int wcd_usbss_switch_update(enum wcd_usbss_cable_types ctype,
|
|||||||
/* Update power mode to mode 1 for AATC */
|
/* Update power mode to mode 1 for AATC */
|
||||||
regmap_update_bits(wcd_usbss_ctxt_->regmap,
|
regmap_update_bits(wcd_usbss_ctxt_->regmap,
|
||||||
WCD_USBSS_USB_SS_CNTL, 0x07, 0x01);
|
WCD_USBSS_USB_SS_CNTL, 0x07, 0x01);
|
||||||
|
regmap_write(wcd_usbss_ctxt_->regmap, WCD_USBSS_PMP_EN, 0xF);
|
||||||
if (wcd_usbss_ctxt_->version == WCD_USBSS_2_0)
|
if (wcd_usbss_ctxt_->version == WCD_USBSS_2_0)
|
||||||
regmap_update_bits(wcd_usbss_ctxt_->regmap,
|
regmap_update_bits(wcd_usbss_ctxt_->regmap,
|
||||||
WCD_USBSS_PMP_OUT1, 0x40, 0x40);
|
WCD_USBSS_PMP_OUT1, 0x40, 0x40);
|
||||||
|
Loading…
Reference in New Issue
Block a user