Loading drivers/leds/Makefile +2 −2 Original line number Diff line number Diff line Loading @@ -22,7 +22,7 @@ obj-$(CONFIG_LEDS_LM3642) += leds-lm3642.o obj-$(CONFIG_LEDS_MIKROTIK_RB532) += leds-rb532.o obj-$(CONFIG_LEDS_S3C24XX) += leds-s3c24xx.o obj-$(CONFIG_LEDS_NET48XX) += leds-net48xx.o obj-$(CONFIG_LEDS_QTI_FLASH) += leds-qti-flash.o obj-$(CONFIG_LEDS_QTI_FLASH) += leds-qti-flash.o leds-qpnp-flash-common.o obj-$(CONFIG_LEDS_WRAP) += leds-wrap.o obj-$(CONFIG_LEDS_COBALT_QUBE) += leds-cobalt-qube.o obj-$(CONFIG_LEDS_COBALT_RAQ) += leds-cobalt-raq.o Loading Loading @@ -80,7 +80,7 @@ obj-$(CONFIG_LEDS_LM3692X) += leds-lm3692x.o obj-$(CONFIG_LEDS_SC27XX_BLTC) += leds-sc27xx-bltc.o obj-$(CONFIG_LEDS_LM3601X) += leds-lm3601x.o obj-$(CONFIG_LEDS_QTI_TRI_LED) += leds-qti-tri-led.o obj-$(CONFIG_LEDS_QPNP_FLASH_V2) += leds-qpnp-flash-v2.o obj-$(CONFIG_LEDS_QPNP_FLASH_V2) += leds-qpnp-flash-v2.o leds-qpnp-flash-common.o obj-$(CONFIG_LEDS_QPNP_VIBRATOR_LDO) += leds-qpnp-vibrator-ldo.o # LED SPI Drivers Loading drivers/leds/leds-qpnp-flash-common.c 0 → 100644 +48 −0 Original line number Diff line number Diff line // SPDX-License-Identifier: GPL-2.0-only /* * Copyright (c) 2020, The Linux Foundation. All rights reserved. */ #include "leds.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; } 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); 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; } drivers/leds/leds-qpnp-flash-v2.c +9 −2 Original line number Diff line number Diff line // SPDX-License-Identifier: GPL-2.0-only /* * Copyright (c) 2016-2019, The Linux Foundation. All rights reserved. * Copyright (c) 2016-2020, The Linux Foundation. All rights reserved. */ #define pr_fmt(fmt) "flashv2: %s: " fmt, __func__ Loading Loading @@ -1762,7 +1762,7 @@ static int qpnp_flash_led_regulator_control(struct led_classdev *led_cdev, return 0; } int qpnp_flash_led_prepare(struct led_trigger *trig, int options, static int qpnp_flash_leds_prepare(struct led_trigger *trig, int options, int *max_current) { struct led_classdev *led_cdev; Loading Loading @@ -3116,6 +3116,13 @@ static int qpnp_flash_led_probe(struct platform_device *pdev) } } rc = qpnp_flash_register_led_prepare(&pdev->dev, qpnp_flash_leds_prepare); if (rc < 0) { pr_err("Failed to register flash_led_prepare, rc=%d\n", rc); goto sysfs_fail; } dev_set_drvdata(&pdev->dev, led); return 0; Loading drivers/leds/leds-qti-flash.c +6 −0 Original line number Diff line number Diff line Loading @@ -1205,6 +1205,12 @@ static int qti_flash_led_probe(struct platform_device *pdev) return rc; } rc = qpnp_flash_register_led_prepare(&pdev->dev, qti_flash_led_prepare); if (rc < 0) { pr_err("Failed to register flash_led_prepare, rc=%d\n", rc); return rc; } dev_set_drvdata(&pdev->dev, led); return 0; Loading include/linux/leds-qpnp-flash.h +5 −3 Original line number Diff line number Diff line /* SPDX-License-Identifier: GPL-2.0 */ /* * Copyright (c) 2016-2019, The Linux Foundation. All rights reserved. * Copyright (c) 2016-2020, The Linux Foundation. All rights reserved. */ #ifndef __LEDS_QPNP_FLASH_H Loading @@ -15,14 +15,16 @@ #define FLASH_LED_PREPARE_OPTIONS_MASK GENMASK(3, 0) #ifdef CONFIG_LEDS_QPNP_FLASH_V2 int qpnp_flash_register_led_prepare(struct device *dev, void *data); #if (defined CONFIG_LEDS_QTI_FLASH || defined CONFIG_LEDS_QPNP_FLASH_V2) int qpnp_flash_led_prepare(struct led_trigger *trig, int options, int *max_current); #else static inline int qpnp_flash_led_prepare(struct led_trigger *trig, int options, int *max_current) { return -EINVAL; return -ENODEV; } #endif Loading Loading
drivers/leds/Makefile +2 −2 Original line number Diff line number Diff line Loading @@ -22,7 +22,7 @@ obj-$(CONFIG_LEDS_LM3642) += leds-lm3642.o obj-$(CONFIG_LEDS_MIKROTIK_RB532) += leds-rb532.o obj-$(CONFIG_LEDS_S3C24XX) += leds-s3c24xx.o obj-$(CONFIG_LEDS_NET48XX) += leds-net48xx.o obj-$(CONFIG_LEDS_QTI_FLASH) += leds-qti-flash.o obj-$(CONFIG_LEDS_QTI_FLASH) += leds-qti-flash.o leds-qpnp-flash-common.o obj-$(CONFIG_LEDS_WRAP) += leds-wrap.o obj-$(CONFIG_LEDS_COBALT_QUBE) += leds-cobalt-qube.o obj-$(CONFIG_LEDS_COBALT_RAQ) += leds-cobalt-raq.o Loading Loading @@ -80,7 +80,7 @@ obj-$(CONFIG_LEDS_LM3692X) += leds-lm3692x.o obj-$(CONFIG_LEDS_SC27XX_BLTC) += leds-sc27xx-bltc.o obj-$(CONFIG_LEDS_LM3601X) += leds-lm3601x.o obj-$(CONFIG_LEDS_QTI_TRI_LED) += leds-qti-tri-led.o obj-$(CONFIG_LEDS_QPNP_FLASH_V2) += leds-qpnp-flash-v2.o obj-$(CONFIG_LEDS_QPNP_FLASH_V2) += leds-qpnp-flash-v2.o leds-qpnp-flash-common.o obj-$(CONFIG_LEDS_QPNP_VIBRATOR_LDO) += leds-qpnp-vibrator-ldo.o # LED SPI Drivers Loading
drivers/leds/leds-qpnp-flash-common.c 0 → 100644 +48 −0 Original line number Diff line number Diff line // SPDX-License-Identifier: GPL-2.0-only /* * Copyright (c) 2020, The Linux Foundation. All rights reserved. */ #include "leds.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; } 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); 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; }
drivers/leds/leds-qpnp-flash-v2.c +9 −2 Original line number Diff line number Diff line // SPDX-License-Identifier: GPL-2.0-only /* * Copyright (c) 2016-2019, The Linux Foundation. All rights reserved. * Copyright (c) 2016-2020, The Linux Foundation. All rights reserved. */ #define pr_fmt(fmt) "flashv2: %s: " fmt, __func__ Loading Loading @@ -1762,7 +1762,7 @@ static int qpnp_flash_led_regulator_control(struct led_classdev *led_cdev, return 0; } int qpnp_flash_led_prepare(struct led_trigger *trig, int options, static int qpnp_flash_leds_prepare(struct led_trigger *trig, int options, int *max_current) { struct led_classdev *led_cdev; Loading Loading @@ -3116,6 +3116,13 @@ static int qpnp_flash_led_probe(struct platform_device *pdev) } } rc = qpnp_flash_register_led_prepare(&pdev->dev, qpnp_flash_leds_prepare); if (rc < 0) { pr_err("Failed to register flash_led_prepare, rc=%d\n", rc); goto sysfs_fail; } dev_set_drvdata(&pdev->dev, led); return 0; Loading
drivers/leds/leds-qti-flash.c +6 −0 Original line number Diff line number Diff line Loading @@ -1205,6 +1205,12 @@ static int qti_flash_led_probe(struct platform_device *pdev) return rc; } rc = qpnp_flash_register_led_prepare(&pdev->dev, qti_flash_led_prepare); if (rc < 0) { pr_err("Failed to register flash_led_prepare, rc=%d\n", rc); return rc; } dev_set_drvdata(&pdev->dev, led); return 0; Loading
include/linux/leds-qpnp-flash.h +5 −3 Original line number Diff line number Diff line /* SPDX-License-Identifier: GPL-2.0 */ /* * Copyright (c) 2016-2019, The Linux Foundation. All rights reserved. * Copyright (c) 2016-2020, The Linux Foundation. All rights reserved. */ #ifndef __LEDS_QPNP_FLASH_H Loading @@ -15,14 +15,16 @@ #define FLASH_LED_PREPARE_OPTIONS_MASK GENMASK(3, 0) #ifdef CONFIG_LEDS_QPNP_FLASH_V2 int qpnp_flash_register_led_prepare(struct device *dev, void *data); #if (defined CONFIG_LEDS_QTI_FLASH || defined CONFIG_LEDS_QPNP_FLASH_V2) int qpnp_flash_led_prepare(struct led_trigger *trig, int options, int *max_current); #else static inline int qpnp_flash_led_prepare(struct led_trigger *trig, int options, int *max_current) { return -EINVAL; return -ENODEV; } #endif Loading