static int armada_xp_pinctrl_probe(struct platform_device *pdev) { struct mvebu_pinctrl_soc_info *soc = &armada_xp_pinctrl_info; const struct of_device_id *match = of_match_device(armada_xp_pinctrl_of_match, &pdev->dev); struct resource *res; if (!match) return -ENODEV; res = platform_get_resource(pdev, IORESOURCE_MEM, 0); mpp_base = devm_ioremap_resource(&pdev->dev, res); if (IS_ERR(mpp_base)) return PTR_ERR(mpp_base); soc->variant = (unsigned) match->data & 0xff; switch (soc->variant) { case V_MV78230: soc->controls = mv78230_mpp_controls; soc->ncontrols = ARRAY_SIZE(mv78230_mpp_controls); soc->modes = armada_xp_mpp_modes; /* We don't necessarily want the full list of the * armada_xp_mpp_modes, but only the first 'n' ones * that are available on this SoC */ soc->nmodes = mv78230_mpp_controls[0].npins; soc->gpioranges = mv78230_mpp_gpio_ranges; soc->ngpioranges = ARRAY_SIZE(mv78230_mpp_gpio_ranges); break; case V_MV78260: soc->controls = mv78260_mpp_controls; soc->ncontrols = ARRAY_SIZE(mv78260_mpp_controls); soc->modes = armada_xp_mpp_modes; /* We don't necessarily want the full list of the * armada_xp_mpp_modes, but only the first 'n' ones * that are available on this SoC */ soc->nmodes = mv78260_mpp_controls[0].npins; soc->gpioranges = mv78260_mpp_gpio_ranges; soc->ngpioranges = ARRAY_SIZE(mv78260_mpp_gpio_ranges); break; case V_MV78460: soc->controls = mv78460_mpp_controls; soc->ncontrols = ARRAY_SIZE(mv78460_mpp_controls); soc->modes = armada_xp_mpp_modes; /* We don't necessarily want the full list of the * armada_xp_mpp_modes, but only the first 'n' ones * that are available on this SoC */ soc->nmodes = mv78460_mpp_controls[0].npins; soc->gpioranges = mv78460_mpp_gpio_ranges; soc->ngpioranges = ARRAY_SIZE(mv78460_mpp_gpio_ranges); break; } pdev->dev.platform_data = soc; return mvebu_pinctrl_probe(pdev); }
static int armada_370_pinctrl_probe(struct platform_device *pdev) { struct mvebu_pinctrl_soc_info *soc = &armada_370_pinctrl_info; soc->variant = 0; /* no variants for Armada 370 */ soc->controls = mv88f6710_mpp_controls; soc->ncontrols = ARRAY_SIZE(mv88f6710_mpp_controls); soc->modes = mv88f6710_mpp_modes; soc->nmodes = ARRAY_SIZE(mv88f6710_mpp_modes); soc->gpioranges = mv88f6710_mpp_gpio_ranges; soc->ngpioranges = ARRAY_SIZE(mv88f6710_mpp_gpio_ranges); pdev->dev.platform_data = soc; return mvebu_pinctrl_probe(pdev); }
static int armada_xp_pinctrl_probe(struct device_d *dev) { const struct of_device_id *match = of_match_node(armada_xp_pinctrl_of_match, dev->device_node); struct mvebu_pinctrl_soc_info *soc = &armada_xp_pinctrl_info; mpp_base = dev_request_mem_region(dev, 0); if (!mpp_base) return -EBUSY; soc->variant = (enum armada_xp_variant)match->data; /* * We don't necessarily want the full list of the armada_xp_mpp_modes, * but only the first 'n' ones that are available on this SoC */ if (soc->variant == V_MV78230) soc->nmodes = 49; return mvebu_pinctrl_probe(dev, soc); }
static int armada_375_pinctrl_probe(struct platform_device *pdev) { struct mvebu_pinctrl_soc_info *soc = &armada_375_pinctrl_info; struct resource *res; res = platform_get_resource(pdev, IORESOURCE_MEM, 0); mpp_base = devm_ioremap_resource(&pdev->dev, res); if (IS_ERR(mpp_base)) return PTR_ERR(mpp_base); soc->variant = 0; /* no variants for Armada 375 */ soc->controls = mv88f6720_mpp_controls; soc->ncontrols = ARRAY_SIZE(mv88f6720_mpp_controls); soc->modes = mv88f6720_mpp_modes; soc->nmodes = ARRAY_SIZE(mv88f6720_mpp_modes); soc->gpioranges = mv88f6720_mpp_gpio_ranges; soc->ngpioranges = ARRAY_SIZE(mv88f6720_mpp_gpio_ranges); pdev->dev.platform_data = soc; return mvebu_pinctrl_probe(pdev); }