| .. | .. |
|---|
| 1 | +// SPDX-License-Identifier: GPL-2.0-only |
|---|
| 1 | 2 | /* |
|---|
| 2 | 3 | * LED Flash class driver for the AAT1290 |
|---|
| 3 | 4 | * 1.5A Step-Up Current Regulator for Flash LEDs |
|---|
| 4 | 5 | * |
|---|
| 5 | 6 | * Copyright (C) 2015, Samsung Electronics Co., Ltd. |
|---|
| 6 | 7 | * Author: Jacek Anaszewski <j.anaszewski@samsung.com> |
|---|
| 7 | | - * |
|---|
| 8 | | - * This program is free software; you can redistribute it and/or |
|---|
| 9 | | - * modify it under the terms of the GNU General Public License |
|---|
| 10 | | - * version 2 as published by the Free Software Foundation. |
|---|
| 11 | 8 | */ |
|---|
| 12 | 9 | |
|---|
| 13 | 10 | #include <linux/delay.h> |
|---|
| .. | .. |
|---|
| 45 | 42 | #define AAT1290_FLASH_TM_NUM_LEVELS 16 |
|---|
| 46 | 43 | #define AAT1290_MM_CURRENT_SCALE_SIZE 15 |
|---|
| 47 | 44 | |
|---|
| 45 | +#define AAT1290_NAME "aat1290" |
|---|
| 46 | + |
|---|
| 48 | 47 | |
|---|
| 49 | 48 | struct aat1290_led_config_data { |
|---|
| 50 | 49 | /* maximum LED current in movie mode */ |
|---|
| .. | .. |
|---|
| 78 | 77 | int *mm_current_scale; |
|---|
| 79 | 78 | /* device mode */ |
|---|
| 80 | 79 | bool movie_mode; |
|---|
| 81 | | - |
|---|
| 82 | 80 | /* brightness cache */ |
|---|
| 83 | 81 | unsigned int torch_brightness; |
|---|
| 84 | 82 | }; |
|---|
| .. | .. |
|---|
| 218 | 216 | struct aat1290_led_config_data *cfg, |
|---|
| 219 | 217 | struct device_node **sub_node) |
|---|
| 220 | 218 | { |
|---|
| 221 | | - struct led_classdev *led_cdev = &led->fled_cdev.led_cdev; |
|---|
| 222 | 219 | struct device *dev = &led->pdev->dev; |
|---|
| 223 | 220 | struct device_node *child_node; |
|---|
| 224 | 221 | #if IS_ENABLED(CONFIG_V4L2_FLASH_LED_CLASS) |
|---|
| .. | .. |
|---|
| 251 | 248 | } |
|---|
| 252 | 249 | #endif |
|---|
| 253 | 250 | |
|---|
| 254 | | - child_node = of_get_next_available_child(dev->of_node, NULL); |
|---|
| 251 | + child_node = of_get_next_available_child(dev_of_node(dev), NULL); |
|---|
| 255 | 252 | if (!child_node) { |
|---|
| 256 | 253 | dev_err(dev, "No DT child node found for connected LED.\n"); |
|---|
| 257 | 254 | return -EINVAL; |
|---|
| 258 | 255 | } |
|---|
| 259 | | - |
|---|
| 260 | | - led_cdev->name = of_get_property(child_node, "label", NULL) ? : |
|---|
| 261 | | - child_node->name; |
|---|
| 262 | 256 | |
|---|
| 263 | 257 | ret = of_property_read_u32(child_node, "led-max-microamp", |
|---|
| 264 | 258 | &cfg->max_mm_current); |
|---|
| .. | .. |
|---|
| 431 | 425 | struct led_classdev *led_cdev = &led->fled_cdev.led_cdev; |
|---|
| 432 | 426 | struct led_flash_setting *s; |
|---|
| 433 | 427 | |
|---|
| 434 | | - strlcpy(v4l2_sd_cfg->dev_name, led_cdev->name, |
|---|
| 428 | + strlcpy(v4l2_sd_cfg->dev_name, led_cdev->dev->kobj.name, |
|---|
| 435 | 429 | sizeof(v4l2_sd_cfg->dev_name)); |
|---|
| 436 | 430 | |
|---|
| 437 | 431 | s = &v4l2_sd_cfg->intensity; |
|---|
| .. | .. |
|---|
| 469 | 463 | struct aat1290_led *led; |
|---|
| 470 | 464 | struct led_classdev *led_cdev; |
|---|
| 471 | 465 | struct led_classdev_flash *fled_cdev; |
|---|
| 466 | + struct led_init_data init_data = {}; |
|---|
| 472 | 467 | struct aat1290_led_config_data led_cfg = {}; |
|---|
| 473 | 468 | struct v4l2_flash_config v4l2_sd_cfg = {}; |
|---|
| 474 | 469 | int ret; |
|---|
| .. | .. |
|---|
| 497 | 492 | |
|---|
| 498 | 493 | aat1290_init_flash_timeout(led, &led_cfg); |
|---|
| 499 | 494 | |
|---|
| 495 | + init_data.fwnode = of_fwnode_handle(sub_node); |
|---|
| 496 | + init_data.devicename = AAT1290_NAME; |
|---|
| 497 | + |
|---|
| 500 | 498 | /* Register LED Flash class device */ |
|---|
| 501 | | - ret = led_classdev_flash_register(&pdev->dev, fled_cdev); |
|---|
| 499 | + ret = led_classdev_flash_register_ext(&pdev->dev, fled_cdev, |
|---|
| 500 | + &init_data); |
|---|
| 502 | 501 | if (ret < 0) |
|---|
| 503 | 502 | goto err_flash_register; |
|---|
| 504 | 503 | |
|---|