October 2017
Intermediate to advanced
586 pages
14h 8m
English
In the probe function, it is a common task to track private (per-device) data to be used during the module lifetime. This has been discussed in Chapter 7, I2C Client Drivers.
The following are the prototypes of functions you use for setting/getting per-device data:
/* set the data */ void spi_set_drvdata(struct *spi_device, void *data); /* Get the data back */ void *spi_get_drvdata(const struct *spi_device);
Here is an example:
struct mc33880 { struct mutex lock; u8 bar; struct foo chip; struct spi_device *spi; }; static int mc33880_probe(struct spi_device *spi) { struct mc33880 *mc; [...] /* Device set up */ mc = devm_kzalloc(&spi->dev, sizeof(struct mc33880), GFP_KERNEL); if (!mc) return -ENOMEM; mutex_init(&mc->lock); ...