forked from Minki/linux
pinctrl: mediatek: make MediaTek pinctrl v2 driver ready for buidling loadable module
In the future we want to be able to build the MediaTek pinctrl driver, based on paris, as kernel module. This patch allows pinctrl-paris.c, the external interrupt controller mtk-eint.c, and pinctrl-mtk-common-v2.c to be loadable as module. Signed-off-by: Sean Wang <sean.wang@mediatek.com> Signed-off-by: Light Hsieh <light.hsieh@mediatek.com> Reviewed-by: Matthias Brugger <matthias.bgg@gmail.com> Link: https://lore.kernel.org/r/9feeb04805e5a406fe22a92e3f280abda39ddda4.1586289920.git.sean.wang@mediatek.com Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
This commit is contained in:
parent
7e23ab72e7
commit
8174a8512e
@ -3,10 +3,12 @@ menu "MediaTek pinctrl drivers"
|
||||
depends on ARCH_MEDIATEK || COMPILE_TEST
|
||||
|
||||
config EINT_MTK
|
||||
bool "MediaTek External Interrupt Support"
|
||||
tristate "MediaTek External Interrupt Support"
|
||||
depends on PINCTRL_MTK || PINCTRL_MTK_MOORE || PINCTRL_MTK_PARIS || COMPILE_TEST
|
||||
select GPIOLIB
|
||||
select IRQ_DOMAIN
|
||||
default y if PINCTRL_MTK || PINCTRL_MTK_MOORE
|
||||
default PINCTRL_MTK_PARIS
|
||||
|
||||
config PINCTRL_MTK
|
||||
bool
|
||||
@ -17,6 +19,9 @@ config PINCTRL_MTK
|
||||
select EINT_MTK
|
||||
select OF_GPIO
|
||||
|
||||
config PINCTRL_MTK_V2
|
||||
tristate
|
||||
|
||||
config PINCTRL_MTK_MOORE
|
||||
bool
|
||||
depends on OF
|
||||
@ -25,15 +30,17 @@ config PINCTRL_MTK_MOORE
|
||||
select GENERIC_PINMUX_FUNCTIONS
|
||||
select GPIOLIB
|
||||
select OF_GPIO
|
||||
select PINCTRL_MTK_V2
|
||||
|
||||
config PINCTRL_MTK_PARIS
|
||||
bool
|
||||
tristate
|
||||
depends on OF
|
||||
select PINMUX
|
||||
select GENERIC_PINCONF
|
||||
select GPIOLIB
|
||||
select EINT_MTK
|
||||
select OF_GPIO
|
||||
select PINCTRL_MTK_V2
|
||||
|
||||
# For ARMv7 SoCs
|
||||
config PINCTRL_MT2701
|
||||
|
@ -2,8 +2,9 @@
|
||||
# Core
|
||||
obj-$(CONFIG_EINT_MTK) += mtk-eint.o
|
||||
obj-$(CONFIG_PINCTRL_MTK) += pinctrl-mtk-common.o
|
||||
obj-$(CONFIG_PINCTRL_MTK_MOORE) += pinctrl-moore.o pinctrl-mtk-common-v2.o
|
||||
obj-$(CONFIG_PINCTRL_MTK_PARIS) += pinctrl-paris.o pinctrl-mtk-common-v2.o
|
||||
obj-$(CONFIG_PINCTRL_MTK_V2) += pinctrl-mtk-common-v2.o
|
||||
obj-$(CONFIG_PINCTRL_MTK_MOORE) += pinctrl-moore.o
|
||||
obj-$(CONFIG_PINCTRL_MTK_PARIS) += pinctrl-paris.o
|
||||
|
||||
# SoC Drivers
|
||||
obj-$(CONFIG_PINCTRL_MT2701) += pinctrl-mt2701.o
|
||||
|
@ -15,6 +15,7 @@
|
||||
#include <linux/io.h>
|
||||
#include <linux/irqchip/chained_irq.h>
|
||||
#include <linux/irqdomain.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/of_irq.h>
|
||||
#include <linux/platform_device.h>
|
||||
|
||||
@ -379,6 +380,7 @@ int mtk_eint_do_suspend(struct mtk_eint *eint)
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(mtk_eint_do_suspend);
|
||||
|
||||
int mtk_eint_do_resume(struct mtk_eint *eint)
|
||||
{
|
||||
@ -386,6 +388,7 @@ int mtk_eint_do_resume(struct mtk_eint *eint)
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(mtk_eint_do_resume);
|
||||
|
||||
int mtk_eint_set_debounce(struct mtk_eint *eint, unsigned long eint_num,
|
||||
unsigned int debounce)
|
||||
@ -440,6 +443,7 @@ int mtk_eint_set_debounce(struct mtk_eint *eint, unsigned long eint_num,
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(mtk_eint_set_debounce);
|
||||
|
||||
int mtk_eint_find_irq(struct mtk_eint *eint, unsigned long eint_n)
|
||||
{
|
||||
@ -451,6 +455,7 @@ int mtk_eint_find_irq(struct mtk_eint *eint, unsigned long eint_n)
|
||||
|
||||
return irq;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(mtk_eint_find_irq);
|
||||
|
||||
int mtk_eint_do_init(struct mtk_eint *eint)
|
||||
{
|
||||
@ -495,3 +500,7 @@ int mtk_eint_do_init(struct mtk_eint *eint)
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(mtk_eint_do_init);
|
||||
|
||||
MODULE_LICENSE("GPL v2");
|
||||
MODULE_DESCRIPTION("MediaTek EINT Driver");
|
||||
|
@ -12,6 +12,7 @@
|
||||
#include <linux/gpio/driver.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/of_irq.h>
|
||||
|
||||
#include "mtk-eint.h"
|
||||
@ -204,6 +205,7 @@ int mtk_hw_set_value(struct mtk_pinctrl *hw, const struct mtk_pin_desc *desc,
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(mtk_hw_set_value);
|
||||
|
||||
int mtk_hw_get_value(struct mtk_pinctrl *hw, const struct mtk_pin_desc *desc,
|
||||
int field, int *value)
|
||||
@ -223,6 +225,7 @@ int mtk_hw_get_value(struct mtk_pinctrl *hw, const struct mtk_pin_desc *desc,
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(mtk_hw_get_value);
|
||||
|
||||
static int mtk_xt_find_eint_num(struct mtk_pinctrl *hw, unsigned long eint_n)
|
||||
{
|
||||
@ -361,6 +364,7 @@ int mtk_build_eint(struct mtk_pinctrl *hw, struct platform_device *pdev)
|
||||
|
||||
return mtk_eint_do_init(hw->eint);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(mtk_build_eint);
|
||||
|
||||
/* Revision 0 */
|
||||
int mtk_pinconf_bias_disable_set(struct mtk_pinctrl *hw,
|
||||
@ -380,6 +384,7 @@ int mtk_pinconf_bias_disable_set(struct mtk_pinctrl *hw,
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(mtk_pinconf_bias_disable_set);
|
||||
|
||||
int mtk_pinconf_bias_disable_get(struct mtk_pinctrl *hw,
|
||||
const struct mtk_pin_desc *desc, int *res)
|
||||
@ -402,6 +407,7 @@ int mtk_pinconf_bias_disable_get(struct mtk_pinctrl *hw,
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(mtk_pinconf_bias_disable_get);
|
||||
|
||||
int mtk_pinconf_bias_set(struct mtk_pinctrl *hw,
|
||||
const struct mtk_pin_desc *desc, bool pullup)
|
||||
@ -421,6 +427,7 @@ int mtk_pinconf_bias_set(struct mtk_pinctrl *hw,
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(mtk_pinconf_bias_set);
|
||||
|
||||
int mtk_pinconf_bias_get(struct mtk_pinctrl *hw,
|
||||
const struct mtk_pin_desc *desc, bool pullup, int *res)
|
||||
@ -440,6 +447,7 @@ int mtk_pinconf_bias_get(struct mtk_pinctrl *hw,
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(mtk_pinconf_bias_get);
|
||||
|
||||
/* Revision 1 */
|
||||
int mtk_pinconf_bias_disable_set_rev1(struct mtk_pinctrl *hw,
|
||||
@ -454,6 +462,7 @@ int mtk_pinconf_bias_disable_set_rev1(struct mtk_pinctrl *hw,
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(mtk_pinconf_bias_disable_set_rev1);
|
||||
|
||||
int mtk_pinconf_bias_disable_get_rev1(struct mtk_pinctrl *hw,
|
||||
const struct mtk_pin_desc *desc, int *res)
|
||||
@ -471,6 +480,7 @@ int mtk_pinconf_bias_disable_get_rev1(struct mtk_pinctrl *hw,
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(mtk_pinconf_bias_disable_get_rev1);
|
||||
|
||||
int mtk_pinconf_bias_set_rev1(struct mtk_pinctrl *hw,
|
||||
const struct mtk_pin_desc *desc, bool pullup)
|
||||
@ -490,6 +500,7 @@ int mtk_pinconf_bias_set_rev1(struct mtk_pinctrl *hw,
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(mtk_pinconf_bias_set_rev1);
|
||||
|
||||
int mtk_pinconf_bias_get_rev1(struct mtk_pinctrl *hw,
|
||||
const struct mtk_pin_desc *desc, bool pullup,
|
||||
@ -515,6 +526,7 @@ int mtk_pinconf_bias_get_rev1(struct mtk_pinctrl *hw,
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(mtk_pinconf_bias_get_rev1);
|
||||
|
||||
/* Combo for the following pull register type:
|
||||
* 1. PU + PD
|
||||
@ -715,6 +727,7 @@ int mtk_pinconf_bias_set_combo(struct mtk_pinctrl *hw,
|
||||
out:
|
||||
return err;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(mtk_pinconf_bias_set_combo);
|
||||
|
||||
int mtk_pinconf_bias_get_combo(struct mtk_pinctrl *hw,
|
||||
const struct mtk_pin_desc *desc,
|
||||
@ -735,6 +748,7 @@ int mtk_pinconf_bias_get_combo(struct mtk_pinctrl *hw,
|
||||
out:
|
||||
return err;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(mtk_pinconf_bias_get_combo);
|
||||
|
||||
/* Revision 0 */
|
||||
int mtk_pinconf_drive_set(struct mtk_pinctrl *hw,
|
||||
@ -764,6 +778,7 @@ int mtk_pinconf_drive_set(struct mtk_pinctrl *hw,
|
||||
|
||||
return err;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(mtk_pinconf_drive_set);
|
||||
|
||||
int mtk_pinconf_drive_get(struct mtk_pinctrl *hw,
|
||||
const struct mtk_pin_desc *desc, int *val)
|
||||
@ -788,6 +803,7 @@ int mtk_pinconf_drive_get(struct mtk_pinctrl *hw,
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(mtk_pinconf_drive_get);
|
||||
|
||||
/* Revision 1 */
|
||||
int mtk_pinconf_drive_set_rev1(struct mtk_pinctrl *hw,
|
||||
@ -809,6 +825,7 @@ int mtk_pinconf_drive_set_rev1(struct mtk_pinctrl *hw,
|
||||
|
||||
return err;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(mtk_pinconf_drive_set_rev1);
|
||||
|
||||
int mtk_pinconf_drive_get_rev1(struct mtk_pinctrl *hw,
|
||||
const struct mtk_pin_desc *desc, int *val)
|
||||
@ -826,18 +843,21 @@ int mtk_pinconf_drive_get_rev1(struct mtk_pinctrl *hw,
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(mtk_pinconf_drive_get_rev1);
|
||||
|
||||
int mtk_pinconf_drive_set_raw(struct mtk_pinctrl *hw,
|
||||
const struct mtk_pin_desc *desc, u32 arg)
|
||||
{
|
||||
return mtk_hw_set_value(hw, desc, PINCTRL_PIN_REG_DRV, arg);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(mtk_pinconf_drive_set_raw);
|
||||
|
||||
int mtk_pinconf_drive_get_raw(struct mtk_pinctrl *hw,
|
||||
const struct mtk_pin_desc *desc, int *val)
|
||||
{
|
||||
return mtk_hw_get_value(hw, desc, PINCTRL_PIN_REG_DRV, val);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(mtk_pinconf_drive_get_raw);
|
||||
|
||||
int mtk_pinconf_adv_pull_set(struct mtk_pinctrl *hw,
|
||||
const struct mtk_pin_desc *desc, bool pullup,
|
||||
@ -878,6 +898,7 @@ int mtk_pinconf_adv_pull_set(struct mtk_pinctrl *hw,
|
||||
|
||||
return err;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(mtk_pinconf_adv_pull_set);
|
||||
|
||||
int mtk_pinconf_adv_pull_get(struct mtk_pinctrl *hw,
|
||||
const struct mtk_pin_desc *desc, bool pullup,
|
||||
@ -920,6 +941,7 @@ int mtk_pinconf_adv_pull_get(struct mtk_pinctrl *hw,
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(mtk_pinconf_adv_pull_get);
|
||||
|
||||
int mtk_pinconf_adv_drive_set(struct mtk_pinctrl *hw,
|
||||
const struct mtk_pin_desc *desc, u32 arg)
|
||||
@ -946,6 +968,7 @@ int mtk_pinconf_adv_drive_set(struct mtk_pinctrl *hw,
|
||||
|
||||
return err;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(mtk_pinconf_adv_drive_set);
|
||||
|
||||
int mtk_pinconf_adv_drive_get(struct mtk_pinctrl *hw,
|
||||
const struct mtk_pin_desc *desc, u32 *val)
|
||||
@ -969,3 +992,4 @@ int mtk_pinconf_adv_drive_get(struct mtk_pinctrl *hw,
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(mtk_pinconf_adv_drive_get);
|
||||
|
@ -10,6 +10,7 @@
|
||||
*/
|
||||
|
||||
#include <linux/gpio/driver.h>
|
||||
#include <linux/module.h>
|
||||
#include <dt-bindings/pinctrl/mt65xx.h>
|
||||
#include "pinctrl-paris.h"
|
||||
|
||||
@ -633,6 +634,7 @@ ssize_t mtk_pctrl_show_one_pin(struct mtk_pinctrl *hw,
|
||||
|
||||
return len;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(mtk_pctrl_show_one_pin);
|
||||
|
||||
#define PIN_DBG_BUF_SZ 96
|
||||
static void mtk_pctrl_dbg_show(struct pinctrl_dev *pctldev, struct seq_file *s,
|
||||
@ -1021,6 +1023,7 @@ int mtk_paris_pinctrl_probe(struct platform_device *pdev,
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(mtk_paris_pinctrl_probe);
|
||||
|
||||
static int mtk_paris_pinctrl_suspend(struct device *device)
|
||||
{
|
||||
@ -1040,3 +1043,6 @@ const struct dev_pm_ops mtk_paris_pinctrl_pm_ops = {
|
||||
.suspend_noirq = mtk_paris_pinctrl_suspend,
|
||||
.resume_noirq = mtk_paris_pinctrl_resume,
|
||||
};
|
||||
|
||||
MODULE_LICENSE("GPL v2");
|
||||
MODULE_DESCRIPTION("MediaTek Pinctrl Common Driver V2 Paris");
|
||||
|
Loading…
Reference in New Issue
Block a user