diff --git a/asoc/kona-port-config.h b/asoc/kona-port-config.h index 0f73791753..723c94a7dd 100644 --- a/asoc/kona-port-config.h +++ b/asoc/kona-port-config.h @@ -50,6 +50,15 @@ static struct port_params tx_frame_params_default[SWR_MSTR_PORT_LEN] = { {3, 0, 0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 1}, /* TX4 */ }; +/* TX UC1: TX1: 1ch, TX2: 2chs, TX3: 1ch(MBHC) */ +static struct port_params tx_frame_params_v2[SWR_MSTR_PORT_LEN] = { + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},/* PCM OUT */ + {1, 0, 0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 1}, /* TX1 */ + {1, 0, 0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 2}, /* TX2 */ + {3, 2, 0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0}, /* TX3 */ + {3, 0, 0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 2}, /* TX4 */ +}; + static struct swr_mstr_port_map sm_port_map[] = { {TX_MACRO, SWR_UC0, tx_frame_params_default}, {RX_MACRO, SWR_UC0, rx_frame_params_default}, @@ -57,4 +66,11 @@ static struct swr_mstr_port_map sm_port_map[] = { {WSA_MACRO, SWR_UC0, wsa_frame_params_default}, }; +static struct swr_mstr_port_map sm_port_map_v2[] = { + {TX_MACRO, SWR_UC0, tx_frame_params_v2}, + {RX_MACRO, SWR_UC0, rx_frame_params_default}, + {RX_MACRO, SWR_UC1, rx_frame_params_dsd}, + {WSA_MACRO, SWR_UC0, wsa_frame_params_default}, +}; + #endif /* _KONA_PORT_CONFIG */ diff --git a/asoc/kona.c b/asoc/kona.c index 87c32ef8c0..c98de7aa10 100644 --- a/asoc/kona.c +++ b/asoc/kona.c @@ -167,6 +167,7 @@ enum { struct msm_asoc_mach_data { struct snd_info_entry *codec_root; int usbc_en2_gpio; /* used by gpio driver API */ + int lito_v2_enabled; struct device_node *dmic01_gpio_p; /* used by pinctrl API */ struct device_node *dmic23_gpio_p; /* used by pinctrl API */ struct device_node *dmic45_gpio_p; /* used by pinctrl API */ @@ -5288,8 +5289,17 @@ static int msm_int_audrx_init(struct snd_soc_pcm_runtime *rtd) WSA_MACRO_GAIN_OFFSET_M1P5_DB); } } - bolero_set_port_map(component, ARRAY_SIZE(sm_port_map), - sm_port_map); + if (pdata->lito_v2_enabled) { + /* + * Enable tx data line3 for saipan version v2 amd + * write corresponding lpi register. + */ + bolero_set_port_map(component, ARRAY_SIZE(sm_port_map_v2), + sm_port_map_v2); + } else { + bolero_set_port_map(component, ARRAY_SIZE(sm_port_map), + sm_port_map); + } } card = rtd->card->snd_card; if (!pdata->codec_root) { @@ -7898,6 +7908,10 @@ static int msm_asoc_machine_probe(struct platform_device *pdev) if (!pdata) return -ENOMEM; + of_property_read_u32(pdev->dev.of_node, + "qcom,lito-is-v2-enabled", + &pdata->lito_v2_enabled); + card = populate_snd_card_dailinks(&pdev->dev); if (!card) { dev_err(&pdev->dev, "%s: Card uninitialized\n", __func__);