staging: fbtft: add macro FBTFT_REGISTER_SPI_DRIVER
authorHeiner Kallweit <hkallweit1@gmail.com>
Wed, 1 Dec 2021 21:02:47 +0000 (22:02 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 3 Dec 2021 14:05:12 +0000 (15:05 +0100)
After 5fa6863ba692 ("spi: Check we have a spi_device_id for each DT
compatible") we need to add spi id_tables. Changing existing macro
FBTFT_REGISTER_DRIVER would have meant to change arguments and
therefore adjust all fbtft drivers.

This patch adds a new and simplified macro FBTFT_REGISTER_SPI_DRIVER
that includes a spi id_table, and in addition to that:
- does not define a platform driver
- uses macro module_spi_driver()

Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
Link: https://lore.kernel.org/r/a58b3bc9-27a2-3f16-dd92-e597666a0263@gmail.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/fbtft/fbtft.h

index 6869f36..4cdec34 100644 (file)
@@ -346,6 +346,47 @@ static void __exit fbtft_driver_module_exit(void)                          \
 module_init(fbtft_driver_module_init);                                     \
 module_exit(fbtft_driver_module_exit);
 
+#define FBTFT_REGISTER_SPI_DRIVER(_name, _comp_vend, _comp_dev, _display)      \
+                                                                               \
+static int fbtft_driver_probe_spi(struct spi_device *spi)                      \
+{                                                                              \
+       return fbtft_probe_common(_display, spi, NULL);                         \
+}                                                                              \
+                                                                               \
+static int fbtft_driver_remove_spi(struct spi_device *spi)                     \
+{                                                                              \
+       struct fb_info *info = spi_get_drvdata(spi);                            \
+                                                                               \
+       fbtft_remove_common(&spi->dev, info);                                   \
+       return 0;                                                               \
+}                                                                              \
+                                                                               \
+static const struct of_device_id dt_ids[] = {                                  \
+       { .compatible = _comp_vend "," _comp_dev },                             \
+       {},                                                                     \
+};                                                                             \
+                                                                               \
+MODULE_DEVICE_TABLE(of, dt_ids);                                               \
+                                                                               \
+static const struct spi_device_id spi_ids[] = {                                        \
+       { .name = _comp_dev },                                                  \
+       {},                                                                     \
+};                                                                             \
+                                                                               \
+MODULE_DEVICE_TABLE(spi, spi_ids);                                             \
+                                                                               \
+static struct spi_driver fbtft_driver_spi_driver = {                           \
+       .driver = {                                                             \
+               .name  = _name,                                                 \
+               .of_match_table = dt_ids,                                       \
+       },                                                                      \
+       .id_table = spi_ids,                                                    \
+       .probe  = fbtft_driver_probe_spi,                                       \
+       .remove = fbtft_driver_remove_spi,                                      \
+};                                                                             \
+                                                                               \
+module_spi_driver(fbtft_driver_spi_driver);
+
 /* Debug macros */
 
 /* shorthand debug levels */