blob: 95a9f04c69fe5e3b8125389f56d6d04be92e3fa1 [file] [log] [blame]
// SPDX-License-Identifier: GPL-2.0-only
/*
* Copyright (c) 2020, The Linux Foundation. All rights reserved.
*/
#include "leds.h"
#include <linux/module.h>
struct flash_data {
struct list_head link;
struct device *dev;
int (*func)(struct led_trigger *trig, int options,
int *max_current);
};
static LIST_HEAD(flash_common_data);
int qpnp_flash_register_led_prepare(struct device *dev, void *data)
{
struct flash_data *flash_data;
flash_data = devm_kzalloc(dev, sizeof(struct flash_data),
GFP_KERNEL);
if (!flash_data)
return -ENOMEM;
flash_data->dev = dev;
flash_data->func = data;
list_add(&flash_data->link, &flash_common_data);
return 0;
}
EXPORT_SYMBOL_GPL(qpnp_flash_register_led_prepare);
int qpnp_flash_led_prepare(struct led_trigger *trig, int options,
int *max_current)
{
struct flash_data *flash_data;
struct led_classdev *led_cdev;
int rc = -ENODEV;
led_cdev = trigger_to_lcdev(trig);
if (!led_cdev)
return rc;
list_for_each_entry(flash_data, &flash_common_data, link) {
if (led_cdev->dev->parent == flash_data->dev)
rc = flash_data->func(trig, options, max_current);
}
return rc;
}
EXPORT_SYMBOL_GPL(qpnp_flash_led_prepare);
MODULE_DESCRIPTION("QPNP Flash LED common driver");
MODULE_LICENSE("GPL v2");
MODULE_ALIAS("leds:leds-qpnp-flash-common");