diff options
| author | Yuval Adam <_@yuv.al> | 2017-08-30 08:25:59 +0000 |
|---|---|---|
| committer | Yuval Adam <_@yuv.al> | 2017-08-30 08:25:59 +0000 |
| commit | 8e4bff4cab0ddac6060645b0715210484d02ff40 (patch) | |
| tree | 3a5c3024371a04692a3a6d9974d001cdff8ebf84 /include/linux/leds/flashlight.h | |
Diffstat (limited to 'include/linux/leds/flashlight.h')
| -rw-r--r-- | include/linux/leds/flashlight.h | 134 |
1 files changed, 134 insertions, 0 deletions
diff --git a/include/linux/leds/flashlight.h b/include/linux/leds/flashlight.h new file mode 100644 index 00000000..34fedd48 --- /dev/null +++ b/include/linux/leds/flashlight.h @@ -0,0 +1,134 @@ +/* include/linux/leds/flashlight.h + * Header of Flashlight Class Device Driver + * + * Copyright (C) 2013 Richtek Technology Corp. + * Patrick Chang <patrick_chang@richtek.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 LINUX_LEDS_FLASHLIGHT_H +#define LINUX_LEDS_FLASHLIGHT_H + +#include <linux/device.h> +#include <linux/mutex.h> + + +typedef enum flashlight_type { + FLASHLIGHT_TYPE_XENON = 0, + FLASHLIGHT_TYPE_LED, + FLASHLIFHT_TYPE_BULB, + FLASHLIGHT_TYPE_MAX, +} flashlight_type_t; +typedef enum flashlight_mode { + FLASHLIGHT_MODE_OFF = 0, + FLASHLIGHT_MODE_TORCH, + FLASHLIGHT_MODE_FLASH, + /* MIXED mode means TORCH + FLASH */ + FLASHLIGHT_MODE_MIXED, + FLASHLIGHT_MODE_MAX, +} flashlight_mode_t; + +struct flashlight_device; + +typedef int (*flashlight_charge_event_cb)(void *data, int remains); + +struct flashlight_ops { + int (*set_torch_brightness)(struct flashlight_device *, int); + int (*set_strobe_brightness)(struct flashlight_device *, int); + int (*set_strobe_timeout)(struct flashlight_device *, int); + int (*list_strobe_timeout)(struct flashlight_device *, int); + int (*set_mode)(struct flashlight_device *, int); + int (*set_color_temperature)(struct flashlight_device *, int); + int (*list_color_temperature)(struct flashlight_device *, int); + int (*strobe_charge)(struct flashlight_device *, + flashlight_charge_event_cb, void *, int); + int (*strobe)(struct flashlight_device *); + int (*suspend)(struct flashlight_device *, pm_message_t); + int (*resume)(struct flashlight_device *); +}; + +struct flashlight_properties { + /* Flashlight type */ + enum flashlight_type type; + /* Xenon type flashlight doesn't support torch mode */ + enum flashlight_mode mode; + /* Color temperature, unit: K, 0 means unknown */ + int color_temperature; + int torch_brightness; + int torch_max_brightness; + int strobe_brightness; + int strobe_max_brightness; + int strobe_delay; + int strobe_timeout; + const char *alias_name; +}; + +struct flashlight_device { + /* Flashlight properties */ + struct flashlight_properties props; + const struct flashlight_ops *ops; + struct mutex ops_lock; + struct device dev; +}; + + +extern struct flashlight_device *flashlight_device_register(const char *name, + struct device *parent, void *devdata, const struct flashlight_ops *ops, + const struct flashlight_properties *props); +extern void flashlight_device_unregister(struct flashlight_device *flashlight_dev); +extern struct flashlight_device *find_flashlight_by_name(char *name); +extern int flashlight_list_color_temperature( + struct flashlight_device *flashlight_dev, + int selector); +extern int flashlight_set_color_temperature( + struct flashlight_device *flashlight_dev, + int minK, int maxK); +extern int flashlight_set_torch_brightness( + struct flashlight_device *flashlight_dev, + int brightness_level); +extern int flashlight_set_strobe_brightness( + struct flashlight_device *flashlight_dev, + int brightness_level); +extern int flashlight_list_strobe_timeout( + struct flashlight_device *flashlight_dev, + int selector); +extern int flashlight_set_strobe_timeout( + struct flashlight_device *flashlight_dev, + int min_ms, int max_ms); +extern int flashlight_set_mode(struct flashlight_device *flashlight_dev, + int mode); + +extern int flashlight_strobe(struct flashlight_device *flashlight_dev); + +/* flashlight_charge_event_cb(void *data, int remains) + * description : + * callback function of flashlight charging progress + * arguments : + * @data : data pass by flashlight_strobe_charge() + * @remains : remained time to full chargerd, unit : ms ; 0 means ready + * return : 0 means succeess, otherwise see definitions in errno.h + */ + +/* flashlight_strobe_chargestruct flashlight_device *flashlight_dev, + * flashlight_charge_event_cb cb, void *data, int start) + * description : + * flashlight start / stop charging + * @flashlight_dev : flashlight devices + * @flashlight_charge_event_cb : callback function to report progress + * @data : bypass to callback function + * @start : 1 means start; 0 means stop + */ +extern int flashlight_strobe_charge(struct flashlight_device *flashlight_dev, + flashlight_charge_event_cb cb, void *data, int start); + +#define to_flashlight_device(obj) container_of(obj, struct flashlight_device, dev) + +static inline void * flashlight_get_data( + struct flashlight_device *flashlight_dev) +{ + return dev_get_drvdata(&flashlight_dev->dev); +} +#endif /*LINUX_LEDS_FLASHLIGHT_H*/ |
