【发布时间】:2020-07-14 19:08:59
【问题描述】:
在研究mxs-auart.c 驱动程序的代码时,我注意到以下声明:
enum mxs_auart_type {
IMX23_AUART,
IMX28_AUART,
ASM9260_AUART,
};
然后是:
static const struct platform_device_id mxs_auart_devtype[] = {
{ .name = "mxs-auart-imx23", .driver_data = IMX23_AUART },
{ .name = "mxs-auart-imx28", .driver_data = IMX28_AUART },
{ .name = "as-auart-asm9260", .driver_data = ASM9260_AUART },
{ /* sentinel */ }
};
MODULE_DEVICE_TABLE(platform, mxs_auart_devtype);
static const struct of_device_id mxs_auart_dt_ids[] = {
{
.compatible = "fsl,imx28-auart",
.data = &mxs_auart_devtype[IMX28_AUART]
}, {
.compatible = "fsl,imx23-auart",
.data = &mxs_auart_devtype[IMX23_AUART]
}, {
.compatible = "alphascale,asm9260-auart",
.data = &mxs_auart_devtype[ASM9260_AUART]
}, { /* sentinel */ }
};
MODULE_DEVICE_TABLE(of, mxs_auart_dt_ids);
对此我不明白的是,IMX28_AUART 怎么能像.data = &mxs_auart_devtype[IMX28_AUART] 这样使用。我们是否必须事先实例化一个变量才能使用枚举值,例如enum mxs_auart_type value = IMX28_AUART?
我知道在 C 中的枚举中,值等于整数,默认情况下从 0 开始,但我不禁对此感到困惑。
谁能帮助我更好地理解这一点? 谢谢
【问题讨论】:
标签: c linux linux-kernel linux-device-driver platform