October 2017
Intermediate to advanced
586 pages
14h 8m
English
Sometimes, a driver can support different hardware, each with its specific configuration data. That data may be dedicated function tables, specific register values, or anything unique to each device. The following example describes a generic approach:
Let's first remember what struct of_device_id looks like in include/linux/mod_devicetable.h:
/*
* Struct used for matching a device
*/
struct of_device_id {
[...]
char compatible[128];
const void *data;
};
The field we are interested in is const void *data, so we can use it to pass any data for each specific device.
Let's say we own three different devices, each with specific private data. of_device_id.data will contain a pointer ...