Thread (1 message) 1 message, 1 author, 2012-09-08

Re: [PATCH 1/2] hwmon: Add devicetree bindings to gpio-fan

From: Andrew Lunn <hidden>
Date: 2012-09-08 07:32:23
Also in: linux-arm-kernel

Hi Jamie
+static int gpio_fan_get_of_pdata(struct device *dev,
+			    struct gpio_fan_platform_data *pdata)
+{
+	struct device_node *node;
+	struct gpio_fan_speed  *speed;
+	unsigned *ctrl;
+	unsigned i;
+	u32 u;
+	struct property *prop;
+	const __be32 *p;
+
+	node = dev->of_node;
+
+	/* Fill GPIO pin array */
+	pdata->num_ctrl = of_gpio_count(node);
+	ctrl = devm_kzalloc(dev, pdata->num_ctrl * sizeof(unsigned),
+				GFP_KERNEL);
+	if (!ctrl)
+		return -ENOMEM;
+	for (i = 0; i < of_gpio_count(node); i++) {

It seems unlikely the number of gpio pins is going to change while
inside this loop. So just use pdata->num_ctrl instead of counting them
every iteration.
+		int val;
+
+		val = of_get_gpio(node, i);
+		if (val >= 0)
+			ctrl[i] = val;
+		else
+			return -EINVAL;
+	}
+	pdata->ctrl = ctrl;
+
+	/* Get speed map array size */
+	i = 0;
+	of_property_for_each_u32(node, "gpio-fan,speed-map", prop, p, u)
+		i++;
+	if (i & 1) {
+		dev_err(dev, "gpio-fan,speed-map contains odd number of entries");
+		return -ENODEV;
+	}
This is not so clear on the first reading. i is the number of numbers
in the speed-map, and each entry needs two numbers, hence the (i & 1).
Maybe a comment to explain this? Or see if there is an of_ function
which returns records instead of individual properties?
+static const struct of_device_id of_gpio_fan_match[] = {
+	{ .compatible = "gpio-fan", },
+	{},
+};
This should probably have an __devinitdata attribute.

     Andrew
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help