lkml.org 
[lkml]   [2023]   [Nov]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v11 04/15] ASoC: fsl_asrc: register m2m platform device
    Date
    Register m2m platform device, that user can
    use M2M feature.

    Defined platform data structure and platform
    driver name.

    Signed-off-by: Shengjiu Wang <shengjiu.wang@nxp.com>
    Acked-by: Mark Brown <broonie@kernel.org>
    ---
    include/sound/fsl_asrc_common.h | 23 +++++++++++++++++++++++
    sound/soc/fsl/fsl_asrc.c | 18 ++++++++++++++++++
    2 files changed, 41 insertions(+)

    diff --git a/include/sound/fsl_asrc_common.h b/include/sound/fsl_asrc_common.h
    index 3b53d366182f..c709b8906929 100644
    --- a/include/sound/fsl_asrc_common.h
    +++ b/include/sound/fsl_asrc_common.h
    @@ -71,6 +71,7 @@ struct fsl_asrc_pair {
    * @dma_params_rx: DMA parameters for receive channel
    * @dma_params_tx: DMA parameters for transmit channel
    * @pdev: platform device pointer
    + * @m2m_pdev: m2m platform device pointer
    * @regmap: regmap handler
    * @paddr: physical address to the base address of registers
    * @mem_clk: clock source to access register
    @@ -103,6 +104,7 @@ struct fsl_asrc {
    struct snd_dmaengine_dai_dma_data dma_params_rx;
    struct snd_dmaengine_dai_dma_data dma_params_tx;
    struct platform_device *pdev;
    + struct platform_device *m2m_pdev;
    struct regmap *regmap;
    unsigned long paddr;
    struct clk *mem_clk;
    @@ -139,6 +141,27 @@ struct fsl_asrc {
    void *private;
    };

    +/**
    + * struct fsl_asrc_m2m_pdata - platform data
    + * @asrc: pointer to struct fsl_asrc
    + * @fmt_in: input sample format
    + * @fmt_out: output sample format
    + * @chan_min: minimum channel number
    + * @chan_max: maximum channel number
    + * @rate_min: minimum rate
    + * @rate_max: maximum rete
    + */
    +struct fsl_asrc_m2m_pdata {
    + struct fsl_asrc *asrc;
    + u64 fmt_in;
    + u64 fmt_out;
    + int chan_min;
    + int chan_max;
    + int rate_min;
    + int rate_max;
    +};
    +
    +#define M2M_DRV_NAME "fsl_asrc_m2m"
    #define DRV_NAME "fsl-asrc-dai"
    extern struct snd_soc_component_driver fsl_asrc_component;

    diff --git a/sound/soc/fsl/fsl_asrc.c b/sound/soc/fsl/fsl_asrc.c
    index 7d8643ee0ba0..5ecb5d869607 100644
    --- a/sound/soc/fsl/fsl_asrc.c
    +++ b/sound/soc/fsl/fsl_asrc.c
    @@ -1187,6 +1187,7 @@ static int fsl_asrc_runtime_suspend(struct device *dev);
    static int fsl_asrc_probe(struct platform_device *pdev)
    {
    struct device_node *np = pdev->dev.of_node;
    + struct fsl_asrc_m2m_pdata m2m_pdata;
    struct fsl_asrc_priv *asrc_priv;
    struct fsl_asrc *asrc;
    struct resource *res;
    @@ -1368,6 +1369,18 @@ static int fsl_asrc_probe(struct platform_device *pdev)
    goto err_pm_get_sync;
    }

    + m2m_pdata.asrc = asrc;
    + m2m_pdata.fmt_in = FSL_ASRC_FORMATS;
    + m2m_pdata.fmt_out = FSL_ASRC_FORMATS | SNDRV_PCM_FMTBIT_S8;
    + m2m_pdata.rate_min = 5512;
    + m2m_pdata.rate_max = 192000;
    + m2m_pdata.chan_min = 1;
    + m2m_pdata.chan_max = 10;
    + asrc->m2m_pdev = platform_device_register_data(&pdev->dev,
    + M2M_DRV_NAME,
    + PLATFORM_DEVID_AUTO,
    + &m2m_pdata,
    + sizeof(m2m_pdata));
    return 0;

    err_pm_get_sync:
    @@ -1380,6 +1393,11 @@ static int fsl_asrc_probe(struct platform_device *pdev)

    static void fsl_asrc_remove(struct platform_device *pdev)
    {
    + struct fsl_asrc *asrc = dev_get_drvdata(&pdev->dev);
    +
    + if (asrc->m2m_pdev && !IS_ERR(asrc->m2m_pdev))
    + platform_device_unregister(asrc->m2m_pdev);
    +
    pm_runtime_disable(&pdev->dev);
    if (!pm_runtime_status_suspended(&pdev->dev))
    fsl_asrc_runtime_suspend(&pdev->dev);
    --
    2.34.1
    \
     
     \ /
      Last update: 2023-11-22 09:05    [W:3.664 / U:0.068 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site