基于px30平台RX809-1的codec声卡芯片的驱动分析

本文详细阐述了在嵌入式系统中初始化音频系统的步骤,包括平台组件、Codec配置及简单音频卡绑定过程。从rockchip_i2s.c中的平台组件初始化,到rk817_codec.c中的Codec设置,再到simple-card.c中的DAI链接绑定,全面解析了嵌入式音频系统启动流程。

1:platform
rockchip_i2s.c:    将platform中的component放入dai链表,component->dai_drv指向rockchip_i2s_dai
rockchip_i2s_probe
    1.1:/* clk init */
    i2s->hclk = devm_clk_get(&pdev->dev, "i2s_hclk");
    ret = clk_prepare_enable(i2s->hclk);
    
    1.2:/* i2s regmap init */
    i2s->regmap = devm_regmap_init_mmio(&pdev->dev, regs, &rockchip_i2s_regmap_config);
    
    1.3:/* dma init*/
    i2s->playback_dma_data.addr = res->start + I2S_TXDR;
    i2s->playback_dma_data.addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
    i2s->playback_dma_data.maxburst = 8;
    i2s->capture_dma_data.addr = res->start + I2S_RXDR;
    i2s->capture_dma_data.addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
    i2s->capture_dma_data.maxburst = 8;
    
    1.4:/* snd_soc_dai_driver register*/ 
    soc_dai = devm_kzalloc(&pdev->dev, sizeof(*soc_dai), GFP_KERNEL);
    memcpy(soc_dai, &rockchip_i2s_dai, sizeof(*soc_dai));
    ret = devm_snd_soc_register_component(&pdev->dev, &rockchip_i2s_component, soc_dai, 1);
        struct snd_soc_component_driver component->dai_drv = dai_drv;    //dai_drv = snd_soc_dai_driver = rockchip_i2s_dai
        struct snd_soc_dai *dai;
        dai->component = component;
        dai->driver = &dai_drv[i];
        list_add(&dai->list, &component->dai_list);    
    
附1:
static const struct snd_soc_dai_ops rockchip_i2s_dai_ops = {
    .hw_params = rockchip_i2s_hw_params,
    .set_sysclk = rockchip_i2s_set_sysclk,
    .set_fmt = rockchip_i2s_set_fmt,
    .trigger = rockchip_i2s_trigger,
};

static struct snd_soc_dai_driver rockchip_i2s_dai = {
    .probe = rockchip_i2s_dai_probe,
    .playback = {
        .stream_name = "Playback",
        .channels_min = 2,
        .channels_max = 8,
        .rates = SNDRV_PCM_RATE_8000_192000,
        .formats = (SNDRV_PCM_FMTBIT_S8 |
                SNDRV_PCM_FMTBIT_S16_LE |
                SNDRV_PCM_FMTBIT_S20_3LE |
                SNDRV_PCM_FMTBIT_S24_LE |
                SNDRV_PCM_FMTBIT_S32_LE),
    },
    .capture = {
        .stream_name = "Captu

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值