Thread (152 messages) 152 messages, 12 authors, 2013-06-18

[PATCH 03/11] pinctrl: mvebu: kirkwood pinctrl driver

From: Stephen Warren <hidden>
Date: 2012-08-27 20:02:38
Also in: linux-devicetree, lkml

On 08/27/2012 12:19 PM, Sebastian Hesselbarth wrote:
On 08/27/2012 03:43 PM, Ben Dooks wrote:
quoted
On 20/08/2012 06:49, Linus Walleij wrote:
quoted
On Sat, Aug 11, 2012 at 2:56 PM, Sebastian Hesselbarth
[off-list ref] wrote:
(...)
quoted
diff --git a/drivers/pinctrl/pinctrl-kirkwood.c
b/drivers/pinctrl/pinctrl-kirkwood.c
+static struct mvebu_pinctrl_soc_info kirkwood_pinctrl_info;
+
+static struct of_device_id kirkwood_pinctrl_of_match[] __devinitdata
= {
+ { .compatible = "marvell,88f6180-pinctrl",
+ .data = (void *)VARIANT_MV88F6180 },
+ { .compatible = "marvell,88f6190-pinctrl",
+ .data = (void *)VARIANT_MV88F6190 },
+ { .compatible = "marvell,88f6192-pinctrl",
+ .data = (void *)VARIANT_MV88F6192 },
+ { .compatible = "marvell,88f6281-pinctrl",
+ .data = (void *)VARIANT_MV88F6281 },
+ { .compatible = "marvell,88f6282-pinctrl",
+ .data = (void *)VARIANT_MV88F6282 },
+ { }
+};
I'm thinking this variant should maybe be an enum... unless it is
strongly established somewhere in Orion/Marvell stuff.
quoted
+static int __devinit kirkwood_pinctrl_probe(struct platform_device
*pdev)
+{
+ struct mvebu_pinctrl_soc_info *soc = &kirkwood_pinctrl_info;
+ const struct of_device_id *match =
+ of_match_device(kirkwood_pinctrl_of_match, &pdev->dev);
+
+ if (match) {
+ soc->variant = (unsigned)match->data & 0xff;
+ switch (soc->variant) {
+ case VARIANT_MV88F6180:
+ soc->controls = mv88f6180_mpp_controls;
+ soc->ncontrols = ARRAY_SIZE(mv88f6180_mpp_controls);
+ soc->modes = mv88f6xxx_mpp_modes;
+ soc->nmodes = ARRAY_SIZE(mv88f6xxx_mpp_modes);
+ soc->gpioranges = mv88f6180_gpio_ranges;
+ soc->ngpioranges = ARRAY_SIZE(mv88f6180_gpio_ranges);
+ break;
+ case VARIANT_MV88F6190:
+ case VARIANT_MV88F6192:
+ soc->controls = mv88f619x_mpp_controls;
+ soc->ncontrols = ARRAY_SIZE(mv88f619x_mpp_controls);
+ soc->modes = mv88f6xxx_mpp_modes;
+ soc->nmodes = ARRAY_SIZE(mv88f6xxx_mpp_modes);
+ soc->gpioranges = mv88f619x_gpio_ranges;
+ soc->ngpioranges = ARRAY_SIZE(mv88f619x_gpio_ranges);
+ break;
+ case VARIANT_MV88F6281:
+ case VARIANT_MV88F6282:
+ soc->controls = mv88f628x_mpp_controls;
+ soc->ncontrols = ARRAY_SIZE(mv88f628x_mpp_controls);
+ soc->modes = mv88f6xxx_mpp_modes;
+ soc->nmodes = ARRAY_SIZE(mv88f6xxx_mpp_modes);
+ soc->gpioranges = mv88f628x_gpio_ranges;
+ soc->ngpioranges = ARRAY_SIZE(mv88f628x_gpio_ranges);
+ break;
+ }
+ pdev->dev.platform_data = soc;
+ }
+ return mvebu_pinctrl_probe(pdev);
+}
Why not have structures defining the soc-> parameters and use that in the
of_match list?
Ben,

functionally it is equivalent and IMHO using soc structs doesn't improve
readability here. I there any other good reason to have structs for each
soc?
Well, it does change from 6 assignments down to one, and remove the need
for a switch statement - i.e. all of the code quoted above becomes just
roughly:

*soc = *match->data;
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help