dev_name

一份驱动代码,可以注册多个设备。 比如一个I2S的代码,可以注册2S0 、I2S1 、I2S2 几个设备。 

那么在代码中,是如何做区分的呢? 这里使用id 来做区分。 

这里暂时讨论使用在mach-xxx 中进行区分的情况 

比如arch/arm/mach-smdk4x12.c 

struct platform_device exynos_device_i2s0 = {
	.name = "samsung-i2s",
	.id = 0,
	.num_resources = ARRAY_SIZE(exynos_i2s0_resource),
	.resource = exynos_i2s0_resource,
	.dev = {
		.platform_data = &i2sv5_pdata,
	},
};

 比如这里设置的id = 0  , 

static struct platform_device *smdk4x12_devices[] __initdata = {
...
#ifdef CONFIG_SND_SAMSUNG_I2S
    &exynos_device_i2s0,
#endif
...
}

platform_add_devices(smdk4x12_devices, ARRAY_SIZE(smdk4x12_devices));
    ret = platform_device_register(devs[i]);
            device_initialize(&pdev->dev);
            return platform_device_add(pdev);
                 //platform.c 
                 if (pdev->id != -1)  //如果id不为0 
                dev_set_name(&pdev->dev, "%s.%d", pdev->name,  pdev->id);
                else
                dev_set_name(&pdev->dev, "%s", pdev->name);
                         //kobject.c 
                        err = kobject_set_name_vargs(&dev->kobj, fmt, vargs);
                                kobj->name = kvasprintf(GFP_KERNEL, fmt, vargs);
  

 

通过以上代码的分析,可以知道device的dev的 name.id 。 对应到我们的例子中,最终注册的驱动的name 为 samsung-i2s.0 .

那么ASoC 的dai_link中,需要制定的cpu_dai_name的名字就是 sansung-i2s.0 

 

在来分析一下 dev_name的源码

static inline const char *dev_name(const struct device *dev)
{
	/* Use the init name until the kobject becomes available */
	if (dev->init_name)
		return dev->init_name;

	return kobject_name(&dev->kobj);
            //	return kobj->name;
}

 

综上可知,使用dev_name来获取name的时候。  需要注意提供的platform_device的id 是多少,才能最终确定dev_name 。

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值