Когда я изучал код драйвера 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, но я не могу не чувствовать себя смущенным по этому поводу.
Может кто-нибудь помочь мне понять это немного лучше? Спасибо