欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

dev_name

程序员文章站 2022-06-04 19:17:25
...

一份驱动代码,可以注册多个设备。 比如一个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 。

 

相关标签: linxu

推荐阅读