zoukankan      html  css  js  c++  java
  • ALSA 声卡 驱动 linux 4.1.36 中变化

    linux 4.1.36 中变化

    1
    ret = request_irq(IRQ_DMA2, s3c2440_dma2_irq, IRQF_DISABLED, "myalsa for playback", substream);

    IRQF_DISABLED 换为 IRQF_TRIGGER_NONE

    2
    snd_soc_register_dai(&pdev->dev, &s3c2440_i2s_dai);
    换为
    static const struct snd_soc_component_driver s3c2440_i2s_component = {    
        .name = "s3c2440-iis",
    };

    ret = devm_snd_soc_register_component(&pdev->dev, &s3c2440_i2s_component, &s3c2440_i2s_dai, 1);    
        

    3

    struct snd_soc_pcm_runtime *rtd

    中没有 rtd->codec 成员。

    4

    snd_soc_dapm_new_widgets(dapm) 改为 dapm->card

    5 devs.c 中没有 i2s 的配置  从 网上找到补丁, 结果还是不能使用。 先使用 ko 加载吧,也能使用,以后有空在编进内核。

    #ifdef CONFIG_PLAT_S3C24XX
    static struct resource s3c_iis_resource[] = {
        [0] = DEFINE_RES_MEM(S3C24XX_PA_IIS, S3C24XX_SZ_IIS),
    };

    static struct s3c_audio_pdata s3c_iis_platdata = {
        .dma_playback = (void *)DMACH_I2S_OUT,
        .dma_capture = (void *)DMACH_I2S_IN,
    };

    struct platform_device s3c_device_iis = {
        .name        = "s3c24xx-iis",
        .id        = -1,
        .num_resources    = ARRAY_SIZE(s3c_iis_resource),
        .resource    = s3c_iis_resource,
        .dev        = {
            .dma_mask        = &samsung_device_dma_mask,
            .coherent_dma_mask    = DMA_BIT_MASK(32),
            .platform_data = &s3c_iis_platdata,
        }
    };

    s3c24xx-i2s.c

    添加头文件

    //new add
    #include <linux/platform_data/asoc-s3c.h>

    static struct s3c_dma_params s3c24xx_i2s_pcm_stereo_out = {
        //.slave        = (void *)(uintptr_t)DMACH_I2S_OUT,
        .ch_name    = "tx",
        .dma_size    = 2,
    };

    static struct s3c_dma_params s3c24xx_i2s_pcm_stereo_in = {
        //.slave        = (void *)(uintptr_t)DMACH_I2S_IN,
        .ch_name    = "rx",
        .dma_size    = 2,
    };

    static int s3c24xx_iis_dev_probe(struct platform_device *pdev)
    {
        int ret = 0;
        struct resource *res;
        //new add
        struct s3c_audio_pdata *pdata = dev_get_platdata(&pdev->dev);
        res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
        if (!res) {
            dev_err(&pdev->dev, "Can't get IO resource. ");
            return -ENOENT;
        }
        s3c24xx_i2s.regs = devm_ioremap_resource(&pdev->dev, res);
        if (IS_ERR(s3c24xx_i2s.regs))
            return PTR_ERR(s3c24xx_i2s.regs);

        s3c24xx_i2s_pcm_stereo_out.dma_addr = res->start + S3C2410_IISFIFO;
        s3c24xx_i2s_pcm_stereo_out.slave = pdata->dma_playback;
        s3c24xx_i2s_pcm_stereo_in.dma_addr = res->start + S3C2410_IISFIFO;
        s3c24xx_i2s_pcm_stereo_in.slave = pdata->dma_capture;

        ret = devm_snd_soc_register_component(&pdev->dev,
                &s3c24xx_i2s_component, &s3c24xx_i2s_dai, 1);
        if (ret) {
            pr_err("failed to register the dai ");
            return ret;
        }

        ret = samsung_asoc_dma_platform_register(&pdev->dev);
        if (ret)
            pr_err("failed to register the dma: %d ", ret);

        return ret;
    }

    如果不配置就会出错

    S3C24XX_UDA134X SoC Audio driver
    soc-audio soc-audio: ASoC: machine S3C24XX_UDA134X should use snd_soc_register_card()
    s3c24xx-iis s3c24xx-iis: Missing dma channel for stream: 0
    s3c24xx-iis s3c24xx-iis: ASoC: pcm constructor failed: -22
    soc-audio soc-audio: ASoC: can't create pcm UDA134X :-22
    soc-audio soc-audio: ASoC: failed to instantiate card -22
    soc-audio: probe of soc-audio failed with error -22


    附上驱动成功的图

  • 相关阅读:
    Codeforces Round #415 (Div. 2) C. Do you want a date?
    Lifting the Stone 计算几何 多边形求重心
    计算几何 多边形面积 和 重心 的求法
    POJ 3304 segments 线段和直线相交
    LibreOJ #114. k 大异或和
    LibreOJ #113. 最大异或和
    对于各种各样平衡树的比较
    数组splay ------ luogu P3369 【模板】普通平衡树(Treap/SBT)
    替罪羊树 ------ luogu P3369 【模板】普通平衡树(Treap/SBT)
    红黑树 ------ luogu P3369 【模板】普通平衡树(Treap/SBT)
  • 原文地址:https://www.cnblogs.com/ningci/p/6852982.html
Copyright © 2011-2022 走看看