Patch "pinctrl: mediatek: Fix multiple registration issue." has been added to the 4.2-stable tree
Subsystems (4)
This is a note to let you know that I've just added the patch titled
pinctrl: mediatek: Fix multiple registration issue.
to the 4.2-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
pinctrl-mediatek-fix-multiple-registration-issue.patch
and it can be found in the queue-4.2 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
d48c2c02645392483f2b88b050d21ce1db6997b3Mon Sep 17 00:00:00 2001
From: Hongzhou Yang <[email protected]>
Date: Tue, 25 Aug 2015 17:32:45 -0700
Subject: pinctrl: mediatek: Fix multiple registration issue.
From: Hongzhou Yang <[email protected]>
commit d48c2c02645392483f2b88b050d21ce1db6997b3 upstream.
Since our common driver need support main chip and PMU at the same time, that means it will register two pinctrl device, and the pinctrl_desc structure should be used two times.
But pinctrl_desc use global static definition, then the latest registered pinctrl device will overwrite the old one's, all members in pinctrl_desc will set to the new one's, such as name, pins and pins numbers, etc. This is a bug.
Move pinctrl_desc into mtk_pinctrl, assign new value for each pinctrl device to fix it.
--- drivers/pinctrl/mediatek/pinctrl-mtk-common.c | 21 ++++++++++----------- drivers/pinctrl/mediatek/pinctrl-mtk-common.h | 1 + 2 files changed, 11 insertions(+), 11 deletions(-)
drivers/pinctrl/mediatek/pinctrl-mtk-common.c +10 -11
@@ -1202,12 +1202,6 @@ static int mtk_pctrl_build_state(structreturn 0 ; } -static struct pinctrl_desc mtk_pctrl_desc = { - .confops = &mtk_pconf_ops, - .pctlops = &mtk_pctrl_ops, - .pmxops = &mtk_pmx_ops, -}; -int mtk_pctrl_init (struct platform_device *pdev,const struct mtk_pinctrl_devdata *data,struct regmap *regmap)
@@ -1265,12 +1259,17 @@ int mtk_pctrl_init(struct platform_devicfor (i =0 ; i < pctl->devdata->npins; i++) pins[i] = pctl->devdata->pins[i].pin; - mtk_pctrl_desc.name =dev_name (&pdev->dev); - mtk_pctrl_desc.owner =THIS_MODULE ; - mtk_pctrl_desc.pins = pins; - mtk_pctrl_desc.npins = pctl->devdata->npins; + + pctl->pctl_desc.name =dev_name (&pdev->dev); + pctl->pctl_desc.owner =THIS_MODULE ; + pctl->pctl_desc.pins = pins; + pctl->pctl_desc.npins = pctl->devdata->npins; + pctl->pctl_desc.confops = &mtk_pconf_ops; + pctl->pctl_desc.pctlops = &mtk_pctrl_ops; + pctl->pctl_desc.pmxops = &mtk_pmx_ops; pctl->dev = &pdev->dev; - pctl->pctl_dev =pinctrl_register (&mtk_pctrl_desc, &pdev->dev, pctl); + + pctl->pctl_dev =pinctrl_register (&pctl->pctl_desc, &pdev->dev, pctl);if (IS_ERR (pctl->pctl_dev)) {dev_err (&pdev->dev,"couldn't register pinctrl driver\n" );return PTR_ERR (pctl->pctl_dev);
drivers/pinctrl/mediatek/pinctrl-mtk-common.h +1 -0
@@ -256,6 +256,7 @@ struct mtk_pinctrl_devdata {struct mtk_pinctrl {struct regmap *regmap1;struct regmap *regmap2; +struct pinctrl_desc pctl_desc;struct device *dev;struct gpio_chip *chip;struct mtk_pinctrl_group *groups;
Patches currently in stable-queue which might be from [email protected] are
queue-4.2/pinctrl-mediatek-fix-multiple-registration-issue.patch