Lines Matching +full:led +full:-

1 // SPDX-License-Identifier: GPL-2.0-only
3 * leds-max8997.c - LED class driver for MAX8997 LEDs.
14 #include <linux/mfd/max8997-private.h>
47 static void max8997_led_set_mode(struct max8997_led *led, in max8997_led_set_mode() argument
51 struct i2c_client *client = led->iodev->i2c; in max8997_led_set_mode()
57 val = led->id ? in max8997_led_set_mode()
59 led->cdev.max_brightness = MAX8997_LED_FLASH_MAX_BRIGHTNESS; in max8997_led_set_mode()
63 val = led->id ? in max8997_led_set_mode()
65 led->cdev.max_brightness = MAX8997_LED_MOVIE_MAX_BRIGHTNESS; in max8997_led_set_mode()
70 val = led->id ? in max8997_led_set_mode()
72 led->cdev.max_brightness = MAX8997_LED_FLASH_MAX_BRIGHTNESS; in max8997_led_set_mode()
77 val = led->id ? in max8997_led_set_mode()
79 led->cdev.max_brightness = MAX8997_LED_MOVIE_MAX_BRIGHTNESS; in max8997_led_set_mode()
82 led->cdev.max_brightness = MAX8997_LED_NONE_MAX_BRIGHTNESS; in max8997_led_set_mode()
90 dev_err(led->iodev->dev, in max8997_led_set_mode()
94 led->led_mode = mode; in max8997_led_set_mode()
97 static void max8997_led_enable(struct max8997_led *led, bool enable) in max8997_led_enable() argument
100 struct i2c_client *client = led->iodev->i2c; in max8997_led_enable()
103 if (led->enabled == enable) in max8997_led_enable()
110 dev_err(led->iodev->dev, in max8997_led_enable()
113 led->enabled = enable; in max8997_led_enable()
116 static void max8997_led_set_current(struct max8997_led *led, in max8997_led_set_current() argument
120 struct i2c_client *client = led->iodev->i2c; in max8997_led_set_current()
123 switch (led->led_mode) { in max8997_led_set_current()
128 reg = led->id ? MAX8997_REG_FLASH2_CUR : MAX8997_REG_FLASH1_CUR; in max8997_led_set_current()
143 dev_err(led->iodev->dev, in max8997_led_set_current()
151 struct max8997_led *led = in max8997_led_brightness_set() local
155 max8997_led_set_current(led, value); in max8997_led_brightness_set()
156 max8997_led_enable(led, true); in max8997_led_brightness_set()
158 max8997_led_set_current(led, value); in max8997_led_brightness_set()
159 max8997_led_enable(led, false); in max8997_led_brightness_set()
167 struct max8997_led *led = in mode_show() local
171 mutex_lock(&led->mutex); in mode_show()
173 switch (led->led_mode) { in mode_show()
191 mutex_unlock(&led->mutex); in mode_show()
201 struct max8997_led *led = in mode_store() local
205 mutex_lock(&led->mutex); in mode_store()
218 max8997_led_set_mode(led, mode); in mode_store()
220 mutex_unlock(&led->mutex); in mode_store()
235 struct max8997_dev *iodev = dev_get_drvdata(pdev->dev.parent); in max8997_led_probe()
236 struct max8997_platform_data *pdata = dev_get_platdata(iodev->dev); in max8997_led_probe()
237 struct max8997_led *led; in max8997_led_probe() local
241 led = devm_kzalloc(&pdev->dev, sizeof(*led), GFP_KERNEL); in max8997_led_probe()
242 if (led == NULL) in max8997_led_probe()
243 return -ENOMEM; in max8997_led_probe()
245 led->id = pdev->id; in max8997_led_probe()
246 snprintf(name, sizeof(name), "max8997-led%d", pdev->id); in max8997_led_probe()
248 led->cdev.name = name; in max8997_led_probe()
249 led->cdev.brightness_set = max8997_led_brightness_set; in max8997_led_probe()
250 led->cdev.flags |= LED_CORE_SUSPENDRESUME; in max8997_led_probe()
251 led->cdev.brightness = 0; in max8997_led_probe()
252 led->cdev.groups = max8997_groups; in max8997_led_probe()
253 led->iodev = iodev; in max8997_led_probe()
256 if (pdata && pdata->led_pdata) { in max8997_led_probe()
259 mode = pdata->led_pdata->mode[led->id]; in max8997_led_probe()
260 brightness = pdata->led_pdata->brightness[led->id]; in max8997_led_probe()
262 max8997_led_set_mode(led, mode); in max8997_led_probe()
264 if (brightness > led->cdev.max_brightness) in max8997_led_probe()
265 brightness = led->cdev.max_brightness; in max8997_led_probe()
266 max8997_led_set_current(led, brightness); in max8997_led_probe()
267 led->cdev.brightness = brightness; in max8997_led_probe()
269 max8997_led_set_mode(led, MAX8997_NONE); in max8997_led_probe()
270 max8997_led_set_current(led, 0); in max8997_led_probe()
273 mutex_init(&led->mutex); in max8997_led_probe()
275 ret = devm_led_classdev_register(&pdev->dev, &led->cdev); in max8997_led_probe()
284 .name = "max8997-led",
292 MODULE_DESCRIPTION("MAX8997 LED driver");
294 MODULE_ALIAS("platform:max8997-led");