• 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


    附上驱动成功的图

  • 相关阅读:
    for循环里面不要进行remove操作,for循环里remove元素后,list的下标会减小,导致遍历不完全
    elasticsearch,java api, transport Client, 查询时索引库可以用通配符*和删除接口不能用
    (一)WebPack4.0 从零开始
    合并代码 dev 到 master
    vscode 终端无法输入问题 看这个就行了
    node 学习笔记:一、 nvm 安装管理Node版本
    常见的对象创建模式
    深入理解闭包
    sort对数组排序
    图片压缩
  • 原文地址:https://www.cnblogs.com/ningci/p/6852982.html
Copyright © 2020-2023  润新知