Commit 493a6ebd authored by Jonathan Bakker's avatar Jonathan Bakker Committed by Dmitry Torokhov
Browse files

Input: bma150 - use managed resources helpers



The driver can be cleaned up by using managed resource helpers.

Signed-off-by: default avatarJonathan Bakker <xc-racer2@live.ca>
Signed-off-by: default avatarPaweł Chmiel <pawel.mikolaj.chmiel@gmail.com>
[dtor: do not explicitly set parent of input device since we are using devm]
Link: https://lore.kernel.org/r/20191017204217.106453-20-dmitry.torokhov@gmail.com



Signed-off-by: default avatarDmitry Torokhov <dmitry.torokhov@gmail.com>
parent 867e8820
Loading
Loading
Loading
Loading
+14 −37
Original line number Diff line number Diff line
@@ -439,13 +439,11 @@ static int bma150_initialize(struct bma150_data *bma150,
	return bma150_set_mode(bma150, BMA150_MODE_SLEEP);
}

static void bma150_init_input_device(struct bma150_data *bma150,
						struct input_dev *idev)
static void bma150_init_input_device(struct input_dev *idev)
{
	idev->name = BMA150_DRIVER;
	idev->phys = BMA150_DRIVER "/input0";
	idev->id.bustype = BUS_I2C;
	idev->dev.parent = &bma150->client->dev;

	idev->evbit[0] = BIT_MASK(EV_ABS);
	input_set_abs_params(idev, ABS_X, ABSMIN_ACC_VAL, ABSMAX_ACC_VAL, 0, 0);
@@ -458,11 +456,11 @@ static int bma150_register_input_device(struct bma150_data *bma150)
	struct input_dev *idev;
	int error;

	idev = input_allocate_device();
	idev = devm_input_allocate_device(&bma150->client->dev);
	if (!idev)
		return -ENOMEM;

	bma150_init_input_device(bma150, idev);
	bma150_init_input_device(idev);

	idev->open = bma150_irq_open;
	idev->close = bma150_irq_close;
@@ -471,10 +469,8 @@ static int bma150_register_input_device(struct bma150_data *bma150)
	bma150->input = idev;

	error = input_register_device(idev);
	if (error) {
		input_free_device(idev);
	if (error)
		return error;
	}

	return 0;
}
@@ -484,7 +480,7 @@ static int bma150_register_polled_device(struct bma150_data *bma150)
	struct input_polled_dev *ipoll_dev;
	int error;

	ipoll_dev = input_allocate_polled_device();
	ipoll_dev = devm_input_allocate_polled_device(&bma150->client->dev);
	if (!ipoll_dev)
		return -ENOMEM;

@@ -496,16 +492,14 @@ static int bma150_register_polled_device(struct bma150_data *bma150)
	ipoll_dev->poll_interval_min = BMA150_POLL_MIN;
	ipoll_dev->poll_interval_max = BMA150_POLL_MAX;

	bma150_init_input_device(bma150, ipoll_dev->input);
	bma150_init_input_device(ipoll_dev->input);

	bma150->input_polled = ipoll_dev;
	bma150->input = ipoll_dev->input;

	error = input_register_polled_device(ipoll_dev);
	if (error) {
		input_free_polled_device(ipoll_dev);
	if (error)
		return error;
	}

	return 0;
}
@@ -531,7 +525,7 @@ static int bma150_probe(struct i2c_client *client,
		return -EINVAL;
	}

	bma150 = kzalloc(sizeof(struct bma150_data), GFP_KERNEL);
	bma150 = devm_kzalloc(&client->dev, sizeof(*bma150), GFP_KERNEL);
	if (!bma150)
		return -ENOMEM;

@@ -544,7 +538,7 @@ static int bma150_probe(struct i2c_client *client,
				dev_err(&client->dev,
					"IRQ GPIO conf. error %d, error %d\n",
					client->irq, error);
				goto err_free_mem;
				return error;
			}
		}
		cfg = &pdata->cfg;
@@ -554,14 +548,14 @@ static int bma150_probe(struct i2c_client *client,

	error = bma150_initialize(bma150, cfg);
	if (error)
		goto err_free_mem;
		return error;

	if (client->irq > 0) {
		error = bma150_register_input_device(bma150);
		if (error)
			goto err_free_mem;
			return error;

		error = request_threaded_irq(client->irq,
		error = devm_request_threaded_irq(&client->dev, client->irq,
					NULL, bma150_irq_thread,
					IRQF_TRIGGER_RISING | IRQF_ONESHOT,
					BMA150_DRIVER, bma150);
@@ -569,13 +563,12 @@ static int bma150_probe(struct i2c_client *client,
			dev_err(&client->dev,
				"irq request failed %d, error %d\n",
				client->irq, error);
			input_unregister_device(bma150->input);
			goto err_free_mem;
			return error;
		}
	} else {
		error = bma150_register_polled_device(bma150);
		if (error)
			goto err_free_mem;
			return error;
	}

	i2c_set_clientdata(client, bma150);
@@ -583,28 +576,12 @@ static int bma150_probe(struct i2c_client *client,
	pm_runtime_enable(&client->dev);

	return 0;

err_free_mem:
	kfree(bma150);
	return error;
}

static int bma150_remove(struct i2c_client *client)
{
	struct bma150_data *bma150 = i2c_get_clientdata(client);

	pm_runtime_disable(&client->dev);

	if (client->irq > 0) {
		free_irq(client->irq, bma150);
		input_unregister_device(bma150->input);
	} else {
		input_unregister_polled_device(bma150->input_polled);
		input_free_polled_device(bma150->input_polled);
	}

	kfree(bma150);

	return 0;
}