diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2012-07-24 17:05:46 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-07-24 17:05:46 -0400 |
commit | 914311c9fb9bc01a215de9d848b72b5449c0e342 (patch) | |
tree | e130f41c9c721bae03d6e293ffe0039d1a9018ea /drivers/pinctrl/pinctrl-nomadik.c | |
parent | 5dedb9f3bd5bcb186313ea0c0cff8f2c525d4122 (diff) | |
parent | 8b8b091bf07fa7ef7f13c1ac40b30bcf74050b60 (diff) |
Merge tag 'pinctrl-for-v3.6' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-pinctrl
Pull pin control changes from Linus Walleij:
"These are the accumulated pin control patches for v3.6:
- Various cleanups to the U300 driver
- Refactor the pin control core to automatically remove any GPIO
ranges when the drivers are removed, instead of having the drivers
do this explicitly.
- Add a function for registering a batch of GPIO ranges.
- Fix a number of incorrect but non-regressive error checks.
- Incremental improvements to the COH901, i.MX and Nomadik drivers
- Add a one-register-per-pin entirely Device Tree-based pin control
driver from Tony Lindgren."
* tag 'pinctrl-for-v3.6' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-pinctrl:
pinctrl: Add one-register-per-pin type device tree based pinctrl driver
pinctrl/nomadik: add spi2_oc1_2 pin group
pinctrl/nomadik: kerneldoc fix
pinctrl/nomadik: use devm_* allocators for gpio probe
pinctrl/nomadik: add pin group to mco function
pinctrl/nomadik: add hsit_a_2 pin group
pinctrl/nomadik: add pin group smcs1 and smps0
pinctrl/nomadik: fix hsir_a_1_pins pin list
pinctrl: pinctrl-imx: fix map setting problem if NO_PAD_CTL is set
pinctrl/coh901: use clk_prepare_[en|dis]able()
pinctrl/pinctrl-tegra: remove IS_ERR checking of pmx->pctl
pinctrl/pinctrl-spear: remove IS_ERR checking of pmx->pctl
pinctrl/u300: drop unused variable
pinctrl: select the proper symbol
pinctrl: add pinctrl_add_gpio_ranges function
pinctrl: remove pinctrl_remove_gpio_range
pinctrl/pinctrl-core: cleanup pinctrl_register
pinctrl/u300: delete pointless debug print
pinctrl/pinctrl-u300: remove devm_kfree at driver unload
Diffstat (limited to 'drivers/pinctrl/pinctrl-nomadik.c')
-rw-r--r-- | drivers/pinctrl/pinctrl-nomadik.c | 37 |
1 files changed, 10 insertions, 27 deletions
diff --git a/drivers/pinctrl/pinctrl-nomadik.c b/drivers/pinctrl/pinctrl-nomadik.c index dd9e6f26416..53b0d49a7a1 100644 --- a/drivers/pinctrl/pinctrl-nomadik.c +++ b/drivers/pinctrl/pinctrl-nomadik.c | |||
@@ -434,7 +434,7 @@ static int __nmk_config_pins(pin_cfg_t *cfgs, int num, bool sleep) | |||
434 | /** | 434 | /** |
435 | * nmk_config_pin - configure a pin's mux attributes | 435 | * nmk_config_pin - configure a pin's mux attributes |
436 | * @cfg: pin confguration | 436 | * @cfg: pin confguration |
437 | * | 437 | * @sleep: Non-zero to apply the sleep mode configuration |
438 | * Configures a pin's mode (alternate function or GPIO), its pull up status, | 438 | * Configures a pin's mode (alternate function or GPIO), its pull up status, |
439 | * and its sleep mode based on the specified configuration. The @cfg is | 439 | * and its sleep mode based on the specified configuration. The @cfg is |
440 | * usually one of the SoC specific macros defined in mach/<soc>-pins.h. These | 440 | * usually one of the SoC specific macros defined in mach/<soc>-pins.h. These |
@@ -1194,7 +1194,7 @@ static int __devinit nmk_gpio_probe(struct platform_device *dev) | |||
1194 | } | 1194 | } |
1195 | 1195 | ||
1196 | if (np) { | 1196 | if (np) { |
1197 | pdata = kzalloc(sizeof(*pdata), GFP_KERNEL); | 1197 | pdata = devm_kzalloc(&dev->dev, sizeof(*pdata), GFP_KERNEL); |
1198 | if (!pdata) | 1198 | if (!pdata) |
1199 | return -ENOMEM; | 1199 | return -ENOMEM; |
1200 | 1200 | ||
@@ -1229,29 +1229,23 @@ static int __devinit nmk_gpio_probe(struct platform_device *dev) | |||
1229 | goto out; | 1229 | goto out; |
1230 | } | 1230 | } |
1231 | 1231 | ||
1232 | if (request_mem_region(res->start, resource_size(res), | 1232 | base = devm_request_and_ioremap(&dev->dev, res); |
1233 | dev_name(&dev->dev)) == NULL) { | ||
1234 | ret = -EBUSY; | ||
1235 | goto out; | ||
1236 | } | ||
1237 | |||
1238 | base = ioremap(res->start, resource_size(res)); | ||
1239 | if (!base) { | 1233 | if (!base) { |
1240 | ret = -ENOMEM; | 1234 | ret = -ENOMEM; |
1241 | goto out_release; | 1235 | goto out; |
1242 | } | 1236 | } |
1243 | 1237 | ||
1244 | clk = clk_get(&dev->dev, NULL); | 1238 | clk = devm_clk_get(&dev->dev, NULL); |
1245 | if (IS_ERR(clk)) { | 1239 | if (IS_ERR(clk)) { |
1246 | ret = PTR_ERR(clk); | 1240 | ret = PTR_ERR(clk); |
1247 | goto out_unmap; | 1241 | goto out; |
1248 | } | 1242 | } |
1249 | clk_prepare(clk); | 1243 | clk_prepare(clk); |
1250 | 1244 | ||
1251 | nmk_chip = kzalloc(sizeof(*nmk_chip), GFP_KERNEL); | 1245 | nmk_chip = devm_kzalloc(&dev->dev, sizeof(*nmk_chip), GFP_KERNEL); |
1252 | if (!nmk_chip) { | 1246 | if (!nmk_chip) { |
1253 | ret = -ENOMEM; | 1247 | ret = -ENOMEM; |
1254 | goto out_clk; | 1248 | goto out; |
1255 | } | 1249 | } |
1256 | 1250 | ||
1257 | /* | 1251 | /* |
@@ -1286,7 +1280,7 @@ static int __devinit nmk_gpio_probe(struct platform_device *dev) | |||
1286 | 1280 | ||
1287 | ret = gpiochip_add(&nmk_chip->chip); | 1281 | ret = gpiochip_add(&nmk_chip->chip); |
1288 | if (ret) | 1282 | if (ret) |
1289 | goto out_free; | 1283 | goto out; |
1290 | 1284 | ||
1291 | BUG_ON(nmk_chip->bank >= ARRAY_SIZE(nmk_gpio_chips)); | 1285 | BUG_ON(nmk_chip->bank >= ARRAY_SIZE(nmk_gpio_chips)); |
1292 | 1286 | ||
@@ -1300,7 +1294,7 @@ static int __devinit nmk_gpio_probe(struct platform_device *dev) | |||
1300 | if (!nmk_chip->domain) { | 1294 | if (!nmk_chip->domain) { |
1301 | pr_err("%s: Failed to create irqdomain\n", np->full_name); | 1295 | pr_err("%s: Failed to create irqdomain\n", np->full_name); |
1302 | ret = -ENOSYS; | 1296 | ret = -ENOSYS; |
1303 | goto out_free; | 1297 | goto out; |
1304 | } | 1298 | } |
1305 | 1299 | ||
1306 | nmk_gpio_init_irq(nmk_chip); | 1300 | nmk_gpio_init_irq(nmk_chip); |
@@ -1309,20 +1303,9 @@ static int __devinit nmk_gpio_probe(struct platform_device *dev) | |||
1309 | 1303 | ||
1310 | return 0; | 1304 | return 0; |
1311 | 1305 | ||
1312 | out_free: | ||
1313 | kfree(nmk_chip); | ||
1314 | out_clk: | ||
1315 | clk_disable(clk); | ||
1316 | clk_put(clk); | ||
1317 | out_unmap: | ||
1318 | iounmap(base); | ||
1319 | out_release: | ||
1320 | release_mem_region(res->start, resource_size(res)); | ||
1321 | out: | 1306 | out: |
1322 | dev_err(&dev->dev, "Failure %i for GPIO %i-%i\n", ret, | 1307 | dev_err(&dev->dev, "Failure %i for GPIO %i-%i\n", ret, |
1323 | pdata->first_gpio, pdata->first_gpio+31); | 1308 | pdata->first_gpio, pdata->first_gpio+31); |
1324 | if (np) | ||
1325 | kfree(pdata); | ||
1326 | 1309 | ||
1327 | return ret; | 1310 | return ret; |
1328 | } | 1311 | } |