| /* |
| * 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_ */ |
| |