cregit-Linux how code gets into the kernel

Release 4.12 include/media/v4l2-flash-led-class.h

Directory: include/media
/*
 * V4L2 flash LED sub-device registration helpers.
 *
 *      Copyright (C) 2015 Samsung Electronics Co., Ltd
 *      Author: Jacek Anaszewski <j.anaszewski@samsung.com>
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
 */

#ifndef _V4L2_FLASH_H

#define _V4L2_FLASH_H

#include <media/v4l2-ctrls.h>
#include <media/v4l2-subdev.h>

struct led_classdev_flash;
struct led_classdev;
struct v4l2_flash;
enum led_brightness;

/**
 * struct v4l2_flash_ctrl_data - flash control initialization data, filled
 *                              basing on the features declared by the LED flash
 *                              class driver in the v4l2_flash_config
 * @config:     initialization data for a control
 * @cid:        contains v4l2 flash control id if the config
 *              field was initialized, 0 otherwise
 */

struct v4l2_flash_ctrl_data {
	
struct v4l2_ctrl_config config;
	
u32 cid;
};

/**
 * struct v4l2_flash_ops - V4L2 flash operations
 *
 * @external_strobe_set: Setup strobing the flash by hardware pin state
 *      assertion.
 * @intensity_to_led_brightness: Convert intensity to brightness in a device
 *      specific manner
 * @led_brightness_to_intensity: convert brightness to intensity in a device
 *      specific manner.
 */

struct v4l2_flash_ops {
	
int (*external_strobe_set)(struct v4l2_flash *v4l2_flash,
					bool enable);
	
enum led_brightness (*intensity_to_led_brightness)
		(struct v4l2_flash *v4l2_flash, s32 intensity);
	
s32 (*led_brightness_to_intensity)
		(struct v4l2_flash *v4l2_flash, enum led_brightness);
};

/**
 * struct v4l2_flash_config - V4L2 Flash sub-device initialization data
 * @dev_name:                   the name of the media entity,
 *                              unique in the system
 * @torch_intensity:            constraints for the LED in torch mode
 * @indicator_intensity:        constraints for the indicator LED
 * @flash_faults:               bitmask of flash faults that the LED flash class
 *                              device can report; corresponding LED_FAULT* bit
 *                              definitions are available in the header file
 *                              <linux/led-class-flash.h>
 * @has_external_strobe:        external strobe capability
 */

struct v4l2_flash_config {
	
char dev_name[32];
	
struct led_flash_setting torch_intensity;
	
struct led_flash_setting indicator_intensity;
	
u32 flash_faults;
	
unsigned int has_external_strobe:1;
};

/**
 * struct v4l2_flash - Flash sub-device context
 * @fled_cdev:          LED flash class device controlled by this sub-device
 * @iled_cdev:          LED class device representing indicator LED associated
 *                      with the LED flash class device
 * @ops:                V4L2 specific flash ops
 * @sd:                 V4L2 sub-device
 * @hdl:                flash controls handler
 * @ctrls:              array of pointers to controls, whose values define
 *                      the sub-device state
 */

struct v4l2_flash {
	
struct led_classdev_flash *fled_cdev;
	
struct led_classdev_flash *iled_cdev;
	
const struct v4l2_flash_ops *ops;

	
struct v4l2_subdev sd;
	
struct v4l2_ctrl_handler hdl;
	
struct v4l2_ctrl **ctrls;
};


static inline struct v4l2_flash *v4l2_subdev_to_v4l2_flash( struct v4l2_subdev *sd) { return container_of(sd, struct v4l2_flash, sd); }

Contributors

PersonTokensPropCommitsCommitProp
Jacek Anaszewski25100.00%1100.00%
Total25100.00%1100.00%


static inline struct v4l2_flash *v4l2_ctrl_to_v4l2_flash(struct v4l2_ctrl *c) { return container_of(c->handler, struct v4l2_flash, hdl); }

Contributors

PersonTokensPropCommitsCommitProp
Jacek Anaszewski27100.00%1100.00%
Total27100.00%1100.00%

#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: LED flash class device to wrap * @iled_cdev: LED flash class device representing indicator LED associated * with fled_cdev, may be NULL * @ops: V4L2 Flash device ops * @config: initialization data for V4L2 Flash sub-device * * Create V4L2 Flash sub-device wrapping given LED subsystem device. * * Returns: A valid pointer, or, when an error occurs, the return * 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 device *dev, struct device_node *of_node, struct led_classdev_flash *fled_cdev, struct led_classdev_flash *iled_cdev, const struct v4l2_flash_ops *ops, struct v4l2_flash_config *config); /** * v4l2_flash_release - release V4L2 Flash sub-device * @v4l2_flash: the V4L2 Flash sub-device to release * * Release V4L2 Flash sub-device. */ 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, struct led_classdev_flash *iled_cdev, const struct v4l2_flash_ops *ops, struct v4l2_flash_config *config) { return NULL; }

Contributors

PersonTokensPropCommitsCommitProp
Jacek Anaszewski43100.00%1100.00%
Total43100.00%1100.00%


static inline void v4l2_flash_release(struct v4l2_flash *v4l2_flash) { }

Contributors

PersonTokensPropCommitsCommitProp
Jacek Anaszewski11100.00%1100.00%
Total11100.00%1100.00%

#endif /* CONFIG_V4L2_FLASH_LED_CLASS */ #endif /* _V4L2_FLASH_H */

Overall Contributors

PersonTokensPropCommitsCommitProp
Jacek Anaszewski31898.45%133.33%
Mauro Carvalho Chehab51.55%266.67%
Total323100.00%3100.00%
Directory: include/media
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
Created with cregit.