/* * LED Flash class interface * * Copyright (C) 2015 Samsung Electronics Co., Ltd. * Author: Jacek Anaszewski * * 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 __LINUX_FLASH_LEDS_H_INCLUDED #define __LINUX_FLASH_LEDS_H_INCLUDED #include struct device_node; struct led_classdev_flash; /* * Supported led fault bits - must be kept in synch * with V4L2_FLASH_FAULT bits. */ #define LED_FAULT_OVER_VOLTAGE (1 << 0) #define LED_FAULT_TIMEOUT (1 << 1) #define LED_FAULT_OVER_TEMPERATURE (1 << 2) #define LED_FAULT_SHORT_CIRCUIT (1 << 3) #define LED_FAULT_OVER_CURRENT (1 << 4) #define LED_FAULT_INDICATOR (1 << 5) #define LED_FAULT_UNDER_VOLTAGE (1 << 6) #define LED_FAULT_INPUT_VOLTAGE (1 << 7) #define LED_FAULT_LED_OVER_TEMPERATURE (1 << 8) #define LED_NUM_FLASH_FAULTS 9 #define LED_FLASH_SYSFS_GROUPS_SIZE 5 struct led_flash_ops { /* set flash brightness */ int (*flash_brightness_set)(struct led_classdev_flash *fled_cdev, u32 brightness); /* get flash brightness */ int (*flash_brightness_get)(struct led_classdev_flash *fled_cdev, u32 *brightness); /* set flash strobe state */ int (*strobe_set)(struct led_classdev_flash *fled_cdev, bool state); /* get flash strobe state */ int (*strobe_get)(struct led_classdev_flash *fled_cdev, bool *state); /* set flash timeout */ int (*timeout_set)(struct led_classdev_flash *fled_cdev, u32 timeout); /* get the flash LED fault */ int (*fault_get)(struct led_classdev_flash *fled_cdev, u32 *fault); }; /* * Current value of a flash setting along * with its constraints. */ struct led_flash_setting { /* maximum allowed value */ u32 min; /* maximum allowed value */ u32 max; /* step value */ u32 step; /* current value */ u32 val; }; struct led_classdev_flash { /* led class device */ struct led_classdev led_cdev; /* flash led specific ops */ const struct led_flash_ops *ops; /* flash brightness value in microamperes along with its constraints */ struct led_flash_setting brightness; /* flash timeout value in microseconds along with its constraints */ struct led_flash_setting timeout; /* LED Flash class sysfs groups */ const struct attribute_group *sysfs_groups[LED_FLASH_SYSFS_GROUPS_SIZE]; }; static inline struct led_classdev_flash *lcdev_to_flcdev( struct led_classdev *lcdev) { return container_of(lcdev, struct led_classdev_flash, led_cdev); } /** * led_classdev_flash_register - register a new object of led_classdev class * with support for flash LEDs * @parent: the flash LED to register * @fled_cdev: the led_classdev_flash structure for this device * * Returns: 0 on success or negative error value on failure */ extern int led_classdev_flash_register(struct device *parent, struct led_classdev_flash *fled_cdev); /** * led_classdev_flash_unregister - unregisters an object of led_classdev class * with support for flash LEDs * @fled_cdev: the flash LED to unregister * * Unregister a previously registered via led_classdev_flash_register object */ extern void led_classdev_flash_unregister(struct led_classdev_flash *fled_cdev); /** * led_set_flash_strobe - setup flash strobe * @fled_cdev: the flash LED to set strobe on * @state: 1 - strobe flash, 0 - stop flash strobe * * Strobe the flash LED. * * Returns: 0 on success or negative error value on failure */ static inline int led_set_flash_strobe(struct led_classdev_flash *fled_cdev, bool state) { if (!fled_cdev) return -EINVAL; return fled_cdev->ops->strobe_set(fled_cdev, state); } /** * led_get_flash_strobe - get flash strobe status * @fled_cdev: the flash LED to query * @state: 1 - flash is strobing, 0 - flash is off * * Check whether the flash is strobing at the moment. * * Returns: 0 on success or negative error value on failure */ static inline int led_get_flash_strobe(struct led_classdev_flash *fled_cdev, bool *state) { if (!fled_cdev) return -EINVAL; if (fled_cdev->ops->strobe_get) return fled_cdev->ops->strobe_get(fled_cdev, state); return -EINVAL; } /** * led_set_flash_brightness - set flash LED brightness * @fled_cdev: the flash LED to set * @brightness: the brightness to set it to * * Set a flash LED's brightness. * * Returns: 0 on success or negative error value on failure */ extern int led_set_flash_brightness(struct led_classdev_flash *fled_cdev, u32 brightness); /** * led_update_flash_brightness - update flash LED brightness * @fled_cdev: the flash LED to query * * Get a flash LED's current brightness and update led_flash->brightness * member with the obtained value. * * Returns: 0 on success or negative error value on failure */ extern int led_update_flash_brightness(struct led_classdev_flash *fled_cdev); /** * led_set_flash_timeout - set flash LED timeout * @fled_cdev: the flash LED to set * @timeout: the flash timeout to set it to * * Set the flash strobe duration. * * Returns: 0 on success or negative error value on failure */ extern int led_set_flash_timeout(struct led_classdev_flash *fled_cdev, u32 timeout); /** * led_get_flash_fault - get the flash LED fault * @fled_cdev: the flash LED to query * @fault: bitmask containing flash faults * * Get the flash LED fault. * * Returns: 0 on success or negative error value on failure */ extern int led_get_flash_fault(struct led_classdev_flash *fled_cdev, u32 *fault); #endif /* __LINUX_FLASH_LEDS_H_INCLUDED */ icense identifier, the file was flagged for further research and to be revisited later in time. In total, over 70 hours of logged manual review was done on the spreadsheet to determine the SPDX license identifiers to apply to the source files by Kate, Philippe, Thomas and, in some cases, confirmation by lawyers working with the Linux Foundation. Kate also obtained a third independent scan of the 4.13 code base from FOSSology, and compared selected files where the other two scanners disagreed against that SPDX file, to see if there was new insights. The Windriver scanner is based on an older version of FOSSology in part, so they are related. Thomas did random spot checks in about 500 files from the spreadsheets for the uapi headers and agreed with SPDX license identifier in the files he inspected. For the non-uapi files Thomas did random spot checks in about 15000 files. In initial set of patches against 4.14-rc6, 3 files were found to have copy/paste license identifier errors, and have been fixed to reflect the correct identifier. Additionally Philippe spent 10 hours this week doing a detailed manual inspection and review of the 12,461 patched files from the initial patch version early this week with: - a full scancode scan run, collecting the matched texts, detected license ids and scores - reviewing anything where there was a license detected (about 500+ files) to ensure that the applied SPDX license was correct - reviewing anything where there was no detection but the patch license was not GPL-2.0 WITH Linux-syscall-note to ensure that the applied SPDX license was correct This produced a worksheet with 20 files needing minor correction. This worksheet was then exported into 3 different .csv files for the different types of files to be modified. These .csv files were then reviewed by Greg. Thomas wrote a script to parse the csv files and add the proper SPDX tag to the file, in the format that the file expected. This script was further refined by Greg based on the output to detect more types of files automatically and to distinguish between header and source .c files (which need different comment types.) Finally Greg ran the script using the .csv files to generate the patches. Reviewed-by: Kate Stewart <kstewart@linuxfoundation.org> Reviewed-by: Philippe Ombredanne <pombredanne@nexb.com> Reviewed-by: Thomas Gleixner <tglx@linutronix.de> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> mfd: syscon: Add platform data with a regmap config name 2014-05-15T16:02:19Z Pawel Moll pawel.moll@arm.com 2014-02-12T10:47:10Z urn:sha1:29f9b6cf7bff6a118130163c848811e14f8022da Define syscon platform data structure that can be used to define a regmap config name. This is particularly useful in the regmap debugfs when there is more than one syscon device registered, to distinguish the register blocks. Signed-off-by: Pawel Moll <pawel.moll@arm.com> Acked-by: Lee Jones <lee.jones@linaro.org>