mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-21 06:33:41 +00:00
fd5c168701
This reduces the needed modifications to the mainline Linux kernel and also makes the regmap package work with an out of tree kernel which does not have these modifications. The regmap-core is only added when it is really build as a module. The regmap-core is normally bool so it cannot be built as a module in an unmodified kernel. When it is selected by on other kernel module it will always be selected as build in and it also does not show up in $(LINUX_DIR)/modules.builtin as it is not supposed to be a kernel module. When it is not in $(LINUX_DIR)/modules.builtin the build system expects it to be built as a .ko file. Just check if the module is really there and only add it in that case. This splits the regmap package into multiple packages, one for each bus type. This way only the bus maps which are really needed have to be added. This also splits the I2C, SPI and MMIO regmap into separate packages to not require all these subsystems to build them, on an unmodified upstream kernel this also causes problems in some situations. Signed-off-by: Hauke Mehrtens <hauke.mehrtens@intel.com>
106 lines
2.7 KiB
Diff
106 lines
2.7 KiB
Diff
From 811d9e2268a62b830cfe93cd8bc929afcb8b198b Mon Sep 17 00:00:00 2001
|
|
From: Felix Fietkau <nbd@nbd.name>
|
|
Date: Sat, 15 Jul 2017 21:12:38 +0200
|
|
Subject: kernel: move regmap bloat out of the kernel image if it is only being used in modules
|
|
|
|
lede-commit: 96f39119815028073583e4fca3a9c5fe9141e998
|
|
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|
---
|
|
drivers/base/regmap/Kconfig | 15 ++++++++++-----
|
|
drivers/base/regmap/Makefile | 12 ++++++++----
|
|
drivers/base/regmap/regmap.c | 3 +++
|
|
include/linux/regmap.h | 2 +-
|
|
4 files changed, 22 insertions(+), 10 deletions(-)
|
|
|
|
--- a/drivers/base/regmap/Kconfig
|
|
+++ b/drivers/base/regmap/Kconfig
|
|
@@ -4,9 +4,8 @@
|
|
# subsystems should select the appropriate symbols.
|
|
|
|
config REGMAP
|
|
- default y if (REGMAP_I2C || REGMAP_SPI || REGMAP_SPMI || REGMAP_W1 || REGMAP_AC97 || REGMAP_MMIO || REGMAP_IRQ)
|
|
select IRQ_DOMAIN if REGMAP_IRQ
|
|
- bool
|
|
+ tristate
|
|
|
|
config REGCACHE_COMPRESSED
|
|
select LZO_COMPRESS
|
|
@@ -18,22 +17,29 @@ config REGMAP_AC97
|
|
|
|
config REGMAP_I2C
|
|
tristate
|
|
+ select REGMAP
|
|
depends on I2C
|
|
|
|
config REGMAP_SPI
|
|
tristate
|
|
+ select REGMAP
|
|
+ depends on SPI_MASTER
|
|
depends on SPI
|
|
|
|
config REGMAP_SPMI
|
|
+ select REGMAP
|
|
tristate
|
|
depends on SPMI
|
|
|
|
config REGMAP_W1
|
|
+ select REGMAP
|
|
tristate
|
|
depends on W1
|
|
|
|
config REGMAP_MMIO
|
|
tristate
|
|
+ select REGMAP
|
|
|
|
config REGMAP_IRQ
|
|
+ select REGMAP
|
|
bool
|
|
--- a/drivers/base/regmap/Makefile
|
|
+++ b/drivers/base/regmap/Makefile
|
|
@@ -2,10 +2,14 @@
|
|
# For include/trace/define_trace.h to include trace.h
|
|
CFLAGS_regmap.o := -I$(src)
|
|
|
|
-obj-$(CONFIG_REGMAP) += regmap.o regcache.o
|
|
-obj-$(CONFIG_REGMAP) += regcache-rbtree.o regcache-flat.o
|
|
-obj-$(CONFIG_REGCACHE_COMPRESSED) += regcache-lzo.o
|
|
-obj-$(CONFIG_DEBUG_FS) += regmap-debugfs.o
|
|
+regmap-core-objs = regmap.o regcache.o regcache-rbtree.o regcache-flat.o
|
|
+ifdef CONFIG_DEBUG_FS
|
|
+regmap-core-objs += regmap-debugfs.o
|
|
+endif
|
|
+ifdef CONFIG_REGCACHE_COMPRESSED
|
|
+regmap-core-objs += regcache-lzo.o
|
|
+endif
|
|
+obj-$(CONFIG_REGMAP) += regmap-core.o
|
|
obj-$(CONFIG_REGMAP_AC97) += regmap-ac97.o
|
|
obj-$(CONFIG_REGMAP_I2C) += regmap-i2c.o
|
|
obj-$(CONFIG_REGMAP_SPI) += regmap-spi.o
|
|
--- a/drivers/base/regmap/regmap.c
|
|
+++ b/drivers/base/regmap/regmap.c
|
|
@@ -13,6 +13,7 @@
|
|
#include <linux/device.h>
|
|
#include <linux/slab.h>
|
|
#include <linux/export.h>
|
|
+#include <linux/module.h>
|
|
#include <linux/mutex.h>
|
|
#include <linux/err.h>
|
|
#include <linux/of.h>
|
|
@@ -2926,3 +2927,5 @@ static int __init regmap_initcall(void)
|
|
return 0;
|
|
}
|
|
postcore_initcall(regmap_initcall);
|
|
+
|
|
+MODULE_LICENSE("GPL");
|
|
--- a/include/linux/regmap.h
|
|
+++ b/include/linux/regmap.h
|
|
@@ -139,7 +139,7 @@ struct reg_sequence {
|
|
pollret ?: ((cond) ? 0 : -ETIMEDOUT); \
|
|
})
|
|
|
|
-#ifdef CONFIG_REGMAP
|
|
+#if IS_REACHABLE(CONFIG_REGMAP)
|
|
|
|
enum regmap_endian {
|
|
/* Unspecified -> 0 -> Backwards compatible default */
|