Hi Jacek,

On Fri, Mar 20, 2015 at 04:03:23PM +0100, Jacek Anaszewski wrote:
...
> +static int aat1290_led_probe(struct platform_device *pdev)
> +{
> +     struct device *dev = &pdev->dev;
> +     struct aat1290_led *led;
> +     struct led_classdev *led_cdev;
> +     struct led_classdev_flash *fled_cdev;
> +     struct aat1290_led_settings settings;
> +     int ret;
> +
> +     led = devm_kzalloc(dev, sizeof(*led), GFP_KERNEL);
> +     if (!led)
> +             return -ENOMEM;
> +
> +     led->pdev = pdev;
> +     platform_set_drvdata(pdev, led);
> +
> +     fled_cdev = &led->fled_cdev;
> +     led_cdev = &fled_cdev->led_cdev;
> +
> +     ret = aat1290_led_parse_dt(led);
> +     if (ret < 0)
> +             return ret;
> +
> +     if (!led_cdev->name)
> +             led_cdev->name = AAT1290_NAME;
> +
> +     /* Init flash settings */
> +     aat1290_init_flash_settings(led, &settings);
> +
> +     fled_cdev->timeout = settings.flash_timeout;
> +     fled_cdev->ops = &flash_ops;
> +
> +     /* Init LED class */
> +     led_cdev->brightness_set = aat1290_led_brightness_set;
> +     led_cdev->brightness_set_sync = aat1290_led_brightness_set_sync;
> +     led_cdev->max_brightness = AAT1290_MM_CURRENT_SCALE_SIZE;
> +     led_cdev->flags |= LED_DEV_CAP_FLASH;
> +
> +     INIT_WORK(&led->work_brightness_set, aat1290_brightness_set_work);
> +
> +     /* Register in the LED subsystem. */
> +     ret = led_classdev_flash_register(&pdev->dev, fled_cdev);
> +     if (ret < 0)
> +             return ret;
> +
> +     mutex_init(&led->lock);

I think you must initialise the mutex before led_classdev_flash_register(),
as this exposes the device to the user. Remember mutex_destroy() in error
handling.

> +     return 0;
> +}
> +
> +static int aat1290_led_remove(struct platform_device *pdev)
> +{
> +     struct aat1290_led *led = platform_get_drvdata(pdev);
> +
> +     led_classdev_flash_unregister(&led->fled_cdev);
> +     cancel_work_sync(&led->work_brightness_set);
> +
> +     mutex_destroy(&led->lock);
> +
> +     return 0;
> +}
> +
> +static const struct of_device_id aat1290_led_dt_match[] = {
> +     {.compatible = "skyworks,aat1290"},

{ .compatible ... 1290" },

With the two issues fixed,

Acked-by: Sakari Ailus <sakari.ai...@linux.intel.com>

> +     {},
> +};
> +
> +static struct platform_driver aat1290_led_driver = {
> +     .probe          = aat1290_led_probe,
> +     .remove         = aat1290_led_remove,
> +     .driver         = {
> +             .name   = "aat1290",
> +             .owner  = THIS_MODULE,
> +             .of_match_table = aat1290_led_dt_match,
> +     },
> +};
> +
> +module_platform_driver(aat1290_led_driver);
> +
> +MODULE_AUTHOR("Jacek Anaszewski <j.anaszew...@samsung.com>");
> +MODULE_DESCRIPTION("Skyworks Current Regulator for Flash LEDs");
> +MODULE_LICENSE("GPL v2");

-- 
Kind regards,

Sakari Ailus
e-mail: sakari.ai...@iki.fi     XMPP: sai...@retiisi.org.uk
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to