mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-08-30 11:03:07 -04:00
pinctrl: mediatek: allow common drivers to be built as modules
The MediaTek SoC pinctrl drivers link against the shared implementations
in pinctrl-mtk-common.c (v1), pinctrl-moore.c and pinctrl-mtmips.c. These
were built-in only: their Kconfig symbols were bool, they did not export
their entry points and they carried no MODULE_LICENSE().
To let the individual SoC drivers be built as loadable modules (required
for Android GKI + vendor_dlkm, where vendor drivers must live outside the
GKI vmlinux), the shared code they depend on has to be modular too.
Otherwise selecting a SoC driver as =m forces the common symbol to =y and
the resulting module fails to link against the unexported common entry
points.
Convert PINCTRL_MTK, PINCTRL_MTK_MOORE and PINCTRL_MTK_MTMIPS to
tristate, export the entry points used by the SoC drivers, and add
MODULE_DESCRIPTION()/MODULE_LICENSE() to the three common files.
The v2 common code (PINCTRL_MTK_V2) is already modular, but mtk_rmw() was
never exported. It is called directly by SoC drivers such as mt7623, so
export it as well to keep those drivers linking once they are modular.
Rather than exporting these shared symbols into the global namespace,
export them in the "MTK_PINCTRL" symbol namespace with
EXPORT_SYMBOL_NS_GPL() so they are only visible to drivers that opt in.
Each SoC driver that uses them therefore declares
MODULE_IMPORT_NS("MTK_PINCTRL").
Signed-off-by: Justin Yeh <justin.yeh@mediatek.com>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Signed-off-by: Linus Walleij <linusw@kernel.org>
This commit is contained in:
committed by
Linus Walleij
parent
88292b7103
commit
dab3c7afde
@@ -11,7 +11,7 @@ config EINT_MTK
|
||||
default PINCTRL_MTK_PARIS
|
||||
|
||||
config PINCTRL_MTK
|
||||
bool
|
||||
tristate
|
||||
depends on OF
|
||||
select PINMUX
|
||||
select GENERIC_PINCONF
|
||||
@@ -22,13 +22,13 @@ config PINCTRL_MTK_V2
|
||||
tristate
|
||||
|
||||
config PINCTRL_MTK_MTMIPS
|
||||
bool
|
||||
tristate
|
||||
depends on RALINK
|
||||
select PINMUX
|
||||
select GENERIC_PINCONF
|
||||
|
||||
config PINCTRL_MTK_MOORE
|
||||
bool
|
||||
tristate
|
||||
depends on OF
|
||||
select GENERIC_PINCONF
|
||||
select GENERIC_PINCTRL_GROUPS
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
|
||||
#include <dt-bindings/pinctrl/mt65xx.h>
|
||||
#include <linux/gpio/driver.h>
|
||||
#include <linux/module.h>
|
||||
|
||||
#include <linux/pinctrl/consumer.h>
|
||||
|
||||
@@ -743,3 +744,7 @@ int mtk_moore_pinctrl_probe(struct platform_device *pdev,
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_NS_GPL(mtk_moore_pinctrl_probe, "MTK_PINCTRL");
|
||||
|
||||
MODULE_DESCRIPTION("MediaTek Pinctrl Common Driver V2 Moore");
|
||||
MODULE_LICENSE("GPL v2");
|
||||
|
||||
@@ -542,3 +542,5 @@ static int __init mtk_pinctrl_init(void)
|
||||
return platform_driver_register(&mtk_pinctrl_driver);
|
||||
}
|
||||
arch_initcall(mtk_pinctrl_init);
|
||||
|
||||
MODULE_IMPORT_NS("MTK_PINCTRL");
|
||||
|
||||
@@ -591,3 +591,5 @@ static int __init mtk_pinctrl_init(void)
|
||||
}
|
||||
|
||||
arch_initcall(mtk_pinctrl_init);
|
||||
|
||||
MODULE_IMPORT_NS("MTK_PINCTRL");
|
||||
|
||||
@@ -59,3 +59,5 @@ static struct platform_driver mtk_pinctrl_driver = {
|
||||
};
|
||||
|
||||
builtin_platform_driver(mtk_pinctrl_driver);
|
||||
|
||||
MODULE_IMPORT_NS("MTK_PINCTRL");
|
||||
|
||||
@@ -135,3 +135,5 @@ static int __init mt7620_pinctrl_init(void)
|
||||
return platform_driver_register(&mt7620_pinctrl_driver);
|
||||
}
|
||||
core_initcall_sync(mt7620_pinctrl_init);
|
||||
|
||||
MODULE_IMPORT_NS("MTK_PINCTRL");
|
||||
|
||||
@@ -115,3 +115,5 @@ static int __init mt7621_pinctrl_init(void)
|
||||
return platform_driver_register(&mt7621_pinctrl_driver);
|
||||
}
|
||||
core_initcall_sync(mt7621_pinctrl_init);
|
||||
|
||||
MODULE_IMPORT_NS("MTK_PINCTRL");
|
||||
|
||||
@@ -893,3 +893,5 @@ static int __init mt7622_pinctrl_init(void)
|
||||
return platform_driver_register(&mt7622_pinctrl_driver);
|
||||
}
|
||||
arch_initcall(mt7622_pinctrl_init);
|
||||
|
||||
MODULE_IMPORT_NS("MTK_PINCTRL");
|
||||
|
||||
@@ -1440,3 +1440,5 @@ static int __init mtk_pinctrl_init(void)
|
||||
return platform_driver_register(&mtk_pinctrl_driver);
|
||||
}
|
||||
arch_initcall(mtk_pinctrl_init);
|
||||
|
||||
MODULE_IMPORT_NS("MTK_PINCTRL");
|
||||
|
||||
@@ -449,3 +449,5 @@ static int __init mt7629_pinctrl_init(void)
|
||||
return platform_driver_register(&mt7629_pinctrl_driver);
|
||||
}
|
||||
arch_initcall(mt7629_pinctrl_init);
|
||||
|
||||
MODULE_IMPORT_NS("MTK_PINCTRL");
|
||||
|
||||
@@ -247,3 +247,5 @@ static int __init mt76x8_pinctrl_init(void)
|
||||
return platform_driver_register(&mt76x8_pinctrl_driver);
|
||||
}
|
||||
core_initcall_sync(mt76x8_pinctrl_init);
|
||||
|
||||
MODULE_IMPORT_NS("MTK_PINCTRL");
|
||||
|
||||
@@ -1058,3 +1058,5 @@ static int __init mt7981_pinctrl_init(void)
|
||||
return platform_driver_register(&mt7981_pinctrl_driver);
|
||||
}
|
||||
arch_initcall(mt7981_pinctrl_init);
|
||||
|
||||
MODULE_IMPORT_NS("MTK_PINCTRL");
|
||||
|
||||
@@ -1009,3 +1009,5 @@ static int __init mt7986b_pinctrl_init(void)
|
||||
|
||||
arch_initcall(mt7986a_pinctrl_init);
|
||||
arch_initcall(mt7986b_pinctrl_init);
|
||||
|
||||
MODULE_IMPORT_NS("MTK_PINCTRL");
|
||||
|
||||
@@ -1544,3 +1544,5 @@ static int __init mt7988_pinctrl_init(void)
|
||||
return platform_driver_register(&mt7988_pinctrl_driver);
|
||||
}
|
||||
arch_initcall(mt7988_pinctrl_init);
|
||||
|
||||
MODULE_IMPORT_NS("MTK_PINCTRL");
|
||||
|
||||
@@ -307,3 +307,5 @@ static int __init mtk_pinctrl_init(void)
|
||||
return platform_driver_register(&mtk_pinctrl_driver);
|
||||
}
|
||||
arch_initcall(mtk_pinctrl_init);
|
||||
|
||||
MODULE_IMPORT_NS("MTK_PINCTRL");
|
||||
|
||||
@@ -336,3 +336,5 @@ static int __init mtk_pinctrl_init(void)
|
||||
return platform_driver_register(&mtk_pinctrl_driver);
|
||||
}
|
||||
arch_initcall(mtk_pinctrl_init);
|
||||
|
||||
MODULE_IMPORT_NS("MTK_PINCTRL");
|
||||
|
||||
@@ -343,3 +343,5 @@ static int __init mtk_pinctrl_init(void)
|
||||
return platform_driver_register(&mtk_pinctrl_driver);
|
||||
}
|
||||
arch_initcall(mtk_pinctrl_init);
|
||||
|
||||
MODULE_IMPORT_NS("MTK_PINCTRL");
|
||||
|
||||
@@ -356,3 +356,5 @@ static int __init mtk_pinctrl_init(void)
|
||||
return platform_driver_register(&mtk_pinctrl_driver);
|
||||
}
|
||||
arch_initcall(mtk_pinctrl_init);
|
||||
|
||||
MODULE_IMPORT_NS("MTK_PINCTRL");
|
||||
|
||||
@@ -495,3 +495,4 @@ arch_initcall(mtk_pinctrl_init);
|
||||
|
||||
MODULE_DESCRIPTION("MediaTek MT8365 Pinctrl Driver");
|
||||
MODULE_AUTHOR("Zhiyong Tao <zhiyong.tao@mediatek.com>");
|
||||
MODULE_IMPORT_NS("MTK_PINCTRL");
|
||||
|
||||
@@ -343,3 +343,5 @@ static int __init mtk_pinctrl_init(void)
|
||||
return platform_driver_register(&mtk_pinctrl_driver);
|
||||
}
|
||||
arch_initcall(mtk_pinctrl_init);
|
||||
|
||||
MODULE_IMPORT_NS("MTK_PINCTRL");
|
||||
|
||||
@@ -69,6 +69,7 @@ void mtk_rmw(struct mtk_pinctrl *pctl, u8 i, u32 reg, u32 mask, u32 set)
|
||||
|
||||
spin_unlock_irqrestore(&pctl->lock, flags);
|
||||
}
|
||||
EXPORT_SYMBOL_NS_GPL(mtk_rmw, "MTK_PINCTRL");
|
||||
|
||||
static int mtk_hw_pin_field_lookup(struct mtk_pinctrl *hw,
|
||||
const struct mtk_pin_desc *desc,
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
|
||||
#include <linux/io.h>
|
||||
#include <linux/gpio/driver.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/of.h>
|
||||
#include <linux/of_irq.h>
|
||||
#include <linux/pinctrl/consumer.h>
|
||||
@@ -190,6 +191,7 @@ int mtk_pconf_spec_set_ies_smt_range(struct regmap *regmap,
|
||||
regmap_write(regmap, reg_addr, bit);
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_NS_GPL(mtk_pconf_spec_set_ies_smt_range, "MTK_PINCTRL");
|
||||
|
||||
static const struct mtk_pin_drv_grp *mtk_find_pin_drv_grp_by_pin(
|
||||
struct mtk_pinctrl *pctl, unsigned long pin) {
|
||||
@@ -297,6 +299,7 @@ int mtk_pctrl_spec_pull_set_samereg(struct regmap *regmap,
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_NS_GPL(mtk_pctrl_spec_pull_set_samereg, "MTK_PINCTRL");
|
||||
|
||||
static int mtk_pconf_set_pull_select(struct mtk_pinctrl *pctl,
|
||||
unsigned int pin, bool enable, bool isup, unsigned int arg)
|
||||
@@ -1149,6 +1152,7 @@ int mtk_pctrl_init(struct platform_device *pdev,
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_NS_GPL(mtk_pctrl_init, "MTK_PINCTRL");
|
||||
|
||||
int mtk_pctrl_common_probe(struct platform_device *pdev)
|
||||
{
|
||||
@@ -1160,3 +1164,7 @@ int mtk_pctrl_common_probe(struct platform_device *pdev)
|
||||
|
||||
return mtk_pctrl_init(pdev, data, NULL);
|
||||
}
|
||||
EXPORT_SYMBOL_NS_GPL(mtk_pctrl_common_probe, "MTK_PINCTRL");
|
||||
|
||||
MODULE_DESCRIPTION("MediaTek Pinctrl Common Driver");
|
||||
MODULE_LICENSE("GPL v2");
|
||||
|
||||
@@ -349,3 +349,7 @@ int mtmips_pinctrl_init(struct platform_device *pdev,
|
||||
|
||||
return PTR_ERR_OR_ZERO(dev);
|
||||
}
|
||||
EXPORT_SYMBOL_NS_GPL(mtmips_pinctrl_init, "MTK_PINCTRL");
|
||||
|
||||
MODULE_DESCRIPTION("MediaTek MIPS Pinctrl Common Driver");
|
||||
MODULE_LICENSE("GPL v2");
|
||||
|
||||
@@ -59,3 +59,5 @@ static int __init rt2880_pinctrl_init(void)
|
||||
return platform_driver_register(&rt2880_pinctrl_driver);
|
||||
}
|
||||
core_initcall_sync(rt2880_pinctrl_init);
|
||||
|
||||
MODULE_IMPORT_NS("MTK_PINCTRL");
|
||||
|
||||
@@ -138,3 +138,5 @@ static int __init rt305x_pinctrl_init(void)
|
||||
return platform_driver_register(&rt305x_pinctrl_driver);
|
||||
}
|
||||
core_initcall_sync(rt305x_pinctrl_init);
|
||||
|
||||
MODULE_IMPORT_NS("MTK_PINCTRL");
|
||||
|
||||
@@ -106,3 +106,5 @@ static int __init rt3883_pinctrl_init(void)
|
||||
return platform_driver_register(&rt3883_pinctrl_driver);
|
||||
}
|
||||
core_initcall_sync(rt3883_pinctrl_init);
|
||||
|
||||
MODULE_IMPORT_NS("MTK_PINCTRL");
|
||||
|
||||
Reference in New Issue
Block a user