aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux-5.10/linux-yocto-amdx86/0004-spi-spidev-Add-dummy-spidev-device-to-SPI-bus.patch
blob: 7efbde04ca9f3c9be9ff19c3d549ab74de7d5159 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
From 838a8a77639dc2c1bb349830fe75025aacbe096b Mon Sep 17 00:00:00 2001
From: Sanjay R Mehta <sanju.mehta@amd.com>
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 <sanju.mehta@amd.com>
Signed-off-by: Sudheesh Mavila <sudheesh.mavila@amd.com>
---
 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 <linux/uaccess.h>
 
+#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