Loading sound/soc/msm/msmfalcon-common.c +4 −0 Original line number Diff line number Diff line Loading @@ -2797,6 +2797,8 @@ static int msm_asoc_machine_probe(struct platform_device *pdev) pdata->hph_en0_gpio = 0; } devm_kfree(&pdev->dev, pdata); if (pdata->snd_card_val != INT_SND_CARD) msm_ext_cdc_deinit(); return ret; } Loading @@ -2807,6 +2809,8 @@ static int msm_asoc_machine_remove(struct platform_device *pdev) if (pdata->snd_card_val == INT_SND_CARD) mutex_destroy(&pdata->cdc_int_mclk0_mutex); else msm_ext_cdc_deinit(); msm_free_auxdev_mem(pdev); gpio_free(pdata->us_euro_gpio); Loading sound/soc/msm/msmfalcon-external.c +76 −0 Original line number Diff line number Diff line Loading @@ -35,6 +35,22 @@ #define CODEC_EXT_CLK_RATE 9600000 #define ADSP_STATE_READY_TIMEOUT_MS 3000 #define TLMM_CENTER_MPM_WAKEUP_INT_EN_0 0x03596000 #define LPI_GPIO_22_WAKEUP_VAL 0x00000002 #define TLMM_LPI_DIR_CONN_INTR1_CFG_APPS 0x0359D004 #define LPI_GPIO_22_INTR1_CFG_VAL 0x01 #define LPI_GPIO_22_INTR1_CFG_MASK 0x03 #define TLMM_LPI_GPIO_INTR_CFG1 0x0359B004 #define LPI_GPIO_INTR_CFG1_VAL 0x00000113 #define TLMM_LPI_GPIO22_CFG 0x15078040 #define LPI_GPIO22_CFG_VAL 0x0000009 #define TLMM_LPI_GPIO22_INOUT 0x15078044 #define LPI_GPIO22_INOUT_VAL 0x00000000 #define WSA8810_NAME_1 "wsa881x.20170211" #define WSA8810_NAME_2 "wsa881x.20170212" Loading @@ -50,6 +66,16 @@ struct msm_asoc_wcd93xx_codec { static struct msm_asoc_wcd93xx_codec msm_codec_fn; static struct platform_device *spdev; struct msm_snd_interrupt { void __iomem *mpm_wakeup; void __iomem *intr1_cfg_apps; void __iomem *lpi_gpio_intr_cfg; void __iomem *lpi_gpio_cfg; void __iomem *lpi_gpio_inout; }; static struct msm_snd_interrupt msm_snd_intr_lpi; static bool is_initial_boot; static void *def_ext_mbhc_cal(void); Loading Loading @@ -1193,6 +1219,27 @@ static void msm_afe_clear_config(void) afe_clear_config(AFE_SLIMBUS_SLAVE_CONFIG); } static void msm_snd_interrupt_config(void) { int val; val = ioread32(msm_snd_intr_lpi.mpm_wakeup); val |= LPI_GPIO_22_WAKEUP_VAL; iowrite32(val, msm_snd_intr_lpi.mpm_wakeup); val = ioread32(msm_snd_intr_lpi.intr1_cfg_apps); val &= ~(LPI_GPIO_22_INTR1_CFG_MASK); val |= LPI_GPIO_22_INTR1_CFG_VAL; iowrite32(val, msm_snd_intr_lpi.intr1_cfg_apps); iowrite32(LPI_GPIO_INTR_CFG1_VAL, msm_snd_intr_lpi.lpi_gpio_intr_cfg); iowrite32(LPI_GPIO22_CFG_VAL, msm_snd_intr_lpi.lpi_gpio_cfg); iowrite32(LPI_GPIO22_INOUT_VAL, msm_snd_intr_lpi.lpi_gpio_inout); } static int msm_adsp_power_up_config(struct snd_soc_codec *codec) { int ret = 0; Loading Loading @@ -1221,6 +1268,7 @@ static int msm_adsp_power_up_config(struct snd_soc_codec *codec) ret = -ETIMEDOUT; goto err_fail; } msm_snd_interrupt_config(); ret = msm_afe_set_config(codec); if (ret) Loading Loading @@ -1759,7 +1807,35 @@ int msm_ext_cdc_init(struct platform_device *pdev, ret); ret = 0; } msm_snd_intr_lpi.mpm_wakeup = ioremap(TLMM_CENTER_MPM_WAKEUP_INT_EN_0, 4); msm_snd_intr_lpi.intr1_cfg_apps = ioremap(TLMM_LPI_DIR_CONN_INTR1_CFG_APPS, 4); msm_snd_intr_lpi.lpi_gpio_intr_cfg = ioremap(TLMM_LPI_GPIO_INTR_CFG1, 4); msm_snd_intr_lpi.lpi_gpio_cfg = ioremap(TLMM_LPI_GPIO22_CFG, 4); msm_snd_intr_lpi.lpi_gpio_inout = ioremap(TLMM_LPI_GPIO22_INOUT, 4); err: return ret; } EXPORT_SYMBOL(msm_ext_cdc_init); /** * msm_ext_cdc_deinit - external codec machine specific deinit. */ void msm_ext_cdc_deinit(void) { if (msm_snd_intr_lpi.mpm_wakeup) iounmap(msm_snd_intr_lpi.mpm_wakeup); if (msm_snd_intr_lpi.intr1_cfg_apps) iounmap(msm_snd_intr_lpi.intr1_cfg_apps); if (msm_snd_intr_lpi.lpi_gpio_intr_cfg) iounmap(msm_snd_intr_lpi.lpi_gpio_intr_cfg); if (msm_snd_intr_lpi.lpi_gpio_cfg) iounmap(msm_snd_intr_lpi.lpi_gpio_cfg); if (msm_snd_intr_lpi.lpi_gpio_inout) iounmap(msm_snd_intr_lpi.lpi_gpio_inout); } EXPORT_SYMBOL(msm_ext_cdc_deinit); sound/soc/msm/msmfalcon-external.h +5 −1 Original line number Diff line number Diff line /* Copyright (c) 2015-2016, The Linux Foundation. All rights reserved. /* Copyright (c) 2015-2017, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -34,6 +34,7 @@ int msm_ext_be_hw_params_fixup(struct snd_soc_pcm_runtime *rtd, int msm_ext_cdc_init(struct platform_device *, struct msm_asoc_mach_data *, struct snd_soc_card **, struct wcd_mbhc_config *); void msm_ext_register_audio_notifier(void); void msm_ext_cdc_deinit(void); #else inline int msm_ext_cdc_init(struct platform_device *pdev, struct msm_asoc_mach_data *pdata, Loading @@ -46,5 +47,8 @@ inline int msm_ext_cdc_init(struct platform_device *pdev, inline void msm_ext_register_audio_notifier(void) { } inline void msm_ext_cdc_deinit(void) { } #endif #endif Loading
sound/soc/msm/msmfalcon-common.c +4 −0 Original line number Diff line number Diff line Loading @@ -2797,6 +2797,8 @@ static int msm_asoc_machine_probe(struct platform_device *pdev) pdata->hph_en0_gpio = 0; } devm_kfree(&pdev->dev, pdata); if (pdata->snd_card_val != INT_SND_CARD) msm_ext_cdc_deinit(); return ret; } Loading @@ -2807,6 +2809,8 @@ static int msm_asoc_machine_remove(struct platform_device *pdev) if (pdata->snd_card_val == INT_SND_CARD) mutex_destroy(&pdata->cdc_int_mclk0_mutex); else msm_ext_cdc_deinit(); msm_free_auxdev_mem(pdev); gpio_free(pdata->us_euro_gpio); Loading
sound/soc/msm/msmfalcon-external.c +76 −0 Original line number Diff line number Diff line Loading @@ -35,6 +35,22 @@ #define CODEC_EXT_CLK_RATE 9600000 #define ADSP_STATE_READY_TIMEOUT_MS 3000 #define TLMM_CENTER_MPM_WAKEUP_INT_EN_0 0x03596000 #define LPI_GPIO_22_WAKEUP_VAL 0x00000002 #define TLMM_LPI_DIR_CONN_INTR1_CFG_APPS 0x0359D004 #define LPI_GPIO_22_INTR1_CFG_VAL 0x01 #define LPI_GPIO_22_INTR1_CFG_MASK 0x03 #define TLMM_LPI_GPIO_INTR_CFG1 0x0359B004 #define LPI_GPIO_INTR_CFG1_VAL 0x00000113 #define TLMM_LPI_GPIO22_CFG 0x15078040 #define LPI_GPIO22_CFG_VAL 0x0000009 #define TLMM_LPI_GPIO22_INOUT 0x15078044 #define LPI_GPIO22_INOUT_VAL 0x00000000 #define WSA8810_NAME_1 "wsa881x.20170211" #define WSA8810_NAME_2 "wsa881x.20170212" Loading @@ -50,6 +66,16 @@ struct msm_asoc_wcd93xx_codec { static struct msm_asoc_wcd93xx_codec msm_codec_fn; static struct platform_device *spdev; struct msm_snd_interrupt { void __iomem *mpm_wakeup; void __iomem *intr1_cfg_apps; void __iomem *lpi_gpio_intr_cfg; void __iomem *lpi_gpio_cfg; void __iomem *lpi_gpio_inout; }; static struct msm_snd_interrupt msm_snd_intr_lpi; static bool is_initial_boot; static void *def_ext_mbhc_cal(void); Loading Loading @@ -1193,6 +1219,27 @@ static void msm_afe_clear_config(void) afe_clear_config(AFE_SLIMBUS_SLAVE_CONFIG); } static void msm_snd_interrupt_config(void) { int val; val = ioread32(msm_snd_intr_lpi.mpm_wakeup); val |= LPI_GPIO_22_WAKEUP_VAL; iowrite32(val, msm_snd_intr_lpi.mpm_wakeup); val = ioread32(msm_snd_intr_lpi.intr1_cfg_apps); val &= ~(LPI_GPIO_22_INTR1_CFG_MASK); val |= LPI_GPIO_22_INTR1_CFG_VAL; iowrite32(val, msm_snd_intr_lpi.intr1_cfg_apps); iowrite32(LPI_GPIO_INTR_CFG1_VAL, msm_snd_intr_lpi.lpi_gpio_intr_cfg); iowrite32(LPI_GPIO22_CFG_VAL, msm_snd_intr_lpi.lpi_gpio_cfg); iowrite32(LPI_GPIO22_INOUT_VAL, msm_snd_intr_lpi.lpi_gpio_inout); } static int msm_adsp_power_up_config(struct snd_soc_codec *codec) { int ret = 0; Loading Loading @@ -1221,6 +1268,7 @@ static int msm_adsp_power_up_config(struct snd_soc_codec *codec) ret = -ETIMEDOUT; goto err_fail; } msm_snd_interrupt_config(); ret = msm_afe_set_config(codec); if (ret) Loading Loading @@ -1759,7 +1807,35 @@ int msm_ext_cdc_init(struct platform_device *pdev, ret); ret = 0; } msm_snd_intr_lpi.mpm_wakeup = ioremap(TLMM_CENTER_MPM_WAKEUP_INT_EN_0, 4); msm_snd_intr_lpi.intr1_cfg_apps = ioremap(TLMM_LPI_DIR_CONN_INTR1_CFG_APPS, 4); msm_snd_intr_lpi.lpi_gpio_intr_cfg = ioremap(TLMM_LPI_GPIO_INTR_CFG1, 4); msm_snd_intr_lpi.lpi_gpio_cfg = ioremap(TLMM_LPI_GPIO22_CFG, 4); msm_snd_intr_lpi.lpi_gpio_inout = ioremap(TLMM_LPI_GPIO22_INOUT, 4); err: return ret; } EXPORT_SYMBOL(msm_ext_cdc_init); /** * msm_ext_cdc_deinit - external codec machine specific deinit. */ void msm_ext_cdc_deinit(void) { if (msm_snd_intr_lpi.mpm_wakeup) iounmap(msm_snd_intr_lpi.mpm_wakeup); if (msm_snd_intr_lpi.intr1_cfg_apps) iounmap(msm_snd_intr_lpi.intr1_cfg_apps); if (msm_snd_intr_lpi.lpi_gpio_intr_cfg) iounmap(msm_snd_intr_lpi.lpi_gpio_intr_cfg); if (msm_snd_intr_lpi.lpi_gpio_cfg) iounmap(msm_snd_intr_lpi.lpi_gpio_cfg); if (msm_snd_intr_lpi.lpi_gpio_inout) iounmap(msm_snd_intr_lpi.lpi_gpio_inout); } EXPORT_SYMBOL(msm_ext_cdc_deinit);
sound/soc/msm/msmfalcon-external.h +5 −1 Original line number Diff line number Diff line /* Copyright (c) 2015-2016, The Linux Foundation. All rights reserved. /* Copyright (c) 2015-2017, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -34,6 +34,7 @@ int msm_ext_be_hw_params_fixup(struct snd_soc_pcm_runtime *rtd, int msm_ext_cdc_init(struct platform_device *, struct msm_asoc_mach_data *, struct snd_soc_card **, struct wcd_mbhc_config *); void msm_ext_register_audio_notifier(void); void msm_ext_cdc_deinit(void); #else inline int msm_ext_cdc_init(struct platform_device *pdev, struct msm_asoc_mach_data *pdata, Loading @@ -46,5 +47,8 @@ inline int msm_ext_cdc_init(struct platform_device *pdev, inline void msm_ext_register_audio_notifier(void) { } inline void msm_ext_cdc_deinit(void) { } #endif #endif