@@ -542,9 +542,10 @@ static const struct v4l2_subdev_ops v4l2_flash_subdev_ops = {
.core = &v4l2_flash_core_ops,
};
-struct v4l2_flash *v4l2_flash_init(struct led_classdev_flash *fled_cdev,
- const struct v4l2_flash_ops *ops,
- struct v4l2_flash_config *config)
+struct v4l2_flash *v4l2_flash_init(
+ struct device *dev, struct device_node *of_node,
+ struct led_classdev_flash *fled_cdev, const struct v4l2_flash_ops *ops,
+ struct v4l2_flash_config *config)
{
struct v4l2_flash *v4l2_flash;
struct led_classdev *led_cdev = &fled_cdev->led_cdev;
@@ -562,7 +563,8 @@ struct v4l2_flash *v4l2_flash_init(struct led_classdev_flash *fled_cdev,
sd = &v4l2_flash->sd;
v4l2_flash->fled_cdev = fled_cdev;
v4l2_flash->ops = ops;
- sd->dev = led_cdev->dev;
+ sd->dev = dev;
+ sd->of_node = of_node;
v4l2_subdev_init(sd, &v4l2_flash_subdev_ops);
sd->internal_ops = &v4l2_flash_subdev_internal_ops;
sd->flags |= V4L2_SUBDEV_FL_HAS_DEVNODE;
@@ -115,6 +115,8 @@ static inline struct v4l2_flash *v4l2_ctrl_to_v4l2_flash(struct v4l2_ctrl *c)
#if IS_ENABLED(CONFIG_V4L2_FLASH_LED_CLASS)
/**
* v4l2_flash_init - initialize V4L2 flash led sub-device
+ * @dev: flash device, e.g. an I2C device
+ * @of_node: of_node of the LED, may be NULL if the same as device's
* @fled_cdev: the LED Flash class device to wrap
* @flash_ops: V4L2 Flash device ops
* @config: initialization data for V4L2 Flash sub-device
@@ -125,9 +127,10 @@ static inline struct v4l2_flash *v4l2_ctrl_to_v4l2_flash(struct v4l2_ctrl *c)
* value is encoded using ERR_PTR(). Use IS_ERR() to check and
* PTR_ERR() to obtain the numeric return value.
*/
-struct v4l2_flash *v4l2_flash_init(struct led_classdev_flash *fled_cdev,
- const struct v4l2_flash_ops *ops,
- struct v4l2_flash_config *config);
+struct v4l2_flash *v4l2_flash_init(
+ struct device *dev, struct device_node *of_node,
+ struct led_classdev_flash *fled_cdev, const struct v4l2_flash_ops *ops,
+ struct v4l2_flash_config *config);
/**
* v4l2_flash_release - release V4L2 Flash sub-device
@@ -139,6 +142,7 @@ void v4l2_flash_release(struct v4l2_flash *v4l2_flash);
#else
static inline struct v4l2_flash *v4l2_flash_init(
+ struct device *dev, struct device_node *of_node,
struct led_classdev_flash *fled_cdev, const struct v4l2_flash_ops *ops,
struct v4l2_flash_config *config)
{
The V4L2 sub-device node's dev will thus refer to the physical device, not the LED flash device node. Also matching against device_node is possible in cases where the LED flash controller drives multiple LEDs. Signed-off-by: Sakari Ailus <sakari.ailus@iki.fi> --- drivers/media/v4l2-core/v4l2-flash.c | 10 ++++++---- include/media/v4l2-flash.h | 10 +++++++--- 2 files changed, 13 insertions(+), 7 deletions(-)