aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpio/gpio-ich.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2013-05-06 18:40:55 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2013-05-06 18:40:55 -0400
commit30c67e93c526639aaac90fa873800104b7c16d16 (patch)
tree6d8d0fd248d4e60bdc175dacbd196fc44f23ce11 /drivers/gpio/gpio-ich.c
parentf87bb9ee62700fa11713c630ac5671f253233b94 (diff)
parent08ffb2229fafc2c3a696b325a74bf4198d6b91d7 (diff)
Merge tag 'gpio-for-linus' of git://git.secretlab.ca/git/linux
Pull GPIO changes from Grant Likely: "The usual selection of bug fixes and driver updates for GPIO. Nothing really stands out except the addition of the GRGPIO driver and some enhacements to ACPI support" I'm pulling this despite the earlier mess. Let's hope it compiles these days. * tag 'gpio-for-linus' of git://git.secretlab.ca/git/linux: (46 commits) gpio: grgpio: Add irq support gpio: grgpio: Add device driver for GRGPIO cores gpiolib-acpi: introduce acpi_get_gpio_by_index() helper GPIO: gpio-generic: remove kfree() from bgpio_remove call gpio / ACPI: Handle ACPI events in accordance with the spec gpio: lpc32xx: Fix off-by-one valid range checking for bank gpio: mcp23s08: convert driver to DT gpio/omap: force restore if context loss is not detectable gpio/omap: optimise interrupt service routine gpio/omap: remove extra context restores in *_runtime_resume() gpio/omap: free irq domain in probe() failure paths gpio: gpio-generic: Add 16 and 32 bit big endian byte order support gpio: samsung: Add terminating entry for exynos_pinctrl_ids gpio: mvebu: add dbg_show function MAX7301 GPIO: Do not force SPI speed when using OF Platform gpio: gpio-tps65910.c: fix checkpatch error gpio: gpio-timberdale.c: fix checkpatch error gpio: gpio-tc3589x.c: fix checkpatch errors gpio: gpio-stp-xway.c: fix checkpatch error gpio: gpio-sch.c: fix checkpatch error ...
Diffstat (limited to 'drivers/gpio/gpio-ich.c')
-rw-r--r--drivers/gpio/gpio-ich.c17
1 files changed, 4 insertions, 13 deletions
diff --git a/drivers/gpio/gpio-ich.c b/drivers/gpio/gpio-ich.c
index de3c317bd3e2..e16d932fd444 100644
--- a/drivers/gpio/gpio-ich.c
+++ b/drivers/gpio/gpio-ich.c
@@ -130,14 +130,11 @@ static int ichx_read_bit(int reg, unsigned nr)
130 130
131static bool ichx_gpio_check_available(struct gpio_chip *gpio, unsigned nr) 131static bool ichx_gpio_check_available(struct gpio_chip *gpio, unsigned nr)
132{ 132{
133 return ichx_priv.use_gpio & (1 << (nr / 32)); 133 return !!(ichx_priv.use_gpio & (1 << (nr / 32)));
134} 134}
135 135
136static int ichx_gpio_direction_input(struct gpio_chip *gpio, unsigned nr) 136static int ichx_gpio_direction_input(struct gpio_chip *gpio, unsigned nr)
137{ 137{
138 if (!ichx_gpio_check_available(gpio, nr))
139 return -ENXIO;
140
141 /* 138 /*
142 * Try setting pin as an input and verify it worked since many pins 139 * Try setting pin as an input and verify it worked since many pins
143 * are output-only. 140 * are output-only.
@@ -151,9 +148,6 @@ static int ichx_gpio_direction_input(struct gpio_chip *gpio, unsigned nr)
151static int ichx_gpio_direction_output(struct gpio_chip *gpio, unsigned nr, 148static int ichx_gpio_direction_output(struct gpio_chip *gpio, unsigned nr,
152 int val) 149 int val)
153{ 150{
154 if (!ichx_gpio_check_available(gpio, nr))
155 return -ENXIO;
156
157 /* Set GPIO output value. */ 151 /* Set GPIO output value. */
158 ichx_write_bit(GPIO_LVL, nr, val, 0); 152 ichx_write_bit(GPIO_LVL, nr, val, 0);
159 153
@@ -169,9 +163,6 @@ static int ichx_gpio_direction_output(struct gpio_chip *gpio, unsigned nr,
169 163
170static int ichx_gpio_get(struct gpio_chip *chip, unsigned nr) 164static int ichx_gpio_get(struct gpio_chip *chip, unsigned nr)
171{ 165{
172 if (!ichx_gpio_check_available(chip, nr))
173 return -ENXIO;
174
175 return ichx_read_bit(GPIO_LVL, nr); 166 return ichx_read_bit(GPIO_LVL, nr);
176} 167}
177 168
@@ -180,9 +171,6 @@ static int ich6_gpio_get(struct gpio_chip *chip, unsigned nr)
180 unsigned long flags; 171 unsigned long flags;
181 u32 data; 172 u32 data;
182 173
183 if (!ichx_gpio_check_available(chip, nr))
184 return -ENXIO;
185
186 /* 174 /*
187 * GPI 0 - 15 need to be read from the power management registers on 175 * GPI 0 - 15 need to be read from the power management registers on
188 * a ICH6/3100 bridge. 176 * a ICH6/3100 bridge.
@@ -207,6 +195,9 @@ static int ich6_gpio_get(struct gpio_chip *chip, unsigned nr)
207 195
208static int ichx_gpio_request(struct gpio_chip *chip, unsigned nr) 196static int ichx_gpio_request(struct gpio_chip *chip, unsigned nr)
209{ 197{
198 if (!ichx_gpio_check_available(chip, nr))
199 return -ENXIO;
200
210 /* 201 /*
211 * Note we assume the BIOS properly set a bridge's USE value. Some 202 * Note we assume the BIOS properly set a bridge's USE value. Some
212 * chips (eg Intel 3100) have bogus USE values though, so first see if 203 * chips (eg Intel 3100) have bogus USE values though, so first see if