<snip>
>> +static const struct iio_info sony_iio_info = {
>> + .read_raw = &sony_iio_read_raw,
>> + .driver_module = THIS_MODULE,
>> +};
>> +
>> +static int sony_iio_probe(struct sony_sc *sc)
>> +{
>> + struct hid_device *hdev = sc->hdev;
>> + struct iio_dev *indio_dev;
>> + struct sony_iio *data;
>> + int ret;
>> +
>> + indio_dev = iio_device_alloc(sizeof(*data));
>
> In general for new code the devm_ variants are preferred, but I am
> not sure in this case, maybe others have comments about that?
>
>> + if (!indio_dev)
>> + return -ENOMEM;
>> +
>> + sc->indio_dev = indio_dev;
>> + data = iio_priv(indio_dev);
>> + data->sc = sc;
>> +
>> + indio_dev->dev.parent = &hdev->dev;
>> + indio_dev->name = dev_name(&hdev->dev);
>> + indio_dev->modes = INDIO_DIRECT_MODE;
>> + indio_dev->info = &sony_iio_info;
>> + indio_dev->channels = sony_sixaxis_channels;
>> + indio_dev->num_channels = 3;
Use ARRAY_SIZE(sony_sixaxis_channels) here.
>> +
>> + ret = iio_device_register(indio_dev);
>
> if you used the devm_ variant here and in the other patches, the cleanup
> below and the sony_iio_remove() function could go away.
>
>> + if (ret < 0) {
>> + hid_err(hdev, "Unable to register iio device\n");
>> + goto err;
>> + }
>> + return 0;
>> +
>> +err:
>> + kfree(indio_dev);
Not to mention that the correct way to free an iio_dev is iio_device_free.
>> + sc->indio_dev = NULL;
>> + return ret;
>> +}
>> +
>> +static void sony_iio_remove(struct sony_sc *sc)
>> +{
>> + if (!sc->indio_dev)
>> + return;
>> +
>> + iio_device_unregister(sc->indio_dev);
>> + kfree(sc->indio_dev);
The same here.
>> + sc->indio_dev = NULL;
>> +}
So, better use the devm_ variant at least for indio_dev allocation.
thanks,
Daniel.
--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html