[alsa-devel] [PATCH 2/4] Input - arizona-haptics: Add driver haptics module on Arizona CODECs

Dmitry Torokhov dmitry.torokhov at gmail.com
Tue Nov 27 10:08:20 CET 2012


On Tue, Nov 27, 2012 at 07:08:06AM +0000, Mark Brown wrote:
> +
> +static int arizona_haptics_probe(struct platform_device *pdev)
> +{
> +	struct arizona *arizona = dev_get_drvdata(pdev->dev.parent);
> +	struct arizona_haptics *haptics;
> +	int ret;
> +
> +	haptics = kzalloc(sizeof(*haptics), GFP_KERNEL);
> +	if (!haptics)
> +		return -ENOMEM;
> +
> +	haptics->arizona = arizona;
> +
> +	ret = regmap_update_bits(arizona->regmap, ARIZONA_HAPTICS_CONTROL_1,
> +				 ARIZONA_HAP_ACT, arizona->pdata.hap_act);
> +	if (ret != 0) {
> +		dev_err(arizona->dev, "Failed to set haptics actuator: %d\n",
> +			ret);

Leaking haptics memory.

> +		return ret;
> +	}
> +
> +	INIT_WORK(&haptics->work, arizona_haptics_work);
> +
> +	haptics->input_dev = input_allocate_device();
> +	if (haptics->input_dev == NULL) {
> +		dev_err(arizona->dev, "Failed to allocate input device\n");

Leaking haptics memory again.

> +		return -ENOMEM;
> +	}
> +
> +	input_set_drvdata(haptics->input_dev, haptics);
> +
> +	haptics->input_dev->name = "arizona:haptics";
> +	haptics->input_dev->dev.parent = pdev->dev.parent;
> +	haptics->input_dev->close = arizona_haptics_close;
> +	__set_bit(FF_RUMBLE, haptics->input_dev->ffbit);
> +
> +	ret = input_ff_create_memless(haptics->input_dev, NULL,
> +				      arizona_haptics_play);
> +	if (ret < 0) {
> +		dev_err(arizona->dev, "input_ff_create_memless() failed: %d\n",
> +			ret);
> +		goto err_ialloc;
> +	}
> +
> +	ret = input_register_device(haptics->input_dev);
> +	if (ret < 0) {
> +		dev_err(arizona->dev, "couldn't register input device: %d\n",
> +			ret);
> +		goto err_iff;
> +	}
> +
> +	platform_set_drvdata(pdev, haptics);
> +
> +	return 0;
> +
> +err_iff:
> +	if (haptics->input_dev)
> +		input_ff_destroy(haptics->input_dev);
> +err_ialloc:
> +	input_free_device(haptics->input_dev);

You are leaking haptics memory here.
> +
> +	return ret;
> +}
> +
> +static int arizona_haptics_remove(struct platform_device *pdev)
> +{
> +	struct arizona_haptics *haptics = platform_get_drvdata(pdev);
> +
> +	input_unregister_device(haptics->input_dev);
> +

And here as well.

> +	return 0;
> +}
> +

Thanks.

-- 
Dmitry


More information about the Alsa-devel mailing list