aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMark Brown <broonie@kernel.org>2015-03-27 19:36:04 -0400
committerMark Brown <broonie@kernel.org>2015-03-27 19:43:03 -0400
commit956b200a846e324322f6211034c734c65a38e550 (patch)
tree42f7f8884b88991736c0ce3a09a3f3381d7a8a82
parentf20fbaad7620af2df36a1f9d1c9ecf48ead5b747 (diff)
spi: spidev: Warn loudly if instantiated from DT as "spidev"
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 <broonie@kernel.org>
-rw-r--r--drivers/spi/spidev.c26
1 files changed, 19 insertions, 7 deletions
diff --git a/drivers/spi/spidev.c b/drivers/spi/spidev.c
index 23ad97807797..92c909eed6b5 100644
--- a/drivers/spi/spidev.c
+++ b/drivers/spi/spidev.c
@@ -703,6 +703,14 @@ static const struct file_operations spidev_fops = {
703 703
704static struct class *spidev_class; 704static struct class *spidev_class;
705 705
706#ifdef CONFIG_OF
707static const struct of_device_id spidev_dt_ids[] = {
708 { .compatible = "rohm,dh2228fv" },
709 {},
710};
711MODULE_DEVICE_TABLE(of, spidev_dt_ids);
712#endif
713
706/*-------------------------------------------------------------------------*/ 714/*-------------------------------------------------------------------------*/
707 715
708static int spidev_probe(struct spi_device *spi) 716static int spidev_probe(struct spi_device *spi)
@@ -711,6 +719,17 @@ static int spidev_probe(struct spi_device *spi)
711 int status; 719 int status;
712 unsigned long minor; 720 unsigned long minor;
713 721
722 /*
723 * spidev should never be referenced in DT without a specific
724 * compatbile string, it is a Linux implementation thing
725 * rather than a description of the hardware.
726 */
727 if (spi->dev.of_node && !of_match_device(spidev_dt_ids, &spi->dev)) {
728 dev_err(&spi->dev, "buggy DT: spidev listed directly in DT\n");
729 WARN_ON(spi->dev.of_node &&
730 !of_match_device(spidev_dt_ids, &spi->dev));
731 }
732
714 /* Allocate driver data */ 733 /* Allocate driver data */
715 spidev = kzalloc(sizeof(*spidev), GFP_KERNEL); 734 spidev = kzalloc(sizeof(*spidev), GFP_KERNEL);
716 if (!spidev) 735 if (!spidev)
@@ -777,13 +796,6 @@ static int spidev_remove(struct spi_device *spi)
777 return 0; 796 return 0;
778} 797}
779 798
780static const struct of_device_id spidev_dt_ids[] = {
781 { .compatible = "rohm,dh2228fv" },
782 {},
783};
784
785MODULE_DEVICE_TABLE(of, spidev_dt_ids);
786
787static struct spi_driver spidev_spi_driver = { 799static struct spi_driver spidev_spi_driver = {
788 .driver = { 800 .driver = {
789 .name = "spidev", 801 .name = "spidev",