From 838a8a77639dc2c1bb349830fe75025aacbe096b Mon Sep 17 00:00:00 2001 From: Sanjay R Mehta Date: Tue, 3 Mar 2020 14:44:41 +0530 Subject: [PATCH 04/10] spi: spidev: Add dummy spidev device to SPI bus Signed-off-by: Sanjay R Mehta Signed-off-by: Sudheesh Mavila --- drivers/spi/spidev.c | 40 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/drivers/spi/spidev.c b/drivers/spi/spidev.c index 859910ec8d9f..710d9d8b5383 100644 --- a/drivers/spi/spidev.c +++ b/drivers/spi/spidev.c @@ -27,6 +27,8 @@ #include +#define SPI_BUS 0 +#define SPI_BUS_CS1 0 /* * This supports access to SPI devices using normal userspace I/O calls. @@ -46,6 +48,7 @@ static DECLARE_BITMAP(minors, N_SPI_MINORS); +struct spi_device *spi_device; /* Bit masks for spi_device.mode management. Note that incorrect * settings for some settings can cause *lots* of trouble for other @@ -741,7 +744,7 @@ static int spidev_probe(struct spi_device *spi) of_device_is_compatible(spi->dev.of_node, "spidev"), "%pOF: buggy DT: spidev listed directly in DT\n", spi->dev.of_node); - spidev_probe_acpi(spi); +// spidev_probe_acpi(spi); /* Allocate driver data */ spidev = kzalloc(sizeof(*spidev), GFP_KERNEL); @@ -827,6 +830,32 @@ static struct spi_driver spidev_spi_driver = { /*-------------------------------------------------------------------------*/ +static int __init add_spi_device_to_bus(void) +{ + struct spi_master *spi_master; + struct spi_board_info spi_info; + + spi_master = spi_busnum_to_master(SPI_BUS); + if (!spi_master) { + printk(KERN_ALERT "Please make sure to \'modprobe " + "spi_amd\' driver first\n"); + return -1; + } + memset(&spi_info, 0, sizeof(struct spi_board_info)); + + strlcpy(spi_info.modalias, "spidev", SPI_NAME_SIZE); + spi_info.bus_num = SPI_BUS; //Bus number of SPI master + spi_info.chip_select = SPI_BUS_CS1; //CS on which SPI device is connected + + spi_device = spi_new_device(spi_master, &spi_info); + if (!spi_device) + return -ENODEV; + + return 0; +} + + + static int __init spidev_init(void) { int status; @@ -851,6 +880,14 @@ static int __init spidev_init(void) class_destroy(spidev_class); unregister_chrdev(SPIDEV_MAJOR, spidev_spi_driver.driver.name); } + + status = add_spi_device_to_bus(); + if (status < 0) { + spi_unregister_driver(&spidev_spi_driver); + class_destroy(spidev_class); + unregister_chrdev(SPIDEV_MAJOR, spidev_spi_driver.driver.name); + } + return status; } module_init(spidev_init); @@ -858,6 +895,7 @@ module_init(spidev_init); static void __exit spidev_exit(void) { spi_unregister_driver(&spidev_spi_driver); + spi_unregister_device(spi_device); class_destroy(spidev_class); unregister_chrdev(SPIDEV_MAJOR, spidev_spi_driver.driver.name); } -- 2.17.1