ASoC: msm: Include interrupt registers in pdata
To fix access of unmapped memory region, add lpi registers in pdata of node. This enables unmapping when pdata is destroyed. Change-Id: I62b2e50f8db39bdc430299a817ba621288ab4f3e Signed-off-by: Laxminath Kasam <lkasam@codeaurora.org>
This commit is contained in:
parent
9335a12bb0
commit
4c3ed0da3a
4 changed files with 41 additions and 38 deletions
|
@ -2909,7 +2909,7 @@ err:
|
|||
}
|
||||
devm_kfree(&pdev->dev, pdata);
|
||||
if (pdata->snd_card_val != INT_SND_CARD)
|
||||
msm_ext_cdc_deinit();
|
||||
msm_ext_cdc_deinit(pdata);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -2921,7 +2921,7 @@ 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_ext_cdc_deinit(pdata);
|
||||
msm_free_auxdev_mem(pdev);
|
||||
|
||||
gpio_free(pdata->us_euro_gpio);
|
||||
|
|
|
@ -78,6 +78,14 @@ enum {
|
|||
EXT_SND_CARD_TAVIL,
|
||||
};
|
||||
|
||||
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;
|
||||
};
|
||||
|
||||
struct msm_asoc_mach_data {
|
||||
int us_euro_gpio; /* used by gpio driver API */
|
||||
int hph_en1_gpio;
|
||||
|
@ -105,6 +113,7 @@ struct msm_asoc_mach_data {
|
|||
struct mutex cdc_int_mclk0_mutex;
|
||||
struct delayed_work disable_int_mclk0_work;
|
||||
struct afe_clk_set digital_cdc_core_clk;
|
||||
struct msm_snd_interrupt msm_snd_intr_lpi;
|
||||
};
|
||||
|
||||
int msm_common_be_hw_params_fixup(struct snd_soc_pcm_runtime *rtd,
|
||||
|
|
|
@ -67,16 +67,6 @@ 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);
|
||||
|
@ -1220,25 +1210,25 @@ static void msm_afe_clear_config(void)
|
|||
afe_clear_config(AFE_SLIMBUS_SLAVE_CONFIG);
|
||||
}
|
||||
|
||||
static void msm_snd_interrupt_config(void)
|
||||
static void msm_snd_interrupt_config(struct msm_asoc_mach_data *pdata)
|
||||
{
|
||||
int val;
|
||||
|
||||
val = ioread32(msm_snd_intr_lpi.mpm_wakeup);
|
||||
val = ioread32(pdata->msm_snd_intr_lpi.mpm_wakeup);
|
||||
val |= LPI_GPIO_22_WAKEUP_VAL;
|
||||
iowrite32(val, msm_snd_intr_lpi.mpm_wakeup);
|
||||
iowrite32(val, pdata->msm_snd_intr_lpi.mpm_wakeup);
|
||||
|
||||
val = ioread32(msm_snd_intr_lpi.intr1_cfg_apps);
|
||||
val = ioread32(pdata->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(val, pdata->msm_snd_intr_lpi.intr1_cfg_apps);
|
||||
|
||||
iowrite32(LPI_GPIO_INTR_CFG1_VAL,
|
||||
msm_snd_intr_lpi.lpi_gpio_intr_cfg);
|
||||
pdata->msm_snd_intr_lpi.lpi_gpio_intr_cfg);
|
||||
iowrite32(LPI_GPIO22_CFG_VAL,
|
||||
msm_snd_intr_lpi.lpi_gpio_cfg);
|
||||
pdata->msm_snd_intr_lpi.lpi_gpio_cfg);
|
||||
iowrite32(LPI_GPIO22_INOUT_VAL,
|
||||
msm_snd_intr_lpi.lpi_gpio_inout);
|
||||
pdata->msm_snd_intr_lpi.lpi_gpio_inout);
|
||||
}
|
||||
|
||||
static int msm_adsp_power_up_config(struct snd_soc_codec *codec)
|
||||
|
@ -1246,7 +1236,10 @@ static int msm_adsp_power_up_config(struct snd_soc_codec *codec)
|
|||
int ret = 0;
|
||||
unsigned long timeout;
|
||||
int adsp_ready = 0;
|
||||
struct snd_soc_card *card = codec->component.card;
|
||||
struct msm_asoc_mach_data *pdata;
|
||||
|
||||
pdata = snd_soc_card_get_drvdata(card);
|
||||
timeout = jiffies +
|
||||
msecs_to_jiffies(ADSP_STATE_READY_TIMEOUT_MS);
|
||||
|
||||
|
@ -1269,7 +1262,7 @@ static int msm_adsp_power_up_config(struct snd_soc_codec *codec)
|
|||
ret = -ETIMEDOUT;
|
||||
goto err_fail;
|
||||
}
|
||||
msm_snd_interrupt_config();
|
||||
msm_snd_interrupt_config(pdata);
|
||||
|
||||
ret = msm_afe_set_config(codec);
|
||||
if (ret)
|
||||
|
@ -1817,15 +1810,15 @@ int msm_ext_cdc_init(struct platform_device *pdev,
|
|||
ret);
|
||||
ret = 0;
|
||||
}
|
||||
msm_snd_intr_lpi.mpm_wakeup =
|
||||
pdata->msm_snd_intr_lpi.mpm_wakeup =
|
||||
ioremap(TLMM_CENTER_MPM_WAKEUP_INT_EN_0, 4);
|
||||
msm_snd_intr_lpi.intr1_cfg_apps =
|
||||
pdata->msm_snd_intr_lpi.intr1_cfg_apps =
|
||||
ioremap(TLMM_LPI_DIR_CONN_INTR1_CFG_APPS, 4);
|
||||
msm_snd_intr_lpi.lpi_gpio_intr_cfg =
|
||||
pdata->msm_snd_intr_lpi.lpi_gpio_intr_cfg =
|
||||
ioremap(TLMM_LPI_GPIO_INTR_CFG1, 4);
|
||||
msm_snd_intr_lpi.lpi_gpio_cfg =
|
||||
pdata->msm_snd_intr_lpi.lpi_gpio_cfg =
|
||||
ioremap(TLMM_LPI_GPIO22_CFG, 4);
|
||||
msm_snd_intr_lpi.lpi_gpio_inout =
|
||||
pdata->msm_snd_intr_lpi.lpi_gpio_inout =
|
||||
ioremap(TLMM_LPI_GPIO22_INOUT, 4);
|
||||
err:
|
||||
return ret;
|
||||
|
@ -1835,17 +1828,18 @@ EXPORT_SYMBOL(msm_ext_cdc_init);
|
|||
/**
|
||||
* msm_ext_cdc_deinit - external codec machine specific deinit.
|
||||
*/
|
||||
void msm_ext_cdc_deinit(void)
|
||||
void msm_ext_cdc_deinit(struct msm_asoc_mach_data *pdata)
|
||||
{
|
||||
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);
|
||||
if (pdata->msm_snd_intr_lpi.mpm_wakeup)
|
||||
iounmap(pdata->msm_snd_intr_lpi.mpm_wakeup);
|
||||
if (pdata->msm_snd_intr_lpi.intr1_cfg_apps)
|
||||
iounmap(pdata->msm_snd_intr_lpi.intr1_cfg_apps);
|
||||
if (pdata->msm_snd_intr_lpi.lpi_gpio_intr_cfg)
|
||||
iounmap(pdata->msm_snd_intr_lpi.lpi_gpio_intr_cfg);
|
||||
if (pdata->msm_snd_intr_lpi.lpi_gpio_cfg)
|
||||
iounmap(pdata->msm_snd_intr_lpi.lpi_gpio_cfg);
|
||||
if (pdata->msm_snd_intr_lpi.lpi_gpio_inout)
|
||||
iounmap(pdata->msm_snd_intr_lpi.lpi_gpio_inout);
|
||||
|
||||
}
|
||||
EXPORT_SYMBOL(msm_ext_cdc_deinit);
|
||||
|
|
|
@ -34,7 +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(struct platform_device *pdev);
|
||||
void msm_ext_cdc_deinit(void);
|
||||
void msm_ext_cdc_deinit(struct msm_asoc_mach_data *pdata);
|
||||
#else
|
||||
inline int msm_ext_cdc_init(struct platform_device *pdev,
|
||||
struct msm_asoc_mach_data *pdata,
|
||||
|
|
Loading…
Add table
Reference in a new issue