aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2015-05-07 11:27:38 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2015-05-07 11:27:38 -0400
commitfbb7b92f16710a3848db25d0a4a2bb6fb7199061 (patch)
tree4f150a9643eda5fee248819981777d4b07de4735
parent7bbcd1b86dcec982d2d3abec8db5da208b075f52 (diff)
parentc5272a28566b00cce79127ad382406e0a8650690 (diff)
Merge tag 'pinctrl-v4.1-3' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-pinctrl
Pull pin control fixes from Linus Walleij: "Here is a smallish set of pin control fixes for the v4.1 cycle, collected the last two weeks: - fix a real nasty legacy bug that has screwed up the protection of adding pinctrl maps dynamically. Normally this didn't happen so much but Dough Anderson ran into it and fixed it, kudos! - minor driver fixes for Qualcomm spmi, mediatek and Marvell drivers" * tag 'pinctrl-v4.1-3' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-pinctrl: pinctrl: Don't just pretend to protect pinctrl_maps, do it for real pinctrl: mediatek: mtk-common: initialize unmask pinctrl: qcom-spmi-mpp: Fix input value report pinctrl: qcom-spmi: Fix pin direction configuration pinctrl: mvebu: Fix mapping of pin 63 (gpo -> gpio)
-rw-r--r--drivers/pinctrl/core.c10
-rw-r--r--drivers/pinctrl/core.h2
-rw-r--r--drivers/pinctrl/devicetree.c2
-rw-r--r--drivers/pinctrl/mediatek/pinctrl-mtk-common.c2
-rw-r--r--drivers/pinctrl/mvebu/pinctrl-armada-370.c2
-rw-r--r--drivers/pinctrl/qcom/pinctrl-spmi-gpio.c1
-rw-r--r--drivers/pinctrl/qcom/pinctrl-spmi-mpp.c10
7 files changed, 16 insertions, 13 deletions
diff --git a/drivers/pinctrl/core.c b/drivers/pinctrl/core.c
index 89dca77ca038..18ee2089df4a 100644
--- a/drivers/pinctrl/core.c
+++ b/drivers/pinctrl/core.c
@@ -1110,7 +1110,7 @@ void devm_pinctrl_put(struct pinctrl *p)
1110EXPORT_SYMBOL_GPL(devm_pinctrl_put); 1110EXPORT_SYMBOL_GPL(devm_pinctrl_put);
1111 1111
1112int pinctrl_register_map(struct pinctrl_map const *maps, unsigned num_maps, 1112int pinctrl_register_map(struct pinctrl_map const *maps, unsigned num_maps,
1113 bool dup, bool locked) 1113 bool dup)
1114{ 1114{
1115 int i, ret; 1115 int i, ret;
1116 struct pinctrl_maps *maps_node; 1116 struct pinctrl_maps *maps_node;
@@ -1178,11 +1178,9 @@ int pinctrl_register_map(struct pinctrl_map const *maps, unsigned num_maps,
1178 maps_node->maps = maps; 1178 maps_node->maps = maps;
1179 } 1179 }
1180 1180
1181 if (!locked) 1181 mutex_lock(&pinctrl_maps_mutex);
1182 mutex_lock(&pinctrl_maps_mutex);
1183 list_add_tail(&maps_node->node, &pinctrl_maps); 1182 list_add_tail(&maps_node->node, &pinctrl_maps);
1184 if (!locked) 1183 mutex_unlock(&pinctrl_maps_mutex);
1185 mutex_unlock(&pinctrl_maps_mutex);
1186 1184
1187 return 0; 1185 return 0;
1188} 1186}
@@ -1197,7 +1195,7 @@ int pinctrl_register_map(struct pinctrl_map const *maps, unsigned num_maps,
1197int pinctrl_register_mappings(struct pinctrl_map const *maps, 1195int pinctrl_register_mappings(struct pinctrl_map const *maps,
1198 unsigned num_maps) 1196 unsigned num_maps)
1199{ 1197{
1200 return pinctrl_register_map(maps, num_maps, true, false); 1198 return pinctrl_register_map(maps, num_maps, true);
1201} 1199}
1202 1200
1203void pinctrl_unregister_map(struct pinctrl_map const *map) 1201void pinctrl_unregister_map(struct pinctrl_map const *map)
diff --git a/drivers/pinctrl/core.h b/drivers/pinctrl/core.h
index 75476b3d87da..b24ea846c867 100644
--- a/drivers/pinctrl/core.h
+++ b/drivers/pinctrl/core.h
@@ -183,7 +183,7 @@ static inline struct pin_desc *pin_desc_get(struct pinctrl_dev *pctldev,
183} 183}
184 184
185int pinctrl_register_map(struct pinctrl_map const *maps, unsigned num_maps, 185int pinctrl_register_map(struct pinctrl_map const *maps, unsigned num_maps,
186 bool dup, bool locked); 186 bool dup);
187void pinctrl_unregister_map(struct pinctrl_map const *map); 187void pinctrl_unregister_map(struct pinctrl_map const *map);
188 188
189extern int pinctrl_force_sleep(struct pinctrl_dev *pctldev); 189extern int pinctrl_force_sleep(struct pinctrl_dev *pctldev);
diff --git a/drivers/pinctrl/devicetree.c b/drivers/pinctrl/devicetree.c
index eda13de2e7c0..0bbf7d71b281 100644
--- a/drivers/pinctrl/devicetree.c
+++ b/drivers/pinctrl/devicetree.c
@@ -92,7 +92,7 @@ static int dt_remember_or_free_map(struct pinctrl *p, const char *statename,
92 dt_map->num_maps = num_maps; 92 dt_map->num_maps = num_maps;
93 list_add_tail(&dt_map->node, &p->dt_maps); 93 list_add_tail(&dt_map->node, &p->dt_maps);
94 94
95 return pinctrl_register_map(map, num_maps, false, true); 95 return pinctrl_register_map(map, num_maps, false);
96} 96}
97 97
98struct pinctrl_dev *of_pinctrl_get(struct device_node *np) 98struct pinctrl_dev *of_pinctrl_get(struct device_node *np)
diff --git a/drivers/pinctrl/mediatek/pinctrl-mtk-common.c b/drivers/pinctrl/mediatek/pinctrl-mtk-common.c
index 493294c0ebe6..474812e2b0cb 100644
--- a/drivers/pinctrl/mediatek/pinctrl-mtk-common.c
+++ b/drivers/pinctrl/mediatek/pinctrl-mtk-common.c
@@ -881,6 +881,8 @@ static int mtk_gpio_set_debounce(struct gpio_chip *chip, unsigned offset,
881 if (!mtk_eint_get_mask(pctl, eint_num)) { 881 if (!mtk_eint_get_mask(pctl, eint_num)) {
882 mtk_eint_mask(d); 882 mtk_eint_mask(d);
883 unmask = 1; 883 unmask = 1;
884 } else {
885 unmask = 0;
884 } 886 }
885 887
886 clr_bit = 0xff << eint_offset; 888 clr_bit = 0xff << eint_offset;
diff --git a/drivers/pinctrl/mvebu/pinctrl-armada-370.c b/drivers/pinctrl/mvebu/pinctrl-armada-370.c
index 42f930f70de3..03aa58c4cb85 100644
--- a/drivers/pinctrl/mvebu/pinctrl-armada-370.c
+++ b/drivers/pinctrl/mvebu/pinctrl-armada-370.c
@@ -364,7 +364,7 @@ static struct mvebu_mpp_mode mv88f6710_mpp_modes[] = {
364 MPP_FUNCTION(0x5, "audio", "mclk"), 364 MPP_FUNCTION(0x5, "audio", "mclk"),
365 MPP_FUNCTION(0x6, "uart0", "cts")), 365 MPP_FUNCTION(0x6, "uart0", "cts")),
366 MPP_MODE(63, 366 MPP_MODE(63,
367 MPP_FUNCTION(0x0, "gpo", NULL), 367 MPP_FUNCTION(0x0, "gpio", NULL),
368 MPP_FUNCTION(0x1, "spi0", "sck"), 368 MPP_FUNCTION(0x1, "spi0", "sck"),
369 MPP_FUNCTION(0x2, "tclk", NULL)), 369 MPP_FUNCTION(0x2, "tclk", NULL)),
370 MPP_MODE(64, 370 MPP_MODE(64,
diff --git a/drivers/pinctrl/qcom/pinctrl-spmi-gpio.c b/drivers/pinctrl/qcom/pinctrl-spmi-gpio.c
index b2d22218a258..de684ca93b5a 100644
--- a/drivers/pinctrl/qcom/pinctrl-spmi-gpio.c
+++ b/drivers/pinctrl/qcom/pinctrl-spmi-gpio.c
@@ -260,6 +260,7 @@ static int pmic_gpio_set_mux(struct pinctrl_dev *pctldev, unsigned function,
260 val = 1; 260 val = 1;
261 } 261 }
262 262
263 val = val << PMIC_GPIO_REG_MODE_DIR_SHIFT;
263 val |= pad->function << PMIC_GPIO_REG_MODE_FUNCTION_SHIFT; 264 val |= pad->function << PMIC_GPIO_REG_MODE_FUNCTION_SHIFT;
264 val |= pad->out_value & PMIC_GPIO_REG_MODE_VALUE_SHIFT; 265 val |= pad->out_value & PMIC_GPIO_REG_MODE_VALUE_SHIFT;
265 266
diff --git a/drivers/pinctrl/qcom/pinctrl-spmi-mpp.c b/drivers/pinctrl/qcom/pinctrl-spmi-mpp.c
index 8f36c5f91949..211b942ad6d5 100644
--- a/drivers/pinctrl/qcom/pinctrl-spmi-mpp.c
+++ b/drivers/pinctrl/qcom/pinctrl-spmi-mpp.c
@@ -370,6 +370,7 @@ static int pmic_mpp_set_mux(struct pinctrl_dev *pctldev, unsigned function,
370 } 370 }
371 } 371 }
372 372
373 val = val << PMIC_MPP_REG_MODE_DIR_SHIFT;
373 val |= pad->function << PMIC_MPP_REG_MODE_FUNCTION_SHIFT; 374 val |= pad->function << PMIC_MPP_REG_MODE_FUNCTION_SHIFT;
374 val |= pad->out_value & PMIC_MPP_REG_MODE_VALUE_MASK; 375 val |= pad->out_value & PMIC_MPP_REG_MODE_VALUE_MASK;
375 376
@@ -576,10 +577,11 @@ static void pmic_mpp_config_dbg_show(struct pinctrl_dev *pctldev,
576 577
577 if (pad->input_enabled) { 578 if (pad->input_enabled) {
578 ret = pmic_mpp_read(state, pad, PMIC_MPP_REG_RT_STS); 579 ret = pmic_mpp_read(state, pad, PMIC_MPP_REG_RT_STS);
579 if (!ret) { 580 if (ret < 0)
580 ret &= PMIC_MPP_REG_RT_STS_VAL_MASK; 581 return;
581 pad->out_value = ret; 582
582 } 583 ret &= PMIC_MPP_REG_RT_STS_VAL_MASK;
584 pad->out_value = ret;
583 } 585 }
584 586
585 seq_printf(s, " %-4s", pad->output_enabled ? "out" : "in"); 587 seq_printf(s, " %-4s", pad->output_enabled ? "out" : "in");