iio: hid-sensors: bind IIO channels alloc to device object
Some HID drivers use devm_kmemdup() already to clone the template IIO channels information and update it. However, there are still some drivers that kmemdup() and kfree() the channels. This change converts them to use devm_kmemdup() and bind the life-time of this allocated object to the parent device object (in these drivers). Signed-off-by: Alexandru Ardelean <aardelean@deviqon.com> Acked-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com> Link: https://lore.kernel.org/r/20210630123029.759609-1-aardelean@deviqon.com Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
This commit is contained in:
parent
e73f0f0ee7
commit
8b2ac51625
|
@ -367,7 +367,8 @@ static int hid_accel_3d_probe(struct platform_device *pdev)
|
|||
dev_err(&pdev->dev, "failed to setup common attributes\n");
|
||||
return ret;
|
||||
}
|
||||
indio_dev->channels = kmemdup(channel_spec, channel_size, GFP_KERNEL);
|
||||
indio_dev->channels = devm_kmemdup(&pdev->dev, channel_spec,
|
||||
channel_size, GFP_KERNEL);
|
||||
|
||||
if (!indio_dev->channels) {
|
||||
dev_err(&pdev->dev, "failed to duplicate channels\n");
|
||||
|
@ -378,7 +379,7 @@ static int hid_accel_3d_probe(struct platform_device *pdev)
|
|||
hsdev->usage, accel_state);
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev, "failed to setup attributes\n");
|
||||
goto error_free_dev_mem;
|
||||
return ret;
|
||||
}
|
||||
|
||||
indio_dev->info = &accel_3d_info;
|
||||
|
@ -391,7 +392,7 @@ static int hid_accel_3d_probe(struct platform_device *pdev)
|
|||
&accel_state->common_attributes);
|
||||
if (ret < 0) {
|
||||
dev_err(&pdev->dev, "trigger setup failed\n");
|
||||
goto error_free_dev_mem;
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = iio_device_register(indio_dev);
|
||||
|
@ -416,8 +417,6 @@ error_iio_unreg:
|
|||
iio_device_unregister(indio_dev);
|
||||
error_remove_trigger:
|
||||
hid_sensor_remove_trigger(indio_dev, &accel_state->common_attributes);
|
||||
error_free_dev_mem:
|
||||
kfree(indio_dev->channels);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -431,7 +430,6 @@ static int hid_accel_3d_remove(struct platform_device *pdev)
|
|||
sensor_hub_remove_callback(hsdev, hsdev->usage);
|
||||
iio_device_unregister(indio_dev);
|
||||
hid_sensor_remove_trigger(indio_dev, &accel_state->common_attributes);
|
||||
kfree(indio_dev->channels);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -303,8 +303,8 @@ static int hid_gyro_3d_probe(struct platform_device *pdev)
|
|||
return ret;
|
||||
}
|
||||
|
||||
indio_dev->channels = kmemdup(gyro_3d_channels,
|
||||
sizeof(gyro_3d_channels), GFP_KERNEL);
|
||||
indio_dev->channels = devm_kmemdup(&pdev->dev, gyro_3d_channels,
|
||||
sizeof(gyro_3d_channels), GFP_KERNEL);
|
||||
if (!indio_dev->channels) {
|
||||
dev_err(&pdev->dev, "failed to duplicate channels\n");
|
||||
return -ENOMEM;
|
||||
|
@ -315,7 +315,7 @@ static int hid_gyro_3d_probe(struct platform_device *pdev)
|
|||
HID_USAGE_SENSOR_GYRO_3D, gyro_state);
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev, "failed to setup attributes\n");
|
||||
goto error_free_dev_mem;
|
||||
return ret;
|
||||
}
|
||||
|
||||
indio_dev->num_channels = ARRAY_SIZE(gyro_3d_channels);
|
||||
|
@ -329,7 +329,7 @@ static int hid_gyro_3d_probe(struct platform_device *pdev)
|
|||
&gyro_state->common_attributes);
|
||||
if (ret < 0) {
|
||||
dev_err(&pdev->dev, "trigger setup failed\n");
|
||||
goto error_free_dev_mem;
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = iio_device_register(indio_dev);
|
||||
|
@ -354,8 +354,6 @@ error_iio_unreg:
|
|||
iio_device_unregister(indio_dev);
|
||||
error_remove_trigger:
|
||||
hid_sensor_remove_trigger(indio_dev, &gyro_state->common_attributes);
|
||||
error_free_dev_mem:
|
||||
kfree(indio_dev->channels);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -369,7 +367,6 @@ static int hid_gyro_3d_remove(struct platform_device *pdev)
|
|||
sensor_hub_remove_callback(hsdev, HID_USAGE_SENSOR_GYRO_3D);
|
||||
iio_device_unregister(indio_dev);
|
||||
hid_sensor_remove_trigger(indio_dev, &gyro_state->common_attributes);
|
||||
kfree(indio_dev->channels);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -294,8 +294,8 @@ static int hid_als_probe(struct platform_device *pdev)
|
|||
return ret;
|
||||
}
|
||||
|
||||
indio_dev->channels = kmemdup(als_channels,
|
||||
sizeof(als_channels), GFP_KERNEL);
|
||||
indio_dev->channels = devm_kmemdup(&pdev->dev, als_channels,
|
||||
sizeof(als_channels), GFP_KERNEL);
|
||||
if (!indio_dev->channels) {
|
||||
dev_err(&pdev->dev, "failed to duplicate channels\n");
|
||||
return -ENOMEM;
|
||||
|
@ -306,7 +306,7 @@ static int hid_als_probe(struct platform_device *pdev)
|
|||
HID_USAGE_SENSOR_ALS, als_state);
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev, "failed to setup attributes\n");
|
||||
goto error_free_dev_mem;
|
||||
return ret;
|
||||
}
|
||||
|
||||
indio_dev->num_channels =
|
||||
|
@ -321,7 +321,7 @@ static int hid_als_probe(struct platform_device *pdev)
|
|||
&als_state->common_attributes);
|
||||
if (ret < 0) {
|
||||
dev_err(&pdev->dev, "trigger setup failed\n");
|
||||
goto error_free_dev_mem;
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = iio_device_register(indio_dev);
|
||||
|
@ -346,8 +346,6 @@ error_iio_unreg:
|
|||
iio_device_unregister(indio_dev);
|
||||
error_remove_trigger:
|
||||
hid_sensor_remove_trigger(indio_dev, &als_state->common_attributes);
|
||||
error_free_dev_mem:
|
||||
kfree(indio_dev->channels);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -361,7 +359,6 @@ static int hid_als_remove(struct platform_device *pdev)
|
|||
sensor_hub_remove_callback(hsdev, HID_USAGE_SENSOR_ALS);
|
||||
iio_device_unregister(indio_dev);
|
||||
hid_sensor_remove_trigger(indio_dev, &als_state->common_attributes);
|
||||
kfree(indio_dev->channels);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -253,8 +253,8 @@ static int hid_prox_probe(struct platform_device *pdev)
|
|||
return ret;
|
||||
}
|
||||
|
||||
indio_dev->channels = kmemdup(prox_channels, sizeof(prox_channels),
|
||||
GFP_KERNEL);
|
||||
indio_dev->channels = devm_kmemdup(&pdev->dev, prox_channels,
|
||||
sizeof(prox_channels), GFP_KERNEL);
|
||||
if (!indio_dev->channels) {
|
||||
dev_err(&pdev->dev, "failed to duplicate channels\n");
|
||||
return -ENOMEM;
|
||||
|
@ -265,7 +265,7 @@ static int hid_prox_probe(struct platform_device *pdev)
|
|||
HID_USAGE_SENSOR_PROX, prox_state);
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev, "failed to setup attributes\n");
|
||||
goto error_free_dev_mem;
|
||||
return ret;
|
||||
}
|
||||
|
||||
indio_dev->num_channels = ARRAY_SIZE(prox_channels);
|
||||
|
@ -279,7 +279,7 @@ static int hid_prox_probe(struct platform_device *pdev)
|
|||
&prox_state->common_attributes);
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev, "trigger setup failed\n");
|
||||
goto error_free_dev_mem;
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = iio_device_register(indio_dev);
|
||||
|
@ -304,8 +304,6 @@ error_iio_unreg:
|
|||
iio_device_unregister(indio_dev);
|
||||
error_remove_trigger:
|
||||
hid_sensor_remove_trigger(indio_dev, &prox_state->common_attributes);
|
||||
error_free_dev_mem:
|
||||
kfree(indio_dev->channels);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -319,7 +317,6 @@ static int hid_prox_remove(struct platform_device *pdev)
|
|||
sensor_hub_remove_callback(hsdev, HID_USAGE_SENSOR_PROX);
|
||||
iio_device_unregister(indio_dev);
|
||||
hid_sensor_remove_trigger(indio_dev, &prox_state->common_attributes);
|
||||
kfree(indio_dev->channels);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -326,8 +326,8 @@ static int hid_incl_3d_probe(struct platform_device *pdev)
|
|||
return ret;
|
||||
}
|
||||
|
||||
indio_dev->channels = kmemdup(incl_3d_channels,
|
||||
sizeof(incl_3d_channels), GFP_KERNEL);
|
||||
indio_dev->channels = devm_kmemdup(&pdev->dev, incl_3d_channels,
|
||||
sizeof(incl_3d_channels), GFP_KERNEL);
|
||||
if (!indio_dev->channels) {
|
||||
dev_err(&pdev->dev, "failed to duplicate channels\n");
|
||||
return -ENOMEM;
|
||||
|
@ -339,7 +339,7 @@ static int hid_incl_3d_probe(struct platform_device *pdev)
|
|||
incl_state);
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev, "failed to setup attributes\n");
|
||||
goto error_free_dev_mem;
|
||||
return ret;
|
||||
}
|
||||
|
||||
indio_dev->num_channels = ARRAY_SIZE(incl_3d_channels);
|
||||
|
@ -353,7 +353,7 @@ static int hid_incl_3d_probe(struct platform_device *pdev)
|
|||
&incl_state->common_attributes);
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev, "trigger setup failed\n");
|
||||
goto error_free_dev_mem;
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = iio_device_register(indio_dev);
|
||||
|
@ -379,8 +379,6 @@ error_iio_unreg:
|
|||
iio_device_unregister(indio_dev);
|
||||
error_remove_trigger:
|
||||
hid_sensor_remove_trigger(indio_dev, &incl_state->common_attributes);
|
||||
error_free_dev_mem:
|
||||
kfree(indio_dev->channels);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -394,7 +392,6 @@ static int hid_incl_3d_remove(struct platform_device *pdev)
|
|||
sensor_hub_remove_callback(hsdev, HID_USAGE_SENSOR_INCLINOMETER_3D);
|
||||
iio_device_unregister(indio_dev);
|
||||
hid_sensor_remove_trigger(indio_dev, &incl_state->common_attributes);
|
||||
kfree(indio_dev->channels);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -259,8 +259,8 @@ static int hid_press_probe(struct platform_device *pdev)
|
|||
return ret;
|
||||
}
|
||||
|
||||
indio_dev->channels = kmemdup(press_channels, sizeof(press_channels),
|
||||
GFP_KERNEL);
|
||||
indio_dev->channels = devm_kmemdup(&pdev->dev, press_channels,
|
||||
sizeof(press_channels), GFP_KERNEL);
|
||||
if (!indio_dev->channels) {
|
||||
dev_err(&pdev->dev, "failed to duplicate channels\n");
|
||||
return -ENOMEM;
|
||||
|
@ -271,7 +271,7 @@ static int hid_press_probe(struct platform_device *pdev)
|
|||
HID_USAGE_SENSOR_PRESSURE, press_state);
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev, "failed to setup attributes\n");
|
||||
goto error_free_dev_mem;
|
||||
return ret;
|
||||
}
|
||||
|
||||
indio_dev->num_channels =
|
||||
|
@ -286,7 +286,7 @@ static int hid_press_probe(struct platform_device *pdev)
|
|||
&press_state->common_attributes);
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev, "trigger setup failed\n");
|
||||
goto error_free_dev_mem;
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = iio_device_register(indio_dev);
|
||||
|
@ -311,8 +311,6 @@ error_iio_unreg:
|
|||
iio_device_unregister(indio_dev);
|
||||
error_remove_trigger:
|
||||
hid_sensor_remove_trigger(indio_dev, &press_state->common_attributes);
|
||||
error_free_dev_mem:
|
||||
kfree(indio_dev->channels);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -326,7 +324,6 @@ static int hid_press_remove(struct platform_device *pdev)
|
|||
sensor_hub_remove_callback(hsdev, HID_USAGE_SENSOR_PRESSURE);
|
||||
iio_device_unregister(indio_dev);
|
||||
hid_sensor_remove_trigger(indio_dev, &press_state->common_attributes);
|
||||
kfree(indio_dev->channels);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue