Skip to content

Commit

Permalink
spi: spidev: Warn loudly if instantiated from DT as "spidev"
Browse files Browse the repository at this point in the history
Since spidev is a detail of how Linux controls a device rather than a
description of the hardware in the system we should never have a node
described as "spidev" in DT, any SPI device could be a spidev so this
is just not a useful description.

In order to help prevent users from writing such device trees generate a
warning if spidev is instantiated as a DT node without an ID in the match
table.

Signed-off-by: Mark Brown <[email protected]>
  • Loading branch information
broonie committed Mar 27, 2015
1 parent f20fbaa commit 956b200
Showing 1 changed file with 19 additions and 7 deletions.
26 changes: 19 additions & 7 deletions drivers/spi/spidev.c
Original file line number Diff line number Diff line change
Expand Up @@ -703,6 +703,14 @@ static const struct file_operations spidev_fops = {

static struct class *spidev_class;

#ifdef CONFIG_OF
static const struct of_device_id spidev_dt_ids[] = {
{ .compatible = "rohm,dh2228fv" },
{},
};
MODULE_DEVICE_TABLE(of, spidev_dt_ids);
#endif

/*-------------------------------------------------------------------------*/

static int spidev_probe(struct spi_device *spi)
Expand All @@ -711,6 +719,17 @@ static int spidev_probe(struct spi_device *spi)
int status;
unsigned long minor;

/*
* spidev should never be referenced in DT without a specific
* compatbile string, it is a Linux implementation thing
* rather than a description of the hardware.
*/
if (spi->dev.of_node && !of_match_device(spidev_dt_ids, &spi->dev)) {
dev_err(&spi->dev, "buggy DT: spidev listed directly in DT\n");
WARN_ON(spi->dev.of_node &&
!of_match_device(spidev_dt_ids, &spi->dev));
}

/* Allocate driver data */
spidev = kzalloc(sizeof(*spidev), GFP_KERNEL);
if (!spidev)
Expand Down Expand Up @@ -777,13 +796,6 @@ static int spidev_remove(struct spi_device *spi)
return 0;
}

static const struct of_device_id spidev_dt_ids[] = {
{ .compatible = "rohm,dh2228fv" },
{},
};

MODULE_DEVICE_TABLE(of, spidev_dt_ids);

static struct spi_driver spidev_spi_driver = {
.driver = {
.name = "spidev",
Expand Down

0 comments on commit 956b200

Please sign in to comment.