Thread (10 messages) 10 messages, 3 authors, 2009-05-14

Re: [PATCH] input: add synaptics_i2c driver

From: Jean Delvare <hidden>
Date: 2009-05-14 14:28:51

Hi Mike,

On Thu, 14 May 2009 17:20:27 +0300, Mike Rapoport wrote:
I've addressed all the comments Jean had, and I hopefully haven't broke any I2C
bits this time, so I dare to add Jean's Ack.

This driver supports Synaptics I2C touchpad controller on eXeda
mobile device.
I keep seeing new bugs, sorry for missing this one during the previous
round:
+static int __devinit synaptics_i2c_probe(struct i2c_client *client,
+			       const struct i2c_device_id *dev_id)
+{
+	int ret;
+	struct synaptics_i2c *touch;
+
+	touch = synaptics_i2c_touch_create(client);
+	if (!touch)
+		return -ENOMEM;
+
+	i2c_set_clientdata(client, touch);
+
+	ret = synaptics_i2c_reset_config(client);
+	if (ret)
+		goto err_mem_free;
+
+	if (client->irq < 1)
+		polling_req = 1;
+
+	touch->input = input_allocate_device();
+	if (!touch->input)
+		goto err_mem_free;
You jump without setting err to -ENOMEM. err is 0 at this point so you
will return success while the probe failed. Bad...
+
+	synaptics_i2c_set_input_params(touch);
+
+	if (!polling_req)
+		dev_info(&touch->client->dev,
+			  "IRQ will be used: %d\n", touch->client->irq);
+	else
+		dev_info(&touch->client->dev,
+			  "Using polling at rate: %d times/sec\n", scan_rate);
+
+	/* Register the device in input subsystem */
+	ret = input_register_device(touch->input);
+	if (ret) {
+		dev_err(&client->dev,
+			 "Input device register failed: %d\n", ret);
+		goto err_input_free;
+	}
+	return 0;
+
+err_input_free:
+	input_free_device(touch->input);
+err_mem_free:
+	i2c_set_clientdata(client, NULL);
+	kfree(touch);
+
+	return ret;
+}
Also note that:
+static const struct i2c_device_id synaptics_i2c_id_table[] = {
+	{ "synaptics_i2c", 0 },
+	{ },
+};
+MODULE_DEVICE_TABLE(i2c, synaptics_i2c_id_table);
The "_i2c" in the device name is kind of redundant, as you are already
in the namespace of i2c devices. But that's up to you, it's only a
minor aesthetic issue.

All the rest looks OK.

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