Skip to content

Commit

Permalink
pinctrl: qcom: Add support for reset for apq8064
Browse files Browse the repository at this point in the history
This patch adds support for reset functions to reboot the boards
with soc apq8064.

Cc: Linus Walleij <[email protected]>
Cc: "Ivan T. Ivanov" <[email protected]>
Cc: Stephen Boyd <[email protected]>
Cc: Andy Gross <[email protected]>
Acked-by: Bjorn Andersson <[email protected]>
Signed-off-by: Pramod Gurav <[email protected]>
Signed-off-by: Linus Walleij <[email protected]>
  • Loading branch information
Pramod Gurav authored and linusw committed Sep 2, 2014
1 parent 79c62cd commit 3274558
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 1 deletion.
7 changes: 6 additions & 1 deletion drivers/pinctrl/qcom/pinctrl-apq8064.c
Original file line number Diff line number Diff line change
Expand Up @@ -324,6 +324,7 @@ enum apq8064_functions {
APQ_MUX_tsif1,
APQ_MUX_tsif2,
APQ_MUX_usb2_hsic,
APQ_MUX_ps_hold,
APQ_MUX_NA,
};

Expand Down Expand Up @@ -351,6 +352,9 @@ static const char * const gpio_groups[] = {
"gpio78", "gpio79", "gpio80", "gpio81", "gpio82", "gpio83", "gpio84",
"gpio85", "gpio86", "gpio87", "gpio88", "gpio89"
};
static const char * const ps_hold_groups[] = {
"gpio78"
};
static const char * const gsbi1_groups[] = {
"gpio18", "gpio19", "gpio20", "gpio21"
};
Expand Down Expand Up @@ -477,6 +481,7 @@ static const struct msm_function apq8064_functions[] = {
FUNCTION(tsif1),
FUNCTION(tsif2),
FUNCTION(usb2_hsic),
FUNCTION(ps_hold),
};

static const struct msm_pingroup apq8064_groups[] = {
Expand Down Expand Up @@ -558,7 +563,7 @@ static const struct msm_pingroup apq8064_groups[] = {
PINGROUP(75, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
PINGROUP(76, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
PINGROUP(77, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
PINGROUP(78, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
PINGROUP(78, ps_hold, NA, NA, NA, NA, NA, NA, NA, NA, NA),
PINGROUP(79, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
PINGROUP(80, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
PINGROUP(81, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
Expand Down
30 changes: 30 additions & 0 deletions drivers/pinctrl/qcom/pinctrl-msm.c
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
* GNU General Public License for more details.
*/

#include <linux/delay.h>
#include <linux/err.h>
#include <linux/io.h>
#include <linux/module.h>
Expand All @@ -27,12 +28,15 @@
#include <linux/interrupt.h>
#include <linux/spinlock.h>

#include <asm/system_misc.h>

#include "../core.h"
#include "../pinconf.h"
#include "pinctrl-msm.h"
#include "../pinctrl-utils.h"

#define MAX_NR_GPIO 300
#define PS_HOLD_OFFSET 0x820

/**
* struct msm_pinctrl - state for a pinctrl-msm device
Expand Down Expand Up @@ -850,6 +854,30 @@ static int msm_gpio_init(struct msm_pinctrl *pctrl)
return 0;
}

#ifdef CONFIG_ARM
static void __iomem *msm_ps_hold;

static void msm_reset(enum reboot_mode reboot_mode, const char *cmd)
{
writel(0, msm_ps_hold);
mdelay(10000);
}

static void msm_pinctrl_setup_pm_reset(struct msm_pinctrl *pctrl)
{
int i = 0;
const struct msm_function *func = pctrl->soc->functions;

for (; i <= pctrl->soc->nfunctions; i++)
if (!strcmp(func[i].name, "ps_hold")) {
msm_ps_hold = pctrl->regs + PS_HOLD_OFFSET;
arm_pm_restart = msm_reset;
}
}
#else
static void msm_pinctrl_setup_pm_reset(const struct msm_pinctrl *pctrl) {}
#endif

int msm_pinctrl_probe(struct platform_device *pdev,
const struct msm_pinctrl_soc_data *soc_data)
{
Expand All @@ -873,6 +901,8 @@ int msm_pinctrl_probe(struct platform_device *pdev,
if (IS_ERR(pctrl->regs))
return PTR_ERR(pctrl->regs);

msm_pinctrl_setup_pm_reset(pctrl);

pctrl->irq = platform_get_irq(pdev, 0);
if (pctrl->irq < 0) {
dev_err(&pdev->dev, "No interrupt defined for msmgpio\n");
Expand Down

0 comments on commit 3274558

Please sign in to comment.