spi: spidev: Replace OF specific code by device property API
[ Upstream commit 88a2851920
]
Instead of calling the OF specific APIs, use device property ones.
It also prevents misusing PRP0001 in ACPI when trying to instantiate
spidev directly. We only support special SPI test devices there.
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Link: https://lore.kernel.org/r/20220323140215.2568-4-andriy.shevchenko@linux.intel.com
Signed-off-by: Mark Brown <broonie@kernel.org>
Stable-dep-of: fc28d1c1fe3b ("spi: spidev: add correct compatible for Rohm BH2228FV")
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
Родитель
b0b3d2432f
Коммит
5472526022
|
@ -20,8 +20,6 @@
|
|||
#include <linux/property.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/compat.h>
|
||||
#include <linux/of.h>
|
||||
#include <linux/of_device.h>
|
||||
|
||||
#include <linux/spi/spi.h>
|
||||
#include <linux/spi/spidev.h>
|
||||
|
@ -696,20 +694,31 @@ static const struct spi_device_id spidev_spi_ids[] = {
|
|||
};
|
||||
MODULE_DEVICE_TABLE(spi, spidev_spi_ids);
|
||||
|
||||
#ifdef CONFIG_OF
|
||||
/*
|
||||
* spidev should never be referenced in DT without a specific compatible string,
|
||||
* it is a Linux implementation thing rather than a description of the hardware.
|
||||
*/
|
||||
static int spidev_of_check(struct device *dev)
|
||||
{
|
||||
if (device_property_match_string(dev, "compatible", "spidev") < 0)
|
||||
return 0;
|
||||
|
||||
dev_err(dev, "spidev listed directly in DT is not supported\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
static const struct of_device_id spidev_dt_ids[] = {
|
||||
{ .compatible = "rohm,dh2228fv" },
|
||||
{ .compatible = "lineartechnology,ltc2488" },
|
||||
{ .compatible = "semtech,sx1301" },
|
||||
{ .compatible = "lwn,bk4" },
|
||||
{ .compatible = "dh,dhcom-board" },
|
||||
{ .compatible = "menlo,m53cpld" },
|
||||
{ .compatible = "cisco,spi-petra" },
|
||||
{ .compatible = "micron,spi-authenta" },
|
||||
{ .compatible = "rohm,dh2228fv", .data = &spidev_of_check },
|
||||
{ .compatible = "lineartechnology,ltc2488", .data = &spidev_of_check },
|
||||
{ .compatible = "semtech,sx1301", .data = &spidev_of_check },
|
||||
{ .compatible = "lwn,bk4", .data = &spidev_of_check },
|
||||
{ .compatible = "dh,dhcom-board", .data = &spidev_of_check },
|
||||
{ .compatible = "menlo,m53cpld", .data = &spidev_of_check },
|
||||
{ .compatible = "cisco,spi-petra", .data = &spidev_of_check },
|
||||
{ .compatible = "micron,spi-authenta", .data = &spidev_of_check },
|
||||
{},
|
||||
};
|
||||
MODULE_DEVICE_TABLE(of, spidev_dt_ids);
|
||||
#endif
|
||||
|
||||
/* Dummy SPI devices not to be used in production systems */
|
||||
static int spidev_acpi_check(struct device *dev)
|
||||
|
@ -741,16 +750,6 @@ static int spidev_probe(struct spi_device *spi)
|
|||
int status;
|
||||
unsigned long minor;
|
||||
|
||||
/*
|
||||
* spidev should never be referenced in DT without a specific
|
||||
* compatible string, it is a Linux implementation thing
|
||||
* rather than a description of the hardware.
|
||||
*/
|
||||
if (spi->dev.of_node && of_device_is_compatible(spi->dev.of_node, "spidev")) {
|
||||
dev_err(&spi->dev, "spidev listed directly in DT is not supported\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
match = device_get_match_data(&spi->dev);
|
||||
if (match) {
|
||||
status = match(&spi->dev);
|
||||
|
@ -827,7 +826,7 @@ static int spidev_remove(struct spi_device *spi)
|
|||
static struct spi_driver spidev_spi_driver = {
|
||||
.driver = {
|
||||
.name = "spidev",
|
||||
.of_match_table = of_match_ptr(spidev_dt_ids),
|
||||
.of_match_table = spidev_dt_ids,
|
||||
.acpi_match_table = spidev_acpi_ids,
|
||||
},
|
||||
.probe = spidev_probe,
|
||||
|
|
Загрузка…
Ссылка в новой задаче