主题 : uda134x驱动函数probe不执行 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 34711
精华: 0
发帖: 45
金钱: 235 两
威望: 47 点
贡献值: 0 点
综合积分: 90 分
注册时间: 2010-12-20
最后登录: 2011-10-27
楼主  发表于: 2011-08-03 11:06

 uda134x驱动函数probe不执行

tiny6410、linux2.6.38内核里编译进去uda134x驱动后,发现probe函数没有执行。
ps:
打印信息
uda134x  codec init
card number is 0
ALSA device list:
  No soundcards found.
源代码
static int __devinit uda134x_codec_probe(struct platform_device *pdev)
{
        printk("uda134x codec probe\n");
    return snd_soc_register_codec(&pdev->dev,
            &soc_codec_dev_uda134x, &uda134x_dai, 1);
}

static int __devexit uda134x_codec_remove(struct platform_device *pdev)
{
    snd_soc_unregister_codec(&pdev->dev);
    return 0;
}

static struct platform_driver uda134x_codec_driver = {
    .driver = {
        .name = "uda134x-codec",
        .owner = THIS_MODULE,
    },
    .probe = uda134x_codec_probe,
    .remove = __devexit_p(uda134x_codec_remove),
};

static int __init uda134x_codec_init(void)
{
        printk("uda134x codec init\n");
    return platform_driver_register(&uda134x_codec_driver);
}
module_init(uda134x_codec_init);

static void __exit uda134x_codec_exit(void)
{
    platform_driver_unregister(&uda134x_codec_driver);
}
module_exit(uda134x_codec_exit);
级别: 新手上路
UID: 34711
精华: 0
发帖: 45
金钱: 235 两
威望: 47 点
贡献值: 0 点
综合积分: 90 分
注册时间: 2010-12-20
最后登录: 2011-10-27
1楼  发表于: 2011-08-03 11:11
开发板自带的wm9713驱动就会运行
ps:
我在static int __init wm9713_init(void),
static __devinit int wm9713_probe(struct platform_device *pdev),
static int wm9713_soc_probe(struct snd_soc_codec *codec)都加了打印信息,都打印出来了。
打印信息
wm9713 init
wm9713 probe
wm9713 soc prob
asoc: wm9713-hifi <-> samsung-ac97 mapping ok
snd card register in snd soc instantiate card
card number is 0
ALSA device list:
  #0: MINI6410
源代码
static struct snd_soc_codec_driver soc_codec_dev_wm9713 = {
    .probe =     wm9713_soc_probe,
    .remove =     wm9713_soc_remove,
    .suspend =    wm9713_soc_suspend,
    .resume =     wm9713_soc_resume,
    .read = ac97_read,
    .write = ac97_write,
    .set_bias_level = wm9713_set_bias_level,
    .reg_cache_size = ARRAY_SIZE(wm9713_reg),
    .reg_word_size = sizeof(u16),
    .reg_cache_step = 2,
    .reg_cache_default = wm9713_reg,
};

static __devinit int wm9713_probe(struct platform_device *pdev)
{
    printk("wm9713 probe\n");
    return snd_soc_register_codec(&pdev->dev,
            &soc_codec_dev_wm9713, wm9713_dai, ARRAY_SIZE(wm9713_dai));
}

static int __devexit wm9713_remove(struct platform_device *pdev)
{
    snd_soc_unregister_codec(&pdev->dev);
    return 0;
}

static struct platform_driver wm9713_codec_driver = {
    .driver = {
            .name = "wm9713-codec",
            .owner = THIS_MODULE,
    },

    .probe = wm9713_probe,
    .remove = __devexit_p(wm9713_remove),
};

static int __init wm9713_init(void)
{
   printk("wm9713 init\n");
    return platform_driver_register(&wm9713_codec_driver);
}
module_init(wm9713_init);

static void __exit wm9713_exit(void)
{
    platform_driver_unregister(&wm9713_codec_driver);
}
module_exit(wm9713_exit);
^很多问题的背后都是简单的原因......
级别: 荣誉会员
UID: 34780
精华: 0
发帖: 1219
金钱: 6230 两
威望: 1246 点
贡献值: 0 点
综合积分: 2438 分
注册时间: 2010-12-21
最后登录: 2017-09-18
2楼  发表于: 2011-08-03 12:12
检查一下有没有注册相应的platform device
级别: 新手上路
UID: 34711
精华: 0
发帖: 45
金钱: 235 两
威望: 47 点
贡献值: 0 点
综合积分: 90 分
注册时间: 2010-12-20
最后登录: 2011-10-27
3楼  发表于: 2011-08-03 14:18

 回 2楼(911gt3) 的帖子

我是新手,请问platform device都是在哪里注册?谢谢!
级别: 新手上路
UID: 34711
精华: 0
发帖: 45
金钱: 235 两
威望: 47 点
贡献值: 0 点
综合积分: 90 分
注册时间: 2010-12-20
最后登录: 2011-10-27
4楼  发表于: 2011-08-03 14:37

 回 2楼(911gt3) 的帖子

我加载的是i2s声卡uda1341驱动,找了一下,加载的时候确实没有注册这个i2s总线,而导致match出错,是不是可以通过先加载i2s驱动再加载uda1341驱动来解决呢?
^很多问题的背后都是简单的原因......
级别: 荣誉会员
UID: 34780
精华: 0
发帖: 1219
金钱: 6230 两
威望: 1246 点
贡献值: 0 点
综合积分: 2438 分
注册时间: 2010-12-21
最后登录: 2017-09-18
5楼  发表于: 2011-08-03 15:01
印象中是在arch/arm/mach-s3c64xx/mach-mini6410.c中
级别: 新手上路
UID: 66206
精华: 0
发帖: 1
金钱: 5 两
威望: 1 点
贡献值: 0 点
综合积分: 2 分
注册时间: 2012-03-27
最后登录: 2012-03-27
6楼  发表于: 2012-03-27 16:06
这个问题解决了嘛。楼主,我也遇到了