linux 设备驱动支持多个设备写法

compatible = “aaa,bbb”

当一个驱动支持多个设备的时候,在每个设备的dts中,都会配置各自的compatible,当与driver中的compatible匹配后,会取各自的data。在 __of_match_node中有match++。

Example1

static const struct of_device_id plat_drv_match[] = {
   
    {
    .compatible = "aaa,bbb", .data = &bbb_hw_data},
    {
    .compatible = "aaa,ccc", .data = &ccc_hw_data},
    {
   }
};

data = of_device_get_match_data(dev);

在bbb.dts中,匹配到第1条,data就用第1条
在ccc.dts中,匹配到第2条,data就用第2条

Example2

static const struct of_device_id maxim4c_of_match[] = {
	{
		.compatible = "maxim4c,max96712",
		.data = (const void *)MAX96712_CHIP_ID
	}, {
		.compatible = "maxim4c,max96722",
		.data = (const void *)MAX96722_CHIP_ID
	},
	{ /* sentinel */ },
};
MODULE_DEVICE_TABLE(of, maxim4c_of_match);

static struct i2c_driver maxim4c_i2c_driver = {
	.driver = {
		.name = MAXIM4C_NAME,
		.pm = &maxim4c_pm_ops,
		.of_match_table = of_match_ptr(maxim4c_of_match),
	},
	.probe		= &maxim4c_probe,
	.remove		= &maxim4c_remove,
};


static int maxim4c_probe(struct i2c_client *client,
			const struct i2c_device_id *id)
{
	struct device *dev = &client->dev;
	struct device_node *node = dev->of_node;
	maxim4c_t *maxim4c = NULL;
	u32 chip_id;
	int ret = 0;

	dev_info(dev, "driver version: %02x.%02x.%02x", DRIVER_VERSION >> 16,
		 (DRIVER_VERSION & 0xff00) >> 8, DRIVER_VERSION & 0x00ff);

	chip_id = (uintptr_t)of_device_get_match_data(dev);
	if (chip_id == MAX96712_CHIP_ID) {
		dev_info(dev, "maxim4c driver for max96712\n");
	} else if (chip_id == MAX96722_CHIP_ID) {
		dev_info(dev, "maxim4c driver for max96722\n");
	} else {
		dev_err(dev, "maxim4c driver unknown chip\n");
		return -EINVAL;
	}

相关推荐

  1. linux 设备驱动支持设备写法

    2024-05-11 12:04:03       31 阅读
  2. linux 设备驱动之tty 线路设置

    2024-05-11 12:04:03       45 阅读
  3. linux 设备模型之设备驱动

    2024-05-11 12:04:03       50 阅读
  4. linux驱动之字符设备驱动框架

    2024-05-11 12:04:03       59 阅读
  5. Linux驱动开发——(十)MISC设备驱动

    2024-05-11 12:04:03       38 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-11 12:04:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-11 12:04:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-05-11 12:04:03       87 阅读
  4. Python语言-面向对象

    2024-05-11 12:04:03       96 阅读

热门阅读

  1. 聊聊Mysql锁问题

    2024-05-11 12:04:03       24 阅读
  2. MySQL中的批量更新实战

    2024-05-11 12:04:03       30 阅读
  3. 低代码技术赋能未来乡村建设:创新与实践

    2024-05-11 12:04:03       34 阅读