diff options
author | codeworkx <daniel.hillenbrand@codeworkx.de> | 2012-06-02 13:09:29 +0200 |
---|---|---|
committer | codeworkx <daniel.hillenbrand@codeworkx.de> | 2012-06-02 13:09:29 +0200 |
commit | c6da2cfeb05178a11c6d062a06f8078150ee492f (patch) | |
tree | f3b4021d252c52d6463a9b3c1bb7245e399b009c /drivers/media/video/m5mo.h | |
parent | c6d7c4dbff353eac7919342ae6b3299a378160a6 (diff) | |
download | kernel_samsung_smdk4412-c6da2cfeb05178a11c6d062a06f8078150ee492f.zip kernel_samsung_smdk4412-c6da2cfeb05178a11c6d062a06f8078150ee492f.tar.gz kernel_samsung_smdk4412-c6da2cfeb05178a11c6d062a06f8078150ee492f.tar.bz2 |
samsung update 1
Diffstat (limited to 'drivers/media/video/m5mo.h')
-rw-r--r-- | drivers/media/video/m5mo.h | 345 |
1 files changed, 345 insertions, 0 deletions
diff --git a/drivers/media/video/m5mo.h b/drivers/media/video/m5mo.h new file mode 100644 index 0000000..8d41584 --- /dev/null +++ b/drivers/media/video/m5mo.h @@ -0,0 +1,345 @@ +/* + * Driver for M5MO (5MP Camera) from NEC + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + */ + +#ifndef __M5MO_H +#define __M5MO_H + +#include <linux/wakelock.h> + +#define CONFIG_CAM_DEBUG + +#define cam_warn(fmt, ...) \ + do { \ + printk(KERN_WARNING "%s: " fmt, __func__, ##__VA_ARGS__); \ + } while (0) + +#define cam_err(fmt, ...) \ + do { \ + printk(KERN_ERR "%s: " fmt, __func__, ##__VA_ARGS__); \ + } while (0) + +#define cam_info(fmt, ...) \ + do { \ + printk(KERN_INFO "%s: " fmt, __func__, ##__VA_ARGS__); \ + } while (0) + +#ifdef CONFIG_CAM_DEBUG +#define CAM_DEBUG (1 << 0) +#define CAM_TRACE (1 << 1) +#define CAM_I2C (1 << 2) + +#define cam_dbg(fmt, ...) \ + do { \ + if (to_state(sd)->dbg_level & CAM_DEBUG) \ + printk(KERN_DEBUG "%s: " fmt, __func__, ##__VA_ARGS__); \ + } while (0) + +#define cam_trace(fmt, ...) \ + do { \ + if (to_state(sd)->dbg_level & CAM_TRACE) \ + printk(KERN_DEBUG "%s: " fmt, __func__, ##__VA_ARGS__); \ + } while (0) + +#define cam_i2c_dbg(fmt, ...) \ + do { \ + if (to_state(sd)->dbg_level & CAM_I2C) \ + printk(KERN_DEBUG "%s: " fmt, __func__, ##__VA_ARGS__); \ + } while (0) +#else +#define cam_dbg(fmt, ...) +#define cam_trace(fmt, ...) +#define cam_i2c_dbg(fmt, ...) +#endif + +enum m5mo_prev_frmsize { + M5MO_PREVIEW_QCIF, + M5MO_PREVIEW_QCIF2, + M5MO_PREVIEW_QVGA, + M5MO_PREVIEW_VGA, + M5MO_PREVIEW_D1, + M5MO_PREVIEW_WVGA, + M5MO_PREVIEW_720P, +#if defined(CONFIG_MACH_Q1_BD) + M5MO_PREVIEW_880_720, + M5MO_PREVIEW_1200_800, + M5MO_PREVIEW_1280_800, + M5MO_PREVIEW_1280_768, + M5MO_PREVIEW_1072_800, + M5MO_PREVIEW_980_800, +#endif + M5MO_PREVIEW_1080P, + M5MO_PREVIEW_HDR, +}; + +enum m5mo_cap_frmsize { + M5MO_CAPTURE_VGA, /* 640 x 480 */ + M5MO_CAPTURE_WVGA, /* 800 x 480 */ + M5MO_CAPTURE_W1MP, /* 1600 x 960 */ + M5MO_CAPTURE_2MP, /* UXGA - 1600 x 1200 */ + M5MO_CAPTURE_W2MP, /* 2048 x 1232 */ + M5MO_CAPTURE_3MP, /* QXGA - 2048 x 1536 */ + M5MO_CAPTURE_W4MP, /* WQXGA - 2560 x 1536 */ + M5MO_CAPTURE_5MP, /* 2560 x 1920 */ + M5MO_CAPTURE_W6MP, /* 3072 x 1856 */ + M5MO_CAPTURE_7MP, /* 3072 x 2304 */ + M5MO_CAPTURE_W7MP, /* WQXGA - 2560 x 1536 */ + M5MO_CAPTURE_8MP, /* 3264 x 2448 */ +}; + +struct m5mo_control { + u32 id; + s32 value; + s32 minimum; /* Note signedness */ + s32 maximum; + s32 step; + s32 default_value; +}; + +struct m5mo_frmsizeenum { + unsigned int index; + unsigned int width; + unsigned int height; + u8 reg_val; /* a value for category parameter */ +}; + +struct m5mo_isp { + wait_queue_head_t wait; + unsigned int irq; /* irq issued by ISP */ + unsigned int issued; + unsigned int int_factor; + unsigned int bad_fw:1; +}; + +struct m5mo_jpeg { + int quality; + unsigned int main_size; /* Main JPEG file size */ + unsigned int thumb_size; /* Thumbnail file size */ + unsigned int main_offset; + unsigned int thumb_offset; + unsigned int postview_offset; +}; + +struct m5mo_focus { + unsigned int start:1; + unsigned int lock:1; + unsigned int touch:1; + + unsigned int mode; +#if defined(CONFIG_TARGET_LOCALE_NA) + unsigned int ui_mode; + unsigned int mode_select; +#endif + unsigned int status; + + unsigned int pos_x; + unsigned int pos_y; +}; + +struct m5mo_exif { + char unique_id[7]; + u32 exptime; /* us */ + u16 flash; + u16 iso; + int tv; /* shutter speed */ + int bv; /* brightness */ + int ebv; /* exposure bias */ +}; + +struct m5mo_state { + struct m5mo_platform_data *pdata; + struct device *m5mo_dev; + struct v4l2_subdev sd; + + struct wake_lock wake_lock; + + struct m5mo_isp isp; + + const struct m5mo_frmsizeenum *preview; + const struct m5mo_frmsizeenum *capture; + + enum v4l2_pix_format_mode format_mode; + enum v4l2_sensor_mode sensor_mode; + enum v4l2_flash_mode flash_mode; + enum v4l2_scene_mode scene_mode; + int vt_mode; + int zoom; + + unsigned int fps; + struct m5mo_focus focus; + + struct m5mo_jpeg jpeg; + struct m5mo_exif exif; + + char *fw_version; + +#ifdef CONFIG_CAM_DEBUG + u8 dbg_level; +#endif + + unsigned int face_beauty:1; + unsigned int recording:1; + unsigned int check_dataline:1; + int anti_banding; +}; + +/* Category */ +#define M5MO_CATEGORY_SYS 0x00 +#define M5MO_CATEGORY_PARM 0x01 +#define M5MO_CATEGORY_MON 0x02 +#define M5MO_CATEGORY_AE 0x03 +#define M5MO_CATEGORY_WB 0x06 +#define M5MO_CATEGORY_EXIF 0x07 +#define M5MO_CATEGORY_FD 0x09 +#define M5MO_CATEGORY_LENS 0x0A +#define M5MO_CATEGORY_CAPPARM 0x0B +#define M5MO_CATEGORY_CAPCTRL 0x0C +#define M5MO_CATEGORY_TEST 0x0D +#define M5MO_CATEGORY_ADJST 0x0E +#define M5MO_CATEGORY_FLASH 0x0F /* F/W update */ + +/* M5MO_CATEGORY_SYS: 0x00 */ +#define M5MO_SYS_PJT_CODE 0x01 +#define M5MO_SYS_VER_FW 0x02 +#define M5MO_SYS_VER_HW 0x04 +#define M5MO_SYS_VER_PARAM 0x06 +#define M5MO_SYS_VER_AWB 0x08 +#define M5MO_SYS_USER_VER 0x0A +#define M5MO_SYS_MODE 0x0B +#define M5MO_SYS_ESD_INT 0x0E +#define M5MO_SYS_INT_FACTOR 0x10 +#define M5MO_SYS_INT_EN 0x11 + +/* M5MO_CATEGORY_PARAM: 0x01 */ +#define M5MO_PARM_OUT_SEL 0x00 +#define M5MO_PARM_MON_SIZE 0x01 +#define M5MO_PARM_EFFECT 0x0B +#define M5MO_PARM_FLEX_FPS 0x31 +#define M5MO_PARM_HDMOVIE 0x32 + +/* M5MO_CATEGORY_MON: 0x02 */ +#define M5MO_MON_ZOOM 0x01 +#define M5MO_MON_MON_REVERSE 0x05 +#define M5MO_MON_MON_MIRROR 0x06 +#define M5MO_MON_SHOT_REVERSE 0x07 +#define M5MO_MON_SHOT_MIRROR 0x08 +#define M5MO_MON_CFIXB 0x09 +#define M5MO_MON_CFIXR 0x0A +#define M5MO_MON_COLOR_EFFECT 0x0B +#define M5MO_MON_CHROMA_LVL 0x0F +#define M5MO_MON_EDGE_LVL 0x11 +#define M5MO_MON_TONE_CTRL 0x25 + +/* M5MO_CATEGORY_AE: 0x03 */ +#define M5MO_AE_LOCK 0x00 +#define M5MO_AE_MODE 0x01 +#define M5MO_AE_ISOSEL 0x05 +#define M5MO_AE_FLICKER 0x06 +#define M5MO_AE_EP_MODE_MON 0x0A +#define M5MO_AE_EP_MODE_CAP 0x0B +#define M5MO_AE_AUTO_BRACKET_EV 0x20 +#define M5MO_AE_ONESHOT_MAX_EXP 0x36 +#define M5MO_AE_INDEX 0x38 + +/* M5MO_CATEGORY_WB: 0x06 */ +#define M5MO_AWB_LOCK 0x00 +#define M5MO_WB_AWB_MODE 0x02 +#define M5MO_WB_AWB_MANUAL 0x03 + +/* M5MO_CATEGORY_EXIF: 0x07 */ +#define M5MO_EXIF_EXPTIME_NUM 0x00 +#define M5MO_EXIF_EXPTIME_DEN 0x04 +#define M5MO_EXIF_TV_NUM 0x08 +#define M5MO_EXIF_TV_DEN 0x0C +#define M5MO_EXIF_BV_NUM 0x18 +#define M5MO_EXIF_BV_DEN 0x1C +#define M5MO_EXIF_EBV_NUM 0x20 +#define M5MO_EXIF_EBV_DEN 0x24 +#define M5MO_EXIF_ISO 0x28 +#define M5MO_EXIF_FLASH 0x2A + +/* M5MO_CATEGORY_FD: 0x09 */ +#define M5MO_FD_CTL 0x00 +#define M5MO_FD_SIZE 0x01 +#define M5MO_FD_MAX 0x02 + +/* M5MO_CATEGORY_LENS: 0x0A */ +#define M5MO_LENS_AF_MODE 0x01 +#define M5MO_LENS_AF_START 0x02 +#define M5MO_LENS_AF_STATUS 0x03 +#define M5MO_LENS_AF_MODE_SELECT 0x05 +#define M5MO_LENS_AF_UPBYTE_STEP 0x06 +#define M5MO_LENS_AF_LOWBYTE_STEP 0x07 +#define M5MO_LENS_AF_CAL 0x1D +#define M5MO_LENS_AF_TOUCH_POSX 0x30 +#define M5MO_LENS_AF_TOUCH_POSY 0x32 + +/* M5MO_CATEGORY_CAPPARM: 0x0B */ +#define M5MO_CAPPARM_YUVOUT_MAIN 0x00 +#define M5MO_CAPPARM_MAIN_IMG_SIZE 0x01 +#define M5MO_CAPPARM_YUVOUT_PREVIEW 0x05 +#define M5MO_CAPPARM_PREVIEW_IMG_SIZE 0x06 +#define M5MO_CAPPARM_YUVOUT_THUMB 0x0A +#define M5MO_CAPPARM_THUMB_IMG_SIZE 0x0B +#define M5MO_CAPPARM_JPEG_SIZE_MAX 0x0F +#define M5MO_CAPPARM_JPEG_RATIO 0x17 +#define M5MO_CAPPARM_MCC_MODE 0x1D +#define M5MO_CAPPARM_WDR_EN 0x2C +#define M5MO_CAPPARM_LIGHT_CTRL 0x40 +#define M5MO_CAPPARM_FLASH_CTRL 0x41 +#define M5MO_CAPPARM_JPEG_RATIO_OFS 0x34 +#define M5MO_CAPPARM_THUMB_JPEG_MAX 0x3C +#define M5MO_CAPPARM_AFB_CAP_EN 0x53 + +/* M5MO_CATEGORY_CAPCTRL: 0x0C */ +#define M5MO_CAPCTRL_CAP_MODE 0x00 +#define M5MO_CAPCTRL_CAP_FRM_COUNT 0x02 +#define M5MO_CAPCTRL_FRM_SEL 0x06 +#define M5MO_CAPCTRL_TRANSFER 0x09 +#define M5MO_CAPCTRL_IMG_SIZE 0x0D +#define M5MO_CAPCTRL_THUMB_SIZE 0x11 + +/* M5MO_CATEGORY_ADJST: 0x0E */ +#define M5MO_ADJST_AWB_RG_H 0x3C +#define M5MO_ADJST_AWB_RG_L 0x3D +#define M5MO_ADJST_AWB_BG_H 0x3E +#define M5MO_ADJST_AWB_BG_L 0x3F + +/* M5MO_CATEGORY_FLASH: 0x0F */ +#define M5MO_FLASH_ADDR 0x00 +#define M5MO_FLASH_BYTE 0x04 +#define M5MO_FLASH_ERASE 0x06 +#define M5MO_FLASH_WR 0x07 +#define M5MO_FLASH_RAM_CLEAR 0x08 +#define M5MO_FLASH_CAM_START 0x12 +#define M5MO_FLASH_SEL 0x13 + +/* M5MO_CATEGORY_TEST: 0x0D */ +#define M5MO_TEST_OUTPUT_YCO_TEST_DATA 0x1B +#define M5MO_TEST_ISP_PROCESS 0x59 + +/* M5MO Sensor Mode */ +#define M5MO_SYSINIT_MODE 0x0 +#define M5MO_PARMSET_MODE 0x1 +#define M5MO_MONITOR_MODE 0x2 +#define M5MO_STILLCAP_MODE 0x3 + +/* Interrupt Factor */ +#define M5MO_INT_SOUND (1 << 7) +#define M5MO_INT_LENS_INIT (1 << 6) +#define M5MO_INT_FD (1 << 5) +#define M5MO_INT_FRAME_SYNC (1 << 4) +#define M5MO_INT_CAPTURE (1 << 3) +#define M5MO_INT_ZOOM (1 << 2) +#define M5MO_INT_AF (1 << 1) +#define M5MO_INT_MODE (1 << 0) + +/* ESD Interrupt */ +#define M5MO_INT_ESD (1 << 0) + +#endif /* __M5MO_H */ |