summaryrefslogtreecommitdiffstats
path: root/drivers/staging/media/atomisp/include/media/lm3642.h
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/staging/media/atomisp/include/media/lm3642.h')
-rw-r--r--drivers/staging/media/atomisp/include/media/lm3642.h153
1 files changed, 153 insertions, 0 deletions
diff --git a/drivers/staging/media/atomisp/include/media/lm3642.h b/drivers/staging/media/atomisp/include/media/lm3642.h
new file mode 100644
index 0000000..545d957
--- /dev/null
+++ b/drivers/staging/media/atomisp/include/media/lm3642.h
@@ -0,0 +1,153 @@
+/*
+ * include/media/lm3642.h
+ *
+ * Copyright (c) 2010-2012 Intel Corporation. All Rights Reserved.
+ *
+ * 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.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.
+ */
+
+#ifndef _LM3642_H_
+#define _LM3642_H_
+
+#include <linux/videodev2.h>
+#include <media/v4l2-subdev.h>
+
+#define LM3642_NAME "lm3642"
+#define LM3642_ID 3642
+
+#define v4l2_queryctrl_entry_integer(_id, _name,\
+ _minimum, _maximum, _step, \
+ _default_value, _flags) \
+ {\
+ .id = (_id), \
+ .type = V4L2_CTRL_TYPE_INTEGER, \
+ .name = _name, \
+ .minimum = (_minimum), \
+ .maximum = (_maximum), \
+ .step = (_step), \
+ .default_value = (_default_value),\
+ .flags = (_flags),\
+ }
+#define v4l2_queryctrl_entry_boolean(_id, _name,\
+ _default_value, _flags) \
+ {\
+ .id = (_id), \
+ .type = V4L2_CTRL_TYPE_BOOLEAN, \
+ .name = _name, \
+ .minimum = 0, \
+ .maximum = 1, \
+ .step = 1, \
+ .default_value = (_default_value),\
+ .flags = (_flags),\
+ }
+
+#define s_ctrl_id_entry_integer(_id, _name, \
+ _minimum, _maximum, _step, \
+ _default_value, _flags, \
+ _s_ctrl, _g_ctrl) \
+ {\
+ .qc = v4l2_queryctrl_entry_integer(_id, _name,\
+ _minimum, _maximum, _step,\
+ _default_value, _flags), \
+ .s_ctrl = _s_ctrl, \
+ .g_ctrl = _g_ctrl, \
+ }
+
+#define s_ctrl_id_entry_boolean(_id, _name, \
+ _default_value, _flags, \
+ _s_ctrl, _g_ctrl) \
+ {\
+ .qc = v4l2_queryctrl_entry_boolean(_id, _name,\
+ _default_value, _flags), \
+ .s_ctrl = _s_ctrl, \
+ .g_ctrl = _g_ctrl, \
+ }
+
+
+/* Default Values */
+#define LM3642_DEFAULT_TIMEOUT 300U
+#define LM3642_DEFAULT_RAMP_TIME 0x10 /* 1.024ms */
+#define LM3642_DEFAULT_INDICATOR_CURRENT 0x01 /* 1.88A */
+#define LM3642_DEFAULT_FLASH_CURRENT 0x0f /* 1500mA */
+
+/* Value settings for Flash Time-out Duration*/
+#define LM3642_MIN_TIMEOUT 100U
+#define LM3642_MAX_TIMEOUT 800U
+#define LM3642_TIMEOUT_STEPSIZE 100U
+
+/* Flash modes */
+#define LM3642_MODE_SHUTDOWN 0
+#define LM3642_MODE_INDICATOR 1
+#define LM3642_MODE_TORCH 2
+#define LM3642_MODE_FLASH 3
+
+/* timer delay time */
+#define LM3642_TIMER_DELAY 5
+
+/* Percentage <-> value macros */
+#define LM3642_MIN_PERCENT 0U
+#define LM3642_MAX_PERCENT 100U
+#define LM3642_CLAMP_PERCENTAGE(val) \
+ clamp(val, LM3642_MIN_PERCENT, LM3642_MAX_PERCENT)
+
+#define LM3642_VALUE_TO_PERCENT(v, step) \
+ (((((unsigned long)((v)+1))*(step))+50)/100)
+#define LM3642_PERCENT_TO_VALUE(p, step) \
+ (((((unsigned long)(p))*100)+((step)>>1))/(step)-1)
+
+/* Product specific limits
+ * TODO: get these from platform data */
+#define LM3642_FLASH_MAX_LVL 0x0F /* 1500mA */
+#define LM3642_TORCH_MAX_LVL 0x07 /* 187mA */
+#define LM3642_INDICATOR_MAX_LVL 0x01 /* 1.88A */
+
+/* Flash brightness, input is percentage, output is [0..15] */
+#define LM3642_FLASH_STEP \
+ ((100ul*(LM3642_MAX_PERCENT) \
+ +((LM3642_FLASH_MAX_LVL+1)>>1)) \
+ /((LM3642_FLASH_MAX_LVL+1)))
+#define LM3642_FLASH_DEFAULT_BRIGHTNESS \
+ LM3642_VALUE_TO_PERCENT(15, LM3642_FLASH_STEP)
+
+/* Torch brightness, input is percentage, output is [0..7] */
+#define LM3642_TORCH_STEP \
+ ((100ul*(LM3642_MAX_PERCENT) \
+ +((LM3642_TORCH_MAX_LVL+1)>>1)) \
+ /((LM3642_TORCH_MAX_LVL+1)))
+#define LM3642_TORCH_DEFAULT_BRIGHTNESS \
+ LM3642_VALUE_TO_PERCENT(0, LM3642_TORCH_STEP)
+
+/* Indicator brightness, input is percentage, output is [0..1] */
+#define LM3642_INDICATOR_STEP \
+ ((100ul*(LM3642_MAX_PERCENT) \
+ +((LM3642_INDICATOR_MAX_LVL+1)>>1)) \
+ /((LM3642_INDICATOR_MAX_LVL+1)))
+#define LM3642_INDICATOR_DEFAULT_BRIGHTNESS \
+ LM3642_VALUE_TO_PERCENT(1, LM3642_INDICATOR_STEP)
+
+/*
+ * lm3642_platform_data - Flash controller platform data
+ */
+struct lm3642_platform_data {
+ int gpio_torch;
+ int gpio_strobe;
+ int (*power_ctrl)(struct v4l2_subdev *subdev, int on);
+
+ unsigned int torch_en;
+ unsigned int flash_en;
+ unsigned int tx_en;
+ unsigned int ivfm_en;
+};
+
+#endif /* _LM3642_H_ */
+
OpenPOWER on IntegriCloud