aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/pinctrl
diff options
context:
space:
mode:
authorSebastian Hesselbarth <sebastian.hesselbarth@gmail.com>2014-01-30 19:48:48 -0500
committerSebastian Hesselbarth <sebastian.hesselbarth@gmail.com>2014-02-25 12:37:53 -0500
commit1217b790aea7ed0af150ba4d85905922e3a292e9 (patch)
tree63dae8b71e6fed0cbf7d4d9f19f3f8177e4a82f8 /drivers/pinctrl
parentad2a4f2b80da74c206dfb1e299475bb1feb5aa03 (diff)
pinctrl: mvebu: move resource allocation to SoC specific drivers
The way that mvebu pinctrl is designed, requesting mpp registers in common pinctrl driver does not allow SoC specific drivers to access this resource. Move resource allocation in each SoC pinctrl driver and enable already provided mpp_{set,get} callbacks. Signed-off-by: Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com> Tested-by: Andrew Lunn <andrew@lunn.ch> Tested-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Diffstat (limited to 'drivers/pinctrl')
-rw-r--r--drivers/pinctrl/mvebu/pinctrl-armada-370.c8
-rw-r--r--drivers/pinctrl/mvebu/pinctrl-armada-xp.c12
-rw-r--r--drivers/pinctrl/mvebu/pinctrl-dove.c8
-rw-r--r--drivers/pinctrl/mvebu/pinctrl-kirkwood.c13
-rw-r--r--drivers/pinctrl/mvebu/pinctrl-mvebu.c8
5 files changed, 33 insertions, 16 deletions
diff --git a/drivers/pinctrl/mvebu/pinctrl-armada-370.c b/drivers/pinctrl/mvebu/pinctrl-armada-370.c
index fc3162ca48c0..670e5b01c678 100644
--- a/drivers/pinctrl/mvebu/pinctrl-armada-370.c
+++ b/drivers/pinctrl/mvebu/pinctrl-armada-370.c
@@ -385,7 +385,7 @@ static struct of_device_id armada_370_pinctrl_of_match[] = {
385}; 385};
386 386
387static struct mvebu_mpp_ctrl mv88f6710_mpp_controls[] = { 387static struct mvebu_mpp_ctrl mv88f6710_mpp_controls[] = {
388 MPP_REG_CTRL(0, 65), 388 MPP_FUNC_CTRL(0, 65, NULL, armada_370_mpp_ctrl),
389}; 389};
390 390
391static struct pinctrl_gpio_range mv88f6710_mpp_gpio_ranges[] = { 391static struct pinctrl_gpio_range mv88f6710_mpp_gpio_ranges[] = {
@@ -397,6 +397,12 @@ static struct pinctrl_gpio_range mv88f6710_mpp_gpio_ranges[] = {
397static int armada_370_pinctrl_probe(struct platform_device *pdev) 397static int armada_370_pinctrl_probe(struct platform_device *pdev)
398{ 398{
399 struct mvebu_pinctrl_soc_info *soc = &armada_370_pinctrl_info; 399 struct mvebu_pinctrl_soc_info *soc = &armada_370_pinctrl_info;
400 struct resource *res;
401
402 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
403 mpp_base = devm_ioremap_resource(&pdev->dev, res);
404 if (IS_ERR(mpp_base))
405 return PTR_ERR(mpp_base);
400 406
401 soc->variant = 0; /* no variants for Armada 370 */ 407 soc->variant = 0; /* no variants for Armada 370 */
402 soc->controls = mv88f6710_mpp_controls; 408 soc->controls = mv88f6710_mpp_controls;
diff --git a/drivers/pinctrl/mvebu/pinctrl-armada-xp.c b/drivers/pinctrl/mvebu/pinctrl-armada-xp.c
index a22bbbdeff19..de311129f7a0 100644
--- a/drivers/pinctrl/mvebu/pinctrl-armada-xp.c
+++ b/drivers/pinctrl/mvebu/pinctrl-armada-xp.c
@@ -378,7 +378,7 @@ static struct of_device_id armada_xp_pinctrl_of_match[] = {
378}; 378};
379 379
380static struct mvebu_mpp_ctrl mv78230_mpp_controls[] = { 380static struct mvebu_mpp_ctrl mv78230_mpp_controls[] = {
381 MPP_REG_CTRL(0, 48), 381 MPP_FUNC_CTRL(0, 48, NULL, armada_xp_mpp_ctrl),
382}; 382};
383 383
384static struct pinctrl_gpio_range mv78230_mpp_gpio_ranges[] = { 384static struct pinctrl_gpio_range mv78230_mpp_gpio_ranges[] = {
@@ -387,7 +387,7 @@ static struct pinctrl_gpio_range mv78230_mpp_gpio_ranges[] = {
387}; 387};
388 388
389static struct mvebu_mpp_ctrl mv78260_mpp_controls[] = { 389static struct mvebu_mpp_ctrl mv78260_mpp_controls[] = {
390 MPP_REG_CTRL(0, 66), 390 MPP_FUNC_CTRL(0, 66, NULL, armada_xp_mpp_ctrl),
391}; 391};
392 392
393static struct pinctrl_gpio_range mv78260_mpp_gpio_ranges[] = { 393static struct pinctrl_gpio_range mv78260_mpp_gpio_ranges[] = {
@@ -397,7 +397,7 @@ static struct pinctrl_gpio_range mv78260_mpp_gpio_ranges[] = {
397}; 397};
398 398
399static struct mvebu_mpp_ctrl mv78460_mpp_controls[] = { 399static struct mvebu_mpp_ctrl mv78460_mpp_controls[] = {
400 MPP_REG_CTRL(0, 66), 400 MPP_FUNC_CTRL(0, 66, NULL, armada_xp_mpp_ctrl),
401}; 401};
402 402
403static struct pinctrl_gpio_range mv78460_mpp_gpio_ranges[] = { 403static struct pinctrl_gpio_range mv78460_mpp_gpio_ranges[] = {
@@ -411,10 +411,16 @@ static int armada_xp_pinctrl_probe(struct platform_device *pdev)
411 struct mvebu_pinctrl_soc_info *soc = &armada_xp_pinctrl_info; 411 struct mvebu_pinctrl_soc_info *soc = &armada_xp_pinctrl_info;
412 const struct of_device_id *match = 412 const struct of_device_id *match =
413 of_match_device(armada_xp_pinctrl_of_match, &pdev->dev); 413 of_match_device(armada_xp_pinctrl_of_match, &pdev->dev);
414 struct resource *res;
414 415
415 if (!match) 416 if (!match)
416 return -ENODEV; 417 return -ENODEV;
417 418
419 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
420 mpp_base = devm_ioremap_resource(&pdev->dev, res);
421 if (IS_ERR(mpp_base))
422 return PTR_ERR(mpp_base);
423
418 soc->variant = (unsigned) match->data & 0xff; 424 soc->variant = (unsigned) match->data & 0xff;
419 425
420 switch (soc->variant) { 426 switch (soc->variant) {
diff --git a/drivers/pinctrl/mvebu/pinctrl-dove.c b/drivers/pinctrl/mvebu/pinctrl-dove.c
index 0a4afe4bc97e..95a306d64523 100644
--- a/drivers/pinctrl/mvebu/pinctrl-dove.c
+++ b/drivers/pinctrl/mvebu/pinctrl-dove.c
@@ -367,7 +367,7 @@ static struct mvebu_mpp_ctrl dove_mpp_controls[] = {
367 MPP_FUNC_CTRL(13, 13, "mpp13", dove_pmu_mpp_ctrl), 367 MPP_FUNC_CTRL(13, 13, "mpp13", dove_pmu_mpp_ctrl),
368 MPP_FUNC_CTRL(14, 14, "mpp14", dove_pmu_mpp_ctrl), 368 MPP_FUNC_CTRL(14, 14, "mpp14", dove_pmu_mpp_ctrl),
369 MPP_FUNC_CTRL(15, 15, "mpp15", dove_pmu_mpp_ctrl), 369 MPP_FUNC_CTRL(15, 15, "mpp15", dove_pmu_mpp_ctrl),
370 MPP_REG_CTRL(16, 23), 370 MPP_FUNC_CTRL(16, 23, NULL, dove_mpp_ctrl),
371 MPP_FUNC_CTRL(24, 39, "mpp_camera", dove_mpp4_ctrl), 371 MPP_FUNC_CTRL(24, 39, "mpp_camera", dove_mpp4_ctrl),
372 MPP_FUNC_CTRL(40, 45, "mpp_sdio0", dove_mpp4_ctrl), 372 MPP_FUNC_CTRL(40, 45, "mpp_sdio0", dove_mpp4_ctrl),
373 MPP_FUNC_CTRL(46, 51, "mpp_sdio1", dove_mpp4_ctrl), 373 MPP_FUNC_CTRL(46, 51, "mpp_sdio1", dove_mpp4_ctrl),
@@ -769,6 +769,7 @@ static struct of_device_id dove_pinctrl_of_match[] = {
769 769
770static int dove_pinctrl_probe(struct platform_device *pdev) 770static int dove_pinctrl_probe(struct platform_device *pdev)
771{ 771{
772 struct resource *res;
772 const struct of_device_id *match = 773 const struct of_device_id *match =
773 of_match_device(dove_pinctrl_of_match, &pdev->dev); 774 of_match_device(dove_pinctrl_of_match, &pdev->dev);
774 pdev->dev.platform_data = (void *)match->data; 775 pdev->dev.platform_data = (void *)match->data;
@@ -784,6 +785,11 @@ static int dove_pinctrl_probe(struct platform_device *pdev)
784 } 785 }
785 clk_prepare_enable(clk); 786 clk_prepare_enable(clk);
786 787
788 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
789 mpp_base = devm_ioremap_resource(&pdev->dev, res);
790 if (IS_ERR(mpp_base))
791 return PTR_ERR(mpp_base);
792
787 return mvebu_pinctrl_probe(pdev); 793 return mvebu_pinctrl_probe(pdev);
788} 794}
789 795
diff --git a/drivers/pinctrl/mvebu/pinctrl-kirkwood.c b/drivers/pinctrl/mvebu/pinctrl-kirkwood.c
index f9c68f1c636d..0d0211a1a0b0 100644
--- a/drivers/pinctrl/mvebu/pinctrl-kirkwood.c
+++ b/drivers/pinctrl/mvebu/pinctrl-kirkwood.c
@@ -371,7 +371,7 @@ static struct mvebu_mpp_mode mv88f6xxx_mpp_modes[] = {
371}; 371};
372 372
373static struct mvebu_mpp_ctrl mv88f6180_mpp_controls[] = { 373static struct mvebu_mpp_ctrl mv88f6180_mpp_controls[] = {
374 MPP_REG_CTRL(0, 29), 374 MPP_FUNC_CTRL(0, 29, NULL, kirkwood_mpp_ctrl),
375}; 375};
376 376
377static struct pinctrl_gpio_range mv88f6180_gpio_ranges[] = { 377static struct pinctrl_gpio_range mv88f6180_gpio_ranges[] = {
@@ -379,7 +379,7 @@ static struct pinctrl_gpio_range mv88f6180_gpio_ranges[] = {
379}; 379};
380 380
381static struct mvebu_mpp_ctrl mv88f619x_mpp_controls[] = { 381static struct mvebu_mpp_ctrl mv88f619x_mpp_controls[] = {
382 MPP_REG_CTRL(0, 35), 382 MPP_FUNC_CTRL(0, 35, NULL, kirkwood_mpp_ctrl),
383}; 383};
384 384
385static struct pinctrl_gpio_range mv88f619x_gpio_ranges[] = { 385static struct pinctrl_gpio_range mv88f619x_gpio_ranges[] = {
@@ -388,7 +388,7 @@ static struct pinctrl_gpio_range mv88f619x_gpio_ranges[] = {
388}; 388};
389 389
390static struct mvebu_mpp_ctrl mv88f628x_mpp_controls[] = { 390static struct mvebu_mpp_ctrl mv88f628x_mpp_controls[] = {
391 MPP_REG_CTRL(0, 49), 391 MPP_FUNC_CTRL(0, 49, NULL, kirkwood_mpp_ctrl),
392}; 392};
393 393
394static struct pinctrl_gpio_range mv88f628x_gpio_ranges[] = { 394static struct pinctrl_gpio_range mv88f628x_gpio_ranges[] = {
@@ -468,9 +468,16 @@ static struct of_device_id kirkwood_pinctrl_of_match[] = {
468 468
469static int kirkwood_pinctrl_probe(struct platform_device *pdev) 469static int kirkwood_pinctrl_probe(struct platform_device *pdev)
470{ 470{
471 struct resource *res;
471 const struct of_device_id *match = 472 const struct of_device_id *match =
472 of_match_device(kirkwood_pinctrl_of_match, &pdev->dev); 473 of_match_device(kirkwood_pinctrl_of_match, &pdev->dev);
473 pdev->dev.platform_data = (void *)match->data; 474 pdev->dev.platform_data = (void *)match->data;
475
476 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
477 mpp_base = devm_ioremap_resource(&pdev->dev, res);
478 if (IS_ERR(mpp_base))
479 return PTR_ERR(mpp_base);
480
474 return mvebu_pinctrl_probe(pdev); 481 return mvebu_pinctrl_probe(pdev);
475} 482}
476 483
diff --git a/drivers/pinctrl/mvebu/pinctrl-mvebu.c b/drivers/pinctrl/mvebu/pinctrl-mvebu.c
index 873aef5bdd9c..45e99e80502f 100644
--- a/drivers/pinctrl/mvebu/pinctrl-mvebu.c
+++ b/drivers/pinctrl/mvebu/pinctrl-mvebu.c
@@ -593,9 +593,7 @@ static int mvebu_pinctrl_build_functions(struct platform_device *pdev,
593int mvebu_pinctrl_probe(struct platform_device *pdev) 593int mvebu_pinctrl_probe(struct platform_device *pdev)
594{ 594{
595 struct mvebu_pinctrl_soc_info *soc = dev_get_platdata(&pdev->dev); 595 struct mvebu_pinctrl_soc_info *soc = dev_get_platdata(&pdev->dev);
596 struct resource *res;
597 struct mvebu_pinctrl *pctl; 596 struct mvebu_pinctrl *pctl;
598 void __iomem *base;
599 struct pinctrl_pin_desc *pdesc; 597 struct pinctrl_pin_desc *pdesc;
600 unsigned gid, n, k; 598 unsigned gid, n, k;
601 unsigned size, noname = 0; 599 unsigned size, noname = 0;
@@ -608,11 +606,6 @@ int mvebu_pinctrl_probe(struct platform_device *pdev)
608 return -EINVAL; 606 return -EINVAL;
609 } 607 }
610 608
611 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
612 base = devm_ioremap_resource(&pdev->dev, res);
613 if (IS_ERR(base))
614 return PTR_ERR(base);
615
616 pctl = devm_kzalloc(&pdev->dev, sizeof(struct mvebu_pinctrl), 609 pctl = devm_kzalloc(&pdev->dev, sizeof(struct mvebu_pinctrl),
617 GFP_KERNEL); 610 GFP_KERNEL);
618 if (!pctl) { 611 if (!pctl) {
@@ -626,7 +619,6 @@ int mvebu_pinctrl_probe(struct platform_device *pdev)
626 pctl->desc.pmxops = &mvebu_pinmux_ops; 619 pctl->desc.pmxops = &mvebu_pinmux_ops;
627 pctl->desc.confops = &mvebu_pinconf_ops; 620 pctl->desc.confops = &mvebu_pinconf_ops;
628 pctl->variant = soc->variant; 621 pctl->variant = soc->variant;
629 pctl->base = base;
630 pctl->dev = &pdev->dev; 622 pctl->dev = &pdev->dev;
631 platform_set_drvdata(pdev, pctl); 623 platform_set_drvdata(pdev, pctl);
632 624