* [PATCH 1/5] pinctrl: mediatek: paris: Unify probe function by using OF match data
2022-02-10 14:19 [PATCH 0/5] MediaTek pinctrl drivers cleanups AngeloGioacchino Del Regno
@ 2022-02-10 14:19 ` AngeloGioacchino Del Regno
2022-02-21 4:23 ` Chen-Yu Tsai
2022-02-10 14:19 ` [PATCH 2/5] pinctrl: mediatek: common-v1: Add common probe function AngeloGioacchino Del Regno
` (4 subsequent siblings)
5 siblings, 1 reply; 16+ messages in thread
From: AngeloGioacchino Del Regno @ 2022-02-10 14:19 UTC (permalink / raw)
To: sean.wang
Cc: linus.walleij, matthias.bgg, linux-mediatek, linux-gpio,
linux-kernel, linux-arm-kernel, kernel,
AngeloGioacchino Del Regno
All of the SoCs using Paris pinctrl are defining a custom probe
function that is simply calling mtk_paris_pinctrl_probe() passing
a pointer to the SoC specific mtk_pin_soc structure and nothing else.
Simplify the probe mechanism across all pinctrl drivers that are
using pinctrl-paris by passing the specific mtk_pin_soc as match
data and using function mtk_paris_pinctrl_probe as a common probe
function for all of them.
Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
---
drivers/pinctrl/mediatek/pinctrl-mt6765.c | 9 ++-------
drivers/pinctrl/mediatek/pinctrl-mt6779.c | 9 ++-------
drivers/pinctrl/mediatek/pinctrl-mt6797.c | 9 ++-------
drivers/pinctrl/mediatek/pinctrl-mt8183.c | 9 ++-------
drivers/pinctrl/mediatek/pinctrl-mt8192.c | 9 ++-------
drivers/pinctrl/mediatek/pinctrl-mt8195.c | 9 ++-------
drivers/pinctrl/mediatek/pinctrl-paris.c | 9 ++++++---
drivers/pinctrl/mediatek/pinctrl-paris.h | 3 +--
8 files changed, 19 insertions(+), 47 deletions(-)
diff --git a/drivers/pinctrl/mediatek/pinctrl-mt6765.c b/drivers/pinctrl/mediatek/pinctrl-mt6765.c
index 2c59d3936256..c57b19fcda03 100644
--- a/drivers/pinctrl/mediatek/pinctrl-mt6765.c
+++ b/drivers/pinctrl/mediatek/pinctrl-mt6765.c
@@ -1082,21 +1082,16 @@ static const struct mtk_pin_soc mt6765_data = {
};
static const struct of_device_id mt6765_pinctrl_of_match[] = {
- { .compatible = "mediatek,mt6765-pinctrl", },
+ { .compatible = "mediatek,mt6765-pinctrl", .data = &mt6765_data },
{ }
};
-static int mt6765_pinctrl_probe(struct platform_device *pdev)
-{
- return mtk_paris_pinctrl_probe(pdev, &mt6765_data);
-}
-
static struct platform_driver mt6765_pinctrl_driver = {
.driver = {
.name = "mt6765-pinctrl",
.of_match_table = mt6765_pinctrl_of_match,
},
- .probe = mt6765_pinctrl_probe,
+ .probe = mtk_paris_pinctrl_probe,
};
static int __init mt6765_pinctrl_init(void)
diff --git a/drivers/pinctrl/mediatek/pinctrl-mt6779.c b/drivers/pinctrl/mediatek/pinctrl-mt6779.c
index bb0851c73304..4ddf8bda6827 100644
--- a/drivers/pinctrl/mediatek/pinctrl-mt6779.c
+++ b/drivers/pinctrl/mediatek/pinctrl-mt6779.c
@@ -758,21 +758,16 @@ static const struct mtk_pin_soc mt6779_data = {
};
static const struct of_device_id mt6779_pinctrl_of_match[] = {
- { .compatible = "mediatek,mt6779-pinctrl", },
+ { .compatible = "mediatek,mt6779-pinctrl", .data = &mt6779_data },
{ }
};
-static int mt6779_pinctrl_probe(struct platform_device *pdev)
-{
- return mtk_paris_pinctrl_probe(pdev, &mt6779_data);
-}
-
static struct platform_driver mt6779_pinctrl_driver = {
.driver = {
.name = "mt6779-pinctrl",
.of_match_table = mt6779_pinctrl_of_match,
},
- .probe = mt6779_pinctrl_probe,
+ .probe = mtk_paris_pinctrl_probe,
};
static int __init mt6779_pinctrl_init(void)
diff --git a/drivers/pinctrl/mediatek/pinctrl-mt6797.c b/drivers/pinctrl/mediatek/pinctrl-mt6797.c
index adebe4333ed9..53f240491259 100644
--- a/drivers/pinctrl/mediatek/pinctrl-mt6797.c
+++ b/drivers/pinctrl/mediatek/pinctrl-mt6797.c
@@ -58,21 +58,16 @@ static const struct mtk_pin_soc mt6797_data = {
};
static const struct of_device_id mt6797_pinctrl_of_match[] = {
- { .compatible = "mediatek,mt6797-pinctrl", },
+ { .compatible = "mediatek,mt6797-pinctrl", .data = &mt6797_data },
{ }
};
-static int mt6797_pinctrl_probe(struct platform_device *pdev)
-{
- return mtk_paris_pinctrl_probe(pdev, &mt6797_data);
-}
-
static struct platform_driver mt6797_pinctrl_driver = {
.driver = {
.name = "mt6797-pinctrl",
.of_match_table = mt6797_pinctrl_of_match,
},
- .probe = mt6797_pinctrl_probe,
+ .probe = mtk_paris_pinctrl_probe,
};
static int __init mt6797_pinctrl_init(void)
diff --git a/drivers/pinctrl/mediatek/pinctrl-mt8183.c b/drivers/pinctrl/mediatek/pinctrl-mt8183.c
index 60318339b618..fecb1e64fff4 100644
--- a/drivers/pinctrl/mediatek/pinctrl-mt8183.c
+++ b/drivers/pinctrl/mediatek/pinctrl-mt8183.c
@@ -567,22 +567,17 @@ static const struct mtk_pin_soc mt8183_data = {
};
static const struct of_device_id mt8183_pinctrl_of_match[] = {
- { .compatible = "mediatek,mt8183-pinctrl", },
+ { .compatible = "mediatek,mt8183-pinctrl", .data = &mt8183_data },
{ }
};
-static int mt8183_pinctrl_probe(struct platform_device *pdev)
-{
- return mtk_paris_pinctrl_probe(pdev, &mt8183_data);
-}
-
static struct platform_driver mt8183_pinctrl_driver = {
.driver = {
.name = "mt8183-pinctrl",
.of_match_table = mt8183_pinctrl_of_match,
.pm = &mtk_paris_pinctrl_pm_ops,
},
- .probe = mt8183_pinctrl_probe,
+ .probe = mtk_paris_pinctrl_probe,
};
static int __init mt8183_pinctrl_init(void)
diff --git a/drivers/pinctrl/mediatek/pinctrl-mt8192.c b/drivers/pinctrl/mediatek/pinctrl-mt8192.c
index 0c16b2c756bf..acccde9262ba 100644
--- a/drivers/pinctrl/mediatek/pinctrl-mt8192.c
+++ b/drivers/pinctrl/mediatek/pinctrl-mt8192.c
@@ -1381,22 +1381,17 @@ static const struct mtk_pin_soc mt8192_data = {
};
static const struct of_device_id mt8192_pinctrl_of_match[] = {
- { .compatible = "mediatek,mt8192-pinctrl", },
+ { .compatible = "mediatek,mt8192-pinctrl", .data = &mt8192_data },
{ }
};
-static int mt8192_pinctrl_probe(struct platform_device *pdev)
-{
- return mtk_paris_pinctrl_probe(pdev, &mt8192_data);
-}
-
static struct platform_driver mt8192_pinctrl_driver = {
.driver = {
.name = "mt8192-pinctrl",
.of_match_table = mt8192_pinctrl_of_match,
.pm = &mtk_paris_pinctrl_pm_ops,
},
- .probe = mt8192_pinctrl_probe,
+ .probe = mtk_paris_pinctrl_probe,
};
static int __init mt8192_pinctrl_init(void)
diff --git a/drivers/pinctrl/mediatek/pinctrl-mt8195.c b/drivers/pinctrl/mediatek/pinctrl-mt8195.c
index 275b7ba4386d..563693d3d4c2 100644
--- a/drivers/pinctrl/mediatek/pinctrl-mt8195.c
+++ b/drivers/pinctrl/mediatek/pinctrl-mt8195.c
@@ -959,22 +959,17 @@ static const struct mtk_pin_soc mt8195_data = {
};
static const struct of_device_id mt8195_pinctrl_of_match[] = {
- { .compatible = "mediatek,mt8195-pinctrl", },
+ { .compatible = "mediatek,mt8195-pinctrl", .data = &mt8195_data },
{ }
};
-static int mt8195_pinctrl_probe(struct platform_device *pdev)
-{
- return mtk_paris_pinctrl_probe(pdev, &mt8195_data);
-}
-
static struct platform_driver mt8195_pinctrl_driver = {
.driver = {
.name = "mt8195-pinctrl",
.of_match_table = mt8195_pinctrl_of_match,
.pm = &mtk_paris_pinctrl_pm_ops,
},
- .probe = mt8195_pinctrl_probe,
+ .probe = mtk_paris_pinctrl_probe,
};
static int __init mt8195_pinctrl_init(void)
diff --git a/drivers/pinctrl/mediatek/pinctrl-paris.c b/drivers/pinctrl/mediatek/pinctrl-paris.c
index 784eb152b637..6d9e4d625517 100644
--- a/drivers/pinctrl/mediatek/pinctrl-paris.c
+++ b/drivers/pinctrl/mediatek/pinctrl-paris.c
@@ -1036,8 +1036,7 @@ static int mtk_pctrl_build_state(struct platform_device *pdev)
return 0;
}
-int mtk_paris_pinctrl_probe(struct platform_device *pdev,
- const struct mtk_pin_soc *soc)
+int mtk_paris_pinctrl_probe(struct platform_device *pdev)
{
struct device *dev = &pdev->dev;
struct pinctrl_pin_desc *pins;
@@ -1049,7 +1048,11 @@ int mtk_paris_pinctrl_probe(struct platform_device *pdev,
return -ENOMEM;
platform_set_drvdata(pdev, hw);
- hw->soc = soc;
+
+ hw->soc = device_get_match_data(dev);
+ if (!hw->soc)
+ return -ENOENT;
+
hw->dev = &pdev->dev;
if (!hw->soc->nbase_names)
diff --git a/drivers/pinctrl/mediatek/pinctrl-paris.h b/drivers/pinctrl/mediatek/pinctrl-paris.h
index afb7650fd25b..8762ac599329 100644
--- a/drivers/pinctrl/mediatek/pinctrl-paris.h
+++ b/drivers/pinctrl/mediatek/pinctrl-paris.h
@@ -57,8 +57,7 @@
id##_funcs, \
}
-int mtk_paris_pinctrl_probe(struct platform_device *pdev,
- const struct mtk_pin_soc *soc);
+int mtk_paris_pinctrl_probe(struct platform_device *pdev);
ssize_t mtk_pctrl_show_one_pin(struct mtk_pinctrl *hw,
unsigned int gpio, char *buf, unsigned int bufLen);
--
2.33.1
^ permalink raw reply related [flat|nested] 16+ messages in thread
* Re: [PATCH 1/5] pinctrl: mediatek: paris: Unify probe function by using OF match data
2022-02-10 14:19 ` [PATCH 1/5] pinctrl: mediatek: paris: Unify probe function by using OF match data AngeloGioacchino Del Regno
@ 2022-02-21 4:23 ` Chen-Yu Tsai
0 siblings, 0 replies; 16+ messages in thread
From: Chen-Yu Tsai @ 2022-02-21 4:23 UTC (permalink / raw)
To: AngeloGioacchino Del Regno
Cc: sean.wang, linus.walleij, matthias.bgg, linux-mediatek,
linux-gpio, linux-kernel, linux-arm-kernel, kernel
On Thu, Feb 10, 2022 at 10:20 PM AngeloGioacchino Del Regno
<angelogioacchino.delregno@collabora.com> wrote:
>
> All of the SoCs using Paris pinctrl are defining a custom probe
> function that is simply calling mtk_paris_pinctrl_probe() passing
> a pointer to the SoC specific mtk_pin_soc structure and nothing else.
>
> Simplify the probe mechanism across all pinctrl drivers that are
> using pinctrl-paris by passing the specific mtk_pin_soc as match
> data and using function mtk_paris_pinctrl_probe as a common probe
> function for all of them.
>
> Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Reviewed-by: Chen-Yu Tsai <wenst@chromium.org>
^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH 2/5] pinctrl: mediatek: common-v1: Add common probe function
2022-02-10 14:19 [PATCH 0/5] MediaTek pinctrl drivers cleanups AngeloGioacchino Del Regno
2022-02-10 14:19 ` [PATCH 1/5] pinctrl: mediatek: paris: Unify probe function by using OF match data AngeloGioacchino Del Regno
@ 2022-02-10 14:19 ` AngeloGioacchino Del Regno
2022-02-21 4:33 ` Chen-Yu Tsai
2022-02-10 14:19 ` [PATCH 3/5] pinctrl: mediatek: common-v1: Use " AngeloGioacchino Del Regno
` (3 subsequent siblings)
5 siblings, 1 reply; 16+ messages in thread
From: AngeloGioacchino Del Regno @ 2022-02-10 14:19 UTC (permalink / raw)
To: sean.wang
Cc: linus.walleij, matthias.bgg, linux-mediatek, linux-gpio,
linux-kernel, linux-arm-kernel, kernel,
AngeloGioacchino Del Regno
As a preparation to cleanup the probe mechanism of mediatek pinctrl
drivers that are using the v1 controller, add a common probe function
to this driver.
Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
---
drivers/pinctrl/mediatek/pinctrl-mtk-common.c | 11 +++++++++++
drivers/pinctrl/mediatek/pinctrl-mtk-common.h | 2 ++
2 files changed, 13 insertions(+)
diff --git a/drivers/pinctrl/mediatek/pinctrl-mtk-common.c b/drivers/pinctrl/mediatek/pinctrl-mtk-common.c
index 6f8dfa6ae5a0..007da39b68c9 100644
--- a/drivers/pinctrl/mediatek/pinctrl-mtk-common.c
+++ b/drivers/pinctrl/mediatek/pinctrl-mtk-common.c
@@ -1115,3 +1115,14 @@ int mtk_pctrl_init(struct platform_device *pdev,
gpiochip_remove(pctl->chip);
return ret;
}
+
+int mtk_pctrl_common_probe(struct platform_device *pdev)
+{
+ struct device *dev = &pdev->dev;
+ const struct mtk_pinctrl_devdata *data = device_get_match_data(dev);
+
+ if (!data)
+ return -ENOENT;
+
+ return mtk_pctrl_init(pdev, data, NULL);
+}
diff --git a/drivers/pinctrl/mediatek/pinctrl-mtk-common.h b/drivers/pinctrl/mediatek/pinctrl-mtk-common.h
index 98f27cdc609a..cd264cc3547b 100644
--- a/drivers/pinctrl/mediatek/pinctrl-mtk-common.h
+++ b/drivers/pinctrl/mediatek/pinctrl-mtk-common.h
@@ -277,6 +277,8 @@ int mtk_pctrl_init(struct platform_device *pdev,
const struct mtk_pinctrl_devdata *data,
struct regmap *regmap);
+int mtk_pctrl_common_probe(struct platform_device *pdev);
+
int mtk_pctrl_spec_pull_set_samereg(struct regmap *regmap,
const struct mtk_pin_spec_pupd_set_samereg *pupd_infos,
unsigned int info_num, unsigned int pin,
--
2.33.1
^ permalink raw reply related [flat|nested] 16+ messages in thread
* Re: [PATCH 2/5] pinctrl: mediatek: common-v1: Add common probe function
2022-02-10 14:19 ` [PATCH 2/5] pinctrl: mediatek: common-v1: Add common probe function AngeloGioacchino Del Regno
@ 2022-02-21 4:33 ` Chen-Yu Tsai
0 siblings, 0 replies; 16+ messages in thread
From: Chen-Yu Tsai @ 2022-02-21 4:33 UTC (permalink / raw)
To: AngeloGioacchino Del Regno
Cc: sean.wang, linus.walleij, matthias.bgg, linux-mediatek,
linux-gpio, linux-kernel, linux-arm-kernel, kernel
On Thu, Feb 10, 2022 at 10:20 PM AngeloGioacchino Del Regno
<angelogioacchino.delregno@collabora.com> wrote:
>
> As a preparation to cleanup the probe mechanism of mediatek pinctrl
> drivers that are using the v1 controller, add a common probe function
> to this driver.
>
> Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Reviewed-by: Chen-Yu Tsai <wenst@chromium.org>
but
> ---
> drivers/pinctrl/mediatek/pinctrl-mtk-common.c | 11 +++++++++++
> drivers/pinctrl/mediatek/pinctrl-mtk-common.h | 2 ++
> 2 files changed, 13 insertions(+)
>
> diff --git a/drivers/pinctrl/mediatek/pinctrl-mtk-common.c b/drivers/pinctrl/mediatek/pinctrl-mtk-common.c
> index 6f8dfa6ae5a0..007da39b68c9 100644
> --- a/drivers/pinctrl/mediatek/pinctrl-mtk-common.c
> +++ b/drivers/pinctrl/mediatek/pinctrl-mtk-common.c
> @@ -1115,3 +1115,14 @@ int mtk_pctrl_init(struct platform_device *pdev,
> gpiochip_remove(pctl->chip);
> return ret;
> }
> +
> +int mtk_pctrl_common_probe(struct platform_device *pdev)
> +{
> + struct device *dev = &pdev->dev;
> + const struct mtk_pinctrl_devdata *data = device_get_match_data(dev);
> +
> + if (!data)
> + return -ENOENT;
This is probably bikeshedding, but it seems most other drivers use -ENODEV
or -EINVAL. -ENOENT is seldomly used in this context.
ChenYu
^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH 3/5] pinctrl: mediatek: common-v1: Use common probe function
2022-02-10 14:19 [PATCH 0/5] MediaTek pinctrl drivers cleanups AngeloGioacchino Del Regno
2022-02-10 14:19 ` [PATCH 1/5] pinctrl: mediatek: paris: Unify probe function by using OF match data AngeloGioacchino Del Regno
2022-02-10 14:19 ` [PATCH 2/5] pinctrl: mediatek: common-v1: Add common probe function AngeloGioacchino Del Regno
@ 2022-02-10 14:19 ` AngeloGioacchino Del Regno
2022-02-21 4:35 ` Chen-Yu Tsai
2022-02-10 14:19 ` [PATCH 4/5] pinctrl: mediatek: common-v1: Commonize spec_pupd callback AngeloGioacchino Del Regno
` (2 subsequent siblings)
5 siblings, 1 reply; 16+ messages in thread
From: AngeloGioacchino Del Regno @ 2022-02-10 14:19 UTC (permalink / raw)
To: sean.wang
Cc: linus.walleij, matthias.bgg, linux-mediatek, linux-gpio,
linux-kernel, linux-arm-kernel, kernel,
AngeloGioacchino Del Regno
Most of the mediatek pinctrl drivers are calling mtk_pctrl_init() and
passing only a pointer to struct mtk_pinctrl_devdata, as the regmap
handle it passed from device-tree, with the exception of mt6397.
For all of the drivers that don't require passing a struct regmap
pointer from a parent device, simplify the probe mechanism by assigning
the required structure as match data and use mtk_pctrl_common_probe()
as their probe function.
While at it, also collapse the of_device_id entries to a single line,
as they all fit in max 83 columns, which is acceptable.
Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
---
drivers/pinctrl/mediatek/pinctrl-mt2701.c | 11 +++--------
drivers/pinctrl/mediatek/pinctrl-mt2712.c | 11 ++---------
drivers/pinctrl/mediatek/pinctrl-mt8127.c | 9 ++-------
drivers/pinctrl/mediatek/pinctrl-mt8135.c | 11 ++---------
drivers/pinctrl/mediatek/pinctrl-mt8167.c | 11 ++---------
drivers/pinctrl/mediatek/pinctrl-mt8365.c | 11 ++---------
drivers/pinctrl/mediatek/pinctrl-mt8516.c | 11 ++---------
7 files changed, 15 insertions(+), 60 deletions(-)
diff --git a/drivers/pinctrl/mediatek/pinctrl-mt2701.c b/drivers/pinctrl/mediatek/pinctrl-mt2701.c
index 37228dd5103e..2f8821207395 100644
--- a/drivers/pinctrl/mediatek/pinctrl-mt2701.c
+++ b/drivers/pinctrl/mediatek/pinctrl-mt2701.c
@@ -534,20 +534,15 @@ static const struct mtk_pinctrl_devdata mt2701_pinctrl_data = {
},
};
-static int mt2701_pinctrl_probe(struct platform_device *pdev)
-{
- return mtk_pctrl_init(pdev, &mt2701_pinctrl_data, NULL);
-}
-
static const struct of_device_id mt2701_pctrl_match[] = {
- { .compatible = "mediatek,mt2701-pinctrl", },
- { .compatible = "mediatek,mt7623-pinctrl", },
+ { .compatible = "mediatek,mt2701-pinctrl", .data = &mt2701_pinctrl_data },
+ { .compatible = "mediatek,mt7623-pinctrl", .data = &mt2701_pinctrl_data },
{}
};
MODULE_DEVICE_TABLE(of, mt2701_pctrl_match);
static struct platform_driver mtk_pinctrl_driver = {
- .probe = mt2701_pinctrl_probe,
+ .probe = mtk_pctrl_common_probe,
.driver = {
.name = "mediatek-mt2701-pinctrl",
.of_match_table = mt2701_pctrl_match,
diff --git a/drivers/pinctrl/mediatek/pinctrl-mt2712.c b/drivers/pinctrl/mediatek/pinctrl-mt2712.c
index ba35fc6cc138..03aa14445034 100644
--- a/drivers/pinctrl/mediatek/pinctrl-mt2712.c
+++ b/drivers/pinctrl/mediatek/pinctrl-mt2712.c
@@ -587,21 +587,14 @@ static const struct mtk_pinctrl_devdata mt2712_pinctrl_data = {
},
};
-static int mt2712_pinctrl_probe(struct platform_device *pdev)
-{
- return mtk_pctrl_init(pdev, &mt2712_pinctrl_data, NULL);
-}
-
static const struct of_device_id mt2712_pctrl_match[] = {
- {
- .compatible = "mediatek,mt2712-pinctrl",
- },
+ { .compatible = "mediatek,mt2712-pinctrl", .data = &mt2712_pinctrl_data },
{ }
};
MODULE_DEVICE_TABLE(of, mt2712_pctrl_match);
static struct platform_driver mtk_pinctrl_driver = {
- .probe = mt2712_pinctrl_probe,
+ .probe = mtk_pctrl_common_probe,
.driver = {
.name = "mediatek-mt2712-pinctrl",
.of_match_table = mt2712_pctrl_match,
diff --git a/drivers/pinctrl/mediatek/pinctrl-mt8127.c b/drivers/pinctrl/mediatek/pinctrl-mt8127.c
index eaf5c76b14c7..76cb525374f2 100644
--- a/drivers/pinctrl/mediatek/pinctrl-mt8127.c
+++ b/drivers/pinctrl/mediatek/pinctrl-mt8127.c
@@ -303,18 +303,13 @@ static const struct mtk_pinctrl_devdata mt8127_pinctrl_data = {
},
};
-static int mt8127_pinctrl_probe(struct platform_device *pdev)
-{
- return mtk_pctrl_init(pdev, &mt8127_pinctrl_data, NULL);
-}
-
static const struct of_device_id mt8127_pctrl_match[] = {
- { .compatible = "mediatek,mt8127-pinctrl", },
+ { .compatible = "mediatek,mt8127-pinctrl", .data = &mt8127_pinctrl_data },
{ }
};
static struct platform_driver mtk_pinctrl_driver = {
- .probe = mt8127_pinctrl_probe,
+ .probe = mtk_pctrl_common_probe,
.driver = {
.name = "mediatek-mt8127-pinctrl",
.of_match_table = mt8127_pctrl_match,
diff --git a/drivers/pinctrl/mediatek/pinctrl-mt8135.c b/drivers/pinctrl/mediatek/pinctrl-mt8135.c
index b8f4080aab45..4c20b79dec67 100644
--- a/drivers/pinctrl/mediatek/pinctrl-mt8135.c
+++ b/drivers/pinctrl/mediatek/pinctrl-mt8135.c
@@ -316,20 +316,13 @@ static const struct mtk_pinctrl_devdata mt8135_pinctrl_data = {
},
};
-static int mt8135_pinctrl_probe(struct platform_device *pdev)
-{
- return mtk_pctrl_init(pdev, &mt8135_pinctrl_data, NULL);
-}
-
static const struct of_device_id mt8135_pctrl_match[] = {
- {
- .compatible = "mediatek,mt8135-pinctrl",
- },
+ { .compatible = "mediatek,mt8135-pinctrl", .data = &mt8135_pinctrl_data },
{ }
};
static struct platform_driver mtk_pinctrl_driver = {
- .probe = mt8135_pinctrl_probe,
+ .probe = mtk_pctrl_common_probe,
.driver = {
.name = "mediatek-mt8135-pinctrl",
.of_match_table = mt8135_pctrl_match,
diff --git a/drivers/pinctrl/mediatek/pinctrl-mt8167.c b/drivers/pinctrl/mediatek/pinctrl-mt8167.c
index ba12ef795e52..08aabf408c9c 100644
--- a/drivers/pinctrl/mediatek/pinctrl-mt8167.c
+++ b/drivers/pinctrl/mediatek/pinctrl-mt8167.c
@@ -335,22 +335,15 @@ static const struct mtk_pinctrl_devdata mt8167_pinctrl_data = {
},
};
-static int mt8167_pinctrl_probe(struct platform_device *pdev)
-{
- return mtk_pctrl_init(pdev, &mt8167_pinctrl_data, NULL);
-}
-
static const struct of_device_id mt8167_pctrl_match[] = {
- {
- .compatible = "mediatek,mt8167-pinctrl",
- },
+ { .compatible = "mediatek,mt8167-pinctrl", .data = &mt8167_pinctrl_data },
{}
};
MODULE_DEVICE_TABLE(of, mt8167_pctrl_match);
static struct platform_driver mtk_pinctrl_driver = {
- .probe = mt8167_pinctrl_probe,
+ .probe = mtk_pctrl_common_probe,
.driver = {
.name = "mediatek-mt8167-pinctrl",
.of_match_table = mt8167_pctrl_match,
diff --git a/drivers/pinctrl/mediatek/pinctrl-mt8365.c b/drivers/pinctrl/mediatek/pinctrl-mt8365.c
index 79b1fee5a1eb..6863a8150a2b 100644
--- a/drivers/pinctrl/mediatek/pinctrl-mt8365.c
+++ b/drivers/pinctrl/mediatek/pinctrl-mt8365.c
@@ -469,20 +469,13 @@ static const struct mtk_pinctrl_devdata mt8365_pinctrl_data = {
},
};
-static int mtk_pinctrl_probe(struct platform_device *pdev)
-{
- return mtk_pctrl_init(pdev, &mt8365_pinctrl_data, NULL);
-}
-
static const struct of_device_id mt8365_pctrl_match[] = {
- {
- .compatible = "mediatek,mt8365-pinctrl",
- },
+ { .compatible = "mediatek,mt8365-pinctrl", .data = &mt8365_pinctrl_data },
{}
};
static struct platform_driver mtk_pinctrl_driver = {
- .probe = mtk_pinctrl_probe,
+ .probe = mtk_pctrl_common_probe,
.driver = {
.name = "mediatek-mt8365-pinctrl",
.of_match_table = mt8365_pctrl_match,
diff --git a/drivers/pinctrl/mediatek/pinctrl-mt8516.c b/drivers/pinctrl/mediatek/pinctrl-mt8516.c
index 219fb4bc341f..99c1a04c7fd8 100644
--- a/drivers/pinctrl/mediatek/pinctrl-mt8516.c
+++ b/drivers/pinctrl/mediatek/pinctrl-mt8516.c
@@ -335,22 +335,15 @@ static const struct mtk_pinctrl_devdata mt8516_pinctrl_data = {
},
};
-static int mt8516_pinctrl_probe(struct platform_device *pdev)
-{
- return mtk_pctrl_init(pdev, &mt8516_pinctrl_data, NULL);
-}
-
static const struct of_device_id mt8516_pctrl_match[] = {
- {
- .compatible = "mediatek,mt8516-pinctrl",
- },
+ { .compatible = "mediatek,mt8516-pinctrl", .data = &mt8516_pinctrl_data },
{}
};
MODULE_DEVICE_TABLE(of, mt8516_pctrl_match);
static struct platform_driver mtk_pinctrl_driver = {
- .probe = mt8516_pinctrl_probe,
+ .probe = mtk_pctrl_common_probe,
.driver = {
.name = "mediatek-mt8516-pinctrl",
.of_match_table = mt8516_pctrl_match,
--
2.33.1
^ permalink raw reply related [flat|nested] 16+ messages in thread
* Re: [PATCH 3/5] pinctrl: mediatek: common-v1: Use common probe function
2022-02-10 14:19 ` [PATCH 3/5] pinctrl: mediatek: common-v1: Use " AngeloGioacchino Del Regno
@ 2022-02-21 4:35 ` Chen-Yu Tsai
0 siblings, 0 replies; 16+ messages in thread
From: Chen-Yu Tsai @ 2022-02-21 4:35 UTC (permalink / raw)
To: AngeloGioacchino Del Regno
Cc: sean.wang, linus.walleij, matthias.bgg, linux-mediatek,
linux-gpio, linux-kernel, linux-arm-kernel, kernel
On Thu, Feb 10, 2022 at 10:20 PM AngeloGioacchino Del Regno
<angelogioacchino.delregno@collabora.com> wrote:
>
> Most of the mediatek pinctrl drivers are calling mtk_pctrl_init() and
> passing only a pointer to struct mtk_pinctrl_devdata, as the regmap
> handle it passed from device-tree, with the exception of mt6397.
>
> For all of the drivers that don't require passing a struct regmap
> pointer from a parent device, simplify the probe mechanism by assigning
> the required structure as match data and use mtk_pctrl_common_probe()
> as their probe function.
>
> While at it, also collapse the of_device_id entries to a single line,
> as they all fit in max 83 columns, which is acceptable.
>
> Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Reviewed-by: Chen-Yu Tsai <wenst@chromium.org>
^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH 4/5] pinctrl: mediatek: common-v1: Commonize spec_pupd callback
2022-02-10 14:19 [PATCH 0/5] MediaTek pinctrl drivers cleanups AngeloGioacchino Del Regno
` (2 preceding siblings ...)
2022-02-10 14:19 ` [PATCH 3/5] pinctrl: mediatek: common-v1: Use " AngeloGioacchino Del Regno
@ 2022-02-10 14:19 ` AngeloGioacchino Del Regno
2022-02-21 9:57 ` Chen-Yu Tsai
2022-02-21 9:59 ` Chen-Yu Tsai
2022-02-10 14:19 ` [PATCH 5/5] pinctrl: mediatek: common-v1: Commonize spec_ies_smt_set callback AngeloGioacchino Del Regno
2022-02-19 1:18 ` [PATCH 0/5] MediaTek pinctrl drivers cleanups Linus Walleij
5 siblings, 2 replies; 16+ messages in thread
From: AngeloGioacchino Del Regno @ 2022-02-10 14:19 UTC (permalink / raw)
To: sean.wang
Cc: linus.walleij, matthias.bgg, linux-mediatek, linux-gpio,
linux-kernel, linux-arm-kernel, kernel,
AngeloGioacchino Del Regno
Reduce code size and duplication by using a common spec_pupd callback,
which is possible to use on all of the pinctrl drivers that are
using the v1 pinctrl-mtk-common code, with the exception of mt8135,
which has a different handling compared to the others.
Since the callback function signature was changed, this had to be
propagated to pinctrl-mt8135's spec_pull_set().
Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
---
drivers/pinctrl/mediatek/pinctrl-mt2701.c | 11 +++------
drivers/pinctrl/mediatek/pinctrl-mt2712.c | 14 +++--------
drivers/pinctrl/mediatek/pinctrl-mt8127.c | 11 +++------
drivers/pinctrl/mediatek/pinctrl-mt8135.c | 6 +++--
drivers/pinctrl/mediatek/pinctrl-mt8167.c | 11 +++------
drivers/pinctrl/mediatek/pinctrl-mt8173.c | 11 +++------
drivers/pinctrl/mediatek/pinctrl-mt8365.c | 11 +++------
drivers/pinctrl/mediatek/pinctrl-mt8516.c | 11 +++------
drivers/pinctrl/mediatek/pinctrl-mtk-common.c | 23 +++++++++++--------
drivers/pinctrl/mediatek/pinctrl-mtk-common.h | 14 +++++++----
10 files changed, 47 insertions(+), 76 deletions(-)
diff --git a/drivers/pinctrl/mediatek/pinctrl-mt2701.c b/drivers/pinctrl/mediatek/pinctrl-mt2701.c
index 2f8821207395..816de39858f8 100644
--- a/drivers/pinctrl/mediatek/pinctrl-mt2701.c
+++ b/drivers/pinctrl/mediatek/pinctrl-mt2701.c
@@ -270,13 +270,6 @@ static const struct mtk_pin_spec_pupd_set_samereg mt2701_spec_pupd[] = {
MTK_PIN_PUPD_SPEC_SR(261, 0x140, 8, 9, 10), /* ms1 ins */
};
-static int mt2701_spec_pull_set(struct regmap *regmap, unsigned int pin,
- unsigned char align, bool isup, unsigned int r1r0)
-{
- return mtk_pctrl_spec_pull_set_samereg(regmap, mt2701_spec_pupd,
- ARRAY_SIZE(mt2701_spec_pupd), pin, align, isup, r1r0);
-}
-
static const struct mtk_pin_ies_smt_set mt2701_ies_set[] = {
MTK_PIN_IES_SMT_SPEC(0, 6, 0xb20, 0),
MTK_PIN_IES_SMT_SPEC(7, 9, 0xb20, 1),
@@ -508,7 +501,9 @@ static const struct mtk_pinctrl_devdata mt2701_pinctrl_data = {
.n_grp_cls = ARRAY_SIZE(mt2701_drv_grp),
.pin_drv_grp = mt2701_pin_drv,
.n_pin_drv_grps = ARRAY_SIZE(mt2701_pin_drv),
- .spec_pull_set = mt2701_spec_pull_set,
+ .spec_pupd = mt2701_spec_pupd,
+ .n_spec_pupd = ARRAY_SIZE(mt2701_spec_pupd),
+ .spec_pull_set = mtk_pctrl_spec_pull_set_samereg,
.spec_ies_smt_set = mt2701_ies_smt_set,
.spec_pinmux_set = mt2701_spec_pinmux_set,
.spec_dir_set = mt2701_spec_dir_set,
diff --git a/drivers/pinctrl/mediatek/pinctrl-mt2712.c b/drivers/pinctrl/mediatek/pinctrl-mt2712.c
index 03aa14445034..b6182b06584b 100644
--- a/drivers/pinctrl/mediatek/pinctrl-mt2712.c
+++ b/drivers/pinctrl/mediatek/pinctrl-mt2712.c
@@ -81,16 +81,6 @@ static const struct mtk_pin_spec_pupd_set_samereg mt2712_spec_pupd[] = {
MTK_PIN_PUPD_SPEC_SR(142, 0xe60, 5, 4, 3)
};
-static int mt2712_spec_pull_set(struct regmap *regmap,
- unsigned int pin,
- unsigned char align,
- bool isup,
- unsigned int r1r0)
-{
- return mtk_pctrl_spec_pull_set_samereg(regmap, mt2712_spec_pupd,
- ARRAY_SIZE(mt2712_spec_pupd), pin, align, isup, r1r0);
-}
-
static const struct mtk_pin_ies_smt_set mt2712_smt_set[] = {
MTK_PIN_IES_SMT_SPEC(0, 3, 0x900, 2),
MTK_PIN_IES_SMT_SPEC(4, 7, 0x900, 0),
@@ -563,7 +553,9 @@ static const struct mtk_pinctrl_devdata mt2712_pinctrl_data = {
.n_grp_cls = ARRAY_SIZE(mt2712_drv_grp),
.pin_drv_grp = mt2712_pin_drv,
.n_pin_drv_grps = ARRAY_SIZE(mt2712_pin_drv),
- .spec_pull_set = mt2712_spec_pull_set,
+ .spec_pupd = mt2712_spec_pupd,
+ .n_spec_pupd = ARRAY_SIZE(mt2712_spec_pupd),
+ .spec_pull_set = mtk_pctrl_spec_pull_set_samereg,
.spec_ies_smt_set = mt2712_ies_smt_set,
.dir_offset = 0x0000,
.pullen_offset = 0x0100,
diff --git a/drivers/pinctrl/mediatek/pinctrl-mt8127.c b/drivers/pinctrl/mediatek/pinctrl-mt8127.c
index 76cb525374f2..9745d15f93ec 100644
--- a/drivers/pinctrl/mediatek/pinctrl-mt8127.c
+++ b/drivers/pinctrl/mediatek/pinctrl-mt8127.c
@@ -172,13 +172,6 @@ static const struct mtk_pin_spec_pupd_set_samereg mt8127_spec_pupd[] = {
MTK_PIN_PUPD_SPEC_SR(142, 0xdc0, 2, 0, 1), /* EINT21 */
};
-static int mt8127_spec_pull_set(struct regmap *regmap, unsigned int pin,
- unsigned char align, bool isup, unsigned int r1r0)
-{
- return mtk_pctrl_spec_pull_set_samereg(regmap, mt8127_spec_pupd,
- ARRAY_SIZE(mt8127_spec_pupd), pin, align, isup, r1r0);
-}
-
static const struct mtk_pin_ies_smt_set mt8127_ies_set[] = {
MTK_PIN_IES_SMT_SPEC(0, 9, 0x900, 0),
MTK_PIN_IES_SMT_SPEC(10, 13, 0x900, 1),
@@ -279,7 +272,9 @@ static const struct mtk_pinctrl_devdata mt8127_pinctrl_data = {
.n_grp_cls = ARRAY_SIZE(mt8127_drv_grp),
.pin_drv_grp = mt8127_pin_drv,
.n_pin_drv_grps = ARRAY_SIZE(mt8127_pin_drv),
- .spec_pull_set = mt8127_spec_pull_set,
+ .spec_pupd = mt8127_spec_pupd,
+ .n_spec_pupd = ARRAY_SIZE(mt8127_spec_pupd),
+ .spec_pull_set = mtk_pctrl_spec_pull_set_samereg,
.spec_ies_smt_set = mt8127_ies_smt_set,
.dir_offset = 0x0000,
.pullen_offset = 0x0100,
diff --git a/drivers/pinctrl/mediatek/pinctrl-mt8135.c b/drivers/pinctrl/mediatek/pinctrl-mt8135.c
index 4c20b79dec67..562846756517 100644
--- a/drivers/pinctrl/mediatek/pinctrl-mt8135.c
+++ b/drivers/pinctrl/mediatek/pinctrl-mt8135.c
@@ -230,12 +230,14 @@ static const struct mtk_spec_pull_set spec_pupd[] = {
SPEC_PULL(202, PUPD_BASE2+0xc0, 10, R0_BASE1, 12, R1_BASE2+0xc0, 10)
};
-static int spec_pull_set(struct regmap *regmap, unsigned int pin,
- unsigned char align, bool isup, unsigned int r1r0)
+static int spec_pull_set(struct regmap *regmap,
+ const struct mtk_pinctrl_devdata *devdata,
+ unsigned int pin, bool isup, unsigned int r1r0)
{
unsigned int i;
unsigned int reg_pupd, reg_set_r0, reg_set_r1;
unsigned int reg_rst_r0, reg_rst_r1;
+ unsigned char align = devdata->port_align;
bool find = false;
for (i = 0; i < ARRAY_SIZE(spec_pupd); i++) {
diff --git a/drivers/pinctrl/mediatek/pinctrl-mt8167.c b/drivers/pinctrl/mediatek/pinctrl-mt8167.c
index 08aabf408c9c..118ddcba18fc 100644
--- a/drivers/pinctrl/mediatek/pinctrl-mt8167.c
+++ b/drivers/pinctrl/mediatek/pinctrl-mt8167.c
@@ -186,13 +186,6 @@ static const struct mtk_pin_spec_pupd_set_samereg mt8167_spec_pupd[] = {
MTK_PIN_PUPD_SPEC_SR(120, 0xe00, 2, 1, 0),
};
-static int mt8167_spec_pull_set(struct regmap *regmap, unsigned int pin,
- unsigned char align, bool isup, unsigned int r1r0)
-{
- return mtk_pctrl_spec_pull_set_samereg(regmap, mt8167_spec_pupd,
- ARRAY_SIZE(mt8167_spec_pupd), pin, align, isup, r1r0);
-}
-
static const struct mtk_pin_ies_smt_set mt8167_ies_set[] = {
MTK_PIN_IES_SMT_SPEC(0, 6, 0x900, 2),
MTK_PIN_IES_SMT_SPEC(7, 10, 0x900, 3),
@@ -311,7 +304,9 @@ static const struct mtk_pinctrl_devdata mt8167_pinctrl_data = {
.n_grp_cls = ARRAY_SIZE(mt8167_drv_grp),
.pin_drv_grp = mt8167_pin_drv,
.n_pin_drv_grps = ARRAY_SIZE(mt8167_pin_drv),
- .spec_pull_set = mt8167_spec_pull_set,
+ .spec_pupd = mt8167_spec_pupd,
+ .n_spec_pupd = ARRAY_SIZE(mt8167_spec_pupd),
+ .spec_pull_set = mtk_pctrl_spec_pull_set_samereg,
.spec_ies_smt_set = mt8167_ies_smt_set,
.dir_offset = 0x0000,
.pullen_offset = 0x0500,
diff --git a/drivers/pinctrl/mediatek/pinctrl-mt8173.c b/drivers/pinctrl/mediatek/pinctrl-mt8173.c
index fc99df8a11c6..b34c9778e131 100644
--- a/drivers/pinctrl/mediatek/pinctrl-mt8173.c
+++ b/drivers/pinctrl/mediatek/pinctrl-mt8173.c
@@ -61,13 +61,6 @@ static const struct mtk_pin_spec_pupd_set_samereg mt8173_spec_pupd[] = {
MTK_PIN_PUPD_SPEC_SR(27, 0xcd0, 2, 1, 0) /* ms3 cmd */
};
-static int mt8173_spec_pull_set(struct regmap *regmap, unsigned int pin,
- unsigned char align, bool isup, unsigned int r1r0)
-{
- return mtk_pctrl_spec_pull_set_samereg(regmap, mt8173_spec_pupd,
- ARRAY_SIZE(mt8173_spec_pupd), pin, align, isup, r1r0);
-}
-
static const struct mtk_pin_ies_smt_set mt8173_smt_set[] = {
MTK_PIN_IES_SMT_SPEC(0, 4, 0x930, 1),
MTK_PIN_IES_SMT_SPEC(5, 9, 0x930, 2),
@@ -319,7 +312,9 @@ static const struct mtk_pinctrl_devdata mt8173_pinctrl_data = {
.n_grp_cls = ARRAY_SIZE(mt8173_drv_grp),
.pin_drv_grp = mt8173_pin_drv,
.n_pin_drv_grps = ARRAY_SIZE(mt8173_pin_drv),
- .spec_pull_set = mt8173_spec_pull_set,
+ .spec_pupd = mt8173_spec_pupd,
+ .n_spec_pupd = ARRAY_SIZE(mt8173_spec_pupd),
+ .spec_pull_set = mtk_pctrl_spec_pull_set_samereg,
.spec_ies_smt_set = mt8173_ies_smt_set,
.dir_offset = 0x0000,
.pullen_offset = 0x0100,
diff --git a/drivers/pinctrl/mediatek/pinctrl-mt8365.c b/drivers/pinctrl/mediatek/pinctrl-mt8365.c
index 6863a8150a2b..dbff7a831235 100644
--- a/drivers/pinctrl/mediatek/pinctrl-mt8365.c
+++ b/drivers/pinctrl/mediatek/pinctrl-mt8365.c
@@ -416,13 +416,6 @@ static const struct mtk_pin_ies_smt_set mt8365_smt_set[] = {
MTK_PIN_IES_SMT_SPEC(144, 144, 0x480, 22),
};
-static int mt8365_spec_pull_set(struct regmap *regmap, unsigned int pin,
- unsigned char align, bool isup, unsigned int r1r0)
-{
- return mtk_pctrl_spec_pull_set_samereg(regmap, mt8365_spec_pupd,
- ARRAY_SIZE(mt8365_spec_pupd), pin, align, isup, r1r0);
-}
-
static int mt8365_ies_smt_set(struct regmap *regmap, unsigned int pin,
unsigned char align, int value, enum pin_config_param arg)
{
@@ -442,7 +435,9 @@ static const struct mtk_pinctrl_devdata mt8365_pinctrl_data = {
.n_grp_cls = ARRAY_SIZE(mt8365_drv_grp),
.pin_drv_grp = mt8365_pin_drv,
.n_pin_drv_grps = ARRAY_SIZE(mt8365_pin_drv),
- .spec_pull_set = mt8365_spec_pull_set,
+ .spec_pupd = mt8365_spec_pupd,
+ .n_spec_pupd = ARRAY_SIZE(mt8365_spec_pupd),
+ .spec_pull_set = mtk_pctrl_spec_pull_set_samereg,
.spec_ies_smt_set = mt8365_ies_smt_set,
.dir_offset = 0x0140,
.dout_offset = 0x00A0,
diff --git a/drivers/pinctrl/mediatek/pinctrl-mt8516.c b/drivers/pinctrl/mediatek/pinctrl-mt8516.c
index 99c1a04c7fd8..8ad2006857c0 100644
--- a/drivers/pinctrl/mediatek/pinctrl-mt8516.c
+++ b/drivers/pinctrl/mediatek/pinctrl-mt8516.c
@@ -186,13 +186,6 @@ static const struct mtk_pin_spec_pupd_set_samereg mt8516_spec_pupd[] = {
MTK_PIN_PUPD_SPEC_SR(120, 0xe00, 2, 1, 0),
};
-static int mt8516_spec_pull_set(struct regmap *regmap, unsigned int pin,
- unsigned char align, bool isup, unsigned int r1r0)
-{
- return mtk_pctrl_spec_pull_set_samereg(regmap, mt8516_spec_pupd,
- ARRAY_SIZE(mt8516_spec_pupd), pin, align, isup, r1r0);
-}
-
static const struct mtk_pin_ies_smt_set mt8516_ies_set[] = {
MTK_PIN_IES_SMT_SPEC(0, 6, 0x900, 2),
MTK_PIN_IES_SMT_SPEC(7, 10, 0x900, 3),
@@ -311,7 +304,9 @@ static const struct mtk_pinctrl_devdata mt8516_pinctrl_data = {
.n_grp_cls = ARRAY_SIZE(mt8516_drv_grp),
.pin_drv_grp = mt8516_pin_drv,
.n_pin_drv_grps = ARRAY_SIZE(mt8516_pin_drv),
- .spec_pull_set = mt8516_spec_pull_set,
+ .spec_pupd = mt8516_spec_pupd,
+ .n_spec_pupd = ARRAY_SIZE(mt8516_spec_pupd),
+ .spec_pull_set = mtk_pctrl_spec_pull_set_samereg,
.spec_ies_smt_set = mt8516_ies_smt_set,
.dir_offset = 0x0000,
.pullen_offset = 0x0500,
diff --git a/drivers/pinctrl/mediatek/pinctrl-mtk-common.c b/drivers/pinctrl/mediatek/pinctrl-mtk-common.c
index 007da39b68c9..5e1d17512a0d 100644
--- a/drivers/pinctrl/mediatek/pinctrl-mtk-common.c
+++ b/drivers/pinctrl/mediatek/pinctrl-mtk-common.c
@@ -222,9 +222,8 @@ static int mtk_pconf_set_driving(struct mtk_pinctrl *pctl,
}
int mtk_pctrl_spec_pull_set_samereg(struct regmap *regmap,
- const struct mtk_pin_spec_pupd_set_samereg *pupd_infos,
- unsigned int info_num, unsigned int pin,
- unsigned char align, bool isup, unsigned int r1r0)
+ const struct mtk_pinctrl_devdata *devdata,
+ unsigned int pin, bool isup, unsigned int r1r0)
{
unsigned int i;
unsigned int reg_pupd, reg_set, reg_rst;
@@ -232,8 +231,11 @@ int mtk_pctrl_spec_pull_set_samereg(struct regmap *regmap,
const struct mtk_pin_spec_pupd_set_samereg *spec_pupd_pin;
bool find = false;
- for (i = 0; i < info_num; i++) {
- if (pin == pupd_infos[i].pin) {
+ if (!devdata->spec_pupd)
+ return -EINVAL;
+
+ for (i = 0; i < devdata->n_spec_pupd; i++) {
+ if (pin == devdata->spec_pupd[i].pin) {
find = true;
break;
}
@@ -242,9 +244,9 @@ int mtk_pctrl_spec_pull_set_samereg(struct regmap *regmap,
if (!find)
return -EINVAL;
- spec_pupd_pin = pupd_infos + i;
- reg_set = spec_pupd_pin->offset + align;
- reg_rst = spec_pupd_pin->offset + (align << 1);
+ spec_pupd_pin = devdata->spec_pupd + i;
+ reg_set = spec_pupd_pin->offset + devdata->port_align;
+ reg_rst = spec_pupd_pin->offset + (devdata->port_align << 1);
if (isup)
reg_pupd = reg_rst;
@@ -293,12 +295,13 @@ static int mtk_pconf_set_pull_select(struct mtk_pinctrl *pctl,
* resistor bit, so we need this special handle.
*/
if (pctl->devdata->spec_pull_set) {
- /* For special pins, bias-disable is set by R1R0,
+ /* For special pins, bias-disable is set by R1R0
* the parameter should be "MTK_PUPD_SET_R1R0_00".
*/
r1r0 = enable ? arg : MTK_PUPD_SET_R1R0_00;
ret = pctl->devdata->spec_pull_set(mtk_get_regmap(pctl, pin),
- pin, pctl->devdata->port_align, isup, r1r0);
+ pctl->devdata, pin, isup,
+ r1r0);
if (!ret)
return 0;
}
diff --git a/drivers/pinctrl/mediatek/pinctrl-mtk-common.h b/drivers/pinctrl/mediatek/pinctrl-mtk-common.h
index cd264cc3547b..f7968a6ac563 100644
--- a/drivers/pinctrl/mediatek/pinctrl-mtk-common.h
+++ b/drivers/pinctrl/mediatek/pinctrl-mtk-common.h
@@ -193,6 +193,8 @@ struct mtk_eint_offsets {
*
* @grp_desc: The driving group info.
* @pin_drv_grp: The driving group for all pins.
+ * @spec_pupd: Special pull up/down setting
+ * @n_spec_pupd: Number of entries in spec_pupd
* @spec_pull_set: Each SoC may have special pins for pull up/down setting,
* these pins' pull setting are very different, they have separate pull
* up/down bit, R0 and R1 resistor bit, so they need special pull setting.
@@ -231,8 +233,11 @@ struct mtk_pinctrl_devdata {
unsigned int n_grp_cls;
const struct mtk_pin_drv_grp *pin_drv_grp;
unsigned int n_pin_drv_grps;
- int (*spec_pull_set)(struct regmap *reg, unsigned int pin,
- unsigned char align, bool isup, unsigned int arg);
+ const struct mtk_pin_spec_pupd_set_samereg *spec_pupd;
+ unsigned int n_spec_pupd;
+ int (*spec_pull_set)(struct regmap *regmap,
+ const struct mtk_pinctrl_devdata *devdata,
+ unsigned int pin, bool isup, unsigned int r1r0);
int (*spec_ies_smt_set)(struct regmap *reg, unsigned int pin,
unsigned char align, int value, enum pin_config_param arg);
void (*spec_pinmux_set)(struct regmap *reg, unsigned int pin,
@@ -280,9 +285,8 @@ int mtk_pctrl_init(struct platform_device *pdev,
int mtk_pctrl_common_probe(struct platform_device *pdev);
int mtk_pctrl_spec_pull_set_samereg(struct regmap *regmap,
- const struct mtk_pin_spec_pupd_set_samereg *pupd_infos,
- unsigned int info_num, unsigned int pin,
- unsigned char align, bool isup, unsigned int r1r0);
+ const struct mtk_pinctrl_devdata *devdata,
+ unsigned int pin, bool isup, unsigned int r1r0);
int mtk_pconf_spec_set_ies_smt_range(struct regmap *regmap,
const struct mtk_pin_ies_smt_set *ies_smt_infos, unsigned int info_num,
--
2.33.1
^ permalink raw reply related [flat|nested] 16+ messages in thread
* Re: [PATCH 4/5] pinctrl: mediatek: common-v1: Commonize spec_pupd callback
2022-02-10 14:19 ` [PATCH 4/5] pinctrl: mediatek: common-v1: Commonize spec_pupd callback AngeloGioacchino Del Regno
@ 2022-02-21 9:57 ` Chen-Yu Tsai
2022-02-21 9:59 ` Chen-Yu Tsai
1 sibling, 0 replies; 16+ messages in thread
From: Chen-Yu Tsai @ 2022-02-21 9:57 UTC (permalink / raw)
To: AngeloGioacchino Del Regno
Cc: sean.wang, linus.walleij, matthias.bgg, linux-mediatek,
linux-gpio, linux-kernel, linux-arm-kernel, kernel
On Thu, Feb 10, 2022 at 10:20 PM AngeloGioacchino Del Regno
<angelogioacchino.delregno@collabora.com> wrote:
>
> Reduce code size and duplication by using a common spec_pupd callback,
> which is possible to use on all of the pinctrl drivers that are
> using the v1 pinctrl-mtk-common code, with the exception of mt8135,
> which has a different handling compared to the others.
> Since the callback function signature was changed, this had to be
> propagated to pinctrl-mt8135's spec_pull_set().
>
> Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Signed-off-by: Chen-Yu Tsai <wenst@chromium.org>
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 4/5] pinctrl: mediatek: common-v1: Commonize spec_pupd callback
2022-02-10 14:19 ` [PATCH 4/5] pinctrl: mediatek: common-v1: Commonize spec_pupd callback AngeloGioacchino Del Regno
2022-02-21 9:57 ` Chen-Yu Tsai
@ 2022-02-21 9:59 ` Chen-Yu Tsai
2022-02-22 2:55 ` Chen-Yu Tsai
1 sibling, 1 reply; 16+ messages in thread
From: Chen-Yu Tsai @ 2022-02-21 9:59 UTC (permalink / raw)
To: AngeloGioacchino Del Regno
Cc: sean.wang, linus.walleij, matthias.bgg, linux-mediatek,
linux-gpio, linux-kernel, linux-arm-kernel, kernel
On Thu, Feb 10, 2022 at 10:20 PM AngeloGioacchino Del Regno
<angelogioacchino.delregno@collabora.com> wrote:
>
> Reduce code size and duplication by using a common spec_pupd callback,
> which is possible to use on all of the pinctrl drivers that are
> using the v1 pinctrl-mtk-common code, with the exception of mt8135,
> which has a different handling compared to the others.
> Since the callback function signature was changed, this had to be
> propagated to pinctrl-mt8135's spec_pull_set().
>
> Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
> ---
[...]
> diff --git a/drivers/pinctrl/mediatek/pinctrl-mtk-common.c b/drivers/pinctrl/mediatek/pinctrl-mtk-common.c
> index 007da39b68c9..5e1d17512a0d 100644
> --- a/drivers/pinctrl/mediatek/pinctrl-mtk-common.c
> +++ b/drivers/pinctrl/mediatek/pinctrl-mtk-common.c
> @@ -222,9 +222,8 @@ static int mtk_pconf_set_driving(struct mtk_pinctrl *pctl,
> }
>
> int mtk_pctrl_spec_pull_set_samereg(struct regmap *regmap,
> - const struct mtk_pin_spec_pupd_set_samereg *pupd_infos,
> - unsigned int info_num, unsigned int pin,
> - unsigned char align, bool isup, unsigned int r1r0)
> + const struct mtk_pinctrl_devdata *devdata,
> + unsigned int pin, bool isup, unsigned int r1r0)
> {
> unsigned int i;
> unsigned int reg_pupd, reg_set, reg_rst;
> @@ -232,8 +231,11 @@ int mtk_pctrl_spec_pull_set_samereg(struct regmap *regmap,
> const struct mtk_pin_spec_pupd_set_samereg *spec_pupd_pin;
> bool find = false;
>
> - for (i = 0; i < info_num; i++) {
> - if (pin == pupd_infos[i].pin) {
> + if (!devdata->spec_pupd)
> + return -EINVAL;
> +
> + for (i = 0; i < devdata->n_spec_pupd; i++) {
> + if (pin == devdata->spec_pupd[i].pin) {
> find = true;
> break;
> }
> @@ -242,9 +244,9 @@ int mtk_pctrl_spec_pull_set_samereg(struct regmap *regmap,
> if (!find)
> return -EINVAL;
>
> - spec_pupd_pin = pupd_infos + i;
> - reg_set = spec_pupd_pin->offset + align;
> - reg_rst = spec_pupd_pin->offset + (align << 1);
> + spec_pupd_pin = devdata->spec_pupd + i;
> + reg_set = spec_pupd_pin->offset + devdata->port_align;
> + reg_rst = spec_pupd_pin->offset + (devdata->port_align << 1);
>
> if (isup)
> reg_pupd = reg_rst;
> @@ -293,12 +295,13 @@ static int mtk_pconf_set_pull_select(struct mtk_pinctrl *pctl,
> * resistor bit, so we need this special handle.
> */
> if (pctl->devdata->spec_pull_set) {
> - /* For special pins, bias-disable is set by R1R0,
> + /* For special pins, bias-disable is set by R1R0
Nit: This seems unrelated, and doesn't read correctly either way.
ChenYu
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 4/5] pinctrl: mediatek: common-v1: Commonize spec_pupd callback
2022-02-21 9:59 ` Chen-Yu Tsai
@ 2022-02-22 2:55 ` Chen-Yu Tsai
0 siblings, 0 replies; 16+ messages in thread
From: Chen-Yu Tsai @ 2022-02-22 2:55 UTC (permalink / raw)
To: AngeloGioacchino Del Regno
Cc: sean.wang, linus.walleij, matthias.bgg, linux-mediatek,
linux-gpio, linux-kernel, linux-arm-kernel, kernel
On Mon, Feb 21, 2022 at 5:59 PM Chen-Yu Tsai <wenst@chromium.org> wrote:
>
> On Thu, Feb 10, 2022 at 10:20 PM AngeloGioacchino Del Regno
> <angelogioacchino.delregno@collabora.com> wrote:
> >
> > Reduce code size and duplication by using a common spec_pupd callback,
> > which is possible to use on all of the pinctrl drivers that are
> > using the v1 pinctrl-mtk-common code, with the exception of mt8135,
> > which has a different handling compared to the others.
> > Since the callback function signature was changed, this had to be
> > propagated to pinctrl-mt8135's spec_pull_set().
> >
> > Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
> > ---
>
> [...]
>
> > diff --git a/drivers/pinctrl/mediatek/pinctrl-mtk-common.c b/drivers/pinctrl/mediatek/pinctrl-mtk-common.c
> > index 007da39b68c9..5e1d17512a0d 100644
> > --- a/drivers/pinctrl/mediatek/pinctrl-mtk-common.c
> > +++ b/drivers/pinctrl/mediatek/pinctrl-mtk-common.c
> > @@ -222,9 +222,8 @@ static int mtk_pconf_set_driving(struct mtk_pinctrl *pctl,
> > }
> >
> > int mtk_pctrl_spec_pull_set_samereg(struct regmap *regmap,
> > - const struct mtk_pin_spec_pupd_set_samereg *pupd_infos,
> > - unsigned int info_num, unsigned int pin,
> > - unsigned char align, bool isup, unsigned int r1r0)
> > + const struct mtk_pinctrl_devdata *devdata,
> > + unsigned int pin, bool isup, unsigned int r1r0)
> > {
> > unsigned int i;
> > unsigned int reg_pupd, reg_set, reg_rst;
> > @@ -232,8 +231,11 @@ int mtk_pctrl_spec_pull_set_samereg(struct regmap *regmap,
> > const struct mtk_pin_spec_pupd_set_samereg *spec_pupd_pin;
> > bool find = false;
> >
> > - for (i = 0; i < info_num; i++) {
> > - if (pin == pupd_infos[i].pin) {
> > + if (!devdata->spec_pupd)
> > + return -EINVAL;
> > +
> > + for (i = 0; i < devdata->n_spec_pupd; i++) {
> > + if (pin == devdata->spec_pupd[i].pin) {
> > find = true;
> > break;
> > }
> > @@ -242,9 +244,9 @@ int mtk_pctrl_spec_pull_set_samereg(struct regmap *regmap,
> > if (!find)
> > return -EINVAL;
> >
> > - spec_pupd_pin = pupd_infos + i;
> > - reg_set = spec_pupd_pin->offset + align;
> > - reg_rst = spec_pupd_pin->offset + (align << 1);
> > + spec_pupd_pin = devdata->spec_pupd + i;
> > + reg_set = spec_pupd_pin->offset + devdata->port_align;
> > + reg_rst = spec_pupd_pin->offset + (devdata->port_align << 1);
> >
> > if (isup)
> > reg_pupd = reg_rst;
> > @@ -293,12 +295,13 @@ static int mtk_pconf_set_pull_select(struct mtk_pinctrl *pctl,
> > * resistor bit, so we need this special handle.
> > */
> > if (pctl->devdata->spec_pull_set) {
> > - /* For special pins, bias-disable is set by R1R0,
> > + /* For special pins, bias-disable is set by R1R0
>
> Nit: This seems unrelated, and doesn't read correctly either way.
Once removed,
Reviewed-by: Chen-Yu Tsai <wenst@chromium.org>
^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH 5/5] pinctrl: mediatek: common-v1: Commonize spec_ies_smt_set callback
2022-02-10 14:19 [PATCH 0/5] MediaTek pinctrl drivers cleanups AngeloGioacchino Del Regno
` (3 preceding siblings ...)
2022-02-10 14:19 ` [PATCH 4/5] pinctrl: mediatek: common-v1: Commonize spec_pupd callback AngeloGioacchino Del Regno
@ 2022-02-10 14:19 ` AngeloGioacchino Del Regno
2022-02-21 9:58 ` Chen-Yu Tsai
2022-02-19 1:18 ` [PATCH 0/5] MediaTek pinctrl drivers cleanups Linus Walleij
5 siblings, 1 reply; 16+ messages in thread
From: AngeloGioacchino Del Regno @ 2022-02-10 14:19 UTC (permalink / raw)
To: sean.wang
Cc: linus.walleij, matthias.bgg, linux-mediatek, linux-gpio,
linux-kernel, linux-arm-kernel, kernel,
AngeloGioacchino Del Regno
All of the MediaTek pinctrl drivers registering with pinctrl-mtk-common
that are offering a .spec_ies_smt_set() callback are declaring their
own function which is doing exactly the same on all drivers: calling
mtk_pconf_spec_set_ies_smt_range() with their struct and a simple check.
Commonize this callback by adding the ies and smt structure pointers
to struct mtk_pinctrl_devdata and changing the callback signature to
take it.
Removing the callback and checking for the existence of the spec_smt
and/or spec_ies data would allow us to staticize the function
mtk_pconf_spec_set_ies_smt_range(), but this solution was avoided as
to keep flexibility, as some SoCs may need to perform a very different
operation compared to what this commonized function is doing.
Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
---
drivers/pinctrl/mediatek/pinctrl-mt2701.c | 18 ++++--------
drivers/pinctrl/mediatek/pinctrl-mt2712.c | 19 ++++--------
drivers/pinctrl/mediatek/pinctrl-mt8127.c | 19 ++++--------
drivers/pinctrl/mediatek/pinctrl-mt8167.c | 18 ++++--------
drivers/pinctrl/mediatek/pinctrl-mt8173.c | 18 ++++--------
drivers/pinctrl/mediatek/pinctrl-mt8365.c | 18 ++++--------
drivers/pinctrl/mediatek/pinctrl-mt8516.c | 18 ++++--------
drivers/pinctrl/mediatek/pinctrl-mtk-common.c | 29 +++++++++++++++----
drivers/pinctrl/mediatek/pinctrl-mtk-common.h | 17 ++++++++---
9 files changed, 71 insertions(+), 103 deletions(-)
diff --git a/drivers/pinctrl/mediatek/pinctrl-mt2701.c b/drivers/pinctrl/mediatek/pinctrl-mt2701.c
index 816de39858f8..d1583b4fdd9d 100644
--- a/drivers/pinctrl/mediatek/pinctrl-mt2701.c
+++ b/drivers/pinctrl/mediatek/pinctrl-mt2701.c
@@ -429,18 +429,6 @@ static const struct mtk_pin_ies_smt_set mt2701_smt_set[] = {
MTK_PIN_IES_SMT_SPEC(278, 278, 0xb70, 13),
};
-static int mt2701_ies_smt_set(struct regmap *regmap, unsigned int pin,
- unsigned char align, int value, enum pin_config_param arg)
-{
- if (arg == PIN_CONFIG_INPUT_ENABLE)
- return mtk_pconf_spec_set_ies_smt_range(regmap, mt2701_ies_set,
- ARRAY_SIZE(mt2701_ies_set), pin, align, value);
- else if (arg == PIN_CONFIG_INPUT_SCHMITT_ENABLE)
- return mtk_pconf_spec_set_ies_smt_range(regmap, mt2701_smt_set,
- ARRAY_SIZE(mt2701_smt_set), pin, align, value);
- return -EINVAL;
-}
-
static const struct mtk_spec_pinmux_set mt2701_spec_pinmux[] = {
MTK_PINMUX_SPEC(22, 0xb10, 3),
MTK_PINMUX_SPEC(23, 0xb10, 4),
@@ -501,10 +489,14 @@ static const struct mtk_pinctrl_devdata mt2701_pinctrl_data = {
.n_grp_cls = ARRAY_SIZE(mt2701_drv_grp),
.pin_drv_grp = mt2701_pin_drv,
.n_pin_drv_grps = ARRAY_SIZE(mt2701_pin_drv),
+ .spec_ies = mt2701_ies_set,
+ .n_spec_ies = ARRAY_SIZE(mt2701_ies_set),
.spec_pupd = mt2701_spec_pupd,
.n_spec_pupd = ARRAY_SIZE(mt2701_spec_pupd),
+ .spec_smt = mt2701_smt_set,
+ .n_spec_smt = ARRAY_SIZE(mt2701_smt_set),
.spec_pull_set = mtk_pctrl_spec_pull_set_samereg,
- .spec_ies_smt_set = mt2701_ies_smt_set,
+ .spec_ies_smt_set = mtk_pconf_spec_set_ies_smt_range,
.spec_pinmux_set = mt2701_spec_pinmux_set,
.spec_dir_set = mt2701_spec_dir_set,
.dir_offset = 0x0000,
diff --git a/drivers/pinctrl/mediatek/pinctrl-mt2712.c b/drivers/pinctrl/mediatek/pinctrl-mt2712.c
index b6182b06584b..b921068f9e69 100644
--- a/drivers/pinctrl/mediatek/pinctrl-mt2712.c
+++ b/drivers/pinctrl/mediatek/pinctrl-mt2712.c
@@ -275,19 +275,6 @@ static const struct mtk_pin_ies_smt_set mt2712_ies_set[] = {
MTK_PIN_IES_SMT_SPEC(207, 209, 0x8b0, 15)
};
-static int mt2712_ies_smt_set(struct regmap *regmap, unsigned int pin,
- unsigned char align,
- int value, enum pin_config_param arg)
-{
- if (arg == PIN_CONFIG_INPUT_ENABLE)
- return mtk_pconf_spec_set_ies_smt_range(regmap, mt2712_ies_set,
- ARRAY_SIZE(mt2712_ies_set), pin, align, value);
- if (arg == PIN_CONFIG_INPUT_SCHMITT_ENABLE)
- return mtk_pconf_spec_set_ies_smt_range(regmap, mt2712_smt_set,
- ARRAY_SIZE(mt2712_smt_set), pin, align, value);
- return -EINVAL;
-}
-
static const struct mtk_drv_group_desc mt2712_drv_grp[] = {
/* 0E4E8SR 4/8/12/16 */
MTK_DRV_GRP(4, 16, 1, 2, 4),
@@ -553,10 +540,14 @@ static const struct mtk_pinctrl_devdata mt2712_pinctrl_data = {
.n_grp_cls = ARRAY_SIZE(mt2712_drv_grp),
.pin_drv_grp = mt2712_pin_drv,
.n_pin_drv_grps = ARRAY_SIZE(mt2712_pin_drv),
+ .spec_ies = mt2712_ies_set,
+ .n_spec_ies = ARRAY_SIZE(mt2712_ies_set),
.spec_pupd = mt2712_spec_pupd,
.n_spec_pupd = ARRAY_SIZE(mt2712_spec_pupd),
+ .spec_smt = mt2712_smt_set,
+ .n_spec_smt = ARRAY_SIZE(mt2712_smt_set),
.spec_pull_set = mtk_pctrl_spec_pull_set_samereg,
- .spec_ies_smt_set = mt2712_ies_smt_set,
+ .spec_ies_smt_set = mtk_pconf_spec_set_ies_smt_range,
.dir_offset = 0x0000,
.pullen_offset = 0x0100,
.pullsel_offset = 0x0200,
diff --git a/drivers/pinctrl/mediatek/pinctrl-mt8127.c b/drivers/pinctrl/mediatek/pinctrl-mt8127.c
index 9745d15f93ec..91c530e7b00e 100644
--- a/drivers/pinctrl/mediatek/pinctrl-mt8127.c
+++ b/drivers/pinctrl/mediatek/pinctrl-mt8127.c
@@ -252,19 +252,6 @@ static const struct mtk_pin_ies_smt_set mt8127_smt_set[] = {
MTK_PIN_IES_SMT_SPEC(142, 142, 0x920, 13),
};
-static int mt8127_ies_smt_set(struct regmap *regmap, unsigned int pin,
- unsigned char align, int value, enum pin_config_param arg)
-{
- if (arg == PIN_CONFIG_INPUT_ENABLE)
- return mtk_pconf_spec_set_ies_smt_range(regmap, mt8127_ies_set,
- ARRAY_SIZE(mt8127_ies_set), pin, align, value);
- else if (arg == PIN_CONFIG_INPUT_SCHMITT_ENABLE)
- return mtk_pconf_spec_set_ies_smt_range(regmap, mt8127_smt_set,
- ARRAY_SIZE(mt8127_smt_set), pin, align, value);
- return -EINVAL;
-}
-
-
static const struct mtk_pinctrl_devdata mt8127_pinctrl_data = {
.pins = mtk_pins_mt8127,
.npins = ARRAY_SIZE(mtk_pins_mt8127),
@@ -272,10 +259,14 @@ static const struct mtk_pinctrl_devdata mt8127_pinctrl_data = {
.n_grp_cls = ARRAY_SIZE(mt8127_drv_grp),
.pin_drv_grp = mt8127_pin_drv,
.n_pin_drv_grps = ARRAY_SIZE(mt8127_pin_drv),
+ .spec_ies = mt8127_ies_set,
+ .n_spec_ies = ARRAY_SIZE(mt8127_ies_set),
.spec_pupd = mt8127_spec_pupd,
.n_spec_pupd = ARRAY_SIZE(mt8127_spec_pupd),
+ .spec_smt = mt8127_smt_set,
+ .n_spec_smt = ARRAY_SIZE(mt8127_smt_set),
.spec_pull_set = mtk_pctrl_spec_pull_set_samereg,
- .spec_ies_smt_set = mt8127_ies_smt_set,
+ .spec_ies_smt_set = mtk_pconf_spec_set_ies_smt_range,
.dir_offset = 0x0000,
.pullen_offset = 0x0100,
.pullsel_offset = 0x0200,
diff --git a/drivers/pinctrl/mediatek/pinctrl-mt8167.c b/drivers/pinctrl/mediatek/pinctrl-mt8167.c
index 118ddcba18fc..825167f5d020 100644
--- a/drivers/pinctrl/mediatek/pinctrl-mt8167.c
+++ b/drivers/pinctrl/mediatek/pinctrl-mt8167.c
@@ -285,18 +285,6 @@ static const struct mtk_pin_ies_smt_set mt8167_smt_set[] = {
MTK_PIN_IES_SMT_SPEC(121, 124, 0xA10, 9),
};
-static int mt8167_ies_smt_set(struct regmap *regmap, unsigned int pin,
- unsigned char align, int value, enum pin_config_param arg)
-{
- if (arg == PIN_CONFIG_INPUT_ENABLE)
- return mtk_pconf_spec_set_ies_smt_range(regmap, mt8167_ies_set,
- ARRAY_SIZE(mt8167_ies_set), pin, align, value);
- else if (arg == PIN_CONFIG_INPUT_SCHMITT_ENABLE)
- return mtk_pconf_spec_set_ies_smt_range(regmap, mt8167_smt_set,
- ARRAY_SIZE(mt8167_smt_set), pin, align, value);
- return -EINVAL;
-}
-
static const struct mtk_pinctrl_devdata mt8167_pinctrl_data = {
.pins = mtk_pins_mt8167,
.npins = ARRAY_SIZE(mtk_pins_mt8167),
@@ -304,10 +292,14 @@ static const struct mtk_pinctrl_devdata mt8167_pinctrl_data = {
.n_grp_cls = ARRAY_SIZE(mt8167_drv_grp),
.pin_drv_grp = mt8167_pin_drv,
.n_pin_drv_grps = ARRAY_SIZE(mt8167_pin_drv),
+ .spec_ies = mt8167_ies_set,
+ .n_spec_ies = ARRAY_SIZE(mt8167_ies_set),
.spec_pupd = mt8167_spec_pupd,
.n_spec_pupd = ARRAY_SIZE(mt8167_spec_pupd),
+ .spec_smt = mt8167_smt_set,
+ .n_spec_smt = ARRAY_SIZE(mt8167_smt_set),
.spec_pull_set = mtk_pctrl_spec_pull_set_samereg,
- .spec_ies_smt_set = mt8167_ies_smt_set,
+ .spec_ies_smt_set = mtk_pconf_spec_set_ies_smt_range,
.dir_offset = 0x0000,
.pullen_offset = 0x0500,
.pullsel_offset = 0x0600,
diff --git a/drivers/pinctrl/mediatek/pinctrl-mt8173.c b/drivers/pinctrl/mediatek/pinctrl-mt8173.c
index b34c9778e131..1d7d11a32e7d 100644
--- a/drivers/pinctrl/mediatek/pinctrl-mt8173.c
+++ b/drivers/pinctrl/mediatek/pinctrl-mt8173.c
@@ -167,18 +167,6 @@ static const struct mtk_pin_ies_smt_set mt8173_ies_set[] = {
MTK_PIN_IES_SMT_SPEC(133, 134, 0x910, 8)
};
-static int mt8173_ies_smt_set(struct regmap *regmap, unsigned int pin,
- unsigned char align, int value, enum pin_config_param arg)
-{
- if (arg == PIN_CONFIG_INPUT_ENABLE)
- return mtk_pconf_spec_set_ies_smt_range(regmap, mt8173_ies_set,
- ARRAY_SIZE(mt8173_ies_set), pin, align, value);
- else if (arg == PIN_CONFIG_INPUT_SCHMITT_ENABLE)
- return mtk_pconf_spec_set_ies_smt_range(regmap, mt8173_smt_set,
- ARRAY_SIZE(mt8173_smt_set), pin, align, value);
- return -EINVAL;
-}
-
static const struct mtk_drv_group_desc mt8173_drv_grp[] = {
/* 0E4E8SR 4/8/12/16 */
MTK_DRV_GRP(4, 16, 1, 2, 4),
@@ -312,10 +300,14 @@ static const struct mtk_pinctrl_devdata mt8173_pinctrl_data = {
.n_grp_cls = ARRAY_SIZE(mt8173_drv_grp),
.pin_drv_grp = mt8173_pin_drv,
.n_pin_drv_grps = ARRAY_SIZE(mt8173_pin_drv),
+ .spec_ies = mt8173_ies_set,
+ .n_spec_ies = ARRAY_SIZE(mt8173_ies_set),
.spec_pupd = mt8173_spec_pupd,
.n_spec_pupd = ARRAY_SIZE(mt8173_spec_pupd),
+ .spec_smt = mt8173_smt_set,
+ .n_spec_smt = ARRAY_SIZE(mt8173_smt_set),
.spec_pull_set = mtk_pctrl_spec_pull_set_samereg,
- .spec_ies_smt_set = mt8173_ies_smt_set,
+ .spec_ies_smt_set = mtk_pconf_spec_set_ies_smt_range,
.dir_offset = 0x0000,
.pullen_offset = 0x0100,
.pullsel_offset = 0x0200,
diff --git a/drivers/pinctrl/mediatek/pinctrl-mt8365.c b/drivers/pinctrl/mediatek/pinctrl-mt8365.c
index dbff7a831235..727c65221aef 100644
--- a/drivers/pinctrl/mediatek/pinctrl-mt8365.c
+++ b/drivers/pinctrl/mediatek/pinctrl-mt8365.c
@@ -416,18 +416,6 @@ static const struct mtk_pin_ies_smt_set mt8365_smt_set[] = {
MTK_PIN_IES_SMT_SPEC(144, 144, 0x480, 22),
};
-static int mt8365_ies_smt_set(struct regmap *regmap, unsigned int pin,
- unsigned char align, int value, enum pin_config_param arg)
-{
- if (arg == PIN_CONFIG_INPUT_ENABLE)
- return mtk_pconf_spec_set_ies_smt_range(regmap, mt8365_ies_set,
- ARRAY_SIZE(mt8365_ies_set), pin, align, value);
- else if (arg == PIN_CONFIG_INPUT_SCHMITT_ENABLE)
- return mtk_pconf_spec_set_ies_smt_range(regmap, mt8365_smt_set,
- ARRAY_SIZE(mt8365_smt_set), pin, align, value);
- return -EINVAL;
-}
-
static const struct mtk_pinctrl_devdata mt8365_pinctrl_data = {
.pins = mtk_pins_mt8365,
.npins = ARRAY_SIZE(mtk_pins_mt8365),
@@ -435,10 +423,14 @@ static const struct mtk_pinctrl_devdata mt8365_pinctrl_data = {
.n_grp_cls = ARRAY_SIZE(mt8365_drv_grp),
.pin_drv_grp = mt8365_pin_drv,
.n_pin_drv_grps = ARRAY_SIZE(mt8365_pin_drv),
+ .spec_ies = mt8365_ies_set,
+ .n_spec_ies = ARRAY_SIZE(mt8365_ies_set),
+ .spec_smt = mt8365_smt_set,
+ .n_spec_smt = ARRAY_SIZE(mt8365_smt_set),
.spec_pupd = mt8365_spec_pupd,
.n_spec_pupd = ARRAY_SIZE(mt8365_spec_pupd),
.spec_pull_set = mtk_pctrl_spec_pull_set_samereg,
- .spec_ies_smt_set = mt8365_ies_smt_set,
+ .spec_ies_smt_set = mtk_pconf_spec_set_ies_smt_range,
.dir_offset = 0x0140,
.dout_offset = 0x00A0,
.din_offset = 0x0000,
diff --git a/drivers/pinctrl/mediatek/pinctrl-mt8516.c b/drivers/pinctrl/mediatek/pinctrl-mt8516.c
index 8ad2006857c0..939a1932b8dc 100644
--- a/drivers/pinctrl/mediatek/pinctrl-mt8516.c
+++ b/drivers/pinctrl/mediatek/pinctrl-mt8516.c
@@ -285,18 +285,6 @@ static const struct mtk_pin_ies_smt_set mt8516_smt_set[] = {
MTK_PIN_IES_SMT_SPEC(121, 124, 0xA10, 9),
};
-static int mt8516_ies_smt_set(struct regmap *regmap, unsigned int pin,
- unsigned char align, int value, enum pin_config_param arg)
-{
- if (arg == PIN_CONFIG_INPUT_ENABLE)
- return mtk_pconf_spec_set_ies_smt_range(regmap, mt8516_ies_set,
- ARRAY_SIZE(mt8516_ies_set), pin, align, value);
- else if (arg == PIN_CONFIG_INPUT_SCHMITT_ENABLE)
- return mtk_pconf_spec_set_ies_smt_range(regmap, mt8516_smt_set,
- ARRAY_SIZE(mt8516_smt_set), pin, align, value);
- return -EINVAL;
-}
-
static const struct mtk_pinctrl_devdata mt8516_pinctrl_data = {
.pins = mtk_pins_mt8516,
.npins = ARRAY_SIZE(mtk_pins_mt8516),
@@ -304,10 +292,14 @@ static const struct mtk_pinctrl_devdata mt8516_pinctrl_data = {
.n_grp_cls = ARRAY_SIZE(mt8516_drv_grp),
.pin_drv_grp = mt8516_pin_drv,
.n_pin_drv_grps = ARRAY_SIZE(mt8516_pin_drv),
+ .spec_ies = mt8516_ies_set,
+ .n_spec_ies = ARRAY_SIZE(mt8516_ies_set),
.spec_pupd = mt8516_spec_pupd,
.n_spec_pupd = ARRAY_SIZE(mt8516_spec_pupd),
+ .spec_smt = mt8516_smt_set,
+ .n_spec_smt = ARRAY_SIZE(mt8516_smt_set),
.spec_pull_set = mtk_pctrl_spec_pull_set_samereg,
- .spec_ies_smt_set = mt8516_ies_smt_set,
+ .spec_ies_smt_set = mtk_pconf_spec_set_ies_smt_range,
.dir_offset = 0x0000,
.pullen_offset = 0x0500,
.pullsel_offset = 0x0600,
diff --git a/drivers/pinctrl/mediatek/pinctrl-mtk-common.c b/drivers/pinctrl/mediatek/pinctrl-mtk-common.c
index 5e1d17512a0d..a515fdc43b85 100644
--- a/drivers/pinctrl/mediatek/pinctrl-mtk-common.c
+++ b/drivers/pinctrl/mediatek/pinctrl-mtk-common.c
@@ -131,7 +131,7 @@ static int mtk_pconf_set_ies_smt(struct mtk_pinctrl *pctl, unsigned pin,
*/
if (pctl->devdata->spec_ies_smt_set) {
return pctl->devdata->spec_ies_smt_set(mtk_get_regmap(pctl, pin),
- pin, pctl->devdata->port_align, value, arg);
+ pctl->devdata, pin, value, arg);
}
if (arg == PIN_CONFIG_INPUT_ENABLE)
@@ -151,10 +151,27 @@ static int mtk_pconf_set_ies_smt(struct mtk_pinctrl *pctl, unsigned pin,
}
int mtk_pconf_spec_set_ies_smt_range(struct regmap *regmap,
- const struct mtk_pin_ies_smt_set *ies_smt_infos, unsigned int info_num,
- unsigned int pin, unsigned char align, int value)
+ const struct mtk_pinctrl_devdata *devdata,
+ unsigned int pin, int value, enum pin_config_param arg)
{
- unsigned int i, reg_addr, bit;
+ const struct mtk_pin_ies_smt_set *ies_smt_infos = NULL;
+ unsigned int i, info_num, reg_addr, bit;
+
+ switch (arg) {
+ case PIN_CONFIG_INPUT_ENABLE:
+ ies_smt_infos = devdata->spec_ies;
+ info_num = devdata->n_spec_ies;
+ break;
+ case PIN_CONFIG_INPUT_SCHMITT_ENABLE:
+ ies_smt_infos = devdata->spec_smt;
+ info_num = devdata->n_spec_smt;
+ break;
+ default:
+ break;
+ };
+
+ if (!ies_smt_infos)
+ return -EINVAL;
for (i = 0; i < info_num; i++) {
if (pin >= ies_smt_infos[i].start &&
@@ -167,9 +184,9 @@ int mtk_pconf_spec_set_ies_smt_range(struct regmap *regmap,
return -EINVAL;
if (value)
- reg_addr = ies_smt_infos[i].offset + align;
+ reg_addr = ies_smt_infos[i].offset + devdata->port_align;
else
- reg_addr = ies_smt_infos[i].offset + (align << 1);
+ reg_addr = ies_smt_infos[i].offset + (devdata->port_align << 1);
bit = BIT(ies_smt_infos[i].bit);
regmap_write(regmap, reg_addr, bit);
diff --git a/drivers/pinctrl/mediatek/pinctrl-mtk-common.h b/drivers/pinctrl/mediatek/pinctrl-mtk-common.h
index f7968a6ac563..6fe8564334c9 100644
--- a/drivers/pinctrl/mediatek/pinctrl-mtk-common.h
+++ b/drivers/pinctrl/mediatek/pinctrl-mtk-common.h
@@ -193,8 +193,12 @@ struct mtk_eint_offsets {
*
* @grp_desc: The driving group info.
* @pin_drv_grp: The driving group for all pins.
+ * @spec_ies: Special pin setting for input enable
+ * @n_spec_ies: Number of entries in spec_ies
* @spec_pupd: Special pull up/down setting
* @n_spec_pupd: Number of entries in spec_pupd
+ * @spec_smt: Special pin setting for schmitt
+ * @n_spec_smt: Number of entries in spec_smt
* @spec_pull_set: Each SoC may have special pins for pull up/down setting,
* these pins' pull setting are very different, they have separate pull
* up/down bit, R0 and R1 resistor bit, so they need special pull setting.
@@ -233,13 +237,18 @@ struct mtk_pinctrl_devdata {
unsigned int n_grp_cls;
const struct mtk_pin_drv_grp *pin_drv_grp;
unsigned int n_pin_drv_grps;
+ const struct mtk_pin_ies_smt_set *spec_ies;
+ unsigned int n_spec_ies;
const struct mtk_pin_spec_pupd_set_samereg *spec_pupd;
unsigned int n_spec_pupd;
+ const struct mtk_pin_ies_smt_set *spec_smt;
+ unsigned int n_spec_smt;
int (*spec_pull_set)(struct regmap *regmap,
const struct mtk_pinctrl_devdata *devdata,
unsigned int pin, bool isup, unsigned int r1r0);
- int (*spec_ies_smt_set)(struct regmap *reg, unsigned int pin,
- unsigned char align, int value, enum pin_config_param arg);
+ int (*spec_ies_smt_set)(struct regmap *reg,
+ const struct mtk_pinctrl_devdata *devdata,
+ unsigned int pin, int value, enum pin_config_param arg);
void (*spec_pinmux_set)(struct regmap *reg, unsigned int pin,
unsigned int mode);
void (*spec_dir_set)(unsigned int *reg_addr, unsigned int pin);
@@ -289,8 +298,8 @@ int mtk_pctrl_spec_pull_set_samereg(struct regmap *regmap,
unsigned int pin, bool isup, unsigned int r1r0);
int mtk_pconf_spec_set_ies_smt_range(struct regmap *regmap,
- const struct mtk_pin_ies_smt_set *ies_smt_infos, unsigned int info_num,
- unsigned int pin, unsigned char align, int value);
+ const struct mtk_pinctrl_devdata *devdata,
+ unsigned int pin, int value, enum pin_config_param arg);
extern const struct dev_pm_ops mtk_eint_pm_ops;
--
2.33.1
^ permalink raw reply related [flat|nested] 16+ messages in thread
* Re: [PATCH 5/5] pinctrl: mediatek: common-v1: Commonize spec_ies_smt_set callback
2022-02-10 14:19 ` [PATCH 5/5] pinctrl: mediatek: common-v1: Commonize spec_ies_smt_set callback AngeloGioacchino Del Regno
@ 2022-02-21 9:58 ` Chen-Yu Tsai
2022-02-21 13:40 ` AngeloGioacchino Del Regno
0 siblings, 1 reply; 16+ messages in thread
From: Chen-Yu Tsai @ 2022-02-21 9:58 UTC (permalink / raw)
To: AngeloGioacchino Del Regno
Cc: sean.wang, linus.walleij, matthias.bgg, linux-mediatek,
linux-gpio, linux-kernel, linux-arm-kernel, kernel
On Thu, Feb 10, 2022 at 10:21 PM AngeloGioacchino Del Regno
<angelogioacchino.delregno@collabora.com> wrote:
>
> All of the MediaTek pinctrl drivers registering with pinctrl-mtk-common
> that are offering a .spec_ies_smt_set() callback are declaring their
> own function which is doing exactly the same on all drivers: calling
> mtk_pconf_spec_set_ies_smt_range() with their struct and a simple check.
>
> Commonize this callback by adding the ies and smt structure pointers
> to struct mtk_pinctrl_devdata and changing the callback signature to
> take it.
>
> Removing the callback and checking for the existence of the spec_smt
> and/or spec_ies data would allow us to staticize the function
> mtk_pconf_spec_set_ies_smt_range(), but this solution was avoided as
> to keep flexibility, as some SoCs may need to perform a very different
> operation compared to what this commonized function is doing.
>
> Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Signed-off-by: Chen-Yu Tsai <wenst@chromium.org>
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 5/5] pinctrl: mediatek: common-v1: Commonize spec_ies_smt_set callback
2022-02-21 9:58 ` Chen-Yu Tsai
@ 2022-02-21 13:40 ` AngeloGioacchino Del Regno
2022-02-22 2:54 ` Chen-Yu Tsai
0 siblings, 1 reply; 16+ messages in thread
From: AngeloGioacchino Del Regno @ 2022-02-21 13:40 UTC (permalink / raw)
To: Chen-Yu Tsai
Cc: sean.wang, linus.walleij, matthias.bgg, linux-mediatek,
linux-gpio, linux-kernel, linux-arm-kernel, kernel
Il 21/02/22 10:58, Chen-Yu Tsai ha scritto:
> On Thu, Feb 10, 2022 at 10:21 PM AngeloGioacchino Del Regno
> <angelogioacchino.delregno@collabora.com> wrote:
>>
>> All of the MediaTek pinctrl drivers registering with pinctrl-mtk-common
>> that are offering a .spec_ies_smt_set() callback are declaring their
>> own function which is doing exactly the same on all drivers: calling
>> mtk_pconf_spec_set_ies_smt_range() with their struct and a simple check.
>>
>> Commonize this callback by adding the ies and smt structure pointers
>> to struct mtk_pinctrl_devdata and changing the callback signature to
>> take it.
>>
>> Removing the callback and checking for the existence of the spec_smt
>> and/or spec_ies data would allow us to staticize the function
>> mtk_pconf_spec_set_ies_smt_range(), but this solution was avoided as
>> to keep flexibility, as some SoCs may need to perform a very different
>> operation compared to what this commonized function is doing.
>>
>> Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
>
> Signed-off-by: Chen-Yu Tsai <wenst@chromium.org>
Hi Chen-Yu,
did you mean Reviewed-by? :-)
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 5/5] pinctrl: mediatek: common-v1: Commonize spec_ies_smt_set callback
2022-02-21 13:40 ` AngeloGioacchino Del Regno
@ 2022-02-22 2:54 ` Chen-Yu Tsai
0 siblings, 0 replies; 16+ messages in thread
From: Chen-Yu Tsai @ 2022-02-22 2:54 UTC (permalink / raw)
To: AngeloGioacchino Del Regno
Cc: sean.wang, linus.walleij, matthias.bgg, linux-mediatek,
linux-gpio, linux-kernel, linux-arm-kernel, kernel
On Mon, Feb 21, 2022 at 9:40 PM AngeloGioacchino Del Regno
<angelogioacchino.delregno@collabora.com> wrote:
>
> Il 21/02/22 10:58, Chen-Yu Tsai ha scritto:
> > On Thu, Feb 10, 2022 at 10:21 PM AngeloGioacchino Del Regno
> > <angelogioacchino.delregno@collabora.com> wrote:
> >>
> >> All of the MediaTek pinctrl drivers registering with pinctrl-mtk-common
> >> that are offering a .spec_ies_smt_set() callback are declaring their
> >> own function which is doing exactly the same on all drivers: calling
> >> mtk_pconf_spec_set_ies_smt_range() with their struct and a simple check.
> >>
> >> Commonize this callback by adding the ies and smt structure pointers
> >> to struct mtk_pinctrl_devdata and changing the callback signature to
> >> take it.
> >>
> >> Removing the callback and checking for the existence of the spec_smt
> >> and/or spec_ies data would allow us to staticize the function
> >> mtk_pconf_spec_set_ies_smt_range(), but this solution was avoided as
> >> to keep flexibility, as some SoCs may need to perform a very different
> >> operation compared to what this commonized function is doing.
> >>
> >> Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
> >
> > Signed-off-by: Chen-Yu Tsai <wenst@chromium.org>
>
> Hi Chen-Yu,
>
> did you mean Reviewed-by? :-)
(facepalm) Yes.
Reviewed-by: Chen-Yu Tsai <wenst@chromium.org>
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 0/5] MediaTek pinctrl drivers cleanups
2022-02-10 14:19 [PATCH 0/5] MediaTek pinctrl drivers cleanups AngeloGioacchino Del Regno
` (4 preceding siblings ...)
2022-02-10 14:19 ` [PATCH 5/5] pinctrl: mediatek: common-v1: Commonize spec_ies_smt_set callback AngeloGioacchino Del Regno
@ 2022-02-19 1:18 ` Linus Walleij
5 siblings, 0 replies; 16+ messages in thread
From: Linus Walleij @ 2022-02-19 1:18 UTC (permalink / raw)
To: AngeloGioacchino Del Regno, Matthias Brugger, Guodong Liu
Cc: sean.wang, linux-mediatek, linux-gpio, linux-kernel,
linux-arm-kernel, kernel
On Thu, Feb 10, 2022 at 3:19 PM AngeloGioacchino Del Regno
<angelogioacchino.delregno@collabora.com> wrote:
> Hello!
> This series performs some cleanups to the MediaTek pinctrl drivers
> by commonizing some functions (reducing code duplication) hence also
> simplifying the probe mechanism by removing unnecessary per-driver
> probe functions.
This looks fine from my Mediatek-untrained eye but
I need some help to review this, Matthias? Guodong?
Yours,
Linus Walleij
^ permalink raw reply [flat|nested] 16+ messages in thread