diff options
Diffstat (limited to 'drivers/media/video')
123 files changed, 1139 insertions, 17603 deletions
diff --git a/drivers/media/video/exynos/fimc-is/fimc-is-core.c b/drivers/media/video/exynos/fimc-is/fimc-is-core.c index 59da8d1..58b0fbc 100644 --- a/drivers/media/video/exynos/fimc-is/fimc-is-core.c +++ b/drivers/media/video/exynos/fimc-is/fimc-is-core.c @@ -357,6 +357,10 @@ static int fimc_is_probe(struct platform_device *pdev) snprintf(v4l2_dev->name, sizeof(v4l2_dev->name), "%s.isp", dev_name(&dev->pdev->dev)); ret = v4l2_device_register(NULL, v4l2_dev); + if (ret) { + v4l2_err(v4l2_dev, "Failed to register v4l2 device\n"); + goto err_vd_reg; + } snprintf(dev->video[FIMC_IS_VIDEO_NUM_BAYER].vd.name, sizeof(dev->video[FIMC_IS_VIDEO_NUM_BAYER].vd.name), @@ -385,10 +389,8 @@ static int fimc_is_probe(struct platform_device *pdev) ret = video_register_device(&dev->video[FIMC_IS_VIDEO_NUM_BAYER].vd, VFL_TYPE_GRABBER, 30); - if (ret) { - v4l2_err(v4l2_dev, "Failed to register video device\n"); - goto err_vd_reg; - } + if (ret) + goto p_err_device_register; printk(KERN_INFO "FIMC-IS Video node :: ISP %d minor : %d\n", dev->video[FIMC_IS_VIDEO_NUM_BAYER].vd.num, @@ -412,6 +414,7 @@ static int fimc_is_probe(struct platform_device *pdev) dev->pdata->clk_get(pdev); } else { err("#### failed to Get Clock####\n"); + ret = -EINVAL; goto p_err_init_mem; } /* Init v4l2 sub device */ @@ -464,11 +467,11 @@ static int fimc_is_probe(struct platform_device *pdev) return 0; p_err_init_mem: - free_irq(dev->irq1, dev); #if defined(CONFIG_VIDEO_EXYNOS_FIMC_IS_BAYER) err_vd_reg: - video_device_release(&dev->video[FIMC_IS_VIDEO_NUM_BAYER].vd); +p_err_device_register: #endif + free_irq(dev->irq1, dev); p_err_req_irq: p_err_get_irq: iounmap(dev->regs); diff --git a/drivers/media/video/exynos/fimc-is/fimc-is-core.h b/drivers/media/video/exynos/fimc-is/fimc-is-core.h index 1309e96..82be1a1 100644 --- a/drivers/media/video/exynos/fimc-is/fimc-is-core.h +++ b/drivers/media/video/exynos/fimc-is/fimc-is-core.h @@ -63,7 +63,7 @@ #define FIMC_IS_A5_MEM_SIZE 0x00A00000 #define FIMC_IS_REGION_SIZE 0x5000 -#define FIMC_IS_DEBUG_REGION_ADDR 0x00840000 +#define FIMC_IS_DEBUG_REGION_ADDR 0x0084B000 #define FIMC_IS_SHARED_REGION_ADDR 0x008C0000 #define FIMC_IS_FW_INFO_LENGTH 32 #define FIMC_IS_FW_VERSION_LENGTH 7 @@ -77,13 +77,23 @@ #define GED_FD_RANGE 1000 -#define BUS_LOCK_FREQ_L0 400200 -#define BUS_LOCK_FREQ_L1 267200 -#define BUS_LOCK_FREQ_L2 267160 -#define BUS_LOCK_FREQ_L3 160160 -#define BUS_LOCK_FREQ_L4 133133 -#define BUS_LOCK_FREQ_L5 100100 - +#ifdef CONFIG_MACH_T0 +#define BUS_LOCK_FREQ_L0 440293 +#define BUS_LOCK_FREQ_L1 440220 +#define BUS_LOCK_FREQ_L2 293220 +#define BUS_LOCK_FREQ_L3 293176 +#define BUS_LOCK_FREQ_L4 176176 +#define BUS_LOCK_FREQ_L5 147147 +#define BUS_LOCK_FREQ_L6 110110 +#else +#define BUS_LOCK_FREQ_L0 400266 +#define BUS_LOCK_FREQ_L1 400200 +#define BUS_LOCK_FREQ_L2 267200 +#define BUS_LOCK_FREQ_L3 267160 +#define BUS_LOCK_FREQ_L4 160160 +#define BUS_LOCK_FREQ_L5 133133 +#define BUS_LOCK_FREQ_L6 100100 +#endif /* A5 debug message setting */ #define FIMC_IS_DEBUG_MSG 0x3F #define FIMC_IS_DEBUG_LEVEL 3 diff --git a/drivers/media/video/exynos/fimc-is/fimc-is-helper.c b/drivers/media/video/exynos/fimc-is/fimc-is-helper.c index ef0d163..8cac853 100644 --- a/drivers/media/video/exynos/fimc-is/fimc-is-helper.c +++ b/drivers/media/video/exynos/fimc-is/fimc-is-helper.c @@ -31,6 +31,7 @@ #include <linux/gpio.h> #include <linux/gpio_event.h> #include <plat/gpio-cfg.h> +#include <plat/cpu.h> #include "fimc-is-core.h" #include "fimc-is-regs.h" @@ -1039,18 +1040,46 @@ void fimc_is_hw_open_sensor(struct fimc_is_dev *dev, u32 id, u32 sensor_index) writel(id, dev->regs + ISSR1); switch (sensor_index) { case SENSOR_S5K3H2_CSI_A: + sensor_ext = (struct sensor_open_extended *) + &dev->is_p_region->shared; + sensor_ext->actuator_type = 1; + sensor_ext->mclk = 0; + sensor_ext->mipi_lane_num = 0; + sensor_ext->mipi_speed = 0; + sensor_ext->fast_open_sensor = 0; + sensor_ext->self_calibration_mode = 0; + if (samsung_rev() >= EXYNOS4412_REV_2_0) + sensor_ext->i2c_sclk = 88000000; + else + sensor_ext->i2c_sclk = 80000000; + fimc_is_mem_cache_clean((void *)dev->is_p_region, + IS_PARAM_SIZE); dev->af.use_af = 1; dev->sensor.sensor_type = SENSOR_S5K3H2_CSI_A; writel(SENSOR_NAME_S5K3H2, dev->regs + ISSR2); writel(SENSOR_CONTROL_I2C0, dev->regs + ISSR3); - writel(0x0, dev->regs + ISSR4); + writel(virt_to_phys(sensor_ext), dev->regs + ISSR4); break; case SENSOR_S5K3H2_CSI_B: + sensor_ext = (struct sensor_open_extended *) + &dev->is_p_region->shared; + sensor_ext->actuator_type = 1; + sensor_ext->mclk = 0; + sensor_ext->mipi_lane_num = 0; + sensor_ext->mipi_speed = 0; + sensor_ext->fast_open_sensor = 0; + sensor_ext->self_calibration_mode = 0; + if (samsung_rev() >= EXYNOS4412_REV_2_0) + sensor_ext->i2c_sclk = 88000000; + else + sensor_ext->i2c_sclk = 80000000; + fimc_is_mem_cache_clean((void *)dev->is_p_region, + IS_PARAM_SIZE); dev->af.use_af = 1; dev->sensor.sensor_type = SENSOR_S5K3H2_CSI_B; writel(SENSOR_NAME_S5K3H2, dev->regs + ISSR2); writel(SENSOR_CONTROL_I2C1, dev->regs + ISSR3); - writel(0x0, dev->regs + ISSR4); + writel(virt_to_phys(sensor_ext), dev->regs + ISSR4); break; case SENSOR_S5K6A3_CSI_A: sensor_ext = (struct sensor_open_extended *) @@ -1061,6 +1090,10 @@ void fimc_is_hw_open_sensor(struct fimc_is_dev *dev, u32 id, u32 sensor_index) sensor_ext->mipi_speed = 0; sensor_ext->fast_open_sensor = 0; sensor_ext->self_calibration_mode = 1; + if (samsung_rev() >= EXYNOS4412_REV_2_0) + sensor_ext->i2c_sclk = 88000000; + else + sensor_ext->i2c_sclk = 80000000; fimc_is_mem_cache_clean((void *)dev->is_p_region, IS_PARAM_SIZE); dev->af.use_af = 0; @@ -1078,6 +1111,10 @@ void fimc_is_hw_open_sensor(struct fimc_is_dev *dev, u32 id, u32 sensor_index) sensor_ext->mipi_speed = 0; sensor_ext->fast_open_sensor = 0; sensor_ext->self_calibration_mode = 1; + if (samsung_rev() >= EXYNOS4412_REV_2_0) + sensor_ext->i2c_sclk = 88000000; + else + sensor_ext->i2c_sclk = 80000000; fimc_is_mem_cache_clean((void *)dev->is_p_region, IS_PARAM_SIZE); dev->af.use_af = 0; @@ -1095,6 +1132,10 @@ void fimc_is_hw_open_sensor(struct fimc_is_dev *dev, u32 id, u32 sensor_index) sensor_ext->mipi_speed = 0; sensor_ext->fast_open_sensor = 0; sensor_ext->self_calibration_mode = 0; + if (samsung_rev() >= EXYNOS4412_REV_2_0) + sensor_ext->i2c_sclk = 88000000; + else + sensor_ext->i2c_sclk = 80000000; fimc_is_mem_cache_clean((void *)dev->is_p_region, IS_PARAM_SIZE); dev->af.use_af = 1; @@ -1112,6 +1153,10 @@ void fimc_is_hw_open_sensor(struct fimc_is_dev *dev, u32 id, u32 sensor_index) sensor_ext->mipi_speed = 0; sensor_ext->fast_open_sensor = 0; sensor_ext->self_calibration_mode = 0; + if (samsung_rev() >= EXYNOS4412_REV_2_0) + sensor_ext->i2c_sclk = 88000000; + else + sensor_ext->i2c_sclk = 80000000; fimc_is_mem_cache_clean((void *)dev->is_p_region, IS_PARAM_SIZE); dev->af.use_af = 1; @@ -1121,18 +1166,46 @@ void fimc_is_hw_open_sensor(struct fimc_is_dev *dev, u32 id, u32 sensor_index) writel(virt_to_phys(sensor_ext), dev->regs + ISSR4); break; case SENSOR_S5K4E5_CSI_A: + sensor_ext = (struct sensor_open_extended *) + &dev->is_p_region->shared; + sensor_ext->actuator_type = 1; + sensor_ext->mclk = 0; + sensor_ext->mipi_lane_num = 0; + sensor_ext->mipi_speed = 0; + sensor_ext->fast_open_sensor = 0; + sensor_ext->self_calibration_mode = 0; + if (samsung_rev() >= EXYNOS4412_REV_2_0) + sensor_ext->i2c_sclk = 88000000; + else + sensor_ext->i2c_sclk = 80000000; + fimc_is_mem_cache_clean((void *)dev->is_p_region, + IS_PARAM_SIZE); dev->af.use_af = 1; dev->sensor.sensor_type = SENSOR_S5K4E5_CSI_A; writel(SENSOR_NAME_S5K4E5, dev->regs + ISSR2); writel(SENSOR_CONTROL_I2C0, dev->regs + ISSR3); - writel(0x0, dev->regs + ISSR4); + writel(virt_to_phys(sensor_ext), dev->regs + ISSR4); break; case SENSOR_S5K4E5_CSI_B: + sensor_ext = (struct sensor_open_extended *) + &dev->is_p_region->shared; + sensor_ext->actuator_type = 1; + sensor_ext->mclk = 0; + sensor_ext->mipi_lane_num = 0; + sensor_ext->mipi_speed = 0; + sensor_ext->fast_open_sensor = 0; + sensor_ext->self_calibration_mode = 0; + if (samsung_rev() >= EXYNOS4412_REV_2_0) + sensor_ext->i2c_sclk = 88000000; + else + sensor_ext->i2c_sclk = 80000000; + fimc_is_mem_cache_clean((void *)dev->is_p_region, + IS_PARAM_SIZE); dev->af.use_af = 1; dev->sensor.sensor_type = SENSOR_S5K4E5_CSI_B; writel(SENSOR_NAME_S5K4E5, dev->regs + ISSR2); writel(SENSOR_CONTROL_I2C1, dev->regs + ISSR3); - writel(0x0, dev->regs + ISSR4); + writel(virt_to_phys(sensor_ext), dev->regs + ISSR4); break; case SENSOR_S5K6A3_CSI_B_CUSTOM: sensor_ext = (struct sensor_open_extended *) @@ -1143,6 +1216,10 @@ void fimc_is_hw_open_sensor(struct fimc_is_dev *dev, u32 id, u32 sensor_index) sensor_ext->mipi_speed = 0; sensor_ext->fast_open_sensor = 6; sensor_ext->self_calibration_mode = 1; + if (samsung_rev() >= EXYNOS4412_REV_2_0) + sensor_ext->i2c_sclk = 88000000; + else + sensor_ext->i2c_sclk = 80000000; fimc_is_mem_cache_clean((void *)dev->is_p_region, IS_PARAM_SIZE); dev->af.use_af = 0; diff --git a/drivers/media/video/exynos/fimc-is/fimc-is-param.h b/drivers/media/video/exynos/fimc-is/fimc-is-param.h index 9383c4a..b978e16 100644 --- a/drivers/media/video/exynos/fimc-is/fimc-is-param.h +++ b/drivers/media/video/exynos/fimc-is/fimc-is-param.h @@ -14,7 +14,7 @@ #ifndef FIMC_IS_PARAMS_H_ #define FIMC_IS_PARAMS_H_ -#define IS_REGION_VER 122 /* IS REGION VERSION 1.22 */ +#define IS_REGION_VER 124 /* IS REGION VERSION 1.24 */ /* MACROs */ #define IS_SET_PARAM_BIT(dev, num) \ @@ -237,6 +237,8 @@ (dev->is_p_region->parameter.isp.dma1_output.buffer_address = x) #define IS_ISP_SET_PARAM_DMA_OUTPUT1_NODIFY_DMA_DONE(dev, x) \ (dev->is_p_region->parameter.isp.dma1_output.notify_dma_done = x) +#define IS_ISP_SET_PARAM_DMA_OUTPUT1_MASK(dev, x) \ + (dev->is_p_region->parameter.isp.dma1_output.dma_out_mask = x) #define IS_ISP_SET_PARAM_DMA_OUTPUT1_ERR(dev, x) \ (dev->is_p_region->parameter.isp.dma1_output.err = x) @@ -260,6 +262,8 @@ (dev->is_p_region->parameter.isp.dma2_output.buffer_address = x) #define IS_ISP_SET_PARAM_DMA_OUTPUT2_NODIFY_DMA_DONE(dev, x) \ (dev->is_p_region->parameter.isp.dma2_output.notify_dma_done = x) +#define IS_ISP_SET_PARAM_DMA_OUTPUT2_MASK(dev, x) \ + (dev->is_p_region->parameter.isp.dma2_output.dma_out_mask = x) #define IS_ISP_SET_PARAM_DMA_OUTPUT2_ERR(dev, x) \ (dev->is_p_region->parameter.isp.dma2_output.err = x) @@ -1228,7 +1232,8 @@ struct param_dma_output { u32 buffer_number; u32 buffer_address; u32 notify_dma_done; - u32 reserved[PARAMETER_MAX_MEMBER-11]; + u32 dma_out_mask; + u32 reserved[PARAMETER_MAX_MEMBER-12]; u32 err; }; @@ -1697,5 +1702,8 @@ struct sensor_open_extended { u32 fast_open_sensor; /* Activatiing sensor self calibration mode (6A3) */ u32 self_calibration_mode; + /* This field is to adjust I2c clock based on ACLK200 */ + /* This value is varied in case of rev 0.2 */ + u32 i2c_sclk; }; #endif diff --git a/drivers/media/video/exynos/fimc-is/fimc-is-v4l2.c b/drivers/media/video/exynos/fimc-is/fimc-is-v4l2.c index aa60198..066885f 100644 --- a/drivers/media/video/exynos/fimc-is/fimc-is-v4l2.c +++ b/drivers/media/video/exynos/fimc-is/fimc-is-v4l2.c @@ -373,7 +373,7 @@ int fimc_is_s_power(struct v4l2_subdev *sd, int on) } #if defined(CONFIG_BUSFREQ_OPP) || defined(CONFIG_BUSFREQ_LOCK_WRAPPER) /* lock bus frequency */ - dev_lock(is_dev->bus_dev, dev, BUS_LOCK_FREQ_L0); + dev_lock(is_dev->bus_dev, dev, BUS_LOCK_FREQ_L1); #endif fimc_is_hw_set_low_poweroff(is_dev, false); ret = pm_runtime_get_sync(dev); @@ -618,7 +618,7 @@ static int fimc_is_reset(struct v4l2_subdev *sd, u32 val) /* Restart */ #if defined(CONFIG_BUSFREQ_OPP) || defined(CONFIG_BUSFREQ_LOCK_WRAPPER) /* lock bus frequency */ - dev_lock(is_dev->bus_dev, dev, BUS_LOCK_FREQ_L0); + dev_lock(is_dev->bus_dev, dev, BUS_LOCK_FREQ_L1); #endif fimc_is_hw_set_low_poweroff(is_dev, false); ret = pm_runtime_get_sync(dev); @@ -816,6 +816,16 @@ static int fimc_is_g_ctrl(struct v4l2_subdev *sd, struct v4l2_control *ctrl) case V4L2_CID_IS_FW_DEBUG_REGION_ADDR: ctrl->value = dev->mem.base + FIMC_IS_DEBUG_REGION_ADDR; break; +#if defined(CONFIG_SLP) +#define FRONT_CAM_STANDARD_REVISION 0x0b + case V4L2_CID_PHYSICAL_ROTATION: + if (system_rev > FRONT_CAM_STANDARD_REVISION || \ + system_rev == 0x04 || system_rev == 0x06) + ctrl->value = IS_ROTATION_270; + else + ctrl->value = IS_ROTATION_90; + break; +#endif default: return -EINVAL; } diff --git a/drivers/media/video/exynos/fimc-is/fimc-is-video.c b/drivers/media/video/exynos/fimc-is/fimc-is-video.c index 85080af..6b81bb9 100644 --- a/drivers/media/video/exynos/fimc-is/fimc-is-video.c +++ b/drivers/media/video/exynos/fimc-is/fimc-is-video.c @@ -45,6 +45,11 @@ static struct fimc_is_fmt fimc_is_formats[] = { { + .name = "Bayer8", + .fourcc = V4L2_PIX_FMT_SGRBG8, + .flags = 1, + }, + { .name = "Bayer10", .fourcc = V4L2_PIX_FMT_SGRBG10, .flags = 1, @@ -233,6 +238,21 @@ static int fimc_is_isp_video_s_fmt_mplane(struct file *file, void *priv, pix = &f->fmt.pix_mp; switch (f->fmt.pix.pixelformat) { + case V4L2_PIX_FMT_SGRBG8: + width = pix->width - is_dev->sensor.offset_x; + height = pix->height - is_dev->sensor.offset_y; + IS_ISP_SET_PARAM_DMA_OUTPUT2_CMD(is_dev, + DMA_OUTPUT_COMMAND_DISABLE); + IS_ISP_SET_PARAM_DMA_OUTPUT2_WIDTH(is_dev, width); + IS_ISP_SET_PARAM_DMA_OUTPUT2_HEIGHT(is_dev, height); + IS_ISP_SET_PARAM_DMA_OUTPUT2_FORMAT(is_dev, + DMA_OUTPUT_FORMAT_BAYER); + IS_ISP_SET_PARAM_DMA_OUTPUT2_BITWIDTH(is_dev, + DMA_OUTPUT_BIT_WIDTH_8BIT); + IS_ISP_SET_PARAM_DMA_OUTPUT2_PLANE(is_dev, DMA_OUTPUT_PLANE_1); + IS_ISP_SET_PARAM_DMA_OUTPUT2_ORDER(is_dev, + DMA_OUTPUT_ORDER_GB_BG); + break; case V4L2_PIX_FMT_SGRBG10: width = pix->width - is_dev->sensor.offset_x; height = pix->height - is_dev->sensor.offset_y; @@ -518,6 +538,8 @@ static int fimc_is_isp_start_streaming(struct vb2_queue *q) + 32 * sizeof(u32)); IS_ISP_SET_PARAM_DMA_OUTPUT2_NODIFY_DMA_DONE(is_dev, DMA_OUTPUT_NOTIFY_DMA_DONE_ENBABLE); + /* All buffers are available to write image data */ + IS_ISP_SET_PARAM_DMA_OUTPUT2_MASK(is_dev, 0xFFFFFFFF); IS_SET_PARAM_BIT(is_dev, PARAM_ISP_DMA2_OUTPUT); IS_INC_PARAM_NUM(is_dev); diff --git a/drivers/media/video/exynos/fimc-lite/fimc-lite-core.c b/drivers/media/video/exynos/fimc-lite/fimc-lite-core.c index eddbf1d..011787c 100644 --- a/drivers/media/video/exynos/fimc-lite/fimc-lite-core.c +++ b/drivers/media/video/exynos/fimc-lite/fimc-lite-core.c @@ -2021,7 +2021,7 @@ static int flite_probe(struct platform_device *pdev) pdev->name); if (!regs_res) { dev_err(&pdev->dev, "Failed to request io memory region\n"); - goto err_resource; + goto err_flite; } flite->regs_res = regs_res; @@ -2044,8 +2044,10 @@ static int flite_probe(struct platform_device *pdev) } sd = kzalloc(sizeof(*sd), GFP_KERNEL); - if (!sd) - goto err_irq; + if (!sd) { + ret = -ENOMEM; + goto err_irq; + } v4l2_subdev_init(sd, &flite_subdev_ops); snprintf(sd->name, sizeof(sd->name), "flite-subdev.%d", flite->id); @@ -2062,13 +2064,13 @@ static int flite_probe(struct platform_device *pdev) mutex_init(&flite->lock); flite->mdev = flite_get_capture_md(MDEV_CAPTURE); if (IS_ERR_OR_NULL(flite->mdev)) - goto err_irq; + goto err_device_register; flite_dbg("mdev = 0x%08x", (u32)flite->mdev); ret = flite_register_video_device(flite); if (ret) - goto err_irq; + goto err_device_register; /* Get mipi-csis subdev ptr using mdev */ flite->sd_csis = flite->mdev->csis_sd[flite->id]; @@ -2130,6 +2132,8 @@ err_vfd_alloc: media_entity_cleanup(&flite->vfd->entity); video_device_release(flite->vfd); #endif +err_device_register: + kfree(sd); err_irq: free_irq(flite->irq, flite); err_reg_unmap: diff --git a/drivers/media/video/mhl/Kconfig b/drivers/media/video/mhl/Kconfig index f4ff2873..2dac8dd 100644 --- a/drivers/media/video/mhl/Kconfig +++ b/drivers/media/video/mhl/Kconfig @@ -27,4 +27,8 @@ config SAMSUNG_WORKAROUND_HPD_GLANCE depends on (SAMSUNG_MHL || MHL_SII9234) && (CPU_EXYNOS4210 || CPU_EXYNOS4212 || CPU_EXYNOS4412) default y +config SAMSUNG_MHL_UNPOWERED + bool "Use source vbus for mhl dongle if no external power" + depends on (SAMSUNG_MHL || MHL_SII9234) + default n endmenu diff --git a/drivers/media/video/mhl/sii9234.c b/drivers/media/video/mhl/sii9234.c index 8ca25c6..c728ea3 100644 --- a/drivers/media/video/mhl/sii9234.c +++ b/drivers/media/video/mhl/sii9234.c @@ -49,11 +49,16 @@ /*///////////////////////// definition area //////////////////////*/ /*////////////////////////////////////////////////////////////////////////////*/ -#define __CONFIG_USE_TIMER__ +#define __CONFIG_USE_TIMER__ #define __CONFIG_RSEN_LOST_PATCH__ -/* #define __CONFIG_MHL_SWING_LEVEL__ */ +/* #define __CONFIG_MHL_SWING_LEVEL__ */ #define __CONFIG_SS_FACTORY__ #define __CONFIG_MHL_DEBUG__ +#if defined(CONFIG_MACH_T0) || defined(CONFIG_MACH_M3) +# define __CONFIG_MHL_VER_1_2__ +#else +# define __CONFIG_MHL_VER_1_1__ +#endif /* #define __SII9234_MUTEX_DEBUG__ */ /*////////////////////////////////////////////////////////////////////////////*/ /*////////////////// dependence hader file area //////////////////////*/ @@ -176,7 +181,7 @@ static struct workqueue_struct *sii9234_msc_wq; #endif static struct cbus_packet cbus_pkt_buf[CBUS_PKT_BUF_COUNT]; -#ifdef __CONFIG_USE_TIMER__ +#ifdef __CONFIG_USE_TIMER__ static int cbus_command_abort_state; #endif @@ -207,6 +212,11 @@ static void goto_d3(void); void sii9234_wake_lock(void) { struct sii9234_data *sii9234 = dev_get_drvdata(sii9244_mhldev); + if (!sii9234 || !sii9234->pdata) { + pr_err("[ERROR] %s() MHL driver has not initailized.\n", + __func__); + return; + } wake_lock(&sii9234->mhl_wake_lock); pr_debug("%s()\n", __func__); } @@ -215,6 +225,11 @@ EXPORT_SYMBOL(sii9234_wake_lock); void sii9234_wake_unlock(void) { struct sii9234_data *sii9234 = dev_get_drvdata(sii9244_mhldev); + if (!sii9234 || !sii9234->pdata) { + pr_err("[ERROR] %s() MHL driver has not initailized.\n", + __func__); + return; + } wake_unlock(&sii9234->mhl_wake_lock); pr_debug("%s()\n", __func__); } @@ -222,62 +237,71 @@ EXPORT_SYMBOL(sii9234_wake_unlock); #endif #ifdef __CONFIG_MHL_SWING_LEVEL__ -static ssize_t sii9234_swing_test_show(struct device *dev, - struct device_attribute *attr, - const char *buf, size_t size) +static ssize_t sii9234_swing_test_show(struct class *class, + struct class_attribute *attr, + char *buf) { struct sii9234_data *sii9234 = dev_get_drvdata(sii9244_mhldev); - return sprintf(buf, "mhl_show_value : 0x%x\n", - sii9234->pdata->swing_level); + return sprintf(buf, "mhl_show_value : 0%o(0x%x)\n", + sii9234->pdata->swing_level, sii9234->pdata->swing_level); } -static ssize_t sii9234_swing_test_store(struct device *dev, - struct device_attribute *attr, +static ssize_t sii9234_swing_test_store(struct class *class, + struct class_attribute *attr, const char *buf, size_t size) { struct sii9234_data *sii9234 = dev_get_drvdata(sii9244_mhldev); - - char temp[4] = { 0, }; const char *p = buf; - int data, clk; - unsigned int value; - - while (*p != '\0') { - if (!isspace(*p)) - strncat(temp, p, 1); - p++; - } + int data, clk, ret; + unsigned int base, value; - if (strlen(temp) != 2) - return -EINVAL; + if (p[0] == '0' && (p[1] == 'x' || p[1] == 'X')) + base = 16; + else + base = 8; - kstrtoul(temp, 10, &value); - data = value / 10; - clk = value % 10; - sii9234->pdata->swing_level = 0xc0; - sii9234->pdata->swing_level = sii9234->pdata->swing_level - | (data << 3) | clk; - sprintf(buf, "mhl_store_value : 0x%x\n", sii9234->pdata->swing_level); + ret = kstrtouint(p, base, &value); + printk(KERN_INFO "\n%s(): ret = %d, value = %d(=0%o=0x%x)\n", __func__, + ret, value, value, value); + if (ret != 0 || value < 0 || value > 0xff) { + printk(KERN_INFO "[ERROR] %s(): The value is invald!", + __func__); + return size; + } + data = value & 070; + clk = value & 07; + sii9234->pdata->swing_level = 0300 | data | clk; + printk(KERN_INFO "%s(): mhl_store_value : 0%o(0x%x)\n", __func__, + sii9234->pdata->swing_level, sii9234->pdata->swing_level); return size; } -static CLASS_ATTR(swing, 0664, - sii9234_swing_test_show, sii9234_swing_test_store); +static CLASS_ATTR(swing, 0666, + sii9234_swing_test_show, sii9234_swing_test_store); #endif -#ifdef CONFIG_SAMSUNG_USE_11PIN_CONNECTOR -# if !defined(CONFIG_MACH_P4NOTE) +#if defined(CONFIG_SAMSUNG_USE_11PIN_CONNECTOR) && !defined(CONFIG_MACH_P4NOTE) static int is_mhl_cable_connected(void) { # ifdef CONFIG_SAMSUNG_SMARTDOCK - if (max77693_muic_get_status1_adc_value() == ADC_SMARTDOCK) - return 1; - else -# endif + if (max77693_muic_get_status1_adc_value() == ADC_SMARTDOCK) + return 1; + else + return max77693_muic_get_status1_adc1k_value(); +# else return max77693_muic_get_status1_adc1k_value(); +# endif } #endif +#ifdef CONFIG_SAMSUNG_WORKAROUND_HPD_GLANCE +bool sii9234_is_mhl_power_state_on(void) +{ + struct sii9234_data *sii9234 = dev_get_drvdata(sii9244_mhldev); + pr_info("%s(): %s\n", __func__, + sii9234->pdata->power_state ? "Yes" : "No"); + return sii9234->pdata->power_state == 1; +} #endif u8 mhl_onoff_ex(bool onoff) @@ -318,10 +342,6 @@ u8 mhl_onoff_ex(bool onoff) if (sii9234->pdata->hw_onoff) sii9234->pdata->hw_onoff(0); -#ifdef CONFIG_SAMSUNG_WORKAROUND_HPD_GLANCE - mhl_hpd_handler(false); -#endif - #ifdef CONFIG_SAMSUNG_USE_11PIN_CONNECTOR #if !defined(CONFIG_MACH_P4NOTE) ret = is_mhl_cable_connected(); @@ -679,8 +699,13 @@ static int sii9234_cbus_init(struct sii9234_data *sii9234) /*To meet cts 6.3.10.1 spec */ if (ret < 0) goto i2c_error_exit; +#if defined(__CONFIG_MHL_VER_1_1__) ret = cbus_write_reg(sii9234, 0x80 + DEVCAP_MHL_VERSION, 0x11); /*mhl version 1.1 */ +#elif defined(__CONFIG_MHL_VER_1_2__) + ret = cbus_write_reg(sii9234, 0x80 + DEVCAP_MHL_VERSION, 0x12); + /*mhl version 1.2 */ +#endif if (ret < 0) goto i2c_error_exit; ret = cbus_write_reg(sii9234, 0x80 + DEVCAP_DEV_CAT, 0x02); @@ -696,8 +721,13 @@ static int sii9234_cbus_init(struct sii9234_data *sii9234) /* YCbCr444, RGB444 */ if (ret < 0) goto i2c_error_exit; +#ifdef CONFIG_VIDEO_TVOUT_5_1CH_AUDIO ret = cbus_write_reg(sii9234, 0x80 + DEVCAP_AUD_LINK_MODE, 0x03); /* 8ch, 2ch */ +#else + ret = cbus_write_reg(sii9234, 0x80 + DEVCAP_AUD_LINK_MODE, 0x01); + /* 2ch */ +#endif if (ret < 0) goto i2c_error_exit; ret = cbus_write_reg(sii9234, 0x80 + DEVCAP_VIDEO_TYPE, 0); @@ -1434,11 +1464,6 @@ static void goto_d3(void) sii9234->rsen = false; -#if defined(CONFIG_SAMSUNG_WORKAROUND_HPD_GLANCE) &&\ - defined(CONFIG_HAS_EARLYSUSPEND) - if (!sii9234->suspend_state) - mhl_hpd_handler(false); -#endif memset(cbus_pkt_buf, 0x00, sizeof(cbus_pkt_buf)); ret = sii9234_power_init(sii9234); @@ -1610,6 +1635,7 @@ static void goto_d3(void) return; exit: pr_err("[ERROR] %s() error terminated!\n", __func__); + schedule_work(&sii9234->mhl_end_work); return; } @@ -2250,7 +2276,7 @@ static int sii9234_detection_callback(void) pr_info("sii9234: Detection failed"); if (sii9234->state == STATE_DISCONNECTED) { pr_cont(" (timeout)"); - sii9234->pdata->power_state = 0; + schedule_work(&sii9234->mhl_end_work); } else if (sii9234->state == STATE_DISCOVERY_FAILED) pr_cont(" (discovery failed)"); else if (sii9234->state == NO_MHL_STATUS) @@ -2260,8 +2286,12 @@ static int sii9234_detection_callback(void) pr_cont("\n"); /*mhl spec: 8.3.3, if discovery failed, must retry discovering */ +#ifdef CONFIG_SAMSUNG_USE_11PIN_CONNECTOR if ((sii9234->state == STATE_DISCOVERY_FAILED) && (sii9234->rgnd == RGND_1K)) { +#else + if ((sii9234->state == STATE_DISCOVERY_FAILED)) { +#endif pr_cont("Discovery failed but RGND_1K impedence" " restart detection_callback"); @@ -2276,7 +2306,7 @@ static int sii9234_detection_callback(void) pr_info("sii9234: Detection failed"); if (sii9234->state == STATE_DISCONNECTED) { pr_cont(" (timeout)"); - sii9234->pdata->power_state = 0; + schedule_work(&sii9234->mhl_end_work); } else if (sii9234->state == STATE_DISCOVERY_FAILED) pr_cont(" (discovery failed)"); else if (sii9234->state == NO_MHL_STATUS) @@ -2286,8 +2316,12 @@ static int sii9234_detection_callback(void) pr_cont("\n"); /*mhl spec: 8.3.3, if discovery failed, must retry discovering */ +#ifdef CONFIG_SAMSUNG_USE_11PIN_CONNECTOR if ((sii9234->state == STATE_DISCOVERY_FAILED) && (sii9234->rgnd == RGND_1K)) { +#else + if ((sii9234->state == STATE_DISCOVERY_FAILED)) { +#endif pr_cont("Discovery failed but RGND_1K impedence" " restart detection_callback"); @@ -3344,7 +3378,7 @@ static irqreturn_t sii9234_irq_thread(int irq, void *data) * as per Page 0,0x79 Register */ sii9234->mhl_status_value.sink_hpd = true; -#ifdef __CONFIG_USE_TIMER__ +#ifdef __CONFIG_USE_TIMER__ if (cbus_command_abort_state == 1) { pr_debug("cbus_command_mod_timer\n"); mod_timer(&sii9234->cbus_command_timer, @@ -3412,7 +3446,7 @@ static irqreturn_t sii9234_irq_thread(int irq, void *data) * or MHL cable disconnection * TODO: Define the below mhl_disconnection() */ -#ifdef __CONFIG_USE_TIMER__ +#ifdef __CONFIG_USE_TIMER__ del_timer(&sii9234->cbus_command_timer); #endif msleep(T_SRC_RXSENSE_DEGLITCH); @@ -3450,7 +3484,7 @@ static irqreturn_t sii9234_irq_thread(int irq, void *data) cbus_resp_abort_error(sii9234); if (cbus_intr1 & MSC_REQ_ABORT) { -#ifdef __CONFIG_USE_TIMER__ +#ifdef __CONFIG_USE_TIMER__ cbus_write_reg(sii9234, CBUS_INTR1_ENABLE_REG, 0); cbus_req_abort_error(sii9234); cbus_write_reg(sii9234, CBUS_INTR1_ENABLE_REG, 0xFF); @@ -3516,7 +3550,13 @@ static irqreturn_t sii9234_irq_thread(int irq, void *data) if (mhl_poweroff) { if (sii9234_callback_sched != 0) { sii9234_disable_irq(); - schedule_work(&sii9234->mhl_d3_work); + if (sii9234->pdata->factory_test == 0) { + schedule_work(&sii9234->mhl_d3_work); + pr_info("%s() normal goto_d3\n", __func__); + } else { + pr_info("%s() skip goto_d3\n", __func__); + mhl_onoff_ex(0); + } } } return IRQ_HANDLED; @@ -3561,7 +3601,31 @@ static ssize_t sysfs_check_mhl_command(struct class *class, return size; } -static CLASS_ATTR(test_result, 0664, sysfs_check_mhl_command, NULL); +static ssize_t sysfs_check_factory_store(struct class *class, + struct class_attribute *attr, const char *buf, size_t size) +{ + struct sii9234_data *sii9234 = dev_get_drvdata(sii9244_mhldev); + const char *p = buf; + u8 value = 0; + + if (p[0] == '1') + value = 1; + else + value = 0; + + sii9234->pdata->factory_test = value; + + if (sii9234->pdata->factory_test == 1) + pr_info("sii9234: in factory mode\n"); + else + pr_info("sii9234: not factory mode\n"); + + return size; + +} + +static CLASS_ATTR(test_result, 0664, sysfs_check_mhl_command, + sysfs_check_factory_store); #endif /*__CONFIG_SS_FACTORY__*/ static ssize_t sysfs_mhl_read_reg_show(struct device *dev, @@ -3715,6 +3779,9 @@ static void sii9234_extcon_work(struct work_struct *work) sii9234->extcon_attached ? "attached" : "detached"); if (sii9234->extcon_attached) { +#ifdef CONFIG_JACK_MON + jack_event_handler("hdmi", 1); +#endif #ifdef CONFIG_SAMSUNG_MHL #ifdef CONFIG_MACH_MIDAS sii9234_wake_lock(); @@ -3723,6 +3790,9 @@ static void sii9234_extcon_work(struct work_struct *work) #endif } else { +#ifdef CONFIG_JACK_MON + jack_event_handler("hdmi", 0); +#endif #ifdef CONFIG_SAMSUNG_MHL mhl_onoff_ex(false); #ifdef CONFIG_MACH_MIDAS @@ -3815,6 +3885,7 @@ static int __devinit sii9234_mhl_tx_i2c_probe(struct i2c_client *client, goto err_exit1; } sii9234->pdata->mhl_tx_client = client; + sii9234->pdata->factory_test = 0; init_waitqueue_head(&sii9234->wq); mutex_init(&sii9234->lock); @@ -3847,14 +3918,6 @@ static int __devinit sii9234_mhl_tx_i2c_probe(struct i2c_client *client, pr_debug("%s(): wake lock is initialized.\n", __func__); #endif - ret = request_threaded_irq(client->irq, NULL, sii9234_irq_thread, - IRQF_TRIGGER_HIGH | IRQF_ONESHOT, - "sii9234", sii9234); - if (ret < 0) - goto err_exit1; - - atomic_set(&sii9234->is_irq_enabled, false); - disable_irq(client->irq); #ifdef __SII9234_IRQ_DEBUG__ en_irq = 0; #endif @@ -3866,6 +3929,7 @@ static int __devinit sii9234_mhl_tx_i2c_probe(struct i2c_client *client, printk(KERN_ERR "[ERROR] %s() workqueue create fail\n", __func__); ret = -ENOMEM; + goto err_msc_wq; } INIT_WORK(&sii9234->msc_work, sii9234_process_msc_work); #endif @@ -3877,17 +3941,27 @@ static int __devinit sii9234_mhl_tx_i2c_probe(struct i2c_client *client, printk(KERN_ERR "[ERROR] %s() tmds_offon" " workqueue create fail\n", __func__); ret = -ENOMEM; + goto err_tmds_offon_wq; } INIT_WORK(&sii9234->tmds_offon_work, sii9234_tmds_offon_work); #endif + ret = request_threaded_irq(client->irq, NULL, sii9234_irq_thread, + IRQF_TRIGGER_HIGH | IRQF_ONESHOT, + "sii9234", sii9234); + if (ret < 0) + goto err_exit_after_irq; + + atomic_set(&sii9234->is_irq_enabled, false); + disable_irq(client->irq); + #if defined(__CONFIG_SS_FACTORY__) || defined(__CONFIG_MHL_SWING_LEVEL__) pr_info("sii9234 : create mhl sysfile\n"); sec_mhl = class_create(THIS_MODULE, "mhl"); if (IS_ERR(sec_mhl)) { pr_err("[ERROR] Failed to create class(sec_mhl)!\n"); - goto err_exit1; + goto err_exit_after_irq; } #endif @@ -3912,12 +3986,14 @@ static int __devinit sii9234_mhl_tx_i2c_probe(struct i2c_client *client, sii9234->cbus_pkt.command = CBUS_IDLE; sii9234->cbus_pkt.offset = DEVCAP_DEV_STATE; +#ifdef __CONFIG_USE_TIMER__ init_timer(&sii9234->cbus_command_timer); sii9234->cbus_command_timer.function = mhl_cbus_command_timer; sii9234->cbus_command_timer.data = (unsigned int)NULL; sii9234->cbus_command_timer.expires = 0xffffffffL; add_timer(&sii9234->cbus_command_timer); +#endif #ifdef CONFIG_SII9234_RCP /* indicate that we generate key events */ set_bit(EV_KEY, input->evbit); @@ -3965,6 +4041,11 @@ static int __devinit sii9234_mhl_tx_i2c_probe(struct i2c_client *client, #ifdef __CONFIG_TMDS_OFFON_WORKAROUND__ sii9234->tmds_state = 0; #endif +#if defined(CONFIG_SAMSUNG_WORKAROUND_HPD_GLANCE) &&\ + !defined(CONFIG_SAMSUNG_MHL_9290) + is_mhl_power_state_on = sii9234_is_mhl_power_state_on; +#endif + return 0; #ifdef CONFIG_EXTCON @@ -3972,6 +4053,9 @@ err_extcon: extcon_unregister_interest(&sii9234->extcon_dev); #endif err_exit2c: +#ifdef __CONFIG_USE_TIMER__ + del_timer(&sii9234->cbus_command_timer); +#endif #ifdef __CONFIG_MHL_SWING_LEVEL__ class_remove_file(sec_mhl, &class_attr_swing); #endif @@ -3983,12 +4067,25 @@ err_extcon: #if defined(__CONFIG_SS_FACTORY__) || defined(__CONFIG_MHL_SWING_LEVEL__) class_destroy(sec_mhl); #endif - err_exit1: +err_exit_after_irq: + free_irq(client->irq, sii9234); +#ifdef __CONFIG_TMDS_OFFON_WORKAROUND__ +err_tmds_offon_wq: + destroy_workqueue(sii9234_tmds_offon_wq); +#endif + +#ifdef __MHL_NEW_CBUS_MSC_CMD__ +err_msc_wq: + destroy_workqueue(sii9234_msc_wq); +#endif + +err_exit1: #ifdef CONFIG_SII9234_RCP input_free_device(input); #endif - err_exit0: +err_exit0: kfree(sii9234); + sii9234 = NULL; return ret; } diff --git a/drivers/media/video/mhl/sii9234_driver.h b/drivers/media/video/mhl/sii9234_driver.h index 081e5f6..437d053 100644 --- a/drivers/media/video/mhl/sii9234_driver.h +++ b/drivers/media/video/mhl/sii9234_driver.h @@ -34,6 +34,10 @@ #define __CONFIG_TMDS_OFFON_WORKAROUND__ #endif +#ifndef __CONFIG_USE_TIMER__ +#define __CONFIG_USE_TIMER__ +#endif + #ifndef CONFIG_SII9234_RCP #define CONFIG_SII9234_RCP 1 #include <linux/input.h> @@ -533,7 +537,9 @@ struct sii9234_data { #ifdef __CONFIG_TMDS_OFFON_WORKAROUND__ struct work_struct tmds_offon_work; #endif +#ifdef __CONFIG_USE_TIMER__ struct timer_list cbus_command_timer; +#endif #ifdef CONFIG_MACH_MIDAS struct wake_lock mhl_wake_lock; #endif diff --git a/drivers/media/video/s5c73m3_spi.c b/drivers/media/video/s5c73m3_spi.c index 0b537cb..0b537cb 100755..100644 --- a/drivers/media/video/s5c73m3_spi.c +++ b/drivers/media/video/s5c73m3_spi.c diff --git a/drivers/media/video/s5k5bafx.h b/drivers/media/video/s5k5bafx.h index 00f4c88..00f4c88 100644..100755 --- a/drivers/media/video/s5k5bafx.h +++ b/drivers/media/video/s5k5bafx.h diff --git a/drivers/media/video/samsung/Kconfig b/drivers/media/video/samsung/Kconfig index 8421224..7ae9e6a 100644 --- a/drivers/media/video/samsung/Kconfig +++ b/drivers/media/video/samsung/Kconfig @@ -17,11 +17,8 @@ if CPU_EXYNOS4210 || CPU_EXYNOS4212 || CPU_EXYNOS4412 source "drivers/media/video/samsung/fimc/Kconfig" source "drivers/media/video/samsung/tvout/Kconfig" source "drivers/media/video/samsung/mfc5x/Kconfig" - source "drivers/media/video/samsung/ump/Kconfig" - source "drivers/media/video/samsung/tsi/Kconfig" -endif -if (CPU_EXYNOS4210 || CPU_EXYNOS4212 || CPU_EXYNOS4412) && !SLP - source "drivers/media/video/samsung/mali/Kconfig" + source "drivers/media/video/samsung/mali/Kconfig" + source "drivers/media/video/samsung/ump/Kconfig" endif config VIDEO_FIMG2D diff --git a/drivers/media/video/samsung/Makefile b/drivers/media/video/samsung/Makefile index 639d3bc..e9905d2 100644 --- a/drivers/media/video/samsung/Makefile +++ b/drivers/media/video/samsung/Makefile @@ -12,26 +12,8 @@ obj-$(CONFIG_VIDEO_FIMG2D3X) += fimg2d3x/ obj-$(CONFIG_VIDEO_FIMG2D4X) += fimg2d4x/ endif -ifeq ($(CONFIG_MACH_U1), y) obj-$(CONFIG_VIDEO_UMP) += ump/ -else ifeq ($(CONFIG_MACH_SMDKC210), y) -obj-$(CONFIG_VIDEO_UMP) += ump/ -else ifeq ($(CONFIG_MACH_SMDKV310), y) -obj-$(CONFIG_VIDEO_UMP) += ump/ -else -obj-$(CONFIG_VIDEO_UMP) += ump/ -endif - obj-$(CONFIG_VIDEO_TSI) += tsi/ - -ifeq ($(CONFIG_MACH_U1), y) -obj-$(CONFIG_VIDEO_MALI400MP) += mali/ -else ifeq ($(CONFIG_MACH_SMDKC210), y) -obj-$(CONFIG_VIDEO_MALI400MP) += mali/ -else ifeq ($(CONFIG_MACH_SMDKV310), y) obj-$(CONFIG_VIDEO_MALI400MP) += mali/ -else -obj-$(CONFIG_VIDEO_MALI400MP) += mali/ -endif EXTRA_CFLAGS += -Idrivers/media/video diff --git a/drivers/media/video/samsung/jpeg_v2x/jpeg_dev.c b/drivers/media/video/samsung/jpeg_v2x/jpeg_dev.c index eb026ab..eb026ab 100644..100755 --- a/drivers/media/video/samsung/jpeg_v2x/jpeg_dev.c +++ b/drivers/media/video/samsung/jpeg_v2x/jpeg_dev.c diff --git a/drivers/media/video/samsung/mali/Kconfig b/drivers/media/video/samsung/mali/Kconfig index ae9bd7d..1736eed 100644 --- a/drivers/media/video/samsung/mali/Kconfig +++ b/drivers/media/video/samsung/mali/Kconfig @@ -38,6 +38,14 @@ int "Dedicated Memory Size" default "128" ---help--- This value is dedicated memory size of Mali GPU(unit is MByte). + +config MALI_R3P1_LSI + bool "Uses the R3P1 as a kernel module" + depends on VIDEO_MALI400MP + default n + ---help--- + This uses the r3p1 as a MALI kernel module + # For DEBUG config VIDEO_MALI400MP_DEBUG diff --git a/drivers/media/video/samsung/mali/Makefile_module b/drivers/media/video/samsung/mali/Makefile_module index 4fb0226..4fb0226 100644..100755 --- a/drivers/media/video/samsung/mali/Makefile_module +++ b/drivers/media/video/samsung/mali/Makefile_module diff --git a/drivers/media/video/samsung/mali/arch b/drivers/media/video/samsung/mali/arch new file mode 120000 index 0000000..58ffbe7 --- /dev/null +++ b/drivers/media/video/samsung/mali/arch @@ -0,0 +1 @@ +arch-release
\ No newline at end of file diff --git a/drivers/media/video/samsung/mali/arch-debug b/drivers/media/video/samsung/mali/arch-debug new file mode 120000 index 0000000..0ed0909 --- /dev/null +++ b/drivers/media/video/samsung/mali/arch-debug @@ -0,0 +1 @@ +arch-pegasus-m400/
\ No newline at end of file diff --git a/drivers/media/video/samsung/mali/arch-debug/config.h b/drivers/media/video/samsung/mali/arch-debug/config.h deleted file mode 100644 index d5196c3..0000000 --- a/drivers/media/video/samsung/mali/arch-debug/config.h +++ /dev/null @@ -1,154 +0,0 @@ -/* - * Copyright (C) 2010-2012 ARM Limited. All rights reserved. - * - * This program is free software and is provided to you under the terms of the GNU General Public License version 2 - * as published by the Free Software Foundation, and any use by you of this program is subject to the terms of such GNU licence. - * - * A copy of the licence is included with the program, and can also be obtained from Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ - -#ifndef __ARCH_CONFIG_H__ -#define __ARCH_CONFIG_H__ - -/* Configuration for the EB platform with ZBT memory enabled */ -/*zepplin added 2010.08.17 for orion configuration*/ -#define MALI_BASE_ADDR 0x13000000 -#define GP_ADDR MALI_BASE_ADDR -#define L2_ADDR MALI_BASE_ADDR+0x1000 -#define PMU_ADDR MALI_BASE_ADDR+0x2000 -#define GP_MMU_ADDR MALI_BASE_ADDR+0x3000 -#define PP0_MMU_ADDR MALI_BASE_ADDR+0x4000 -#define PP1_MMU_ADDR MALI_BASE_ADDR+0x5000 -#define PP2_MMU_ADDR MALI_BASE_ADDR+0x6000 -#define PP3_MMU_ADDR MALI_BASE_ADDR+0x7000 -#define PP0_ADDR MALI_BASE_ADDR+0x8000 -#define PP1_ADDR MALI_BASE_ADDR+0xA000 -#define PP2_ADDR MALI_BASE_ADDR+0xC000 -#define PP3_ADDR MALI_BASE_ADDR+0xE000 - -/*for mmu and os memory*/ -#define MEM_BASE_ADDR 0x40000000 -#define MEM_TOTAL_SIZE 0x40000000 -#define MEM_MALI_OS_SIZE 0x40000000 - -/*for dedicated memory*/ -//#define MEM_MALI_BASE 0x58000000 -//#define MEM_MALI_SIZE 0x08000000 -#define MEM_MALI_SIZE CONFIG_MALI_MEM_SIZE*1024*1024 -#define MEM_MALI_BASE 0x80000000 - MEM_MALI_SIZE - -static _mali_osk_resource_t arch_configuration [] = -{ - { - .type = MALI400GP, - .description = "Mali-400 GP", - .base = GP_ADDR, - .irq = IRQ_GP_3D, - .mmu_id = 1 - }, - { - .type = MALI400PP, - .base = PP0_ADDR, - .irq = IRQ_PP0_3D, - .description = "Mali-400 PP 0", - .mmu_id = 2 - }, - { - .type = MALI400PP, - .base = PP1_ADDR, - .irq = IRQ_PP1_3D, - .description = "Mali-400 PP 1", - .mmu_id = 3 - }, - { - .type = MALI400PP, - .base = PP2_ADDR, - .irq = IRQ_PP2_3D, - .description = "Mali-400 PP 2", - .mmu_id = 4 - }, - { - .type = MALI400PP, - .base = PP3_ADDR, - .irq = IRQ_PP3_3D, - .description = "Mali-400 PP 3", - .mmu_id = 5 - }, -#if USING_MMU - { - .type = MMU, - .base = GP_MMU_ADDR, - .irq = IRQ_GPMMU_3D, - .description = "Mali-400 MMU for GP", - .mmu_id = 1 - }, - { - .type = MMU, - .base = PP0_MMU_ADDR, - .irq = IRQ_PPMMU0_3D, - .description = "Mali-400 MMU for PP 0", - .mmu_id = 2 - }, - { - .type = MMU, - .base = PP1_MMU_ADDR, - .irq = IRQ_PPMMU1_3D, - .description = "Mali-400 MMU for PP 1", - .mmu_id = 3 - }, - { - .type = MMU, - .base = PP2_MMU_ADDR, - .irq = IRQ_PPMMU2_3D, - .description = "Mali-400 MMU for PP 2", - .mmu_id = 4 - }, - { - .type = MMU, - .base = PP3_MMU_ADDR, - .irq = IRQ_PPMMU3_3D, - .description = "Mali-400 MMU for PP 3", - .mmu_id = 5 - }, -#if USING_OS_MEMORY - { - .type = OS_MEMORY, - .description = "System Memory", - .size = MEM_MALI_OS_SIZE, - .flags = _MALI_CPU_WRITEABLE | _MALI_CPU_READABLE | _MALI_PP_READABLE | _MALI_PP_WRITEABLE | _MALI_GP_READABLE | _MALI_GP_WRITEABLE - }, -#endif -#if USING_DED /* Dedicated Memory */ - { - .type = MEMORY, - .description = "Dedicated Memory", - .base = MEM_MALI_BASE, - .size = MEM_MALI_SIZE, - .flags = _MALI_CPU_WRITEABLE | _MALI_CPU_READABLE | _MALI_PP_READABLE | _MALI_PP_WRITEABLE | _MALI_GP_READABLE | _MALI_GP_WRITEABLE | _MALI_MMU_READABLE | _MALI_MMU_WRITEABLE - }, -#endif/* if USING_OS_MEMORY*/ - { - .type = MEM_VALIDATION, - .description = "memory validation", - .base = MEM_BASE_ADDR, - .size = MEM_TOTAL_SIZE, - .flags = _MALI_CPU_WRITEABLE | _MALI_CPU_READABLE | _MALI_PP_READABLE | _MALI_PP_WRITEABLE | _MALI_GP_READABLE | _MALI_GP_WRITEABLE | _MALI_MMU_READABLE | _MALI_MMU_WRITEABLE - }, -#else /* Not using MMU */ - { - .type = MEMORY, - .description = "Dedicated Memory", - .base = MEM_MALI_BASE, - .size = MEM_MALI_SIZE, - .flags = _MALI_CPU_WRITEABLE | _MALI_CPU_READABLE | _MALI_PP_READABLE | _MALI_PP_WRITEABLE | _MALI_GP_READABLE | _MALI_GP_WRITEABLE | _MALI_MMU_READABLE | _MALI_MMU_WRITEABLE - }, -#endif - { - .type = MALI400L2, - .base = L2_ADDR, - .description = "Mali-400 L2 cache" - }, -}; - -#endif /* __ARCH_CONFIG_H__ */ diff --git a/drivers/media/video/samsung/mali/arch-pb-virtex5-m300/config.h b/drivers/media/video/samsung/mali/arch-pb-virtex5-m300/config.h index e579526..e579526 100644..100755 --- a/drivers/media/video/samsung/mali/arch-pb-virtex5-m300/config.h +++ b/drivers/media/video/samsung/mali/arch-pb-virtex5-m300/config.h diff --git a/drivers/media/video/samsung/mali/arch-pegasus-m400/config.h b/drivers/media/video/samsung/mali/arch-pegasus-m400/config.h index d5196c3..d5196c3 100644..100755 --- a/drivers/media/video/samsung/mali/arch-pegasus-m400/config.h +++ b/drivers/media/video/samsung/mali/arch-pegasus-m400/config.h diff --git a/drivers/media/video/samsung/mali/arch-release b/drivers/media/video/samsung/mali/arch-release new file mode 120000 index 0000000..0ed0909 --- /dev/null +++ b/drivers/media/video/samsung/mali/arch-release @@ -0,0 +1 @@ +arch-pegasus-m400/
\ No newline at end of file diff --git a/drivers/media/video/samsung/mali/arch-release/config.h b/drivers/media/video/samsung/mali/arch-release/config.h deleted file mode 100644 index d5196c3..0000000 --- a/drivers/media/video/samsung/mali/arch-release/config.h +++ /dev/null @@ -1,154 +0,0 @@ -/* - * Copyright (C) 2010-2012 ARM Limited. All rights reserved. - * - * This program is free software and is provided to you under the terms of the GNU General Public License version 2 - * as published by the Free Software Foundation, and any use by you of this program is subject to the terms of such GNU licence. - * - * A copy of the licence is included with the program, and can also be obtained from Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ - -#ifndef __ARCH_CONFIG_H__ -#define __ARCH_CONFIG_H__ - -/* Configuration for the EB platform with ZBT memory enabled */ -/*zepplin added 2010.08.17 for orion configuration*/ -#define MALI_BASE_ADDR 0x13000000 -#define GP_ADDR MALI_BASE_ADDR -#define L2_ADDR MALI_BASE_ADDR+0x1000 -#define PMU_ADDR MALI_BASE_ADDR+0x2000 -#define GP_MMU_ADDR MALI_BASE_ADDR+0x3000 -#define PP0_MMU_ADDR MALI_BASE_ADDR+0x4000 -#define PP1_MMU_ADDR MALI_BASE_ADDR+0x5000 -#define PP2_MMU_ADDR MALI_BASE_ADDR+0x6000 -#define PP3_MMU_ADDR MALI_BASE_ADDR+0x7000 -#define PP0_ADDR MALI_BASE_ADDR+0x8000 -#define PP1_ADDR MALI_BASE_ADDR+0xA000 -#define PP2_ADDR MALI_BASE_ADDR+0xC000 -#define PP3_ADDR MALI_BASE_ADDR+0xE000 - -/*for mmu and os memory*/ -#define MEM_BASE_ADDR 0x40000000 -#define MEM_TOTAL_SIZE 0x40000000 -#define MEM_MALI_OS_SIZE 0x40000000 - -/*for dedicated memory*/ -//#define MEM_MALI_BASE 0x58000000 -//#define MEM_MALI_SIZE 0x08000000 -#define MEM_MALI_SIZE CONFIG_MALI_MEM_SIZE*1024*1024 -#define MEM_MALI_BASE 0x80000000 - MEM_MALI_SIZE - -static _mali_osk_resource_t arch_configuration [] = -{ - { - .type = MALI400GP, - .description = "Mali-400 GP", - .base = GP_ADDR, - .irq = IRQ_GP_3D, - .mmu_id = 1 - }, - { - .type = MALI400PP, - .base = PP0_ADDR, - .irq = IRQ_PP0_3D, - .description = "Mali-400 PP 0", - .mmu_id = 2 - }, - { - .type = MALI400PP, - .base = PP1_ADDR, - .irq = IRQ_PP1_3D, - .description = "Mali-400 PP 1", - .mmu_id = 3 - }, - { - .type = MALI400PP, - .base = PP2_ADDR, - .irq = IRQ_PP2_3D, - .description = "Mali-400 PP 2", - .mmu_id = 4 - }, - { - .type = MALI400PP, - .base = PP3_ADDR, - .irq = IRQ_PP3_3D, - .description = "Mali-400 PP 3", - .mmu_id = 5 - }, -#if USING_MMU - { - .type = MMU, - .base = GP_MMU_ADDR, - .irq = IRQ_GPMMU_3D, - .description = "Mali-400 MMU for GP", - .mmu_id = 1 - }, - { - .type = MMU, - .base = PP0_MMU_ADDR, - .irq = IRQ_PPMMU0_3D, - .description = "Mali-400 MMU for PP 0", - .mmu_id = 2 - }, - { - .type = MMU, - .base = PP1_MMU_ADDR, - .irq = IRQ_PPMMU1_3D, - .description = "Mali-400 MMU for PP 1", - .mmu_id = 3 - }, - { - .type = MMU, - .base = PP2_MMU_ADDR, - .irq = IRQ_PPMMU2_3D, - .description = "Mali-400 MMU for PP 2", - .mmu_id = 4 - }, - { - .type = MMU, - .base = PP3_MMU_ADDR, - .irq = IRQ_PPMMU3_3D, - .description = "Mali-400 MMU for PP 3", - .mmu_id = 5 - }, -#if USING_OS_MEMORY - { - .type = OS_MEMORY, - .description = "System Memory", - .size = MEM_MALI_OS_SIZE, - .flags = _MALI_CPU_WRITEABLE | _MALI_CPU_READABLE | _MALI_PP_READABLE | _MALI_PP_WRITEABLE | _MALI_GP_READABLE | _MALI_GP_WRITEABLE - }, -#endif -#if USING_DED /* Dedicated Memory */ - { - .type = MEMORY, - .description = "Dedicated Memory", - .base = MEM_MALI_BASE, - .size = MEM_MALI_SIZE, - .flags = _MALI_CPU_WRITEABLE | _MALI_CPU_READABLE | _MALI_PP_READABLE | _MALI_PP_WRITEABLE | _MALI_GP_READABLE | _MALI_GP_WRITEABLE | _MALI_MMU_READABLE | _MALI_MMU_WRITEABLE - }, -#endif/* if USING_OS_MEMORY*/ - { - .type = MEM_VALIDATION, - .description = "memory validation", - .base = MEM_BASE_ADDR, - .size = MEM_TOTAL_SIZE, - .flags = _MALI_CPU_WRITEABLE | _MALI_CPU_READABLE | _MALI_PP_READABLE | _MALI_PP_WRITEABLE | _MALI_GP_READABLE | _MALI_GP_WRITEABLE | _MALI_MMU_READABLE | _MALI_MMU_WRITEABLE - }, -#else /* Not using MMU */ - { - .type = MEMORY, - .description = "Dedicated Memory", - .base = MEM_MALI_BASE, - .size = MEM_MALI_SIZE, - .flags = _MALI_CPU_WRITEABLE | _MALI_CPU_READABLE | _MALI_PP_READABLE | _MALI_PP_WRITEABLE | _MALI_GP_READABLE | _MALI_GP_WRITEABLE | _MALI_MMU_READABLE | _MALI_MMU_WRITEABLE - }, -#endif - { - .type = MALI400L2, - .base = L2_ADDR, - .description = "Mali-400 L2 cache" - }, -}; - -#endif /* __ARCH_CONFIG_H__ */ diff --git a/drivers/media/video/samsung/mali/arch/config.h b/drivers/media/video/samsung/mali/arch/config.h deleted file mode 100644 index d5196c3..0000000 --- a/drivers/media/video/samsung/mali/arch/config.h +++ /dev/null @@ -1,154 +0,0 @@ -/* - * Copyright (C) 2010-2012 ARM Limited. All rights reserved. - * - * This program is free software and is provided to you under the terms of the GNU General Public License version 2 - * as published by the Free Software Foundation, and any use by you of this program is subject to the terms of such GNU licence. - * - * A copy of the licence is included with the program, and can also be obtained from Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ - -#ifndef __ARCH_CONFIG_H__ -#define __ARCH_CONFIG_H__ - -/* Configuration for the EB platform with ZBT memory enabled */ -/*zepplin added 2010.08.17 for orion configuration*/ -#define MALI_BASE_ADDR 0x13000000 -#define GP_ADDR MALI_BASE_ADDR -#define L2_ADDR MALI_BASE_ADDR+0x1000 -#define PMU_ADDR MALI_BASE_ADDR+0x2000 -#define GP_MMU_ADDR MALI_BASE_ADDR+0x3000 -#define PP0_MMU_ADDR MALI_BASE_ADDR+0x4000 -#define PP1_MMU_ADDR MALI_BASE_ADDR+0x5000 -#define PP2_MMU_ADDR MALI_BASE_ADDR+0x6000 -#define PP3_MMU_ADDR MALI_BASE_ADDR+0x7000 -#define PP0_ADDR MALI_BASE_ADDR+0x8000 -#define PP1_ADDR MALI_BASE_ADDR+0xA000 -#define PP2_ADDR MALI_BASE_ADDR+0xC000 -#define PP3_ADDR MALI_BASE_ADDR+0xE000 - -/*for mmu and os memory*/ -#define MEM_BASE_ADDR 0x40000000 -#define MEM_TOTAL_SIZE 0x40000000 -#define MEM_MALI_OS_SIZE 0x40000000 - -/*for dedicated memory*/ -//#define MEM_MALI_BASE 0x58000000 -//#define MEM_MALI_SIZE 0x08000000 -#define MEM_MALI_SIZE CONFIG_MALI_MEM_SIZE*1024*1024 -#define MEM_MALI_BASE 0x80000000 - MEM_MALI_SIZE - -static _mali_osk_resource_t arch_configuration [] = -{ - { - .type = MALI400GP, - .description = "Mali-400 GP", - .base = GP_ADDR, - .irq = IRQ_GP_3D, - .mmu_id = 1 - }, - { - .type = MALI400PP, - .base = PP0_ADDR, - .irq = IRQ_PP0_3D, - .description = "Mali-400 PP 0", - .mmu_id = 2 - }, - { - .type = MALI400PP, - .base = PP1_ADDR, - .irq = IRQ_PP1_3D, - .description = "Mali-400 PP 1", - .mmu_id = 3 - }, - { - .type = MALI400PP, - .base = PP2_ADDR, - .irq = IRQ_PP2_3D, - .description = "Mali-400 PP 2", - .mmu_id = 4 - }, - { - .type = MALI400PP, - .base = PP3_ADDR, - .irq = IRQ_PP3_3D, - .description = "Mali-400 PP 3", - .mmu_id = 5 - }, -#if USING_MMU - { - .type = MMU, - .base = GP_MMU_ADDR, - .irq = IRQ_GPMMU_3D, - .description = "Mali-400 MMU for GP", - .mmu_id = 1 - }, - { - .type = MMU, - .base = PP0_MMU_ADDR, - .irq = IRQ_PPMMU0_3D, - .description = "Mali-400 MMU for PP 0", - .mmu_id = 2 - }, - { - .type = MMU, - .base = PP1_MMU_ADDR, - .irq = IRQ_PPMMU1_3D, - .description = "Mali-400 MMU for PP 1", - .mmu_id = 3 - }, - { - .type = MMU, - .base = PP2_MMU_ADDR, - .irq = IRQ_PPMMU2_3D, - .description = "Mali-400 MMU for PP 2", - .mmu_id = 4 - }, - { - .type = MMU, - .base = PP3_MMU_ADDR, - .irq = IRQ_PPMMU3_3D, - .description = "Mali-400 MMU for PP 3", - .mmu_id = 5 - }, -#if USING_OS_MEMORY - { - .type = OS_MEMORY, - .description = "System Memory", - .size = MEM_MALI_OS_SIZE, - .flags = _MALI_CPU_WRITEABLE | _MALI_CPU_READABLE | _MALI_PP_READABLE | _MALI_PP_WRITEABLE | _MALI_GP_READABLE | _MALI_GP_WRITEABLE - }, -#endif -#if USING_DED /* Dedicated Memory */ - { - .type = MEMORY, - .description = "Dedicated Memory", - .base = MEM_MALI_BASE, - .size = MEM_MALI_SIZE, - .flags = _MALI_CPU_WRITEABLE | _MALI_CPU_READABLE | _MALI_PP_READABLE | _MALI_PP_WRITEABLE | _MALI_GP_READABLE | _MALI_GP_WRITEABLE | _MALI_MMU_READABLE | _MALI_MMU_WRITEABLE - }, -#endif/* if USING_OS_MEMORY*/ - { - .type = MEM_VALIDATION, - .description = "memory validation", - .base = MEM_BASE_ADDR, - .size = MEM_TOTAL_SIZE, - .flags = _MALI_CPU_WRITEABLE | _MALI_CPU_READABLE | _MALI_PP_READABLE | _MALI_PP_WRITEABLE | _MALI_GP_READABLE | _MALI_GP_WRITEABLE | _MALI_MMU_READABLE | _MALI_MMU_WRITEABLE - }, -#else /* Not using MMU */ - { - .type = MEMORY, - .description = "Dedicated Memory", - .base = MEM_MALI_BASE, - .size = MEM_MALI_SIZE, - .flags = _MALI_CPU_WRITEABLE | _MALI_CPU_READABLE | _MALI_PP_READABLE | _MALI_PP_WRITEABLE | _MALI_GP_READABLE | _MALI_GP_WRITEABLE | _MALI_MMU_READABLE | _MALI_MMU_WRITEABLE - }, -#endif - { - .type = MALI400L2, - .base = L2_ADDR, - .description = "Mali-400 L2 cache" - }, -}; - -#endif /* __ARCH_CONFIG_H__ */ diff --git a/drivers/media/video/samsung/mali/common/mali_block_allocator.c b/drivers/media/video/samsung/mali/common/mali_block_allocator.c index 269e662..269e662 100644..100755 --- a/drivers/media/video/samsung/mali/common/mali_block_allocator.c +++ b/drivers/media/video/samsung/mali/common/mali_block_allocator.c diff --git a/drivers/media/video/samsung/mali/common/mali_block_allocator.h b/drivers/media/video/samsung/mali/common/mali_block_allocator.h index d3f0f9b..d3f0f9b 100644..100755 --- a/drivers/media/video/samsung/mali/common/mali_block_allocator.h +++ b/drivers/media/video/samsung/mali/common/mali_block_allocator.h diff --git a/drivers/media/video/samsung/mali/common/mali_device_pause_resume.c b/drivers/media/video/samsung/mali/common/mali_device_pause_resume.c index 6af1279..6af1279 100644..100755 --- a/drivers/media/video/samsung/mali/common/mali_device_pause_resume.c +++ b/drivers/media/video/samsung/mali/common/mali_device_pause_resume.c diff --git a/drivers/media/video/samsung/mali/common/mali_device_pause_resume.h b/drivers/media/video/samsung/mali/common/mali_device_pause_resume.h index 6be75b0..6be75b0 100644..100755 --- a/drivers/media/video/samsung/mali/common/mali_device_pause_resume.h +++ b/drivers/media/video/samsung/mali/common/mali_device_pause_resume.h diff --git a/drivers/media/video/samsung/mali/common/mali_gp.h b/drivers/media/video/samsung/mali/common/mali_gp.h index 3175b75..3175b75 100644..100755 --- a/drivers/media/video/samsung/mali/common/mali_gp.h +++ b/drivers/media/video/samsung/mali/common/mali_gp.h diff --git a/drivers/media/video/samsung/mali/common/mali_gp_scheduler.h b/drivers/media/video/samsung/mali/common/mali_gp_scheduler.h index ef58509..ef58509 100644..100755 --- a/drivers/media/video/samsung/mali/common/mali_gp_scheduler.h +++ b/drivers/media/video/samsung/mali/common/mali_gp_scheduler.h diff --git a/drivers/media/video/samsung/mali/common/mali_hw_core.c b/drivers/media/video/samsung/mali/common/mali_hw_core.c index 0b08622..0b08622 100644..100755 --- a/drivers/media/video/samsung/mali/common/mali_hw_core.c +++ b/drivers/media/video/samsung/mali/common/mali_hw_core.c diff --git a/drivers/media/video/samsung/mali/common/mali_hw_core.h b/drivers/media/video/samsung/mali/common/mali_hw_core.h index c797804..c797804 100644..100755 --- a/drivers/media/video/samsung/mali/common/mali_hw_core.h +++ b/drivers/media/video/samsung/mali/common/mali_hw_core.h diff --git a/drivers/media/video/samsung/mali/common/mali_kernel_core.h b/drivers/media/video/samsung/mali/common/mali_kernel_core.h index d424c48..d424c48 100644..100755 --- a/drivers/media/video/samsung/mali/common/mali_kernel_core.h +++ b/drivers/media/video/samsung/mali/common/mali_kernel_core.h diff --git a/drivers/media/video/samsung/mali/common/mali_kernel_descriptor_mapping.c b/drivers/media/video/samsung/mali/common/mali_kernel_descriptor_mapping.c index b9f05ca..b9f05ca 100644..100755 --- a/drivers/media/video/samsung/mali/common/mali_kernel_descriptor_mapping.c +++ b/drivers/media/video/samsung/mali/common/mali_kernel_descriptor_mapping.c diff --git a/drivers/media/video/samsung/mali/common/mali_kernel_descriptor_mapping.h b/drivers/media/video/samsung/mali/common/mali_kernel_descriptor_mapping.h index 82ed94d..82ed94d 100644..100755 --- a/drivers/media/video/samsung/mali/common/mali_kernel_descriptor_mapping.h +++ b/drivers/media/video/samsung/mali/common/mali_kernel_descriptor_mapping.h diff --git a/drivers/media/video/samsung/mali/common/mali_kernel_mem_os.h b/drivers/media/video/samsung/mali/common/mali_kernel_mem_os.h index 0946169..0946169 100644..100755 --- a/drivers/media/video/samsung/mali/common/mali_kernel_mem_os.h +++ b/drivers/media/video/samsung/mali/common/mali_kernel_mem_os.h diff --git a/drivers/media/video/samsung/mali/common/mali_kernel_memory_engine.c b/drivers/media/video/samsung/mali/common/mali_kernel_memory_engine.c index 1377560..1377560 100644..100755 --- a/drivers/media/video/samsung/mali/common/mali_kernel_memory_engine.c +++ b/drivers/media/video/samsung/mali/common/mali_kernel_memory_engine.c diff --git a/drivers/media/video/samsung/mali/common/mali_kernel_memory_engine.h b/drivers/media/video/samsung/mali/common/mali_kernel_memory_engine.h index cda74c3..cda74c3 100644..100755 --- a/drivers/media/video/samsung/mali/common/mali_kernel_memory_engine.h +++ b/drivers/media/video/samsung/mali/common/mali_kernel_memory_engine.h diff --git a/drivers/media/video/samsung/mali/common/mali_kernel_utilization.c b/drivers/media/video/samsung/mali/common/mali_kernel_utilization.c index a374dbf..a374dbf 100644..100755 --- a/drivers/media/video/samsung/mali/common/mali_kernel_utilization.c +++ b/drivers/media/video/samsung/mali/common/mali_kernel_utilization.c diff --git a/drivers/media/video/samsung/mali/common/mali_kernel_utilization.h b/drivers/media/video/samsung/mali/common/mali_kernel_utilization.h index 1f60517..1f60517 100644..100755 --- a/drivers/media/video/samsung/mali/common/mali_kernel_utilization.h +++ b/drivers/media/video/samsung/mali/common/mali_kernel_utilization.h diff --git a/drivers/media/video/samsung/mali/common/mali_mem_validation.h b/drivers/media/video/samsung/mali/common/mali_mem_validation.h index 2043b44..2043b44 100644..100755 --- a/drivers/media/video/samsung/mali/common/mali_mem_validation.h +++ b/drivers/media/video/samsung/mali/common/mali_mem_validation.h diff --git a/drivers/media/video/samsung/mali/common/mali_osk_bitops.h b/drivers/media/video/samsung/mali/common/mali_osk_bitops.h index f262f7d..f262f7d 100644..100755 --- a/drivers/media/video/samsung/mali/common/mali_osk_bitops.h +++ b/drivers/media/video/samsung/mali/common/mali_osk_bitops.h diff --git a/drivers/media/video/samsung/mali/common/mali_osk_list.h b/drivers/media/video/samsung/mali/common/mali_osk_list.h index a8d15f2..a8d15f2 100644..100755 --- a/drivers/media/video/samsung/mali/common/mali_osk_list.h +++ b/drivers/media/video/samsung/mali/common/mali_osk_list.h diff --git a/drivers/media/video/samsung/mali/common/mali_osk_mali.h b/drivers/media/video/samsung/mali/common/mali_osk_mali.h index 427fcc8..427fcc8 100644..100755 --- a/drivers/media/video/samsung/mali/common/mali_osk_mali.h +++ b/drivers/media/video/samsung/mali/common/mali_osk_mali.h diff --git a/drivers/media/video/samsung/mali/common/mali_pm.h b/drivers/media/video/samsung/mali/common/mali_pm.h index d4ccfde..d4ccfde 100644..100755 --- a/drivers/media/video/samsung/mali/common/mali_pm.h +++ b/drivers/media/video/samsung/mali/common/mali_pm.h diff --git a/drivers/media/video/samsung/mali/common/mali_pp.h b/drivers/media/video/samsung/mali/common/mali_pp.h index 9b425a0..9b425a0 100644..100755 --- a/drivers/media/video/samsung/mali/common/mali_pp.h +++ b/drivers/media/video/samsung/mali/common/mali_pp.h diff --git a/drivers/media/video/samsung/mali/common/mali_pp_scheduler.h b/drivers/media/video/samsung/mali/common/mali_pp_scheduler.h index 48eb3bd..48eb3bd 100644..100755 --- a/drivers/media/video/samsung/mali/common/mali_pp_scheduler.h +++ b/drivers/media/video/samsung/mali/common/mali_pp_scheduler.h diff --git a/drivers/media/video/samsung/mali/common/mali_scheduler.c b/drivers/media/video/samsung/mali/common/mali_scheduler.c index 52159a0..52159a0 100644..100755 --- a/drivers/media/video/samsung/mali/common/mali_scheduler.c +++ b/drivers/media/video/samsung/mali/common/mali_scheduler.c diff --git a/drivers/media/video/samsung/mali/common/mali_scheduler.h b/drivers/media/video/samsung/mali/common/mali_scheduler.h index 74f0947..74f0947 100644..100755 --- a/drivers/media/video/samsung/mali/common/mali_scheduler.h +++ b/drivers/media/video/samsung/mali/common/mali_scheduler.h diff --git a/drivers/media/video/samsung/mali/common/mali_session.h b/drivers/media/video/samsung/mali/common/mali_session.h index b47c340..b47c340 100644..100755 --- a/drivers/media/video/samsung/mali/common/mali_session.h +++ b/drivers/media/video/samsung/mali/common/mali_session.h diff --git a/drivers/media/video/samsung/mali/common/mali_user_settings_db.c b/drivers/media/video/samsung/mali/common/mali_user_settings_db.c index 681c2b0..681c2b0 100644..100755 --- a/drivers/media/video/samsung/mali/common/mali_user_settings_db.c +++ b/drivers/media/video/samsung/mali/common/mali_user_settings_db.c diff --git a/drivers/media/video/samsung/mali/common/mali_user_settings_db.h b/drivers/media/video/samsung/mali/common/mali_user_settings_db.h index fbb9415..fbb9415 100644..100755 --- a/drivers/media/video/samsung/mali/common/mali_user_settings_db.h +++ b/drivers/media/video/samsung/mali/common/mali_user_settings_db.h diff --git a/drivers/media/video/samsung/mali/linux/license/gpl/mali_kernel_license.h b/drivers/media/video/samsung/mali/linux/license/gpl/mali_kernel_license.h index e9e5e55..e9e5e55 100644..100755 --- a/drivers/media/video/samsung/mali/linux/license/gpl/mali_kernel_license.h +++ b/drivers/media/video/samsung/mali/linux/license/gpl/mali_kernel_license.h diff --git a/drivers/media/video/samsung/mali/linux/mali_kernel_ioctl.h b/drivers/media/video/samsung/mali/linux/mali_kernel_ioctl.h index 6fc59a7..6fc59a7 100644..100755 --- a/drivers/media/video/samsung/mali/linux/mali_kernel_ioctl.h +++ b/drivers/media/video/samsung/mali/linux/mali_kernel_ioctl.h diff --git a/drivers/media/video/samsung/mali/linux/mali_kernel_linux.h b/drivers/media/video/samsung/mali/linux/mali_kernel_linux.h index 22dc9a4..22dc9a4 100644..100755 --- a/drivers/media/video/samsung/mali/linux/mali_kernel_linux.h +++ b/drivers/media/video/samsung/mali/linux/mali_kernel_linux.h diff --git a/drivers/media/video/samsung/mali/linux/mali_kernel_pm.h b/drivers/media/video/samsung/mali/linux/mali_kernel_pm.h index 6ef7270..6ef7270 100644..100755 --- a/drivers/media/video/samsung/mali/linux/mali_kernel_pm.h +++ b/drivers/media/video/samsung/mali/linux/mali_kernel_pm.h diff --git a/drivers/media/video/samsung/mali/linux/mali_kernel_sysfs.h b/drivers/media/video/samsung/mali/linux/mali_kernel_sysfs.h index d79a886..d79a886 100644..100755 --- a/drivers/media/video/samsung/mali/linux/mali_kernel_sysfs.h +++ b/drivers/media/video/samsung/mali/linux/mali_kernel_sysfs.h diff --git a/drivers/media/video/samsung/mali/linux/mali_linux_pm.h b/drivers/media/video/samsung/mali/linux/mali_linux_pm.h index 10f633e..10f633e 100644..100755 --- a/drivers/media/video/samsung/mali/linux/mali_linux_pm.h +++ b/drivers/media/video/samsung/mali/linux/mali_linux_pm.h diff --git a/drivers/media/video/samsung/mali/linux/mali_linux_pm_testsuite.h b/drivers/media/video/samsung/mali/linux/mali_linux_pm_testsuite.h index 7d811bd..7d811bd 100644..100755 --- a/drivers/media/video/samsung/mali/linux/mali_linux_pm_testsuite.h +++ b/drivers/media/video/samsung/mali/linux/mali_linux_pm_testsuite.h diff --git a/drivers/media/video/samsung/mali/linux/mali_osk_atomics.c b/drivers/media/video/samsung/mali/linux/mali_osk_atomics.c index 05831c5..05831c5 100644..100755 --- a/drivers/media/video/samsung/mali/linux/mali_osk_atomics.c +++ b/drivers/media/video/samsung/mali/linux/mali_osk_atomics.c diff --git a/drivers/media/video/samsung/mali/linux/mali_osk_indir_mmap.c b/drivers/media/video/samsung/mali/linux/mali_osk_indir_mmap.c index 7297218..7297218 100644..100755 --- a/drivers/media/video/samsung/mali/linux/mali_osk_indir_mmap.c +++ b/drivers/media/video/samsung/mali/linux/mali_osk_indir_mmap.c diff --git a/drivers/media/video/samsung/mali/linux/mali_osk_indir_mmap.h b/drivers/media/video/samsung/mali/linux/mali_osk_indir_mmap.h index f87739b..f87739b 100644..100755 --- a/drivers/media/video/samsung/mali/linux/mali_osk_indir_mmap.h +++ b/drivers/media/video/samsung/mali/linux/mali_osk_indir_mmap.h diff --git a/drivers/media/video/samsung/mali/linux/mali_osk_math.c b/drivers/media/video/samsung/mali/linux/mali_osk_math.c index 3e62e51..3e62e51 100644..100755 --- a/drivers/media/video/samsung/mali/linux/mali_osk_math.c +++ b/drivers/media/video/samsung/mali/linux/mali_osk_math.c diff --git a/drivers/media/video/samsung/mali/linux/mali_osk_memory.c b/drivers/media/video/samsung/mali/linux/mali_osk_memory.c index 7bb470f..7bb470f 100644..100755 --- a/drivers/media/video/samsung/mali/linux/mali_osk_memory.c +++ b/drivers/media/video/samsung/mali/linux/mali_osk_memory.c diff --git a/drivers/media/video/samsung/mali/linux/mali_osk_misc.c b/drivers/media/video/samsung/mali/linux/mali_osk_misc.c index ad486db..ad486db 100644..100755 --- a/drivers/media/video/samsung/mali/linux/mali_osk_misc.c +++ b/drivers/media/video/samsung/mali/linux/mali_osk_misc.c diff --git a/drivers/media/video/samsung/mali/linux/mali_osk_notification.c b/drivers/media/video/samsung/mali/linux/mali_osk_notification.c index c14c0d5..c14c0d5 100644..100755 --- a/drivers/media/video/samsung/mali/linux/mali_osk_notification.c +++ b/drivers/media/video/samsung/mali/linux/mali_osk_notification.c diff --git a/drivers/media/video/samsung/mali/linux/mali_osk_specific.h b/drivers/media/video/samsung/mali/linux/mali_osk_specific.h index 83ee906..83ee906 100644..100755 --- a/drivers/media/video/samsung/mali/linux/mali_osk_specific.h +++ b/drivers/media/video/samsung/mali/linux/mali_osk_specific.h diff --git a/drivers/media/video/samsung/mali/linux/mali_osk_time.c b/drivers/media/video/samsung/mali/linux/mali_osk_time.c index da9b865..da9b865 100644..100755 --- a/drivers/media/video/samsung/mali/linux/mali_osk_time.c +++ b/drivers/media/video/samsung/mali/linux/mali_osk_time.c diff --git a/drivers/media/video/samsung/mali/linux/mali_osk_timers.c b/drivers/media/video/samsung/mali/linux/mali_osk_timers.c index e5829a3..e5829a3 100644..100755 --- a/drivers/media/video/samsung/mali/linux/mali_osk_timers.c +++ b/drivers/media/video/samsung/mali/linux/mali_osk_timers.c diff --git a/drivers/media/video/samsung/mali/linux/mali_ukk_gp.c b/drivers/media/video/samsung/mali/linux/mali_ukk_gp.c index 7070016..7070016 100644..100755 --- a/drivers/media/video/samsung/mali/linux/mali_ukk_gp.c +++ b/drivers/media/video/samsung/mali/linux/mali_ukk_gp.c diff --git a/drivers/media/video/samsung/mali/linux/mali_ukk_mem.c b/drivers/media/video/samsung/mali/linux/mali_ukk_mem.c index 260f257..260f257 100644..100755 --- a/drivers/media/video/samsung/mali/linux/mali_ukk_mem.c +++ b/drivers/media/video/samsung/mali/linux/mali_ukk_mem.c diff --git a/drivers/media/video/samsung/mali/linux/mali_ukk_vsync.c b/drivers/media/video/samsung/mali/linux/mali_ukk_vsync.c index f9b5a3e..f9b5a3e 100644..100755 --- a/drivers/media/video/samsung/mali/linux/mali_ukk_vsync.c +++ b/drivers/media/video/samsung/mali/linux/mali_ukk_vsync.c diff --git a/drivers/media/video/samsung/mali/platform/default/mali_platform.c b/drivers/media/video/samsung/mali/platform/default/mali_platform.c index 9e64ce7..9e64ce7 100644..100755 --- a/drivers/media/video/samsung/mali/platform/default/mali_platform.c +++ b/drivers/media/video/samsung/mali/platform/default/mali_platform.c diff --git a/drivers/media/video/samsung/mali/platform/orion-m400/mali_platform.c b/drivers/media/video/samsung/mali/platform/orion-m400/mali_platform.c index 792b9a9..792b9a9 100644..100755 --- a/drivers/media/video/samsung/mali/platform/orion-m400/mali_platform.c +++ b/drivers/media/video/samsung/mali/platform/orion-m400/mali_platform.c diff --git a/drivers/media/video/samsung/mali/platform/orion-m400/mali_platform_dvfs.c b/drivers/media/video/samsung/mali/platform/orion-m400/mali_platform_dvfs.c index f8d76dc..f8d76dc 100644..100755 --- a/drivers/media/video/samsung/mali/platform/orion-m400/mali_platform_dvfs.c +++ b/drivers/media/video/samsung/mali/platform/orion-m400/mali_platform_dvfs.c diff --git a/drivers/media/video/samsung/mali/readme.txt b/drivers/media/video/samsung/mali/readme.txt index 3acc51c..3acc51c 100644..100755 --- a/drivers/media/video/samsung/mali/readme.txt +++ b/drivers/media/video/samsung/mali/readme.txt diff --git a/drivers/media/video/samsung/mali/timestamp-arm11-cc/mali_timestamp.c b/drivers/media/video/samsung/mali/timestamp-arm11-cc/mali_timestamp.c index a6b1d76..a6b1d76 100644..100755 --- a/drivers/media/video/samsung/mali/timestamp-arm11-cc/mali_timestamp.c +++ b/drivers/media/video/samsung/mali/timestamp-arm11-cc/mali_timestamp.c diff --git a/drivers/media/video/samsung/mali/timestamp-arm11-cc/mali_timestamp.h b/drivers/media/video/samsung/mali/timestamp-arm11-cc/mali_timestamp.h index 3279dae..3279dae 100644..100755 --- a/drivers/media/video/samsung/mali/timestamp-arm11-cc/mali_timestamp.h +++ b/drivers/media/video/samsung/mali/timestamp-arm11-cc/mali_timestamp.h diff --git a/drivers/media/video/samsung/mali/timestamp-default/mali_timestamp.c b/drivers/media/video/samsung/mali/timestamp-default/mali_timestamp.c index a6b1d76..a6b1d76 100644..100755 --- a/drivers/media/video/samsung/mali/timestamp-default/mali_timestamp.c +++ b/drivers/media/video/samsung/mali/timestamp-default/mali_timestamp.c diff --git a/drivers/media/video/samsung/mali/timestamp-default/mali_timestamp.h b/drivers/media/video/samsung/mali/timestamp-default/mali_timestamp.h index 94b842a..94b842a 100644..100755 --- a/drivers/media/video/samsung/mali/timestamp-default/mali_timestamp.h +++ b/drivers/media/video/samsung/mali/timestamp-default/mali_timestamp.h diff --git a/drivers/media/video/samsung/mfc5x/Kconfig b/drivers/media/video/samsung/mfc5x/Kconfig index 0ff8a60..57858ed 100644 --- a/drivers/media/video/samsung/mfc5x/Kconfig +++ b/drivers/media/video/samsung/mfc5x/Kconfig @@ -9,8 +9,8 @@ config VIDEO_MFC5X This is a Samsung Multi Format Codecs (MFC) FIMV V5.x config VIDEO_MFC_MAX_INSTANCE - int "Maximum size of MFC instance (1-4)" - range 1 4 + int "Maximum size of MFC instance (1-8)" + range 1 8 depends on VIDEO_MFC5X default 4 @@ -36,4 +36,10 @@ config VIDEO_MFC5X_DEC_CHROMA_LUMA_4K_ALIGN ---help--- To use physical address on the gem interface. - +config USE_MFC_CMA + bool "Use CMA for MFC_SECURE region (EXPERIMENTAL)" + depends on DMA_CMA + default n + help + This enables the Contiguous Memory Allocator for MFC SECURE region. + If unsure, say "n". diff --git a/drivers/media/video/samsung/mfc5x/SsbSipMfcApi.h b/drivers/media/video/samsung/mfc5x/SsbSipMfcApi.h index ba4b736..cbf6cab 100644 --- a/drivers/media/video/samsung/mfc5x/SsbSipMfcApi.h +++ b/drivers/media/video/samsung/mfc5x/SsbSipMfcApi.h @@ -41,11 +41,20 @@ #define SAMSUNG_MFC_DEV_NAME "/dev/s3c-mfc" #if defined(CONFIG_CPU_EXYNOS4212) || defined(CONFIG_CPU_EXYNOS4412) -#define SUPPORT_SLICE_ENCODING 0 // This is originally 1, but breaks video recording on AOSP :( +#define SUPPORT_SLICE_ENCODING 0 // originaly 1, but we're missing matching userspace #else #define SUPPORT_SLICE_ENCODING 0 #endif +/*---------------------------*/ +/* Memory Type */ +/*---------------------------*/ +typedef enum { + MEMORY_PHY_ADDR = 0, + MEMORY_USRPTR = 1, + MEMORY_DMABUF = 2, +} SSBSIP_MFC_MEMORY_TYPE; + /*--------------------------------------------------------------------------------*/ /* Structure and Type */ /*--------------------------------------------------------------------------------*/ @@ -127,6 +136,7 @@ typedef enum { /* C210 specific feature */ MFC_ENC_SETCONF_VUI_INFO, MFC_ENC_SETCONF_I_PERIOD, + MFC_ENC_SETCONF_SPS_PPS_GEN, MFC_ENC_SETCONF_HIER_P, MFC_ENC_SETCONF_SEI_GEN, @@ -139,7 +149,12 @@ typedef enum { MFC_GETOUTBUF_DISPLAY_DECODING, MFC_GETOUTBUF_DISPLAY_ONLY, MFC_GETOUTBUF_DISPLAY_END, - MFC_GETOUTBUF_CHANGE_RESOL +#ifndef CONFIG_SLP + MFC_GETOUTBUF_CHANGE_RESOL +#else + MFC_GETOUTBUF_CHANGING_RESOL, + MFC_GETOUTBUF_CHANGE_RESOL_DONE +#endif } SSBSIP_MFC_DEC_OUTBUF_STATUS; typedef enum { diff --git a/drivers/media/video/samsung/mfc5x/mfc.h b/drivers/media/video/samsung/mfc5x/mfc.h index de1849c..a8c5d72 100644 --- a/drivers/media/video/samsung/mfc5x/mfc.h +++ b/drivers/media/video/samsung/mfc5x/mfc.h @@ -98,4 +98,8 @@ #endif #endif +#ifdef CONFIG_SLP +#define MFC_NUM_PLANE 2 +#endif + #endif /* __MFC_H_ */ diff --git a/drivers/media/video/samsung/mfc5x/mfc_buf.c b/drivers/media/video/samsung/mfc5x/mfc_buf.c index e0e243d..d841a37 100644 --- a/drivers/media/video/samsung/mfc5x/mfc_buf.c +++ b/drivers/media/video/samsung/mfc5x/mfc_buf.c @@ -16,6 +16,13 @@ #include <linux/mm.h> #include <linux/err.h> +#ifdef CONFIG_SLP +#include <linux/cma.h> +#ifdef CONFIG_SLP_DMABUF +#include <linux/dma-buf.h> +#endif +#endif + #include "mfc.h" #include "mfc_mem.h" #include "mfc_buf.h" @@ -30,6 +37,168 @@ #include "ump_kernel_interface_vcm.h" #endif +#ifdef CONFIG_SLP_DMABUF +struct mfc_dmabuf_buf { + dma_addr_t dma_addr; + unsigned long size; + /* fd exported from this buf object. */ + int export_fd; + /* dma buf exported from this buf object. */ + struct dma_buf *export_dma_buf; + struct dma_buf_attachment *db_attach; + atomic_t refcount; +}; + +static void _mfc_dmabuf_put(struct mfc_dmabuf_buf *buf) +{ + if (atomic_dec_and_test(&buf->refcount)) { + /* + * In legacy driver, dmabuf functions don't control + * cma memory allocation and free. + * so, currently we comment cma_free function. + * cma_free(buf->dma_addr); + */ + kfree(buf); + } +} + +static int mfc_attach_dmabuf(struct dma_buf *dmabuf, struct device *dev, + struct dma_buf_attachment *attach) +{ + mfc_dbg("mfc_attach_dmabuf: called !\n"); + return 0; +} + +static void mfc_detach_dmabuf(struct dma_buf *dmabuf, + struct dma_buf_attachment *attach) +{ + mfc_dbg("mfc_detach_dmabuf: called !\n"); + dma_buf_put(dmabuf); +} + +static struct sg_table * + mfc_map_dmabuf(struct dma_buf_attachment *attach, + enum dma_data_direction direction) +{ + struct mfc_dmabuf_buf *buf; + struct sg_table *sgt; + int ret; + int val; + + mfc_dbg("mfc_map_dmabuf: called !\n"); + if (!attach->dmabuf->priv) { + mfc_err("mfc_map_dmabuf: failed : attach->dmabuf->priv is NULL\n"); + return NULL; + } + buf = attach->dmabuf->priv; + sgt = kzalloc(sizeof(struct sg_table), GFP_KERNEL); + if (!sgt) { + mfc_err("mfc_map_dmabuf: failed to allocate sg table.\n"); + return ERR_PTR(-ENOMEM); + } + + ret = sg_alloc_table(sgt, 1, GFP_KERNEL); + if (ret < 0) { + mfc_err("mfc_map_dmabuf: failed to allocate scatter list.\n"); + kfree(sgt); + sgt = NULL; + return ERR_PTR(-ENOMEM); + } + + sg_init_table(sgt->sgl, 1); + sg_dma_len(sgt->sgl) = buf->size; + sg_set_page(sgt->sgl, pfn_to_page(PFN_DOWN(buf->dma_addr)), + buf->size, 0); + sg_dma_address(sgt->sgl) = buf->dma_addr; + + /* + * increase reference count of this buf object. + * + * Note: + * alloated physical memory region is being shared with others so + * this region shouldn't be released until all references of this + * region will be dropped by mfc_unmap_dmabuf(). + */ + val = atomic_inc_return(&buf->refcount); + mfc_dbg("mfc_map_dmabuf: refcount: %d\n", val); + + return sgt; +} + +static void mfc_unmap_dmabuf(struct dma_buf_attachment *attach, + struct sg_table *sgt, enum dma_data_direction direction) +{ + int val = 0; + struct mfc_dmabuf_buf *buf; + + mfc_dbg("mfc_unmap_dmabuf: called !\n"); + buf = attach->dmabuf->priv; + + sg_free_table(sgt); + kfree(sgt); + sgt = NULL; + + val = atomic_dec_return(&buf->refcount); + mfc_dbg("mfc_unmap_dmabuf: refcount: %d\n", val); +} + +static void mfc_release_dmabuf(struct dma_buf *dmabuf) +{ + struct mfc_dmabuf_buf *buf; + + mfc_dbg("mfc_release_dmabuf: called !\n"); + if (!dmabuf->priv) { + mfc_dbg("mfc_release_dmabuf: failed: dmabuf->priv is NULL\n"); + return; + } + buf = dmabuf->priv; + if (buf->export_dma_buf == dmabuf) { + mfc_dbg("mfc_release_dmabuf: called !\n"); + buf->export_fd = -1; + buf->export_dma_buf = NULL; + + _mfc_dmabuf_put(buf); + } +} + +static void *mfc_kmap_atomic_dmabuf(struct dma_buf *dma_buf, + unsigned long page_num) +{ + return NULL; +} + +static void mfc_kunmap_atomic_dmabuf(struct dma_buf *dma_buf, + unsigned long page_num, + void *addr) +{ + +} + +static void *mfc_kmap_dmabuf(struct dma_buf *dma_buf, + unsigned long page_num) +{ + return NULL; +} + +static void mfc_kunmap_dmabuf(struct dma_buf *dma_buf, + unsigned long page_num, void *addr) +{ + +} + +static struct dma_buf_ops mfc_dmabuf_ops = { + .attach = mfc_attach_dmabuf, + .detach = mfc_detach_dmabuf, + .map_dma_buf = mfc_map_dmabuf, + .unmap_dma_buf = mfc_unmap_dmabuf, + .release = mfc_release_dmabuf, + .kmap = mfc_kmap_dmabuf, + .kmap_atomic = mfc_kmap_atomic_dmabuf, + .kunmap = mfc_kunmap_dmabuf, + .kunmap_atomic = mfc_kunmap_atomic_dmabuf, +}; +#endif + #define PRINT_BUF #undef DEBUG_ALLOC_FREE @@ -122,7 +291,7 @@ static int mfc_put_free_buf(unsigned long addr, unsigned int size, int port) /* 0x00: not merged, 0x01: prev merged, 0x02: next merged */ int merged = 0x00; - if (!size) + if ((!size) || (port >= MFC_MAX_MEM_PORT_NUM)) return -EINVAL; mfc_dbg("addr: 0x%08lx, size: %d, port: %d\n", addr, size, port); @@ -376,6 +545,13 @@ void mfc_final_buf(void) kfree(alloc); } #else +#ifdef CONFIG_SLP + if (alloc->real) { + cma_free(alloc->real); + list_del(&alloc->list); + kfree(alloc); + } +#else if (mfc_put_free_buf(alloc->real, alloc->size, port) < 0) { @@ -385,6 +561,7 @@ void mfc_final_buf(void) kfree(alloc); } #endif +#endif } } @@ -466,6 +643,15 @@ struct mfc_alloc_buffer *_mfc_alloc_buf( #elif defined(CONFIG_S5P_VMEM) int align_size = 0; #endif +#ifdef CONFIG_SLP + struct mfc_dev *dev = ctx->dev; + size_t available_size; + struct cma_info cma_infos; +#ifdef CONFIG_SLP_DMABUF + struct mfc_dmabuf_buf *buf; + int flags = 0; +#endif +#endif /* unsigned long flags; */ @@ -486,8 +672,62 @@ struct mfc_alloc_buffer *_mfc_alloc_buf( /* spin_lock_irqsave(&lock, flags); */ +#ifdef CONFIG_SLP + if (cma_info(&cma_infos, dev->device, port ? "B" : "A")) { + mfc_info("failed to get CMA info of 'mfc'\n"); + kfree(alloc); + return NULL; + } + available_size = cma_infos.free_size; + if (available_size > MAX_MEM_OFFSET) { + mfc_warn("<Warning> too large 'mfc' reserved memory, " + "size will be shrink (%d:%d)\n", + size >> 10, MAX_MEM_OFFSET >> 10); + size = MAX_MEM_OFFSET; + } + addr = cma_alloc(dev->device, port ? "B" : "A", size, align); + if (IS_ERR_VALUE(addr)) { + mfc_err("failed to get rsv. memory from CMA"); + kfree(alloc); + return NULL; + } +#ifdef CONFIG_SLP_DMABUF + buf = kzalloc(sizeof(struct mfc_dmabuf_buf), GFP_KERNEL); + if (!buf) { + mfc_err("failed to alloc mfc_dmabuf_buf"); + kfree(alloc); + cma_free(addr); + return NULL; + } + buf->dma_addr = addr; + buf->size = size; + + buf->export_dma_buf = dma_buf_export(buf, &mfc_dmabuf_ops, + buf->size, 0600); + if (!buf->export_dma_buf) { + mfc_err("fail to export dma_buf\n"); + kfree(alloc); + cma_free(addr); + kfree(buf); + return NULL; + } + buf->export_fd = dma_buf_fd(buf->export_dma_buf, flags); + if (buf->export_fd < 0) { + mfc_err(" fail to get fd from dmabuf.\n"); + kfree(alloc); + cma_free(addr); + kfree(buf); + dma_buf_put(buf->export_dma_buf); + return NULL; + } + alloc->dmabuf_fd = buf->export_fd; + atomic_inc(&buf->refcount); + mfc_dbg(" buf->export_fd = %d\n", buf->export_fd); +#endif +#else addr = mfc_get_free_buf(size, align, port); +#endif mfc_dbg("mfc_get_free_buf: 0x%08lx\n", addr); @@ -783,15 +1023,22 @@ int _mfc_free_buf(unsigned long real) kfree(alloc); } #else +#ifdef CONFIG_SLP + if (alloc->real) { + cma_free(alloc->real); + list_del(&alloc->list); + kfree(alloc); + } +#else if (mfc_put_free_buf(alloc->real, alloc->size, port) < 0) { - mfc_err("failed to add free buffer\n"); } else { list_del(&alloc->list); kfree(alloc); } #endif +#endif break; } } @@ -839,6 +1086,13 @@ void mfc_free_buf_type(int owner, int type) alloc = list_entry(pos, struct mfc_alloc_buffer, list); if ((alloc->owner == owner) && (alloc->type == type)) { +#ifdef CONFIG_SLP + if (alloc->real) { + cma_free(alloc->real); + list_del(&alloc->list); + kfree(alloc); + } +#else if (mfc_put_free_buf(alloc->real, alloc->size, port) < 0) { @@ -847,6 +1101,7 @@ void mfc_free_buf_type(int owner, int type) list_del(&alloc->list); kfree(alloc); } +#endif } } } @@ -905,6 +1160,13 @@ void mfc_free_buf_inst(int owner) kfree(alloc); } #else +#ifdef CONFIG_SLP + if (alloc->real) { + cma_free(alloc->real); + list_del(&alloc->list); + kfree(alloc); + } +#else if (mfc_put_free_buf(alloc->real, alloc->size, port) < 0) { @@ -914,6 +1176,7 @@ void mfc_free_buf_inst(int owner) kfree(alloc); } #endif +#endif } } } @@ -1034,4 +1297,24 @@ void *mfc_get_buf_ump_handle(unsigned long real) return NULL; } #endif +#ifdef CONFIG_SLP_DMABUF +int mfc_get_buf_dmabuf(unsigned long real) +{ + struct list_head *pos, *nxt; + int port; + struct mfc_alloc_buffer *alloc; + + mfc_dbg("real: 0x%08lx\n", real); + for (port = 0; port < mfc_mem_count(); port++) { + list_for_each_safe(pos, nxt, &mfc_alloc_head[port]) { + alloc = list_entry(pos, struct mfc_alloc_buffer, list); + + if (alloc->real == real) + return alloc->dmabuf_fd; + } + } + + return -EINVAL; +} +#endif diff --git a/drivers/media/video/samsung/mfc5x/mfc_buf.h b/drivers/media/video/samsung/mfc5x/mfc_buf.h index 7fafb94..28ef0d6 100644 --- a/drivers/media/video/samsung/mfc5x/mfc_buf.h +++ b/drivers/media/video/samsung/mfc5x/mfc_buf.h @@ -142,6 +142,10 @@ struct mfc_alloc_buffer { unsigned char *addr; /* kernel virtual address space */ unsigned int type; /* buffer type */ int owner; /* instance context id */ +#if defined(CONFIG_DMA_CMA) && defined(CONFIG_USE_MFC_CMA) + struct device *dev; + dma_addr_t dma_addr; +#endif #if defined(CONFIG_VIDEO_MFC_VCM_UMP) struct vcm_mmu_res *vcm_s; struct vcm_res *vcm_k; @@ -159,6 +163,9 @@ struct mfc_alloc_buffer { * when user use mmap, * user can access whole of memory by offset. */ +#ifdef CONFIG_SLP_DMABUF + int dmabuf_fd; +#endif #endif }; @@ -187,6 +194,9 @@ unsigned long mfc_get_buf_real(int owner, unsigned int key); unsigned char *mfc_get_buf_addr(int owner, unsigned char *user); unsigned char *_mfc_get_buf_addr(int owner, unsigned char *user); */ +#ifdef CONFIG_SLP_DMABUF +int mfc_get_buf_dmabuf(unsigned long real); +#endif #ifdef CONFIG_VIDEO_MFC_VCM_UMP unsigned int mfc_vcm_bind_from_others(struct mfc_inst_ctx *ctx, struct mfc_buf_alloc_arg *args, int flag); diff --git a/drivers/media/video/samsung/mfc5x/mfc_dec.c b/drivers/media/video/samsung/mfc5x/mfc_dec.c index fd78b7d..d3d336a 100644 --- a/drivers/media/video/samsung/mfc5x/mfc_dec.c +++ b/drivers/media/video/samsung/mfc5x/mfc_dec.c @@ -1882,15 +1882,6 @@ int mfc_init_decoding(struct mfc_inst_ctx *ctx, union mfc_args *args) dec_ctx->numtotaldpb); #if defined(CONFIG_BUSFREQ) -#if defined(CONFIG_CPU_EXYNOS4210) - /* Fix MFC & Bus Frequency for better performance */ - if (atomic_read(&ctx->dev->busfreq_lock_cnt) == 0) { - exynos4_busfreq_lock(DVFS_LOCK_ID_MFC, BUS_L1); - mfc_dbg("Bus FREQ locked to L1\n"); - } - atomic_inc(&ctx->dev->busfreq_lock_cnt); - ctx->busfreq_flag = true; -#else /* Lock MFC & Bus FREQ for high resolution */ if (ctx->width >= MAX_HOR_RES || ctx->height >= MAX_VER_RES) { if (atomic_read(&ctx->dev->busfreq_lock_cnt) == 0) { @@ -1900,8 +1891,17 @@ int mfc_init_decoding(struct mfc_inst_ctx *ctx, union mfc_args *args) atomic_inc(&ctx->dev->busfreq_lock_cnt); ctx->busfreq_flag = true; - } + } else { +#if defined(CONFIG_CPU_EXYNOS4210) + /* Fix MFC & Bus Frequency for better performance */ + if (atomic_read(&ctx->dev->busfreq_lock_cnt) == 0) { + exynos4_busfreq_lock(DVFS_LOCK_ID_MFC, BUS_L1); + mfc_dbg("Bus FREQ locked to L1\n"); + } + atomic_inc(&ctx->dev->busfreq_lock_cnt); + ctx->busfreq_flag = true; #endif + } #endif #if defined(CONFIG_CPU_EXYNOS4210) && defined(CONFIG_EXYNOS4_CPUFREQ) @@ -1926,8 +1926,12 @@ int mfc_init_decoding(struct mfc_inst_ctx *ctx, union mfc_args *args) dmc_max_threshold = EXYNOS4212_DMC_MAX_THRESHOLD + 5; } else if (soc_is_exynos4412()) { - dmc_max_threshold = - EXYNOS4412_DMC_MAX_THRESHOLD + 5; + if (samsung_rev() >= EXYNOS4412_REV_2_0) + dmc_max_threshold = + PRIME_DMC_MAX_THRESHOLD + 5; + else + dmc_max_threshold = + EXYNOS4412_DMC_MAX_THRESHOLD + 5; } else { pr_err("Unsupported model.\n"); return -EINVAL; @@ -2093,6 +2097,25 @@ int mfc_change_resolution(struct mfc_inst_ctx *ctx, struct mfc_dec_exe_arg *exe_ } ret = mfc_cmd_init_buffers(ctx); + +#ifdef CONFIG_SLP + if (ctx->codecid == H264_DEC) { + exe_arg->out_crop_right_offset = + (read_shm(ctx, CROP_INFO1) >> 16) & 0xFFFF; + exe_arg->out_crop_left_offset = + read_shm(ctx, CROP_INFO1) & 0xFFFF; + exe_arg->out_crop_bottom_offset = + (read_shm(ctx, CROP_INFO2) >> 16) & 0xFFFF; + exe_arg->out_crop_top_offset = + read_shm(ctx, CROP_INFO2) & 0xFFFF; + + mfc_dbg("mfc_change_resolution: crop info t: %d, r: %d, b: %d, l: %d\n", + exe_arg->out_crop_top_offset, + exe_arg->out_crop_right_offset, + exe_arg->out_crop_bottom_offset, + exe_arg->out_crop_left_offset); + } +#endif if (ret < 0) return ret; @@ -2126,7 +2149,7 @@ static int mfc_decoding_frame(struct mfc_inst_ctx *ctx, struct mfc_dec_exe_arg * unsigned char *stream_vir; int ret; struct mfc_dec_ctx *dec_ctx = (struct mfc_dec_ctx *)ctx->c_priv; - unsigned long mem_ofs; + long mem_ofs; #ifdef CONFIG_VIDEO_MFC_VCM_UMP void *ump_handle; #endif @@ -2265,9 +2288,29 @@ static int mfc_decoding_frame(struct mfc_inst_ctx *ctx, struct mfc_dec_exe_arg * exe_arg->out_display_status = dec_ctx->dispstatus; - exe_arg->out_display_Y_addr = (display_luma_addr << 11); - exe_arg->out_display_C_addr = (display_chroma_addr << 11); - +#ifdef CONFIG_SLP_DMABUF + if (exe_arg->memory_type == MEMORY_DMABUF) { + exe_arg->out_display_Y_addr = + mfc_get_buf_dmabuf(display_luma_addr << 11); + if (exe_arg->out_display_Y_addr < 0) { + mfc_err("mfc_get_buf_dmabuf : Get Y fd error %d\n", + exe_arg->out_display_Y_addr); + return MFC_DEC_EXE_ERR; + } + exe_arg->out_display_C_addr = + mfc_get_buf_dmabuf(display_chroma_addr << 11); + if (exe_arg->out_display_C_addr < 0) { + mfc_err("mfc_get_buf_dmabuf : Get C fd error %d\n", + exe_arg->out_display_C_addr); + return MFC_DEC_EXE_ERR; + } + } else { +#endif + exe_arg->out_display_Y_addr = (display_luma_addr << 11); + exe_arg->out_display_C_addr = (display_chroma_addr << 11); +#ifdef CONFIG_SLP_DMABUF + } +#endif exe_arg->out_disp_pic_frame_type = display_frame_type; exe_arg->out_y_offset = mfc_mem_data_ofs(display_luma_addr << 11, 1); @@ -2361,6 +2404,7 @@ int mfc_exec_decoding(struct mfc_inst_ctx *ctx, union mfc_args *args) mfc_check_resolution_change(ctx, exe_arg); if (ctx->resolution_status == RES_SET_CHANGE) { ret = mfc_decoding_frame(ctx, exe_arg, &consumed); +#ifndef CONFIG_SLP } else if ((ctx->resolution_status == RES_WAIT_FRAME_DONE) && (exe_arg->out_display_status == DISP_S_FINISH)) { exe_arg->out_display_status = DISP_S_RES_CHANGE; @@ -2368,6 +2412,20 @@ int mfc_exec_decoding(struct mfc_inst_ctx *ctx, union mfc_args *args) if (ret != MFC_OK) return ret; ctx->resolution_status = RES_NO_CHANGE; +#else + } else if (ctx->resolution_status == RES_WAIT_FRAME_DONE) { + if (exe_arg->out_display_status == DISP_S_FINISH) { + exe_arg->out_display_status = + DISP_S_RES_CHANGE_DONE; + + ret = mfc_change_resolution(ctx, exe_arg); + if (ret != MFC_OK) + return ret; + ctx->resolution_status = RES_NO_CHANGE; + } else + exe_arg->out_display_status = + DISP_S_RES_CHANGING; +#endif } if ((dec_ctx->ispackedpb) && diff --git a/drivers/media/video/samsung/mfc5x/mfc_dec.h b/drivers/media/video/samsung/mfc5x/mfc_dec.h index f59795b..86b7a97 100644 --- a/drivers/media/video/samsung/mfc5x/mfc_dec.h +++ b/drivers/media/video/samsung/mfc5x/mfc_dec.h @@ -44,7 +44,12 @@ enum disp_status { DISP_S_DD = 1, DISP_S_DISPLAY = 2, DISP_S_FINISH = 3, +#ifndef CONFIG_SLP DISP_S_RES_CHANGE = 4, /* not H/W bit */ +#else + DISP_S_RES_CHANGING = 4, /* not H/W bit */ + DISP_S_RES_CHANGE_DONE = 5, /* not H/W bit */ +#endif }; /* decoding status */ diff --git a/drivers/media/video/samsung/mfc5x/mfc_dev.c b/drivers/media/video/samsung/mfc5x/mfc_dev.c index e3a0b60..23bc10d 100644 --- a/drivers/media/video/samsung/mfc5x/mfc_dev.c +++ b/drivers/media/video/samsung/mfc5x/mfc_dev.c @@ -66,6 +66,10 @@ #include <plat/sysmmu.h> #endif +#ifdef CONFIG_SLP_DMABUF +#include <media/videobuf2-core.h> +#endif + #define MFC_MINOR 252 #define MFC_FW_NAME "mfc_fw.bin" @@ -108,6 +112,79 @@ static inline void clear_magic(unsigned char *addr) } #endif +#ifdef CONFIG_SLP_DMABUF +/** + * _mfc_dmabuf_put() - release memory associated with + * a DMABUF shared buffer + */ +static void _mfc_dmabuf_put(struct vb2_plane *planes) +{ + unsigned int plane; + + for (plane = 0; plane < MFC_NUM_PLANE; ++plane) { + void *mem_priv = planes[plane].mem_priv; + + if (mem_priv) { + dma_buf_detach(planes[plane].dbuf, + planes[plane].mem_priv); + dma_buf_put(planes[plane].dbuf); + planes[plane].dbuf = NULL; + planes[plane].mem_priv = NULL; + } + } +} + +void mfc_queue_free(struct mfc_inst_ctx *mfc_ctx) +{ + struct vb2_plane *planes; + int buffer; + + for (buffer = 0; buffer < VIDEO_MAX_PLANES; ++buffer) { + planes = mfc_ctx->enc_planes[buffer]; + + if (!planes) + continue; + + _mfc_dmabuf_put(planes); + kfree(planes); + planes = NULL; + } +} + +int mfc_queue_alloc(struct mfc_inst_ctx *mfc_ctx) +{ + struct vb2_plane *planes; + int buffer; + int ret = 0; + + for (buffer = 0; buffer < MFC_NUM_PLANE; ++buffer) { + planes = kzalloc(sizeof(struct vb2_plane), GFP_KERNEL); + if (!planes) { + printk(KERN_INFO "MFC Queue memory alloc failed\n"); + ret = -ENOMEM; + goto err; + } + + planes->mem_priv = NULL; + mfc_ctx->enc_planes[buffer] = planes; + } + + for (buffer = MFC_NUM_PLANE; buffer < VIDEO_MAX_PLANES; ++buffer) + mfc_ctx->enc_planes[buffer] = NULL; + + return ret; + +err: + for (buffer = 0; buffer < VIDEO_MAX_PLANES; buffer++) { + if (mfc_ctx->enc_planes[buffer] != NULL) + kfree(mfc_ctx->enc_planes[buffer]); + mfc_ctx->enc_planes[buffer] = NULL; + } + + return ret; +} +#endif + static int get_free_inst_id(struct mfc_dev *dev) { int slot = 0; @@ -135,6 +212,25 @@ static int mfc_open(struct inode *inode, struct file *file) file->private_data = NULL; mutex_lock(&mfcdev->lock); + +#if defined(CONFIG_USE_MFC_CMA) && defined(CONFIG_MACH_M0) + if (atomic_read(&mfcdev->inst_cnt) == 0) { + size_t size = 0x02800000; + mfcdev->cma_vaddr = dma_alloc_coherent(mfcdev->device, size, + &mfcdev->cma_dma_addr, 0); + if (!mfcdev->cma_vaddr) { + printk(KERN_ERR "%s: dma_alloc_coherent returns " + "-ENOMEM\n", __func__); + mutex_unlock(&mfcdev->lock); + return -ENOMEM; + } + printk(KERN_INFO "%s[%d] size 0x%x, vaddr 0x%x, base 0x%x\n", + __func__, __LINE__, (int)size, + (int)mfcdev->cma_vaddr, + (int)mfcdev->cma_dma_addr); + } +#endif + #if SUPPORT_SLICE_ENCODING mfcdev->frame_working_flag = 1; mfcdev->frame_sys = 0; @@ -292,6 +388,13 @@ static int mfc_open(struct inode *inode, struct file *file) if (mfcdev->wait_frame_timeout == 1) wake_up(&mfcdev->wait_frame); #endif +#ifdef CONFIG_SLP_DMABUF + ret = mfc_queue_alloc(mfc_ctx); + if (ret < 0) { + mfc_err("mfc_queue_alloc failed\n"); + goto err_inst_ctx; + } +#endif mfc_info("MFC instance [%d:%d] opened", mfc_ctx->id, atomic_read(&mfcdev->inst_cnt)); @@ -456,10 +559,24 @@ static int mfc_release(struct inode *inode, struct file *file) if (mfcdev->wait_frame_timeout == 1) wake_up(&dev->wait_frame); #endif +#ifdef CONFIG_SLP_DMABUF + mfc_queue_free(mfc_ctx); +#endif err_pwr_disable: - mutex_unlock(&dev->lock); +#if defined(CONFIG_USE_MFC_CMA) && defined(CONFIG_MACH_M0) + if (atomic_read(&mfcdev->inst_cnt) == 0) { + size_t size = 0x02800000; + dma_free_coherent(mfcdev->device, size, mfcdev->cma_vaddr, + mfcdev->cma_dma_addr); + printk(KERN_INFO "%s[%d] size 0x%x, vaddr 0x%x, base 0x0%x\n", + __func__, __LINE__, (int)size, + (int) mfcdev->cma_vaddr, + (int)mfcdev->cma_dma_addr); + } +#endif + mutex_unlock(&dev->lock); return ret; } diff --git a/drivers/media/video/samsung/mfc5x/mfc_dev.h b/drivers/media/video/samsung/mfc5x/mfc_dev.h index c82c26c..bb2095c 100644 --- a/drivers/media/video/samsung/mfc5x/mfc_dev.h +++ b/drivers/media/video/samsung/mfc5x/mfc_dev.h @@ -99,6 +99,12 @@ struct mfc_dev { struct mfc_fw fw; +#if defined(CONFIG_DMA_CMA) && defined(CONFIG_USE_MFC_CMA) + /* NEW CMA */ + void *cma_vaddr; + dma_addr_t cma_dma_addr; +#endif + struct s5p_vcm_mmu *_vcm_mmu; struct device *device; diff --git a/drivers/media/video/samsung/mfc5x/mfc_enc.c b/drivers/media/video/samsung/mfc5x/mfc_enc.c index 53f24c9..65d7b6b 100644 --- a/drivers/media/video/samsung/mfc5x/mfc_enc.c +++ b/drivers/media/video/samsung/mfc5x/mfc_enc.c @@ -31,6 +31,11 @@ #include "mfc_buf.h" #include "mfc_interface.h" +#ifdef CONFIG_SLP_DMABUF +#include <linux/dma-buf.h> +#include <media/videobuf2-core.h> +#endif + static LIST_HEAD(mfc_encoders); /* @@ -507,7 +512,7 @@ static int pre_seq_start(struct mfc_inst_ctx *ctx) write_reg(mfc_mem_base_ofs(enc_ctx->streamaddr) >> 11, MFC_ENC_SI_CH1_SB_ADR); write_reg(enc_ctx->streamsize, MFC_ENC_SI_CH1_SB_SIZE); #if defined(CONFIG_CPU_EXYNOS4212) || defined(CONFIG_CPU_EXYNOS4412) - write_shm(ctx, 1, HW_VERSRION); + write_shm(ctx, 1, HW_VERSION); #endif return 0; @@ -579,6 +584,13 @@ static int h264_pre_seq_start(struct mfc_inst_ctx *ctx) h264->change &= ~(CHG_FRAME_PACKING); } + if (h264->sps_pps_gen == 1) { + write_shm(ctx, + ((h264->sps_pps_gen << 8) | + read_shm(ctx, EXT_ENC_CONTROL)), + EXT_ENC_CONTROL); + } + return 0; } @@ -1050,6 +1062,23 @@ static int h264_set_codec_cfg(struct mfc_inst_ctx *ctx, int type, void *arg) h264->change |= CHG_FRAME_PACKING; break; + + case MFC_ENC_SETCONF_SPS_PPS_GEN: + mfc_dbg("MFC_ENC_SETCONF_SPS_PPS_GEN : %d\n", ctx->state); + + if ((ctx->state < INST_STATE_CREATE) || + (ctx->state > INST_STATE_EXE)) { + mfc_err("MFC_ENC_SETCONF_SPS_PPS_GEN : " + " state is invalid\n"); + return MFC_STATE_INVALID; + } + + if (usercfg->basic.values[0] > 0) + h264->sps_pps_gen = 1; + else + h264->sps_pps_gen = 0; + + break; default: mfc_dbg("invalid set cfg type: 0x%08x\n", type); ret = -2; @@ -1590,6 +1619,65 @@ err_handling: return ret; } +#ifdef CONFIG_SLP_DMABUF +static int mfc_qbuf_dmabuf(struct mfc_inst_ctx *ctx, struct vb2_plane *planes, + int fd, dma_addr_t *dma_addr) +{ + struct sg_table *sg; + struct dma_buf *dbuf; + struct dma_buf_attachment *dba; + + dbuf = dma_buf_get(fd); + if (IS_ERR_OR_NULL(dbuf)) { + mfc_err("dmabuf get error!!!\n"); + dma_buf_put(dbuf); + return -EINVAL; + } + + /* Skip the plane if already verified */ + if (dbuf == planes->dbuf) { + dma_buf_put(dbuf); + return 0; + } + + dba = dma_buf_attach(dbuf, ctx->dev->device); + if (IS_ERR(dba)) { + mfc_err("failed to attach dmabuf\n"); + dma_buf_put(dbuf); + return -EINVAL; + } + + sg = dma_buf_map_attachment(dba, DMA_BIDIRECTIONAL); + if (IS_ERR(sg)) { + dma_buf_detach(dbuf, dba); + dma_buf_put(dbuf); + return PTR_ERR(sg); + } + dba->priv = sg; + + planes->dbuf = dbuf; + planes->mem_priv = dba; + + *dma_addr = sg_dma_address(sg->sgl); + + return 0; +} + +static int mfc_dqbuf_dmabuf(struct mfc_inst_ctx *ctx, struct vb2_plane *plane) +{ + + struct sg_table *sg; + struct dma_buf_attachment *dba; + + dba = plane->mem_priv; + sg = dba->priv; + + dma_buf_unmap_attachment(dba, sg, DMA_FROM_DEVICE); + + return 0; +} +#endif + static int mfc_encoding_frame(struct mfc_inst_ctx *ctx, struct mfc_enc_exe_arg *exe_arg) { int ret; @@ -1597,6 +1685,9 @@ static int mfc_encoding_frame(struct mfc_inst_ctx *ctx, struct mfc_enc_exe_arg * void *ump_handle; #endif struct mfc_enc_ctx *enc_ctx = (struct mfc_enc_ctx *)ctx->c_priv; +#ifdef CONFIG_SLP_DMABUF + dma_addr_t dma_addr[MFC_NUM_PLANE]; +#endif /* Set Frame Tag */ write_shm(ctx, exe_arg->in_frametag, SET_FRAME_TAG); @@ -1648,6 +1739,39 @@ static int mfc_encoding_frame(struct mfc_inst_ctx *ctx, struct mfc_enc_exe_arg * #endif /* Set current frame buffer addr */ +#ifdef CONFIG_SLP_DMABUF + if (exe_arg->memory_type == MEMORY_DMABUF) { + ret = mfc_qbuf_dmabuf(ctx, ctx->enc_planes[0], + exe_arg->in_Y_addr, &dma_addr[0]); + if (ret) { + mfc_err("mfc_qbuf_dmabuf Y error!!! ret = %d\n", ret); + return -EINVAL; + } + ret = mfc_qbuf_dmabuf(ctx, ctx->enc_planes[1], + exe_arg->in_CbCr_addr, &dma_addr[1]); + if (ret) { + mfc_err("mfc_qbuf_dmabuf CbCr error!!! ret = %d\n", + ret); + ret = mfc_dqbuf_dmabuf(ctx, ctx->enc_planes[0]); + if (ret) + mfc_err("mfc_dqbuf_dmabuf Y error!! ret = %d\n", + ret); + return -EINVAL; + } + } + +#if (MFC_MAX_MEM_PORT_NUM == 2) + write_reg((dma_addr[0] - mfc_mem_base(1)) >> 11, + MFC_ENC_SI_CH1_CUR_Y_ADR); + write_reg((dma_addr[1] - mfc_mem_base(1)) >> 11, + MFC_ENC_SI_CH1_CUR_C_ADR); +#else + write_reg((dma_addr[0] - mfc_mem_base(0)) >> 11, + MFC_ENC_SI_CH1_CUR_Y_ADR); + write_reg((dma_addr[1] - mfc_mem_base(0)) >> 11, + MFC_ENC_SI_CH1_CUR_C_ADR); +#endif +#else #if (MFC_MAX_MEM_PORT_NUM == 2) write_reg((exe_arg->in_Y_addr - mfc_mem_base(1)) >> 11, MFC_ENC_SI_CH1_CUR_Y_ADR); write_reg((exe_arg->in_CbCr_addr - mfc_mem_base(1)) >> 11, MFC_ENC_SI_CH1_CUR_C_ADR); @@ -1655,6 +1779,7 @@ static int mfc_encoding_frame(struct mfc_inst_ctx *ctx, struct mfc_enc_exe_arg * write_reg((exe_arg->in_Y_addr - mfc_mem_base(0)) >> 11, MFC_ENC_SI_CH1_CUR_Y_ADR); write_reg((exe_arg->in_CbCr_addr - mfc_mem_base(0)) >> 11, MFC_ENC_SI_CH1_CUR_C_ADR); #endif +#endif #if 0 write_reg(1, MFC_ENC_STR_BF_U_EMPTY); @@ -1680,8 +1805,33 @@ static int mfc_encoding_frame(struct mfc_inst_ctx *ctx, struct mfc_enc_exe_arg * exe_arg->out_encoded_size = read_reg(MFC_ENC_SI_STRM_SIZE); /* FIXME: port must be checked */ - exe_arg->out_Y_addr = mfc_mem_addr_ofs(read_reg(MFC_ENCODED_Y_ADDR) << 11, 1); - exe_arg->out_CbCr_addr = mfc_mem_addr_ofs(read_reg(MFC_ENCODED_C_ADDR) << 11, 1); +#ifdef CONFIG_SLP_DMABUF + if (exe_arg->memory_type == MEMORY_DMABUF) { + exe_arg->out_Y_addr = + mfc_get_buf_dmabuf(mfc_mem_addr_ofs + (read_reg(MFC_ENCODED_Y_ADDR) << 11, 1)); + if (exe_arg->out_Y_addr < 0) { + mfc_err("mfc_get_buf_dmabuf : Get Y fd error %d\n", + exe_arg->out_Y_addr); + return MFC_ENC_EXE_ERR; + } + exe_arg->out_CbCr_addr = + mfc_get_buf_dmabuf(mfc_mem_addr_ofs + (read_reg(MFC_ENCODED_C_ADDR) << 11, 1)); + if (exe_arg->out_CbCr_addr < 0) { + mfc_err("mfc_get_buf_dmabuf : Get CbCr fd error %d\n", + exe_arg->out_CbCr_addr); + return MFC_ENC_EXE_ERR; + } + } else { +#endif + exe_arg->out_Y_addr = mfc_mem_addr_ofs + (read_reg(MFC_ENCODED_Y_ADDR) << 11, 1); + exe_arg->out_CbCr_addr = mfc_mem_addr_ofs + (read_reg(MFC_ENCODED_C_ADDR) << 11, 1); +#ifdef CONFIG_SLP_DMABUF + } +#endif #if SUPPORT_SLICE_ENCODING } else { /* slice */ ret = mfc_cmd_slice_start(ctx); @@ -1699,8 +1849,35 @@ static int mfc_encoding_frame(struct mfc_inst_ctx *ctx, struct mfc_enc_exe_arg * exe_arg->out_encoded_size = enc_ctx->slicesize; /* FIXME: port must be checked */ - exe_arg->out_Y_addr = mfc_mem_addr_ofs(read_reg(MFC_ENCODED_Y_ADDR) << 11, 1); - exe_arg->out_CbCr_addr = mfc_mem_addr_ofs(read_reg(MFC_ENCODED_C_ADDR) << 11, 1); +#ifdef CONFIG_SLP_DMABUF + if (exe_arg->memory_type == MEMORY_DMABUF) { + exe_arg->out_Y_addr = + mfc_get_buf_dmabuf(mfc_mem_addr_ofs + (read_reg(MFC_ENCODED_Y_ADDR) + << 11, 1)); + if (exe_arg->out_Y_addr < 0) { + mfc_err("mfc_get_buf_dmabuf : Get Y fd error %d\n", + exe_arg->out_Y_addr); + return MFC_ENC_EXE_ERR; + } + exe_arg->out_CbCr_addr = + mfc_get_buf_dmabuf(mfc_mem_addr_ofs + (read_reg(MFC_ENCODED_C_ADDR) + << 11, 1)); + if (exe_arg->out_CbCr_addr < 0) { + mfc_err("mfc_get_buf_dmabuf : Get CbCr fd error %d\n", + exe_arg->out_CbCr_addr); + return MFC_ENC_EXE_ERR; + } + } else { +#endif + exe_arg->out_Y_addr = mfc_mem_addr_ofs + (read_reg(MFC_ENCODED_Y_ADDR) << 11, 1); + exe_arg->out_CbCr_addr = mfc_mem_addr_ofs + (read_reg(MFC_ENCODED_C_ADDR) << 11, 1); +#ifdef CONFIG_SLP_DMABUF + } +#endif } } @@ -1765,6 +1942,9 @@ int mfc_exec_encoding(struct mfc_inst_ctx *ctx, union mfc_args *args) { struct mfc_enc_exe_arg *exe_arg; int ret; +#ifdef CONFIG_SLP_DMABUF + int err; +#endif /* struct mfc_enc_ctx *enc_ctx = (struct mfc_enc_ctx *)ctx->c_priv; */ @@ -1787,6 +1967,21 @@ int mfc_exec_encoding(struct mfc_inst_ctx *ctx, union mfc_args *args) mfc_set_inst_state(ctx, INST_STATE_EXE_DONE); +#ifdef CONFIG_SLP_DMABUF + if (exe_arg->memory_type == MEMORY_DMABUF) { + err = mfc_dqbuf_dmabuf(ctx, ctx->enc_planes[0]); + if (err) { + mfc_err("mfc_dqbuf_dmabuf error!!! ret = %d\n", err); + return -EINVAL; + } + err = mfc_dqbuf_dmabuf(ctx, ctx->enc_planes[1]); + if (err) { + mfc_err("mfc_dqbuf_dmabuf error!!! ret = %d\n", err); + return -EINVAL; + } + } +#endif + return ret; } diff --git a/drivers/media/video/samsung/mfc5x/mfc_enc.h b/drivers/media/video/samsung/mfc5x/mfc_enc.h index 4bca251..21a9ba6 100644 --- a/drivers/media/video/samsung/mfc5x/mfc_enc.h +++ b/drivers/media/video/samsung/mfc5x/mfc_enc.h @@ -87,6 +87,7 @@ struct mfc_enc_h264 { unsigned int sei_gen; /* H */ struct mfc_frame_packing fp; /* H */ + unsigned int sps_pps_gen; }; int mfc_init_encoding(struct mfc_inst_ctx *ctx, union mfc_args *args); diff --git a/drivers/media/video/samsung/mfc5x/mfc_inst.c b/drivers/media/video/samsung/mfc5x/mfc_inst.c index 518fbfc..ef0d0e0 100644 --- a/drivers/media/video/samsung/mfc5x/mfc_inst.c +++ b/drivers/media/video/samsung/mfc5x/mfc_inst.c @@ -215,6 +215,7 @@ int mfc_set_inst_cfg(struct mfc_inst_ctx *ctx, int type, void *arg) case MFC_ENC_SETCONF_HIER_P: case MFC_ENC_SETCONF_SEI_GEN: case MFC_ENC_SETCONF_FRAME_PACKING: + case MFC_ENC_SETCONF_SPS_PPS_GEN: if (ctx->c_ops->set_codec_cfg) { if ((ctx->c_ops->set_codec_cfg(ctx, type, arg)) < 0) return MFC_SET_CONF_FAIL; diff --git a/drivers/media/video/samsung/mfc5x/mfc_inst.h b/drivers/media/video/samsung/mfc5x/mfc_inst.h index e297c55..b78dd91 100644 --- a/drivers/media/video/samsung/mfc5x/mfc_inst.h +++ b/drivers/media/video/samsung/mfc5x/mfc_inst.h @@ -15,6 +15,9 @@ #define __MFC_INST_H __FILE__ #include <linux/list.h> +#ifdef CONFIG_SLP +#include <linux/videodev2.h> +#endif #include "mfc.h" #include "mfc_interface.h" @@ -130,7 +133,7 @@ struct mfc_inst_ctx { unsigned int width; unsigned int height; volatile unsigned char *shm; - unsigned int shmofs; + long shmofs; unsigned int ctxbufofs; unsigned int ctxbufsize; unsigned int descbufofs; /* FIXME: move to decoder context */ @@ -170,6 +173,10 @@ struct mfc_inst_ctx { #if SUPPORT_SLICE_ENCODING int slice_flag; #endif +#ifdef CONFIG_SLP + struct vb2_plane *enc_planes[VIDEO_MAX_PLANES]; + struct vb2_plane *dec_planes[VIDEO_MAX_PLANES]; +#endif }; struct mfc_inst_ctx *mfc_create_inst(void); diff --git a/drivers/media/video/samsung/mfc5x/mfc_interface.h b/drivers/media/video/samsung/mfc5x/mfc_interface.h index 61116e5..6845b8a 100644 --- a/drivers/media/video/samsung/mfc5x/mfc_interface.h +++ b/drivers/media/video/samsung/mfc5x/mfc_interface.h @@ -242,6 +242,9 @@ struct mfc_enc_exe_arg { unsigned int out_y_cookie; unsigned int out_c_cookie; #endif +#ifdef CONFIG_SLP_DMABUF + SSBSIP_MFC_MEMORY_TYPE memory_type; /* [OUT] memory type */ +#endif }; struct mfc_dec_init_arg { @@ -312,6 +315,9 @@ struct mfc_dec_exe_arg { unsigned int out_y_cookie; unsigned int out_c_cookie; #endif +#ifdef CONFIG_SLP_DMABUF + SSBSIP_MFC_MEMORY_TYPE memory_type; /* [OUT] memory type */ +#endif int out_img_width; /* [OUT] width of YUV420 frame */ int out_img_height; /* [OUT] height of YUV420 frame */ int out_buf_width; /* [OUT] width of YUV420 frame */ diff --git a/drivers/media/video/samsung/mfc5x/mfc_mem.c b/drivers/media/video/samsung/mfc5x/mfc_mem.c index bdf7148..051e4c0 100644 --- a/drivers/media/video/samsung/mfc5x/mfc_mem.c +++ b/drivers/media/video/samsung/mfc5x/mfc_mem.c @@ -551,10 +551,23 @@ int mfc_init_mem_mgr(struct mfc_dev *dev) /* early allocator */ #if defined(CONFIG_S5P_MEM_CMA) #ifdef CONFIG_EXYNOS_CONTENT_PATH_PROTECTION +#if defined(CONFIG_USE_MFC_CMA) && defined(CONFIG_MACH_M0) + cma_infos[0].lower_bound = 0x5C100000; + cma_infos[0].upper_bound = 0x5F200000; + cma_infos[0].total_size = 0x03100000; + cma_infos[0].free_size = 0x03100000; + cma_infos[0].count = 1; +#else if (cma_info(&cma_infos[0], dev->device, "A")) { mfc_info("failed to get CMA info of 'mfc-secure'\n"); return -ENOMEM; } +#endif + printk(KERN_INFO "%s[%d] cma 0x%x 0x%x 0x%x 0x%x %u\n", + __func__, __LINE__, + (int)cma_infos[0].lower_bound, (int)cma_infos[0].upper_bound, + (int)cma_infos[0].total_size, (int)cma_infos[0].free_size, + cma_infos[0].count); if (cma_info(&cma_infos[1], dev->device, "B")) { mfc_info("failed to get CMA info of 'mfc-normal'\n"); @@ -598,6 +611,15 @@ int mfc_init_mem_mgr(struct mfc_dev *dev) return -ENOMEM; } +#if defined(CONFIG_USE_MFC_CMA) && defined(CONFIG_MACH_M0) + base[0] = 0x5c100000; + dev->mem_infos[0].base = base[0]; + dev->mem_infos[0].size = size; + dev->mem_infos[0].addr = phys_to_virt(base[0]); + mfc_info("%s[%d]: base 0x%x, size 0x%x, addr 0x%x\n", + __func__, __LINE__, (int)base[0], (int)size, + (int)dev->mem_infos[0].addr); +#else base[0] = cma_alloc(dev->device, "A", size, ALIGN_128KB); if (IS_ERR_VALUE(base[0])) { mfc_err("failed to get rsv. memory from CMA on mfc-secure"); @@ -607,7 +629,7 @@ int mfc_init_mem_mgr(struct mfc_dev *dev) dev->mem_infos[0].base = base[0]; dev->mem_infos[0].size = size; dev->mem_infos[0].addr = cma_get_virt(base[0], size, 0); - +#endif available_size -= dev->mem_infos[0].size; mfc_dbg("avail: 0x%08x\n", available_size); @@ -670,7 +692,12 @@ int mfc_init_mem_mgr(struct mfc_dev *dev) size = MAX_MEM_OFFSET; } +#ifdef CONFIG_SLP + base[0] = cma_alloc(dev->device, "AB", MFC_FW_SYSTEM_SIZE, + ALIGN_128KB); +#else base[0] = cma_alloc(dev->device, "AB", size, ALIGN_128KB); +#endif if (IS_ERR_VALUE(base[0])) { mfc_err("failed to get rsv. memory from CMA"); return -ENOMEM; @@ -702,7 +729,12 @@ int mfc_init_mem_mgr(struct mfc_dev *dev) size = MAX_MEM_OFFSET; } +#ifdef CONFIG_SLP + base[0] = cma_alloc(dev->device, cma_index ? "B" : "A", + MFC_FW_SYSTEM_SIZE, ALIGN_128KB); +#else base[0] = cma_alloc(dev->device, cma_index ? "B" : "A", size, ALIGN_128KB); +#endif if (IS_ERR_VALUE(base[0])) { mfc_err("failed to get rsv. memory from CMA on port #0"); return -ENOMEM; @@ -724,7 +756,12 @@ int mfc_init_mem_mgr(struct mfc_dev *dev) size = MAX_MEM_OFFSET; } +#ifdef CONFIG_SLP + base[1] = cma_index ? cma_infos[1].lower_bound : + cma_infos[0].lower_bound; +#else base[1] = cma_alloc(dev->device, cma_index ? "B" : "A", size, ALIGN_128KB); +#endif if (IS_ERR_VALUE(base[1])) { mfc_err("failed to get rsv. memory from CMA on port #1"); cma_free(base[0]); diff --git a/drivers/media/video/samsung/mfc5x/mfc_shm.h b/drivers/media/video/samsung/mfc5x/mfc_shm.h index e5d7ba7..3da6573 100644 --- a/drivers/media/video/samsung/mfc5x/mfc_shm.h +++ b/drivers/media/video/samsung/mfc5x/mfc_shm.h @@ -66,7 +66,7 @@ enum MFC_SHM_OFS DBG_HISTORY_INPUT1 = 0x00D4, /* C */ DBG_HISTORY_OUTPUT = 0x00D8, /* C */ HIERARCHICAL_P_QP = 0x00E0, /* E, H.264 */ - HW_VERSRION = 0x010C, /* C */ + HW_VERSION = 0x010C, /* C */ SEI_ENABLE = 0x0168, /* C, H.264 */ FRAME_PACK_SEI_AVAIL = 0x016C, /* D, H.264 */ FRAME_PACK_ARRGMENT_ID = 0x0170, /* D, H.264 */ diff --git a/drivers/media/video/samsung/ump/Kconfig b/drivers/media/video/samsung/ump/Kconfig index 6304825..9d8e5e6 100644 --- a/drivers/media/video/samsung/ump/Kconfig +++ b/drivers/media/video/samsung/ump/Kconfig @@ -17,6 +17,14 @@ config UMP_VCM_ALLOC help Use VCM(virtual-contiguous-memory) to allocate physical memory. + +config UMP_R3P1_LSI + bool "Uses the R3P1 as a ump module" + depends on VIDEO_UMP + default n + ---help--- + This uses the r3p1 as a UMP kernel module + choice depends on VIDEO_UMP prompt "UMP MEMEMORY OPTION" diff --git a/drivers/media/video/samsung/ump/Makefile.common b/drivers/media/video/samsung/ump/Makefile.common index 35527a2..35527a2 100644..100755 --- a/drivers/media/video/samsung/ump/Makefile.common +++ b/drivers/media/video/samsung/ump/Makefile.common diff --git a/drivers/media/video/samsung/ump/Makefile_module b/drivers/media/video/samsung/ump/Makefile_module index f0c3829..f0c3829 100644..100755 --- a/drivers/media/video/samsung/ump/Makefile_module +++ b/drivers/media/video/samsung/ump/Makefile_module diff --git a/drivers/media/video/samsung/ump/arch b/drivers/media/video/samsung/ump/arch new file mode 120000 index 0000000..58ffbe7 --- /dev/null +++ b/drivers/media/video/samsung/ump/arch @@ -0,0 +1 @@ +arch-release
\ No newline at end of file diff --git a/drivers/media/video/samsung/ump/arch-debug b/drivers/media/video/samsung/ump/arch-debug new file mode 120000 index 0000000..0ed0909 --- /dev/null +++ b/drivers/media/video/samsung/ump/arch-debug @@ -0,0 +1 @@ +arch-pegasus-m400/
\ No newline at end of file diff --git a/drivers/media/video/samsung/ump/arch-debug/config.h b/drivers/media/video/samsung/ump/arch-debug/config.h deleted file mode 100644 index 688edc9..0000000 --- a/drivers/media/video/samsung/ump/arch-debug/config.h +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Copyright (C) 2010-2012 ARM Limited. All rights reserved. - * - * This program is free software and is provided to you under the terms of the GNU General Public License version 2 - * as published by the Free Software Foundation, and any use by you of this program is subject to the terms of such GNU licence. - * - * A copy of the licence is included with the program, and can also be obtained from Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ - -#ifndef __ARCH_CONFIG_UMP_H__ -#define __ARCH_CONFIG_UMP_H__ - -#define ARCH_UMP_BACKEND_DEFAULT USING_MEMORY -#if (USING_MEMORY == 0) /* Dedicated Memory */ -#define ARCH_UMP_MEMORY_ADDRESS_DEFAULT 0x2C000000 -#else -#define ARCH_UMP_MEMORY_ADDRESS_DEFAULT 0 -#endif - -#define ARCH_UMP_MEMORY_SIZE_DEFAULT UMP_MEM_SIZE*1024*1024 -#endif /* __ARCH_CONFIG_UMP_H__ */ diff --git a/drivers/media/video/samsung/ump/arch-pb-virtex5/config.h b/drivers/media/video/samsung/ump/arch-pb-virtex5/config.h index 38ae1ee..38ae1ee 100644..100755 --- a/drivers/media/video/samsung/ump/arch-pb-virtex5/config.h +++ b/drivers/media/video/samsung/ump/arch-pb-virtex5/config.h diff --git a/drivers/media/video/samsung/ump/arch-pegasus-m400/config.h b/drivers/media/video/samsung/ump/arch-pegasus-m400/config.h index 688edc9..688edc9 100644..100755 --- a/drivers/media/video/samsung/ump/arch-pegasus-m400/config.h +++ b/drivers/media/video/samsung/ump/arch-pegasus-m400/config.h diff --git a/drivers/media/video/samsung/ump/arch-release b/drivers/media/video/samsung/ump/arch-release new file mode 120000 index 0000000..0ed0909 --- /dev/null +++ b/drivers/media/video/samsung/ump/arch-release @@ -0,0 +1 @@ +arch-pegasus-m400/
\ No newline at end of file diff --git a/drivers/media/video/samsung/ump/arch-release/config.h b/drivers/media/video/samsung/ump/arch-release/config.h deleted file mode 100644 index 688edc9..0000000 --- a/drivers/media/video/samsung/ump/arch-release/config.h +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Copyright (C) 2010-2012 ARM Limited. All rights reserved. - * - * This program is free software and is provided to you under the terms of the GNU General Public License version 2 - * as published by the Free Software Foundation, and any use by you of this program is subject to the terms of such GNU licence. - * - * A copy of the licence is included with the program, and can also be obtained from Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ - -#ifndef __ARCH_CONFIG_UMP_H__ -#define __ARCH_CONFIG_UMP_H__ - -#define ARCH_UMP_BACKEND_DEFAULT USING_MEMORY -#if (USING_MEMORY == 0) /* Dedicated Memory */ -#define ARCH_UMP_MEMORY_ADDRESS_DEFAULT 0x2C000000 -#else -#define ARCH_UMP_MEMORY_ADDRESS_DEFAULT 0 -#endif - -#define ARCH_UMP_MEMORY_SIZE_DEFAULT UMP_MEM_SIZE*1024*1024 -#endif /* __ARCH_CONFIG_UMP_H__ */ diff --git a/drivers/media/video/samsung/ump/arch/config.h b/drivers/media/video/samsung/ump/arch/config.h deleted file mode 100644 index 688edc9..0000000 --- a/drivers/media/video/samsung/ump/arch/config.h +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Copyright (C) 2010-2012 ARM Limited. All rights reserved. - * - * This program is free software and is provided to you under the terms of the GNU General Public License version 2 - * as published by the Free Software Foundation, and any use by you of this program is subject to the terms of such GNU licence. - * - * A copy of the licence is included with the program, and can also be obtained from Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ - -#ifndef __ARCH_CONFIG_UMP_H__ -#define __ARCH_CONFIG_UMP_H__ - -#define ARCH_UMP_BACKEND_DEFAULT USING_MEMORY -#if (USING_MEMORY == 0) /* Dedicated Memory */ -#define ARCH_UMP_MEMORY_ADDRESS_DEFAULT 0x2C000000 -#else -#define ARCH_UMP_MEMORY_ADDRESS_DEFAULT 0 -#endif - -#define ARCH_UMP_MEMORY_SIZE_DEFAULT UMP_MEM_SIZE*1024*1024 -#endif /* __ARCH_CONFIG_UMP_H__ */ diff --git a/drivers/media/video/samsung/ump/common/ump_kernel_descriptor_mapping.c b/drivers/media/video/samsung/ump/common/ump_kernel_descriptor_mapping.c index cc7b8be..cc7b8be 100644..100755 --- a/drivers/media/video/samsung/ump/common/ump_kernel_descriptor_mapping.c +++ b/drivers/media/video/samsung/ump/common/ump_kernel_descriptor_mapping.c diff --git a/drivers/media/video/samsung/ump/common/ump_kernel_descriptor_mapping.h b/drivers/media/video/samsung/ump/common/ump_kernel_descriptor_mapping.h index 881d3d8..881d3d8 100644..100755 --- a/drivers/media/video/samsung/ump/common/ump_kernel_descriptor_mapping.h +++ b/drivers/media/video/samsung/ump/common/ump_kernel_descriptor_mapping.h diff --git a/drivers/media/video/samsung/ump/linux/license/gpl/ump_kernel_license.h b/drivers/media/video/samsung/ump/linux/license/gpl/ump_kernel_license.h index 50a021c..50a021c 100644..100755 --- a/drivers/media/video/samsung/ump/linux/license/gpl/ump_kernel_license.h +++ b/drivers/media/video/samsung/ump/linux/license/gpl/ump_kernel_license.h diff --git a/drivers/media/video/samsung/ump/linux/ump_kernel_memory_backend_dedicated.h b/drivers/media/video/samsung/ump/linux/ump_kernel_memory_backend_dedicated.h index 4f7180e..4f7180e 100644..100755 --- a/drivers/media/video/samsung/ump/linux/ump_kernel_memory_backend_dedicated.h +++ b/drivers/media/video/samsung/ump/linux/ump_kernel_memory_backend_dedicated.h diff --git a/drivers/media/video/samsung/ump/linux/ump_kernel_memory_backend_os.h b/drivers/media/video/samsung/ump/linux/ump_kernel_memory_backend_os.h index b638562d..b638562d 100644..100755 --- a/drivers/media/video/samsung/ump/linux/ump_kernel_memory_backend_os.h +++ b/drivers/media/video/samsung/ump/linux/ump_kernel_memory_backend_os.h diff --git a/drivers/media/video/samsung/ump/linux/ump_osk_atomics.c b/drivers/media/video/samsung/ump/linux/ump_osk_atomics.c index 77be0c9..77be0c9 100644..100755 --- a/drivers/media/video/samsung/ump/linux/ump_osk_atomics.c +++ b/drivers/media/video/samsung/ump/linux/ump_osk_atomics.c diff --git a/drivers/media/video/samsung/ump/linux/ump_osk_misc.c b/drivers/media/video/samsung/ump/linux/ump_osk_misc.c index 1f1118e..1f1118e 100644..100755 --- a/drivers/media/video/samsung/ump/linux/ump_osk_misc.c +++ b/drivers/media/video/samsung/ump/linux/ump_osk_misc.c diff --git a/drivers/media/video/slp_db8131m.c b/drivers/media/video/slp_db8131m.c deleted file mode 100644 index a42bfd4c..0000000 --- a/drivers/media/video/slp_db8131m.c +++ /dev/null @@ -1,796 +0,0 @@ -/* - * linux/drivers/media/video/slp_db8131m.c - * - * Copyright (c) 2012 Samsung Electronics Co., Ltd. - * - * 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. - */ - -#include <linux/i2c.h> -#include <linux/init.h> -#include <media/v4l2-device.h> -#include <linux/delay.h> -#include <linux/version.h> -#include <media/v4l2-device.h> -#include <media/v4l2-subdev.h> -#ifdef CONFIG_VIDEO_SAMSUNG_V4L2 -#include <linux/videodev2_exynos_camera.h> -#endif -#include <media/db8131m_platform.h> - -#include "slp_db8131m.h" - -#ifdef DB8131M_USLEEP -#include <linux/hrtimer.h> -#endif - -#define CHECK_ERR(x) if (unlikely((x) < 0)) { \ - cam_err("i2c failed, err %d\n", x); \ - return x; \ - } - -#define NELEMS(array) (sizeof(array) / sizeof(array[0])) - -static inline int db8131m_read(struct i2c_client *client, - u16 subaddr, u16 *data) -{ - u8 buf[2]; - int err = 0; - struct i2c_msg msg = { - .addr = client->addr, - .flags = 0, - .len = 2, - .buf = buf, - }; - - *(u16 *)buf = cpu_to_be16(subaddr); - - err = i2c_transfer(client->adapter, &msg, 1); - if (unlikely(err < 0)) - cam_err("ERR: %d register read fail\n", __LINE__); - - msg.flags = I2C_M_RD; - - err = i2c_transfer(client->adapter, &msg, 1); - if (unlikely(err < 0)) - cam_err("ERR: %d register read fail\n", __LINE__); - - *data = ((buf[0] << 8) | buf[1]); - - return err; -} - -/* - * s5k6aafx sensor i2c write routine - * <start>--<Device address><2Byte Subaddr><2Byte Value>--<stop> - */ -static inline int db8131m_write(struct i2c_client *client, - u32 packet) -{ - u8 buf[4]; - int err = 0, retry_count = 5; - - struct i2c_msg msg = { - .addr = client->addr, - .flags = 0, - .buf = buf, - .len = 4, - }; - - if (!client->adapter) { - cam_err("ERR - can't search i2c client adapter\n"); - return -EIO; - } - - while (retry_count--) { - *(u32 *)buf = cpu_to_be32(packet); - err = i2c_transfer(client->adapter, &msg, 1); - if (likely(err == 1)) - break; - mdelay(10); - } - - if (unlikely(err < 0)) { - cam_err("ERR - 0x%08x write failed err=%d\n", - (u32)packet, err); - return err; - } - - return (err != 1) ? -1 : 0; -} - -/* program multiple registers */ -static int db8131m_write_regs(struct v4l2_subdev *sd, - const u8 *packet, u32 num) -{ - struct i2c_client *client = v4l2_get_subdevdata(sd); - int ret = -EAGAIN; - int retry_count = 5; - - u8 buf[2] = {0,}; - - struct i2c_msg msg = { - msg.addr = client->addr, - msg.flags = 0, - msg.len = 2, - msg.buf = buf, - }; - - while (num) { - buf[0] = *packet++; - buf[1] = *packet++; - - num -= 2; - - retry_count = 5; - - while (retry_count--) { - ret = i2c_transfer(client->adapter, &msg, 1); - if (likely(ret == 1)) - break; - mdelay(10); - } - - if (unlikely(ret < 0)) { - cam_err("ERR - 0x%08x write failed err=%d\n", - (u32)packet, ret); - break; - } - } - - if (unlikely(ret < 0)) { - cam_err("fail to write registers!!\n"); - return -EIO; - } - - return 0; -} - -static int db8131m_check_dataline(struct v4l2_subdev *sd, s32 val) -{ - return 0; -} - -static int db8131m_debug_sensor_status(struct v4l2_subdev *sd) -{ - return 0; -} - -static int db8131m_check_sensor_status(struct v4l2_subdev *sd) -{ - return 0; -} - -static inline int db8131m_check_esd(struct v4l2_subdev *sd) -{ - return 0; -} - -static int db8131m_set_preview_start(struct v4l2_subdev *sd) -{ - struct db8131m_state *state = to_state(sd); - int err = -EINVAL; - - cam_info("reset preview\n"); - -#ifdef CONFIG_LOAD_FILE - err = db8131m_write_regs_from_sd(sd, "db8131m_preview"); -#else - err = db8131m_write_regs(sd, db8131m_preview, - sizeof(db8131m_preview) / sizeof(db8131m_preview[0])); -#endif - if (state->check_dataline) - err = db8131m_check_dataline(sd, 1); - if (unlikely(err)) { - cam_err("fail to make preview\n"); - return err; - } - - return 0; -} - -static int db8131m_set_preview_stop(struct v4l2_subdev *sd) -{ - return 0; -} - -static int db8131m_set_capture_start(struct v4l2_subdev *sd) -{ - return 0; -} - -static int db8131m_set_sensor_mode(struct v4l2_subdev *sd, - struct v4l2_control *ctrl) -{ - struct db8131m_state *state = to_state(sd); - - if ((ctrl->value != SENSOR_CAMERA) && - (ctrl->value != SENSOR_MOVIE)) { - cam_err("ERR: Not support.(%d)\n", ctrl->value); - return -EINVAL; - } - - state->sensor_mode = ctrl->value; - - return 0; -} - -static int db8131m_enum_framesizes(struct v4l2_subdev *sd, \ - struct v4l2_frmsizeenum *fsize) -{ - return 0; -} - -static int db8131m_s_fmt(struct v4l2_subdev *sd, - struct v4l2_mbus_framefmt *ffmt) -{ - struct db8131m_state *state = to_state(sd); - u32 *width = NULL, *height = NULL; - - cam_dbg("E\n"); - /* - * Just copying the requested format as of now. - * We need to check here what are the formats the camera support, and - * set the most appropriate one according to the request from FIMC - */ - - state->req_fmt.width = ffmt->width; - state->req_fmt.height = ffmt->height; - state->req_fmt.priv = ffmt->field; - - switch (state->req_fmt.priv) { - case V4L2_PIX_FMT_MODE_PREVIEW: - cam_dbg("V4L2_PIX_FMT_MODE_PREVIEW\n"); - width = &state->preview_frmsizes.width; - height = &state->preview_frmsizes.height; - break; - - case V4L2_PIX_FMT_MODE_CAPTURE: - cam_dbg("V4L2_PIX_FMT_MODE_CAPTURE\n"); - width = &state->capture_frmsizes.width; - height = &state->capture_frmsizes.height; - break; - - default: - cam_err("ERR(EINVAL)\n"); - return -EINVAL; - } - - if ((*width != state->req_fmt.width) || - (*height != state->req_fmt.height)) { - cam_err("ERR: Invalid size. width= %d, height= %d\n", - state->req_fmt.width, state->req_fmt.height); - } - - return 0; -} - -static int db8131m_set_frame_rate(struct v4l2_subdev *sd, u32 fps) -{ - int err = 0; - - cam_info("frame rate %d\n\n", fps); - - switch (fps) { - case 7: - err = db8131m_write_regs(sd, db8131m_vt_7fps, - sizeof(db8131m_vt_7fps) / \ - sizeof(db8131m_vt_7fps[0])); - break; - case 10: - err = db8131m_write_regs(sd, db8131m_vt_10fps, - sizeof(db8131m_vt_10fps) / \ - sizeof(db8131m_vt_10fps[0])); - - break; - case 12: - err = db8131m_write_regs(sd, db8131m_vt_12fps, - sizeof(db8131m_vt_12fps) / \ - sizeof(db8131m_vt_12fps[0])); - - break; - case 15: - err = db8131m_write_regs(sd, db8131m_vt_15fps, - sizeof(db8131m_vt_15fps) / \ - sizeof(db8131m_vt_15fps[0])); - break; - default: - cam_err("ERR: Invalid framerate\n"); - break; - } - - if (unlikely(err < 0)) { - cam_err("i2c_write for set framerate\n"); - return -EIO; - } - - return err; -} - -static int db8131m_g_parm(struct v4l2_subdev *sd, struct v4l2_streamparm *parms) -{ - int err = 0; - - cam_dbg("E\n"); - - return err; -} - -static int db8131m_s_parm(struct v4l2_subdev *sd, struct v4l2_streamparm *parms) -{ - int err = 0; - u32 fps = 0; - struct db8131m_state *state = to_state(sd); - - if (!state->vt_mode) - return 0; - - cam_dbg("E\n"); - - fps = parms->parm.capture.timeperframe.denominator / - parms->parm.capture.timeperframe.numerator; - - if (fps != state->set_fps) { - if (fps < 0 && fps > 30) { - cam_err("invalid frame rate %d\n", fps); - fps = 30; - } - state->req_fps = fps; - - if (state->initialized) { - err = db8131m_set_frame_rate(sd, state->req_fps); - if (err >= 0) - state->set_fps = state->req_fps; - } - - } - - return err; -} - -static int db8131m_control_stream(struct v4l2_subdev *sd, u32 cmd) -{ - int err = 0; - - switch (cmd) { - case 0: /* STREAM_STOP */ - cam_dbg("stream stop!!!\n"); - break; - - case 1: /* STREAM_START */ - cam_warn("WARN: do nothing\n"); - break; - - default: - cam_err("ERR: Invalid cmd\n"); - break; - } - - if (unlikely(err)) - cam_err("failed to stream start(stop)\n"); - - return err; -} - -static int db8131m_init(struct v4l2_subdev *sd, u32 val) -{ - /* struct i2c_client *client = v4l2_get_subdevdata(sd); */ - struct db8131m_state *state = to_state(sd); - int err = -EINVAL; - - cam_dbg("E\n"); - - /* set initial regster value */ - if (state->sensor_mode == SENSOR_CAMERA) { - cam_info("load camera common setting\n"); - err = db8131m_write_regs(sd, db8131m_common_1, - sizeof(db8131m_common_1) / \ - sizeof(db8131m_common_1[0])); - - msleep(150); - - err |= db8131m_write_regs(sd, db8131m_common_2, - sizeof(db8131m_common_2) / \ - sizeof(db8131m_common_2[0])); - } else { - cam_info("load recording setting\n"); - err = db8131m_write_regs(sd, db8131m_common_1, - sizeof(db8131m_common_1) / \ - sizeof(db8131m_common_1[0])); - - msleep(150); - - err = db8131m_write_regs(sd, db8131m_common_2, - sizeof(db8131m_common_2) / \ - sizeof(db8131m_common_2[0])); - } - if (unlikely(err)) { - cam_err("failed to init\n"); - return err; - } - - /* We stop stream-output from sensor when starting camera. */ - err = db8131m_control_stream(sd, 0); - if (unlikely(err < 0)) - return err; - msleep(150); - - state->initialized = 1; - - return 0; -} - -static int db8131m_s_stream(struct v4l2_subdev *sd, int enable) -{ - struct db8131m_state *state = to_state(sd); - /* struct i2c_client *client = v4l2_get_subdevdata(sd); */ - int err = 0; - - cam_info("stream mode = %d\n", enable); - - switch (enable) { - case STREAM_MODE_CAM_OFF: - if (state->sensor_mode == SENSOR_CAMERA) { - if (state->check_dataline) - err = db8131m_check_dataline(sd, 0); - else - err = db8131m_control_stream(sd, 0); - } - break; - - case STREAM_MODE_CAM_ON: - /* The position of this code need to be adjusted later */ - if ((state->sensor_mode == SENSOR_CAMERA) - && (state->req_fmt.priv == V4L2_PIX_FMT_MODE_CAPTURE)) - err = db8131m_set_capture_start(sd); - else - err = db8131m_set_preview_start(sd); - break; - - case STREAM_MODE_MOVIE_ON: - cam_dbg("do nothing(movie on)!!\n"); - break; - - case STREAM_MODE_MOVIE_OFF: - cam_dbg("do nothing(movie off)!!\n"); - break; - - default: - cam_err("ERR: Invalid stream mode\n"); - break; - } - - if (unlikely(err < 0)) { - cam_err("ERR: faild\n"); - return err; - } - - return 0; -} - -static int db8131m_g_ctrl(struct v4l2_subdev *sd, struct v4l2_control *ctrl) -{ - struct db8131m_state *state = to_state(sd); - int err = 0; - - cam_dbg("ctrl->id : %d\n", ctrl->id - V4L2_CID_PRIVATE_BASE); - - switch (ctrl->id) { - case V4L2_CID_CAMERA_EXIF_TV: - ctrl->value = state->exif.shutter_speed; - break; - case V4L2_CID_CAMERA_EXIF_ISO: - ctrl->value = state->exif.iso; - break; - default: - cam_err("no such control id %d\n", - ctrl->id - V4L2_CID_PRIVATE_BASE); - break; - } - - return err; -} - -static int db8131m_set_brightness(struct v4l2_subdev *sd, - struct v4l2_control *ctrl) -{ - struct db8131m_state *state = to_state(sd); - int err = -EINVAL; - - cam_dbg("E\n"); - - if (state->check_dataline) - return 0; - - switch (ctrl->value) { - case EV_MINUS_4: - err = db8131m_write_regs(sd, db8131m_bright_m4, \ - sizeof(db8131m_bright_m4) / \ - sizeof(db8131m_bright_m4[0])); - break; - case EV_MINUS_3: - err = db8131m_write_regs(sd, db8131m_bright_m3, \ - sizeof(db8131m_bright_m3) / \ - sizeof(db8131m_bright_m3[0])); - - break; - case EV_MINUS_2: - err = db8131m_write_regs(sd, db8131m_bright_m2, \ - sizeof(db8131m_bright_m2) / \ - sizeof(db8131m_bright_m2[0])); - break; - case EV_MINUS_1: - err = db8131m_write_regs(sd, db8131m_bright_m1, \ - sizeof(db8131m_bright_m1) / \ - sizeof(db8131m_bright_m1[0])); - break; - case EV_DEFAULT: - err = db8131m_write_regs(sd, db8131m_bright_default, \ - sizeof(db8131m_bright_default) / \ - sizeof(db8131m_bright_default[0])); - break; - case EV_PLUS_1: - err = db8131m_write_regs(sd, db8131m_bright_p1, \ - sizeof(db8131m_bright_p1) / \ - sizeof(db8131m_bright_p1[0])); - break; - case EV_PLUS_2: - err = db8131m_write_regs(sd, db8131m_bright_p2, \ - sizeof(db8131m_bright_p2) / \ - sizeof(db8131m_bright_p2[0])); - break; - case EV_PLUS_3: - err = db8131m_write_regs(sd, db8131m_bright_p3, \ - sizeof(db8131m_bright_p3) / \ - sizeof(db8131m_bright_p3[0])); - break; - case EV_PLUS_4: - err = db8131m_write_regs(sd, db8131m_bright_p4, \ - sizeof(db8131m_bright_p4) / \ - sizeof(db8131m_bright_p4[0])); - break; - default: - cam_err("ERR: invalid brightness(%d)\n", ctrl->value); - return err; - break; - } - - if (unlikely(err < 0)) { - cam_err("ERR: i2c_write for set brightness\n"); - return -EIO; - } - - return 0; -} - -static int db8131m_set_blur(struct v4l2_subdev *sd, struct v4l2_control *ctrl) -{ - return 0; -} - -static int db8131m_s_ctrl(struct v4l2_subdev *sd, struct v4l2_control *ctrl) -{ - /* struct i2c_client *client = v4l2_get_subdevdata(sd); */ - struct db8131m_state *state = to_state(sd); - int err = 0; - - cam_info("ctrl->id : %d, value=%d\n", ctrl->id - V4L2_CID_PRIVATE_BASE, - ctrl->value); - - if ((ctrl->id != V4L2_CID_CAMERA_CHECK_DATALINE) - && (ctrl->id != V4L2_CID_CAMERA_SENSOR_MODE) - && ((ctrl->id != V4L2_CID_CAMERA_VT_MODE)) - && (!state->initialized)) { - cam_warn("camera isn't initialized\n"); - return 0; - } - - switch (ctrl->id) { - case V4L2_CID_CAM_PREVIEW_ONOFF: - if (ctrl->value) - err = db8131m_set_preview_start(sd); - else - err = db8131m_set_preview_stop(sd); - cam_dbg("V4L2_CID_CAM_PREVIEW_ONOFF [%d]\n", ctrl->value); - break; - - case V4L2_CID_CAM_CAPTURE: - err = db8131m_set_capture_start(sd); - cam_dbg("V4L2_CID_CAM_CAPTURE\n"); - break; - - case V4L2_CID_CAMERA_BRIGHTNESS: - err = db8131m_set_brightness(sd, ctrl); - cam_dbg("V4L2_CID_CAMERA_BRIGHTNESS [%d]\n", ctrl->value); - break; - - case V4L2_CID_CAMERA_VGA_BLUR: - err = db8131m_set_blur(sd, ctrl); - cam_dbg("V4L2_CID_CAMERA_VGA_BLUR [%d]\n", ctrl->value); - break; - - case V4L2_CID_CAMERA_VT_MODE: - state->vt_mode = ctrl->value; - break; - - case V4L2_CID_CAMERA_CHECK_DATALINE: - state->check_dataline = ctrl->value; - cam_dbg("check_dataline = %d\n", state->check_dataline); - err = 0; - break; - - case V4L2_CID_CAMERA_SENSOR_MODE: - err = db8131m_set_sensor_mode(sd, ctrl); - cam_dbg("sensor_mode = %d\n", ctrl->value); - break; - - case V4L2_CID_CAMERA_CHECK_DATALINE_STOP: - cam_dbg("do nothing\n"); - /*err = db8131m_check_dataline_stop(sd);*/ - break; - - case V4L2_CID_CAMERA_CHECK_ESD: - err = db8131m_check_esd(sd); - break; - - case V4L2_CID_CAMERA_FRAME_RATE: - cam_dbg("do nothing\n"); - break; - - case V4L2_CID_CAMERA_CHECK_SENSOR_STATUS: - db8131m_debug_sensor_status(sd); - err = db8131m_check_sensor_status(sd); - break; - - default: - cam_err("ERR(ENOIOCTLCMD)\n"); - /* no errors return.*/ - break; - } - - cam_dbg("X\n"); - return err; -} - -static const struct v4l2_subdev_core_ops db8131m_core_ops = { - .init = db8131m_init, /* initializing API */ -#if 0 - .queryctrl = db8131m_queryctrl, - .querymenu = db8131m_querymenu, -#endif - .g_ctrl = db8131m_g_ctrl, - .s_ctrl = db8131m_s_ctrl, -}; - -static const struct v4l2_subdev_video_ops db8131m_video_ops = { - /*.s_crystal_freq = db8131m_s_crystal_freq,*/ - .s_mbus_fmt = db8131m_s_fmt, - .s_stream = db8131m_s_stream, - .enum_framesizes = db8131m_enum_framesizes, - /*.enum_frameintervals = db8131m_enum_frameintervals,*/ - /*.enum_fmt = db8131m_enum_fmt,*/ - .g_parm = db8131m_g_parm, - .s_parm = db8131m_s_parm, -}; - -static const struct v4l2_subdev_ops db8131m_ops = { - .core = &db8131m_core_ops, - .video = &db8131m_video_ops, -}; - -/* - * db8131m_probe - * Fetching platform data is being done with s_config subdev call. - * In probe routine, we just register subdev device - */ -static int db8131m_probe(struct i2c_client *client, - const struct i2c_device_id *id) -{ - struct db8131m_state *state = NULL; - struct v4l2_subdev *sd = NULL; - struct db8131m_platform_data *pdata = NULL; - cam_dbg("E\n"); - - state = kzalloc(sizeof(struct db8131m_state), GFP_KERNEL); - if (state == NULL) - return -ENOMEM; - - sd = &state->sd; - strcpy(sd->name, DB8131M_DRIVER_NAME); - - state->initialized = 0; - state->req_fps = state->set_fps = 8; - state->sensor_mode = SENSOR_CAMERA; - - pdata = client->dev.platform_data; - - if (!pdata) { - cam_err("no platform data\n"); - return -ENODEV; - } - - /* Registering subdev */ - v4l2_i2c_subdev_init(sd, client, &db8131m_ops); - - /* - * Assign default format and resolution - * Use configured default information in platform data - * or without them, use default information in driver - */ - if (!(pdata->default_width && pdata->default_height)) { - state->preview_frmsizes.width = DEFAULT_PREVIEW_WIDTH; - state->preview_frmsizes.height = DEFAULT_PREVIEW_HEIGHT; - } else { - state->preview_frmsizes.width = pdata->default_width; - state->preview_frmsizes.height = pdata->default_height; - } - state->capture_frmsizes.width = DEFAULT_CAPTURE_WIDTH; - state->capture_frmsizes.height = DEFAULT_CAPTURE_HEIGHT; - - cam_dbg("preview_width: %d , preview_height: %d, " - "capture_width: %d, capture_height: %d", - state->preview_frmsizes.width, state->preview_frmsizes.height, - state->capture_frmsizes.width, state->capture_frmsizes.height); - - state->req_fmt.width = state->preview_frmsizes.width; - state->req_fmt.height = state->preview_frmsizes.height; - - if (!pdata->pixelformat) - state->req_fmt.pixelformat = VT_DEFAULT_FMT; - else - state->req_fmt.pixelformat = pdata->pixelformat; - - cam_dbg("probed!!\n"); - - return 0; -} - -static int db8131m_remove(struct i2c_client *client) -{ - struct v4l2_subdev *sd = i2c_get_clientdata(client); - struct db8131m_state *state = to_state(sd); - - cam_dbg("E\n"); - - state->initialized = 0; - - v4l2_device_unregister_subdev(sd); - kfree(to_state(sd)); - - return 0; -} - -static const struct i2c_device_id db8131m_id[] = { - { DB8131M_DRIVER_NAME, 0 }, - { }, -}; -MODULE_DEVICE_TABLE(i2c, db8131m_id); - -static struct i2c_driver db8131m_i2c_driver = { - .driver = { - .name = DB8131M_DRIVER_NAME, - }, - .probe = db8131m_probe, - .remove = db8131m_remove, - .id_table = db8131m_id, -}; - -static int __init db8131m_mod_init(void) -{ - cam_dbg("E\n"); - return i2c_add_driver(&db8131m_i2c_driver); -} - -static void __exit db8131m_mod_exit(void) -{ - cam_dbg("E\n"); - i2c_del_driver(&db8131m_i2c_driver); -} -module_init(db8131m_mod_init); -module_exit(db8131m_mod_exit); - -MODULE_DESCRIPTION("DB8131M CAM driver"); -MODULE_AUTHOR(" "); -MODULE_LICENSE("GPL"); diff --git a/drivers/media/video/slp_db8131m.h b/drivers/media/video/slp_db8131m.h deleted file mode 100644 index 3c594a2..0000000 --- a/drivers/media/video/slp_db8131m.h +++ /dev/null @@ -1,100 +0,0 @@ -/* - * linux/drivers/media/video/slp_db8131m.c - * - * Copyright (c) 2012 Samsung Electronics Co., Ltd. - * - * 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 __DB8131M_H -#define __DB8131M_H - -#include <linux/types.h> - -extern struct class *camera_class; - -#define DB8131M_DRIVER_NAME "DB8131M" - -struct db8131m_framesize { - u32 width; - u32 height; -}; - -struct db8131m_exif { - u32 shutter_speed; - u16 iso; -}; - - -/* - * Driver information - */ -struct db8131m_state { - struct v4l2_subdev sd; - struct device *db8131m_dev; - /* - * req_fmt is the requested format from the application. - * set_fmt is the output format of the camera. Finally FIMC - * converts the camera output(set_fmt) to the requested format - * with hardware scaler. - */ - struct v4l2_pix_format req_fmt; - struct db8131m_framesize preview_frmsizes; - struct db8131m_framesize capture_frmsizes; - struct db8131m_exif exif; - - enum v4l2_sensor_mode sensor_mode; - s32 vt_mode; - s32 check_dataline; - u32 req_fps; - u32 set_fps; - u32 initialized; -}; - -static inline struct db8131m_state *to_state(struct v4l2_subdev *sd) -{ - return container_of(sd, struct db8131m_state, sd); -} - -/*#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_dbg(fmt, ...) \ - do { \ - printk(KERN_DEBUG "%s: " fmt, __func__, ##__VA_ARGS__); \ - } while (0) -#else -#define cam_dbg(fmt, ...) -#endif /* CONFIG_CAM_DEBUG */ - - - -/*********** Sensor specific ************/ -#define DB8131M_DELAY 0xFFFF0000 -#define DB8131M_DEF_APEX_DEN 100 - -/* Register address */ -#define REG_PAGE_SHUTTER 0x7000 -#define REG_ADDR_SHUTTER 0x14D0 -#define REG_PAGE_ISO 0x7000 -#define REG_ADDR_ISO 0x14C8 - -#include "slp_db8131m_setfile.h" - -#endif /* __DB8131M_H */ diff --git a/drivers/media/video/slp_db8131m_setfile.h b/drivers/media/video/slp_db8131m_setfile.h deleted file mode 100644 index ebbdbb0..0000000 --- a/drivers/media/video/slp_db8131m_setfile.h +++ /dev/null @@ -1,2264 +0,0 @@ -/* - * linux/drivers/media/video/slp_db8131m_setfile.h - * - * Copyright (c) 2012 Samsung Electronics Co., Ltd. - * - * 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 __DB8131M_SETFILE_H -#define __DB8131M_SETFILE_H - -#include <linux/types.h> - -/* 1.3M mipi setting-common from PARTRON */ -/*******************************************************************/ -/* Name : DB8131M Initial Setfile*/ -/* PLL mode : MCLK=24MHz / PCLK=48MHz*/ -/* FPS : Preview 7.5~15fps / Capture 7.5fps / recording 25fps*/ -/* Date : 2011.12.06*/ -/*******************************************************************/ - - -static const u8 db8131m_common_1[] = { -/***************************************************/ -/* Command Preview 7.5~15fps*/ -/***************************************************/ -0xFF, 0xC0, /*Page mode*/ -0x10, 0x01, -}; -/*Wait 150*/ - -static const u8 db8131m_common_2[] = { -/***************************************************/ -/* Format*/ -/***************************************************/ -0xFF, 0xA1, /*Page mode*/ -0x70, 0x01, -0x71, 0x0D, - -/***************************************************/ -/* SensorCon*/ -/***************************************************/ -0xFF, 0xD0, /*Page mode*/ -0x0F, 0x0B, /*ABLK_Ctrl_1_Addr*/ -0x13, 0x00, /*Gain_Addr*/ -0x15, 0x01, /*IVREFT_REFB_Addr*/ -0x20, 0x0E, /*ABLK_Rsrv_Addr*/ -0x23, 0x01, /*IVREFT2_REFB2_Addr*/ -0x24, 0x01, /*IPPG_IVCM2_Addr*/ -0x39, 0x70, /*RiseSx_CDS_1_L_Addr*/ -0x51, 0x19, /*Fallcreset_1_L_Addr*/ -0x83, 0x2D, /*RiseTran_Sig_Even_L_Addr*/ -0x85, 0x2F, /*FallTran_Sig_Even_L_Addr*/ -0x87, 0x2D, /*RiseTran_Sig_Odd_L_Addr*/ -0x89, 0x2F, /*FallTran_Sig_Odd_L_Addr*/ -0x8B, 0x27, /*RiseCNT_EN_1_L_Addr*/ -0x8D, 0x6c, /*FallCNT_EN_1_L_Addr*/ -0xD7, 0x80, /*ABLK_Ctrl_12_Addr*/ -0xDB, 0xA2, /*FallScanTx15_1_L_Addr*/ -0xED, 0x01, /*PLL_P_Addr*/ -0xEE, 0x0F, /*PLL_M_Addr*/ -0xEF, 0x00, /*PLL_S_Addr*/ -0xF9, 0x00, /*ABLK_Ctrl_8*/ -0xF8, 0x00, /*Vblank Sleep Mode enable*/ -0xFB, 0x90, /*PostADC_Gain_Addr*/ - -/***************************************************/ -/* Analog ADF*/ -/***************************************************/ -0xFF, 0x85, /*Page mode*/ -0x89, 0x93, /*gAdf_u8APThreshold*/ -0x8A, 0x0C, /*u8APClmpThreshold*/ -0x8C, 0x07, /*gAdf_u8APMinVal_ThrClampH*/ -0x8D, 0x40, /*gAdf_u8APMinVal_ThrClampL*/ -0x8E, 0x03, /*gAdf_u8APMinVal_DOFFSET*/ -0x8F, 0x14, /*gAdf_u8APMinVal_AMP2_1_SDM*/ -0x91, 0x1A, /*gAdf_u8APMinVal_AMP4_3_SDM*/ -0x92, 0x0F, /*gAdf_u8APMinVal_FallIntTx15*/ -0x93, 0x47, /*gAdf_u8APMinVal_CDSxRange_CtrlPre*/ -0x95, 0x18, /*gAdf_u8APMinVal_REFB_IVCM*/ -0x96, 0x38, /*gAdf_u8APMinVal_ref_os_PB*/ -0x97, 0x0D, /*gAdf_u8APMinVal_NTx_Range*/ -0x98, 0x0D, /*gAdf_u8APMaxVal_Clmp_rst*/ -0x99, 0x06, /*gAdf_u8APMaxVal_ThrClampH*/ -0x9A, 0x9F, /*gAdf_u8APMaxVal_ThrClampL*/ -0x9B, 0x02, /*gAdf_u8APMaxVal_DOFFSET*/ -0x9C, 0x1C, /*gAdf_u8APMaxVal_AMP2_1_SDM*/ -0x9E, 0x11, /*gAdf_u8APMaxVal_AMP4_3_SDM*/ -0x9F, 0x5D, /*gAdf_u8APMaxVal_FallIntTx15*/ -0xA0, 0x78, /*gAdf_u8APMaxVal_CDSxRange_CtrlPre*/ -0xA2, 0x18, /*gAdf_u8APMaxVal_REFB_IVCM*/ -0xA3, 0x40, /*gAdf_u8APMaxVal_ref_os_PB*/ -0xA4, 0x0B, /*gAdf_u8APMaxVal_NTx_Range*/ - -0xFF, 0x86, /*Page mode*/ -0x15, 0x00, /*gPT_u8Adf_APThrHys*/ -0x16, 0xF7, /*gPT_u8Adf_APFallIntTxThrLevel*/ -0x17, 0x13, /*gPT_u8Adf_APMinVal_BP2_1_SDM*/ -0x18, 0x13, /*gPT_u8Adf_APMidVal_BP2_1_SDM*/ -0x19, 0x1C, /*gPT_u8Adf_APMaxVal_BP2_1_SDM*/ -0x1A, 0x06, /*gPT_u8Adf_APMidVal_ThrClampH*/ -0x1B, 0xF0, /*gPT_u8Adf_APMidVal_ThrClampL*/ -0x1C, 0x01, /*gPT_u8Adf_APMidVal_DOFFSET*/ -0x1D, 0x14, /*gPT_u8Adf_APMidVal_AMP2_1_SDM*/ -0x1F, 0x31, /*gPT_u8Adf_APMidVal_AMP4_3_SDM*/ -0x20, 0x68, /*gPT_u8Adf_APMidVal_CDSxRange_CtrlPre*/ -0x22, 0x18, /*gPT_u8Adf_APMidVal_REFB_IVCM*/ -0x23, 0x38, /*gPT_u8Adf_APMidVal_ref_os_PB*/ -0x24, 0x0F, /*gPT_u8Adf_APMidVal_NTx_Range*/ -0x25, 0x77, /*gPT_u8Adf_APVal_EnSiSoSht_EnSm*/ - -0xFF, 0x87, /*Page mode*/ -0xEA, 0x41, - -0xFF, 0xD0, /*Page mode*/ -0x20, 0x0D, /*ABLK_Rsrv_Addr*/ - -0xFF, 0x83, /*Page mode*/ -0x63, 0x28, /*Again Table*/ -0x64, 0x10, /*Again Table*/ -0x65, 0xA8, /*Again Table*/ -0x66, 0x50, /*Again Table*/ -0x67, 0x28, /*Again Table*/ -0x68, 0x14, /*Again Table*/ - - -/***************************************************/ -/* AE*/ -/***************************************************/ -0xFF, 0x82, /*Page mode*/ -0x95, 0x88, /* AE weight*/ -0x96, 0x88, -0x97, 0xF8, -0x98, 0x8F, -0x99, 0xF8, -0x9A, 0x8F, -0x9B, 0x88, -0x9C, 0x88, -0xA9, 0x40, /* OTarget*/ -0xAA, 0x40, /* ITarget*/ -0x9D, 0x66, /* AE Speed*/ -0x9F, 0x06, /* AE HoldBnd*/ -0xA8, 0x40, /* STarget*/ -0xB9, 0x04, /* RGain*/ -0xBB, 0x04, /* GGain*/ -0xBD, 0x04, /* BGain*/ -0xC5, 0x02, /* PeakMvStep*/ -0xC6, 0x38, /* PeakTgMin*/ -0xC7, 0x24, /* PeakRatioTh1*/ -0xC8, 0x10, /* PeakRatioTh0*/ -0xC9, 0x05, /* PeakLuTh*/ -0xD5, 0x60, /* LuxGainTB_2*/ -0xFF, 0x83, /*Page mode */ -0x2F, 0x04, /* TimeNum0*/ -0x30, 0x05, /* TimeNum1*/ -0x4F, 0x05, /* FrameOffset*/ -0xFF, 0x82, /*Page mode */ -0xA1, 0x0A, /* AnalogGainMax*/ -0xF3, 0x09, /* SCLK*/ -0xF4, 0x60, -0xF9, 0x00, /* GainMax*/ -0xFA, 0xC8, /* GainMax*/ -0xFB, 0x62, /* Gain3Lut*/ -0xFC, 0x39, /* Gain2Lut*/ -0xFD, 0x28, /* Gain1Lut*/ -0xFE, 0x12, /* GainMin*/ -0xFF, 0x83, /*Page mode */ -0x03, 0x0F, /* TimeMax60Hz : 8fps*/ -0x04, 0x0A, /* Time3Lux60Hz : 12fps*/ -0x05, 0x04, /* Time2Lut60Hz : 24fps*/ -0x06, 0x04, /* Time1Lut60Hz : 24fps*/ -0xFF, 0x82, /*Page mode */ -0xD3, 0x12, /* LuxTBGainStep0 */ -0xD4, 0x36, /* LuxTBGainStep1 */ -0xD5, 0x60, /* LuxTBGainStep2*/ -0xD6, 0x01, /* LuxTBTimeStep0H*/ -0xD7, 0x00, /* LuxTBTimeStep0L*/ -0xD8, 0x01, /* LuxTBTimeStep1H*/ -0xD9, 0xC0, /* LuxTBTimeStep1L*/ -0xDA, 0x06, /* LuxTBTimeStep2H*/ -0xDB, 0x00, /* LuxTBTimeStep2L*/ -0xFF, 0x83, /*Page mode */ -0x0B, 0x04, -0x0C, 0x4C, /* Frame Rate*/ -0xFF, 0x82, /*Page mode */ -0x92, 0x5D, - -/***************************************************/ -/* AWB*/ -/***************************************************/ -0xFF, 0x83, /*Page mode */ -0x79, 0x83, /* AWB SKIN ON*/ -0x86, 0x07, /* gAWB_u16MinGrayCnt_rw_0*/ -0x87, 0x00, /* gAWB_u16MinGrayCnt_rw_1*/ -0x90, 0x05, /* gAWB_u16FinalRGain_ro_0*/ -0x94, 0x05, /* gAWB_u16FinalBGain_ro_0*/ -0x98, 0xD4, /* SkinWinCntTh*/ -0xA2, 0x28, /* SkinYTh*/ -0xA3, 0x00, /* SkinHoldHitCnt*/ -0xA4, 0x0F, /* SkinHoldHitCnt*/ -0xAD, 0x65, /* u8SkinTop2*/ -0xAE, 0x80, /* gAwb_u8SkinTop2LS1Ratio_rw 5zone*/ -0xAF, 0x20, /* gAwb_u8SkinTop2LS2Ratio_rw 6zone */ -0xB4, 0x10, /* u8SkinTop2LSHys_rw*/ -0xB5, 0x54, /* gAwb_u8SkinLTx*/ -0xB6, 0xbd, /* gAwb_u8SkinLTy*/ -0xB7, 0x74, /* gAwb_u8SkinRBx*/ -0xB8, 0x9d, /* gAwb_u8SkinRBy*/ -0xBA, 0x4F, /* UniCThrY_rw*/ -0xBF, 0x0C, /* u16UniCGrayCntThr_rw_0*/ -0xC0, 0x80, /* u16UniCGrayCntThr_rw_1*/ -0xFF, 0x87, /*Page mode */ -0xC9, 0x22, /* gUR_u8AWBTrim_Addr*/ -0xFF, 0x84, /*Page mode */ -0x49, 0x02, /* Threshold_indoor*/ -0x4A, 0x00, -0x4B, 0x03, /* Threshold_outdoor*/ -0x4C, 0x80, -0xFF, 0x83, /*Page mode */ -0xCB, 0x03, /* R MinGain [Default 0X20] A Spec Pass */ -0xCC, 0xC0, /* R MinGain [Default 0X20] A Spec Pass */ -0x82, 0x00, /* lockratio*/ -0xFF, 0x84, /*Page mode */ -0x3D, 0x00, /* gAwb_u32LuxConst1_rw_0*/ -0x3E, 0x00, /* gAwb_u32LuxConst1_rw_1*/ -0x3F, 0x06, /* gAwb_u32LuxConst1_rw_2*/ -0x40, 0x20, /* gAwb_u32LuxConst1_rw_3*/ -0x41, 0x07, /* gAwb_u32LuxConst2_rw_0*/ -0x42, 0x53, /* gAwb_u32LuxConst2_rw_1*/ -0x43, 0x00, /* gAwb_u32LuxConst2_rw_2*/ -0x44, 0x00, /* gAwb_u32LuxConst2_rw_3*/ -0x55, 0x03, /* gAwb_u8Weight_Gen_rw_0 */ -0x56, 0x10, /* gAwb_u8Weight_Gen_rw_1 */ -0x57, 0x14, /* gAwb_u8Weight_Gen_rw_2 */ -0x58, 0x07, /* gAwb_u8Weight_Gen_rw_3 */ -0x59, 0x04, /* gAwb_u8Weight_Gen_rw_4 */ -0x5A, 0x03, /* gAwb_u8Weight_Gen_rw_5 */ -0x5B, 0x03, /* gAwb_u8Weight_Gen_rw_6 */ -0x5C, 0x15, /* gAwb_u8Weight_Gen_rw_7 */ -0x5D, 0x01, /* gAwb_u8Weight_Ind_rw_0 */ -0x5E, 0x0F, /* gAwb_u8Weight_Ind_rw_1 */ -0x5F, 0x07, /* gAwb_u8Weight_Ind_rw_2 */ -0x60, 0x14, /* gAwb_u8Weight_Ind_rw_3 */ -0x61, 0x14, /* gAwb_u8Weight_Ind_rw_4 */ -0x62, 0x12, /* gAwb_u8Weight_Ind_rw_5 */ -0x63, 0x11, /* gAwb_u8Weight_Ind_rw_6 */ -0x64, 0x14, /* gAwb_u8Weight_Ind_rw_7 */ -0x65, 0x03, /* gAwb_u8Weight_Outd_rw_0*/ -0x66, 0x05, /* gAwb_u8Weight_Outd_rw_1*/ -0x67, 0x15, /* gAwb_u8Weight_Outd_rw_2*/ -0x68, 0x04, /* gAwb_u8Weight_Outd_rw_3*/ -0x69, 0x01, /* gAwb_u8Weight_Outd_rw_4*/ -0x6A, 0x02, /* gAwb_u8Weight_Outd_rw_5*/ -0x6B, 0x03, /* gAwb_u8Weight_Outd_rw_6*/ -0x6C, 0x15, /* gAwb_u8Weight_Outd_rw_6*/ -0xFF, 0x85, /*Page mode */ -0xE2, 0x0C, /* gPT_u8Awb_UnicolorZone_rw */ -0xFF, 0x83, /*Page mode */ -0xCD, 0x06, /*Max Rgain*/ -0xCE, 0x80, -0xD1, 0x06, /*Max BGain*/ -0xd2, 0x80, - -/***************************************************/ -/* AWB STE*/ -/***************************************************/ -0xFF, 0xA1, /*Page mode */ -/*Flash*/ -0xA0, 0x5c, /*AWBZone0LTx*/ -0xA1, 0x7a, /*AWBZone0LTy*/ -0xA2, 0x69, /*AWBZone0RBx*/ -0xA3, 0x6f, /*AWBZone0RBy*/ -/*cloudy*/ -0xA4, 0x73, /*AWBZone1LTx*/ -0xA5, 0x55, /*AWBZone1LTy*/ -0xA6, 0x8C, /*AWBZone1RBx*/ -0xA7, 0x30, /*AWBZone1RBy */ -/*Daylight */ -0xA8, 0x69, /*AWBZone2LTx*/ -0xA9, 0x69, /*AWBZone2LTy*/ -0xAA, 0x83, /*AWBZone2RBx*/ -0xAB, 0x52, /*AWBZone2RBy */ -/*Fluorescent */ -0xAC, 0x57, /*AWBZone3LTx*/ -0xAD, 0x6e, /*AWBZone3LTy*/ -0xAE, 0x6f, /*AWBZone3RBx*/ -0xAF, 0x59, /*AWBZone3RBy*/ - -/*CWF */ -0xB0, 0x50, /*AWBZone4LTx*/ -0xB1, 0x74, /*AWBZone4LTy*/ -0xB2, 0x65, /*AWBZone4RBx*/ -0xB3, 0x5d, /*AWBZone4RBy*/ -/*TL84 */ -0xB4, 0x53, /*AWBZone5LTx*/ -0xB5, 0x7f, /*AWBZone5LTy*/ -0xB6, 0x62, /*AWBZone5RBx*/ -0xB7, 0x75, /*AWBZone5RBy */ -/*A */ -0xB8, 0x4a, /*AWBZone6LTx*/ -0xB9, 0x87, /*AWBZone6LTy*/ -0xBA, 0x59, /*AWBZone6RBx*/ -0xBB, 0x78, /*AWBZone6RBy*/ -/*Horizon */ -0xBC, 0x41, /*AWBZone7LTx*/ -0xBD, 0x91, /*AWBZone7LTy*/ -0xBE, 0x4b, /*AWBZone7RBx*/ -0xBF, 0x89, /*AWBZone7RBy*/ -/*Skin */ -0xC0, 0x5b, /*AWBZone8LTx*/ -0xC1, 0x85, /*AWBZone8LTy*/ -0xC2, 0x60, /*AWBZone8RBx*/ -0xC3, 0x7b, /*AWBZone8RBy*/ - -/***************************************************/ -/* UR*/ -/***************************************************/ -0xFF, 0x85, /*Page mode */ -0x06, 0x05, -0xFF, 0x86, /*Page mode */ -0x14, 0x1E, /* CCM sum 1*/ -0xFF, 0x85, /*Page mode */ -0x86, 0x42, /* 42 saturation level*/ -0x07, 0x00, /* sup hysteresis*/ - -/*DAY light */ -0xFF, 0x83, /*Page mode */ -0xEA, 0x00, /*gAwb_s16AdapCCMTbl_0*/ -0xEB, 0x53, /*gAwb_s16AdapCCMTbl_1*/ -0xEC, 0xFF, /*gAwb_s16AdapCCMTbl_2*/ -0xED, 0xE1, /*gAwb_s16AdapCCMTbl_3*/ -0xEE, 0x00, /*gAwb_s16AdapCCMTbl_4*/ -0xEF, 0x05, /*gAwb_s16AdapCCMTbl_5*/ -0xF0, 0xFF, /*gAwb_s16AdapCCMTbl_6*/ -0xF1, 0xF3, /*gAwb_s16AdapCCMTbl_7*/ -0xF2, 0x00, /*gAwb_s16AdapCCMTbl_8*/ -0xF3, 0x4B, /*gAwb_s16AdapCCMTbl_9*/ -0xF4, 0xFF, /*gAwb_s16AdapCCMTbl_10*/ -0xF5, 0xFA, /*gAwb_s16AdapCCMTbl_11*/ -0xF6, 0xFF, /*gAwb_s16AdapCCMTbl_12*/ -0xF7, 0xFa, /*gAwb_s16AdapCCMTbl_13*/ -0xF8, 0xFF, /*gAwb_s16AdapCCMTbl_14*/ -0xF9, 0xC3, /*gAwb_s16AdapCCMTbl_15*/ -0xFA, 0x00, /*gAwb_s16AdapCCMTbl_16*/ -0xFB, 0x80, /*gAwb_s16AdapCCMTbl_17*/ - -/*CWF lgiht */ -0xFF, 0x83, /*Page mode*/ -0xFC, 0x00, /* gAwb_s16AdapCCMTbl_18 */ -0xFD, 0x68, /* gAwb_s16AdapCCMTbl_19 */ -0xFF, 0x85, /*Page mode */ -0xE0, 0xFF, /* gAwb_s16AdapCCMTbl_20 */ -0xE1, 0xde, /* gAwb_s16AdapCCMTbl_21 */ -0xFF, 0x84, /*Page mode */ -0x00, 0xff, /* gAwb_s16AdapCCMTbl_22 */ -0x01, 0xfa, /* gAwb_s16AdapCCMTbl_23 */ -0x02, 0xFF, /* gAwb_s16AdapCCMTbl_24 */ -0x03, 0xf0, /* gAwb_s16AdapCCMTbl_25 */ -0x04, 0x00, /* gAwb_s16AdapCCMTbl_26 */ -0x05, 0x52, /* gAwb_s16AdapCCMTbl_27 */ -0x06, 0xFF, /* gAwb_s16AdapCCMTbl_28 */ -0x07, 0xFa, /* gAwb_s16AdapCCMTbl_29 */ -0x08, 0x00, /* gAwb_s16AdapCCMTbl_30 */ -0x09, 0x00, /* gAwb_s16AdapCCMTbl_31 */ -0x0A, 0xFF, /* gAwb_s16AdapCCMTbl_32 */ -0x0B, 0xdb, /* gAwb_s16AdapCCMTbl_33 */ -0x0C, 0x00, /* gAwb_s16AdapCCMTbl_34 */ -0x0D, 0x68, /* gAwb_s16AdapCCMTbl_35 */ - -/*A light */ - -0x0E, 0x00, /* gAwb_s16AdapCCMTbl_36 */ -0x0F, 0x6d, /* gAwb_s16AdapCCMTbl_37 */ -0x10, 0xFF, /* gAwb_s16AdapCCMTbl_38 */ -0x11, 0xd5, /* gAwb_s16AdapCCMTbl_39 */ -0x12, 0xff, /* gAwb_s16AdapCCMTbl_40 */ -0x13, 0xfe, /* gAwb_s16AdapCCMTbl_41 */ -0x14, 0xFF, /* gAwb_s16AdapCCMTbl_42 */ -0x15, 0xf4, /* gAwb_s16AdapCCMTbl_43 */ -0x16, 0x00, /* gAwb_s16AdapCCMTbl_44 */ -0x17, 0x5a, /* gAwb_s16AdapCCMTbl_45 */ -0x18, 0xff, /* gAwb_s16AdapCCMTbl_46 */ -0x19, 0xef, /* gAwb_s16AdapCCMTbl_47 */ -0x1A, 0xff, /* gAwb_s16AdapCCMTbl_48 */ -0x1B, 0xfa, /* gAwb_s16AdapCCMTbl_49 */ -0x1C, 0xFF, /* gAwb_s16AdapCCMTbl_50 */ -0x1D, 0xbe, /* gAwb_s16AdapCCMTbl_51 */ -0x1E, 0x00, /* gAwb_s16AdapCCMTbl_52 */ -0x1F, 0x86, /* gAwb_s16AdapCCMTbl_53 */ - - -/***************************************************/ -/* ADF*/ -/***************************************************/ - -/* ISP setting*/ -0xFF, 0xA0, /*Page mode */ -0x10, 0x80, /* BLC: ABLC db*/ -0x60, 0x73, /* CDC: Dark CDC ON */ -0x61, 0x1F, /* Six CDC_Edge En, Slash EN*/ -0x69, 0x0C, /* Slash direction Line threshold*/ -0x6A, 0x60, /* Slash direction Pixel threshold*/ -0xC2, 0x04, /* NSF: directional smoothing*/ -0xD0, 0x51, /* DEM: pattern detection*/ -0xFF, 0xA1, /*Page mode */ -0x30, 0x01, /* EDE: Luminane adaptation on*/ -0x32, 0x50, /* EDE: Adaptation slope */ -0x34, 0x00, /* EDE: x1 point */ -0x35, 0x0B, /* EDE: x1 point */ -0x36, 0x01, /* EDE: x2 point */ -0x37, 0x80, /* EDE: x2 point */ -0x3A, 0x00, /* EDE: Adaptation left margin*/ -0x3B, 0x30, /* EDE: Adaptation right margin*/ -0x3C, 0x08, /* EDE: rgb edge threshol*/ - -/* Adaptive Setting*/ -0xFF, 0x85, /*Page mode */ -/* LSC*/ -0x0F, 0x43, /* LVLSC lux level threshold*/ -0x10, 0x43, /* LSLSC Light source , threshold lux*/ - -/* BGT*/ -0x17, 0x30, /* BGT lux level threshold*/ -0x26, 0x20, /* MinVal */ -0x3c, 0x00, /* MaxVal */ - -/* CNT*/ -0x18, 0x43, /* CNT lux level threshold*/ -0x27, 0x00, /* MinVal */ -0x3d, 0x00, /* MaxVal */ - -/* NSF */ -0x12, 0xA5, /* NSF lux level threshold */ -0x22, 0x38, /* u8MinVal_NSF1*/ -0x23, 0x70, /* u8MinVal_NSF2*/ -0xFF, 0x86, /*Page mode */ -0x12, 0x00, /* u8MinVal_NSF3*/ -0xFF, 0x85, /*Page mode */ -0x38, 0x12, /* u8MaxVal_NSF1*/ -0x39, 0x30, /* u8MaxVal_NSF2*/ -0xFF, 0x86, /*Page mode */ -0x13, 0x08, /* u8MaxVal_NSF3*/ - -/* GDC*/ -0xFF, 0x85, /*Page mode */ -0x15, 0xF4, /* GDC lux level threshold */ -0x2D, 0x20, /* u8MinVal_GDC1*/ -0x2E, 0x30, /* u8MinVal_GDC2*/ -0x43, 0x40, /* u8MaxVal_GDC1*/ -0x44, 0x80, /* u8MaxVal_GDC2*/ - -/* ISP Edge*/ -0x04, 0xFB, /* EnEDE*/ -0x14, 0x54, /* u8ThrLevel_EDE*/ -0x28, 0x00, /* u8MinVal_EDE_CP*/ -0x29, 0x03, /* u8MinVal_EDE1*/ -0x2A, 0x20, /* u8MinVal_EDE2*/ -0x2B, 0x00, /* u8MinVal_EDE_OFS*/ -0x2C, 0x22, /* u8MinVal_SG*/ -0x3E, 0x00, /* u8MaxVal_EDE_CP*/ -0x3F, 0x09, /* u8MaxVal_EDE1*/ -0x40, 0x22, /* u8MaxVal_EDE2*/ -0x41, 0x02, /* u8MaxVal_EDE_OFS*/ -0x42, 0x33, /* u8MaxVal_SG*/ - -/* Gamma Adaptive*/ - -0x16, 0xA0, /* Gamma Threshold*/ -0x47, 0x00, /* Min_Gamma_0*/ -0x48, 0x03, /* Min_Gamma_1*/ -0x49, 0x10, /* Min_Gamma_2*/ -0x4A, 0x25, /* Min_Gamma_3*/ -0x4B, 0x3B, /* Min_Gamma_4*/ -0x4C, 0x4F, /* Min_Gamma_5*/ -0x4D, 0x6D, /* Min_Gamma_6*/ -0x4E, 0x86, /* Min_Gamma_7*/ -0x4F, 0x9B, /* Min_Gamma_8*/ -0x50, 0xAD, /* Min_Gamma_9*/ -0x51, 0xC2, /* Min_Gamma_10*/ -0x52, 0xD3, /* Min_Gamma_11*/ -0x53, 0xE1, /* Min_Gamma_12*/ -0x54, 0xE9, /* Min_Gamma_13*/ -0x55, 0xF2, /* Min_Gamma_14*/ -0x56, 0xFA, /* Min_Gamma_15*/ -0x57, 0xFF, /* Min_Gamma_16*/ -0x58, 0x00, /* Max_Gamma_0 */ -0x59, 0x06, /* Max_Gamma_1 */ -0x5a, 0x14, /* Max_Gamma_2 */ -0x5b, 0x30, /* Max_Gamma_3 */ -0x5c, 0x4A, /* Max_Gamma_4 */ -0x5d, 0x5D, /* Max_Gamma_5 */ -0x5e, 0x75, /* Max_Gamma_6 */ -0x5f, 0x89, /* Max_Gamma_7 */ -0x60, 0x9A, /* Max_Gamma_8 */ -0x61, 0xA7, /* Max_Gamma_9 */ -0x62, 0xBC, /* Max_Gamma_10 */ -0x63, 0xD0, /* Max_Gamma_11 */ -0x64, 0xE0, /* Max_Gamma_12 */ -0x65, 0xE7, /* Max_Gamma_13 */ -0x66, 0xEE, /* Max_Gamma_14 */ -0x67, 0xF7, /* Max_Gamma_15 */ -0x68, 0xFF, /* Max_Gamma_16 */ - -/* Initial edge, noise filter setting*/ -0xFF, 0xA0, /*Page mode */ -0xC0, 0x12, /*NSFTh1_Addr*/ -0xC1, 0x30, /*NSFTh2_Addr*/ -0xC2, 0x08, /*NSFTh3_Addr*/ -0xFF, 0xA1, /*Page mode */ -0x30, 0x01, /*EDEOption_Addr*/ -0x31, 0x33, /*EDESlopeGain_Addr*/ -0x32, 0x50, /*EDELuAdpCtrl_Addr*/ -0x33, 0x00, /*EDEPreCoringPt_Addr*/ -0x34, 0x00, /*EDETransFuncXp1_Addr1*/ -0x35, 0x0B, /*EDETransFuncXp1_Addr0*/ -0x36, 0x01, /*EDETransFuncXp2_Addr1*/ -0x37, 0x80, /*EDETransFuncXp2_Addr0*/ -0x38, 0x09, /*EDETransFuncSl1_Addr*/ -0x39, 0x22, /*EDETransFuncSl2_Addr*/ -0x3A, 0x00, /*EDELuAdpLOffset_Addr*/ -0x3B, 0x30, /*EDELuAdpROffset_Addr*/ -0x3C, 0x08, /*EDERBThrd_Addr*/ -0x3D, 0x02, /*EDESmallOffset_Addr*/ - - -/* CCM Saturation Level*/ -0xFF, 0x85, /*Page mode */ -0x1A, 0x64, /* SUP Threshold */ -0x30, 0x40, /* MinSUP */ - -0xFF, 0xA0, /*Page mode */ -/* Lens Shading*/ -0x43, 0x80, /* RH7 rrhrhh*/ -0x44, 0x80, /* RV*/ -0x45, 0x80, /* RH */ -0x46, 0x80, /* RV*/ -0x47, 0x80, /* GH*/ -0x48, 0x80, /* GV*/ -0x49, 0x80, /* GH*/ -0x4A, 0x80, /* GV */ -0x4B, 0x80, /* BH*/ -0x4C, 0x80, /* BV*/ -0x4D, 0x80, /* BH*/ -0x4E, 0x80, /* BV */ -0x52, 0x90, /* GGain*/ -0x53, 0x20, /* GGain*/ -0x54, 0x00, /* GGain*/ - -/*Max Shading*/ -0xFF, 0x85, /*Page mode */ -0x32, 0xC0, -0x33, 0x30, -0x34, 0x00, -0x35, 0x90, -0x36, 0x20, -0x37, 0x00, - -/*Min Shading*/ -0x1c, 0xC0, -0x1d, 0x30, -0x1e, 0x00, -0x1f, 0x90, -0x20, 0x18, -0x21, 0x00, - -/* LineLength */ -0xFF, 0x87, /*Page mode */ -0xDC, 0x05, /* by Yong In Han 091511*/ -0xDD, 0xB0, /* by Yong In Han 091511*/ -0xd5, 0x00, /* Flip*/ -/***************************************************/ -/* SensorCon */ -/***************************************************/ -0xFF, 0xD0, /*Page mode */ -0x20, 0x0E, /* ABLK_Rsrv_Addr*/ -0x20, 0x0D, /* ABLK_Rsrv_Addr*/ - -/***************************************************/ -/* MIPI */ -/***************************************************/ -0xFF, 0xB0, /*Page mode */ -0x54, 0x02, /* MIPI PHY_HS_TX_CTRL*/ -0x38, 0x05, /* MIPI DPHY_CTRL_SET*/ - - -/* SXGA PR*/ -0xFF, 0x85, /*Page mode */ -0xB8, 0x0A, /* gPT_u8PR_Active_SXGA_WORD_COUNT_Addr0*/ -0xB9, 0x00, /* gPT_u8PR_Active_SXGA_WORD_COUNT_Addr1*/ -0xBC, 0x04, /* gPT_u8PR_Active_SXGA_DPHY_CLK_TIME_Addr3*/ -0xFF, 0x87, /*Page mode */ -0x0C, 0x00, /* start Y*/ -0x0D, 0x20, /* start Y */ -0x10, 0x03, /* end Y*/ -0x11, 0xE0, /* end Y */ - -/* Recoding */ -0xFF, 0x86, /*Page mode */ -0x38, 0x05, /* gPT_u8PR_Active_720P_WORD_COUNT_Addr0*/ -0x39, 0x00, /* gPT_u8PR_Active_720P_WORD_COUNT_Addr1*/ -0x3C, 0x04, /* gPT_u8PR_Active_720P_DPHY_CLK_TIME_Addr3*/ - -0xFF, 0x87, -0x23, 0x02, /*gPR_Active_720P_u8SensorCtrl_Addr */ -0x25, 0x01, /*gPR_Active_720P_u8PLL_P_Addr */ -0x26, 0x0F, /*gPR_Active_720P_u8PLL_M_Addr */ -0x27, 0x00, /*gPR_Active_720P_u8PLL_S_Addr */ -0x28, 0x00, /*gPR_Active_720P_u8PLL_Ctrl_Addr */ -0x29, 0x01, /*gPR_Active_720P_u8src_clk_sel_Addr */ -0x2A, 0x00, /*gPR_Active_720P_u8output_pad_status_Addr */ -0x2B, 0x3F, /*gPR_Active_720P_u8ablk_ctrl_10_Addr */ -0x2C, 0xFF, /*gPR_Active_720P_u8BayerFunc_Addr */ -0x2D, 0xFF, /*gPR_Active_720P_u8RgbYcFunc_Addr */ -0x2E, 0x00, /*gPR_Active_720P_u8ISPMode_Addr */ -0x2F, 0x02, /*gPR_Active_720P_u8SCLCtrl_Addr */ -0x30, 0x01, /*gPR_Active_720P_u8SCLHorScale_Addr0 */ -0x31, 0xFF, /*gPR_Active_720P_u8SCLHorScale_Addr1 */ -0x32, 0x03, /*gPR_Active_720P_u8SCLVerScale_Addr0 */ -0x33, 0xFF, /*gPR_Active_720P_u8SCLVerScale_Addr1 */ -0x34, 0x00, /*gPR_Active_720P_u8SCLCropStartX_Addr0 */ -0x35, 0x00, /*gPR_Active_720P_u8SCLCropStartX_Addr1 */ -0x36, 0x00, /*gPR_Active_720P_u8SCLCropStartY_Addr0 */ -0x37, 0x10, /*gPR_Active_720P_u8SCLCropStartY_Addr1 */ -0x38, 0x02, /*gPR_Active_720P_u8SCLCropEndX_Addr0 */ -0x39, 0x80, /*gPR_Active_720P_u8SCLCropEndX_Addr1 */ -0x3A, 0x01, /*gPR_Active_720P_u8SCLCropEndY_Addr0 */ -0x3B, 0xF0, /*gPR_Active_720P_u8SCLCropEndY_Addr1 */ -0x3C, 0x01, /*gPR_Active_720P_u8OutForm_Addr */ -0x3D, 0x0C, /*gPR_Active_720P_u8OutCtrl_Addr */ -0x3E, 0x04, /*gPR_Active_720P_u8AEWinStartX_Addr */ -0x3F, 0x04, /*gPR_Active_720P_u8AEWinStartY_Addr */ -0x40, 0x66, /*gPR_Active_720P_u8MergedWinWidth_Addr */ -0x41, 0x5E, /*gPR_Active_720P_u8MergedWinHeight_Addr */ -0x42, 0x04, /*gPR_Active_720P_u8AEHistWinAx_Addr */ -0x43, 0x04, /*gPR_Active_720P_u8AEHistWinAy_Addr */ -0x44, 0x98, /*gPR_Active_720P_u8AEHistWinBx_Addr */ -0x45, 0x78, /*gPR_Active_720P_u8AEHistWinBy_Addr */ -0x46, 0x22, /*gPR_Active_720P_u8AWBTrim_Addr */ -0x47, 0x28, /*gPR_Active_720P_u8AWBCTWinAx_Addr */ -0x48, 0x20, /*gPR_Active_720P_u8AWBCTWinAy_Addr */ -0x49, 0x78, /*gPR_Active_720P_u8AWBCTWinBx_Addr */ -0x4A, 0x60, /*gPR_Active_720P_u8AWBCTWinBy_Addr */ -0x4B, 0x03, /*gPR_Active_720P_u16AFCFrameLength_0 */ -0x4C, 0x00, /*gPR_Active_720P_u16AFCFrameLength_1 */ - -/* VGA PR */ -0xFF, 0x86, /*Page mode */ -0x2F, 0x05, /* gPT_u8PR_Active_VGA_WORD_COUNT_Addr0*/ -0x30, 0x00, /* gPT_u8PR_Active_VGA_WORD_COUNT_Addr1*/ -0x33, 0x04, /* gPT_u8PR_Active_VGA_DPHY_CLK_TIME_Addr3*/ - -0xFF, 0x87, /*Page mode */ -0x4D, 0x00, /*gPR_Active_VGA_u8SensorCtrl_Addr*/ -0x4E, 0x72, /*gPR_Active_VGA_u8SensorMode_Addr*/ -0x4F, 0x01, /*gPR_Active_VGA_u8PLL_P_Addr*/ -0x50, 0x0F, /*gPR_Active_VGA_u8PLL_M_Addr*/ -0x51, 0x00, /*gPR_Active_VGA_u8PLL_S_Addr*/ -0x52, 0x00, /*gPR_Active_VGA_u8PLL_Ctrl_Addr*/ -0x53, 0x01, /*gPR_Active_VGA_u8src_clk_sel_Addr*/ -0x54, 0x00, /*gPR_Active_VGA_u8output_pad_status_Addr*/ -0x55, 0x3F, /*gPR_Active_VGA_u8ablk_ctrl_10_Addr*/ -0x56, 0xFF, /*gPR_Active_VGA_u8BayerFunc_Addr*/ -0x57, 0xFF, /*gPR_Active_VGA_u8RgbYcFunc_Addr*/ -0x58, 0x00, /*gPR_Active_VGA_u8ISPMode_Addr*/ -0x59, 0x02, /*gPR_Active_VGA_u8SCLCtrl_Addr*/ -0x5A, 0x01, /*gPR_Active_VGA_u8SCLHorScale_Addr0*/ -0x5B, 0xFF, /*gPR_Active_VGA_u8SCLHorScale_Addr1*/ -0x5C, 0x01, /*gPR_Active_VGA_u8SCLVerScale_Addr0*/ -0x5D, 0xFF, /*gPR_Active_VGA_u8SCLVerScale_Addr1*/ -0x5E, 0x00, /*gPR_Active_VGA_u8SCLCropStartX_Addr0*/ -0x5F, 0x00, /*gPR_Active_VGA_u8SCLCropStartX_Addr1*/ -0x60, 0x00, /*gPR_Active_VGA_u8SCLCropStartY_Addr0*/ -0x61, 0x20, /*gPR_Active_VGA_u8SCLCropStartY_Addr1*/ -0x62, 0x05, /*gPR_Active_VGA_u8SCLCropEndX_Addr0*/ -0x63, 0x00, /*gPR_Active_VGA_u8SCLCropEndX_Addr1*/ -0x64, 0x03, /*gPR_Active_VGA_u8SCLCropEndY_Addr0*/ -0x65, 0xE0, /*gPR_Active_VGA_u8SCLCropEndY_Addr1*/ - -0xFF, 0xd1, /*Page mode */ -0x07, 0x00, /* power off mask clear*/ -0x0b, 0x00, /* clock off mask clear*/ -0xFF, 0xC0, /*Page mode */ -0x10, 0x41, - -/* Self-Cam END of Initial */ -}; - -/* Set-data based on SKT VT standard ,when using 3G network*/ -/* VGA 8fps -*/ -static const u8 db8131m_vt_common_1[] = { -/***************************************************/ -/* Device : DB8131M fixed 8Fps */ -/* MIPI Interface for Noncontious Clock */ -/***************************************************/ -/***************************************************/ -/* Command */ -/***************************************************/ -0xFF, 0xC0, /*Page mode*/ -0x10, 0x01, -}; -/*wait 150*/ - -static const u8 db8131m_vt_common_2[] = { -/***************************************************/ -/* Format */ -/***************************************************/ -0xFF, 0xA1, /*Page mode */ -0x70, 0x01, -0x71, 0x0D, - -/***************************************************/ -/* SensorCon */ -/***************************************************/ -0xFF, 0xD0, /*Page mode */ -0x0F, 0x0B, /*ABLK_Ctrl_1_Addr*/ -0x13, 0x00, /*Gain_Addr*/ -0x15, 0x01, /*IVREFT_REFB_Addr*/ -0x20, 0x0E, /*ABLK_Rsrv_Addr*/ -0x23, 0x01, /*IVREFT2_REFB2_Addr*/ -0x24, 0x01, /*IPPG_IVCM2_Addr*/ -0x39, 0x70, /*RiseSx_CDS_1_L_Addr*/ -0x51, 0x19, /*Fallcreset_1_L_Addr*/ -0x83, 0x2D, /*RiseTran_Sig_Even_L_Addr*/ -0x85, 0x2F, /*FallTran_Sig_Even_L_Addr*/ -0x87, 0x2D, /*RiseTran_Sig_Odd_L_Addr*/ -0x89, 0x2F, /*FallTran_Sig_Odd_L_Addr*/ -0x8B, 0x27, /*RiseCNT_EN_1_L_Addr*/ -0x8D, 0x6c, /*FallCNT_EN_1_L_Addr*/ -0xD7, 0x80, /*ABLK_Ctrl_12_Addr*/ -0xDB, 0xA2, /*FallScanTx15_1_L_Addr*/ -0xED, 0x01, /*PLL_P_Addr*/ -0xEE, 0x0F, /*PLL_M_Addr*/ -0xEF, 0x00, /*PLL_S_Addr*/ -0xF9, 0x00, /*ABLK_Ctrl_8*/ -0xF8, 0x00, /*Vblank Sleep Mode enable*/ -0xFB, 0x90, /*PostADC_Gain_Addr*/ - -/***************************************************/ -/* Analog ADF */ -/***************************************************/ -0xFF, 0x85, /*Page mode */ -0x89, 0x93, /*gAdf_u8APThreshold*/ -0x8A, 0x0C, /*u8APClmpThreshold*/ -0x8C, 0x07, /*gAdf_u8APMinVal_ThrClampH*/ -0x8D, 0x40, /*gAdf_u8APMinVal_ThrClampL*/ -0x8E, 0x03, /*gAdf_u8APMinVal_DOFFSET*/ -0x8F, 0x14, /*gAdf_u8APMinVal_AMP2_1_SDM*/ -0x91, 0x1A, /*gAdf_u8APMinVal_AMP4_3_SDM*/ -0x92, 0x0F, /*gAdf_u8APMinVal_FallIntTx15*/ -0x93, 0x47, /*gAdf_u8APMinVal_CDSxRange_CtrlPre*/ -0x95, 0x18, /*gAdf_u8APMinVal_REFB_IVCM*/ -0x96, 0x38, /*gAdf_u8APMinVal_ref_os_PB*/ -0x97, 0x0D, /*gAdf_u8APMinVal_NTx_Range*/ -0x98, 0x0D, /*gAdf_u8APMaxVal_Clmp_rst*/ -0x99, 0x06, /*gAdf_u8APMaxVal_ThrClampH*/ -0x9A, 0x9F, /*gAdf_u8APMaxVal_ThrClampL*/ -0x9B, 0x02, /*gAdf_u8APMaxVal_DOFFSET*/ -0x9C, 0x1C, /*gAdf_u8APMaxVal_AMP2_1_SDM*/ -0x9E, 0x11, /*gAdf_u8APMaxVal_AMP4_3_SDM*/ -0x9F, 0x5D, /*gAdf_u8APMaxVal_FallIntTx15*/ -0xA0, 0x78, /*gAdf_u8APMaxVal_CDSxRange_CtrlPre*/ -0xA2, 0x18, /*gAdf_u8APMaxVal_REFB_IVCM*/ -0xA3, 0x40, /*gAdf_u8APMaxVal_ref_os_PB*/ -0xA4, 0x0B, /*gAdf_u8APMaxVal_NTx_Range*/ - -0xFF, 0x86, /*Page mode */ -0x15, 0x00, /*gPT_u8Adf_APThrHys*/ -0x16, 0xF7, /*gPT_u8Adf_APFallIntTxThrLevel*/ -0x17, 0x13, /*gPT_u8Adf_APMinVal_BP2_1_SDM*/ -0x18, 0x13, /*gPT_u8Adf_APMidVal_BP2_1_SDM*/ -0x19, 0x1C, /*gPT_u8Adf_APMaxVal_BP2_1_SDM*/ -0x1A, 0x06, /*gPT_u8Adf_APMidVal_ThrClampH*/ -0x1B, 0xF0, /*gPT_u8Adf_APMidVal_ThrClampL*/ -0x1C, 0x01, /*gPT_u8Adf_APMidVal_DOFFSET*/ -0x1D, 0x14, /*gPT_u8Adf_APMidVal_AMP2_1_SDM*/ -0x1F, 0x31, /*gPT_u8Adf_APMidVal_AMP4_3_SDM*/ -0x20, 0x68, /*gPT_u8Adf_APMidVal_CDSxRange_CtrlPre*/ -0x22, 0x18, /*gPT_u8Adf_APMidVal_REFB_IVCM*/ -0x23, 0x38, /*gPT_u8Adf_APMidVal_ref_os_PB*/ -0x24, 0x0F, /*gPT_u8Adf_APMidVal_NTx_Range*/ -0x25, 0x77, /*gPT_u8Adf_APVal_EnSiSoSht_EnSm*/ - -0xFF, 0x87, /*Page mode */ -0xEA, 0x41, - -0xFF, 0xD0, /*Page mode */ -0x20, 0x0D, /*ABLK_Rsrv_Addr*/ - -0xFF, 0x83, /*Page mode */ -0x63, 0x28, /*Again Table*/ -0x64, 0x10, /*Again Table*/ -0x65, 0xA8, /*Again Table*/ -0x66, 0x50, /*Again Table*/ -0x67, 0x28, /*Again Table*/ -0x68, 0x14, /*Again Table*/ - - -/***************************************************/ -/* AE */ -/***************************************************/ -0xFF, 0x82, /*Page mode */ -0x91, 0x02, /* AeMode*/ -0x95, 0x88, /* AE weight*/ -0x96, 0x88, -0x97, 0xF8, -0x98, 0x8F, -0x99, 0xF8, -0x9A, 0x8F, -0x9B, 0x88, -0x9C, 0x88, -0xA9, 0x40, /* OTarget*/ -0xAA, 0x40, /* ITarget*/ -0x9D, 0x66, /* AE Speed*/ -0x9F, 0x06, /* AE HoldBnd*/ -0xA8, 0x40, /* STarget*/ -0xB9, 0x04, /* RGain*/ -0xBB, 0x04, /* GGain*/ -0xBD, 0x04, /* BGain*/ -0xC5, 0x02, /* PeakMvStep*/ -0xC6, 0x38, /* PeakTgMin*/ -0xC7, 0x24, /* PeakRatioTh1*/ -0xC8, 0x10, /* PeakRatioTh0*/ -0xC9, 0x05, /* PeakLuTh*/ -0xD5, 0x60, /* LuxGainTB_2*/ -0xFF, 0x83, /*Page mode */ -0x2F, 0x04, /* TimeNum0*/ -0x30, 0x05, /* TimeNum1*/ -0x4F, 0x05, /* FrameOffset*/ -0xFF, 0x82, /*Page mode */ -0xA1, 0x0A, /* AnalogGainMax*/ -0xF3, 0x09, /* SCLK*/ -0xF4, 0x60, -0xF9, 0x00, /* GainMax*/ -0xFA, 0xC8, /* GainMax*/ -0xFB, 0x62, /* Gain3Lut*/ -0xFC, 0x39, /* Gain2Lut*/ -0xFD, 0x28, /* Gain1Lut*/ -0xFE, 0x12, /* GainMin*/ -0xFF, 0x83, /*Page mode */ -0x03, 0x0F, /* TimeMax60Hz : 8fps*/ -0x04, 0x0A, /* Time3Lux60Hz : 12fps*/ -0x05, 0x04, /* Time2Lut60Hz : 24fps*/ -0x06, 0x04, /* Time1Lut60Hz : 24fps*/ -0xFF, 0x82, /*Page mode */ -0xD3, 0x12, /* LuxTBGainStep0 */ -0xD4, 0x36, /* LuxTBGainStep1 */ -0xD5, 0x60, /* LuxTBGainStep2*/ -0xD6, 0x01, /* LuxTBTimeStep0H*/ -0xD7, 0x00, /* LuxTBTimeStep0L*/ -0xD8, 0x01, /* LuxTBTimeStep1H*/ -0xD9, 0xC0, /* LuxTBTimeStep1L*/ -0xDA, 0x06, /* LuxTBTimeStep2H*/ -0xDB, 0x00, /* LuxTBTimeStep2L*/ -0xFF, 0x83, /*Page mode */ -0x0B, 0x08, -0x0C, 0x0C, /* Frame Rate*/ -0xFF, 0x82, /*Page mode */ -0x92, 0x5D, - -/***************************************************/ -/* AWB */ -/***************************************************/ -0xFF, 0x83, /*Page mode */ -0x79, 0x83, /* AWB SKIN ON*/ -0x86, 0x07, /* gAWB_u16MinGrayCnt_rw_0*/ -0x87, 0x00, /* gAWB_u16MinGrayCnt_rw_1*/ -0x90, 0x05, /* gAWB_u16FinalRGain_ro_0*/ -0x94, 0x05, /* gAWB_u16FinalBGain_ro_0*/ -0x98, 0xD4, /* SkinWinCntTh*/ -0xA2, 0x28, /* SkinYTh*/ -0xA3, 0x00, /* SkinHoldHitCnt*/ -0xA4, 0x0F, /* SkinHoldHitCnt*/ -0xAD, 0x65, /* u8SkinTop2*/ -0xAE, 0x80, /* gAwb_u8SkinTop2LS1Ratio_rw 5zone */ -0xAF, 0x20, /* gAwb_u8SkinTop2LS2Ratio_rw 6zone */ -0xB4, 0x10, /* u8SkinTop2LSHys_rw */ -0xB5, 0x54, /* gAwb_u8SkinLTx */ -0xB6, 0xbd, /* gAwb_u8SkinLTy */ -0xB7, 0x74, /* gAwb_u8SkinRBx */ -0xB8, 0x9d, /* gAwb_u8SkinRBy */ -0xBA, 0x4F, /* UniCThrY_rw */ -0xBF, 0x0C, /* u16UniCGrayCntThr_rw_0 */ -0xC0, 0x80, /* u16UniCGrayCntThr_rw_1 */ -0xFF, 0x87, /*Page mode */ -0xC9, 0x22, /* gUR_u8AWBTrim_Addr */ -0xFF, 0x84, /*Page mode */ -0x49, 0x02, /* Threshold_indoor */ -0x4A, 0x00, -0x4B, 0x03, /* Threshold_outdoor */ -0x4C, 0x80, -0xFF, 0x83, /*Page mode */ -0xCB, 0x03, /* R MinGain [Default 0X20] A Spec Pass */ -0xCC, 0xC0, /* R MinGain [Default 0X20] A Spec Pass */ -0x82, 0x00, /* lockratio*/ -0xFF, 0x84, /*Page mode */ -0x3D, 0x00, /* gAwb_u32LuxConst1_rw_0*/ -0x3E, 0x00, /* gAwb_u32LuxConst1_rw_1*/ -0x3F, 0x06, /* gAwb_u32LuxConst1_rw_2*/ -0x40, 0x20, /* gAwb_u32LuxConst1_rw_3*/ -0x41, 0x07, /* gAwb_u32LuxConst2_rw_0*/ -0x42, 0x53, /* gAwb_u32LuxConst2_rw_1*/ -0x43, 0x00, /* gAwb_u32LuxConst2_rw_2*/ -0x44, 0x00, /* gAwb_u32LuxConst2_rw_3*/ -0x55, 0x03, /* gAwb_u8Weight_Gen_rw_0 */ -0x56, 0x10, /* gAwb_u8Weight_Gen_rw_1 */ -0x57, 0x14, /* gAwb_u8Weight_Gen_rw_2 */ -0x58, 0x07, /* gAwb_u8Weight_Gen_rw_3 */ -0x59, 0x04, /* gAwb_u8Weight_Gen_rw_4 */ -0x5A, 0x03, /* gAwb_u8Weight_Gen_rw_5 */ -0x5B, 0x03, /* gAwb_u8Weight_Gen_rw_6 */ -0x5C, 0x15, /* gAwb_u8Weight_Gen_rw_7 */ -0x5D, 0x01, /* gAwb_u8Weight_Ind_rw_0 */ -0x5E, 0x0F, /* gAwb_u8Weight_Ind_rw_1 */ -0x5F, 0x07, /* gAwb_u8Weight_Ind_rw_2 */ -0x60, 0x14, /* gAwb_u8Weight_Ind_rw_3 */ -0x61, 0x14, /* gAwb_u8Weight_Ind_rw_4 */ -0x62, 0x12, /* gAwb_u8Weight_Ind_rw_5 */ -0x63, 0x11, /* gAwb_u8Weight_Ind_rw_6 */ -0x64, 0x14, /* gAwb_u8Weight_Ind_rw_7 */ -0x65, 0x03, /* gAwb_u8Weight_Outd_rw_0*/ -0x66, 0x05, /* gAwb_u8Weight_Outd_rw_1*/ -0x67, 0x15, /* gAwb_u8Weight_Outd_rw_2*/ -0x68, 0x04, /* gAwb_u8Weight_Outd_rw_3*/ -0x69, 0x01, /* gAwb_u8Weight_Outd_rw_4*/ -0x6A, 0x02, /* gAwb_u8Weight_Outd_rw_5*/ -0x6B, 0x03, /* gAwb_u8Weight_Outd_rw_6*/ -0x6C, 0x15, /* gAwb_u8Weight_Outd_rw_6*/ -0xFF, 0x85, /*Page mode */ -0xE2, 0x0C, /* gPT_u8Awb_UnicolorZone_rw */ -0xFF, 0x83, /*Page mode */ -0xCD, 0x06, /*Max Rgain*/ -0xCE, 0x80, -0xD1, 0x06, /*Max BGain*/ -0xd2, 0x80, - -/***************************************************/ -/* AWB STE */ -/***************************************************/ -0xFF, 0xA1, /*Page mode */ -/* Flash */ -0xA0, 0x5c, /*AWBZone0LTx*/ -0xA1, 0x7a, /*AWBZone0LTy*/ -0xA2, 0x69, /*AWBZone0RBx*/ -0xA3, 0x6f, /*AWBZone0RBy*/ -/* cloudy */ -0xA4, 0x73, /*AWBZone1LTx*/ -0xA5, 0x55, /*AWBZone1LTy*/ -0xA6, 0x8C, /*AWBZone1RBx*/ -0xA7, 0x30, /*AWBZone1RBy */ -/* Daylight */ -0xA8, 0x69, /*AWBZone2LTx*/ -0xA9, 0x69, /*AWBZone2LTy*/ -0xAA, 0x83, /*AWBZone2RBx*/ -0xAB, 0x52, /*AWBZone2RBy */ -/* Fluorescent */ -0xAC, 0x57, /*AWBZone3LTx*/ -0xAD, 0x6e, /*AWBZone3LTy*/ -0xAE, 0x6f, /*AWBZone3RBx*/ -0xAF, 0x59, /*AWBZone3RBy*/ - -/*CWF */ -0xB0, 0x50, /*AWBZone4LTx*/ -0xB1, 0x74, /*AWBZone4LTy*/ -0xB2, 0x65, /*AWBZone4RBx*/ -0xB3, 0x5d, /*AWBZone4RBy*/ -/*TL84 */ -0xB4, 0x53, /*AWBZone5LTx*/ -0xB5, 0x7f, /*AWBZone5LTy*/ -0xB6, 0x62, /*AWBZone5RBx*/ -0xB7, 0x75, /*AWBZone5RBy */ -/*A */ -0xB8, 0x4a, /*AWBZone6LTx*/ -0xB9, 0x87, /*AWBZone6LTy*/ -0xBA, 0x59, /*AWBZone6RBx*/ -0xBB, 0x78, /*AWBZone6RBy*/ -/*Horizon */ -0xBC, 0x41, /*AWBZone7LTx*/ -0xBD, 0x91, /*AWBZone7LTy*/ -0xBE, 0x4b, /*AWBZone7RBx*/ -0xBF, 0x89, /*AWBZone7RBy*/ -/*Skin */ -0xC0, 0x5b, /*AWBZone8LTx*/ -0xC1, 0x85, /*AWBZone8LTy*/ -0xC2, 0x60, /*AWBZone8RBx*/ -0xC3, 0x7b, /*AWBZone8RBy*/ - -/***************************************************/ -/* UR */ -/***************************************************/ -0xFF, 0x85, /*Page mode */ -0x06, 0x05, -0xFF, 0x86, /*Page mode */ -0x14, 0x1E, /* CCM sum 1*/ -0xFF, 0x85, /*Page mode */ -0x86, 0x42, /* 42 saturation level*/ -0x07, 0x00, /* sup hysteresis*/ - -/*DAY light */ -0xFF, 0x83, /*Page mode */ -0xEA, 0x00, /*gAwb_s16AdapCCMTbl_0*/ -0xEB, 0x53, /*gAwb_s16AdapCCMTbl_1*/ -0xEC, 0xFF, /*gAwb_s16AdapCCMTbl_2*/ -0xED, 0xE1, /*gAwb_s16AdapCCMTbl_3*/ -0xEE, 0x00, /*gAwb_s16AdapCCMTbl_4*/ -0xEF, 0x05, /*gAwb_s16AdapCCMTbl_5*/ -0xF0, 0xFF, /*gAwb_s16AdapCCMTbl_6*/ -0xF1, 0xF3, /*gAwb_s16AdapCCMTbl_7*/ -0xF2, 0x00, /*gAwb_s16AdapCCMTbl_8*/ -0xF3, 0x4B, /*gAwb_s16AdapCCMTbl_9*/ -0xF4, 0xFF, /*gAwb_s16AdapCCMTbl_10*/ -0xF5, 0xFA, /*gAwb_s16AdapCCMTbl_11*/ -0xF6, 0xFF, /*gAwb_s16AdapCCMTbl_12*/ -0xF7, 0xFa, /*gAwb_s16AdapCCMTbl_13*/ -0xF8, 0xFF, /*gAwb_s16AdapCCMTbl_14*/ -0xF9, 0xC3, /*gAwb_s16AdapCCMTbl_15*/ -0xFA, 0x00, /*gAwb_s16AdapCCMTbl_16*/ -0xFB, 0x80, /*gAwb_s16AdapCCMTbl_17*/ - -/*CWF lgiht */ -0xFF, 0x83, /*Page mode */ -0xFC, 0x00, /* gAwb_s16AdapCCMTbl_18 */ -0xFD, 0x68, /* gAwb_s16AdapCCMTbl_19 */ -0xFF, 0x85, /*Page mode */ -0xE0, 0xFF, /* gAwb_s16AdapCCMTbl_20 */ -0xE1, 0xde, /* gAwb_s16AdapCCMTbl_21 */ -0xFF, 0x84, /*Page mode */ -0x00, 0xff, /* gAwb_s16AdapCCMTbl_22 */ -0x01, 0xfa, /* gAwb_s16AdapCCMTbl_23 */ -0x02, 0xFF, /* gAwb_s16AdapCCMTbl_24 */ -0x03, 0xf0, /* gAwb_s16AdapCCMTbl_25 */ -0x04, 0x00, /* gAwb_s16AdapCCMTbl_26 */ -0x05, 0x52, /* gAwb_s16AdapCCMTbl_27 */ -0x06, 0xFF, /* gAwb_s16AdapCCMTbl_28 */ -0x07, 0xFa, /* gAwb_s16AdapCCMTbl_29 */ -0x08, 0x00, /* gAwb_s16AdapCCMTbl_30 */ -0x09, 0x00, /* gAwb_s16AdapCCMTbl_31 */ -0x0A, 0xFF, /* gAwb_s16AdapCCMTbl_32 */ -0x0B, 0xdb, /* gAwb_s16AdapCCMTbl_33 */ -0x0C, 0x00, /* gAwb_s16AdapCCMTbl_34 */ -0x0D, 0x68, /* gAwb_s16AdapCCMTbl_35 */ - -/*A light */ - -0x0E, 0x00, /* gAwb_s16AdapCCMTbl_36 */ -0x0F, 0x6d, /* gAwb_s16AdapCCMTbl_37 */ -0x10, 0xFF, /* gAwb_s16AdapCCMTbl_38 */ -0x11, 0xd5, /* gAwb_s16AdapCCMTbl_39 */ -0x12, 0xff, /* gAwb_s16AdapCCMTbl_40 */ -0x13, 0xfe, /* gAwb_s16AdapCCMTbl_41 */ -0x14, 0xFF, /* gAwb_s16AdapCCMTbl_42 */ -0x15, 0xf4, /* gAwb_s16AdapCCMTbl_43 */ -0x16, 0x00, /* gAwb_s16AdapCCMTbl_44 */ -0x17, 0x5a, /* gAwb_s16AdapCCMTbl_45 */ -0x18, 0xff, /* gAwb_s16AdapCCMTbl_46 */ -0x19, 0xef, /* gAwb_s16AdapCCMTbl_47 */ -0x1A, 0xff, /* gAwb_s16AdapCCMTbl_48 */ -0x1B, 0xfa, /* gAwb_s16AdapCCMTbl_49 */ -0x1C, 0xFF, /* gAwb_s16AdapCCMTbl_50 */ -0x1D, 0xbe, /* gAwb_s16AdapCCMTbl_51 */ -0x1E, 0x00, /* gAwb_s16AdapCCMTbl_52 */ -0x1F, 0x86, /* gAwb_s16AdapCCMTbl_53 */ - - -/***************************************************/ -/* ADF */ -/***************************************************/ - -/* ISP setting*/ -0xFF, 0xA0, /*Page mode */ -0x10, 0x80, /* BLC: ABLC db*/ -0x60, 0x73, /* CDC: Dark CDC ON */ -0x61, 0x1F, /* Six CDC_Edge En, Slash EN*/ -0x69, 0x0C, /* Slash direction Line threshold*/ -0x6A, 0x60, /* Slash direction Pixel threshold*/ -0xC2, 0x04, /* NSF: directional smoothing*/ -0xD0, 0x51, /* DEM: pattern detection*/ -0xFF, 0xA1, /*Page mode */ -0x30, 0x01, /* EDE: Luminane adaptation on*/ -0x32, 0x50, /* EDE: Adaptation slope */ -0x34, 0x00, /* EDE: x1 point */ -0x35, 0x0B, /* EDE: x1 point */ -0x36, 0x01, /* EDE: x2 point */ -0x37, 0x80, /* EDE: x2 point */ -0x3A, 0x00, /* EDE: Adaptation left margin*/ -0x3B, 0x30, /* EDE: Adaptation right margin*/ -0x3C, 0x08, /* EDE: rgb edge threshol*/ - -/* Adaptive Setting*/ -0xFF, 0x85, /*Page mode */ -/* LSC*/ -0x0F, 0x43, /* LVLSC lux level threshold*/ -0x10, 0x43, /* LSLSC Light source , threshold lux*/ - -/* BGT*/ -0x17, 0x30, /* BGT lux level threshold*/ -0x26, 0x20, /* MinVal */ -0x3c, 0x00, /* MaxVal */ - -/* CNT*/ -0x18, 0x43, /* CNT lux level threshold*/ -0x27, 0x00, /* MinVal */ -0x3d, 0x00, /* MaxVal */ - -/* NSF */ -0x12, 0xA5, /* NSF lux level threshold */ -0x22, 0x38, /* u8MinVal_NSF1*/ -0x23, 0x70, /* u8MinVal_NSF2*/ -0xFF, 0x86, /*Page mode */ -0x12, 0x00, /* u8MinVal_NSF3*/ -0xFF, 0x85, /*Page mode */ -0x38, 0x12, /* u8MaxVal_NSF1*/ -0x39, 0x30, /* u8MaxVal_NSF2*/ -0xFF, 0x86, /*Page mode */ -0x13, 0x08, /* u8MaxVal_NSF3*/ - -/* GDC*/ -0xFF, 0x85, /*Page mode */ -0x15, 0xF4, /* GDC lux level threshold */ -0x2D, 0x20, /* u8MinVal_GDC1*/ -0x2E, 0x30, /* u8MinVal_GDC2*/ -0x43, 0x40, /* u8MaxVal_GDC1*/ -0x44, 0x80, /* u8MaxVal_GDC2*/ - -/* ISP Edge*/ -0x04, 0xFB, /* EnEDE*/ -0x14, 0x54, /* u8ThrLevel_EDE*/ -0x28, 0x00, /* u8MinVal_EDE_CP*/ -0x29, 0x03, /* u8MinVal_EDE1*/ -0x2A, 0x20, /* u8MinVal_EDE2*/ -0x2B, 0x00, /* u8MinVal_EDE_OFS*/ -0x2C, 0x22, /* u8MinVal_SG*/ -0x3E, 0x00, /* u8MaxVal_EDE_CP*/ -0x3F, 0x09, /* u8MaxVal_EDE1*/ -0x40, 0x22, /* u8MaxVal_EDE2*/ -0x41, 0x02, /* u8MaxVal_EDE_OFS*/ -0x42, 0x33, /* u8MaxVal_SG*/ - -/* Gamma Adaptive*/ - -0x16, 0xA0, /* Gamma Threshold*/ -0x47, 0x00, /* Min_Gamma_0*/ -0x48, 0x03, /* Min_Gamma_1*/ -0x49, 0x10, /* Min_Gamma_2*/ -0x4A, 0x25, /* Min_Gamma_3*/ -0x4B, 0x3B, /* Min_Gamma_4*/ -0x4C, 0x4F, /* Min_Gamma_5*/ -0x4D, 0x6D, /* Min_Gamma_6*/ -0x4E, 0x86, /* Min_Gamma_7*/ -0x4F, 0x9B, /* Min_Gamma_8*/ -0x50, 0xAD, /* Min_Gamma_9*/ -0x51, 0xC2, /* Min_Gamma_10*/ -0x52, 0xD3, /* Min_Gamma_11*/ -0x53, 0xE1, /* Min_Gamma_12*/ -0x54, 0xE9, /* Min_Gamma_13*/ -0x55, 0xF2, /* Min_Gamma_14*/ -0x56, 0xFA, /* Min_Gamma_15*/ -0x57, 0xFF, /* Min_Gamma_16*/ -0x58, 0x00, /* Max_Gamma_0 */ -0x59, 0x06, /* Max_Gamma_1 */ -0x5a, 0x14, /* Max_Gamma_2 */ -0x5b, 0x30, /* Max_Gamma_3 */ -0x5c, 0x4A, /* Max_Gamma_4 */ -0x5d, 0x5D, /* Max_Gamma_5 */ -0x5e, 0x75, /* Max_Gamma_6 */ -0x5f, 0x89, /* Max_Gamma_7 */ -0x60, 0x9A, /* Max_Gamma_8 */ -0x61, 0xA7, /* Max_Gamma_9 */ -0x62, 0xBC, /* Max_Gamma_10 */ -0x63, 0xD0, /* Max_Gamma_11 */ -0x64, 0xE0, /* Max_Gamma_12 */ -0x65, 0xE7, /* Max_Gamma_13 */ -0x66, 0xEE, /* Max_Gamma_14 */ -0x67, 0xF7, /* Max_Gamma_15 */ -0x68, 0xFF, /* Max_Gamma_16 */ - -/* Initial edge, noise filter setting*/ -0xFF, 0xA0, /*Page mode */ -0xC0, 0x12, /*NSFTh1_Addr*/ -0xC1, 0x30, /*NSFTh2_Addr*/ -0xC2, 0x08, /*NSFTh3_Addr*/ -0xFF, 0xA1, /*Page mode */ -0x30, 0x01, /*EDEOption_Addr*/ -0x31, 0x33, /*EDESlopeGain_Addr*/ -0x32, 0x50, /*EDELuAdpCtrl_Addr*/ -0x33, 0x00, /*EDEPreCoringPt_Addr*/ -0x34, 0x00, /*EDETransFuncXp1_Addr1*/ -0x35, 0x0B, /*EDETransFuncXp1_Addr0*/ -0x36, 0x01, /*EDETransFuncXp2_Addr1*/ -0x37, 0x80, /*EDETransFuncXp2_Addr0*/ -0x38, 0x09, /*EDETransFuncSl1_Addr*/ -0x39, 0x22, /*EDETransFuncSl2_Addr*/ -0x3A, 0x00, /*EDELuAdpLOffset_Addr*/ -0x3B, 0x30, /*EDELuAdpROffset_Addr*/ -0x3C, 0x08, /*EDERBThrd_Addr*/ -0x3D, 0x02, /*EDESmallOffset_Addr*/ - -/* CCM Saturation Level*/ -0xFF, 0x85, /*Page mode */ -0x1A, 0x64, /* SUP Threshold */ -0x30, 0x40, /* MinSUP */ - -0xFF, 0xA0, /*Page mode */ -/* Lens Shading*/ -0x43, 0x80, /* RH7 rrhrhh*/ -0x44, 0x80, /* RV*/ -0x45, 0x80, /* RH */ -0x46, 0x80, /* RV*/ -0x47, 0x80, /* GH*/ -0x48, 0x80, /* GV*/ -0x49, 0x80, /* GH*/ -0x4A, 0x80, /* GV */ -0x4B, 0x80, /* BH*/ -0x4C, 0x80, /* BV*/ -0x4D, 0x80, /* BH*/ -0x4E, 0x80, /* BV */ -0x52, 0x90, /* GGain*/ -0x53, 0x20, /* GGain*/ -0x54, 0x00, /* GGain*/ - -/*Max Shading*/ -0xFF, 0x85, /*Page mode */ -0x32, 0xC0, -0x33, 0x30, -0x34, 0x00, -0x35, 0x90, -0x36, 0x20, -0x37, 0x00, - -/*Min Shading*/ -0x1c, 0xC0, -0x1d, 0x30, -0x1e, 0x00, -0x1f, 0x90, -0x20, 0x18, -0x21, 0x00, - -/* LineLength */ -0xFF, 0x87, /*Page mode */ -0xDC, 0x05, /* by Yong In Han 091511*/ -0xDD, 0xB0, /* by Yong In Han 091511*/ -0xd5, 0x00, /* Flip*/ -/***************************************************/ -/* SensorCon */ -/***************************************************/ -0xFF, 0xD0, /*Page mode */ -0x20, 0x0E, /* ABLK_Rsrv_Addr*/ -0x20, 0x0D, /* ABLK_Rsrv_Addr*/ - -/***************************************************/ -/* MIPI */ -/***************************************************/ -0xFF, 0xB0, /*Page mode */ -0x54, 0x02, /* MIPI PHY_HS_TX_CTRL*/ -0x38, 0x05, /* MIPI DPHY_CTRL_SET*/ - - -/* SXGA PR*/ -0xFF, 0x85, /*Page mode */ -0xB8, 0x0A, /* gPT_u8PR_Active_SXGA_WORD_COUNT_Addr0*/ -0xB9, 0x00, /* gPT_u8PR_Active_SXGA_WORD_COUNT_Addr1*/ -0xBC, 0x04, /* gPT_u8PR_Active_SXGA_DPHY_CLK_TIME_Addr3*/ -0xFF, 0x87, /*Page mode */ -0x0C, 0x00, /* start Y*/ -0x0D, 0x20, /* start Y */ -0x10, 0x03, /* end Y*/ -0x11, 0xE0, /* end Y */ - -/* Recoding */ -0xFF, 0x86, /*Page mode */ -0x38, 0x05, /* gPT_u8PR_Active_720P_WORD_COUNT_Addr0*/ -0x39, 0x00, /* gPT_u8PR_Active_720P_WORD_COUNT_Addr1*/ -0x3C, 0x04, /* gPT_u8PR_Active_720P_DPHY_CLK_TIME_Addr3*/ - -0xFF, 0x87, -0x23, 0x02, /*gPR_Active_720P_u8SensorCtrl_Addr */ -0x25, 0x01, /*gPR_Active_720P_u8PLL_P_Addr */ -0x26, 0x0F, /*gPR_Active_720P_u8PLL_M_Addr */ -0x27, 0x00, /*gPR_Active_720P_u8PLL_S_Addr */ -0x28, 0x00, /*gPR_Active_720P_u8PLL_Ctrl_Addr */ -0x29, 0x01, /*gPR_Active_720P_u8src_clk_sel_Addr */ -0x2A, 0x00, /*gPR_Active_720P_u8output_pad_status_Addr */ -0x2B, 0x3F, /*gPR_Active_720P_u8ablk_ctrl_10_Addr */ -0x2C, 0xFF, /*gPR_Active_720P_u8BayerFunc_Addr */ -0x2D, 0xFF, /*gPR_Active_720P_u8RgbYcFunc_Addr */ -0x2E, 0x00, /*gPR_Active_720P_u8ISPMode_Addr */ -0x2F, 0x02, /*gPR_Active_720P_u8SCLCtrl_Addr */ -0x30, 0x01, /*gPR_Active_720P_u8SCLHorScale_Addr0 */ -0x31, 0xFF, /*gPR_Active_720P_u8SCLHorScale_Addr1 */ -0x32, 0x03, /*gPR_Active_720P_u8SCLVerScale_Addr0 */ -0x33, 0xFF, /*gPR_Active_720P_u8SCLVerScale_Addr1 */ -0x34, 0x00, /*gPR_Active_720P_u8SCLCropStartX_Addr0 */ -0x35, 0x00, /*gPR_Active_720P_u8SCLCropStartX_Addr1 */ -0x36, 0x00, /*gPR_Active_720P_u8SCLCropStartY_Addr0 */ -0x37, 0x10, /*gPR_Active_720P_u8SCLCropStartY_Addr1 */ -0x38, 0x02, /*gPR_Active_720P_u8SCLCropEndX_Addr0 */ -0x39, 0x80, /*gPR_Active_720P_u8SCLCropEndX_Addr1 */ -0x3A, 0x01, /*gPR_Active_720P_u8SCLCropEndY_Addr0 */ -0x3B, 0xF0, /*gPR_Active_720P_u8SCLCropEndY_Addr1 */ -0x3C, 0x01, /*gPR_Active_720P_u8OutForm_Addr */ -0x3D, 0x0C, /*gPR_Active_720P_u8OutCtrl_Addr */ -0x3E, 0x04, /*gPR_Active_720P_u8AEWinStartX_Addr */ -0x3F, 0x04, /*gPR_Active_720P_u8AEWinStartY_Addr */ -0x40, 0x66, /*gPR_Active_720P_u8MergedWinWidth_Addr */ -0x41, 0x5E, /*gPR_Active_720P_u8MergedWinHeight_Addr */ -0x42, 0x04, /*gPR_Active_720P_u8AEHistWinAx_Addr */ -0x43, 0x04, /*gPR_Active_720P_u8AEHistWinAy_Addr */ -0x44, 0x98, /*gPR_Active_720P_u8AEHistWinBx_Addr */ -0x45, 0x78, /*gPR_Active_720P_u8AEHistWinBy_Addr */ -0x46, 0x22, /*gPR_Active_720P_u8AWBTrim_Addr */ -0x47, 0x28, /*gPR_Active_720P_u8AWBCTWinAx_Addr */ -0x48, 0x20, /*gPR_Active_720P_u8AWBCTWinAy_Addr */ -0x49, 0x78, /*gPR_Active_720P_u8AWBCTWinBx_Addr */ -0x4A, 0x60, /*gPR_Active_720P_u8AWBCTWinBy_Addr */ -0x4B, 0x03, /*gPR_Active_720P_u16AFCFrameLength_0 */ -0x4C, 0x00, /*gPR_Active_720P_u16AFCFrameLength_1 */ - - -/* VGA PR */ -0xFF, 0x86, /*Page mode */ -0x2F, 0x05, /* gPT_u8PR_Active_VGA_WORD_COUNT_Addr0*/ -0x30, 0x00, /* gPT_u8PR_Active_VGA_WORD_COUNT_Addr1*/ -0x33, 0x04, /* gPT_u8PR_Active_VGA_DPHY_CLK_TIME_Addr3 */ - -0xFF, 0x87, /*Page mode */ -0x4D, 0x00, /*gPR_Active_VGA_u8SensorCtrl_Addr*/ -0x4E, 0x72, /*gPR_Active_VGA_u8SensorMode_Addr*/ -0x4F, 0x01, /*gPR_Active_VGA_u8PLL_P_Addr*/ -0x50, 0x0F, /*gPR_Active_VGA_u8PLL_M_Addr*/ -0x51, 0x00, /*gPR_Active_VGA_u8PLL_S_Addr*/ -0x52, 0x00, /*gPR_Active_VGA_u8PLL_Ctrl_Addr*/ -0x53, 0x01, /*gPR_Active_VGA_u8src_clk_sel_Addr*/ -0x54, 0x00, /*gPR_Active_VGA_u8output_pad_status_Addr*/ -0x55, 0x3F, /*gPR_Active_VGA_u8ablk_ctrl_10_Addr*/ -0x56, 0xFF, /*gPR_Active_VGA_u8BayerFunc_Addr*/ -0x57, 0xFF, /*gPR_Active_VGA_u8RgbYcFunc_Addr*/ -0x58, 0x00, /*gPR_Active_VGA_u8ISPMode_Addr*/ -0x59, 0x02, /*gPR_Active_VGA_u8SCLCtrl_Addr*/ -0x5A, 0x01, /*gPR_Active_VGA_u8SCLHorScale_Addr0*/ -0x5B, 0xFF, /*gPR_Active_VGA_u8SCLHorScale_Addr1*/ -0x5C, 0x01, /*gPR_Active_VGA_u8SCLVerScale_Addr0*/ -0x5D, 0xFF, /*gPR_Active_VGA_u8SCLVerScale_Addr1*/ -0x5E, 0x00, /*gPR_Active_VGA_u8SCLCropStartX_Addr0*/ -0x5F, 0x00, /*gPR_Active_VGA_u8SCLCropStartX_Addr1*/ -0x60, 0x00, /*gPR_Active_VGA_u8SCLCropStartY_Addr0*/ -0x61, 0x20, /*gPR_Active_VGA_u8SCLCropStartY_Addr1*/ -0x62, 0x05, /*gPR_Active_VGA_u8SCLCropEndX_Addr0*/ -0x63, 0x00, /*gPR_Active_VGA_u8SCLCropEndX_Addr1*/ -0x64, 0x03, /*gPR_Active_VGA_u8SCLCropEndY_Addr0*/ -0x65, 0xE0, /*gPR_Active_VGA_u8SCLCropEndY_Addr1*/ - -0xFF, 0xd1, /*Page mode */ -0x07, 0x00, /* power off mask clear*/ -0x0b, 0x00, /* clock off mask clear*/ -0xFF, 0xC0, /*Page mode */ -0x10, 0x41, - - -/* VT-Call END of Initial*/ -}; - - -/* Set-data based on Samsung Reliabilty Group standard -* ,when using WIFI. 15fps -*/ -static const u8 db8131m_vt_wifi_common_1[] = { -/***************************************************/ -/* Device : DB8131M Fixed 8fps */ -/* MIPI Interface for Noncontious Clock */ -/***************************************************/ -/***************************************************/ -/* Command */ -/***************************************************/ -0xFF, 0xC0, /*Page mode*/ -0x10, 0x01, -}; -/*wait 150*/ - -static const u8 db8131m_vt_wifi_common_2[] = { -/***************************************************/ -/* Format */ -/***************************************************/ -0xFF, 0xA1, /*Page mode */ -0x70, 0x01, -0x71, 0x0D, - -/***************************************************/ -/* SensorCon */ -/***************************************************/ -0xFF, 0xD0, /*Page mode */ -0x0F, 0x0B, /*ABLK_Ctrl_1_Addr*/ -0x13, 0x00, /*Gain_Addr*/ -0x15, 0x01, /*IVREFT_REFB_Addr*/ -0x20, 0x0E, /*ABLK_Rsrv_Addr*/ -0x23, 0x01, /*IVREFT2_REFB2_Addr*/ -0x24, 0x01, /*IPPG_IVCM2_Addr*/ -0x39, 0x70, /*RiseSx_CDS_1_L_Addr*/ -0x51, 0x19, /*Fallcreset_1_L_Addr*/ -0x83, 0x2D, /*RiseTran_Sig_Even_L_Addr*/ -0x85, 0x2F, /*FallTran_Sig_Even_L_Addr*/ -0x87, 0x2D, /*RiseTran_Sig_Odd_L_Addr*/ -0x89, 0x2F, /*FallTran_Sig_Odd_L_Addr*/ -0x8B, 0x27, /*RiseCNT_EN_1_L_Addr*/ -0x8D, 0x6c, /*FallCNT_EN_1_L_Addr*/ -0xD7, 0x80, /*ABLK_Ctrl_12_Addr*/ -0xDB, 0xA2, /*FallScanTx15_1_L_Addr*/ -0xED, 0x01, /*PLL_P_Addr*/ -0xEE, 0x0F, /*PLL_M_Addr*/ -0xEF, 0x00, /*PLL_S_Addr*/ -0xF9, 0x00, /*ABLK_Ctrl_8*/ -0xF8, 0x00, /*Vblank Sleep Mode enable*/ -0xFB, 0x90, /*PostADC_Gain_Addr*/ - -/***************************************************/ -/* Analog ADF */ -/***************************************************/ -0xFF, 0x85, /*Page mode */ -0x89, 0x93, /*gAdf_u8APThreshold*/ -0x8A, 0x0C, /*u8APClmpThreshold*/ -0x8C, 0x07, /*gAdf_u8APMinVal_ThrClampH*/ -0x8D, 0x40, /*gAdf_u8APMinVal_ThrClampL*/ -0x8E, 0x03, /*gAdf_u8APMinVal_DOFFSET*/ -0x8F, 0x14, /*gAdf_u8APMinVal_AMP2_1_SDM*/ -0x91, 0x1A, /*gAdf_u8APMinVal_AMP4_3_SDM*/ -0x92, 0x0F, /*gAdf_u8APMinVal_FallIntTx15*/ -0x93, 0x47, /*gAdf_u8APMinVal_CDSxRange_CtrlPre*/ -0x95, 0x18, /*gAdf_u8APMinVal_REFB_IVCM*/ -0x96, 0x38, /*gAdf_u8APMinVal_ref_os_PB*/ -0x97, 0x0D, /*gAdf_u8APMinVal_NTx_Range*/ -0x98, 0x0D, /*gAdf_u8APMaxVal_Clmp_rst*/ -0x99, 0x06, /*gAdf_u8APMaxVal_ThrClampH*/ -0x9A, 0x9F, /*gAdf_u8APMaxVal_ThrClampL*/ -0x9B, 0x02, /*gAdf_u8APMaxVal_DOFFSET*/ -0x9C, 0x1C, /*gAdf_u8APMaxVal_AMP2_1_SDM*/ -0x9E, 0x11, /*gAdf_u8APMaxVal_AMP4_3_SDM*/ -0x9F, 0x5D, /*gAdf_u8APMaxVal_FallIntTx15*/ -0xA0, 0x78, /*gAdf_u8APMaxVal_CDSxRange_CtrlPre*/ -0xA2, 0x18, /*gAdf_u8APMaxVal_REFB_IVCM*/ -0xA3, 0x40, /*gAdf_u8APMaxVal_ref_os_PB*/ -0xA4, 0x0B, /*gAdf_u8APMaxVal_NTx_Range*/ - -0xFF, 0x86, /*Page mode */ -0x15, 0x00, /*gPT_u8Adf_APThrHys*/ -0x16, 0xF7, /*gPT_u8Adf_APFallIntTxThrLevel*/ -0x17, 0x13, /*gPT_u8Adf_APMinVal_BP2_1_SDM*/ -0x18, 0x13, /*gPT_u8Adf_APMidVal_BP2_1_SDM*/ -0x19, 0x1C, /*gPT_u8Adf_APMaxVal_BP2_1_SDM*/ -0x1A, 0x06, /*gPT_u8Adf_APMidVal_ThrClampH*/ -0x1B, 0xF0, /*gPT_u8Adf_APMidVal_ThrClampL*/ -0x1C, 0x01, /*gPT_u8Adf_APMidVal_DOFFSET*/ -0x1D, 0x14, /*gPT_u8Adf_APMidVal_AMP2_1_SDM*/ -0x1F, 0x31, /*gPT_u8Adf_APMidVal_AMP4_3_SDM*/ -0x20, 0x68, /*gPT_u8Adf_APMidVal_CDSxRange_CtrlPre*/ -0x22, 0x18, /*gPT_u8Adf_APMidVal_REFB_IVCM*/ -0x23, 0x38, /*gPT_u8Adf_APMidVal_ref_os_PB*/ -0x24, 0x0F, /*gPT_u8Adf_APMidVal_NTx_Range*/ -0x25, 0x77, /*gPT_u8Adf_APVal_EnSiSoSht_EnSm*/ - -0xFF, 0x87, /*Page mode */ -0xEA, 0x41, - -0xFF, 0xD0, /*Page mode */ -0x20, 0x0D, /*ABLK_Rsrv_Addr*/ - -0xFF, 0x83, /*Page mode */ -0x63, 0x28, /*Again Table*/ -0x64, 0x10, /*Again Table*/ -0x65, 0xA8, /*Again Table*/ -0x66, 0x50, /*Again Table*/ -0x67, 0x28, /*Again Table*/ -0x68, 0x14, /*Again Table*/ - - -/***************************************************/ -/* AE */ -/***************************************************/ -0xFF, 0x82, /*Page mode */ -0x91, 0x02, /* AeMode*/ -0x95, 0x88, /* AE weight*/ -0x96, 0x88, -0x97, 0xF8, -0x98, 0x8F, -0x99, 0xF8, -0x9A, 0x8F, -0x9B, 0x88, -0x9C, 0x88, -0xA9, 0x40, /* OTarget*/ -0xAA, 0x40, /* ITarget*/ -0x9D, 0x66, /* AE Speed*/ -0x9F, 0x06, /* AE HoldBnd*/ -0xA8, 0x40, /* STarget*/ -0xB9, 0x04, /* RGain*/ -0xBB, 0x04, /* GGain*/ -0xBD, 0x04, /* BGain*/ -0xC5, 0x02, /* PeakMvStep*/ -0xC6, 0x38, /* PeakTgMin*/ -0xC7, 0x24, /* PeakRatioTh1*/ -0xC8, 0x10, /* PeakRatioTh0*/ -0xC9, 0x05, /* PeakLuTh*/ -0xD5, 0x60, /* LuxGainTB_2*/ -0xFF, 0x83, /*Page mode */ -0x2F, 0x04, /* TimeNum0*/ -0x30, 0x05, /* TimeNum1*/ -0x4F, 0x05, /* FrameOffset*/ -0xFF, 0x82, /*Page mode */ -0xA1, 0x0A, /* AnalogGainMax*/ -0xF3, 0x09, /* SCLK*/ -0xF4, 0x60, -0xF9, 0x00, /* GainMax*/ -0xFA, 0xC8, /* GainMax*/ -0xFB, 0x62, /* Gain3Lut*/ -0xFC, 0x39, /* Gain2Lut*/ -0xFD, 0x28, /* Gain1Lut*/ -0xFE, 0x12, /* GainMin*/ -0xFF, 0x83, /*Page mode */ -0x03, 0x0F, /* TimeMax60Hz : 8fps*/ -0x04, 0x0A, /* Time3Lux60Hz : 12fps*/ -0x05, 0x04, /* Time2Lut60Hz : 24fps*/ -0x06, 0x04, /* Time1Lut60Hz : 24fps*/ -0xFF, 0x82, /*Page mode */ -0xD3, 0x12, /* LuxTBGainStep0 */ -0xD4, 0x36, /* LuxTBGainStep1 */ -0xD5, 0x60, /* LuxTBGainStep2*/ -0xD6, 0x01, /* LuxTBTimeStep0H*/ -0xD7, 0x00, /* LuxTBTimeStep0L*/ -0xD8, 0x01, /* LuxTBTimeStep1H*/ -0xD9, 0xC0, /* LuxTBTimeStep1L*/ -0xDA, 0x06, /* LuxTBTimeStep2H*/ -0xDB, 0x00, /* LuxTBTimeStep2L*/ -0xFF, 0x83, /*Page mode */ -0x0B, 0x08, -0x0C, 0x0C, /* Frame Rate*/ -0xFF, 0x82, /*Page mode */ -0x92, 0x5D, - -/***************************************************/ -/* AWB */ -/***************************************************/ -0xFF, 0x83, /*Page mode */ -0x79, 0x83, /* AWB SKIN ON*/ -0x86, 0x07, /* gAWB_u16MinGrayCnt_rw_0*/ -0x87, 0x00, /* gAWB_u16MinGrayCnt_rw_1*/ -0x90, 0x05, /* gAWB_u16FinalRGain_ro_0*/ -0x94, 0x05, /* gAWB_u16FinalBGain_ro_0*/ -0x98, 0xD4, /* SkinWinCntTh*/ -0xA2, 0x28, /* SkinYTh*/ -0xA3, 0x00, /* SkinHoldHitCnt*/ -0xA4, 0x0F, /* SkinHoldHitCnt*/ -0xAD, 0x65, /* u8SkinTop2*/ -0xAE, 0x80, /* gAwb_u8SkinTop2LS1Ratio_rw 5zone */ -0xAF, 0x20, /* gAwb_u8SkinTop2LS2Ratio_rw 6zone */ -0xB4, 0x10, /* u8SkinTop2LSHys_rw */ -0xB5, 0x54, /* gAwb_u8SkinLTx */ -0xB6, 0xbd, /* gAwb_u8SkinLTy */ -0xB7, 0x74, /* gAwb_u8SkinRBx */ -0xB8, 0x9d, /* gAwb_u8SkinRBy */ -0xBA, 0x4F, /* UniCThrY_rw */ -0xBF, 0x0C, /* u16UniCGrayCntThr_rw_0*/ -0xC0, 0x80, /* u16UniCGrayCntThr_rw_1 */ -0xFF, 0x87, /*Page mode */ -0xC9, 0x22, /* gUR_u8AWBTrim_Addr */ -0xFF, 0x84, /*Page mode */ -0x49, 0x02, /* Threshold_indoor */ -0x4A, 0x00, -0x4B, 0x03, /* Threshold_outdoor */ -0x4C, 0x80, -0xFF, 0x83, /*Page mode */ -0xCB, 0x03, /* R MinGain [Default 0X20] A Spec Pass */ -0xCC, 0xC0, /* R MinGain [Default 0X20] A Spec Pass */ -0x82, 0x00, /* lockratio*/ -0xFF, 0x84, /*Page mode */ -0x3D, 0x00, /* gAwb_u32LuxConst1_rw_0*/ -0x3E, 0x00, /* gAwb_u32LuxConst1_rw_1*/ -0x3F, 0x06, /* gAwb_u32LuxConst1_rw_2*/ -0x40, 0x20, /* gAwb_u32LuxConst1_rw_3*/ -0x41, 0x07, /* gAwb_u32LuxConst2_rw_0*/ -0x42, 0x53, /* gAwb_u32LuxConst2_rw_1*/ -0x43, 0x00, /* gAwb_u32LuxConst2_rw_2*/ -0x44, 0x00, /* gAwb_u32LuxConst2_rw_3*/ -0x55, 0x03, /* gAwb_u8Weight_Gen_rw_0 */ -0x56, 0x10, /* gAwb_u8Weight_Gen_rw_1 */ -0x57, 0x14, /* gAwb_u8Weight_Gen_rw_2 */ -0x58, 0x07, /* gAwb_u8Weight_Gen_rw_3 */ -0x59, 0x04, /* gAwb_u8Weight_Gen_rw_4 */ -0x5A, 0x03, /* gAwb_u8Weight_Gen_rw_5 */ -0x5B, 0x03, /* gAwb_u8Weight_Gen_rw_6 */ -0x5C, 0x15, /* gAwb_u8Weight_Gen_rw_7 */ -0x5D, 0x01, /* gAwb_u8Weight_Ind_rw_0 */ -0x5E, 0x0F, /* gAwb_u8Weight_Ind_rw_1 */ -0x5F, 0x07, /* gAwb_u8Weight_Ind_rw_2 */ -0x60, 0x14, /* gAwb_u8Weight_Ind_rw_3 */ -0x61, 0x14, /* gAwb_u8Weight_Ind_rw_4 */ -0x62, 0x12, /* gAwb_u8Weight_Ind_rw_5 */ -0x63, 0x11, /* gAwb_u8Weight_Ind_rw_6 */ -0x64, 0x14, /* gAwb_u8Weight_Ind_rw_7 */ -0x65, 0x03, /* gAwb_u8Weight_Outd_rw_0*/ -0x66, 0x05, /* gAwb_u8Weight_Outd_rw_1*/ -0x67, 0x15, /* gAwb_u8Weight_Outd_rw_2*/ -0x68, 0x04, /* gAwb_u8Weight_Outd_rw_3*/ -0x69, 0x01, /* gAwb_u8Weight_Outd_rw_4*/ -0x6A, 0x02, /* gAwb_u8Weight_Outd_rw_5*/ -0x6B, 0x03, /* gAwb_u8Weight_Outd_rw_6*/ -0x6C, 0x15, /* gAwb_u8Weight_Outd_rw_6*/ -0xFF, 0x85, /*Page mode */ -0xE2, 0x0C, /* gPT_u8Awb_UnicolorZone_rw */ -0xFF, 0x83, /*Page mode */ -0xCD, 0x06, /*Max Rgain*/ -0xCE, 0x80, -0xD1, 0x06, /*Max BGain*/ -0xd2, 0x80, - -/***************************************************/ -/* AWB STE */ -/***************************************************/ -0xFF, 0xA1, /*Page mode */ -/*Flash*/ -0xA0, 0x5c, /*AWBZone0LTx*/ -0xA1, 0x7a, /*AWBZone0LTy*/ -0xA2, 0x69, /*AWBZone0RBx*/ -0xA3, 0x6f, /*AWBZone0RBy*/ -/*cloudy*/ -0xA4, 0x73, /*AWBZone1LTx*/ -0xA5, 0x55, /*AWBZone1LTy*/ -0xA6, 0x8C, /*AWBZone1RBx*/ -0xA7, 0x30, /*AWBZone1RBy */ -/*Daylight */ -0xA8, 0x69, /*AWBZone2LTx*/ -0xA9, 0x69, /*AWBZone2LTy*/ -0xAA, 0x83, /*AWBZone2RBx*/ -0xAB, 0x52, /*AWBZone2RBy */ -/*Fluorescent */ -0xAC, 0x57, /*AWBZone3LTx*/ -0xAD, 0x6e, /*AWBZone3LTy*/ -0xAE, 0x6f, /*AWBZone3RBx*/ -0xAF, 0x59, /*AWBZone3RBy*/ - -/*CWF */ -0xB0, 0x50, /*AWBZone4LTx*/ -0xB1, 0x74, /*AWBZone4LTy*/ -0xB2, 0x65, /*AWBZone4RBx*/ -0xB3, 0x5d, /*AWBZone4RBy*/ -/*TL84 */ -0xB4, 0x53, /*AWBZone5LTx*/ -0xB5, 0x7f, /*AWBZone5LTy*/ -0xB6, 0x62, /*AWBZone5RBx*/ -0xB7, 0x75, /*AWBZone5RBy */ -/*A */ -0xB8, 0x4a, /*AWBZone6LTx*/ -0xB9, 0x87, /*AWBZone6LTy*/ -0xBA, 0x59, /*AWBZone6RBx*/ -0xBB, 0x78, /*AWBZone6RBy*/ -/*Horizon */ -0xBC, 0x41, /*AWBZone7LTx*/ -0xBD, 0x91, /*AWBZone7LTy*/ -0xBE, 0x4b, /*AWBZone7RBx*/ -0xBF, 0x89, /*AWBZone7RBy*/ -/*Skin */ -0xC0, 0x5b, /*AWBZone8LTx*/ -0xC1, 0x85, /*AWBZone8LTy*/ -0xC2, 0x60, /*AWBZone8RBx*/ -0xC3, 0x7b, /*AWBZone8RBy*/ - -/***************************************************/ -/* UR */ -/***************************************************/ -0xFF, 0x85, /*Page mode */ -0x06, 0x05, -0xFF, 0x86, /*Page mode */ -0x14, 0x1E, /* CCM sum 1*/ -0xFF, 0x85, /*Page mode */ -0x86, 0x42, /* 42 saturation level*/ -0x07, 0x00, /* sup hysteresis*/ - -/*DAY light */ -0xFF, 0x83, /*Page mode */ -0xEA, 0x00, /*gAwb_s16AdapCCMTbl_0*/ -0xEB, 0x53, /*gAwb_s16AdapCCMTbl_1*/ -0xEC, 0xFF, /*gAwb_s16AdapCCMTbl_2*/ -0xED, 0xE1, /*gAwb_s16AdapCCMTbl_3*/ -0xEE, 0x00, /*gAwb_s16AdapCCMTbl_4*/ -0xEF, 0x05, /*gAwb_s16AdapCCMTbl_5*/ -0xF0, 0xFF, /*gAwb_s16AdapCCMTbl_6*/ -0xF1, 0xF3, /*gAwb_s16AdapCCMTbl_7*/ -0xF2, 0x00, /*gAwb_s16AdapCCMTbl_8*/ -0xF3, 0x4B, /*gAwb_s16AdapCCMTbl_9*/ -0xF4, 0xFF, /*gAwb_s16AdapCCMTbl_10*/ -0xF5, 0xFA, /*gAwb_s16AdapCCMTbl_11*/ -0xF6, 0xFF, /*gAwb_s16AdapCCMTbl_12*/ -0xF7, 0xFa, /*gAwb_s16AdapCCMTbl_13*/ -0xF8, 0xFF, /*gAwb_s16AdapCCMTbl_14*/ -0xF9, 0xC3, /*gAwb_s16AdapCCMTbl_15*/ -0xFA, 0x00, /*gAwb_s16AdapCCMTbl_16*/ -0xFB, 0x80, /*gAwb_s16AdapCCMTbl_17*/ - -/*CWF lgiht */ -0xFF, 0x83, /*Page mode */ -0xFC, 0x00, /* gAwb_s16AdapCCMTbl_18 */ -0xFD, 0x68, /* gAwb_s16AdapCCMTbl_19 */ -0xFF, 0x85, /*Page mode */ -0xE0, 0xFF, /* gAwb_s16AdapCCMTbl_20 */ -0xE1, 0xde, /* gAwb_s16AdapCCMTbl_21 */ -0xFF, 0x84, /*Page mode */ -0x00, 0xff, /* gAwb_s16AdapCCMTbl_22 */ -0x01, 0xfa, /* gAwb_s16AdapCCMTbl_23 */ -0x02, 0xFF, /* gAwb_s16AdapCCMTbl_24 */ -0x03, 0xf0, /* gAwb_s16AdapCCMTbl_25 */ -0x04, 0x00, /* gAwb_s16AdapCCMTbl_26 */ -0x05, 0x52, /* gAwb_s16AdapCCMTbl_27 */ -0x06, 0xFF, /* gAwb_s16AdapCCMTbl_28 */ -0x07, 0xFa, /* gAwb_s16AdapCCMTbl_29 */ -0x08, 0x00, /* gAwb_s16AdapCCMTbl_30 */ -0x09, 0x00, /* gAwb_s16AdapCCMTbl_31 */ -0x0A, 0xFF, /* gAwb_s16AdapCCMTbl_32 */ -0x0B, 0xdb, /* gAwb_s16AdapCCMTbl_33 */ -0x0C, 0x00, /* gAwb_s16AdapCCMTbl_34 */ -0x0D, 0x68, /* gAwb_s16AdapCCMTbl_35 */ - -/*A light */ - -0x0E, 0x00, /* gAwb_s16AdapCCMTbl_36 */ -0x0F, 0x6d, /* gAwb_s16AdapCCMTbl_37 */ -0x10, 0xFF, /* gAwb_s16AdapCCMTbl_38 */ -0x11, 0xd5, /* gAwb_s16AdapCCMTbl_39 */ -0x12, 0xff, /* gAwb_s16AdapCCMTbl_40 */ -0x13, 0xfe, /* gAwb_s16AdapCCMTbl_41 */ -0x14, 0xFF, /* gAwb_s16AdapCCMTbl_42 */ -0x15, 0xf4, /* gAwb_s16AdapCCMTbl_43 */ -0x16, 0x00, /* gAwb_s16AdapCCMTbl_44 */ -0x17, 0x5a, /* gAwb_s16AdapCCMTbl_45 */ -0x18, 0xff, /* gAwb_s16AdapCCMTbl_46 */ -0x19, 0xef, /* gAwb_s16AdapCCMTbl_47 */ -0x1A, 0xff, /* gAwb_s16AdapCCMTbl_48 */ -0x1B, 0xfa, /* gAwb_s16AdapCCMTbl_49 */ -0x1C, 0xFF, /* gAwb_s16AdapCCMTbl_50 */ -0x1D, 0xbe, /* gAwb_s16AdapCCMTbl_51 */ -0x1E, 0x00, /* gAwb_s16AdapCCMTbl_52 */ -0x1F, 0x86, /* gAwb_s16AdapCCMTbl_53 */ - - -/***************************************************/ -/* ADF */ -/***************************************************/ - -/* ISP setting*/ -0xFF, 0xA0, /*Page mode */ -0x10, 0x80, /* BLC: ABLC db*/ -0x60, 0x73, /* CDC: Dark CDC ON */ -0x61, 0x1F, /* Six CDC_Edge En, Slash EN*/ -0x69, 0x0C, /* Slash direction Line threshold*/ -0x6A, 0x60, /* Slash direction Pixel threshold*/ -0xC2, 0x04, /* NSF: directional smoothing*/ -0xD0, 0x51, /* DEM: pattern detection*/ -0xFF, 0xA1, /*Page mode */ -0x30, 0x01, /* EDE: Luminane adaptation on*/ -0x32, 0x50, /* EDE: Adaptation slope */ -0x34, 0x00, /* EDE: x1 point */ -0x35, 0x0B, /* EDE: x1 point */ -0x36, 0x01, /* EDE: x2 point */ -0x37, 0x80, /* EDE: x2 point */ -0x3A, 0x00, /* EDE: Adaptation left margin*/ -0x3B, 0x30, /* EDE: Adaptation right margin*/ -0x3C, 0x08, /* EDE: rgb edge threshol*/ - -/* Adaptive Setting*/ -0xFF, 0x85, /*Page mode */ -/* LSC*/ -0x0F, 0x43, /* LVLSC lux level threshold*/ -0x10, 0x43, /* LSLSC Light source , threshold lux*/ - -/* BGT*/ -0x17, 0x30, /* BGT lux level threshold*/ -0x26, 0x20, /* MinVal */ -0x3c, 0x00, /* MaxVal */ - -/* CNT*/ -0x18, 0x43, /* CNT lux level threshold*/ -0x27, 0x00, /* MinVal */ -0x3d, 0x00, /* MaxVal */ - -/* NSF */ -0x12, 0xA5, /* NSF lux level threshold */ -0x22, 0x38, /* u8MinVal_NSF1*/ -0x23, 0x70, /* u8MinVal_NSF2*/ -0xFF, 0x86, /*Page mode */ -0x12, 0x00, /* u8MinVal_NSF3*/ -0xFF, 0x85, /*Page mode */ -0x38, 0x12, /* u8MaxVal_NSF1*/ -0x39, 0x30, /* u8MaxVal_NSF2*/ -0xFF, 0x86, /*Page mode */ -0x13, 0x08, /* u8MaxVal_NSF3*/ - -/* GDC*/ -0xFF, 0x85, /*Page mode */ -0x15, 0xF4, /* GDC lux level threshold */ -0x2D, 0x20, /* u8MinVal_GDC1*/ -0x2E, 0x30, /* u8MinVal_GDC2*/ -0x43, 0x40, /* u8MaxVal_GDC1*/ -0x44, 0x80, /* u8MaxVal_GDC2*/ - -/* ISP Edge*/ -0x04, 0xFB, /* EnEDE*/ -0x14, 0x54, /* u8ThrLevel_EDE*/ -0x28, 0x00, /* u8MinVal_EDE_CP*/ -0x29, 0x03, /* u8MinVal_EDE1*/ -0x2A, 0x20, /* u8MinVal_EDE2*/ -0x2B, 0x00, /* u8MinVal_EDE_OFS*/ -0x2C, 0x22, /* u8MinVal_SG*/ -0x3E, 0x00, /* u8MaxVal_EDE_CP*/ -0x3F, 0x09, /* u8MaxVal_EDE1*/ -0x40, 0x22, /* u8MaxVal_EDE2*/ -0x41, 0x02, /* u8MaxVal_EDE_OFS*/ -0x42, 0x33, /* u8MaxVal_SG*/ - -/* Gamma Adaptive*/ - -0x16, 0xA0, /* Gamma Threshold*/ -0x47, 0x00, /* Min_Gamma_0*/ -0x48, 0x03, /* Min_Gamma_1*/ -0x49, 0x10, /* Min_Gamma_2*/ -0x4A, 0x25, /* Min_Gamma_3*/ -0x4B, 0x3B, /* Min_Gamma_4*/ -0x4C, 0x4F, /* Min_Gamma_5*/ -0x4D, 0x6D, /* Min_Gamma_6*/ -0x4E, 0x86, /* Min_Gamma_7*/ -0x4F, 0x9B, /* Min_Gamma_8*/ -0x50, 0xAD, /* Min_Gamma_9*/ -0x51, 0xC2, /* Min_Gamma_10*/ -0x52, 0xD3, /* Min_Gamma_11*/ -0x53, 0xE1, /* Min_Gamma_12*/ -0x54, 0xE9, /* Min_Gamma_13*/ -0x55, 0xF2, /* Min_Gamma_14*/ -0x56, 0xFA, /* Min_Gamma_15*/ -0x57, 0xFF, /* Min_Gamma_16*/ -0x58, 0x00, /* Max_Gamma_0 */ -0x59, 0x06, /* Max_Gamma_1 */ -0x5a, 0x14, /* Max_Gamma_2 */ -0x5b, 0x30, /* Max_Gamma_3 */ -0x5c, 0x4A, /* Max_Gamma_4 */ -0x5d, 0x5D, /* Max_Gamma_5 */ -0x5e, 0x75, /* Max_Gamma_6 */ -0x5f, 0x89, /* Max_Gamma_7 */ -0x60, 0x9A, /* Max_Gamma_8 */ -0x61, 0xA7, /* Max_Gamma_9 */ -0x62, 0xBC, /* Max_Gamma_10 */ -0x63, 0xD0, /* Max_Gamma_11 */ -0x64, 0xE0, /* Max_Gamma_12 */ -0x65, 0xE7, /* Max_Gamma_13 */ -0x66, 0xEE, /* Max_Gamma_14 */ -0x67, 0xF7, /* Max_Gamma_15 */ -0x68, 0xFF, /* Max_Gamma_16 */ - -/* Initial edge, noise filter setting*/ -0xFF, 0xA0, /*Page mode */ -0xC0, 0x12, /*NSFTh1_Addr*/ -0xC1, 0x30, /*NSFTh2_Addr*/ -0xC2, 0x08, /*NSFTh3_Addr*/ -0xFF, 0xA1, /*Page mode */ -0x30, 0x01, /*EDEOption_Addr*/ -0x31, 0x33, /*EDESlopeGain_Addr*/ -0x32, 0x50, /*EDELuAdpCtrl_Addr*/ -0x33, 0x00, /*EDEPreCoringPt_Addr*/ -0x34, 0x00, /*EDETransFuncXp1_Addr1*/ -0x35, 0x0B, /*EDETransFuncXp1_Addr0*/ -0x36, 0x01, /*EDETransFuncXp2_Addr1*/ -0x37, 0x80, /*EDETransFuncXp2_Addr0*/ -0x38, 0x09, /*EDETransFuncSl1_Addr*/ -0x39, 0x22, /*EDETransFuncSl2_Addr*/ -0x3A, 0x00, /*EDELuAdpLOffset_Addr*/ -0x3B, 0x30, /*EDELuAdpROffset_Addr*/ -0x3C, 0x08, /*EDERBThrd_Addr*/ -0x3D, 0x02, /*EDESmallOffset_Addr*/ - - -/* CCM Saturation Level*/ -0xFF, 0x85, /*Page mode */ -0x1A, 0x64, /* SUP Threshold */ -0x30, 0x40, /* MinSUP */ - -0xFF, 0xA0, /*Page mode */ -/* Lens Shading*/ -0x43, 0x80, /* RH7 rrhrhh*/ -0x44, 0x80, /* RV*/ -0x45, 0x80, /* RH */ -0x46, 0x80, /* RV*/ -0x47, 0x80, /* GH*/ -0x48, 0x80, /* GV*/ -0x49, 0x80, /* GH*/ -0x4A, 0x80, /* GV */ -0x4B, 0x80, /* BH*/ -0x4C, 0x80, /* BV*/ -0x4D, 0x80, /* BH*/ -0x4E, 0x80, /* BV */ -0x52, 0x90, /* GGain*/ -0x53, 0x20, /* GGain*/ -0x54, 0x00, /* GGain*/ - -/*Max Shading*/ -0xFF, 0x85, /*Page mode */ -0x32, 0xC0, -0x33, 0x30, -0x34, 0x00, -0x35, 0x90, -0x36, 0x20, -0x37, 0x00, - -/*Min Shading*/ -0x1c, 0xC0, -0x1d, 0x30, -0x1e, 0x00, -0x1f, 0x90, -0x20, 0x18, -0x21, 0x00, - -/* LineLength */ -0xFF, 0x87, /*Page mode */ -0xDC, 0x05, /* by Yong In Han 091511*/ -0xDD, 0xB0, /* by Yong In Han 091511*/ -0xd5, 0x00, /* Flip*/ -/***************************************************/ -/* SensorCon */ -/***************************************************/ -0xFF, 0xD0, /*Page mode */ -0x20, 0x0E, /* ABLK_Rsrv_Addr*/ -0x20, 0x0D, /* ABLK_Rsrv_Addr*/ - -/***************************************************/ -/* MIPI */ -/***************************************************/ -0xFF, 0xB0, /*Page mode */ -0x54, 0x02, /* MIPI PHY_HS_TX_CTRL*/ -0x38, 0x05, /* MIPI DPHY_CTRL_SET*/ - - -/* SXGA PR*/ -0xFF, 0x85, /*Page mode */ -0xB8, 0x0A, /* gPT_u8PR_Active_SXGA_WORD_COUNT_Addr0*/ -0xB9, 0x00, /* gPT_u8PR_Active_SXGA_WORD_COUNT_Addr1*/ -0xBC, 0x04, /* gPT_u8PR_Active_SXGA_DPHY_CLK_TIME_Addr3*/ -0xFF, 0x87, /*Page mode */ -0x0C, 0x00, /* start Y*/ -0x0D, 0x20, /* start Y */ -0x10, 0x03, /* end Y*/ -0x11, 0xE0, /* end Y */ - -/* Recoding */ -0xFF, 0x86, /*Page mode */ -0x38, 0x05, /* gPT_u8PR_Active_720P_WORD_COUNT_Addr0*/ -0x39, 0x00, /* gPT_u8PR_Active_720P_WORD_COUNT_Addr1*/ -0x3C, 0x04, /* gPT_u8PR_Active_720P_DPHY_CLK_TIME_Addr3*/ - -0xFF, 0x87, -0x23, 0x02, /*gPR_Active_720P_u8SensorCtrl_Addr */ -0x25, 0x01, /*gPR_Active_720P_u8PLL_P_Addr */ -0x26, 0x0F, /*gPR_Active_720P_u8PLL_M_Addr */ -0x27, 0x00, /*gPR_Active_720P_u8PLL_S_Addr */ -0x28, 0x00, /*gPR_Active_720P_u8PLL_Ctrl_Addr */ -0x29, 0x01, /*gPR_Active_720P_u8src_clk_sel_Addr */ -0x2A, 0x00, /*gPR_Active_720P_u8output_pad_status_Addr */ -0x2B, 0x3F, /*gPR_Active_720P_u8ablk_ctrl_10_Addr */ -0x2C, 0xFF, /*gPR_Active_720P_u8BayerFunc_Addr */ -0x2D, 0xFF, /*gPR_Active_720P_u8RgbYcFunc_Addr */ -0x2E, 0x00, /*gPR_Active_720P_u8ISPMode_Addr */ -0x2F, 0x02, /*gPR_Active_720P_u8SCLCtrl_Addr */ -0x30, 0x01, /*gPR_Active_720P_u8SCLHorScale_Addr0 */ -0x31, 0xFF, /*gPR_Active_720P_u8SCLHorScale_Addr1 */ -0x32, 0x03, /*gPR_Active_720P_u8SCLVerScale_Addr0 */ -0x33, 0xFF, /*gPR_Active_720P_u8SCLVerScale_Addr1 */ -0x34, 0x00, /*gPR_Active_720P_u8SCLCropStartX_Addr0 */ -0x35, 0x00, /*gPR_Active_720P_u8SCLCropStartX_Addr1 */ -0x36, 0x00, /*gPR_Active_720P_u8SCLCropStartY_Addr0 */ -0x37, 0x10, /*gPR_Active_720P_u8SCLCropStartY_Addr1 */ -0x38, 0x02, /*gPR_Active_720P_u8SCLCropEndX_Addr0 */ -0x39, 0x80, /*gPR_Active_720P_u8SCLCropEndX_Addr1 */ -0x3A, 0x01, /*gPR_Active_720P_u8SCLCropEndY_Addr0 */ -0x3B, 0xF0, /*gPR_Active_720P_u8SCLCropEndY_Addr1 */ -0x3C, 0x01, /*gPR_Active_720P_u8OutForm_Addr */ -0x3D, 0x0C, /*gPR_Active_720P_u8OutCtrl_Addr */ -0x3E, 0x04, /*gPR_Active_720P_u8AEWinStartX_Addr */ -0x3F, 0x04, /*gPR_Active_720P_u8AEWinStartY_Addr */ -0x40, 0x66, /*gPR_Active_720P_u8MergedWinWidth_Addr */ -0x41, 0x5E, /*gPR_Active_720P_u8MergedWinHeight_Addr */ -0x42, 0x04, /*gPR_Active_720P_u8AEHistWinAx_Addr */ -0x43, 0x04, /*gPR_Active_720P_u8AEHistWinAy_Addr */ -0x44, 0x98, /*gPR_Active_720P_u8AEHistWinBx_Addr */ -0x45, 0x78, /*gPR_Active_720P_u8AEHistWinBy_Addr */ -0x46, 0x22, /*gPR_Active_720P_u8AWBTrim_Addr */ -0x47, 0x28, /*gPR_Active_720P_u8AWBCTWinAx_Addr */ -0x48, 0x20, /*gPR_Active_720P_u8AWBCTWinAy_Addr */ -0x49, 0x78, /*gPR_Active_720P_u8AWBCTWinBx_Addr */ -0x4A, 0x60, /*gPR_Active_720P_u8AWBCTWinBy_Addr */ -0x4B, 0x03, /*gPR_Active_720P_u16AFCFrameLength_0 */ -0x4C, 0x00, /*gPR_Active_720P_u16AFCFrameLength_1 */ - - -/* VGA PR */ -0xFF, 0x86, /*Page mode */ -0x2F, 0x05, /* gPT_u8PR_Active_VGA_WORD_COUNT_Addr0*/ -0x30, 0x00, /* gPT_u8PR_Active_VGA_WORD_COUNT_Addr1*/ -0x33, 0x04, /* gPT_u8PR_Active_VGA_DPHY_CLK_TIME_Addr3*/ - -0xFF, 0x87, /*Page mode */ -0x4D, 0x00, /*gPR_Active_VGA_u8SensorCtrl_Addr*/ -0x4E, 0x72, /*gPR_Active_VGA_u8SensorMode_Addr*/ -0x4F, 0x01, /*gPR_Active_VGA_u8PLL_P_Addr*/ -0x50, 0x0F, /*gPR_Active_VGA_u8PLL_M_Addr*/ -0x51, 0x00, /*gPR_Active_VGA_u8PLL_S_Addr*/ -0x52, 0x00, /*gPR_Active_VGA_u8PLL_Ctrl_Addr*/ -0x53, 0x01, /*gPR_Active_VGA_u8src_clk_sel_Addr*/ -0x54, 0x00, /*gPR_Active_VGA_u8output_pad_status_Addr*/ -0x55, 0x3F, /*gPR_Active_VGA_u8ablk_ctrl_10_Addr*/ -0x56, 0xFF, /*gPR_Active_VGA_u8BayerFunc_Addr*/ -0x57, 0xFF, /*gPR_Active_VGA_u8RgbYcFunc_Addr*/ -0x58, 0x00, /*gPR_Active_VGA_u8ISPMode_Addr*/ -0x59, 0x02, /*gPR_Active_VGA_u8SCLCtrl_Addr*/ -0x5A, 0x01, /*gPR_Active_VGA_u8SCLHorScale_Addr0*/ -0x5B, 0xFF, /*gPR_Active_VGA_u8SCLHorScale_Addr1*/ -0x5C, 0x01, /*gPR_Active_VGA_u8SCLVerScale_Addr0*/ -0x5D, 0xFF, /*gPR_Active_VGA_u8SCLVerScale_Addr1*/ -0x5E, 0x00, /*gPR_Active_VGA_u8SCLCropStartX_Addr0*/ -0x5F, 0x00, /*gPR_Active_VGA_u8SCLCropStartX_Addr1*/ -0x60, 0x00, /*gPR_Active_VGA_u8SCLCropStartY_Addr0*/ -0x61, 0x20, /*gPR_Active_VGA_u8SCLCropStartY_Addr1*/ -0x62, 0x05, /*gPR_Active_VGA_u8SCLCropEndX_Addr0*/ -0x63, 0x00, /*gPR_Active_VGA_u8SCLCropEndX_Addr1*/ -0x64, 0x03, /*gPR_Active_VGA_u8SCLCropEndY_Addr0*/ -0x65, 0xE0, /*gPR_Active_VGA_u8SCLCropEndY_Addr1*/ - -0xFF, 0xd1, /*Page mode */ -0x07, 0x00, /* power off mask clear*/ -0x0b, 0x00, /* clock off mask clear*/ -0xFF, 0xC0, /*Page mode */ -0x10, 0x41, - -/* Wifi VT-Call END of Initial*/ -}; - -/***************************************************/ -/* CAMERA_PREVIEW - ÃÔ¿µ ÈÄ ÇÁ¸®ºä º¹±Í½Ã ¼ÂÆà */ -/***************************************************/ - -static const u8 db8131m_preview[] = { -0xff, 0x82, -0x7F, 0x35, -}; - -/***************************************************/ -/* CAMERA_SNAPSHOT - ÃÔ¿µ */ -/***************************************************/ -static const u8 db8131m_capture[] = { -0xff, 0x82, -0x7F, 0x34, -0xff, 0xC0, -0x10, 0x03, -}; -/*Wait 150ms*/ -/* capture ½ÇÇà*/ - -/***************************************************/ -/* CAMERA_RECORDING WITH 25fps */ -/***************************************************/ - -static const u8 db8131m_recording_60Hz_common[] = { -/***************************************************/ -/* Device : DB8131M */ -/* MIPI Interface for Noncontious Clock */ -/***************************************************/ - -/* Recording Anti-Flicker 60Hz END of Initial */ -0xFF, 0x87, -0xDE, 0x7A, /*gPR_Active_720P_u8SensorMode_Addr */ -0xFF, 0xC0, /* Page mode*/ -0x10, 0x42, /* Preview Command*/ - -/* Fixed 25fps Mode*/ -0xFF, 0x82, /* Page mode*/ -0x91, 0x02, /* AeMode*/ -0xFF, 0x83, /* Page mode*/ -0x0B, 0x02, /* Frame Rate*/ -0x0C, 0x94, /* Frame Rate*/ -0x03, 0x04, /* TimeMax60Hz*/ -0x04, 0x03, /* Time3Lux60Hz*/ -0x05, 0x02, /* Time2Lut60Hz*/ -0x06, 0x01, /* Time1Lut60Hz*/ -0xFF, 0x82, /* Page mode*/ -0x92, 0x5D, -}; - - -static const u8 db8131m_stream_stop[] = { - -}; - - -/***************************************************/ -/* CAMERA_BRIGHTNESS_1 (1/9) M4 */ -/***************************************************/ -static const u8 db8131m_bright_m4[] = { -/* Brightness -4 */ -0xFF, 0x87, /* Page mode*/ -0xAE, 0xE0, /* Brightness*/ -}; - -/***************************************************/ -/* CAMERA_BRIGHTNESS_2 (2/9) M3 */ -/***************************************************/ - -static const u8 db8131m_bright_m3[] = { -/* Brightness -3 */ -0xFF, 0x87, /* Page mode*/ -0xAE, 0xE8, /* Brightness*/ -}; - -/***************************************************/ -/* CAMERA_BRIGHTNESS_3 (3/9) M2 */ -/***************************************************/ -static const u8 db8131m_bright_m2[] = { -/* Brightness -2 */ -0xFF, 0x87, /* Page mode*/ -0xAE, 0xF0, /* Brightness*/ -}; - -/***************************************************/ -/* CAMERA_BRIGHTNESS_4 (4/9) M1 */ -/***************************************************/ - -static const u8 db8131m_bright_m1[] = { -/* Brightness -1 */ -0xFF, 0x87, /* Page mode*/ -0xAE, 0xF8, /* Brightness*/ -}; - -/***************************************************/ -/* CAMERA_BRIGHTNESS_5 (5/9) Default */ -/***************************************************/ -static const u8 db8131m_bright_default[] = { -/* Brightness 0 */ -0xFF, 0x87, /* Page mode*/ -0xAE, 0x00, /* Brightness*/ -}; - -/***************************************************/ -/* CAMERA_BRIGHTNESS_6 (6/9) P1 */ -/***************************************************/ -static const u8 db8131m_bright_p1[] = { -/* Brightness +1 */ -0xFF, 0x87, /* Page mode*/ -0xAE, 0x08, /* Brightness*/ -}; - -/***************************************************/ -/* CAMERA_BRIGHTNESS_7 (7/9) P2 */ -/***************************************************/ -static const u8 db8131m_bright_p2[] = { -/* Brightness +2 */ -0xFF, 0x87, /* Page mode*/ -0xAE, 0x10, /* Brightness*/ -}; - -/***************************************************/ -/* CAMERA_BRIGHTNESS_8 (8/9) P3 */ -/***************************************************/ -static const u8 db8131m_bright_p3[] = { -/* Brightness +3 */ -0xFF, 0x87, /* Page mode*/ -0xAE, 0x18, /* Brightness*/ -}; - -/***************************************************/ -/* CAMERA_BRIGHTNESS_9 (9/9) P4 */ -/***************************************************/ -static const u8 db8131m_bright_p4[] = { -/* Brightness +4 */ -0xFF, 0x87, /* Page mode*/ -0xAE, 0x20, /* Brightness*/ -}; - - -static const u8 db8131m_vt_7fps[] = { -/* Fixed 7fps Mode*/ -0xFF, 0x82, /* Page mode*/ -0x91, 0x02, /* AeMode*/ -0xFF, 0x83, /* Page mode*/ -0x0B, 0x09, /* Frame Rate*/ -0x0C, 0x33, /* Frame Rate*/ -0x03, 0x0F, /* TimeMax60Hz*/ -0x04, 0x0A, /* Time3Lux60Hz*/ -0x05, 0x06, /* Time2Lut60Hz*/ -0x06, 0x04, /* Time1Lut60Hz*/ -0xFF, 0x82, /* Page mode*/ -0x92, 0x5D, -}; - -static const u8 db8131m_vt_10fps[] = { -/* Fixed 10fps Mode */ -0xFF, 0x82, /* Page mode*/ -0x91, 0x02, /* AeMode*/ -0xFF, 0x83, /* Page mode*/ -0x0B, 0x06, /* Frame Rate*/ -0x0C, 0x70, /* Frame Rate*/ -0x03, 0x0A, /* TimeMax60Hz*/ -0x04, 0x08, /* Time3Lux60Hz*/ -0x05, 0x06, /* Time2Lut60Hz*/ -0x06, 0x04, /* Time1Lut60Hz*/ -0xFF, 0x82, /* Page mode*/ -0x92, 0x5D, - -}; - -static const u8 db8131m_vt_12fps[] = { -/* Fixed 12fps Mode */ -0xFF, 0x82, /* Page mode*/ -0x91, 0x02, /* AeMode*/ -0xFF, 0x83, /* Page mode*/ -0x0B, 0x05, /* Frame Rate*/ -0x0C, 0x5E, /* Frame Rate*/ -0x03, 0x0C, /* TimeMax60Hz*/ -0x04, 0x0A, /* Time3Lux60Hz*/ -0x05, 0x06, /* Time2Lut60Hz*/ -0x06, 0x04, /* Time1Lut60Hz*/ -0xFF, 0x82, /* Page mode*/ -0x92, 0x5D, -}; - -static const u8 db8131m_vt_15fps[] = { -/* Fixed 15fps Mode */ -0xFF, 0x82, /* Page mode*/ -0x91, 0x02, /* AeMode*/ -0xFF, 0x83, /* Page mode*/ -0x0B, 0x04, /* Frame Rate*/ -0x0C, 0x4C, /* Frame Rate*/ -0x03, 0x08, /* TimeMax60Hz*/ -0x04, 0x06, /* Time3Lux60Hz*/ -0x05, 0x04, /* Time2Lut60Hz*/ -0x06, 0x04, /* Time1Lut60Hz*/ -0xFF, 0x82, /* Page mode*/ -0x92, 0x5D, - -}; - -/***************************************************/ -/* CAMERA_DTP_ON */ -/***************************************************/ -static const u8 db8131m_pattern_on[] = { -0xFF, 0x87, /* Page mode*/ -0xAB, 0x00, /* BayerFunc*/ -0xAC, 0x28, /* RGBYcFunc*/ -0xFF, 0xA0, /* Page mode*/ -0x02, 0x05, /* TPG ? Gamma*/ - -}; - -/***************************************************/ -/* CAMERA_DTP_OFF */ -/***************************************************/ -static const u8 db8131m_pattern_off[] = { -0xFF, 0x87, /* Page mode*/ -0xAB, 0xFF, /* BayerFunc*/ -0xAC, 0xFF, /* RGBYcFunc*/ -0xFF, 0xA0, /* Page mode*/ -0x02, 0x00, /* TPG Disable*/ - -}; -#endif /* __DB8131M_SETFILE_H */ diff --git a/drivers/media/video/slp_s5c73m3.c b/drivers/media/video/slp_s5c73m3.c deleted file mode 100644 index 08726d2..0000000 --- a/drivers/media/video/slp_s5c73m3.c +++ /dev/null @@ -1,3415 +0,0 @@ -/* - * driver for LSI S5C73M3 (ISP for 8MP Camera) - * - * Copyright (c) 2011, Samsung Electronics. 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. - */ - -#include <linux/i2c.h> -#include <linux/init.h> -#include <media/v4l2-device.h> -#include <linux/delay.h> -#include <linux/vmalloc.h> -#include <linux/firmware.h> -#include <linux/videodev2.h> - -#include <plat/gpio-cfg.h> -#include <linux/gpio.h> - -#ifdef CONFIG_BUSFREQ_OPP -#include <mach/dev.h> -#else -#include <linux/pm_qos_params.h> -#endif - -#ifdef CONFIG_VIDEO_SAMSUNG_V4L2 -#include <linux/videodev2_exynos_media.h> -#include <linux/videodev2_exynos_camera.h> -#endif - -#include <linux/regulator/machine.h> - -#include <media/s5c73m3_platform.h> -#ifdef CONFIG_VIDEO_SLP_S5C73M3 -#include "slp_s5c73m3.h" -#else -#include "s5c73m3.h" -#endif - -#define S5C73M3_DRIVER_NAME "S5C73M3" - -extern struct class *camera_class; /*sys/class/camera*/ -struct device *s5c73m3_dev; /*sys/class/camera/rear*/ -struct v4l2_subdev *sd_internal; - -#ifdef CONFIG_BUSFREQ_OPP -struct device *bus_dev; -#else -static struct pm_qos_request_list entry = {}; -#endif - -/*#define S5C73M3_FROM_BOOTING*/ - -#ifdef CONFIG_VIDEO_SLP_S5C73M3 - -#define S5C73M3_FW_PATH "/lib/firmware/SlimISP.bin" -#define S5C73M3_FW_GC_PATH "/lib/firmware/SlimISP_GC.bin" -#define S5C73M3_FW_GD_PATH "/lib/firmware/SlimISP_GD.bin" -#define S5C73M3_FW_GE_PATH "/lib/firmware/SlimISP_GE.bin" -#define S5C73M3_FW_GF_PATH "/lib/firmware/SlimISP_GF.bin" -#define S5C73M3_FW_ZC_PATH "/lib/firmware/SlimISP_ZC.bin" -#define S5C73M3_FW_ZD_PATH "/lib/firmware/SlimISP_ZD.bin" -#define S5C73M3_FW_ZE_PATH "/lib/firmware/SlimISP_ZE.bin" -#define S5C73M3_FW_ZF_PATH "/lib/firmware/SlimISP_ZF.bin" -#define S5C73M3_FW_ZG_PATH "/lib/firmware/SlimISP_ZG.bin" - -#else /* CONFIG_VIDEO_SLP_S5C73M3 */ - -/* For Android */ -#define S5C73M3_FW_PATH "/sdcard/SlimISP.bin" - -#endif /* CONFIG_VIDEO_SLP_S5C73M3 */ - -#define S5C73M3_FW_VER_LEN 6 -#define S5C73M3_FW_VER_FILE_CUR 0x60 - -#define S5C73M3_FLASH_BASE_ADDR 0x10000000 -#define S5C73M3_INT_RAM_BASE_ADDR 0x68000000 - -#define S5C73M3_I2C_RETRY 5 -#define S5C73M3_I2C_VERIFY 100 -#define S5C73M3_ISP_TIMEOUT 3000 -#define S5C73M3_ISP_AFB_TIMEOUT 15000 /* FIXME */ -#define S5C73M3_ISP_ESD_TIMEOUT 1000 - -#define S5C73M3_JPEG_MAXSIZE 0x800000 -#define S5C73M3_YUV_MAXSIZE 0x3F4800 /*FHD*/ -#define S5C73M3_POINTER_MAXSIZE 0x10E0 /*FHD*/ - -#define S5C73M3_DEF_APEX_DEN 100 - -#define CHECK_ERR(x) if ((x) < 0) { \ - cam_err("i2c failed, err %d\n", x); \ - return x; \ - } -static const struct s5c73m3_frmsizeenum preview_frmsizes[] = { - { S5C73M3_PREVIEW_QVGA, 320, 240, 0x01 }, - { S5C73M3_PREVIEW_CIF, 352, 288, 0x0E }, - { S5C73M3_PREVIEW_VGA, 640, 480, 0x02 }, - { S5C73M3_PREVIEW_880X720, 880, 720, 0x03 }, - { S5C73M3_PREVIEW_960X720, 960, 720, 0x04 }, - { S5C73M3_PREVIEW_1008X672, 1008, 672, 0x0F }, - { S5C73M3_PREVIEW_1184X666, 1184, 666, 0x05 }, - { S5C73M3_PREVIEW_720P, 1280, 720, 0x06 }, - { S5C73M3_VDIS_720P, 1536, 864, 0x07 }, - { S5C73M3_PREVIEW_1080P, 1920, 1080, 0x0A}, - { S5C73M3_VDIS_1080P, 2304, 1296, 0x0C}, -}; - -static const struct s5c73m3_frmsizeenum capture_frmsizes[] = { - { S5C73M3_CAPTURE_VGA, 640, 480, 0x10 }, - { S5C73M3_CAPTURE_1024X768, 1024, 768, 0xD0 }, - { S5C73M3_CAPTURE_HD, 1280, 720, 0x40 }, - { S5C73M3_CAPTURE_2MP, 1600, 1200, 0x70 }, - { S5C73M3_CAPTURE_W2MP, 2048, 1152, 0x80 }, - { S5C73M3_CAPTURE_3MP, 2048, 1536, 0x90 }, - { S5C73M3_CAPTURE_W4MP, 2560, 1440, 0xA0 }, - { S5C73M3_CAPTURE_5MP, 2560, 1920, 0xB0 }, - { S5C73M3_CAPTURE_W6MP, 3264, 1836, 0xE0 }, - { S5C73M3_CAPTURE_3264X2176, 3264, 2176, 0xC0 }, - { S5C73M3_CAPTURE_8MP, 3264, 2448, 0xF0 }, -}; - -static struct s5c73m3_control s5c73m3_ctrls[] = { - /* Exposure & Scenemode stuff(ISO, Metering, Saturation, etc) */ - { - .id = V4L2_CID_CAMERA_ISO, - .minimum = ISO_AUTO, - .maximum = ISO_800, - .step = 1, - .value = ISO_AUTO, - .default_value = ISO_AUTO, - }, { - /* Capture */ - .id = V4L2_CID_CAM_JPEG_QUALITY, - .minimum = 1, - .maximum = 100, - .step = 1, - .value = 100, - .default_value = 100, - }, -#ifdef CONFIG_VIDEO_SLP_S5C73M3 - { - /* Flash */ - .id = V4L2_CID_CAMERA_FLASH_MODE, - .minimum = FLASH_MODE_OFF, - .maximum = FLASH_MODE_MAX - 1, - .step = 1, - .value = FLASH_MODE_OFF, - .default_value = FLASH_MODE_OFF, - }, { - .id = V4L2_CID_EXPOSURE, - .minimum = EV_MINUS_4, - .maximum = EV_MAX - 1, - .step = 1, - .value = EV_DEFAULT, - .default_value = EV_DEFAULT, - }, { - .id = V4L2_CID_SATURATION, - .minimum = SATURATION_MINUS_2, - .maximum = SATURATION_MAX - 1, - .step = 1, - .value = SATURATION_DEFAULT, - .default_value = SATURATION_DEFAULT, - }, { - .id = V4L2_CID_SHARPNESS, - .minimum = SHARPNESS_MINUS_2, - .maximum = SHARPNESS_MAX - 1, - .step = 1, - .value = SHARPNESS_DEFAULT, - .default_value = SHARPNESS_DEFAULT, - }, { - .id = V4L2_CID_CAMERA_METERING, - .minimum = METERING_MATRIX, - .maximum = METERING_MAX - 1, - .step = 1, - .value = METERING_MATRIX, - .default_value = METERING_MATRIX, - }, { - .id = V4L2_CID_WHITE_BALANCE_PRESET, - .minimum = WHITE_BALANCE_AUTO, - .maximum = WHITE_BALANCE_MAX - 1, - .step = 1, - .value = WHITE_BALANCE_AUTO, - .default_value = WHITE_BALANCE_AUTO, - }, { - .id = V4L2_CID_COLORFX, - .minimum = V4L2_COLORFX_NONE, - .maximum = V4L2_COLORFX_VIVID, - .step = 1, - .value = V4L2_COLORFX_NONE, - .default_value = V4L2_COLORFX_NONE, - }, { - .id = V4L2_CID_CAMERA_SCENE_MODE, - .minimum = SCENE_MODE_NONE, - .maximum = SCENE_MODE_MAX - 1, - .step = 1, - .value = SCENE_MODE_NONE, - .default_value = SCENE_MODE_MAX, - }, { - /* Zoom */ - .id = V4L2_CID_ZOOM_ABSOLUTE, - .minimum = ZOOM_LEVEL_0, - .maximum = ZOOM_LEVEL_MAX - 1, - .step = 1, - .value = ZOOM_LEVEL_0, - .default_value = ZOOM_LEVEL_0, - }, { - /* Focus */ - .id = V4L2_CID_FOCUS_AUTO_RECTANGLE_LEFT, - .minimum = 0, - .maximum = 4000, /* FIXME */ - .step = 1, - .value = 0, - .default_value = 0, - }, { - .id = V4L2_CID_FOCUS_AUTO_RECTANGLE_TOP, - .minimum = 0, - .maximum = 3000, /* FIXME */ - .step = 1, - .value = 0, - .default_value = 0, - }, { - .id = V4L2_CID_FOCUS_AUTO_RECTANGLE_WIDTH, - .minimum = 0, - .maximum = 4000, /* FIXME */ - .step = 1, - .value = 0, - .default_value = 0, - }, { - .id = V4L2_CID_FOCUS_AUTO_RECTANGLE_HEIGHT, - .minimum = 0, - .maximum = 3000, /* FIXME */ - .step = 1, - .value = 0, - .default_value = 0, - }, { - .id = V4L2_CID_CAMERA_FOCUS_MODE, - .minimum = FOCUS_MODE_AUTO, - .maximum = FOCUS_MODE_MAX, - .step = 1, - .value = FOCUS_MODE_AUTO, - .default_value = FOCUS_MODE_AUTO, - }, { - .id = V4L2_CID_CAMERA_SET_AUTO_FOCUS, - .minimum = 0, - .maximum = 1, - .step = 1, - .value = 0, - .default_value = 0, - }, { - .id = V4L2_CID_PHYSICAL_ROTATION, - .minimum = IS_ROTATION_0, - .maximum = IS_ROTATION_MAX - 1, - .step = 1, - .value = IS_ROTATION_90, - .default_value = IS_ROTATION_90, - }, -#else - { - .id = V4L2_CID_CAMERA_BRIGHTNESS, - .minimum = EV_MINUS_4, - .maximum = EV_MAX - 1, - .step = 1, - .value = EV_DEFAULT, - .default_value = EV_DEFAULT, - }, { - .id = V4L2_CID_CAMERA_SATURATION, - .minimum = SATURATION_MINUS_2, - .maximum = SATURATION_MAX - 1, - .step = 1, - .value = SATURATION_DEFAULT, - .default_value = SATURATION_DEFAULT, - }, { - .id = V4L2_CID_CAMERA_SHARPNESS, - .minimum = SHARPNESS_MINUS_2, - .maximum = SHARPNESS_MAX - 1, - .step = 1, - .value = SHARPNESS_DEFAULT, - .default_value = SHARPNESS_DEFAULT, - }, { - /* Zoom */ - .id = V4L2_CID_CAMERA_ZOOM, - .minimum = ZOOM_LEVEL_0, - .maximum = ZOOM_LEVEL_MAX - 1, - .step = 1, - .value = ZOOM_LEVEL_0, - .default_value = ZOOM_LEVEL_0, - }, -#endif - -}; - -static u8 sysfs_sensor_fw[10] = {0,}; -static u8 sysfs_phone_fw[10] = {0,}; -static u8 sysfs_sensor_type[15] = {0,}; -static u8 sysfs_isp_core[10] = {0,}; - -static int s5c73m3_s_stream_sensor(struct v4l2_subdev *sd, int onoff); -static int s5c73m3_set_touch_auto_focus(struct v4l2_subdev *sd); -static int s5c73m3_SPI_booting(struct v4l2_subdev *sd); -static int s5c73m3_get_af_cal_version(struct v4l2_subdev *sd); - -static inline struct s5c73m3_state *to_state(struct v4l2_subdev *sd) -{ - return container_of(sd, struct s5c73m3_state, sd); -} - -static int s5c73m3_i2c_write(struct v4l2_subdev *sd, - unsigned short addr, unsigned short data) -{ - struct i2c_client *client = v4l2_get_subdevdata(sd); - struct i2c_msg msg; - unsigned char buf[4]; - int i, err; - - if (!client->adapter) - return -ENODEV; - - msg.addr = client->addr; - msg.flags = 0; - msg.len = sizeof(buf); - msg.buf = buf; - - buf[0] = addr >> 8; - buf[1] = addr & 0xff; - buf[2] = data >> 8; - buf[3] = data & 0xff; - - cam_i2c_dbg("addr %#x, data %#x\n", addr, data); - - for (i = S5C73M3_I2C_RETRY; i; i--) { - err = i2c_transfer(client->adapter, &msg, 1); - if (err == 1) - break; - msleep(20); - } - - return err; -} - -static int s5c73m3_i2c_write_block(struct v4l2_subdev *sd, - const u32 regs[], int size) -{ - int i, err = 0; - - for (i = 0; i < size; i++) { - err = s5c73m3_i2c_write(sd, (regs[i]>>16), regs[i]); - CHECK_ERR(err); - } - - return err; -} - -static int s5c73m3_i2c_read(struct v4l2_subdev *sd, - unsigned short addr, unsigned short *data) -{ - struct i2c_client *client = v4l2_get_subdevdata(sd); - struct i2c_msg msg; - unsigned char buf[2]; - int i, err; - - if (!client->adapter) - return -ENODEV; - - msg.addr = client->addr; - msg.flags = 0; - msg.len = sizeof(buf); - msg.buf = buf; - - buf[0] = addr >> 8; - buf[1] = addr & 0xff; - - for (i = S5C73M3_I2C_RETRY; i; i--) { - err = i2c_transfer(client->adapter, &msg, 1); - if (err == 1) - break; - msleep(20); - } - - if (err != 1) { - cam_err("addr %#x\n", addr); - return err; - } - - msg.flags = I2C_M_RD; - - for (i = S5C73M3_I2C_RETRY; i; i--) { - err = i2c_transfer(client->adapter, &msg, 1); - if (err == 1) - break; - msleep(20); - } - - if (err != 1) { - cam_err("addr %#x\n", addr); - return err; - } - - *data = ((buf[0] << 8) | buf[1]); - - return err; -} - -static int s5c73m3_write(struct v4l2_subdev *sd, - unsigned short addr1, unsigned short addr2, unsigned short data) -{ - int err; - - err = s5c73m3_i2c_write(sd, 0x0050, addr1); - CHECK_ERR(err); - - err = s5c73m3_i2c_write(sd, 0x0054, addr2); - CHECK_ERR(err); - - err = s5c73m3_i2c_write(sd, 0x0F14, data); - CHECK_ERR(err); - - return err; -} - -static int s5c73m3_read(struct v4l2_subdev *sd, - unsigned short addr1, unsigned short addr2, unsigned short *data) -{ - int err; - - err = s5c73m3_i2c_write(sd, 0xfcfc, 0x3310); - CHECK_ERR(err); - - err = s5c73m3_i2c_write(sd, 0x0058, addr1); - CHECK_ERR(err); - - err = s5c73m3_i2c_write(sd, 0x005C, addr2); - CHECK_ERR(err); - - err = s5c73m3_i2c_read(sd, 0x0F14, data); - CHECK_ERR(err); - - return err; -} - -static int s5c73m3_i2c_check_status(struct v4l2_subdev *sd) -{ - int err = 0; - int index = 0; - u16 status = 0; - u16 i2c_status = 0; - - do { - err = s5c73m3_read(sd, 0x0009, 0x5080, &status); - if (status == 0xffff) - break; - err = s5c73m3_read(sd, 0x0009, 0x599E, &i2c_status); - if (i2c_status != 0) - cam_dbg("i2c_status = %#x\n", i2c_status); - - index++; - udelay(500); - } while (index < 2000); /* 1 sec */ - - cam_dbg("index : %d, status : %#x, i2c_stauts : %#x\n", - index, status, i2c_status); - - if (index >= 2000) - err = -1; - - return err; -} - -static int s5c73m3_writeb_no_check_status(struct v4l2_subdev *sd, - unsigned short addr, unsigned short data) -{ - int err; - - err = s5c73m3_i2c_write(sd, 0x0050, 0x0009); - CHECK_ERR(err); - - err = s5c73m3_i2c_write(sd, 0x0054, 0x5000); - CHECK_ERR(err); - - err = s5c73m3_i2c_write(sd, 0x0F14, addr); - CHECK_ERR(err); - - err = s5c73m3_i2c_write(sd, 0x0F14, data); - CHECK_ERR(err); - - err = s5c73m3_i2c_write(sd, 0x0054, 0x5080); - CHECK_ERR(err); - - err = s5c73m3_i2c_write(sd, 0x0F14, 0x0001); - CHECK_ERR(err); - - return err; -} - -static int s5c73m3_writeb(struct v4l2_subdev *sd, - unsigned short addr, unsigned short data) -{ - int err; - err = s5c73m3_i2c_check_status(sd); - CHECK_ERR(err); - - err = s5c73m3_i2c_write(sd, 0x0050, 0x0009); - CHECK_ERR(err); - - err = s5c73m3_i2c_write(sd, 0x0054, 0x5000); - CHECK_ERR(err); - - err = s5c73m3_i2c_write(sd, 0x0F14, addr); - CHECK_ERR(err); - - err = s5c73m3_i2c_write(sd, 0x0F14, data); - CHECK_ERR(err); - - err = s5c73m3_i2c_write(sd, 0x0054, 0x5080); - CHECK_ERR(err); - - err = s5c73m3_i2c_write(sd, 0x0F14, 0x0001); - CHECK_ERR(err); - - return err; -} - -static int s5c73m3_set_mode(struct v4l2_subdev *sd) -{ - struct s5c73m3_state *state = to_state(sd); - int err; - cam_trace("E\n"); - - if (state->format_mode != V4L2_PIX_FMT_MODE_CAPTURE) { - if (state->hdr_mode) { - err = s5c73m3_writeb(sd, S5C73M3_IMG_OUTPUT, - S5C73M3_HDR_OUTPUT); - CHECK_ERR(err); - cam_dbg("hdr ouput mode\n"); - } else { - err = s5c73m3_writeb(sd, S5C73M3_IMG_OUTPUT, - S5C73M3_YUV_OUTPUT); - CHECK_ERR(err); - cam_dbg("yuv ouput mode\n"); - } - } else { - if (state->hybrid_mode) { - err = s5c73m3_writeb(sd, S5C73M3_IMG_OUTPUT, - S5C73M3_HYBRID_OUTPUT); - CHECK_ERR(err); - cam_dbg("hybrid ouput mode\n"); - } else { - err = s5c73m3_writeb(sd, S5C73M3_IMG_OUTPUT, - S5C73M3_INTERLEAVED_OUTPUT); - CHECK_ERR(err); - cam_dbg("interleaved ouput mode\n"); - } - } - - cam_trace("X\n"); - return 0; -} - -/* - * v4l2_subdev_core_ops - */ -static int s5c73m3_queryctrl(struct v4l2_subdev *sd, struct v4l2_queryctrl *qc) -{ - int i; - - for (i = 0; i < ARRAY_SIZE(s5c73m3_ctrls); i++) { - if (qc->id == s5c73m3_ctrls[i].id) { - qc->maximum = s5c73m3_ctrls[i].maximum; - qc->minimum = s5c73m3_ctrls[i].minimum; - qc->step = s5c73m3_ctrls[i].step; - qc->default_value = s5c73m3_ctrls[i].default_value; - return 0; - } - } - - return -EINVAL; -} - -#ifdef CONFIG_TARGET_LOCALE_KOR -static int s5c73m3_set_antibanding(struct v4l2_subdev *sd, int val) -{ - return 0; -} -#endif - -static int s5c73m3_set_af_softlanding(struct v4l2_subdev *sd) -{ - int err = 0; - - cam_trace("E\n"); - - err = s5c73m3_writeb(sd, S5C73M3_AF_SOFTLANDING, - S5C73M3_AF_SOFTLANDING_ON); - CHECK_ERR(err); - cam_trace("X\n"); - - return 0; -} - -static int s5c73m3_dump_fw(struct v4l2_subdev *sd) -{ - return 0; -} - -static int s5c73m3_get_sensor_fw_version(struct v4l2_subdev *sd) -{ - struct s5c73m3_state *state = to_state(sd); - u16 read_val; - u16 sensor_fw; - u16 sensor_type; - int i; - int err = 0; - - /*ARM go*/ - err = s5c73m3_write(sd, 0x3000, 0x0004, 0xFFFF); - CHECK_ERR(err); - - udelay(400); - - /*Check boot done*/ - for (i = 0; i < 3; i++) { - err = s5c73m3_read(sd, 0x3010, 0x0010, &read_val); - CHECK_ERR(err); - - if (read_val == 0x0C) - break; - - udelay(100); - } - - if (read_val != 0x0C) { - cam_err("boot fail, read_val %#x\n", read_val); - return -1; - } - - /*P,M,S and Boot Mode*/ - err = s5c73m3_write(sd, 0x3010, 0x0014, 0x2146); - CHECK_ERR(err); - err = s5c73m3_write(sd, 0x3010, 0x0010, 0x230C); - CHECK_ERR(err); - - udelay(200); - - /*Check SPI ready*/ - for (i = 0; i < 300; i++) { - err = s5c73m3_read(sd, 0x3010, 0x0010, &read_val); - CHECK_ERR(err); - - if (read_val == 0x230E) - break; - - udelay(100); - } - - if (read_val != 0x230E) { - cam_err("SPI not ready, read_val %#x\n", read_val); - return -1; - } - - /*ARM reset*/ - err = s5c73m3_write(sd, 0x3000, 0x0004, 0xFFFD); - CHECK_ERR(err); - - /*remap*/ - err = s5c73m3_write(sd, 0x3010, 0x00A4, 0x0183); - CHECK_ERR(err); - - /*ARM go again*/ - err = s5c73m3_write(sd, 0x3000, 0x0004, 0xFFFF); - CHECK_ERR(err); - - for (i = 0; i < 3; i++) { - err = s5c73m3_read(sd, 0x0000, 0x0060+i*2, &sensor_fw); - CHECK_ERR(err); - state->sensor_fw[i*2] = sensor_fw&0x00ff; - state->sensor_fw[i*2+1] = (sensor_fw&0xff00)>>8; - } - state->sensor_fw[i*2+2] = ' '; - - for (i = 0; i < 6; i++) { - err = s5c73m3_read(sd, 0x0000, 0x0066+i*2, &sensor_type); - CHECK_ERR(err); - state->sensor_type[i*2] = sensor_type&0x00ff; - state->sensor_type[i*2+1] = (sensor_type&0xff00)>>8; - } - state->sensor_type[i*2+2] = ' '; - - memcpy(sysfs_sensor_fw, state->sensor_fw, - sizeof(state->sensor_fw)); - memcpy(sysfs_sensor_type, state->sensor_type, - sizeof(state->sensor_type)); - - cam_dbg("Sensor_version = %s, Sensor_Type = %s\n", - state->sensor_fw, state->sensor_type); - - if ((state->sensor_fw[0] < 'A') || state->sensor_fw[0] > 'Z') { - cam_dbg("Sensor Version is invalid data\n"); - err = -1; - } - return err; -} - - -static int s5c73m3_get_phone_fw_version(struct v4l2_subdev *sd) -{ - struct device *dev = sd->v4l2_dev->dev; - struct s5c73m3_state *state = to_state(sd); - const struct firmware *fw = {0, }; - char fw_path[20] = {0,}; - u8 *buf = NULL; - int err = 0; - - struct file *fp; - mm_segment_t old_fs; - long nread; - int fw_requested = 1; - - buf = vmalloc(S5C73M3_FW_VER_LEN+1); - if (!buf) { - cam_err("failed to allocate memory\n"); - err = -ENOMEM; - goto out; - } - - old_fs = get_fs(); - set_fs(KERNEL_DS); - - fp = filp_open(S5C73M3_FW_PATH, O_RDONLY, 0); - if (IS_ERR(fp)) { - cam_trace("failed to open %s, err %ld\n", - S5C73M3_FW_PATH, PTR_ERR(fp)); - goto request_fw; - } - - fw_requested = 0; - err = vfs_llseek(fp, S5C73M3_FW_VER_FILE_CUR, SEEK_SET); - if (err < 0) { - cam_warn("failed to fseek, %d\n", err); - goto out; - } - - nread = vfs_read(fp, (char __user *)buf, - S5C73M3_FW_VER_LEN, - &fp->f_pos); - - if (nread != S5C73M3_FW_VER_LEN) { - cam_err("failed to read firmware file, %ld Bytes\n", nread); - err = -EIO; - goto out; - } - -request_fw: - if (fw_requested) { - set_fs(old_fs); - - if (state->sensor_fw[0] == 'O') { - sprintf(fw_path, "SlimISP_G%c.bin", - state->sensor_fw[1]); - } else if (state->sensor_fw[0] == 'S') { - sprintf(fw_path, "SlimISP_Z%c.bin", - state->sensor_fw[1]); - } else { - sprintf(fw_path, "SlimISP_%c%c.bin", - state->sensor_fw[0], - state->sensor_fw[1]); - } - cam_dbg("file_name = %s\n", fw_path); - - err = request_firmware(&fw, fw_path, dev); - if (err != 0) { - cam_err("request_firmware falied\n"); - err = -EINVAL; - goto out; - } - - memcpy(buf, (u8 *)&fw->data[S5C73M3_FW_VER_FILE_CUR], - S5C73M3_FW_VER_LEN); - - } - - memcpy(state->phone_fw, buf, S5C73M3_FW_VER_LEN); - state->phone_fw[S5C73M3_FW_VER_LEN+1] = ' '; - - memcpy(sysfs_phone_fw, state->phone_fw, sizeof(state->phone_fw)); - cam_dbg("Phone_version = %s\n", state->phone_fw); - - cam_dbg("end\n"); - -out: - if (!fw_requested) { - vfree(buf); - - filp_close(fp, current->files); - set_fs(old_fs); - } else { - release_firmware(fw); - } - - return err; -} - -static int s5c73m3_update_camerafw_to_FROM(struct v4l2_subdev *sd) -{ - int err; - int index = 0; - u16 status = 0; - - do { - /* stauts 0 : not ready ISP */ - if (status == 0) { - err = s5c73m3_writeb(sd, 0x0906, 0x0000); - CHECK_ERR(err); - } - - err = s5c73m3_read(sd, 0x0009, 0x5906, &status); - /* Success : 0x05, Fail : 0x07 , Progressing : 0xFFFF*/ - if (status == 0x0005 || - status == 0x0007) - break; - - index++; - msleep(20); - } while (index < 500); /* 10 sec */ - - - if (status == 0x0007) - return -1; - else - return 0; -} - -static int s5c73m3_check_fw(struct v4l2_subdev *sd, int download) -{ - struct s5c73m3_state *state = to_state(sd); - int err; - - if (download) { - err = state->pdata->is_isp_reset(); - CHECK_ERR(err); - } - - err = s5c73m3_get_sensor_fw_version(sd); - err = s5c73m3_get_phone_fw_version(sd); - - if (state->phone_fw[0] == 'Z' || state->phone_fw[0] == 'G' || - state->phone_fw[0] == 'S' || state->phone_fw[0] == 'O') { - err = state->pdata->is_isp_reset(); - CHECK_ERR(err); - - err = s5c73m3_SPI_booting(sd); - CHECK_ERR(err); - - if (download) { - err = s5c73m3_update_camerafw_to_FROM(sd); - CHECK_ERR(err); - } - } - s5c73m3_get_af_cal_version(sd); - return 0; -} - -static int s5c73m3_set_sensor_mode(struct v4l2_subdev *sd, int val) -{ - struct s5c73m3_state *state = to_state(sd); - int err; - cam_dbg("E, value %d\n", val); - -retry: - switch (val) { - case SENSOR_CAMERA: - err = s5c73m3_writeb(sd, S5C73M3_AE_MODE, - S5C73M3_AUTO_MODE_AE_SET); - CHECK_ERR(err); - break; - - case SENSOR_MOVIE: - err = s5c73m3_writeb(sd, S5C73M3_AE_MODE, - S5C73M3_FIXED_30FPS); - CHECK_ERR(err); - break; - - default: - cam_warn("invalid value, %d\n", val); - val = SENSOR_CAMERA; - goto retry; - } - state->sensor_mode = val; - - cam_trace("X\n"); - return 0; -} - -static int s5c73m3_set_flash(struct v4l2_subdev *sd, int val, int recording) -{ - struct s5c73m3_state *state = to_state(sd); - int err; - cam_dbg("E, value %d\n", val); - -retry: - switch (val) { - case FLASH_MODE_OFF: - err = s5c73m3_writeb(sd, S5C73M3_FLASH_MODE, - S5C73M3_FLASH_MODE_OFF); - CHECK_ERR(err); - err = s5c73m3_writeb(sd, S5C73M3_FLASH_TORCH, - S5C73M3_FLASH_TORCH_OFF); - CHECK_ERR(err); - break; - - case FLASH_MODE_AUTO: - err = s5c73m3_writeb(sd, S5C73M3_FLASH_TORCH, - S5C73M3_FLASH_TORCH_OFF); - CHECK_ERR(err); - err = s5c73m3_writeb(sd, S5C73M3_FLASH_MODE, - S5C73M3_FLASH_MODE_AUTO); - CHECK_ERR(err); - break; - - case FLASH_MODE_ON: - err = s5c73m3_writeb(sd, S5C73M3_FLASH_TORCH, - S5C73M3_FLASH_TORCH_OFF); - CHECK_ERR(err); - err = s5c73m3_writeb(sd, S5C73M3_FLASH_MODE, - S5C73M3_FLASH_MODE_ON); - CHECK_ERR(err); - break; - - case FLASH_MODE_TORCH: - err = s5c73m3_writeb(sd, S5C73M3_FLASH_MODE, - S5C73M3_FLASH_MODE_OFF); - CHECK_ERR(err); - err = s5c73m3_writeb(sd, S5C73M3_FLASH_TORCH, - S5C73M3_FLASH_TORCH_ON); - CHECK_ERR(err); - break; - - default: - cam_warn("invalid value, %d\n", val); - val = FLASH_MODE_OFF; - goto retry; - } - state->flash_mode = val; - - cam_trace("X\n"); - return 0; -} - -static int s5c73m3_set_iso(struct v4l2_subdev *sd, struct v4l2_control *ctrl) -{ - int err; - struct s5c73m3_state *state = to_state(sd); - cam_dbg("E, value %d\n", ctrl->value); - -retry: - switch (ctrl->value) { - case ISO_AUTO: - err = s5c73m3_writeb(sd, S5C73M3_ISO, - S5C73M3_ISO_AUTO); - CHECK_ERR(err); - break; - - case ISO_50: - case ISO_100: - err = s5c73m3_writeb(sd, S5C73M3_ISO, - S5C73M3_ISO_100); - CHECK_ERR(err); - break; - - case ISO_200: - err = s5c73m3_writeb(sd, S5C73M3_ISO, - S5C73M3_ISO_200); - CHECK_ERR(err); - break; - - case ISO_400: - err = s5c73m3_writeb(sd, S5C73M3_ISO, - S5C73M3_ISO_400); - CHECK_ERR(err); - break; - - case ISO_800: - err = s5c73m3_writeb(sd, S5C73M3_ISO, - S5C73M3_ISO_800); - CHECK_ERR(err); - break; - - default: - cam_warn("invalid value, %d\n", ctrl->value); - ctrl->value = ISO_AUTO; - goto retry; - } - - state->exif.iso = ctrl->value; - - cam_trace("X\n"); - return 0; -} - -static int s5c73m3_set_metering(struct v4l2_subdev *sd, int val) -{ - int err; - struct s5c73m3_state *state = to_state(sd); - cam_dbg("E, value %d\n", val); - -retry: - switch (val) { - case METERING_CENTER: - err = s5c73m3_writeb(sd, S5C73M3_METER, - S5C73M3_METER_CENTER); - CHECK_ERR(err); - break; - - case METERING_SPOT: - err = s5c73m3_writeb(sd, S5C73M3_METER, - S5C73M3_METER_SPOT); - CHECK_ERR(err); - break; - - case METERING_MATRIX: - err = s5c73m3_writeb(sd, S5C73M3_METER, - S5C73M3_METER_AVERAGE); - CHECK_ERR(err); - break; - - default: - cam_warn("invalid value, %d\n", val); - val = METERING_CENTER; - goto retry; - } - - state->exif.metering = val; - - cam_trace("X\n"); - return 0; -} - -static int s5c73m3_set_exposure(struct v4l2_subdev *sd, - struct v4l2_control *ctrl) -{ - int err; - struct s5c73m3_state *state = to_state(sd); - cam_dbg("E, value %d\n", ctrl->value); - - if (ctrl->value < -4 || ctrl->value > 4) { - cam_warn("invalid value, %d\n", ctrl->value); - ctrl->value = 0; - } - err = s5c73m3_writeb(sd, S5C73M3_EV, - ctrl->value + 4); - CHECK_ERR(err); - - state->exif.bv = ctrl->value; - - cam_trace("X\n"); - return 0; -} - -static int s5c73m3_set_contrast(struct v4l2_subdev *sd, - struct v4l2_control *ctrl) -{ - int err; - int contrast = 0; - cam_dbg("E, value %d\n", ctrl->value); - - if (ctrl->value < -2 || ctrl->value > 2) { - cam_warn("invalid value, %d\n", ctrl->value); - ctrl->value = 0; - } - if (ctrl->value < 0) - contrast = (ctrl->value * (-1)) + 2; - else - contrast = ctrl->value; - err = s5c73m3_writeb(sd, S5C73M3_CONTRAST, - contrast); - CHECK_ERR(err); - - cam_trace("X\n"); - return 0; -} - -static int s5c73m3_set_whitebalance(struct v4l2_subdev *sd, int val) -{ - struct s5c73m3_state *state = to_state(sd); - int err; - cam_dbg("E, value %d\n", val); - -retry: - switch (val) { - case WHITE_BALANCE_AUTO: - err = s5c73m3_writeb(sd, S5C73M3_AWB_MODE, - S5C73M3_AWB_MODE_AUTO); - CHECK_ERR(err); - break; - - case WHITE_BALANCE_SUNNY: - err = s5c73m3_writeb(sd, S5C73M3_AWB_MODE, - S5C73M3_AWB_MODE_DAYLIGHT); - CHECK_ERR(err); - break; - - case WHITE_BALANCE_CLOUDY: - err = s5c73m3_writeb(sd, S5C73M3_AWB_MODE, - S5C73M3_AWB_MODE_CLOUDY); - CHECK_ERR(err); - break; - - case WHITE_BALANCE_TUNGSTEN: - err = s5c73m3_writeb(sd, S5C73M3_AWB_MODE, - S5C73M3_AWB_MODE_INCANDESCENT); - CHECK_ERR(err); - break; - - case WHITE_BALANCE_FLUORESCENT: - err = s5c73m3_writeb(sd, S5C73M3_AWB_MODE, - S5C73M3_AWB_MODE_FLUORESCENT1); - CHECK_ERR(err); - break; - - default: - cam_warn("invalid value, %d\n", val); - val = WHITE_BALANCE_AUTO; - goto retry; - } - - state->wb_mode = val; - - cam_trace("X\n"); - return 0; -} - -static int s5c73m3_set_sharpness(struct v4l2_subdev *sd, - struct v4l2_control *ctrl) -{ - struct s5c73m3_state *state = to_state(sd); - cam_dbg("E, value %d\n", ctrl->value); - - cam_err("Sharpness control is not supported\n"); - - state->exif.sharpness = ctrl->value; - - return 0; -} - -static int s5c73m3_set_saturation(struct v4l2_subdev *sd, - struct v4l2_control *ctrl) -{ - struct s5c73m3_state *state = to_state(sd); - cam_dbg("E, value %d\n", ctrl->value); - - cam_err("Saturation control is not supported\n"); - - state->exif.saturation = ctrl->value; - - return 0; -} - -static int s5c73m3_set_scene_mode(struct v4l2_subdev *sd, int val) -{ - struct s5c73m3_state *state = to_state(sd); - int err; - cam_dbg("E, value %d\n", val); - -retry: - switch (val) { - case SCENE_MODE_NONE: - err = s5c73m3_writeb(sd, S5C73M3_SCENE_MODE, - S5C73M3_SCENE_MODE_NONE); - CHECK_ERR(err); - break; - - case SCENE_MODE_PORTRAIT: - err = s5c73m3_writeb(sd, S5C73M3_SCENE_MODE, - S5C73M3_SCENE_MODE_PORTRAIT); - CHECK_ERR(err); - break; - - case SCENE_MODE_LANDSCAPE: - err = s5c73m3_writeb(sd, S5C73M3_SCENE_MODE, - S5C73M3_SCENE_MODE_LANDSCAPE); - CHECK_ERR(err); - break; - - case SCENE_MODE_SPORTS: - err = s5c73m3_writeb(sd, S5C73M3_SCENE_MODE, - S5C73M3_SCENE_MODE_SPORTS); - CHECK_ERR(err); - break; - - case SCENE_MODE_PARTY_INDOOR: - err = s5c73m3_writeb(sd, S5C73M3_SCENE_MODE, - S5C73M3_SCENE_MODE_INDOOR); - CHECK_ERR(err); - break; - - case SCENE_MODE_BEACH_SNOW: - err = s5c73m3_writeb(sd, S5C73M3_SCENE_MODE, - S5C73M3_SCENE_MODE_BEACH); - CHECK_ERR(err); - break; - - case SCENE_MODE_SUNSET: - err = s5c73m3_writeb(sd, S5C73M3_SCENE_MODE, - S5C73M3_SCENE_MODE_SUNSET); - CHECK_ERR(err); - break; - - case SCENE_MODE_DUSK_DAWN: - err = s5c73m3_writeb(sd, S5C73M3_SCENE_MODE, - S5C73M3_SCENE_MODE_DAWN); - CHECK_ERR(err); - break; - - case SCENE_MODE_FALL_COLOR: - err = s5c73m3_writeb(sd, S5C73M3_SCENE_MODE, - S5C73M3_SCENE_MODE_FALL); - CHECK_ERR(err); - break; - - case SCENE_MODE_NIGHTSHOT: - err = s5c73m3_writeb(sd, S5C73M3_SCENE_MODE, - S5C73M3_SCENE_MODE_NIGHT); - CHECK_ERR(err); - break; - - case SCENE_MODE_BACK_LIGHT: - err = s5c73m3_writeb(sd, S5C73M3_SCENE_MODE, - S5C73M3_SCENE_MODE_AGAINSTLIGHT); - CHECK_ERR(err); - break; - - case SCENE_MODE_FIREWORKS: - err = s5c73m3_writeb(sd, S5C73M3_SCENE_MODE, - S5C73M3_SCENE_MODE_FIRE); - CHECK_ERR(err); - break; - - case SCENE_MODE_TEXT: - err = s5c73m3_writeb(sd, S5C73M3_SCENE_MODE, - S5C73M3_SCENE_MODE_TEXT); - CHECK_ERR(err); - break; - - case SCENE_MODE_CANDLE_LIGHT: - err = s5c73m3_writeb(sd, S5C73M3_SCENE_MODE, - S5C73M3_SCENE_MODE_CANDLE); - CHECK_ERR(err); - break; - - default: - cam_warn("invalid value, %d\n", val); - val = SCENE_MODE_NONE; - goto retry; - } - - state->scene_mode = val; - cam_trace("X\n"); - return 0; -} - -static int s5c73m3_capture_firework(struct v4l2_subdev *sd) -{ - int err = 0; - - cam_dbg("E, capture_firework\n"); - - err = s5c73m3_writeb(sd, S5C73M3_FIREWORK_CAPTURE, 0x0001); - CHECK_ERR(err); - - return err; -} - -static int s5c73m3_set_effect(struct v4l2_subdev *sd, int val) -{ - int err; - struct s5c73m3_state *state = to_state(sd); - cam_dbg("E, value %d\n", val); - -retry: - switch (val) { - case IMAGE_EFFECT_NONE: - err = s5c73m3_writeb(sd, S5C73M3_IMAGE_EFFECT, - S5C73M3_IMAGE_EFFECT_NONE); - CHECK_ERR(err); - break; - - case IMAGE_EFFECT_SEPIA: - err = s5c73m3_writeb(sd, S5C73M3_IMAGE_EFFECT, - S5C73M3_IMAGE_EFFECT_SEPIA); - CHECK_ERR(err); - break; - - case IMAGE_EFFECT_BNW: - err = s5c73m3_writeb(sd, S5C73M3_IMAGE_EFFECT, - S5C73M3_IMAGE_EFFECT_MONO); - CHECK_ERR(err); - break; - - case IMAGE_EFFECT_NEGATIVE: - err = s5c73m3_writeb(sd, S5C73M3_IMAGE_EFFECT, - S5C73M3_IMAGE_EFFECT_NEGATIVE); - CHECK_ERR(err); - break; - - case IMAGE_EFFECT_AQUA: - err = s5c73m3_writeb(sd, S5C73M3_IMAGE_EFFECT, - S5C73M3_IMAGE_EFFECT_AQUA); - CHECK_ERR(err); - break; - - default: - cam_warn("invalid value, %d\n", val); - val = IMAGE_EFFECT_NONE; - goto retry; - } - - state->exif.effect = val; - - cam_trace("X\n"); - return 0; -} - -static int s5c73m3_set_wdr(struct v4l2_subdev *sd, int val) -{ - int err; - struct s5c73m3_state *state = to_state(sd); - cam_dbg("E, value %d\n", val); - -retry: - switch (val) { - case WDR_OFF: - err = s5c73m3_writeb(sd, S5C73M3_WDR, - S5C73M3_WDR_OFF); - CHECK_ERR(err); - break; - - case WDR_ON: - err = s5c73m3_writeb(sd, S5C73M3_WDR, - S5C73M3_WDR_ON); - CHECK_ERR(err); - break; - - default: - cam_warn("invalid value, %d\n", val); - val = WDR_OFF; - goto retry; - } - state->exif.wdr = val; - - cam_trace("X\n"); - return 0; -} - -static int s5c73m3_set_antishake(struct v4l2_subdev *sd, int val) -{ - int err = 0; - if (val) { - err = s5c73m3_writeb(sd, S5C73M3_AE_MODE, - S5C73M3_ANTI_SHAKE); - CHECK_ERR(err); - } else { - err = s5c73m3_writeb(sd, S5C73M3_AE_MODE, - S5C73M3_AUTO_MODE_AE_SET); - CHECK_ERR(err); - } - return err; -} - -static int s5c73m3_set_face_beauty(struct v4l2_subdev *sd, int val) -{ - return 0; -} - -static int s5c73m3_set_ae_lock(struct v4l2_subdev *sd, int val) -{ - int err; - - if (val) - err = s5c73m3_writeb(sd, S5C73M3_AE_CON, S5C73M3_AE_STOP); - else - err = s5c73m3_writeb(sd, S5C73M3_AE_CON, S5C73M3_AE_START); - - CHECK_ERR(err); - - return err; -} - -static int s5c73m3_set_awb_lock(struct v4l2_subdev *sd, int val) -{ - int err; - - if (val) - err = s5c73m3_writeb(sd, S5C73M3_AWB_CON, S5C73M3_AWB_STOP); - else - err = s5c73m3_writeb(sd, S5C73M3_AWB_CON, S5C73M3_AWB_START); - - CHECK_ERR(err); - - return err; -} - -static int s5c73m3_set_ae_awb_lock(struct v4l2_subdev *sd, int val) -{ - return 0; -} - -static int s5c73m3_get_af_cal_version(struct v4l2_subdev *sd) -{ - struct s5c73m3_state *state = to_state(sd); - u16 status = 0; - int err = 0; - - /* Calibration Device */ - err = s5c73m3_read(sd, 0x0009, 0x300C, &status); - CHECK_ERR(err); - state->cal_device = status; - - /* Calibration DLL Version */ - status = 0; - err = s5c73m3_read(sd, 0x0009, 0x4FF8, &status); - CHECK_ERR(err); - state->cal_dll = status; - - cam_dbg("Cal_Device = 0x%x, Cal_DLL = 0x%x\n", - state->cal_device, state->cal_dll); - - return 0; -} - -static int s5c73m3_stop_af_lens(struct v4l2_subdev *sd, int val) -{ - struct s5c73m3_state *state = to_state(sd); - int err; - cam_dbg("E, value\n"); - - if (val == CAF_START) { - if (state->focus.mode == FOCUS_MODE_CONTINOUS_VIDEO) { - err = s5c73m3_writeb(sd, S5C73M3_AF_MODE, - S5C73M3_AF_MODE_MOVIE_CAF_START); - - } else { - err = s5c73m3_writeb(sd, S5C73M3_AF_MODE, - S5C73M3_AF_MODE_PREVIEW_CAF_START); - } - } else { - err = s5c73m3_writeb(sd, S5C73M3_AF_CON, - S5C73M3_AF_CON_STOP); - } - CHECK_ERR(err); - - cam_dbg("X\n"); - - return err; -} - -static int s5c73m3_set_af(struct v4l2_subdev *sd, int val) -{ - struct s5c73m3_state *state = to_state(sd); - int err = 0; - - cam_info("%s, mode %#x\n", val ? "start" : "stop", state->focus.mode); - - state->focus.status = 0; - - if (val) { - state->isflash = S5C73M3_ISNEED_FLASH_ON; - - if (state->focus.mode == FOCUS_MODE_TOUCH) - err = s5c73m3_set_touch_auto_focus(sd); - else - err = s5c73m3_writeb(sd, S5C73M3_AF_CON, - S5C73M3_AF_CON_START); - } else { - err = s5c73m3_writeb(sd, S5C73M3_STILL_MAIN_FLASH - , S5C73M3_STILL_MAIN_FLASH_CANCEL); - err = s5c73m3_writeb(sd, S5C73M3_AF_CON, - S5C73M3_AF_CON_STOP); - state->isflash = S5C73M3_ISNEED_FLASH_UNDEFINED; - } - - CHECK_ERR(err); - - cam_info("X\n"); - return err; -} - -static int s5c73m3_get_pre_flash(struct v4l2_subdev *sd, - struct v4l2_control *ctrl) -{ - int err = 0; - u16 pre_flash = false; - - s5c73m3_read(sd, 0x0009, S5C73M3_STILL_PRE_FLASH | 0x5000, &pre_flash); - ctrl->value = pre_flash; - return err; -} - -static int s5c73m3_get_af_result(struct v4l2_subdev *sd, - struct v4l2_control *ctrl) -{ - struct s5c73m3_state *state = to_state(sd); - int err = 0; - u16 af_status = S5C73M3_AF_STATUS_UNFOCUSED; - /*u16 temp_status = 0;*/ - - err = s5c73m3_read(sd, 0x0009, S5C73M3_AF_STATUS, &af_status); - - /*err = s5c73m3_read(sd, 0x0009, 0x5840, &temp_status);*/ - - switch (af_status) { - case S5C73M3_AF_STATUS_FOCUSING: - case S5C73M3_CAF_STATUS_FOCUSING: - case S5C73M3_CAF_STATUS_FIND_SEARCHING_DIR: - case S5C73M3_AF_STATUS_INVALID: - ctrl->value = CAMERA_AF_STATUS_IN_PROGRESS; - break; - - case S5C73M3_AF_STATUS_FOCUSED: - case S5C73M3_CAF_STATUS_FOCUSED: - ctrl->value = CAMERA_AF_STATUS_SUCCESS; - break; - - case S5C73M3_CAF_STATUS_UNFOCUSED: - case S5C73M3_AF_STATUS_UNFOCUSED: - default: - ctrl->value = CAMERA_AF_STATUS_FAIL; - break; - } - state->focus.status = af_status; - - /*cam_dbg("af_status = %d, frame_cnt = %d\n", - state->focus.status, temp_status);*/ - return err; -} - -static int s5c73m3_set_af_mode(struct v4l2_subdev *sd, int val) -{ - struct s5c73m3_state *state = to_state(sd); - int err; - cam_dbg("E, value %d\n", val); - -retry: - switch (val) { - case FOCUS_MODE_AUTO: - case FOCUS_MODE_INFINITY: - if (state->focus.mode != FOCUS_MODE_CONTINOUS_PICTURE) { - err = s5c73m3_writeb(sd, S5C73M3_AF_MODE, - S5C73M3_AF_MODE_NORMAL); - CHECK_ERR(err); - } else { - err = s5c73m3_writeb(sd, S5C73M3_AF_CON, - S5C73M3_AF_CON_STOP); - CHECK_ERR(err); - } - - state->focus.mode = val; - state->caf_mode = S5C73M3_AF_MODE_NORMAL; - break; - - case FOCUS_MODE_MACRO: - if (state->focus.mode != FOCUS_MODE_CONTINOUS_PICTURE_MACRO) { - err = s5c73m3_writeb(sd, S5C73M3_AF_MODE, - S5C73M3_AF_MODE_MACRO); - CHECK_ERR(err); - } else { - err = s5c73m3_writeb(sd, S5C73M3_AF_CON, - S5C73M3_AF_CON_STOP); - CHECK_ERR(err); - } - - state->focus.mode = val; - state->caf_mode = S5C73M3_AF_MODE_MACRO; - break; - - case FOCUS_MODE_CONTINOUS_PICTURE: - state->isflash = S5C73M3_ISNEED_FLASH_UNDEFINED; - - if (val != state->focus.mode && - state->caf_mode != S5C73M3_AF_MODE_NORMAL) { - state->focus.mode = val; - - err = s5c73m3_writeb(sd, S5C73M3_AF_MODE, - S5C73M3_AF_MODE_NORMAL); - CHECK_ERR(err); - state->caf_mode = S5C73M3_AF_MODE_NORMAL; - } - - err = s5c73m3_writeb(sd, S5C73M3_AF_MODE, - S5C73M3_AF_MODE_PREVIEW_CAF_START); - CHECK_ERR(err); - break; - - case FOCUS_MODE_CONTINOUS_PICTURE_MACRO: - state->isflash = S5C73M3_ISNEED_FLASH_UNDEFINED; - if (val != state->focus.mode && - state->caf_mode != S5C73M3_AF_MODE_MACRO) { - state->focus.mode = val; - - err = s5c73m3_writeb(sd, S5C73M3_AF_MODE, - S5C73M3_AF_MODE_MACRO); - state->caf_mode = S5C73M3_AF_MODE_MACRO; - CHECK_ERR(err); - } - - err = s5c73m3_writeb(sd, S5C73M3_AF_MODE, - S5C73M3_AF_MODE_PREVIEW_CAF_START); - CHECK_ERR(err); - break; - - case FOCUS_MODE_CONTINOUS_VIDEO: - state->focus.mode = val; - - err = s5c73m3_writeb(sd, S5C73M3_AF_MODE, - S5C73M3_AF_MODE_MOVIE_CAF_START); - CHECK_ERR(err); - break; - - case FOCUS_MODE_FACEDETECT: - state->focus.mode = val; - break; - - case FOCUS_MODE_TOUCH: - state->focus.mode = val; - break; - - default: - cam_warn("invalid value, %d\n", val); - val = FOCUS_MODE_AUTO; - goto retry; - } - - state->focus.mode = val; - - cam_trace("X\n"); - return 0; -} - -static int s5c73m3_set_touch_auto_focus(struct v4l2_subdev *sd) -{ - struct s5c73m3_state *state = to_state(sd); - int err; - - cam_dbg("s5c73m3_set_touch_auto_focus\n"); - -#ifdef CONFIG_VIDEO_SLP_S5C73M3 - cam_dbg("Rectangle Position(%d,%d,%d,%d)\n", - state->focus.top, state->focus.left, - state->focus.width, state->focus.height); - state->focus.pos_x = state->focus.left + state->focus.width / 2; - state->focus.pos_y = state->focus.top + state->focus.height / 2; -#endif - cam_dbg("Touch Position(%d,%d)\n", - state->focus.pos_x, state->focus.pos_y); - cam_dbg("Preview Size(%d,%d)\n", - state->preview->width, state->preview->height); - - err = s5c73m3_i2c_write(sd, 0xfcfc, 0x3310); - CHECK_ERR(err); - - err = s5c73m3_i2c_write(sd, 0x0050, 0x0009); - CHECK_ERR(err); - - err = s5c73m3_i2c_write(sd, 0x0054, S5C73M3_AF_TOUCH_POSITION); - CHECK_ERR(err); - - err = s5c73m3_i2c_write(sd, 0x0F14, state->focus.pos_x); - CHECK_ERR(err); - - err = s5c73m3_i2c_write(sd, 0x0F14, state->focus.pos_y); - CHECK_ERR(err); - - err = s5c73m3_i2c_write(sd, 0x0F14, state->preview->width); - CHECK_ERR(err); - - err = s5c73m3_i2c_write(sd, 0x0F14, state->preview->height); - CHECK_ERR(err); - - err = s5c73m3_i2c_write(sd, 0x0050, 0x0009); - CHECK_ERR(err); - - err = s5c73m3_i2c_write(sd, 0x0054, 0x5000); - CHECK_ERR(err); - - err = s5c73m3_i2c_write(sd, 0x0F14, 0x0E0A); - CHECK_ERR(err); - - err = s5c73m3_i2c_write(sd, 0x0F14, 0x0000); - CHECK_ERR(err); - - err = s5c73m3_i2c_write(sd, 0x0054, 0x5080); - CHECK_ERR(err); - - err = s5c73m3_i2c_write(sd, 0x0F14, 0x0001); - CHECK_ERR(err); - - return 0; -} - -static int s5c73m3_set_zoom(struct v4l2_subdev *sd, int value) -{ - int err; - cam_dbg("E, value %d\n", value); - -retry: - if (value < 0 || value > 30) { - cam_warn("invalid value, %d\n", value); - value = 0; - goto retry; - } - err = s5c73m3_writeb_no_check_status(sd, S5C73M3_ZOOM_STEP, - value); - CHECK_ERR(err); - mdelay(10); - - cam_trace("X\n"); - return 0; -} - -static int s5c73m3_set_jpeg_quality(struct v4l2_subdev *sd, - struct v4l2_control *ctrl) -{ - int val = ctrl->value, err; - cam_dbg("E, value %d\n", val); - - if (val <= 65) /* Normal */ - err = s5c73m3_writeb(sd, S5C73M3_IMAGE_QUALITY, - S5C73M3_IMAGE_QUALITY_NORMAL); - else if (val <= 75) /* Fine */ - err = s5c73m3_writeb(sd, S5C73M3_IMAGE_QUALITY, - S5C73M3_IMAGE_QUALITY_FINE); - else /* Superfine */ - err = s5c73m3_writeb(sd, S5C73M3_IMAGE_QUALITY, - S5C73M3_IMAGE_QUALITY_SUPERFINE); - - CHECK_ERR(err); - - cam_trace("X\n"); - return 0; -} - -static int s5c73m3_get_exif(struct v4l2_subdev *sd) -{ - return 0; -} - -static int s5c73m3_aeawb_lock_unlock(struct v4l2_subdev *sd, int val) -{ - struct s5c73m3_state *state = to_state(sd); - int err = 0; - int ae_lock = val & 0x1; - int awb_lock = (val & 0x2) >> 1; - int ae_lock_changed = - ~(ae_lock & state->ae_lock) & (ae_lock | state->ae_lock); - int awb_lock_changed = - ~(awb_lock & state->awb_lock) & (awb_lock | state->awb_lock); - - if (ae_lock_changed) { - cam_dbg("ae lock - %s\n", ae_lock ? "true" : "false"); - err = s5c73m3_writeb(sd, S5C73M3_AE_CON, - ae_lock ? S5C73M3_AE_STOP : S5C73M3_AE_START); - CHECK_ERR(err); - state->ae_lock = ae_lock; - } - if (awb_lock_changed && - state->wb_mode == WHITE_BALANCE_AUTO) { - cam_dbg("awb lock - %s\n", awb_lock ? "true" : "false"); - err = s5c73m3_writeb(sd, S5C73M3_AWB_CON, - awb_lock ? S5C73M3_AWB_STOP : S5C73M3_AWB_START); - CHECK_ERR(err); - state->awb_lock = awb_lock; - } - - return 0; -} - -static int s5c73m3_start_capture(struct v4l2_subdev *sd, int val) -{ - struct s5c73m3_state *state = to_state(sd); - int err = 0; - u16 isneed_flash = false; - u16 pre_flash = false; - - s5c73m3_read(sd, 0x0009, S5C73M3_STILL_PRE_FLASH | 0x5000, &pre_flash); - - if (state->flash_mode == FLASH_MODE_ON) { - if (!pre_flash) { - err = s5c73m3_writeb(sd, S5C73M3_STILL_PRE_FLASH - , S5C73M3_STILL_PRE_FLASH_FIRE); - msleep(100); - } - err = s5c73m3_writeb(sd, S5C73M3_STILL_MAIN_FLASH - , S5C73M3_STILL_MAIN_FLASH_FIRE); - } else if (state->flash_mode == FLASH_MODE_AUTO) { - if (pre_flash) { - err = s5c73m3_writeb(sd, S5C73M3_STILL_MAIN_FLASH - , S5C73M3_STILL_MAIN_FLASH_FIRE); - } else if (state->isflash != S5C73M3_ISNEED_FLASH_ON) { - err = s5c73m3_read(sd, 0x0009, - S5C73M3_AE_ISNEEDFLASH | 0x5000, &isneed_flash); - if (isneed_flash) { - err = s5c73m3_writeb(sd, S5C73M3_STILL_PRE_FLASH - , S5C73M3_STILL_PRE_FLASH_FIRE); - msleep(100); - err = s5c73m3_writeb(sd, - S5C73M3_STILL_MAIN_FLASH, - S5C73M3_STILL_MAIN_FLASH_FIRE); - } - } - } - - state->isflash = S5C73M3_ISNEED_FLASH_UNDEFINED; - - return 0; -} - -static int s5c73m3_set_auto_bracket_mode(struct v4l2_subdev *sd) -{ - int err = 0; - - err = s5c73m3_writeb(sd, S5C73M3_AE_AUTO_BRAKET, - S5C73M3_AE_AUTO_BRAKET_EV20); - CHECK_ERR(err); - - return err; -} - -static int s5c73m3_check_dataline(struct v4l2_subdev *sd, int val) -{ - return 0; -} - -static int s5c73m3_check_esd(struct v4l2_subdev *sd) -{ - return 0; -} - -static int s5c73m3_set_frame_rate(struct v4l2_subdev *sd, int fps) -{ - int err = 0; - struct s5c73m3_state *state = to_state(sd); - - if (!state->stream_enable) { - state->fps = fps; - return 0; - } - - switch (fps) { - case 30: - err = s5c73m3_writeb(sd, S5C73M3_AE_MODE, - S5C73M3_FIXED_30FPS); /* 30fps */ - break; - case 20: - err = s5c73m3_writeb(sd, S5C73M3_AE_MODE, - S5C73M3_FIXED_20FPS); /* 20fps */ - break; - case 15: - err = s5c73m3_writeb(sd, S5C73M3_AE_MODE, - S5C73M3_FIXED_15FPS); /* 15fps */ - break; - default: - err = s5c73m3_writeb(sd, S5C73M3_AE_MODE, - S5C73M3_AUTO_MODE_AE_SET); /* auto */ - break; - } - return err; -} - -static int s5c73m3_set_face_zoom(struct v4l2_subdev *sd, int val) -{ - struct s5c73m3_state *state = to_state(sd); - int err; - - cam_dbg("s5c73m3_set_face_zoom\n"); -#ifdef CONFIG_VIDEO_SLP_S5C73M3 - cam_dbg("Rectangle Position(%d,%d,%d,%d)\n", - state->focus.top, state->focus.left, - state->focus.width, state->focus.height); - state->focus.pos_x = state->focus.left + state->focus.width / 2; - state->focus.pos_y = state->focus.top + state->focus.height / 2; -#endif - cam_dbg("Touch Position(%d,%d)\n", - state->focus.pos_x, state->focus.pos_y); - cam_dbg("Preview Size(%d,%d)\n", - state->preview->width, state->preview->height); - - err = s5c73m3_i2c_write(sd, 0xfcfc, 0x3310); - CHECK_ERR(err); - - err = s5c73m3_i2c_write(sd, 0x0050, 0x0009); - CHECK_ERR(err); - - err = s5c73m3_i2c_write(sd, 0x0054, S5C73M3_AF_TOUCH_POSITION); - CHECK_ERR(err); - - err = s5c73m3_i2c_write(sd, 0x0F14, state->focus.pos_x); - CHECK_ERR(err); - - err = s5c73m3_i2c_write(sd, 0x0F14, state->focus.pos_y); - CHECK_ERR(err); - - err = s5c73m3_i2c_write(sd, 0x0F14, state->preview->width); - CHECK_ERR(err); - - err = s5c73m3_i2c_write(sd, 0x0F14, state->preview->height); - CHECK_ERR(err); - - err = s5c73m3_i2c_write(sd, 0x0050, 0x0009); - CHECK_ERR(err); - - err = s5c73m3_i2c_write(sd, 0x0054, 0x5000); - CHECK_ERR(err); - - err = s5c73m3_i2c_write(sd, 0x0F14, S5C73M3_AF_FACE_ZOOM); - CHECK_ERR(err); - - err = s5c73m3_i2c_write(sd, 0x0F14, val); /*0:reset, 1:Start*/ - CHECK_ERR(err); - - err = s5c73m3_i2c_write(sd, 0x0054, 0x5080); - CHECK_ERR(err); - - err = s5c73m3_i2c_write(sd, 0x0F14, 0x0001); - CHECK_ERR(err); - - return 0; -} - - -static int s5c73m3_set_face_detection(struct v4l2_subdev *sd, int val) -{ - int err; - cam_dbg("E, value %d\n", val); - -retry: - switch (val) { - case FACE_DETECTION_ON: - err = s5c73m3_writeb(sd, S5C73M3_FACE_DET, - S5C73M3_FACE_DET_ON); - CHECK_ERR(err); - - err = s5c73m3_writeb(sd, S5C73M3_AF_MODE, - S5C73M3_AF_MODE_PREVIEW_CAF_START); - CHECK_ERR(err); - - break; - - case FACE_DETECTION_OFF: - err = s5c73m3_writeb(sd, S5C73M3_FACE_DET, - S5C73M3_FACE_DET_OFF); - CHECK_ERR(err); - break; - - default: - cam_warn("invalid value, %d\n", val); - val = FACE_DETECTION_OFF; - goto retry; - } - - cam_trace("X\n"); - return 0; - -} - -static int s5c73m3_set_hybrid_capture(struct v4l2_subdev *sd) -{ - int err; - cam_trace("E\n"); - - err = s5c73m3_writeb(sd, S5C73M3_HYBRID_CAPTURE, 1); - - CHECK_ERR(err); - - cam_trace("X\n"); - return 0; -} - -static int s5c73m3_s_ctrl(struct v4l2_subdev *sd, struct v4l2_control *ctrl) -{ - struct s5c73m3_state *state = to_state(sd); - int err = 0; - - if (unlikely(state->isp.bad_fw && ctrl->id != V4L2_CID_CAM_UPDATE_FW)) { - cam_err("\"Unknown\" state, please update F/W"); - return -ENOSYS; - } - - switch (ctrl->id) { - case V4L2_CID_CAMERA_FRAME_RATE: - err = s5c73m3_set_frame_rate(sd, ctrl->value); - break; - - case V4L2_CID_CAMERA_FACE_DETECTION: - err = s5c73m3_set_face_detection(sd, ctrl->value); - break; - - case V4L2_CID_CAMERA_FACE_ZOOM: - err = s5c73m3_set_face_zoom(sd, ctrl->value); - break; - - case V4L2_CID_CAM_UPDATE_FW: - if (ctrl->value == FW_MODE_DUMP) - err = s5c73m3_dump_fw(sd); - else if (ctrl->value == FW_MODE_UPDATE) - err = s5c73m3_check_fw(sd, 1); - else - err = 0; - break; - - case V4L2_CID_CAMERA_SENSOR_MODE: - err = s5c73m3_set_sensor_mode(sd, ctrl->value); - break; - - case V4L2_CID_CAMERA_FLASH_MODE: - err = s5c73m3_set_flash(sd, ctrl->value, 0); - break; - - case V4L2_CID_CAMERA_ISO: - err = s5c73m3_set_iso(sd, ctrl); - break; - - case V4L2_CID_CAMERA_METERING: - if (state->sensor_mode == SENSOR_CAMERA) - err = s5c73m3_set_metering(sd, ctrl->value); - break; - - case V4L2_CID_EXPOSURE: - ctrl->value -= 4; - err = s5c73m3_set_exposure(sd, ctrl); - break; - - case V4L2_CID_CAMERA_BRIGHTNESS: - err = s5c73m3_set_exposure(sd, ctrl); - break; - - case V4L2_CID_CAMERA_CONTRAST: - err = s5c73m3_set_contrast(sd, ctrl); - break; - - case V4L2_CID_WHITE_BALANCE_PRESET: - err = s5c73m3_set_whitebalance(sd, ctrl->value); - break; - - case V4L2_CID_CAMERA_WHITE_BALANCE: - err = s5c73m3_set_whitebalance(sd, ctrl->value); - break; - - case V4L2_CID_CAMERA_SCENE_MODE: - err = s5c73m3_set_scene_mode(sd, ctrl->value); - break; - - case V4L2_CID_COLORFX: - err = s5c73m3_set_effect(sd, ctrl->value); - break; - - case V4L2_CID_CAMERA_EFFECT: - err = s5c73m3_set_effect(sd, ctrl->value); - break; - - case V4L2_CID_CAMERA_WDR: - err = s5c73m3_set_wdr(sd, ctrl->value); - break; - - case V4L2_CID_CAMERA_ANTI_SHAKE: - err = s5c73m3_set_antishake(sd, ctrl->value); - break; - - case V4L2_CID_CAMERA_BEAUTY_SHOT: - err = s5c73m3_set_face_beauty(sd, ctrl->value); - break; - - case V4L2_CID_CAMERA_DEFAULT_FOCUS_POSITION: - /*err = s5c73m3_set_af_mode(sd, state->focus.mode);*/ - err = 0; - break; - - case V4L2_CID_FOCUS_AUTO_MODE: - err = s5c73m3_set_af_mode(sd, ctrl->value); - break; - - case V4L2_CID_CAMERA_FOCUS_MODE: - err = s5c73m3_set_af_mode(sd, ctrl->value); - break; - - case V4L2_CID_CAMERA_SET_AUTO_FOCUS: - err = s5c73m3_set_af(sd, ctrl->value); - break; - - case V4L2_CID_FOCUS_AUTO_RECTANGLE_LEFT: - state->focus.left = ctrl->value; - break; - - case V4L2_CID_FOCUS_AUTO_RECTANGLE_TOP: - state->focus.top = ctrl->value; - break; - - case V4L2_CID_FOCUS_AUTO_RECTANGLE_WIDTH: - state->focus.width = ctrl->value; - break; - - case V4L2_CID_FOCUS_AUTO_RECTANGLE_HEIGHT: - state->focus.height = ctrl->value; - break; - - case V4L2_CID_CAMERA_OBJECT_POSITION_X: - state->focus.pos_x = ctrl->value; - break; - - case V4L2_CID_CAMERA_OBJECT_POSITION_Y: - state->focus.pos_y = ctrl->value; - break; - - case V4L2_CID_CAMERA_ZOOM: - err = s5c73m3_set_zoom(sd, ctrl->value); - break; - - case V4L2_CID_CAM_JPEG_QUALITY: - err = s5c73m3_set_jpeg_quality(sd, ctrl); - break; - - case V4L2_CID_CAMERA_CAPTURE: - err = s5c73m3_start_capture(sd, ctrl->value); - - if (state->scene_mode == SCENE_MODE_FIREWORKS) - err = s5c73m3_capture_firework(sd); - break; - - case V4L2_CID_CAMERA_HDR: - state->hdr_mode = ctrl->value; - err = 0; - break; - - case V4L2_CID_CAMERA_HYBRID: - state->hybrid_mode = ctrl->value; - err = 0; - break; - - case V4L2_CID_CAMERA_HYBRID_CAPTURE: - err = s5c73m3_set_hybrid_capture(sd); - break; - - case V4L2_CID_CAMERA_VT_MODE: - state->vt_mode = ctrl->value; - break; - - case V4L2_CID_CAMERA_CHECK_DATALINE: - state->check_dataline = ctrl->value; - break; - - case V4L2_CID_CAMERA_CHECK_ESD: - err = s5c73m3_check_esd(sd); - break; - - case V4L2_CID_CAMERA_JPEG_RESOLUTION: - state->jpeg_width = (u32)ctrl->value >> 16; - state->jpeg_height = (u32)ctrl->value & 0x0FFFF; - break; - - case V4L2_CID_CAMERA_AEAWB_LOCK_UNLOCK: - err = s5c73m3_aeawb_lock_unlock(sd, ctrl->value); - break; - - case V4L2_CID_CAMERA_CAF_START_STOP: - err = s5c73m3_stop_af_lens(sd, ctrl->value); - break; - - case V4L2_CID_SATURATION: - err = s5c73m3_set_saturation(sd, ctrl); - break; - - case V4L2_CID_SHARPNESS: - err = s5c73m3_set_sharpness(sd, ctrl); - break; - - default: - if ((ctrl->id & 0xFFFF) <= 2000) { - cam_err("no such control id(PRIVATE_BASE) %d, value %d\n", - ctrl->id & 0xFFFF, ctrl->value); - /*err = -ENOIOCTLCMD;*/ - } else if ((ctrl->id - V4L2_CID_BASE) <= 10000) { - cam_err("no such control id(BASE_CID) %d\n", - ctrl->id - V4L2_CID_BASE); - } else { - cam_err("no such control id(CAMERA_CLASS_BASE CID) %d\n", - ctrl->id - V4L2_CID_CAMERA_CLASS_BASE); - } - err = 0; - break; - } - - if (err < 0 && err != -ENOIOCTLCMD) - cam_err("failed, id %d, value %d\n", - ctrl->id - V4L2_CID_PRIVATE_BASE, ctrl->value); - return err; -} - -static int s5c73m3_g_ctrl(struct v4l2_subdev *sd, struct v4l2_control *ctrl) -{ - struct s5c73m3_state *state = to_state(sd); - int err = 0; - - switch (ctrl->id) { - case V4L2_CID_CAMERA_CAPTURE: - err = s5c73m3_get_pre_flash(sd, ctrl); - break; - case V4L2_CID_CAMERA_AUTO_FOCUS_RESULT: - err = s5c73m3_get_af_result(sd, ctrl); - break; - - case V4L2_CID_CAM_JPEG_MEMSIZE: - ctrl->value = 0xA00000; - break; - - case V4L2_CID_CAM_JPEG_MAIN_SIZE: - ctrl->value = state->jpeg.main_size; - break; - - case V4L2_CID_CAM_JPEG_MAIN_OFFSET: - ctrl->value = state->jpeg.main_offset; - break; - - case V4L2_CID_CAM_JPEG_THUMB_SIZE: - ctrl->value = state->jpeg.thumb_size; - break; - - case V4L2_CID_CAM_JPEG_THUMB_OFFSET: - ctrl->value = state->jpeg.thumb_offset; - break; - - case V4L2_CID_CAM_JPEG_POSTVIEW_OFFSET: - ctrl->value = state->jpeg.postview_offset; - break; - - case V4L2_CID_CAMERA_EXIF_FLASH: - ctrl->value = state->exif.flash; - break; - - case V4L2_CID_CAMERA_ISO: - ctrl->value = state->exif.iso; - break; - - case V4L2_CID_CAMERA_EXIF_ISO: - ctrl->value = state->exif.iso; - break; - - case V4L2_CID_CAMERA_EXIF_TV: - ctrl->value = state->exif.tv; - break; - - case V4L2_CID_CAMERA_EXIF_BV: - ctrl->value = state->exif.bv; - break; - - case V4L2_CID_CAMERA_EXIF_EBV: - ctrl->value = state->exif.ebv; - break; - - case V4L2_CID_WHITE_BALANCE_PRESET: - ctrl->value = state->wb_mode; - break; - - case V4L2_CID_EXPOSURE: - ctrl->value = state->exif.bv; - break; - - case V4L2_CID_COLORFX: - ctrl->value = state->exif.effect; - break; - - case V4L2_CID_SATURATION: - ctrl->value = state->exif.saturation; - break; - - case V4L2_CID_SHARPNESS: - ctrl->value = state->exif.sharpness; - break; - - case V4L2_CID_CAMERA_METERING: - ctrl->value = state->exif.metering; - break; - - case V4L2_CID_CAMERA_WDR: - ctrl->value = state->exif.wdr; - break; - - case V4L2_CID_CAMERA_FLASH_MODE: - ctrl->value = state->flash_mode; - break; - - case V4L2_CID_FOCUS_AUTO_RECTANGLE_LEFT: - ctrl->value = state->focus.left; - break; - - case V4L2_CID_FOCUS_AUTO_RECTANGLE_TOP: - ctrl->value = state->focus.top; - break; - - case V4L2_CID_FOCUS_AUTO_RECTANGLE_WIDTH: - ctrl->value = state->focus.width; - break; - - case V4L2_CID_FOCUS_AUTO_RECTANGLE_HEIGHT: - ctrl->value = state->focus.height; - break; - - case V4L2_CID_CAM_STABILIZE: - cam_err("V4L2_CID_CAM_STABILIZE is not supported\n"); - break; - - case V4L2_CID_PHYSICAL_ROTATION: - ctrl->value = IS_ROTATION_90; - break; - - default: - if ((ctrl->id & 0xFFFF) <= 2000) { - cam_err("no such control id(PRIVATE_BASE) %d, value %d\n", - ctrl->id & 0xFFFF, ctrl->value); - /*err = -ENOIOCTLCMD;*/ - } else if ((ctrl->id - V4L2_CID_BASE) <= 10000) { - cam_err("no such control id(BASE_CID) %d\n", - ctrl->id - V4L2_CID_BASE); - } else { - cam_err("no such control id(CAMERA_CLASS_BASE CID) %d\n", - ctrl->id - V4L2_CID_CAMERA_CLASS_BASE); - } - err = 0; - break; - } - - if (err < 0 && err != -ENOIOCTLCMD) - cam_err("failed, id %d\n", ctrl->id - V4L2_CID_PRIVATE_BASE); - - return err; -} - - -static int s5c73m3_g_ext_ctrl(struct v4l2_subdev *sd, - struct v4l2_ext_control *ctrl) -{ - struct s5c73m3_state *state = to_state(sd); - int err = 0; - - switch (ctrl->id) { - case V4L2_CID_CAM_SENSOR_FW_VER: - strcpy(ctrl->string, state->phone_fw); - break; - - default: - cam_err("no such control id %d\n", - ctrl->id - V4L2_CID_CAMERA_CLASS_BASE); - /*err = -ENOIOCTLCMD*/ - err = 0; - break; - } - - if (err < 0 && err != -ENOIOCTLCMD) - cam_err("failed, id %d\n", - ctrl->id - V4L2_CID_CAMERA_CLASS_BASE); - - return err; -} - -static int s5c73m3_g_ext_ctrls(struct v4l2_subdev *sd, - struct v4l2_ext_controls *ctrls) -{ - struct v4l2_ext_control *ctrl = ctrls->controls; - int i, err = 0; - - for (i = 0; i < ctrls->count; i++, ctrl++) { - err = s5c73m3_g_ext_ctrl(sd, ctrl); - if (err) { - ctrls->error_idx = i; - break; - } - } - return err; -} - - -static int s5c73m3_program_fw(struct v4l2_subdev *sd, - u8 *buf, u32 addr, u32 unit, u32 count, u8 id) -{ - return 0; -} - -#ifndef CONFIG_VIDEO_S5C73M3_SPI -int s5c73m3_spi_write(const u8 *addr, const int len, const int txSize) -{ return 0; } -#endif - -static int s5c73m3_load_fw(struct v4l2_subdev *sd) -{ - struct device *dev = sd->v4l2_dev->dev; - struct s5c73m3_state *state = to_state(sd); - const struct firmware *fw; - char fw_path[20] = {0,}; - u8 *buf = NULL; - int err, txSize; - - struct file *fp; - mm_segment_t old_fs; - long fsize, nread; - int fw_requested = 1; - - old_fs = get_fs(); - set_fs(KERNEL_DS); - - if ((state->sensor_fw[0] == 'G') && (state->sensor_fw[1] == 'C')) - fp = filp_open(S5C73M3_FW_GC_PATH, O_RDONLY, 0); - else if ((state->sensor_fw[0] == 'G') && (state->sensor_fw[1] == 'D')) - fp = filp_open(S5C73M3_FW_GD_PATH, O_RDONLY, 0); - else if ((state->sensor_fw[0] == 'G') && (state->sensor_fw[1] == 'E')) - fp = filp_open(S5C73M3_FW_GE_PATH, O_RDONLY, 0); - else if ((state->sensor_fw[0] == 'G') && (state->sensor_fw[1] == 'F')) - fp = filp_open(S5C73M3_FW_GF_PATH, O_RDONLY, 0); - else if ((state->sensor_fw[0] == 'Z') && (state->sensor_fw[1] == 'C')) - fp = filp_open(S5C73M3_FW_ZC_PATH, O_RDONLY, 0); - else if ((state->sensor_fw[0] == 'Z') && (state->sensor_fw[1] == 'D')) - fp = filp_open(S5C73M3_FW_ZD_PATH, O_RDONLY, 0); - else if ((state->sensor_fw[0] == 'Z') && (state->sensor_fw[1] == 'E')) - fp = filp_open(S5C73M3_FW_ZE_PATH, O_RDONLY, 0); - else if ((state->sensor_fw[0] == 'Z') && (state->sensor_fw[1] == 'F')) - fp = filp_open(S5C73M3_FW_ZF_PATH, O_RDONLY, 0); - else if ((state->sensor_fw[0] == 'Z') && (state->sensor_fw[1] == 'G')) - fp = filp_open(S5C73M3_FW_ZG_PATH, O_RDONLY, 0); - else - fp = filp_open(S5C73M3_FW_PATH, O_RDONLY, 0); - - if (IS_ERR(fp)) { - cam_trace("failed to open %s, err %ld\n", - S5C73M3_FW_PATH, PTR_ERR(fp)); - goto request_fw; - } - - fw_requested = 0; - fsize = fp->f_path.dentry->d_inode->i_size; - - buf = vmalloc(fsize); - if (!buf) { - cam_err("failed to allocate memory\n"); - err = -ENOMEM; - goto out; - } - - nread = vfs_read(fp, (char __user *)buf, fsize, &fp->f_pos); - if (nread != fsize) { - cam_err("failed to read firmware file, %ld Bytes\n", nread); - err = -EIO; - goto out; - } - -request_fw: - if (fw_requested) { - set_fs(old_fs); - - if (state->sensor_fw[0] == 'O') { - sprintf(fw_path, "SlimISP_G%c.bin", - state->sensor_fw[1]); - } else if (state->sensor_fw[0] == 'S') { - sprintf(fw_path, "SlimISP_Z%c.bin", - state->sensor_fw[1]); - } else { - sprintf(fw_path, "SlimISP_%c%c.bin", - state->sensor_fw[0], - state->sensor_fw[1]); - } - cam_dbg("file_name = %s\n", fw_path); - - err = request_firmware(&fw, fw_path, dev); - if (err != 0) { - cam_err("request_firmware falied\n"); - err = -EINVAL; - goto out; - } - - cam_dbg("start, size %d Bytes\n", fw->size); - buf = (u8 *)fw->data; - fsize = fw->size; - } - - if (fw_requested) - txSize = 60*1024; /*60KB*/ - else - txSize = 64; /*64 byte for non-DMA mode*/ - - err = s5c73m3_spi_write(buf, fsize, txSize); - if (err < 0) { - cam_err("s5c73m3_spi_write falied\n"); - goto out; - } - - cam_dbg("end\n"); - -out: - if (!fw_requested) { - vfree(buf); - - filp_close(fp, current->files); - set_fs(old_fs); - } else { - release_firmware(fw); - } - - return err; -} - -/* - * v4l2_subdev_video_ops - */ -static const struct s5c73m3_frmsizeenum *s5c73m3_get_frmsize - (const struct s5c73m3_frmsizeenum *frmsizes, int num_entries, int index) -{ - int i; - - for (i = 0; i < num_entries; i++) { - if (frmsizes[i].index == index) - return &frmsizes[i]; - } - - return NULL; -} - -static int s5c73m3_set_frmsize(struct v4l2_subdev *sd) -{ - struct s5c73m3_state *state = to_state(sd); - int err ; - cam_trace("E\n"); - - if (state->format_mode != V4L2_PIX_FMT_MODE_CAPTURE) { - err = s5c73m3_writeb(sd, S5C73M3_CHG_MODE, - S5C73M3_YUV_MODE | state->preview->reg_val | - (state->sensor_mode<<8)); - CHECK_ERR(err); - - cam_dbg("yuv frame size %dx%d\n", - state->preview->width, state->preview->height); - } else { - err = s5c73m3_writeb(sd, S5C73M3_CHG_MODE, - S5C73M3_INTERLEAVED_MODE - | state->capture->reg_val | state->preview->reg_val - |(state->sensor_mode<<8)); - CHECK_ERR(err); - - cam_dbg("interleaved yuv size %dx%d\n", - state->preview->width, state->preview->height); - - cam_dbg("interleaved jpeg size %dx%d\n", - state->capture->width, state->capture->height); - } - cam_trace("X\n"); - return 0; -} - -static int s5c73m3_s_fmt(struct v4l2_subdev *sd, - struct v4l2_mbus_framefmt *ffmt) -{ - struct s5c73m3_state *state = to_state(sd); - const struct s5c73m3_frmsizeenum **frmsize; - const struct s5c73m3_frmsizeenum **capfrmsize; - - u32 width = ffmt->width; - u32 height = ffmt->height; - u32 tmp_width; - u32 old_index, old_index_cap; - int i, num_entries; - cam_trace("E\n"); - - if (unlikely(state->isp.bad_fw)) { - cam_err("\"Unknown\" state, please update F/W"); - return -ENOSYS; - } - if (ffmt->width < ffmt->height) { - tmp_width = ffmt->height; - height = ffmt->width; - width = tmp_width; - } - - if (ffmt->colorspace == V4L2_COLORSPACE_JPEG) - state->format_mode = V4L2_PIX_FMT_MODE_CAPTURE; - else - state->format_mode = V4L2_PIX_FMT_MODE_PREVIEW; - - s5c73m3_set_mode(sd); - - /*set frame size for preview(yuv)*/ - frmsize = &state->preview; - old_index = *frmsize ? (*frmsize)->index : -1; - *frmsize = NULL; - - num_entries = ARRAY_SIZE(preview_frmsizes); - for (i = 0; i < num_entries; i++) { - if (width == preview_frmsizes[i].width && - height == preview_frmsizes[i].height) { - *frmsize = &preview_frmsizes[i]; - break; - } - } - - if (*frmsize == NULL) { - cam_warn("invalid yuv frame size %dx%d\n", width, height); - *frmsize = s5c73m3_get_frmsize(preview_frmsizes, - num_entries, - S5C73M3_PREVIEW_960X720); - } - - /*set frame size for capture(jpeg)*/ - /*it's meaningful for interleaved mode*/ - capfrmsize = &state->capture; - old_index_cap = *capfrmsize ? (*capfrmsize)->index : -1; - *capfrmsize = NULL; - - width = state->jpeg_width; - height = state->jpeg_height; - - num_entries = ARRAY_SIZE(capture_frmsizes); - for (i = 0; i < num_entries; i++) { - if (width == capture_frmsizes[i].width && - height == capture_frmsizes[i].height) { - *capfrmsize = &capture_frmsizes[i]; - break; - } - } - - if (*capfrmsize == NULL) { - cam_warn("invalid jpeg frame size %dx%d\n", width, height); - *capfrmsize = s5c73m3_get_frmsize(capture_frmsizes, num_entries, - S5C73M3_CAPTURE_VGA); - } - - cam_dbg("yuv %dx%d\n", (*frmsize)->width, (*frmsize)->height); - cam_dbg("jpeg %dx%d\n", (*capfrmsize)->width, (*capfrmsize)->height); - if (state->stream_enable) { - if (ffmt->colorspace == V4L2_COLORSPACE_JPEG) { - if ((old_index != (*frmsize)->index) - || (old_index_cap != (*capfrmsize)->index)) - s5c73m3_set_frmsize(sd); - } else { - if (old_index != (*frmsize)->index) - s5c73m3_set_frmsize(sd); - } - } else - s5c73m3_set_frmsize(sd); - - cam_trace("X\n"); - return 0; -} - -static int s5c73m3_g_parm(struct v4l2_subdev *sd, struct v4l2_streamparm *a) -{ - struct s5c73m3_state *state = to_state(sd); - - cam_info("g_parm: FPS %d\n", state->fps); - if (state->fps == 0) { - a->parm.capture.timeperframe.numerator = state->fps; - a->parm.capture.timeperframe.denominator = 1; - } else { - a->parm.capture.timeperframe.numerator = 1; - a->parm.capture.timeperframe.denominator = state->fps; - } - - return 0; -} - -static int s5c73m3_s_parm(struct v4l2_subdev *sd, struct v4l2_streamparm *a) -{ - struct s5c73m3_state *state = to_state(sd); - u32 denom = a->parm.capture.timeperframe.denominator; - u32 numer = a->parm.capture.timeperframe.numerator; - u32 err = 0; - u32 fps; - - if (unlikely(state->isp.bad_fw)) { - cam_err("\"Unknown\" state, please update F/W"); - return -ENOSYS; - } - - if (numer == 0) { - fps = 0; - } else { - fps = denom / numer; - if (fps != state->fps) { - if (fps < 0 || fps > 30) { - cam_err("invalid frame rate %d\n", fps); - fps = 30; - } - } - } - - state->fps = fps; - - cam_err("Frame rate = %d(%d)\n", fps, state->fps); - - err = s5c73m3_set_frame_rate(sd, state->fps); - CHECK_ERR(err); - - return 0; -} - -static int s5c73m3_enum_framesizes(struct v4l2_subdev *sd, - struct v4l2_frmsizeenum *fsize) -{ - struct s5c73m3_state *state = to_state(sd); - unsigned int i; - int index = fsize->index; - - /* - * Compatible with current fimc code, we have added this condition. - * Fimc use this subdev call for getting width and height of current - * state. - */ - if (index != -1) { - if (index < ARRAY_SIZE(preview_frmsizes)) { - for (i = 0; i < ARRAY_SIZE(preview_frmsizes); ++i) { - /* - * If we need to check pixelformat, please add - * condition at this line. - */ - if (index == i) { - fsize->type = - V4L2_FRMSIZE_TYPE_DISCRETE; - fsize->discrete.width = - preview_frmsizes[i].width; - fsize->discrete.height = - preview_frmsizes[i].height; - return 0; - } - } - } - return -EINVAL; - } - - /* - * The camera interface should read this value, this is the resolution - * at which the sensor would provide framedata to the camera i/f - * In case of image capture, - * this returns the default camera resolution (VGA) - */ - if (state->preview == NULL) - return -EINVAL; - - fsize->type = V4L2_FRMSIZE_TYPE_DISCRETE; - if (state->hdr_mode) { - fsize->discrete.width = state->capture->width; - fsize->discrete.height = state->capture->height; - } else { - fsize->discrete.width = state->preview->width; - fsize->discrete.height = state->preview->height; - } - return 0; -} - -static int s5c73m3_s_stream_sensor(struct v4l2_subdev *sd, int onoff) -{ - int err = 0; - int index = 0; - u16 stream_status = 0; - - cam_info("%s::::onoff=%d\n", __func__, onoff); - err = s5c73m3_writeb(sd, S5C73M3_SENSOR_STREAMING, - onoff ? S5C73M3_SENSOR_STREAMING_ON : - S5C73M3_SENSOR_STREAMING_OFF); - CHECK_ERR(err); - - do { - err = s5c73m3_read(sd, 0x0009, 0x5080, &stream_status); - if (stream_status == 0xffff) - break; - - index++; - msleep(20); - } while (index < 30); - - if (index >= 30) { - cam_info("%s::::TimeOut!! index = %d, status = 0x%x", - __func__, index, stream_status); - err = -1; - } - - return err; -} - -static int s5c73m3_s_stream_hdr(struct v4l2_subdev *sd, int enable) -{ - struct s5c73m3_state *state = to_state(sd); - int err = 0; - cam_info("s_stream_hdr\n"); - - if (enable) { - err = s5c73m3_i2c_write(sd, 0x0050, 0x0009); - CHECK_ERR(err); - - err = s5c73m3_i2c_write(sd, 0x0054, 0x5000); - CHECK_ERR(err); - - err = s5c73m3_i2c_write(sd, 0x0F14, 0x0902); - CHECK_ERR(err); - - err = s5c73m3_i2c_write(sd, 0x0F14, 0x0008); - CHECK_ERR(err); - - err = s5c73m3_i2c_write(sd, 0x0F14, 0x091A); - CHECK_ERR(err); - - err = s5c73m3_i2c_write(sd, 0x0F14, 0x0002); - CHECK_ERR(err); - - err = s5c73m3_i2c_write(sd, 0x0F14, 0x0B10); - CHECK_ERR(err); - - err = s5c73m3_i2c_write(sd, 0x0F14, 0x8000 | - state->capture->reg_val | - state->preview->reg_val); - CHECK_ERR(err); - - err = s5c73m3_i2c_write(sd, 0x0054, 0x5080); - CHECK_ERR(err); - - err = s5c73m3_i2c_write(sd, 0x0F14, 0x0003); - CHECK_ERR(err); - - err = s5c73m3_s_stream_sensor(sd, enable); - err = s5c73m3_set_auto_bracket_mode(sd); - } else { - err = s5c73m3_s_stream_sensor(sd, enable); - } - - return 0; -} - -static int s5c73m3_s_stream(struct v4l2_subdev *sd, int enable) -{ - struct s5c73m3_state *state = to_state(sd); - int err; - - cam_trace("E\n"); - - if (unlikely(state->isp.bad_fw)) { - cam_err("\"Unknown\" state, please update F/W"); - return -ENOSYS; - } - - switch (enable) { - case STREAM_MODE_CAM_ON: - case STREAM_MODE_CAM_OFF: - switch (state->format_mode) { - case V4L2_PIX_FMT_MODE_CAPTURE: - cam_info("capture %s", - enable == STREAM_MODE_CAM_ON ? "on" : "off"); - - s5c73m3_s_stream_sensor(sd, enable); - if (enable == STREAM_MODE_CAM_ON && - state->focus.mode == - FOCUS_MODE_CONTINOUS_VIDEO) { - s5c73m3_set_af_mode(sd, - FOCUS_MODE_CONTINOUS_VIDEO); - } - break; - - default: - cam_info("preview %s", - enable == STREAM_MODE_CAM_ON ? "on" : "off"); - - if (state->hdr_mode) { - err = s5c73m3_set_flash(sd, FLASH_MODE_OFF, 0); - err = s5c73m3_s_stream_hdr(sd, enable); - } else { - err = s5c73m3_s_stream_sensor(sd, enable); - if (enable == STREAM_MODE_CAM_ON && - state->focus.mode == - FOCUS_MODE_CONTINOUS_VIDEO) { - s5c73m3_set_af_mode(sd, - FOCUS_MODE_CONTINOUS_VIDEO); - } - } - break; - } - break; - - case STREAM_MODE_MOVIE_ON: - if (state->flash_mode != FLASH_MODE_OFF) - err = s5c73m3_set_flash(sd, state->flash_mode, 1); - - if (state->preview->index == S5C73M3_PREVIEW_720P || - state->preview->index == S5C73M3_PREVIEW_1080P) - err = s5c73m3_set_af(sd, 1); - break; - - case STREAM_MODE_MOVIE_OFF: - if (state->preview->index == S5C73M3_PREVIEW_720P || - state->preview->index == S5C73M3_PREVIEW_1080P) - err = s5c73m3_set_af(sd, 0); - - s5c73m3_set_flash(sd, FLASH_MODE_OFF, 1); - break; - - default: - cam_err("invalid stream option, %d\n", enable); - break; - } - -#if 0 - err = s5c73m3_writeb(sd, S5C73M3_AF_CAL, 0); - CHECK_ERR(err); -#endif - state->stream_enable = enable; - if (state->stream_enable && state->hdr_mode == 0) { - if (state->fps) - s5c73m3_set_frame_rate(sd, state->fps); - } - - cam_trace("X\n"); - return 0; -} - -static int s5c73m3_check_version(struct v4l2_subdev *sd) -{ - return 0; -} - -static int s5c73m3_init_param(struct v4l2_subdev *sd) -{ - s5c73m3_set_flash(sd, FLASH_MODE_OFF, 0); - return 0; -} - -static int s5c73m3_FROM_booting(struct v4l2_subdev *sd) -{ - u16 read_val; - int i, err; - - cam_trace("E\n"); - - /*ARM go*/ - err = s5c73m3_write(sd, 0x3000, 0x0004, 0xFFFF); - CHECK_ERR(err); - - udelay(400); - - /*Check boot done*/ - for (i = 0; i < 4; i++) { - err = s5c73m3_read(sd, 0x3010, 0x0010, &read_val); - CHECK_ERR(err); - - if (read_val == 0x0C) - break; - - udelay(100); - } - - if (read_val != 0x0C) { - cam_err("boot fail, read_val %#x\n", read_val); - return -1; - } - - /*P,M,S and Boot Mode*/ - err = s5c73m3_write(sd, 0x3100, 0x010C, 0x0044); - CHECK_ERR(err); - err = s5c73m3_write(sd, 0x3100, 0x0108, 0x000D); - CHECK_ERR(err); - err = s5c73m3_write(sd, 0x3100, 0x0304, 0x0001); - CHECK_ERR(err); - err = s5c73m3_write(sd, 0x0001, 0x0000, 0x5800); - CHECK_ERR(err); - err = s5c73m3_write(sd, 0x0001, 0x0002, 0x0002); - CHECK_ERR(err); - err = s5c73m3_write(sd, 0x3100, 0x0000, 0x0001); - CHECK_ERR(err); - err = s5c73m3_write(sd, 0x3010, 0x0014, 0x1B85); - CHECK_ERR(err); - err = s5c73m3_write(sd, 0x3010, 0x0010, 0x230C); - CHECK_ERR(err); - - mdelay(300); - - /*Check binary read done*/ - for (i = 0; i < 3; i++) { - err = s5c73m3_read(sd, 0x3010, 0x0010, &read_val); - CHECK_ERR(err); - - if (read_val == 0x230E) - break; - - udelay(100); - } - - if (read_val != 0x230E) { - cam_err("binary read fail, read_val %#x\n", read_val); - return -1; - } - - /*ARM reset*/ - err = s5c73m3_write(sd, 0x3000, 0x0004, 0xFFFD); - CHECK_ERR(err); - - /*remap*/ - err = s5c73m3_write(sd, 0x3010, 0x00A4, 0x0183); - CHECK_ERR(err); - - /*ARM go again*/ - err = s5c73m3_write(sd, 0x3000, 0x0004, 0xFFFF); - CHECK_ERR(err); - - cam_trace("X\n"); - - return 0; -} - -static int s5c73m3_SPI_booting(struct v4l2_subdev *sd) -{ - u16 read_val; - int i, err; - - cam_trace("E\n"); - - /*ARM go*/ - err = s5c73m3_write(sd, 0x3000, 0x0004, 0xFFFF); - CHECK_ERR(err); - - udelay(400); - - /*Check boot done*/ - for (i = 0; i < 3; i++) { - err = s5c73m3_read(sd, 0x3010, 0x0010, &read_val); - CHECK_ERR(err); - - if (read_val == 0x0C) - break; - - udelay(100); - } - - if (read_val != 0x0C) { - cam_err("boot fail, read_val %#x\n", read_val); - return -1; - } - - /*P,M,S and Boot Mode*/ - err = s5c73m3_write(sd, 0x3010, 0x0014, 0x2146); - CHECK_ERR(err); - err = s5c73m3_write(sd, 0x3010, 0x0010, 0x210C); - CHECK_ERR(err); - - udelay(200); - - /*Check SPI ready*/ - for (i = 0; i < 3; i++) { - err = s5c73m3_read(sd, 0x3010, 0x0010, &read_val); - CHECK_ERR(err); - - if (read_val == 0x210D) - break; - - udelay(100); - } - - if (read_val != 0x210D) { - cam_err("SPI not ready, read_val %#x\n", read_val); - return -1; - } - - /*download fw by SPI*/ - s5c73m3_load_fw(sd); - - /*ARM reset*/ - err = s5c73m3_write(sd, 0x3000, 0x0004, 0xFFFD); - CHECK_ERR(err); - - /*remap*/ - err = s5c73m3_write(sd, 0x3010, 0x00A4, 0x0183); - CHECK_ERR(err); - - /*ARM go again*/ - err = s5c73m3_write(sd, 0x3000, 0x0004, 0xFFFF); - CHECK_ERR(err); - - cam_trace("X\n"); - - return 0; -} - -static int s5c73m3_read_vdd_core(struct v4l2_subdev *sd) -{ - struct s5c73m3_state *state = to_state(sd); - u16 read_val; - int err; - - cam_trace("E\n"); - - /*Initialize OTP Controller*/ - err = s5c73m3_write(sd, 0x3800, 0xA004, 0x0000); - CHECK_ERR(err); - err = s5c73m3_write(sd, 0x3800, 0xA000, 0x0004); - CHECK_ERR(err); - err = s5c73m3_write(sd, 0x3800, 0xA0D8, 0x0000); - CHECK_ERR(err); - err = s5c73m3_write(sd, 0x3800, 0xA0DC, 0x0004); - CHECK_ERR(err); - err = s5c73m3_write(sd, 0x3800, 0xA0C4, 0x4000); - CHECK_ERR(err); - err = s5c73m3_write(sd, 0x3800, 0xA0D4, 0x0015); - CHECK_ERR(err); - err = s5c73m3_write(sd, 0x3800, 0xA000, 0x0001); - CHECK_ERR(err); - err = s5c73m3_write(sd, 0x3800, 0xA0B4, 0x9F90); - CHECK_ERR(err); - err = s5c73m3_write(sd, 0x3800, 0xA09C, 0x9A95); - CHECK_ERR(err); - - /*Page Select*/ - err = s5c73m3_write(sd, 0x3800, 0xA0C4, 0x4800); - CHECK_ERR(err); - err = s5c73m3_write(sd, 0x3800, 0xA0C4, 0x4400); - CHECK_ERR(err); - err = s5c73m3_write(sd, 0x3800, 0xA0C4, 0x4200); - CHECK_ERR(err); - err = s5c73m3_write(sd, 0x3800, 0xA004, 0x00C0); - CHECK_ERR(err); - err = s5c73m3_write(sd, 0x3800, 0xA000, 0x0001); - CHECK_ERR(err); - -#if 0 /*read_val should be 0x7383*/ - err = s5c73m3_read(sd, 0x0000, 0x131C, &read_val); - CHECK_ERR(err); - - cam_dbg("read_val %#x\n", read_val); -#endif - - /*Read Data*/ - err = s5c73m3_read(sd, 0x3800, 0xA034, &read_val); - CHECK_ERR(err); - - cam_dbg("read_val %#x\n", read_val); - - /*Read Data End*/ - err = s5c73m3_write(sd, 0x3800, 0xA000, 0x0000); - CHECK_ERR(err); - - if (read_val & 0x200) { - state->pdata->set_vdd_core(1150000); - strcpy(sysfs_isp_core, "1.15V"); - } else if (read_val & 0x800) { - state->pdata->set_vdd_core(1100000); - strcpy(sysfs_isp_core, "1.10V"); - } else if (read_val & 0x2000) { - state->pdata->set_vdd_core(1050000); - strcpy(sysfs_isp_core, "1.05V"); - } else if (read_val & 0x8000) { - state->pdata->set_vdd_core(1000000); - strcpy(sysfs_isp_core, "1.00V"); - } else { - state->pdata->set_vdd_core(1150000); - strcpy(sysfs_isp_core, "1.15V"); - } - - cam_trace("X\n"); - - return 0; -} - - -static int s5c73m3_init(struct v4l2_subdev *sd, u32 val) -{ - struct s5c73m3_state *state = to_state(sd); - int err; - - sd_internal = sd; - - /* Default state values */ - state->isp.bad_fw = 0; - - state->preview = NULL; - state->capture = NULL; - - state->format_mode = V4L2_PIX_FMT_MODE_PREVIEW; - state->sensor_mode = SENSOR_CAMERA; - state->flash_mode = FLASH_MODE_OFF; - state->beauty_mode = 0; - state->focus.mode = FOCUS_MODE_CONTINOUS_PICTURE; - state->focus.touch = 0; - - state->fps = 0; /* auto */ - - memset(&state->focus, 0, sizeof(state->focus)); - - if (!state->pdata->is_vdd_core_set()) - s5c73m3_read_vdd_core(sd); - -#ifdef S5C73M3_FROM_BOOTING - err = s5c73m3_FROM_booting(sd); -#else - err = s5c73m3_check_fw(sd, 0); - if (err < 0) { - cam_dbg("isp.bad_fw is true\n"); - state->isp.bad_fw = 1; - } -#endif - CHECK_ERR(err); - - s5c73m3_init_param(sd); - - return 0; -} - -static const struct v4l2_subdev_core_ops s5c73m3_core_ops = { - .init = s5c73m3_init, /* initializing API */ - .load_fw = s5c73m3_load_fw, - .queryctrl = s5c73m3_queryctrl, - .g_ctrl = s5c73m3_g_ctrl, - .s_ctrl = s5c73m3_s_ctrl, - .g_ext_ctrls = s5c73m3_g_ext_ctrls, -}; - -static const struct v4l2_subdev_video_ops s5c73m3_video_ops = { - .s_mbus_fmt = s5c73m3_s_fmt, - .g_parm = s5c73m3_g_parm, - .s_parm = s5c73m3_s_parm, - .enum_framesizes = s5c73m3_enum_framesizes, - .s_stream = s5c73m3_s_stream, -}; - -static const struct v4l2_subdev_ops s5c73m3_ops = { - .core = &s5c73m3_core_ops, - .video = &s5c73m3_video_ops, -}; - -static ssize_t s5c73m3_camera_rear_camtype_show(struct device *dev, - struct device_attribute *attr, char *buf) -{ - char type[25]; - - strcpy(type, sysfs_sensor_type); - return sprintf(buf, "%s\n", type); -} - -static ssize_t s5c73m3_camera_rear_camfw_show(struct device *dev, - struct device_attribute *attr, char *buf) -{ - return sprintf(buf, "%s %s\n", sysfs_sensor_fw, sysfs_phone_fw); -} - -static ssize_t s5c73m3_camera_rear_flash(struct device *dev, - struct device_attribute *attr, const char *buf, - size_t count) -{ - int err; - - if (buf[0] == '0') - err = s5c73m3_writeb(sd_internal, S5C73M3_FLASH_TORCH, - S5C73M3_FLASH_TORCH_OFF); - else - err = s5c73m3_writeb(sd_internal, S5C73M3_FLASH_TORCH, - S5C73M3_FLASH_TORCH_ON); - - CHECK_ERR(err); - - return count; -} - -static ssize_t s5c73m3_camera_isp_core_show(struct device *dev, - struct device_attribute *attr, char *buf) -{ - char core[10]; - - strcpy(core, sysfs_isp_core); - return sprintf(buf, "%s\n", core); -} - -static DEVICE_ATTR(rear_camtype, S_IRUGO, - s5c73m3_camera_rear_camtype_show, NULL); -static DEVICE_ATTR(rear_camfw, S_IRUGO, s5c73m3_camera_rear_camfw_show, NULL); -static DEVICE_ATTR(rear_flash, S_IWUSR | S_IWGRP, NULL, - s5c73m3_camera_rear_flash); -static DEVICE_ATTR(isp_core, S_IRUGO, s5c73m3_camera_isp_core_show, NULL); - -/* - * s5c73m3_probe - * Fetching platform data is being done with s_config subdev call. - * In probe routine, we just register subdev device - */ -static int __devinit s5c73m3_probe(struct i2c_client *client, - const struct i2c_device_id *id) -{ - struct s5c73m3_state *state; - struct v4l2_subdev *sd; - - state = kzalloc(sizeof(struct s5c73m3_state), GFP_KERNEL); - if (state == NULL) - return -ENOMEM; - - sd = &state->sd; - strcpy(sd->name, S5C73M3_DRIVER_NAME); - - state->pdata = client->dev.platform_data; - - /* Registering subdev */ - v4l2_i2c_subdev_init(sd, client, &s5c73m3_ops); - -#ifdef CAM_DEBUG - state->dbg_level = CAM_DEBUG; -#endif - -#ifdef CONFIG_BUSFREQ_OPP - /* lock bus frequency */ - dev_lock(bus_dev, s5c73m3_dev, 400200); -#else - pm_qos_update_request(&entry, 400200); -#endif - - if (s5c73m3_dev) - dev_set_drvdata(s5c73m3_dev, state); - - printk(KERN_DEBUG "%s\n", __func__); - - return 0; -} - -static int __devexit s5c73m3_remove(struct i2c_client *client) -{ - struct v4l2_subdev *sd = i2c_get_clientdata(client); - struct s5c73m3_state *state = to_state(sd); - - if (unlikely(state->isp.bad_fw)) { - cam_err("camera is not ready!!\n"); - } else { - if (s5c73m3_set_af_softlanding(sd) < 0) - cam_err("failed to set soft landing\n"); - } - v4l2_device_unregister_subdev(sd); - -#ifdef CONFIG_BUSFREQ_OPP - /* Unlock bus frequency */ - dev_unlock(bus_dev, s5c73m3_dev); -#else - pm_qos_update_request(&entry, 0); -#endif - - kfree(state->fw_version); - kfree(state); - - return 0; -} - -static const struct i2c_device_id s5c73m3_id[] = { - { S5C73M3_DRIVER_NAME, 0 }, - { } -}; -MODULE_DEVICE_TABLE(i2c, s5c73m3_id); - -static struct i2c_driver s5c73m3_i2c_driver = { - .driver = { - .name = S5C73M3_DRIVER_NAME, - }, - .probe = s5c73m3_probe, - .remove = __devexit_p(s5c73m3_remove), - .id_table = s5c73m3_id, -}; - -static int __init s5c73m3_mod_init(void) -{ -#ifdef CONFIG_BUSFREQ_OPP - /* To lock bus frequency in OPP mode */ - bus_dev = dev_get("exynos-busfreq"); -#else - pm_qos_add_request(&entry, PM_QOS_BUS_DMA_THROUGHPUT, 0); -#endif - - if (!s5c73m3_dev) { - s5c73m3_dev = device_create(camera_class, - NULL, 0, NULL, "rear"); - if (IS_ERR(s5c73m3_dev)) { - cam_warn("failed to create device!\n"); - return 0; - } - - if (device_create_file(s5c73m3_dev, &dev_attr_rear_camtype) - < 0) { - cam_warn("failed to create device file, %s\n", - dev_attr_rear_camtype.attr.name); - } - - if (device_create_file(s5c73m3_dev, &dev_attr_rear_camfw) < 0) { - cam_warn("failed to create device file, %s\n", - dev_attr_rear_camfw.attr.name); - } - - if (device_create_file(s5c73m3_dev, &dev_attr_rear_flash) < 0) { - cam_warn("failed to create device file, %s\n", - dev_attr_rear_flash.attr.name); - } - - if (device_create_file(s5c73m3_dev, &dev_attr_isp_core) < 0) { - cam_warn("failed to create device file, %s\n", - dev_attr_isp_core.attr.name); - } - } - - return i2c_add_driver(&s5c73m3_i2c_driver); -} - -static void __exit s5c73m3_mod_exit(void) -{ - i2c_del_driver(&s5c73m3_i2c_driver); -} -module_init(s5c73m3_mod_init); -module_exit(s5c73m3_mod_exit); - - -MODULE_DESCRIPTION("driver for LSI S5C73M3"); -MODULE_LICENSE("GPL"); diff --git a/drivers/media/video/slp_s5c73m3.h b/drivers/media/video/slp_s5c73m3.h deleted file mode 100644 index 314c65f..0000000 --- a/drivers/media/video/slp_s5c73m3.h +++ /dev/null @@ -1,516 +0,0 @@ -/* - * Driver for LSI S5C73M3 (ISP for 8MP Camera) - * - * 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 __SLP_S5C73M3_H -#define __SLP_S5C73M3_H - -#define CONFIG_CAM_DEBUG 1 - -#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 s5c73m3_prev_frmsize { - S5C73M3_PREVIEW_QCIF, - S5C73M3_PREVIEW_QCIF2, - S5C73M3_PREVIEW_QVGA, - S5C73M3_PREVIEW_CIF, - S5C73M3_PREVIEW_VGA, - S5C73M3_PREVIEW_D1, - S5C73M3_PREVIEW_WVGA, - S5C73M3_PREVIEW_880X720, - S5C73M3_PREVIEW_960X720, - S5C73M3_PREVIEW_1008X672, - S5C73M3_PREVIEW_1056X704, - S5C73M3_PREVIEW_1184X666, - S5C73M3_PREVIEW_720P, - S5C73M3_VDIS_720P, - S5C73M3_PREVIEW_1080P, - S5C73M3_VDIS_1080P, - S5C73M3_PREVIEW_HDR, -}; - -enum s5c73m3_cap_frmsize { - S5C73M3_CAPTURE_VGA, /* 640 x 480 */ - S5C73M3_CAPTURE_WVGA, /* 800 x 480 */ - S5C73M3_CAPTURE_1024X768, /* 1024 x 768 */ - S5C73M3_CAPTURE_HD, /* 1280 x 720 */ - S5C73M3_CAPTURE_W1MP, /* 1600 x 960 */ - S5C73M3_CAPTURE_2MP, /* UXGA - 1600 x 1200 */ - S5C73M3_CAPTURE_W2MP, /* 2048 x 1232 */ - S5C73M3_CAPTURE_3MP, /* QXGA - 2048 x 1536 */ - S5C73M3_CAPTURE_W4MP, /* WQXGA - 2560 x 1440 */ - S5C73M3_CAPTURE_5MP, /* 2560 x 1920 */ - S5C73M3_CAPTURE_W6MP, /* 3072 x 1856 */ - S5C73M3_CAPTURE_7MP, /* 3072 x 2304 */ - S5C73M3_CAPTURE_W7MP, /* WQXGA - 2560 x 1536 */ - S5C73M3_CAPTURE_3264X2176, /* 3264 x 2176 */ - S5C73M3_CAPTURE_8MP, /* 3264 x 2448 */ -}; - -enum s5c73m3_isneed_flash_tristate { - S5C73M3_ISNEED_FLASH_OFF = 0x00, - S5C73M3_ISNEED_FLASH_ON = 0x01, - S5C73M3_ISNEED_FLASH_UNDEFINED = 0x02, -}; - -struct s5c73m3_control { - u32 id; - s32 value; - s32 minimum; /* Note signedness */ - s32 maximum; - s32 step; - s32 default_value; -}; - -struct s5c73m3_frmsizeenum { - unsigned int index; - unsigned int width; - unsigned int height; - u8 reg_val; /* a value for category parameter */ -}; - -struct s5c73m3_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 s5c73m3_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 s5c73m3_focus { - unsigned int mode; - unsigned int lock; - unsigned int status; - unsigned int touch; - unsigned int pos_x; - unsigned int pos_y; - - /* rectangle type values */ - unsigned int left; - unsigned int top; - unsigned int width; - unsigned int height; -}; - -struct s5c73m3_exif { - char unique_id[7]; - u32 exptime; /* us */ - u16 flash; - u16 iso; - int tv; /* shutter speed */ - int bv; /* brightness */ - int ebv; /* exposure bias */ - int effect; /* effect(colorfx) */ - int saturation; - int sharpness; - int metering; - int wdr; -}; - -struct s5c73m3_state { - struct s5c73m3_platform_data *pdata; - struct v4l2_subdev sd; - - struct s5c73m3_isp isp; - - const struct s5c73m3_frmsizeenum *preview; - const struct s5c73m3_frmsizeenum *capture; - - enum v4l2_pix_format_mode format_mode; - enum v4l2_sensor_mode sensor_mode; - enum v4l2_flash_mode flash_mode; - enum v4l2_wb_mode wb_mode; - enum v4l2_scene_mode scene_mode; - int vt_mode; - int beauty_mode; - int hdr_mode; - int hybrid_mode; - int zoom; - int stream_enable; - int ae_lock; - int awb_lock; - - int cal_device; - int cal_dll; - - unsigned int fps; - struct s5c73m3_focus focus; - int caf_mode; - char isflash; - - struct s5c73m3_jpeg jpeg; - struct s5c73m3_exif exif; - - int check_dataline; - char *fw_version; - - u32 jpeg_width; - u32 jpeg_height; - - u8 sensor_fw[10]; - u8 phone_fw[10]; - - u8 sensor_type[15]; - -#ifdef CONFIG_CAM_DEBUG - u8 dbg_level; -#endif -}; - -#define S5C73M3_IMG_OUTPUT 0x0902 -#define S5C73M3_HDR_OUTPUT 0x0008 -#define S5C73M3_YUV_OUTPUT 0x0009 -#define S5C73M3_INTERLEAVED_OUTPUT 0x000D -#define S5C73M3_HYBRID_OUTPUT 0x0016 - -#define S5C73M3_STILL_PRE_FLASH 0x0A00 -#define S5C73M3_STILL_PRE_FLASH_FIRE 0x0000 -#define S5C73M3_STILL_PRE_FLASH_NON_FIRED 0x0000 -#define S5C73M3_STILL_PRE_FLASH_FIRED 0x0001 - -#define S5C73M3_STILL_MAIN_FLASH 0x0A02 -#define S5C73M3_STILL_MAIN_FLASH_CANCEL 0x0001 -#define S5C73M3_STILL_MAIN_FLASH_FIRE 0x0002 - - -#define S5C73M3_ZOOM_STEP 0x0B00 - - -#define S5C73M3_IMAGE_EFFECT 0x0B0A -#define S5C73M3_IMAGE_EFFECT_NONE 0x0001 -#define S5C73M3_IMAGE_EFFECT_NEGATIVE 0x0002 -#define S5C73M3_IMAGE_EFFECT_AQUA 0x0003 -#define S5C73M3_IMAGE_EFFECT_SEPIA 0x0004 -#define S5C73M3_IMAGE_EFFECT_MONO 0x0005 - -#define S5C73M3_IMAGE_QUALITY 0x0B0C -#define S5C73M3_IMAGE_QUALITY_SUPERFINE 0x0000 -#define S5C73M3_IMAGE_QUALITY_FINE 0x0001 -#define S5C73M3_IMAGE_QUALITY_NORMAL 0x0002 - - -#define S5C73M3_FLASH_MODE 0x0B0E -#define S5C73M3_FLASH_MODE_OFF 0x0000 -#define S5C73M3_FLASH_MODE_ON 0x0001 -#define S5C73M3_FLASH_MODE_AUTO 0x0002 - -#define S5C73M3_FLASH_TORCH 0x0B12 -#define S5C73M3_FLASH_TORCH_OFF 0x0000 -#define S5C73M3_FLASH_TORCH_ON 0x0001 - -#define S5C73M3_AE_ISNEEDFLASH 0x0CBA -#define S5C73M3_AE_ISNEEDFLASH_OFF 0x0000 -#define S5C73M3_AE_ISNEEDFLASH_ON 0x0001 - - -#define S5C73M3_CHG_MODE 0x0B10 -#define S5C73M3_YUV_MODE 0x8000 -#define S5C73M3_INTERLEAVED_MODE 0x8000 -#define S5C73M3_CHG_MODE_YUV_320_240 0x8001 -#define S5C73M3_CHG_MODE_YUV_400_300 0x8002 -#define S5C73M3_CHG_MODE_YUV_640_480 0x8003 -#define S5C73M3_CHG_MODE_YUV_800_600 0x8004 -#define S5C73M3_CHG_MODE_YUV_960_720 0x8005 -#define S5C73M3_CHG_MODE_YUV_1280_720 0x8006 -#define S5C73M3_CHG_MODE_YUV_1280_960 0x8007 -#define S5C73M3_CHG_MODE_YUV_1600_1200 0x8008 -#define S5C73M3_CHG_MODE_YUV_1632_1224 0x8009 -#define S5C73M3_CHG_MODE_YUV_1920_1080 0x800A -#define S5C73M3_CHG_MODE_YUV_1920_1440 0x800B -#define S5C73M3_CHG_MODE_YUV_2304_1296 0x800C -#define S5C73M3_CHG_MODE_YUV_2304_1728 0x800D -#define S5C73M3_CHG_MODE_JPEG_640_480 0x0010 -#define S5C73M3_CHG_MODE_JPEG_800_450 0x0020 -#define S5C73M3_CHG_MODE_JPEG_800_600 0x0030 -#define S5C73M3_CHG_MODE_JPEG_1600_960 0x0040 -#define S5C73M3_CHG_MODE_JPEG_1600_1200 0x0050 -#define S5C73M3_CHG_MODE_JPEG_2048_1152 0x0060 -#define S5C73M3_CHG_MODE_JPEG_2048_1536 0x0070 -#define S5C73M3_CHG_MODE_JPEG_2560_1440 0x0080 -#define S5C73M3_CHG_MODE_JPEG_2560_1920 0x0090 -#define S5C73M3_CHG_MODE_JPEG_3072_1728 0x00A0 -#define S5C73M3_CHG_MODE_JPEG_3264_2304 0x00B0 -#define S5C73M3_CHG_MODE_JPEG_3264_1836 0x00C0 -#define S5C73M3_CHG_MODE_JPEG_3264_2448 0x00D0 - - -#define S5C73M3_AF_CON 0x0E00 -#define S5C73M3_AF_CON_STOP 0x0000 -#define S5C73M3_AF_CON_SCAN 0x0001/*AF_SCAN:Full Search*/ -#define S5C73M3_AF_CON_START 0x0002/*AF_START:Fast Search*/ - -#define S5C73M3_AF_STATUS 0x5E80 - -#define S5C73M3_AF_TOUCH_AF 0x0E0A - -#define S5C73M3_AF_CAL 0x0E06 - -#define S5C73M3_CAF_STATUS_FIND_SEARCHING_DIR 0x0001 -#define S5C73M3_CAF_STATUS_FOCUSING 0x0002 -#define S5C73M3_CAF_STATUS_FOCUSED 0x0003 -#define S5C73M3_CAF_STATUS_UNFOCUSED 0x0004 - -#define S5C73M3_AF_STATUS_INVALID 0x0010 -#define S5C73M3_AF_STATUS_FOCUSING 0x0020 -#define S5C73M3_AF_STATUS_FOCUSED 0x0030/*SUCCESS*/ -#define S5C73M3_AF_STATUS_UNFOCUSED 0x0040/*FAIL*/ - -#define S5C73M3_AF_TOUCH_POSITION 0x5E8E - -#define S5C73M3_AF_FACE_ZOOM 0x0E10 - -#define S5C73M3_AF_MODE 0x0E02 -#define S5C73M3_AF_MODE_NORMAL 0x0000 -#define S5C73M3_AF_MODE_MACRO 0x0001 -#define S5C73M3_AF_MODE_MOVIE_CAF_START 0x0002 -#define S5C73M3_AF_MODE_MOVIE_CAF_STOP 0x0003 -#define S5C73M3_AF_MODE_PREVIEW_CAF_START 0x0004 -#define S5C73M3_AF_MODE_PREVIEW_CAF_STOP 0x0005 - -#define S5C73M3_AF_SOFTLANDING 0x0E16 -#define S5C73M3_AF_SOFTLANDING_ON 0x0000 - -#define S5C73M3_FACE_DET 0x0E0C -#define S5C73M3_FACE_DET_OFF 0x0000 -#define S5C73M3_FACE_DET_ON 0x0001 - -#define S5C73M3_FACE_DET_OSD 0x0E0E -#define S5C73M3_FACE_DET_OSD_OFF 0x0000 -#define S5C73M3_FACE_DET_OSD_ON 0x0001 - -#define S5C73M3_AE_CON 0x0C00 -#define S5C73M3_AE_STOP 0x0000/*LOCK*/ -#define S5C73M3_AE_START 0x0001/*UNLOCK*/ - -#define S5C73M3_ISO 0x0C02 -#define S5C73M3_ISO_AUTO 0x0000 -#define S5C73M3_ISO_100 0x0001 -#define S5C73M3_ISO_200 0x0002 -#define S5C73M3_ISO_400 0x0003 -#define S5C73M3_ISO_800 0x0004 -#define S5C73M3_ISO_SPORTS 0x0005 -#define S5C73M3_ISO_NIGHT 0x0006 -#define S5C73M3_ISO_INDOOR 0x0007 - -#define S5C73M3_EV 0x0C04 -#define S5C73M3_EV_M20 0x0000 -#define S5C73M3_EV_M15 0x0001 -#define S5C73M3_EV_M10 0x0002 -#define S5C73M3_EV_M05 0x0003 -#define S5C73M3_EV_ZERO 0x0004 -#define S5C73M3_EV_P05 0x0005 -#define S5C73M3_EV_P10 0x0006 -#define S5C73M3_EV_P15 0x0007 -#define S5C73M3_EV_P20 0x0008 - -#define S5C73M3_METER 0x0C06 -#define S5C73M3_METER_CENTER 0x0000 -#define S5C73M3_METER_SPOT 0x0001 -#define S5C73M3_METER_AVERAGE 0x0002 -#define S5C73M3_METER_SMART 0x0003 - -#define S5C73M3_WDR 0x0C08 -#define S5C73M3_WDR_OFF 0x0000 -#define S5C73M3_WDR_ON 0x0001 - -#define S5C73M3_AE_MODE 0x0C1E -#define S5C73M3_AUTO_MODE_AE_SET 0x0000 -#define S5C73M3_FIXED_30FPS 0x0002 -#define S5C73M3_FIXED_20FPS 0x0003 -#define S5C73M3_FIXED_15FPS 0x0004 -#define S5C73M3_FIXED_120FPS 0x0008 -#define S5C73M3_FIXED_7FPS 0x0009 -#define S5C73M3_ANTI_SHAKE 0x0013 - -#define S5C73M3_SHARPNESS 0x0C14 -#define S5C73M3_SHARPNESS_0 0x0000 -#define S5C73M3_SHARPNESS_1 0x0001 -#define S5C73M3_SHARPNESS_2 0x0002 -#define S5C73M3_SHARPNESS_M1 0x0003 -#define S5C73M3_SHARPNESS_M2 0x0004 - -#define S5C73M3_SATURATION 0x0C16 -#define S5C73M3_SATURATION_0 0x0000 -#define S5C73M3_SATURATION_1 0x0001 -#define S5C73M3_SATURATION_2 0x0002 -#define S5C73M3_SATURATION_M1 0x0003 -#define S5C73M3_SATURATION_M2 0x0004 - -#define S5C73M3_CONTRAST 0x0C18 -#define S5C73M3_CONTRAST_0 0x0000 -#define S5C73M3_CONTRAST_1 0x0001 -#define S5C73M3_CONTRAST_2 0x0002 -#define S5C73M3_CONTRAST_M1 0x0003 -#define S5C73M3_CONTRAST_M2 0x0004 - -#define S5C73M3_SCENE_MODE 0x0C1A -#define S5C73M3_SCENE_MODE_NONE 0x0000 -#define S5C73M3_SCENE_MODE_PORTRAIT 0x0001 -#define S5C73M3_SCENE_MODE_LANDSCAPE 0x0002 -#define S5C73M3_SCENE_MODE_SPORTS 0x0003 -#define S5C73M3_SCENE_MODE_INDOOR 0x0004 -#define S5C73M3_SCENE_MODE_BEACH 0x0005 -#define S5C73M3_SCENE_MODE_SUNSET 0x0006 -#define S5C73M3_SCENE_MODE_DAWN 0x0007 -#define S5C73M3_SCENE_MODE_FALL 0x0008 -#define S5C73M3_SCENE_MODE_NIGHT 0x0009 -#define S5C73M3_SCENE_MODE_AGAINSTLIGHT 0x000A -#define S5C73M3_SCENE_MODE_FIRE 0x000B -#define S5C73M3_SCENE_MODE_TEXT 0x000C -#define S5C73M3_SCENE_MODE_CANDLE 0x000D - -#define S5C73M3_FIREWORK_CAPTURE 0x0C20 - -#define S5C73M3_AE_AUTO_BRAKET 0x0B14 -#define S5C73M3_AE_AUTO_BRAKET_EV05 0x0080 -#define S5C73M3_AE_AUTO_BRAKET_EV10 0x0100 -#define S5C73M3_AE_AUTO_BRAKET_EV15 0x0180 -#define S5C73M3_AE_AUTO_BRAKET_EV20 0x0200 - -#define S5C73M3_SENSOR_STREAMING 0x090A -#define S5C73M3_SENSOR_STREAMING_OFF 0x0000 -#define S5C73M3_SENSOR_STREAMING_ON 0x0001 - -#define S5C73M3_AWB_MODE 0x0D02 -#define S5C73M3_AWB_MODE_INCANDESCENT 0x0000 -#define S5C73M3_AWB_MODE_FLUORESCENT1 0x0001 -#define S5C73M3_AWB_MODE_FLUORESCENT2 0x0002 -#define S5C73M3_AWB_MODE_DAYLIGHT 0x0003 -#define S5C73M3_AWB_MODE_CLOUDY 0x0004 -#define S5C73M3_AWB_MODE_AUTO 0x0005 - -#define S5C73M3_AWB_CON 0x0D00 -#define S5C73M3_AWB_STOP 0x0000/*LOCK*/ -#define S5C73M3_AWB_START 0x0001/*UNLOCK*/ - -#define S5C73M3_HYBRID_CAPTURE 0x0996 - -/* S5C73M3 Sensor Mode */ -#define S5C73M3_SYSINIT_MODE 0x0 -#define S5C73M3_PARMSET_MODE 0x1 -#define S5C73M3_MONITOR_MODE 0x2 -#define S5C73M3_STILLCAP_MODE 0x3 - -/* Interrupt Factor */ -#define S5C73M3_INT_SOUND (1 << 7) -#define S5C73M3_INT_LENS_INIT (1 << 6) -#define S5C73M3_INT_FD (1 << 5) -#define S5C73M3_INT_FRAME_SYNC (1 << 4) -#define S5C73M3_INT_CAPTURE (1 << 3) -#define S5C73M3_INT_ZOOM (1 << 2) -#define S5C73M3_INT_AF (1 << 1) -#define S5C73M3_INT_MODE (1 << 0) - -/* ESD Interrupt */ -#define S5C73M3_INT_ESD (1 << 0) - -static const u32 S5C73M3_INIT[] = { -0x00500009, -0x00545000, -0x0F140B08, -0x0F140000, -0x0F140900, -0x0F140403, /*640MHz*/ -0x00545080, -0x0F140002 -}; - -static u32 S5C73M3_OTP_CONTROL[] = { -0xFCFC3310, -0x00503800, -0x0054A004, -0x0F140000, -0x0054A000, -0x0F140004, -0x0054A0D8, -0x0F140000, -0x0054A0DC, -0x0F140004, -0x0054A0C4, -0x0F144000, -0x0054A0D4, -0x0F140015, -0x0054A000, -0x0F140001, -0x0054A0B4, -0x0F149F90, -0x0054A09C, -0x0F149A95, -}; - -static u32 S5C73M3_OTP_PAGE[] = { -0x0054A0C4, -0x0F144800, -0x0054A0C4, -0x0F144400, -0x0054A0C4, -0x0F144200, -0x0054A004, -0x0F1400C0, -0x0054A000, -0x0F140001, -}; - -#ifdef CONFIG_VIDEO_S5C73M3_SPI -extern int s5c73m3_spi_write(const u8 *addr, const int len, const int txSize); -#endif - -#endif /* __SLP_S5C73M3_H */ diff --git a/drivers/media/video/slp_s5k4ecgx.c b/drivers/media/video/slp_s5k4ecgx.c deleted file mode 100644 index c78ca71..0000000 --- a/drivers/media/video/slp_s5k4ecgx.c +++ /dev/null @@ -1,2335 +0,0 @@ -/* - * Driver for S5K4ECGX from Samsung Electronics - * - * 5Mp CMOS Image Sensor SoC with an Embedded Image Processor - * - * Copyright (c) 2012 Samsung Electronics Co., Ltd. - * - * 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. - */ - -#include <linux/i2c.h> -#include <linux/init.h> -#include <media/v4l2-device.h> -#include <linux/delay.h> -#include <linux/version.h> -#include <media/v4l2-device.h> -#include <media/v4l2-subdev.h> -#include <linux/workqueue.h> -#ifdef CONFIG_VIDEO_SAMSUNG_V4L2 -#include <linux/videodev2_exynos_media.h> -#include <linux/videodev2_exynos_camera.h> -#endif -#include <media/s5k4ecgx_platform.h> - -#include "slp_s5k4ecgx.h" - -#ifdef S5K4ECGX_USLEEP -#include <linux/hrtimer.h> -#endif - -#define S5K4ECGX_BURST_MODE -#ifdef S5K4ECGX_BURST_MODE - static u16 addr, value; - - static int len; - static u8 buf[SZ_4K] = {0,}; -#else - static u8 buf[4] = {0,}; -#endif - -/* 5M mem size */ -#define S5K4ECGX_INTLV_DATA_MAXSIZE (5 << 20) - -static const struct s5k4ecgx_framesize preview_frmsizes[] = { - { S5K4ECGX_PREVIEW_640, 640, 480 }, - { S5K4ECGX_PREVIEW_176, 640, 480 }, - { S5K4ECGX_PREVIEW_320, 320, 240 }, - { S5K4ECGX_PREVIEW_720, 720, 480 }, - { S5K4ECGX_PREVIEW_800, 800, 480 }, - { S5K4ECGX_PREVIEW_1280, 1280, 720 }, -}; - -static const struct s5k4ecgx_framesize capture_frmsizes[] = { - { S5K4ECGX_CAPTURE_5MP, 2560, 1920 }, - { S5K4ECGX_CAPTURE_3MP, 2048, 1536 }, - { S5K4ECGX_CAPTURE_2MP, 1600, 1200 }, - { S5K4ECGX_CAPTURE_1MP, 1280, 960 }, - { S5K4ECGX_CAPTURE_XGA, 1024, 768 }, - { S5K4ECGX_CAPTURE_VGA, 640, 480 }, -}; - -#define CHECK_ERR(x) if (unlikely((x) < 0)) { \ - cam_err("i2c failed, err %d\n", x); \ - return x; \ - } - -#define NELEMS(array) (sizeof(array) / sizeof(array[0])) - -#ifdef S5K4ECGX_USLEEP -/* - * Use msleep() if the sleep time is over 1000 us. -*/ -static void s5k4ecgx_usleep(u32 usecs) -{ - ktime_t expires; - u64 add_time = (u64)usecs * 1000; - - if (unlikely(!usecs)) - return; - - expires = ktime_add_ns(ktime_get(), add_time); - set_current_state(TASK_UNINTERRUPTIBLE); - schedule_hrtimeout(&expires, HRTIMER_MODE_ABS); -} -#endif - -static void s5k4ecgx_cam_delay(struct v4l2_subdev *sd) -{ - struct s5k4ecgx_state *state = to_state(sd); - - if (state->scene_mode == SCENE_MODE_NIGHTSHOT || - state->scene_mode == SCENE_MODE_FIREWORKS) - msleep(250); - else - msleep(200); -} - -static inline int s5k4ecgx_read(struct i2c_client *client, - u16 subaddr, u16 *data) -{ - u8 buf[2]; - int err = 0; - struct i2c_msg msg = { - .addr = client->addr, - .flags = 0, - .len = 2, - .buf = buf, - }; - - *(u16 *)buf = cpu_to_be16(subaddr); - - err = i2c_transfer(client->adapter, &msg, 1); - if (unlikely(err < 0)) - cam_err("ERR: %d register read fail\n", __LINE__); - - msg.flags = I2C_M_RD; - - err = i2c_transfer(client->adapter, &msg, 1); - if (unlikely(err < 0)) - cam_err("ERR: %d register read fail\n", __LINE__); - - *data = ((buf[0] << 8) | buf[1]); - - return err; -} - -static inline int s5k4ecgx_write(struct i2c_client *client, - u32 packet) -{ - u8 buf[4]; - int err = 0, retry_count = 5; - - struct i2c_msg msg = { - .addr = client->addr, - .flags = 0, - .buf = buf, - .len = 4, - }; - - if (!client->adapter) { - cam_err("ERR - can't search i2c client adapter\n"); - return -EIO; - } - - while (retry_count--) { - *(u32 *)buf = cpu_to_be32(packet); - err = i2c_transfer(client->adapter, &msg, 1); - if (likely(err == 1)) - break; - mdelay(10); - } - - if (unlikely(err < 0)) { - cam_err("ERR - 0x%08x write failed err=%d\n", - (u32)packet, err); - return err; - } - - return (err != 1) ? -1 : 0; -} - -/* -* Read a register. -*/ -static int s5k4ecgx_read_reg(struct v4l2_subdev *sd, - u16 page, u16 addr, u16 *val) -{ - struct i2c_client *client = v4l2_get_subdevdata(sd); - u32 page_cmd = (0x002C << 16) | page; - u32 addr_cmd = (0x002E << 16) | addr; - int err = 0; - - cam_dbg("page_cmd=0x%X, addr_cmd=0x%X\n", page_cmd, addr_cmd); - - err = s5k4ecgx_write(client, page_cmd); - CHECK_ERR(err); - err = s5k4ecgx_write(client, addr_cmd); - CHECK_ERR(err); - err = s5k4ecgx_read(client, 0x0F12, val); - CHECK_ERR(err); - - return 0; -} - -/* program multiple registers */ -static int s5k4ecgx_write_regs(struct v4l2_subdev *sd, - const u32 *packet, u32 num) -{ - struct i2c_client *client = v4l2_get_subdevdata(sd); - int ret = -EAGAIN; - u32 temp = 0; - u16 delay = 0; - int retry_count = 5; - - struct i2c_msg msg = { - msg.addr = client->addr, - msg.flags = 0, - msg.len = 4, - msg.buf = buf, - }; - - while (num--) { - temp = *packet++; - - if ((temp & S5K4ECGX_DELAY) == S5K4ECGX_DELAY) { - delay = temp & 0xFFFF; - cam_dbg("line(%d):delay(0x%x):delay(%d)\n", - __LINE__, delay, delay); - msleep(delay); - continue; - } - -#ifdef S5K4ECGX_BURST_MODE - addr = temp >> 16; - value = temp & 0xFFFF; - - switch (addr) { - case 0x0F12: - if (len == 0) { - buf[len++] = addr >> 8; - buf[len++] = addr & 0xFF; - } - buf[len++] = value >> 8; - buf[len++] = value & 0xFF; - - if ((*packet >> 16) != addr) { - msg.len = len; - goto s5k4ecgx_burst_write; - } - break; - - case 0xFFFF: - break; - - default: - msg.len = 4; - *(u32 *)buf = cpu_to_be32(temp); - goto s5k4ecgx_burst_write; - } - - continue; -#else - *(u32 *)buf = cpu_to_be32(temp); -#endif - -#ifdef S5K4ECGX_BURST_MODE -s5k4ecgx_burst_write: - len = 0; -#endif - retry_count = 5; - - while (retry_count--) { - ret = i2c_transfer(client->adapter, &msg, 1); - if (likely(ret == 1)) - break; - mdelay(10); - } - - if (unlikely(ret < 0)) { - cam_err("ERR - 0x%08x write failed err=%d\n", \ - (u32)packet, ret); - break; - } - } - - if (unlikely(ret < 0)) { - cam_err("fail to write registers!!\n"); - return -EIO; - } - - return 0; -} - -static int camera_flash_manual_ctrl(struct v4l2_subdev *sd, int mode) -{ - struct s5k4ecgx_state *state = to_state(sd); - int ret = 0; - cam_dbg(" E\n"); - if (mode == CAM_FLASH_ON) { - /* FLASH mode */ - ret = state->pdata->flash_ctrl(CAM_FLASH_ON); - state->preflash = PREFLASH_ON; - } else if (mode == CAM_FLASH_TORCH) { - /* TORCH mode */ - ret = state->pdata->flash_ctrl(CAM_FLASH_TORCH); - state->preflash = PREFLASH_ON; - } else { - ret = state->pdata->flash_ctrl(CAM_FLASH_OFF); - state->preflash = PREFLASH_OFF; - } - return ret; -} - -static int s5k4ecgx_get_exif(struct v4l2_subdev *sd) -{ - return 0; -} - -static int s5k4ecgx_get_lux(struct v4l2_subdev *sd) -{ - struct s5k4ecgx_state *state = to_state(sd); - struct i2c_client *client = v4l2_get_subdevdata(sd); - int msb = 0; - int lsb = 0; - int cur_lux = 0; - bool lowlight = false; - int err = 0; - cam_dbg(" E\n"); - err = s5k4ecgx_write(client, 0x002C7000); - CHECK_ERR(err); - err = s5k4ecgx_write(client, 0x002E2C18); - CHECK_ERR(err); - err = s5k4ecgx_read(client, 0x0F12, (unsigned short *)&lsb); - CHECK_ERR(err); - err = s5k4ecgx_read(client, 0x0F12, (unsigned short *)&msb); - CHECK_ERR(err); - - cur_lux = (msb << 16) | lsb; - - if (cur_lux >= 0x32) - lowlight = false; - else - lowlight = true; - - state->lowlight = lowlight; - - cam_info("%s, s5k4ecgx_status.lowlight is %d\n", __func__, - state->lowlight); - /*this value is under 0x0032 in low light condition */ - return err; -} - -static int s5k4ecgx_ae_stable(struct v4l2_subdev *sd) -{ - struct i2c_client *client = v4l2_get_subdevdata(sd); - struct s5k4ecgx_state *state = to_state(sd); - int val = 0; - int err = 0; - int cnt; - do { - if (state->focus.start == AUTO_FOCUS_OFF) { - cam_info("af_start_preflash: AF is cancelled!\n"); - state->focus.status = CAMERA_AF_STATUS_MAX; - break; - } - - err = s5k4ecgx_write(client, 0x002C7000); - CHECK_ERR(err); - err = s5k4ecgx_write(client, 0x002E2C74); - CHECK_ERR(err); - err = s5k4ecgx_read(client, 0x0F12, (unsigned short *)&val); - CHECK_ERR(err); - - if (val == 0x1) - break; - - s5k4ecgx_usleep(10*1000); - - } while (cnt < 40); - cam_info("%s, ret value is %d\n", __func__, - val); - - return err; -} - -static int s5k4ecgx_set_awb_lock(struct v4l2_subdev *sd, int val) -{ - struct s5k4ecgx_state *state = to_state(sd); - int err = 0; - cam_info(" E\n"); - - if (val == state->awb_lock) - return 0; - - if (val) - err = s5k4ecgx_write_regs(sd, s5k4ecgx_awb_lock_EVT1,\ - sizeof(s5k4ecgx_awb_lock_EVT1) / \ - sizeof(s5k4ecgx_awb_lock_EVT1[0])); - else - err = s5k4ecgx_write_regs(sd, s5k4ecgx_awb_unlock_EVT1,\ - sizeof(s5k4ecgx_awb_unlock_EVT1) / \ - sizeof(s5k4ecgx_awb_unlock_EVT1[0])); - - CHECK_ERR(err); - state->awb_lock = val; - cam_info("awb %s\n", val ? "lock" : "unlock"); - return err; -} - -static int s5k4ecgx_set_ae_lock(struct v4l2_subdev *sd, int val) -{ - struct s5k4ecgx_state *state = to_state(sd); - int err = 0; - cam_info(" E\n"); - - if (val == state->ae_lock) - return 0; - - if (val) - err = s5k4ecgx_write_regs(sd, s5k4ecgx_ae_lock_EVT1,\ - sizeof(s5k4ecgx_ae_lock_EVT1) / \ - sizeof(s5k4ecgx_ae_lock_EVT1[0])); - else - err = s5k4ecgx_write_regs(sd, s5k4ecgx_ae_unlock_EVT1,\ - sizeof(s5k4ecgx_ae_unlock_EVT1) / \ - sizeof(s5k4ecgx_ae_unlock_EVT1[0])); - - CHECK_ERR(err); - state->ae_lock = val; - cam_info("ae %s\n", val ? "lock" : "unlock"); - return err; -} - -static int s5k4ecgx_check_dataline(struct v4l2_subdev *sd, s32 val) -{ - cam_info("DTP %s\n", val ? "ON" : "OFF"); - return 0; -} - -static int s5k4ecgx_debug_sensor_status(struct v4l2_subdev *sd) -{ - return 0; -} - -static int s5k4ecgx_check_sensor_status(struct v4l2_subdev *sd) -{ - return 0; -} - -static inline int s5k4ecgx_check_esd(struct v4l2_subdev *sd) -{ - return 0; -} - -static int s5k4ecgx_set_preview_start(struct v4l2_subdev *sd) -{ - struct s5k4ecgx_state *state = to_state(sd); - int err = -EINVAL; - - cam_info(" E\n"); - - if ((state->runmode == RUNMODE_NOTREADY) || - (state->runmode == RUNMODE_CAPTURING)) { - cam_err("%s: ERROR - Invalid runmode\n", __func__); - return -EPERM; - } - - state->focus.status = CAMERA_AF_STATUS_MAX; - - if (state->runmode == RUNMODE_CAPTURE_STOP) { - if (state->preflash != PREFLASH_OFF) { - err = state->pdata->flash_ctrl(CAM_FLASH_OFF); - state->preflash = PREFLASH_OFF; - } - /* AE/AWB unlock */ - err = s5k4ecgx_set_ae_lock(sd, false); - err = s5k4ecgx_set_awb_lock(sd, false); - - err = s5k4ecgx_write_regs(sd, s5k4ecgx_Preview_Return_EVT1,\ - sizeof(s5k4ecgx_Preview_Return_EVT1) / \ - sizeof(s5k4ecgx_Preview_Return_EVT1[0])); - } else { - switch (state->preview_frmsizes->index) { - case S5K4ECGX_PREVIEW_1280: - err = s5k4ecgx_write_regs(sd, \ - s5k4ecgx_1280_Preview_EVT1,\ - sizeof(s5k4ecgx_1280_Preview_EVT1) / \ - sizeof(s5k4ecgx_1280_Preview_EVT1[0])); - cam_info("S5K4ECGX_PREVIEW_1280\n"); - break; - case S5K4ECGX_PREVIEW_800: - err = s5k4ecgx_write_regs(sd, \ - s5k4ecgx_800_Preview_EVT1,\ - sizeof(s5k4ecgx_800_Preview_EVT1) / \ - sizeof(s5k4ecgx_800_Preview_EVT1[0])); - cam_info("S5K4ECGX_PREVIEW_800\n"); - break; - case S5K4ECGX_PREVIEW_720: - err = s5k4ecgx_write_regs(sd, \ - s5k4ecgx_720_Preview_EVT1,\ - sizeof(s5k4ecgx_720_Preview_EVT1) / \ - sizeof(s5k4ecgx_720_Preview_EVT1[0])); - cam_info("S5K4ECGX_PREVIEW_720\n"); - break; - case S5K4ECGX_PREVIEW_320: - err = s5k4ecgx_write_regs(sd, \ - s5k4ecgx_320_Preview_EVT1,\ - sizeof(s5k4ecgx_320_Preview_EVT1) / \ - sizeof(s5k4ecgx_320_Preview_EVT1[0])); - cam_info("S5K4ECGX_PREVIEW_320\n"); - break; - case S5K4ECGX_PREVIEW_176: - err = s5k4ecgx_write_regs(sd, \ - s5k4ecgx_176_Preview_EVT1,\ - sizeof(s5k4ecgx_176_Preview_EVT1) / \ - sizeof(s5k4ecgx_176_Preview_EVT1[0])); - cam_info("S5K4ECGX_PREVIEW_640\n"); - break; - case S5K4ECGX_PREVIEW_640: - default: - err = s5k4ecgx_write_regs(sd, \ - s5k4ecgx_640_Preview_EVT1,\ - sizeof(s5k4ecgx_640_Preview_EVT1) / \ - sizeof(s5k4ecgx_640_Preview_EVT1[0])); - cam_info("S5K4ECGX_PREVIEW_640\n"); - break; - } - - if (state->check_dataline) - err = s5k4ecgx_check_dataline(sd, 1); - } - - if (unlikely(err)) { - cam_err("fail to make preview\n"); - return err; - } - - state->runmode = RUNMODE_RUNNING; - - return 0; -} - -static int s5k4ecgx_set_preview_stop(struct v4l2_subdev *sd) -{ - int err = 0; - cam_info("do nothing.\n"); - - return err; -} - -static int s5k4ecgx_check_capture_status(struct v4l2_subdev *sd) -{ - int cnt = 0; - int status = 0; - int err = 0; - struct i2c_client *client = v4l2_get_subdevdata(sd); - - msleep(20); - while (cnt < 150) { - err = s5k4ecgx_write(client, 0x002C7000); - CHECK_ERR(err); - err = s5k4ecgx_write(client, 0x002E0244); - CHECK_ERR(err); - err = s5k4ecgx_read(client, 0x0F12, (unsigned short *) - &status); - CHECK_ERR(err); - - if (!status) - break; - msleep(20); - cnt++; - } - if (cnt) - pr_info("[s5k4ecgx] wait time for capture frame : %dms\n", - cnt * 10); - if (status) - pr_info("[s5k4ecgx] take picture failed.\n"); - - return 0; -} - -static int s5k4ecgx_set_capture_start(struct v4l2_subdev *sd) -{ - struct s5k4ecgx_state *state = to_state(sd); - int err = -EINVAL; - cam_info(" E\n"); - /* check lowlight */ - if (state->lowlight) { - /* check scene mode */ - if (state->scene_mode != SCENE_MODE_NIGHTSHOT && - state->scene_mode != SCENE_MODE_FIREWORKS) { - /*low light capture start */ - err = s5k4ecgx_write_regs(sd, - s5k4ecgx_Low_Cap_On_EVT1, \ - sizeof(s5k4ecgx_Low_Cap_On_EVT1) / \ - sizeof(s5k4ecgx_Low_Cap_On_EVT1[0])); - cam_info("s5k4ecgx_set_capture_start : s5k4ecgx_Low_Cap_On_EVT1\n"); - - /* check flash on */ - if (state->flash_mode == FLASH_MODE_AUTO || - state->flash_mode == FLASH_MODE_ON) { - /* AE/AWB unlock */ - err = s5k4ecgx_set_ae_lock(sd, false); - CHECK_ERR(err); - err = s5k4ecgx_set_awb_lock(sd, false); - CHECK_ERR(err); - /* Main flash on */ - state->pdata->flash_ctrl(CAM_FLASH_ON); - state->preflash = PREFLASH_ON; - /* 200ms AE delay */ - msleep(200); - } else - s5k4ecgx_cam_delay(sd); - } - } else { - /* check flash on */ - if (state->flash_mode == FLASH_MODE_ON) { - /* AE/AWB unlock */ - err = s5k4ecgx_set_ae_lock(sd, false); - CHECK_ERR(err); - err = s5k4ecgx_set_awb_lock(sd, false); - CHECK_ERR(err); - /* Main flash on */ - state->pdata->flash_ctrl(CAM_FLASH_ON); - state->preflash = PREFLASH_ON; - /* 200ms AE delay */ - msleep(200); - } - } - - /*capture start*/ - err = s5k4ecgx_write_regs(sd, s5k4ecgx_Capture_Start_EVT1, \ - sizeof(s5k4ecgx_Capture_Start_EVT1) / \ - sizeof(s5k4ecgx_Capture_Start_EVT1[0])); - cam_info("s5k4ecgx_set_capture_start : s5k4ecgx_Capture_Start_EVT1\n"); - - state->runmode = RUNMODE_CAPTURING; - - /*capture delay*/ - err = s5k4ecgx_check_capture_status(sd); - - /* FIX later - temp code*/ - state->pdata->flash_ctrl(CAM_FLASH_OFF); - state->preflash = PREFLASH_OFF; - - if (unlikely(err)) { - cam_err("failed to make capture\n"); - return err; - } - - s5k4ecgx_get_exif(sd); - - return err; -} - -static int s5k4ecgx_set_sensor_mode(struct v4l2_subdev *sd, - struct v4l2_control *ctrl) -{ - struct s5k4ecgx_state *state = to_state(sd); - - if ((ctrl->value != SENSOR_CAMERA) && - (ctrl->value != SENSOR_MOVIE)) { - cam_err("ERR: Not support.(%d)\n", ctrl->value); - return -EINVAL; - } - - state->sensor_mode = ctrl->value; - - return 0; -} - -static int s5k4ecgx_g_fmt(struct v4l2_subdev *sd, struct v4l2_format *fmt) -{ - cam_dbg("E\n"); - return 0; -} - -static int s5k4ecgx_enum_framesizes(struct v4l2_subdev *sd, \ - struct v4l2_frmsizeenum *fsize) -{ - struct s5k4ecgx_state *state = to_state(sd); - - cam_dbg("s5k4ecgx_enum_framesizes E\n"); - - /* - * Return the actual output settings programmed to the camera - * - * The camera interface should read this value, this is the resolution - * at which the sensor would provide framedata to the camera i/f - * In case of image capture, - * this returns the default camera resolution (VGA) - */ - if (state->req_fmt.priv == V4L2_PIX_FMT_MODE_CAPTURE) { - fsize->type = V4L2_FRMSIZE_TYPE_DISCRETE; - fsize->discrete.width = state->capture_frmsizes->width; - fsize->discrete.height = state->capture_frmsizes->height; - } else { - fsize->type = V4L2_FRMSIZE_TYPE_DISCRETE; - fsize->discrete.width = state->preview_frmsizes->width; - fsize->discrete.height = state->preview_frmsizes->height; - } - - cam_info("width - %d , height - %d\n", - fsize->discrete.width, fsize->discrete.height); - - return 0; -} - -static int s5k4ecgx_try_fmt(struct v4l2_subdev *sd, struct v4l2_format *fmt) -{ - int err = 0; - - cam_dbg("E\n"); - - return err; -} - -static int s5k4ecgx_set_fmt_size(struct v4l2_subdev *sd) -{ - struct s5k4ecgx_state *state = to_state(sd); - int err = 0; - cam_info("s5k4ecgx_set_fmt_size E\n"); - - if (state->req_fmt.priv == V4L2_PIX_FMT_MODE_CAPTURE) { - switch (state->capture_frmsizes->index) { - case S5K4ECGX_CAPTURE_5MP: - err = s5k4ecgx_write_regs(sd, - s5k4ecgx_5M_Capture_EVT1,\ - sizeof(s5k4ecgx_5M_Capture_EVT1) / - sizeof(s5k4ecgx_5M_Capture_EVT1[0])); - cam_info("s5k4ecgx_set_fmt_size : S5K4ECGX_CAPTURE_5MP\n"); - break; - case S5K4ECGX_CAPTURE_3MP: - err = s5k4ecgx_write_regs(sd, - s5k4ecgx_3M_Capture_EVT1, - sizeof(s5k4ecgx_3M_Capture_EVT1) / - sizeof(s5k4ecgx_3M_Capture_EVT1[0])); - cam_info("s5k4ecgx_set_fmt_size : S5K4ECGX_CAPTURE_3MP\n"); - break; - case S5K4ECGX_CAPTURE_2MP: - err = s5k4ecgx_write_regs(sd, - s5k4ecgx_2M_Capture_EVT1, - sizeof(s5k4ecgx_2M_Capture_EVT1) / - sizeof(s5k4ecgx_2M_Capture_EVT1[0])); - cam_info("s5k4ecgx_set_fmt_size : S5K4ECGX_CAPTURE_2MP\n"); - break; - case S5K4ECGX_CAPTURE_1MP: - err = s5k4ecgx_write_regs(sd, - s5k4ecgx_1M_Capture_EVT1, - sizeof(s5k4ecgx_1M_Capture_EVT1) / - sizeof(s5k4ecgx_1M_Capture_EVT1[0])); - cam_info("s5k4ecgx_set_fmt_size : S5K4ECGX_CAPTURE_1MP\n"); - break; - case S5K4ECGX_CAPTURE_XGA: - err = s5k4ecgx_write_regs(sd, - s5k4ecgx_XGA_Capture_EVT1, - sizeof(s5k4ecgx_XGA_Capture_EVT1) / - sizeof(s5k4ecgx_XGA_Capture_EVT1[0])); - cam_info("s5k4ecgx_set_fmt_size : S5K4ECGX_CAPTURE_XGA\n"); - break; - case S5K4ECGX_CAPTURE_VGA: - err = s5k4ecgx_write_regs(sd, - s5k4ecgx_VGA_Capture_EVT1, - sizeof(s5k4ecgx_VGA_Capture_EVT1) / - sizeof(s5k4ecgx_VGA_Capture_EVT1[0])); - cam_info("s5k4ecgx_set_fmt_size : S5K4ECGX_CAPTURE_VGA\n"); - break; - default: - cam_err("ERR: Invalid capture size\n"); - break; - } - } - - if (unlikely(err < 0)) { - cam_err("i2c_write for set framerate\n"); - return -EIO; - } - - return err; -} - -static int s5k4ecgx_s_fmt(struct v4l2_subdev *sd, \ - struct v4l2_mbus_framefmt *ffmt) -{ - struct s5k4ecgx_state *state = to_state(sd); - u32 num_entries = 0; - u32 i; - u32 err = 0; - u32 width, height = 0; - - cam_info("s5k4ecgx_s_fmt E\n"); - /* - * Just copying the requested format as of now. - * We need to check here what are the formats the camera support, and - * set the most appropriate one according to the request from FIMC - */ - - width = state->req_fmt.width = ffmt->width; - height = state->req_fmt.height = ffmt->height; - - if (ffmt->colorspace == V4L2_COLORSPACE_JPEG) - state->req_fmt.priv = V4L2_PIX_FMT_MODE_CAPTURE; - else - state->req_fmt.priv = V4L2_PIX_FMT_MODE_PREVIEW; - - switch (state->req_fmt.priv) { - case V4L2_PIX_FMT_MODE_PREVIEW: - cam_info("V4L2_PIX_FMT_MODE_PREVIEW\n"); - num_entries = ARRAY_SIZE(preview_frmsizes); - for (i = 0; i < num_entries; i++) { - if (width == preview_frmsizes[i].width && - height == preview_frmsizes[i].height) { - state->preview_frmsizes = &preview_frmsizes[i]; - break; - } - if (i == (num_entries - 1)) - state->preview_frmsizes = &preview_frmsizes[0]; - } - break; - - case V4L2_PIX_FMT_MODE_CAPTURE: - cam_info("V4L2_PIX_FMT_MODE_CAPTURE\n"); - num_entries = ARRAY_SIZE(capture_frmsizes); - for (i = 0; i < num_entries; i++) { - if (width == capture_frmsizes[i].width && \ - height == capture_frmsizes[i].height) { - state->capture_frmsizes = &capture_frmsizes[i]; - break; - } - } - break; - - default: - cam_err - ("ERR(EINVAL) : Invalid capture size width(%d), height(%d)\n",\ - ffmt->width, ffmt->height); - return -EINVAL; - } - - /*set frame size of preview or capture*/ - err = s5k4ecgx_set_fmt_size(sd); - - return err; -} - -static int s5k4ecgx_set_frame_rate(struct v4l2_subdev *sd, u32 fps) -{ - int err = 0; - - cam_info("frame rate %d\n\n", fps); - - switch (fps) { - case 7: - err = s5k4ecgx_write_regs(sd, s5k4ecgx_FPS_7_EVT1, - sizeof(s5k4ecgx_FPS_7_EVT1) / \ - sizeof(s5k4ecgx_FPS_7_EVT1[0])); - break; - case 15: - err = s5k4ecgx_write_regs(sd, s5k4ecgx_FPS_15_EVT1, - sizeof(s5k4ecgx_FPS_15_EVT1) / \ - sizeof(s5k4ecgx_FPS_15_EVT1[0])); - - break; - case 20: - err = s5k4ecgx_write_regs(sd, s5k4ecgx_FPS_20_EVT1, - sizeof(s5k4ecgx_FPS_20_EVT1) / \ - sizeof(s5k4ecgx_FPS_20_EVT1[0])); - - break; - case 24: - err = s5k4ecgx_write_regs(sd, s5k4ecgx_FPS_24_EVT1, - sizeof(s5k4ecgx_FPS_24_EVT1) / \ - sizeof(s5k4ecgx_FPS_24_EVT1[0])); - break; - case 30: - err = s5k4ecgx_write_regs(sd, s5k4ecgx_FPS_30_EVT1, - sizeof(s5k4ecgx_FPS_30_EVT1) / \ - sizeof(s5k4ecgx_FPS_30_EVT1[0])); - break; - default: - cam_err("ERR: Invalid framerate\n"); - break; - } - - if (unlikely(err < 0)) { - cam_err("i2c_write for set framerate\n"); - return -EIO; - } - - return err; -} - -static int s5k4ecgx_g_parm(struct v4l2_subdev *sd,\ - struct v4l2_streamparm *parms) -{ - int err = 0; - - cam_dbg("E\n"); - - return err; -} - -static int s5k4ecgx_s_parm(struct v4l2_subdev *sd, \ - struct v4l2_streamparm *parms) -{ - int err = 0; - u32 fps = 0; - u32 denom = parms->parm.capture.timeperframe.denominator; - u32 numer = parms->parm.capture.timeperframe.numerator; - struct s5k4ecgx_state *state = to_state(sd); - - cam_dbg("E\n"); - - if (denom >= 1 && numer == 1) - fps = denom / numer; - else if (denom == 1 && numer == 0) - fps = 0; - - if (fps != state->set_fps) { - if (fps < 0 && fps > 30) { - cam_err("invalid frame rate %d\n", fps); - fps = 30; - } - state->req_fps = fps; - - if (state->initialized) { - err = s5k4ecgx_set_frame_rate(sd, state->req_fps); - if (err >= 0) - state->set_fps = state->req_fps; - } - - } - - return err; -} - -static int s5k4ecgx_control_stream(struct v4l2_subdev *sd, int cmd) -{ - struct s5k4ecgx_state *state = to_state(sd); - int err = 0; - - switch (cmd) { - case STREAM_START: - cam_warn("WARN: do nothing\n"); - break; - - case STREAM_STOP: - cam_dbg("stream stop!!!\n"); - if (state->runmode == RUNMODE_CAPTURING) - state->runmode = RUNMODE_CAPTURE_STOP; - - break; - - default: - cam_err("ERR: Invalid cmd\n"); - break; - } - - if (unlikely(err)) - cam_err("failed to stream start(stop)\n"); - - return err; -} - -static int s5k4ecgx_init(struct v4l2_subdev *sd, u32 val) -{ - struct s5k4ecgx_state *state = to_state(sd); - int err = -EINVAL; - - cam_dbg("E\n"); - - /* set initial regster value */ - if (state->sensor_mode == SENSOR_CAMERA) { - cam_info("load camera common setting\n"); - err = s5k4ecgx_write_regs(sd, s5k4ecgx_init_reg1_EVT1, - sizeof(s5k4ecgx_init_reg1_EVT1) / \ - sizeof(s5k4ecgx_init_reg1_EVT1[0])); - - msleep(20); - - err |= s5k4ecgx_write_regs(sd, s5k4ecgx_init_reg2_EVT1, - sizeof(s5k4ecgx_init_reg2_EVT1) / \ - sizeof(s5k4ecgx_init_reg2_EVT1[0])); - } else { - cam_info("load recording setting\n"); - err = s5k4ecgx_write_regs(sd, s5k4ecgx_init_reg1_EVT1, - sizeof(s5k4ecgx_init_reg1_EVT1) / \ - sizeof(s5k4ecgx_init_reg1_EVT1[0])); - - msleep(20); - - err = s5k4ecgx_write_regs(sd, s5k4ecgx_init_reg2_EVT1, - sizeof(s5k4ecgx_init_reg2_EVT1) / \ - sizeof(s5k4ecgx_init_reg2_EVT1[0])); - } - - if (unlikely(err)) { - cam_err("failed to init\n"); - return err; - } - - state->runmode = RUNMODE_INIT; - - /* We stop stream-output from sensor when starting camera. */ - err = s5k4ecgx_control_stream(sd, STREAM_STOP); - if (unlikely(err < 0)) - return err; - msleep(150); - - state->initialized = 1; - - return 0; -} - -static int s5k4ecgx_s_stream(struct v4l2_subdev *sd, int enable) -{ - struct s5k4ecgx_state *state = to_state(sd); - int err = 0; - - cam_info("stream mode = %d\n", enable); - - switch (enable) { - case STREAM_MODE_CAM_OFF: - if (state->sensor_mode == SENSOR_CAMERA) { - if (state->check_dataline) - err = s5k4ecgx_check_dataline(sd, 0); - else - err = s5k4ecgx_control_stream(sd, STREAM_STOP); - } - break; - - case STREAM_MODE_CAM_ON: - /* The position of this code need to be adjusted later */ - if ((state->sensor_mode == SENSOR_CAMERA) - && (state->req_fmt.priv == V4L2_PIX_FMT_MODE_CAPTURE)) - err = s5k4ecgx_set_capture_start(sd); - else - err = s5k4ecgx_set_preview_start(sd); - break; - - case STREAM_MODE_MOVIE_ON: - cam_dbg("do nothing(movie on)!!\n"); - break; - - case STREAM_MODE_MOVIE_OFF: - cam_dbg("do nothing(movie off)!!\n"); - break; - - default: - cam_err("ERR: Invalid stream mode\n"); - break; - } - - if (unlikely(err < 0)) { - cam_err("ERR: faild\n"); - return err; - } - - return 0; -} - -static int s5k4ecgx_get_af_1stsearch(struct v4l2_subdev *sd, - struct v4l2_control *ctrl) -{ - struct i2c_client *client = v4l2_get_subdevdata(sd); - int af_status = -1; - int err = 0; - int ret = 0; - cam_info("- Start\n"); - err = s5k4ecgx_write(client, 0x002C7000); - CHECK_ERR(err); - err = s5k4ecgx_write(client, 0x002E2EEE); - CHECK_ERR(err); - err = s5k4ecgx_read(client, 0x0F12, (unsigned short *)&af_status); - CHECK_ERR(err); - - switch (af_status & 0xff) { - case AF_PROGRESS_1ST: - ret = CAMERA_AF_STATUS_IN_PROGRESS; - break; - - case AF_SUCCESS_1ST: - ret = CAMERA_AF_STATUS_SUCCESS; - break; - - case AF_FAIL_1ST: - default: - ret = CAMERA_AF_STATUS_FAIL; - break; - } - - ctrl->value = ret; - cam_info("- END%d\n", ret); - return ret; -} - -static int s5k4ecgx_get_af_2ndsearch(struct v4l2_subdev *sd, - struct v4l2_control *ctrl) -{ - struct i2c_client *client = v4l2_get_subdevdata(sd); - int af_status = -1; - int err = 0; - int ret = 0; - cam_info(" E\n"); - err = s5k4ecgx_write(client, 0x002C7000); - CHECK_ERR(err); - err = s5k4ecgx_write(client, 0x002E2207); - CHECK_ERR(err); - err = s5k4ecgx_read(client, 0x0F12, (unsigned short *)&af_status); - CHECK_ERR(err); - - switch (af_status & 0xff) { - case AF_SUCCESS_2ND: - ret = CAMERA_AF_STATUS_SUCCESS; - break; - - case AF_PROGRESS_2ND: - default: - ret = CAMERA_AF_STATUS_IN_PROGRESS; - break; - } - - ctrl->value = ret; - cam_info(" - END%d\n", ret); - return ret; -} - -static int s5k4ecgx_get_af_result(struct v4l2_subdev *sd, - struct v4l2_control *ctrl) -{ - struct s5k4ecgx_state *state = to_state(sd); - int status = 0; - cam_info(" - START\n"); - if (state->focus.first == true) { - state->focus.first = false; - s5k4ecgx_cam_delay(sd); - } - - /* 1st search af */ - s5k4ecgx_cam_delay(sd); - - status = s5k4ecgx_get_af_1stsearch(sd, ctrl); - - if (status != CAMERA_AF_STATUS_SUCCESS) { - state->focus.status = status; - if (status == CAMERA_AF_STATUS_FAIL) - state->pdata->flash_ctrl(CAM_FLASH_OFF); - state->preflash = PREFLASH_OFF; - return status; - } - - /* 2nd search af */ - s5k4ecgx_cam_delay(sd); - - status = s5k4ecgx_get_af_2ndsearch(sd, ctrl); - - state->focus.status = status; - state->pdata->flash_ctrl(CAM_FLASH_OFF); - state->preflash = PREFLASH_OFF; - - cam_info("af_status = %d\n", status); - cam_info(" - END\n"); - return 0; -} - - -static int s5k4ecgx_g_ctrl(struct v4l2_subdev *sd, struct v4l2_control *ctrl) -{ - struct s5k4ecgx_state *state = to_state(sd); - int err = 0; - - /* V4L2_CID_PRIVATE_BASE==0x08000000 */ - /* V4L2_CID_CAMERA_CLASS_BASE==0x009a0900 */ - /* V4L2_CID_BASE==0x00980900 */ - - if (ctrl->id > V4L2_CID_PRIVATE_BASE) - cam_dbg("ctrl->id:%d, value=%d V4L2_CID_PRIVATE_BASE\n",\ - ctrl->id - V4L2_CID_PRIVATE_BASE, ctrl->value); - else if (ctrl->id > V4L2_CID_CAMERA_CLASS_BASE) - cam_dbg("ctrl->id:%d, value=%d V4L2_CID_CAMERA_CLASS_BASE\n",\ - ctrl->id - V4L2_CID_CAMERA_CLASS_BASE, ctrl->value); - else - cam_dbg("ctrl->id:%d, value=%d V4L2_CID_BASE\n", \ - ctrl->id - V4L2_CID_BASE, ctrl->value); - - mutex_lock(&state->ctrl_lock); - - switch (ctrl->id) { - case V4L2_CID_CAMERA_AUTO_FOCUS_RESULT: - ctrl->value = state->focus.status; - break; - - case V4L2_CID_CAM_JPEG_MEMSIZE: - ctrl->value = S5K4ECGX_INTLV_DATA_MAXSIZE; - break; - - case V4L2_CID_CAM_JPEG_MAIN_SIZE: - ctrl->value = S5K4ECGX_INTLV_DATA_MAXSIZE; - break; - - case V4L2_CID_CAM_JPEG_MAIN_OFFSET: - ctrl->value = 0; - break; - - case V4L2_CID_CAM_JPEG_THUMB_SIZE: - ctrl->value = 0; - break; - - case V4L2_CID_CAM_JPEG_THUMB_OFFSET: - ctrl->value = 0; - break; - - case V4L2_CID_CAM_JPEG_POSTVIEW_OFFSET: - ctrl->value = 0; - break; - - case V4L2_CID_CAMERA_EXIF_FLASH: - ctrl->value = state->exif.flash; - break; - - case V4L2_CID_CAMERA_ISO: - ctrl->value = state->exif.iso; - break; - - case V4L2_CID_CAMERA_EXIF_ISO: - ctrl->value = state->exif.iso; - break; - - case V4L2_CID_CAMERA_EXIF_TV: - ctrl->value = state->exif.tv; - break; - - case V4L2_CID_CAMERA_EXIF_BV: - ctrl->value = state->exif.bv; - break; - - case V4L2_CID_CAMERA_EXIF_EBV: - ctrl->value = state->exif.ebv; - break; - - case V4L2_CID_WHITE_BALANCE_PRESET: - ctrl->value = state->wb_mode; - break; - - default: - cam_err("no such control id %d\n", - ctrl->id - V4L2_CID_PRIVATE_BASE); - break; - } - - mutex_unlock(&state->ctrl_lock); - - return err; -} - -static int s5k4ecgx_set_iso(struct v4l2_subdev *sd, struct v4l2_control *ctrl) -{ - int err; - struct s5k4ecgx_state *state = to_state(sd); - cam_dbg("E, value %d\n", ctrl->value); - -retry: - switch (ctrl->value) { - case ISO_AUTO: - err = s5k4ecgx_write_regs(sd, s5k4ecgx_ISO_Auto_EVT1, \ - sizeof(s5k4ecgx_ISO_Auto_EVT1) / \ - sizeof(s5k4ecgx_ISO_Auto_EVT1[0])); - break; - - case ISO_50: - err = s5k4ecgx_write_regs(sd, s5k4ecgx_ISO_50_EVT1, \ - sizeof(s5k4ecgx_ISO_50_EVT1) / \ - sizeof(s5k4ecgx_ISO_50_EVT1[0])); - break; - - case ISO_100: - err = s5k4ecgx_write_regs(sd, s5k4ecgx_ISO_100_EVT1, \ - sizeof(s5k4ecgx_ISO_100_EVT1) / \ - sizeof(s5k4ecgx_ISO_100_EVT1[0])); - break; - - case ISO_200: - err = s5k4ecgx_write_regs(sd, s5k4ecgx_ISO_200_EVT1, \ - sizeof(s5k4ecgx_ISO_200_EVT1) / \ - sizeof(s5k4ecgx_ISO_200_EVT1[0])); - break; - - case ISO_400: - err = s5k4ecgx_write_regs(sd, s5k4ecgx_ISO_400_EVT1, \ - sizeof(s5k4ecgx_ISO_400_EVT1) / \ - sizeof(s5k4ecgx_ISO_400_EVT1[0])); - break; - - default: - cam_warn("invalid value, %d\n", ctrl->value); - ctrl->value = ISO_AUTO; - goto retry; - } - - state->exif.iso = ctrl->value; - - cam_dbg("X\n"); - return 0; -} - -static int s5k4ecgx_set_metering(struct v4l2_subdev *sd, int val) -{ - int err; - cam_dbg("E, value %d\n", val); - -retry: - switch (val) { - case METERING_CENTER: - err = s5k4ecgx_write_regs(sd, s5k4ecgx_Metering_Center_EVT1, \ - sizeof(s5k4ecgx_Metering_Center_EVT1) / \ - sizeof(s5k4ecgx_Metering_Center_EVT1[0])); - break; - - case METERING_SPOT: - err = s5k4ecgx_write_regs(sd, s5k4ecgx_Metering_Spot_EVT1, \ - sizeof(s5k4ecgx_Metering_Spot_EVT1) / \ - sizeof(s5k4ecgx_Metering_Spot_EVT1[0])); - break; - - case METERING_MATRIX: - err = s5k4ecgx_write_regs(sd, s5k4ecgx_Metering_Matrix_EVT1, \ - sizeof(s5k4ecgx_Metering_Matrix_EVT1) / \ - sizeof(s5k4ecgx_Metering_Matrix_EVT1[0])); - break; - - default: - cam_warn("invalid value, %d\n", val); - val = METERING_CENTER; - goto retry; - } - - cam_dbg("X\n"); - return 0; -} - -static int s5k4ecgx_set_exposure(struct v4l2_subdev *sd, \ - struct v4l2_control *ctrl) -{ - struct s5k4ecgx_state *state = to_state(sd); - int err = -EINVAL; - - cam_dbg("E\n"); - - if (state->check_dataline) - return 0; - - switch (ctrl->value) { - case 0: - err = s5k4ecgx_write_regs(sd, s5k4ecgx_EV_Minus_4_EVT1, \ - sizeof(s5k4ecgx_EV_Minus_4_EVT1) / \ - sizeof(s5k4ecgx_EV_Minus_4_EVT1[0])); - break; - case 1: - err = s5k4ecgx_write_regs(sd, s5k4ecgx_EV_Minus_3_EVT1, \ - sizeof(s5k4ecgx_EV_Minus_3_EVT1) / \ - sizeof(s5k4ecgx_EV_Minus_3_EVT1[0])); - - break; - case 2: - err = s5k4ecgx_write_regs(sd, s5k4ecgx_EV_Minus_2_EVT1, \ - sizeof(s5k4ecgx_EV_Minus_2_EVT1) / \ - sizeof(s5k4ecgx_EV_Minus_2_EVT1[0])); - break; - case 3: - err = s5k4ecgx_write_regs(sd, s5k4ecgx_EV_Minus_1_EVT1, \ - sizeof(s5k4ecgx_EV_Minus_1_EVT1) / \ - sizeof(s5k4ecgx_EV_Minus_1_EVT1[0])); - break; - case 4: - err = s5k4ecgx_write_regs(sd, s5k4ecgx_EV_Default_EVT1, \ - sizeof(s5k4ecgx_EV_Default_EVT1) / \ - sizeof(s5k4ecgx_EV_Default_EVT1[0])); - break; - case 5: - err = s5k4ecgx_write_regs(sd, s5k4ecgx_EV_Plus_1_EVT1, \ - sizeof(s5k4ecgx_EV_Plus_1_EVT1) / \ - sizeof(s5k4ecgx_EV_Plus_1_EVT1[0])); - break; - case 6: - err = s5k4ecgx_write_regs(sd, s5k4ecgx_EV_Plus_2_EVT1, \ - sizeof(s5k4ecgx_EV_Plus_2_EVT1) / \ - sizeof(s5k4ecgx_EV_Plus_2_EVT1[0])); - break; - case 7: - err = s5k4ecgx_write_regs(sd, s5k4ecgx_EV_Plus_3_EVT1, \ - sizeof(s5k4ecgx_EV_Plus_3_EVT1) / \ - sizeof(s5k4ecgx_EV_Plus_3_EVT1[0])); - break; - case 8: - err = s5k4ecgx_write_regs(sd, s5k4ecgx_EV_Plus_4_EVT1, \ - sizeof(s5k4ecgx_EV_Plus_4_EVT1) / \ - sizeof(s5k4ecgx_EV_Plus_4_EVT1[0])); - break; - default: - cam_err("ERR: invalid brightness(%d)\n", ctrl->value); - return err; - break; - } - - if (unlikely(err < 0)) { - cam_err("ERR: i2c_write for set brightness\n"); - return -EIO; - } - - return 0; -} - -static int s5k4ecgx_set_whitebalance(struct v4l2_subdev *sd, int val) -{ - int err; - struct s5k4ecgx_state *state = to_state(sd); - cam_dbg("E, value %d\n", val); - -retry: - switch (val) { - case WHITE_BALANCE_AUTO: - err = s5k4ecgx_write_regs(sd, s5k4ecgx_WB_Auto_EVT1, \ - sizeof(s5k4ecgx_WB_Auto_EVT1) / \ - sizeof(s5k4ecgx_WB_Auto_EVT1[0])); - break; - - case WHITE_BALANCE_SUNNY: - err = s5k4ecgx_write_regs(sd, s5k4ecgx_WB_Sunny_EVT1, \ - sizeof(s5k4ecgx_WB_Sunny_EVT1) / \ - sizeof(s5k4ecgx_WB_Sunny_EVT1[0])); - break; - - case WHITE_BALANCE_CLOUDY: - err = s5k4ecgx_write_regs(sd, s5k4ecgx_WB_Cloudy_EVT1, \ - sizeof(s5k4ecgx_WB_Cloudy_EVT1) / \ - sizeof(s5k4ecgx_WB_Cloudy_EVT1[0])); - break; - - case WHITE_BALANCE_TUNGSTEN: - err = s5k4ecgx_write_regs(sd, s5k4ecgx_WB_Tungsten_EVT1, \ - sizeof(s5k4ecgx_WB_Tungsten_EVT1) / \ - sizeof(s5k4ecgx_WB_Tungsten_EVT1[0])); - break; - - case WHITE_BALANCE_FLUORESCENT: - err = s5k4ecgx_write_regs(sd, s5k4ecgx_WB_Fluorescent_EVT1, \ - sizeof(s5k4ecgx_WB_Fluorescent_EVT1) / \ - sizeof(s5k4ecgx_WB_Fluorescent_EVT1[0])); - break; - - default: - cam_warn("invalid value, %d\n", val); - val = WHITE_BALANCE_AUTO; - goto retry; - } - - state->wb_mode = val; - cam_dbg("X\n"); - return 0; -} - -static int s5k4ecgx_set_scene_mode(struct v4l2_subdev *sd, int val) -{ - int err; - cam_dbg("E, value %d\n", val); - -retry: - switch (val) { - case SCENE_MODE_NONE: - err = s5k4ecgx_write_regs(sd, s5k4ecgx_Scene_Default_EVT1, \ - sizeof(s5k4ecgx_Scene_Default_EVT1) / \ - sizeof(s5k4ecgx_Scene_Default_EVT1[0])); - break; - - case SCENE_MODE_PORTRAIT: - err = s5k4ecgx_write_regs(sd, s5k4ecgx_Scene_Portrait_EVT1, \ - sizeof(s5k4ecgx_Scene_Portrait_EVT1) / \ - sizeof(s5k4ecgx_Scene_Portrait_EVT1[0])); - break; - - case SCENE_MODE_LANDSCAPE: - err = s5k4ecgx_write_regs(sd, s5k4ecgx_Scene_Landscape_EVT1, \ - sizeof(s5k4ecgx_Scene_Landscape_EVT1) / \ - sizeof(s5k4ecgx_Scene_Landscape_EVT1[0])); - break; - - case SCENE_MODE_SPORTS: - err = s5k4ecgx_write_regs(sd, s5k4ecgx_Scene_Sports_EVT1, \ - sizeof(s5k4ecgx_Scene_Sports_EVT1) / \ - sizeof(s5k4ecgx_Scene_Sports_EVT1[0])); - break; - - case SCENE_MODE_PARTY_INDOOR: - err = s5k4ecgx_write_regs(sd, s5k4ecgx_Scene_Party_Indoor_EVT1,\ - sizeof(s5k4ecgx_Scene_Party_Indoor_EVT1) / \ - sizeof(s5k4ecgx_Scene_Party_Indoor_EVT1[0])); - break; - - case SCENE_MODE_BEACH_SNOW: - err = s5k4ecgx_write_regs(sd, s5k4ecgx_Scene_Beach_Snow_EVT1, \ - sizeof(s5k4ecgx_Scene_Beach_Snow_EVT1) / \ - sizeof(s5k4ecgx_Scene_Beach_Snow_EVT1[0])); - break; - - case SCENE_MODE_SUNSET: - err = s5k4ecgx_write_regs(sd, s5k4ecgx_Scene_Sunset_EVT1, \ - sizeof(s5k4ecgx_Scene_Sunset_EVT1) / \ - sizeof(s5k4ecgx_Scene_Sunset_EVT1[0])); - break; - - case SCENE_MODE_DUSK_DAWN: - err = s5k4ecgx_write_regs(sd, s5k4ecgx_Scene_Duskdawn_EVT1, \ - sizeof(s5k4ecgx_Scene_Duskdawn_EVT1) / \ - sizeof(s5k4ecgx_Scene_Duskdawn_EVT1[0])); - break; - - case SCENE_MODE_FALL_COLOR: - err = s5k4ecgx_write_regs(sd, s5k4ecgx_Scene_Fall_Color_EVT1, \ - sizeof(s5k4ecgx_Scene_Fall_Color_EVT1) / \ - sizeof(s5k4ecgx_Scene_Fall_Color_EVT1[0])); - break; - - case SCENE_MODE_NIGHTSHOT: - err = s5k4ecgx_write_regs(sd, s5k4ecgx_Scene_Nightshot_EVT1, \ - sizeof(s5k4ecgx_Scene_Nightshot_EVT1) / \ - sizeof(s5k4ecgx_Scene_Nightshot_EVT1[0])); - break; - - case SCENE_MODE_BACK_LIGHT: - err = s5k4ecgx_write_regs(sd, s5k4ecgx_Scene_Backlight_EVT1, \ - sizeof(s5k4ecgx_Scene_Backlight_EVT1) / \ - sizeof(s5k4ecgx_Scene_Backlight_EVT1[0])); - break; - - case SCENE_MODE_FIREWORKS: - err = s5k4ecgx_write_regs(sd, s5k4ecgx_Scene_Fireworks_EVT1, \ - sizeof(s5k4ecgx_Scene_Fireworks_EVT1) / \ - sizeof(s5k4ecgx_Scene_Fireworks_EVT1[0])); - break; - - case SCENE_MODE_TEXT: - err = s5k4ecgx_write_regs(sd, s5k4ecgx_Scene_Text_EVT1, \ - sizeof(s5k4ecgx_Scene_Text_EVT1) / \ - sizeof(s5k4ecgx_Scene_Text_EVT1[0])); - break; - - case SCENE_MODE_CANDLE_LIGHT: - err = s5k4ecgx_write_regs(sd, \ - s5k4ecgx_Scene_Candle_Light_EVT1, \ - sizeof(s5k4ecgx_Scene_Candle_Light_EVT1) / \ - sizeof(s5k4ecgx_Scene_Candle_Light_EVT1[0])); - break; - - default: - cam_warn("invalid value, %d\n", val); - val = SCENE_MODE_NONE; - goto retry; - } - - cam_dbg("X\n"); - return 0; -} - -static int s5k4ecgx_set_effect(struct v4l2_subdev *sd, int val) -{ - int err; - cam_dbg("E, value %d\n", val); - -retry: - switch (val) { - case IMAGE_EFFECT_NONE: - err = s5k4ecgx_write_regs(sd, s5k4ecgx_Effect_Normal_EVT1, \ - sizeof(s5k4ecgx_Effect_Normal_EVT1) / \ - sizeof(s5k4ecgx_Effect_Normal_EVT1[0])); - break; - - case IMAGE_EFFECT_SEPIA: - err = s5k4ecgx_write_regs(sd, s5k4ecgx_Effect_Sepia_EVT1, \ - sizeof(s5k4ecgx_Effect_Sepia_EVT1) / \ - sizeof(s5k4ecgx_Effect_Sepia_EVT1[0])); - break; - - case IMAGE_EFFECT_BNW: - err = s5k4ecgx_write_regs(sd, \ - s5k4ecgx_Effect_Black_White_EVT1, \ - sizeof(s5k4ecgx_Effect_Black_White_EVT1) / \ - sizeof(s5k4ecgx_Effect_Black_White_EVT1[0])); - break; - - case IMAGE_EFFECT_NEGATIVE: - err = s5k4ecgx_write_regs(sd, s5k4ecgx_Effect_Negative_EVT1, \ - sizeof(s5k4ecgx_Effect_Negative_EVT1) / \ - sizeof(s5k4ecgx_Effect_Negative_EVT1[0])); - break; - - case IMAGE_EFFECT_AQUA: - err = s5k4ecgx_write_regs(sd, \ - s5k4ecgx_Effect_Solarization_EVT1, \ - sizeof(s5k4ecgx_Effect_Solarization_EVT1) / \ - sizeof(s5k4ecgx_Effect_Solarization_EVT1[0])); - break; - - default: - cam_warn("invalid value, %d\n", val); - val = IMAGE_EFFECT_NONE; - goto retry; - } - - cam_dbg("X\n"); - return 0; -} - -static int s5k4ecgx_set_wdr(struct v4l2_subdev *sd, int val) -{ - int err; - cam_dbg("E, value %d\n", val); - -retry: - switch (val) { - case WDR_OFF: - err = s5k4ecgx_write_regs(sd, s5k4ecgx_WDR_off_EVT1, \ - sizeof(s5k4ecgx_WDR_off_EVT1) / \ - sizeof(s5k4ecgx_WDR_off_EVT1[0])); - break; - - case WDR_ON: - err = s5k4ecgx_write_regs(sd, s5k4ecgx_WDR_on_EVT1, \ - sizeof(s5k4ecgx_WDR_on_EVT1) / \ - sizeof(s5k4ecgx_WDR_on_EVT1[0])); - break; - - default: - cam_warn("invalid value, %d\n", val); - val = WDR_OFF; - goto retry; - } - - cam_dbg("X\n"); - return 0; -} - -static int s5k4ecgx_set_jpeg_quality(struct v4l2_subdev *sd, int val) -{ - int err = -1; - cam_dbg("E, value %d\n", val); - - if (val <= 65) /* Normal */ - err = s5k4ecgx_write_regs(sd, s5k4ecgx_Jpeg_Quality_Low_EVT1,\ - sizeof(s5k4ecgx_Jpeg_Quality_Low_EVT1) / \ - sizeof(s5k4ecgx_Jpeg_Quality_Low_EVT1[0])); - else if (val <= 75) /* Fine */ - err = s5k4ecgx_write_regs - (sd, s5k4ecgx_Jpeg_Quality_Normal_EVT1,\ - sizeof(s5k4ecgx_Jpeg_Quality_Normal_EVT1) / \ - sizeof(s5k4ecgx_Jpeg_Quality_Normal_EVT1[0])); - else /* Superfine */ - err = s5k4ecgx_write_regs(sd, s5k4ecgx_Jpeg_Quality_High_EVT1,\ - sizeof(s5k4ecgx_Jpeg_Quality_High_EVT1) / \ - sizeof(s5k4ecgx_Jpeg_Quality_High_EVT1[0])); - - CHECK_ERR(err); - - cam_dbg("X\n"); - return 0; -} - -static int s5k4ecgx_return_focus(struct v4l2_subdev *sd) -{ - struct s5k4ecgx_state *state = to_state(sd); - int err = -EINVAL; - - cam_info("E\n"); - - switch (state->focus.mode) { - case FOCUS_MODE_MACRO: - err = s5k4ecgx_write_regs(sd, s5k4ecgx_AF_Macro_mode_1_EVT1,\ - sizeof(s5k4ecgx_AF_Macro_mode_1_EVT1) / \ - sizeof(s5k4ecgx_AF_Macro_mode_1_EVT1[0])); - - s5k4ecgx_cam_delay(sd); - - err = s5k4ecgx_write_regs(sd, s5k4ecgx_AF_Macro_mode_2_EVT1,\ - sizeof(s5k4ecgx_AF_Macro_mode_2_EVT1) / \ - sizeof(s5k4ecgx_AF_Macro_mode_2_EVT1[0])); - - s5k4ecgx_cam_delay(sd); - - err = s5k4ecgx_write_regs(sd, s5k4ecgx_AF_Macro_mode_3_EVT1,\ - sizeof(s5k4ecgx_AF_Macro_mode_3_EVT1) / \ - sizeof(s5k4ecgx_AF_Macro_mode_3_EVT1[0])); - - break; - - default: - err = s5k4ecgx_write_regs(sd, s5k4ecgx_AF_Normal_mode_1_EVT1,\ - sizeof(s5k4ecgx_AF_Normal_mode_1_EVT1) / \ - sizeof(s5k4ecgx_AF_Normal_mode_1_EVT1[0])); - - s5k4ecgx_cam_delay(sd); - - err = s5k4ecgx_write_regs(sd, s5k4ecgx_AF_Normal_mode_2_EVT1,\ - sizeof(s5k4ecgx_AF_Normal_mode_2_EVT1) / \ - sizeof(s5k4ecgx_AF_Normal_mode_2_EVT1[0])); - - s5k4ecgx_cam_delay(sd); - - err = s5k4ecgx_write_regs(sd, s5k4ecgx_AF_Normal_mode_3_EVT1,\ - sizeof(s5k4ecgx_AF_Normal_mode_3_EVT1) / \ - sizeof(s5k4ecgx_AF_Normal_mode_3_EVT1[0])); - - break; - } - - CHECK_ERR(err); - return 0; -} - -/* PX: Stop AF */ -static int s5k4ecgx_stop_af(struct v4l2_subdev *sd, s32 touch) -{ - struct s5k4ecgx_state *state = to_state(sd); - int err = 0; - - cam_info("E\n"); - mutex_lock(&state->af_lock); - - switch (state->focus.status) { - case CAMERA_AF_STATUS_FAIL: - case CAMERA_AF_STATUS_SUCCESS: - cam_dbg("Stop AF, focus mode %d, AF result %d\n", - state->focus.mode, state->focus.status); - - err = s5k4ecgx_set_ae_lock(sd, false); - err = s5k4ecgx_set_awb_lock(sd, false); - if (unlikely(err)) { - cam_err("%s: ERROR, fail to set lock\n", __func__); - goto err_out; - } - state->focus.status = CAMERA_AF_STATUS_MAX; - state->preflash = PREFLASH_NONE; - break; - - case CAMERA_AF_STATUS_MAX: - break; - - default: - cam_err("%s: WARNING, unnecessary calling. AF status=%d\n", - __func__, state->focus.status); - /* Return 0. */ - goto err_out; - break; - } - - if (!touch) { - /* We move lens to default position if af is cancelled.*/ - err = s5k4ecgx_return_focus(sd); - if (unlikely(err)) { - cam_err("%s: ERROR, fail to af_norma_mode (%d)\n", - __func__, err); - goto err_out; - } - } - - mutex_unlock(&state->af_lock); - cam_info("X\n"); - return 0; - -err_out: - mutex_unlock(&state->af_lock); - return err; -} - -static int s5k4ecgx_set_af_mode(struct v4l2_subdev *sd, int val) -{ - struct s5k4ecgx_state *state = to_state(sd); - int err = -1; - u32 af_cancel = 0; - cam_info(" - value %d\n", val); - - mutex_lock(&state->af_lock); - -retry: - af_cancel = (u32)val & FOCUS_MODE_DEFAULT; - switch (val) { - case FOCUS_MODE_AUTO: - case FOCUS_MODE_INFINITY: - state->focus.mode = val; - - err = s5k4ecgx_write_regs(sd, s5k4ecgx_AF_Normal_mode_1_EVT1,\ - sizeof(s5k4ecgx_AF_Normal_mode_1_EVT1) / \ - sizeof(s5k4ecgx_AF_Normal_mode_1_EVT1[0])); - - s5k4ecgx_cam_delay(sd); - - err = s5k4ecgx_write_regs(sd, s5k4ecgx_AF_Normal_mode_2_EVT1,\ - sizeof(s5k4ecgx_AF_Normal_mode_2_EVT1) / \ - sizeof(s5k4ecgx_AF_Normal_mode_2_EVT1[0])); - - s5k4ecgx_cam_delay(sd); - - err = s5k4ecgx_write_regs(sd, s5k4ecgx_AF_Normal_mode_3_EVT1,\ - sizeof(s5k4ecgx_AF_Normal_mode_3_EVT1) / \ - sizeof(s5k4ecgx_AF_Normal_mode_3_EVT1[0])); - - break; - - case FOCUS_MODE_MACRO: - state->focus.mode = val; - - err = s5k4ecgx_write_regs(sd, s5k4ecgx_AF_Macro_mode_1_EVT1,\ - sizeof(s5k4ecgx_AF_Macro_mode_1_EVT1) / \ - sizeof(s5k4ecgx_AF_Macro_mode_1_EVT1[0])); - - s5k4ecgx_cam_delay(sd); - - err = s5k4ecgx_write_regs(sd, s5k4ecgx_AF_Macro_mode_2_EVT1,\ - sizeof(s5k4ecgx_AF_Macro_mode_2_EVT1) / \ - sizeof(s5k4ecgx_AF_Macro_mode_2_EVT1[0])); - - s5k4ecgx_cam_delay(sd); - - err = s5k4ecgx_write_regs(sd, s5k4ecgx_AF_Macro_mode_3_EVT1,\ - sizeof(s5k4ecgx_AF_Macro_mode_3_EVT1) / \ - sizeof(s5k4ecgx_AF_Macro_mode_3_EVT1[0])); - - break; - - default: - cam_warn("invalid value, %d\n", val); - val = FOCUS_MODE_AUTO; - goto retry; - } - - state->focus.mode = val; - mutex_unlock(&state->af_lock); - - if (af_cancel) - s5k4ecgx_stop_af(sd, 0); - - return 0; - - CHECK_ERR(err); - return 0; -} - -/* PX: Do AF */ -static int s5k4ecgx_do_af(struct v4l2_subdev *sd) -{ - struct i2c_client *client = v4l2_get_subdevdata(sd); - struct s5k4ecgx_state *state = to_state(sd); - u16 read_value = 0; - u32 count = 0; - int err = 0; - - cam_info("E\n"); - - /* AE, AWB Lock */ - err = s5k4ecgx_set_ae_lock(sd, true); - CHECK_ERR(err); - err = s5k4ecgx_set_awb_lock(sd, true); - CHECK_ERR(err); - - /* AF start */ - err = s5k4ecgx_write_regs(sd, s5k4ecgx_Single_AF_Start_EVT1,\ - sizeof(s5k4ecgx_Single_AF_Start_EVT1) / \ - sizeof(s5k4ecgx_Single_AF_Start_EVT1[0])); - CHECK_ERR(err); - - /* 1 frame delay */ - s5k4ecgx_cam_delay(sd); - - /* AF Searching */ - cam_dbg("AF 1st search\n"); - - /*1st search*/ - for (count = 0; count < FIRST_AF_SEARCH_COUNT; count++) { - if (state->focus.start == AUTO_FOCUS_OFF) { - cam_dbg("do_af: AF is cancelled while doing(1st)\n"); - state->focus.status = CAMERA_AF_STATUS_MAX; - goto check_done; - } - - /* 1 frame delay */ - s5k4ecgx_cam_delay(sd); - - read_value = 0x0; - err = s5k4ecgx_write(client, 0x002C7000); - CHECK_ERR(err); - err = s5k4ecgx_write(client, 0x002E2EEE); - CHECK_ERR(err); - err = s5k4ecgx_read(client, 0x0F12, &read_value); - CHECK_ERR(err); - cam_info("1st AF status(%02d) = 0x%04X\n", - count, read_value); - - if ((read_value & 0xff) != AF_PROGRESS_1ST) - break; - } - - if ((read_value & 0xff) != AF_SUCCESS_1ST) { - cam_err("%s: ERROR, 1st AF failed. count=%d, read_val=0x%X\n\n", - __func__, count, read_value); - state->focus.status = CAMERA_AF_STATUS_FAIL; - goto check_done; - } - - /*2nd search*/ - cam_dbg("AF 2nd search\n"); - for (count = 0; count < SECOND_AF_SEARCH_COUNT; count++) { - if (state->focus.start == AUTO_FOCUS_OFF) { - cam_dbg("do_af: AF is cancelled while doing(2nd)\n"); - state->focus.status = CAMERA_AF_STATUS_MAX; - goto check_done; - } - - read_value = 0x0; - err = s5k4ecgx_write(client, 0x002C7000); - CHECK_ERR(err); - err = s5k4ecgx_write(client, 0x002E2207); - CHECK_ERR(err); - err = s5k4ecgx_read(client, 0x0F12, &read_value); - CHECK_ERR(err); - cam_info("2nd AF status(%02d) = 0x%04X\n", - count, read_value); - if ((read_value & 0xff) == AF_SUCCESS_2ND) - break; - } - - if (count >= SECOND_AF_SEARCH_COUNT) { - /* 0x01XX means "Not Finish". */ - cam_err("%s: ERROR, 2nd AF failed. read_val=0x%X\n\n", - __func__, read_value & 0xff); - state->focus.status = CAMERA_AF_STATUS_FAIL; - goto check_done; - } - - cam_info("AF Success!\n"); - state->focus.status = CAMERA_AF_STATUS_SUCCESS; - -check_done: - /* restore write mode */ - - /* We only unlocked AE,AWB in case of being cancelled. - * But we now unlock it unconditionally if AF is started, - */ - if (state->focus.status == CAMERA_AF_STATUS_MAX) { - cam_dbg("%s: Single AF cancelled.\n", __func__); - /* AE, AWB Lock */ - err = s5k4ecgx_set_ae_lock(sd, false); - CHECK_ERR(err); - err = s5k4ecgx_set_awb_lock(sd, false); - CHECK_ERR(err); - } else { - state->focus.start = AUTO_FOCUS_OFF; - cam_dbg("%s: Single AF finished\n", __func__); - } - - if ((state->preflash == PREFLASH_ON) && - (state->sensor_mode == SENSOR_CAMERA)) { - state->pdata->flash_ctrl(CAM_FLASH_OFF); - state->preflash = PREFLASH_OFF; - if (state->focus.status == CAMERA_AF_STATUS_MAX) - state->preflash = PREFLASH_NONE; - } - - /* Notice: we here turn touch flag off set previously - * when doing Touch AF. */ - - return 0; -} - -static void s5k4ecgx_af_worker(struct work_struct *work) -{ - struct s5k4ecgx_state *state = container_of(work, \ - struct s5k4ecgx_state, af_work); - struct v4l2_subdev *sd = &state->sd; - int err = -EINVAL; - - cam_info("E\n"); - - mutex_lock(&state->af_lock); - - /* 1. Check Low Light */ - err = s5k4ecgx_get_lux(sd); - - /* 2. Turn on Pre Flash */ - switch (state->flash_mode) { - case FLASH_MODE_AUTO: - if (!state->lowlight) { - /* flash not needed */ - break; - } - - case FLASH_MODE_ON: - state->pdata->flash_ctrl(CAM_FLASH_TORCH); - state->preflash = PREFLASH_ON; - break; - - case FLASH_MODE_OFF: - default: - break; - } - - if (state->preflash == PREFLASH_ON) { - /* 3. Waiting until AE Stable */ - err = s5k4ecgx_ae_stable(sd); - } else if (state->focus.start == AUTO_FOCUS_OFF) { - cam_info("af_start_preflash: AF is cancelled!\n"); - state->focus.status = CAMERA_AF_STATUS_MAX; - } - - if (state->focus.status == CAMERA_AF_STATUS_MAX) { - if (state->preflash == PREFLASH_ON) { - state->pdata->flash_ctrl(CAM_FLASH_OFF); - state->preflash = PREFLASH_OFF; - } - goto out; - } - - s5k4ecgx_do_af(sd); - -out: - mutex_unlock(&state->af_lock); - cam_info("X\n"); - return; -} - -static int s5k4ecgx_set_af(struct v4l2_subdev *sd, s32 val) -{ - struct s5k4ecgx_state *state = to_state(sd); - int err = 0; - - cam_info("%s: %s, focus mode %d\n", __func__, - val ? "start" : "stop", state->focus.mode); - - if (unlikely((u32)val >= AUTO_FOCUS_MAX)) { - cam_err("%s: ERROR, invalid value(%d)\n", __func__, val); - return -EINVAL; - } - -/* need to check the AF scenario with SLP team - temp code */ -/* - if (state->focus.start == val) - return 0; -*/ - state->focus.start = val; - - if (val == AUTO_FOCUS_ON) { - err = queue_work(state->workqueue, &state->af_work); - if (likely(err)) - state->focus.status = CAMERA_AF_STATUS_IN_PROGRESS; - else - cam_warn("WARNING, AF is still processing. So new AF cannot start\n"); - } else { - /* Cancel AF */ - /* 1. AE/AWB UnLock */ - err = s5k4ecgx_set_ae_lock(sd, false); - CHECK_ERR(err); - err = s5k4ecgx_set_awb_lock(sd, false); - CHECK_ERR(err); - /* 2. Turn off on pre flash */ - state->pdata->flash_ctrl(CAM_FLASH_OFF); - state->preflash = PREFLASH_OFF; - /* 3. Cancel AF mode */ - err = s5k4ecgx_set_af_mode(sd, state->focus.mode); - cam_info("set_af: AF cancel requested!\n"); - } - - cam_info("X\n"); - return 0; -} - -static int s5k4ecgx_s_ctrl(struct v4l2_subdev *sd, struct v4l2_control *ctrl) -{ - /* struct i2c_client *client = v4l2_get_subdevdata(sd); */ - struct s5k4ecgx_state *state = to_state(sd); - int err = 0; - - /* V4L2_CID_PRIVATE_BASE == 0x08000000 */ - /* V4L2_CID_CAMERA_CLASS_BASE == 0x009a0900 */ - /* V4L2_CID_BASE == 0x00980900 */ - - if (ctrl->id > V4L2_CID_PRIVATE_BASE) - cam_dbg("ctrl->id:%d, value=%d V4L2_CID_PRIVATE_BASE\n", \ - ctrl->id - V4L2_CID_PRIVATE_BASE, ctrl->value); - else if (ctrl->id > V4L2_CID_CAMERA_CLASS_BASE) - cam_dbg("ctrl->id:%d, value=%d V4L2_CID_CAMERA_CLASS_BASE\n",\ - ctrl->id - V4L2_CID_CAMERA_CLASS_BASE, ctrl->value); - else - cam_dbg("ctrl->id:%d, value=%d V4L2_CID_BASE\n", \ - ctrl->id - V4L2_CID_BASE, ctrl->value); - - if ((ctrl->id != V4L2_CID_CAMERA_CHECK_DATALINE) - && (ctrl->id != V4L2_CID_CAMERA_SENSOR_MODE) - && ((ctrl->id != V4L2_CID_CAMERA_VT_MODE)) - && (!state->initialized)) { - cam_warn("camera isn't initialized\n"); - return 0; - } - - if (ctrl->id != V4L2_CID_CAMERA_SET_AUTO_FOCUS) - mutex_lock(&state->ctrl_lock); - - switch (ctrl->id) { - case V4L2_CID_CAM_JPEG_QUALITY: - err = s5k4ecgx_set_jpeg_quality(sd, ctrl->value); - break; - - case V4L2_CID_CAMERA_ISO: - err = s5k4ecgx_set_iso(sd, ctrl); - break; - - case V4L2_CID_CAMERA_METERING: - if (state->sensor_mode == SENSOR_CAMERA) - err = s5k4ecgx_set_metering(sd, ctrl->value); - break; - - case V4L2_CID_EXPOSURE: - err = s5k4ecgx_set_exposure(sd, ctrl); - cam_dbg("V4L2_CID_EXPOSURE [%d]\n", ctrl->value); - break; - - case V4L2_CID_WHITE_BALANCE_PRESET: - case V4L2_CID_CAMERA_WHITE_BALANCE: - err = s5k4ecgx_set_whitebalance(sd, ctrl->value); - break; - - case V4L2_CID_CAMERA_SCENE_MODE: - state->scene_mode = ctrl->value; - err = s5k4ecgx_set_scene_mode(sd, ctrl->value); - break; - - case V4L2_CID_COLORFX: - err = s5k4ecgx_set_effect(sd, ctrl->value); - break; - - case V4L2_CID_CAMERA_WDR: - err = s5k4ecgx_set_wdr(sd, ctrl->value); - break; - - case V4L2_CID_CAMERA_FLASH_MODE: - state->flash_mode = ctrl->value; - break; - - case V4L2_CID_FOCUS_AUTO_MODE: - case V4L2_CID_CAMERA_FOCUS_MODE: - err = s5k4ecgx_set_af_mode(sd, ctrl->value); - break; - - case V4L2_CID_CAMERA_SET_AUTO_FOCUS: - err = s5k4ecgx_set_af(sd, ctrl->value); - break; - - case V4L2_CID_CAMERA_CHECK_DATALINE: - state->check_dataline = ctrl->value; - cam_dbg("check_dataline = %d\n", state->check_dataline); - err = 0; - break; - - case V4L2_CID_CAMERA_SENSOR_MODE: - err = s5k4ecgx_set_sensor_mode(sd, ctrl); - cam_dbg("sensor_mode = %d\n", ctrl->value); - break; - - case V4L2_CID_CAMERA_CHECK_DATALINE_STOP: - cam_dbg("do nothing\n"); - break; - - case V4L2_CID_CAMERA_CHECK_ESD: - err = s5k4ecgx_check_esd(sd); - break; - - case V4L2_CID_CAMERA_FRAME_RATE: - err = s5k4ecgx_set_frame_rate(sd, ctrl->value); - break; - - case V4L2_CID_CAMERA_CHECK_SENSOR_STATUS: - s5k4ecgx_debug_sensor_status(sd); - err = s5k4ecgx_check_sensor_status(sd); - break; - - default: - cam_err("ERR(ENOIOCTLCMD)\n"); - /* no errors return.*/ - break; - } - - if (ctrl->id != V4L2_CID_CAMERA_SET_AUTO_FOCUS) - mutex_unlock(&state->ctrl_lock); - - cam_dbg("X\n"); - return err; -} - -static const struct v4l2_subdev_core_ops s5k4ecgx_core_ops = { - .init = s5k4ecgx_init, /* initializing API */ - .g_ctrl = s5k4ecgx_g_ctrl, - .s_ctrl = s5k4ecgx_s_ctrl, -}; - -static const struct v4l2_subdev_video_ops s5k4ecgx_video_ops = { - .s_mbus_fmt = s5k4ecgx_s_fmt, - .s_stream = s5k4ecgx_s_stream, - .enum_framesizes = s5k4ecgx_enum_framesizes, - .g_parm = s5k4ecgx_g_parm, - .s_parm = s5k4ecgx_s_parm, -}; - -static const struct v4l2_subdev_ops s5k4ecgx_ops = { - .core = &s5k4ecgx_core_ops, - .video = &s5k4ecgx_video_ops, -}; - -/* - * s5k4ecgx_probe - * Fetching platform data is being done with s_config subdev call. - * In probe routine, we just register subdev device - */ -static int s5k4ecgx_probe(struct i2c_client *client, - const struct i2c_device_id *id) -{ - struct s5k4ecgx_state *state = NULL; - struct v4l2_subdev *sd = NULL; - struct s5k4ecgx_platform_data *pdata = NULL; - cam_dbg("E\n"); - - state = kzalloc(sizeof(struct s5k4ecgx_state), GFP_KERNEL); - if (state == NULL) - return -ENOMEM; - - sd = &state->sd; - strcpy(sd->name, S5K4ECGX_DRIVER_NAME); - - state->runmode = RUNMODE_NOTREADY; - state->initialized = 0; - state->req_fps = state->set_fps = 0; - state->sensor_mode = SENSOR_CAMERA; - state->zoom = 0; - state->flash_mode = FLASH_MODE_BASE; - state->lowlight = 0; - state->awb_lock = 0; - state->ae_lock = 0; - state->preflash = PREFLASH_NONE; - - pdata = client->dev.platform_data; - - if (!pdata) { - cam_err("no platform data\n"); - return -ENODEV; - } - - /* Registering subdev */ - v4l2_i2c_subdev_init(sd, client, &s5k4ecgx_ops); - - mutex_init(&state->ctrl_lock); - mutex_init(&state->af_lock); - - state->workqueue = create_workqueue("cam_workqueue"); - if (unlikely(!state->workqueue)) { - dev_err(&client->dev, "probe, fail to create workqueue\n"); - goto err_out; - } - INIT_WORK(&state->af_work, s5k4ecgx_af_worker); - - /* - * Assign default format and resolution - * Use configured default information in platform data - * or without them, use default information in driver - */ - - /*S5K4ECGX_PREVIEW_VGA*/ - state->preview_frmsizes = &preview_frmsizes[0]; - /*S5K4ECGX_CAPTURE_5MP */ - state->capture_frmsizes = &capture_frmsizes[0]; - cam_dbg("preview_width: %d , preview_height: %d, " - "capture_width: %d, capture_height: %d", - state->preview_frmsizes->width, state->preview_frmsizes->height, - state->capture_frmsizes->width, state->capture_frmsizes->height); - - state->req_fmt.width = state->preview_frmsizes->width; - state->req_fmt.height = state->preview_frmsizes->height; - - state->pdata = pdata; - - if (!pdata->pixelformat) - state->req_fmt.pixelformat = DEFAULT_FMT; - else - state->req_fmt.pixelformat = pdata->pixelformat; - - cam_dbg("probed!!\n"); - - return 0; - -err_out: - kfree(state); - return -ENOMEM; -} - -static int s5k4ecgx_remove(struct i2c_client *client) -{ - struct v4l2_subdev *sd = i2c_get_clientdata(client); - struct s5k4ecgx_state *state = to_state(sd); - - cam_dbg("E\n"); - - destroy_workqueue(state->workqueue); - - state->initialized = 0; - - v4l2_device_unregister_subdev(sd); - - mutex_destroy(&state->ctrl_lock); - mutex_destroy(&state->af_lock); - - kfree(to_state(sd)); - - return 0; -} - -static const struct i2c_device_id s5k4ecgx_id[] = { - { S5K4ECGX_DRIVER_NAME, 0 }, - { }, -}; -MODULE_DEVICE_TABLE(i2c, s5k4ecgx_id); - -static struct i2c_driver s5k4ecgx_i2c_driver = { - .driver = { - .name = S5K4ECGX_DRIVER_NAME, - }, - .probe = s5k4ecgx_probe, - .remove = s5k4ecgx_remove, - .id_table = s5k4ecgx_id, -}; - -static int __init s5k4ecgx_mod_init(void) -{ - cam_dbg("E\n"); - return i2c_add_driver(&s5k4ecgx_i2c_driver); -} - -static void __exit s5k4ecgx_mod_exit(void) -{ - cam_dbg("E\n"); - i2c_del_driver(&s5k4ecgx_i2c_driver); -} -module_init(s5k4ecgx_mod_init); -module_exit(s5k4ecgx_mod_exit); - -MODULE_DESCRIPTION("S5K4ECGX MIPI sensor driver"); -MODULE_AUTHOR("seungwoolee<samuell.lee@samsung.com>"); -MODULE_AUTHOR("jinsookim<js1002.kim@samsung.com>"); -MODULE_LICENSE("GPL"); diff --git a/drivers/media/video/slp_s5k4ecgx.h b/drivers/media/video/slp_s5k4ecgx.h deleted file mode 100644 index 400581f..0000000 --- a/drivers/media/video/slp_s5k4ecgx.h +++ /dev/null @@ -1,195 +0,0 @@ -/* - * Driver for S5K4ECGX 5M ISP from Samsung - * Copyright (C) 2012 Samsung Electronics Co., Ltd. - * 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 __S5K4ECGX_H -#define __S5K4ECGX_H - -#include <linux/types.h> - -#define S5K4ECGX_DRIVER_NAME "S5K4ECGX" -#define is_focus(__mode) (state->focus.mode == __mode) - -#define FIRST_AF_SEARCH_COUNT 80 -#define SECOND_AF_SEARCH_COUNT 80 - -extern struct class *camera_class; - -enum stream_cmd { - STREAM_STOP, - STREAM_START, -}; - -struct s5k4ecgx_framesize { - u32 index; - u32 width; - u32 height; -}; - -struct s5k4ecgx_exif { - u32 exptime; /* us */ - u16 flash; - u16 iso; - int tv; /* shutter speed */ - int bv; /* brightness */ - int ebv; /* exposure bias */ -}; - -struct s5k4ecgx_focus { - unsigned int mode; - unsigned int lock; - unsigned int status; - unsigned int touch; - unsigned int pos_x; - unsigned int pos_y; - unsigned int width; - unsigned int height; - unsigned int start; - bool focusing; - bool needed; - bool first; -}; - -enum preflash_status { - PREFLASH_NONE = 0, - PREFLASH_OFF, - PREFLASH_ON, -}; - -enum s5k4ecgx_runmode { - RUNMODE_NOTREADY, - RUNMODE_INIT, - RUNMODE_RUNNING, /* previewing */ - RUNMODE_RUNNING_STOP, - RUNMODE_CAPTURING, - RUNMODE_CAPTURE_STOP, -}; - -/* - * Driver information - */ -struct s5k4ecgx_state { - struct v4l2_subdev sd; - struct device *s5k4ecgx_dev; - struct s5k4ecgx_platform_data *pdata; - /* - * req_fmt is the requested format from the application. - * set_fmt is the output format of the camera. Finally FIMC - * converts the camera output(set_fmt) to the requested format - * with hardware scaler. - */ - struct v4l2_pix_format req_fmt; - const struct s5k4ecgx_framesize *preview_frmsizes; - const struct s5k4ecgx_framesize *capture_frmsizes; - struct s5k4ecgx_exif exif; - struct s5k4ecgx_focus focus; - - enum v4l2_flash_mode flash_mode; - enum preflash_status preflash; - enum v4l2_sensor_mode sensor_mode; - enum v4l2_scene_mode scene_mode; - enum v4l2_wb_mode wb_mode; - enum s5k4ecgx_runmode runmode; - - struct mutex ctrl_lock; /* Mutex */ - struct mutex af_lock; /* Mutex */ - struct work_struct af_work; /* workque for AF */ - struct work_struct af_win_work; /* workque for AF */ - struct workqueue_struct *workqueue; /* workque for AF */ - - s32 vt_mode; - s32 check_dataline; - u32 req_fps; - u32 set_fps; - u32 initialized; - u32 zoom; - bool lowlight; - bool ae_lock; - bool awb_lock; -}; - -enum AF_1ST_STATUS { - AF_PROGRESS_1ST = 1, - AF_SUCCESS_1ST , - AF_FAIL_1ST, -}; - -enum AF_2ND_STATUS { - AF_SUCCESS_2ND = 0, - AF_PROGRESS_2ND = 1, -}; - -enum s5k4ecgx_prev_frmsize { - S5K4ECGX_PREVIEW_176, /* 176 x 144 */ - S5K4ECGX_PREVIEW_320, /* 320 x 240 */ - S5K4ECGX_PREVIEW_640, /* 640 x 480 */ - S5K4ECGX_PREVIEW_720, /* 720 x 480 */ - S5K4ECGX_PREVIEW_800, /* 800 x 480 */ - S5K4ECGX_PREVIEW_1280, /* 1280 x 720 */ -}; - -enum s5k4ecgx_cap_frmsize { - S5K4ECGX_CAPTURE_VGA, /* 640 x 480 */ - S5K4ECGX_CAPTURE_XGA, /* 1024 x 768 */ - S5K4ECGX_CAPTURE_1MP, /* 1280 x 960 */ - S5K4ECGX_CAPTURE_2MP, /* UXGA - 1600 x 1200 */ - S5K4ECGX_CAPTURE_3MP, /* QXGA - 2048 x 1536 */ - S5K4ECGX_CAPTURE_5MP, /* 2560 x 1920 */ -}; - -static inline struct s5k4ecgx_state *to_state(struct v4l2_subdev *sd) -{ - return container_of(sd, struct s5k4ecgx_state, sd); -} - -/*#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_dbg(fmt, ...) \ - do { \ - printk(KERN_DEBUG "%s: " fmt, __func__, ##__VA_ARGS__); \ - } while (0) -#else -#define cam_dbg(fmt, ...) -#endif /* CONFIG_CAM_DEBUG */ - - -/************ driver feature ************/ -#define S5K4ECGX_USLEEP -/* #define CONFIG_LOAD_FILE */ - - -/*********** Sensor specific ************/ -/* #define S5K4ECGX_100MS_DELAY 0xAA55AA5F */ -/* #define S5K4ECGX_10MS_DELAY 0xAA55AA5E */ -#define S5K4ECGX_DELAY 0xFFFF0000 -#define S5K4ECGX_DEF_APEX_DEN 100 - -/* Register address */ -#define REG_PAGE_SHUTTER 0x7000 -#define REG_ADDR_SHUTTER 0x14D0 -#define REG_PAGE_ISO 0x7000 -#define REG_ADDR_ISO 0x14C8 - -#include "slp_s5k4ecgx_setfile.h" - -#endif /* __S5K4ECGX_H */ diff --git a/drivers/media/video/slp_s5k4ecgx_setfile.h b/drivers/media/video/slp_s5k4ecgx_setfile.h deleted file mode 100644 index 2c84c7b..0000000 --- a/drivers/media/video/slp_s5k4ecgx_setfile.h +++ /dev/null @@ -1,7308 +0,0 @@ -/* - * Driver for S5K4ECGX 5M ISP from Samsung - * - * Copyright (C) 2011, - * - * - * 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 __S5K4ECGX_SETFILE_H -#define __S5K4ECGX_SETFILE_H - -#include <linux/types.h> - -/* - * s5k4ecgx register configuration for combinations of initialization - */ -/* FOR 4EC EVT1.1*/ - -/*//////////////////////////FOR EVT1.1//////////////////////////*/ -/* 20110706 SEMCO Base setting*/ -/* ARM Initiation */ -static const u32 s5k4ecgx_init_reg1_EVT1[] = { -/*================================================================== -// 01.Start Setting -//==================================================================*/ - 0xFCFCD000, - 0x00100001, /*S/W Reset */ - 0x10300000, /*contint_host_int */ - 0x00140001, /*sw_load_complete-Release CORE(Arm)from reset state*/ -}; - -/* Delay 10ms*/ - -static const u32 s5k4ecgx_init_reg2_EVT1[] = { -/*=============================================================== -//02.ETC Setting -//==============================================================*/ - - 0x0028D000, - 0x002A1082, /*Driving current Setting */ - 0x0F1202AA, /*d0_d4_cd10 d0_d4_cd10 9:0 */ - 0x0F1202AA, /*d5_d9_cd10 d5_d9_cd10 9:0 */ - 0x0F1200AA, /*gpio_cd10 gpio_cd10 */ - 0x0F120AAA, /*clks_output_cd10 clks_output_cd10 11:0 */ - 0x002A100E, - 0x0F120000, /*pclk_delay_r */ - - 0x002A007A, - 0x0F120000, - -/*This register is for FACTORY ONLY. -If you change it without prior notification*/ -/* YOU are RESPONSIBLE for the FAILURE that will happen in the future.*/ - - /*ISP FE(ADLC) */ - 0x002AE406, - 0x0F120092, - 0x002AE410, - 0x0F123804, - 0x002AE41A, - 0x0F120010, /*101022 ADD adlcptune_total */ - 0x002AE420, - 0x0F120003, - 0x0F120060, - 0x002AE42E, - 0x0F120004, - 0x002AF400, - 0x0F125A3C, - 0x0F120023, - 0x0F128080, - 0x0F1203AF, - 0x0F12000A, - 0x0F12AA54, - 0x0F120040, - 0x0F12464E, - 0x0F120240, - 0x0F120240, - 0x0F120040, - 0x0F121000, - 0x0F1255FF, /*555C -> 55FF */ - 0x0F12D000, - 0x0F120010, - 0x0F120202, - 0x0F120401, - 0x0F120022, - 0x0F120088, - 0x0F12009F, - 0x0F120000, - 0x0F121800, - 0x0F120088, - 0x0F120000, - 0x0F122428, - 0x0F120000, - 0x0F1203EE, - 0x0F120000, - 0x0F120000, - 0x0F120000, - 0x002AF552, - 0x0F120708, - 0x0F12080C, - - 0x00287000, /*For subsampling Size */ - 0x002A18BC, - 0x0F120004, - 0x0F1205B6, - 0x0F120000, - 0x0F120000, - 0x0F120001, - 0x0F1205BA, - 0x0F120000, - 0x0F120000, - 0x0F120007, - 0x0F1205BA, - 0x0F120000, - 0x0F120000, - 0x0F1201F4, - 0x0F12024E, - 0x0F120000, - 0x0F120000, - 0x0F1201F4, - 0x0F1205B6, - 0x0F120000, - 0x0F120000, - 0x0F1201F4, - 0x0F1205BA, - 0x0F120000, - 0x0F120000, - 0x0F1201F4, - 0x0F12024F, - 0x0F120000, - 0x0F120000, - 0x0F120000, - 0x0F120000, - 0x0F120000, - 0x0F120000, - 0x0F120075, - 0x0F1200CF, - 0x0F120000, - 0x0F120000, - 0x0F120075, - 0x0F1200D6, - 0x0F120000, - 0x0F120000, - 0x0F120004, - 0x0F1201F4, - 0x0F120000, - 0x0F120000, - 0x0F1200F0, - 0x0F1201F4, - 0x0F12029E, - 0x0F1205B2, - 0x0F120000, - 0x0F120000, - 0x0F120000, - 0x0F120000, - 0x0F1201F8, - 0x0F120228, - 0x0F120000, - 0x0F120000, - 0x0F120000, - 0x0F120000, - 0x0F120208, - 0x0F120238, - 0x0F120000, - 0x0F120000, - 0x0F120000, - 0x0F120000, - 0x0F120218, - 0x0F120238, - 0x0F120000, - 0x0F120000, - 0x0F120000, - 0x0F120000, - 0x0F120001, - 0x0F120009, - 0x0F1200DE, - 0x0F1205C0, - 0x0F120000, - 0x0F120000, - 0x0F1200DF, - 0x0F1200E4, - 0x0F1201F8, - 0x0F1201FD, - 0x0F1205B6, - 0x0F1205BB, - 0x0F120000, - 0x0F120000, - 0x0F120000, - 0x0F120000, - 0x0F120000, - 0x0F120000, - 0x0F120000, - 0x0F120000, - 0x0F120000, - 0x0F120000, - 0x0F120000, - 0x0F120000, - 0x0F1201F8, - 0x0F120000, - 0x0F120000, - 0x0F120077, - 0x0F12007E, - 0x0F12024F, - 0x0F12025E, - 0x0F120000, - 0x0F120000, - 0x0F120000, - 0x0F120000, - 0x0F120004, - 0x0F1209D1, - 0x0F120000, - 0x0F120000, - 0x0F120001, - 0x0F1209D5, - 0x0F120000, - 0x0F120000, - 0x0F120008, - 0x0F1209D5, - 0x0F120000, - 0x0F120000, - 0x0F1202AA, - 0x0F120326, - 0x0F120000, - 0x0F120000, - 0x0F1202AA, - 0x0F1209D1, - 0x0F120000, - 0x0F120000, - 0x0F1202AA, - 0x0F1209D5, - 0x0F120000, - 0x0F120000, - 0x0F1202AA, - 0x0F120327, - 0x0F120000, - 0x0F120000, - 0x0F120000, - 0x0F120000, - 0x0F120000, - 0x0F120000, - 0x0F120008, - 0x0F120084, - 0x0F120000, - 0x0F120000, - 0x0F120008, - 0x0F12008D, - 0x0F120000, - 0x0F120000, - 0x0F120008, - 0x0F1202AA, - 0x0F120000, - 0x0F120000, - 0x0F1200AA, - 0x0F1202AA, - 0x0F1203AD, - 0x0F1209CD, - 0x0F120000, - 0x0F120000, - 0x0F120000, - 0x0F120000, - 0x0F1202AE, - 0x0F1202DE, - 0x0F120000, - 0x0F120000, - 0x0F120000, - 0x0F120000, - 0x0F1202BE, - 0x0F1202EE, - 0x0F120000, - 0x0F120000, - 0x0F120000, - 0x0F120000, - 0x0F1202CE, - 0x0F1202EE, - 0x0F120000, - 0x0F120000, - 0x0F120000, - 0x0F120000, - 0x0F120001, - 0x0F120009, - 0x0F120095, - 0x0F1209DB, - 0x0F120000, - 0x0F120000, - 0x0F120096, - 0x0F12009B, - 0x0F1202AE, - 0x0F1202B3, - 0x0F1209D1, - 0x0F1209D6, - 0x0F120000, - 0x0F120000, - 0x0F120000, - 0x0F120000, - 0x0F120000, - 0x0F120000, - 0x0F120000, - 0x0F120000, - 0x0F120000, - 0x0F120000, - 0x0F120000, - 0x0F120000, - 0x0F1202AE, - 0x0F120000, - 0x0F120000, - 0x0F120009, - 0x0F120010, - 0x0F120327, - 0x0F120336, - 0x0F120000, - 0x0F120000, - 0x0F120000, - 0x0F120000, - 0x002A1AF8, - 0x0F125A3C, /*senHal_TuneStr_AngTuneData1_2_D000F400 register */ - 0x002A1896, - 0x0F120002, /*senHal_SamplingType 0002 03EE: PLA*/ - 0x0F120000, /*senHal_SamplingMode 0 : 2 PLA / 1 : 4PLA*/ - 0x0F120003, /*senHal_PLAOption [0] VPLA enable [1] H*/ - - 0x002A189E, - 0x0F120FB0, /*senHal_ExpMinPixels*/ - - 0x002A18AC, - 0x0F120060, /*senHal_uAddColsBin*/ - 0x0F120060, /*senHal_uAddColsNoBin*/ - 0x0F1205C0, /*senHal_uMinColsBin*/ - 0x0F1205C0, /*senHal_uMinColsNoBin*/ - - 0x002A1AEA, - 0x0F128080, /*senHal_SubF404Tune*/ - 0x0F120080, /*senHal_FullF404Tune*/ - 0x002A1AE0, - 0x0F120000, /*senHal_bSenAAC*/ - - 0x002A1A72, - 0x0F120000, /*senHal_bSRX SRX off*/ - 0x002A18A2, - 0x0F120004, /*senHal_NExpLinesCheckFine extend For*/ - 0x002A1A6A, - 0x0F12009A, /*senHal_usForbiddenRightOfs*/ - 0x002A385E, - 0x0F12024C, /*Mon_Sen_uExpPixelsOfs*/ - - 0x002A0EE6, - 0x0F120000, /*setot_bUseDigitalHbin*/ - 0x002A1B2A, - 0x0F120300, /*senHal_TuneStr2_usAngTuneGainTh 2 */ - 0x0F1200D6, /*senHal_TuneStr2_AngTuneF4CA_0_ 2 70001B2*/ - 0x0F12008D, /*senHal_TuneStr2_AngTuneF4CA_1_ 2 70001B2*/ - 0x0F1200CF, /*senHal_TuneStr2_AngTuneF4C2_0_ 2 70001B3*/ - 0x0F120084, /*senHal_TuneStr2_AngTuneF4C2_1_ 2 70001B3*/ - - /* OTP setting*/ - 0x002A0722, - 0x0F120100, /*skl_OTP_usWaitTime This register sho*/ - 0x002A0726, - 0x0F120001, /*skl_bUseOTPfunc//OTP on/off function*/ - 0x002A08D6, - 0x0F120001, /*ash_bUseOTPData*/ - 0x002A146E, - 0x0F120000, /*awbb_otp_disable*/ - 0x002A08DC, - 0x0F120000, /*ash_bUseGasAlphaOTP*/ - -/*==================================================== -// 05.Trap and Patch -====================================================*/ -/* Start of Patch data*/ - 0x00287000, - 0x002A3AF8, - 0x0F12B570, /*70003AF8 */ - 0x0F124B39, /*70003AFA */ - 0x0F124939, /*70003AFC */ - 0x0F12483A, /*70003AFE */ - 0x0F122200, /*70003B00 */ - 0x0F12C008, /*70003B02 */ - 0x0F126001, /*70003B04 */ - 0x0F124939, /*70003B06 */ - 0x0F124839, /*70003B08 */ - 0x0F122401, /*70003B0A */ - 0x0F12F000, /*70003B0C */ - 0x0F12FBD4, /*70003B0E */ - 0x0F124938, /*70003B10 */ - 0x0F124839, /*70003B12 */ - 0x0F122502, /*70003B14 */ - 0x0F120022, /*70003B16 */ - 0x0F12F000, /*70003B18 */ - 0x0F12FBCE, /*70003B1A */ - 0x0F124837, /*70003B1C */ - 0x0F120261, /*70003B1E */ - 0x0F128001, /*70003B20 */ - 0x0F122100, /*70003B22 */ - 0x0F128041, /*70003B24 */ - 0x0F124936, /*70003B26 */ - 0x0F124836, /*70003B28 */ - 0x0F126041, /*70003B2A */ - 0x0F124936, /*70003B2C */ - 0x0F124837, /*70003B2E */ - 0x0F122403, /*70003B30 */ - 0x0F12002A, /*70003B32 */ - 0x0F12F000, /*70003B34 */ - 0x0F12FBC0, /*70003B36 */ - 0x0F124832, /*70003B38 */ - 0x0F124935, /*70003B3A */ - 0x0F1230C0, /*70003B3C */ - 0x0F1263C1, /*70003B3E */ - 0x0F124930, /*70003B40 */ - 0x0F124834, /*70003B42 */ - 0x0F123980, /*70003B44 */ - 0x0F126408, /*70003B46 */ - 0x0F124833, /*70003B48 */ - 0x0F124934, /*70003B4A */ - 0x0F126388, /*70003B4C */ - 0x0F124934, /*70003B4E */ - 0x0F124834, /*70003B50 */ - 0x0F120022, /*70003B52 */ - 0x0F122504, /*70003B54 */ - 0x0F12F000, /*70003B56 */ - 0x0F12FBAF, /*70003B58 */ - 0x0F124933, /*70003B5A */ - 0x0F124833, /*70003B5C */ - 0x0F122405, /*70003B5E */ - 0x0F12002A, /*70003B60 */ - 0x0F12F000, /*70003B62 */ - 0x0F12F881, /*70003B64 */ - 0x0F12491F, /*70003B66 */ - 0x0F124830, /*70003B68 */ - 0x0F120022, /*70003B6A */ - 0x0F122506, /*70003B6C */ - 0x0F1239B6, /*70003B6E */ - 0x0F121D80, /*70003B70 */ - 0x0F12F000, /*70003B72 */ - 0x0F12F879, /*70003B74 */ - 0x0F12482D, /*70003B76 */ - 0x0F12492D, /*70003B78 */ - 0x0F122407, /*70003B7A */ - 0x0F12002A, /*70003B7C */ - 0x0F12300C, /*70003B7E */ - 0x0F12F000, /*70003B80 */ - 0x0F12F872, /*70003B82 */ - 0x0F124829, /*70003B84 */ - 0x0F12492B, /*70003B86 */ - 0x0F120022, /*70003B88 */ - 0x0F122508, /*70003B8A */ - 0x0F123010, /*70003B8C */ - 0x0F12F000, /*70003B8E */ - 0x0F12F86B, /*70003B90 */ - 0x0F124929, /*70003B92 */ - 0x0F124829, /*70003B94 */ - 0x0F122409, /*70003B96 */ - 0x0F12002A, /*70003B98 */ - 0x0F12F000, /*70003B9A */ - 0x0F12FB8D, /*70003B9C */ - 0x0F124928, /*70003B9E */ - 0x0F124828, /*70003BA0 */ - 0x0F120022, /*70003BA2 */ - 0x0F12250A, /*70003BA4 */ - 0x0F12F000, /*70003BA6 */ - 0x0F12FB87, /*70003BA8 */ - 0x0F124927, /*70003BAA */ - 0x0F124827, /*70003BAC */ - 0x0F12240B, /*70003BAE */ - 0x0F12002A, /*70003BB0 */ - 0x0F12F000, /*70003BB2 */ - 0x0F12FB81, /*70003BB4 */ - 0x0F124926, /*70003BB6 */ - 0x0F124826, /*70003BB8 */ - 0x0F120022, /*70003BBA */ - 0x0F12250C, /*70003BBC */ - 0x0F12F000, /*70003BBE */ - 0x0F12FB7B, /*70003BC0 */ - 0x0F124925, /*70003BC2 */ - 0x0F124825, /*70003BC4 */ - 0x0F12240D, /*70003BC6 */ - 0x0F12002A, /*70003BC8 */ - 0x0F12F000, /*70003BCA */ - 0x0F12FB75, /*70003BCC */ - 0x0F124924, /*70003BCE */ - 0x0F124824, /*70003BD0 */ - 0x0F120022, /*70003BD2 */ - 0x0F12F000, /*70003BD4 */ - 0x0F12FB70, /*70003BD6 */ - 0x0F12BC70, /*70003BD8 */ - 0x0F12BC08, /*70003BDA */ - 0x0F124718, /*70003BDC */ - 0x0F120000, /*70003BDE */ - 0x0F12018F, /*70003BE0 */ - 0x0F124EC2, /*70003BE2 */ - 0x0F12037F, /*70003BE4 */ - 0x0F120000, /*70003BE6 */ - 0x0F121F90, /*70003BE8 */ - 0x0F127000, /*70003BEA */ - 0x0F123C81, /*70003BEC */ - 0x0F127000, /*70003BEE */ - 0x0F12E38B, /*70003BF0 */ - 0x0F120000, /*70003BF2 */ - 0x0F123CB9, /*70003BF4 */ - 0x0F127000, /*70003BF6 */ - 0x0F12C3B1, /*70003BF8 */ - 0x0F120000, /*70003BFA */ - 0x0F124780, /*70003BFC */ - 0x0F127000, /*70003BFE */ - 0x0F123D17, /*70003C00 */ - 0x0F127000, /*70003C02 */ - 0x0F120080, /*70003C04 */ - 0x0F127000, /*70003C06 */ - 0x0F123D53, /*70003C08 */ - 0x0F127000, /*70003C0A */ - 0x0F12B49D, /*70003C0C */ - 0x0F120000, /*70003C0E */ - 0x0F123DFF, /*70003C10 */ - 0x0F127000, /*70003C12 */ - 0x0F123DB3, /*70003C14 */ - 0x0F127000, /*70003C16 */ - 0x0F12FFFF, /*70003C18 */ - 0x0F1200FF, /*70003C1A */ - 0x0F1217E0, /*70003C1C */ - 0x0F127000, /*70003C1E */ - 0x0F123F7B, /*70003C20 */ - 0x0F127000, /*70003C22 */ - 0x0F12053D, /*70003C24 */ - 0x0F120000, /*70003C26 */ - 0x0F120000, /*70003C28 */ - 0x0F120A89, /*70003C2A */ - 0x0F126CD2, /*70003C2C */ - 0x0F120000, /*70003C2E */ - 0x0F120000, /*70003C30 */ - 0x0F120A9A, /*70003C32 */ - 0x0F120000, /*70003C34 */ - 0x0F1202D2, /*70003C36 */ - 0x0F123FC9, /*70003C38 */ - 0x0F127000, /*70003C3A */ - 0x0F129E65, /*70003C3C */ - 0x0F120000, /*70003C3E */ - 0x0F12403D, /*70003C40 */ - 0x0F127000, /*70003C42 */ - 0x0F127C49, /*70003C44 */ - 0x0F120000, /*70003C46 */ - 0x0F1240B1, /*70003C48 */ - 0x0F127000, /*70003C4A */ - 0x0F127C63, /*70003C4C */ - 0x0F120000, /*70003C4E */ - 0x0F1240CD, /*70003C50 */ - 0x0F127000, /*70003C52 */ - 0x0F128F01, /*70003C54 */ - 0x0F120000, /*70003C56 */ - 0x0F12416F, /*70003C58 */ - 0x0F127000, /*70003C5A */ - 0x0F127F3F, /*70003C5C */ - 0x0F120000, /*70003C5E */ - 0x0F1241FD, /*70003C60 */ - 0x0F127000, /*70003C62 */ - 0x0F1298C5, /*70003C64 */ - 0x0F120000, /*70003C66 */ - 0x0F12B570, /*70003C68 */ - 0x0F12000C, /*70003C6A */ - 0x0F120015, /*70003C6C */ - 0x0F120029, /*70003C6E */ - 0x0F12F000, /*70003C70 */ - 0x0F12FB2A, /*70003C72 */ - 0x0F1249F8, /*70003C74 */ - 0x0F1200A8, /*70003C76 */ - 0x0F12500C, /*70003C78 */ - 0x0F12BC70, /*70003C7A */ - 0x0F12BC08, /*70003C7C */ - 0x0F124718, /*70003C7E */ - 0x0F126808, /*70003C80 */ - 0x0F120400, /*70003C82 */ - 0x0F120C00, /*70003C84 */ - 0x0F126849, /*70003C86 */ - 0x0F120409, /*70003C88 */ - 0x0F120C09, /*70003C8A */ - 0x0F124AF3, /*70003C8C */ - 0x0F128992, /*70003C8E */ - 0x0F122A00, /*70003C90 */ - 0x0F12D00D, /*70003C92 */ - 0x0F122300, /*70003C94 */ - 0x0F121A89, /*70003C96 */ - 0x0F12D400, /*70003C98 */ - 0x0F12000B, /*70003C9A */ - 0x0F120419, /*70003C9C */ - 0x0F120C09, /*70003C9E */ - 0x0F1223FF, /*70003CA0 */ - 0x0F1233C1, /*70003CA2 */ - 0x0F121810, /*70003CA4 */ - 0x0F124298, /*70003CA6 */ - 0x0F12D800, /*70003CA8 */ - 0x0F120003, /*70003CAA */ - 0x0F120418, /*70003CAC */ - 0x0F120C00, /*70003CAE */ - 0x0F124AEB, /*70003CB0 */ - 0x0F128150, /*70003CB2 */ - 0x0F128191, /*70003CB4 */ - 0x0F124770, /*70003CB6 */ - 0x0F12B5F3, /*70003CB8 */ - 0x0F120004, /*70003CBA */ - 0x0F12B081, /*70003CBC */ - 0x0F129802, /*70003CBE */ - 0x0F126800, /*70003CC0 */ - 0x0F120600, /*70003CC2 */ - 0x0F120E00, /*70003CC4 */ - 0x0F122201, /*70003CC6 */ - 0x0F120015, /*70003CC8 */ - 0x0F120021, /*70003CCA */ - 0x0F123910, /*70003CCC */ - 0x0F12408A, /*70003CCE */ - 0x0F1240A5, /*70003CD0 */ - 0x0F124FE4, /*70003CD2 */ - 0x0F120016, /*70003CD4 */ - 0x0F122C10, /*70003CD6 */ - 0x0F12DA03, /*70003CD8 */ - 0x0F128839, /*70003CDA */ - 0x0F1243A9, /*70003CDC */ - 0x0F128039, /*70003CDE */ - 0x0F12E002, /*70003CE0 */ - 0x0F128879, /*70003CE2 */ - 0x0F1243B1, /*70003CE4 */ - 0x0F128079, /*70003CE6 */ - 0x0F12F000, /*70003CE8 */ - 0x0F12FAF6, /*70003CEA */ - 0x0F122C10, /*70003CEC */ - 0x0F12DA03, /*70003CEE */ - 0x0F128839, /*70003CF0 */ - 0x0F124329, /*70003CF2 */ - 0x0F128039, /*70003CF4 */ - 0x0F12E002, /*70003CF6 */ - 0x0F128879, /*70003CF8 */ - 0x0F124331, /*70003CFA */ - 0x0F128079, /*70003CFC */ - 0x0F1249DA, /*70003CFE */ - 0x0F128809, /*70003D00 */ - 0x0F122900, /*70003D02 */ - 0x0F12D102, /*70003D04 */ - 0x0F12F000, /*70003D06 */ - 0x0F12FAEF, /*70003D08 */ - 0x0F122000, /*70003D0A */ - 0x0F129902, /*70003D0C */ - 0x0F126008, /*70003D0E */ - 0x0F12BCFE, /*70003D10 */ - 0x0F12BC08, /*70003D12 */ - 0x0F124718, /*70003D14 */ - 0x0F12B538, /*70003D16 */ - 0x0F129C04, /*70003D18 */ - 0x0F120015, /*70003D1A */ - 0x0F12002A, /*70003D1C */ - 0x0F129400, /*70003D1E */ - 0x0F12F000, /*70003D20 */ - 0x0F12FAEA, /*70003D22 */ - 0x0F124AD1, /*70003D24 */ - 0x0F128811, /*70003D26 */ - 0x0F122900, /*70003D28 */ - 0x0F12D00F, /*70003D2A */ - 0x0F128820, /*70003D2C */ - 0x0F124281, /*70003D2E */ - 0x0F12D20C, /*70003D30 */ - 0x0F128861, /*70003D32 */ - 0x0F128853, /*70003D34 */ - 0x0F124299, /*70003D36 */ - 0x0F12D200, /*70003D38 */ - 0x0F121E40, /*70003D3A */ - 0x0F120400, /*70003D3C */ - 0x0F120C00, /*70003D3E */ - 0x0F128020, /*70003D40 */ - 0x0F128851, /*70003D42 */ - 0x0F128061, /*70003D44 */ - 0x0F124368, /*70003D46 */ - 0x0F121840, /*70003D48 */ - 0x0F126060, /*70003D4A */ - 0x0F12BC38, /*70003D4C */ - 0x0F12BC08, /*70003D4E */ - 0x0F124718, /*70003D50 */ - 0x0F12B5F8, /*70003D52 */ - 0x0F120004, /*70003D54 */ - 0x0F126808, /*70003D56 */ - 0x0F120400, /*70003D58 */ - 0x0F120C00, /*70003D5A */ - 0x0F122201, /*70003D5C */ - 0x0F120015, /*70003D5E */ - 0x0F120021, /*70003D60 */ - 0x0F123910, /*70003D62 */ - 0x0F12408A, /*70003D64 */ - 0x0F1240A5, /*70003D66 */ - 0x0F124FBE, /*70003D68 */ - 0x0F120016, /*70003D6A */ - 0x0F122C10, /*70003D6C */ - 0x0F12DA03, /*70003D6E */ - 0x0F128839, /*70003D70 */ - 0x0F1243A9, /*70003D72 */ - 0x0F128039, /*70003D74 */ - 0x0F12E002, /*70003D76 */ - 0x0F128879, /*70003D78 */ - 0x0F1243B1, /*70003D7A */ - 0x0F128079, /*70003D7C */ - 0x0F12F000, /*70003D7E */ - 0x0F12FAC3, /*70003D80 */ - 0x0F122C10, /*70003D82 */ - 0x0F12DA03, /*70003D84 */ - 0x0F128838, /*70003D86 */ - 0x0F124328, /*70003D88 */ - 0x0F128038, /*70003D8A */ - 0x0F12E002, /*70003D8C */ - 0x0F128878, /*70003D8E */ - 0x0F124330, /*70003D90 */ - 0x0F128078, /*70003D92 */ - 0x0F1248B6, /*70003D94 */ - 0x0F128800, /*70003D96 */ - 0x0F120400, /*70003D98 */ - 0x0F12D507, /*70003D9A */ - 0x0F124BB5, /*70003D9C */ - 0x0F127819, /*70003D9E */ - 0x0F124AB5, /*70003DA0 */ - 0x0F127810, /*70003DA2 */ - 0x0F127018, /*70003DA4 */ - 0x0F127011, /*70003DA6 */ - 0x0F1249B4, /*70003DA8 */ - 0x0F128188, /*70003DAA */ - 0x0F12BCF8, /*70003DAC */ - 0x0F12BC08, /*70003DAE */ - 0x0F124718, /*70003DB0 */ - 0x0F12B538, /*70003DB2 */ - 0x0F1248B2, /*70003DB4 */ - 0x0F124669, /*70003DB6 */ - 0x0F12F000, /*70003DB8 */ - 0x0F12FAAE, /*70003DBA */ - 0x0F1248B1, /*70003DBC */ - 0x0F1249B0, /*70003DBE */ - 0x0F1269C2, /*70003DC0 */ - 0x0F122400, /*70003DC2 */ - 0x0F1231A8, /*70003DC4 */ - 0x0F122A00, /*70003DC6 */ - 0x0F12D008, /*70003DC8 */ - 0x0F1261C4, /*70003DCA */ - 0x0F12684A, /*70003DCC */ - 0x0F126242, /*70003DCE */ - 0x0F126282, /*70003DD0 */ - 0x0F12466B, /*70003DD2 */ - 0x0F12881A, /*70003DD4 */ - 0x0F126302, /*70003DD6 */ - 0x0F12885A, /*70003DD8 */ - 0x0F126342, /*70003DDA */ - 0x0F126A02, /*70003DDC */ - 0x0F122A00, /*70003DDE */ - 0x0F12D00A, /*70003DE0 */ - 0x0F126204, /*70003DE2 */ - 0x0F126849, /*70003DE4 */ - 0x0F126281, /*70003DE6 */ - 0x0F12466B, /*70003DE8 */ - 0x0F128819, /*70003DEA */ - 0x0F126301, /*70003DEC */ - 0x0F128859, /*70003DEE */ - 0x0F126341, /*70003DF0 */ - 0x0F1249A5, /*70003DF2 */ - 0x0F1288C9, /*70003DF4 */ - 0x0F1263C1, /*70003DF6 */ - 0x0F12F000, /*70003DF8 */ - 0x0F12FA96, /*70003DFA */ - 0x0F12E7A6, /*70003DFC */ - 0x0F12B5F0, /*70003DFE */ - 0x0F12B08B, /*70003E00 */ - 0x0F1220FF, /*70003E02 */ - 0x0F121C40, /*70003E04 */ - 0x0F1249A1, /*70003E06 */ - 0x0F1289CC, /*70003E08 */ - 0x0F124E9E, /*70003E0A */ - 0x0F126AB1, /*70003E0C */ - 0x0F124284, /*70003E0E */ - 0x0F12D101, /*70003E10 */ - 0x0F12489F, /*70003E12 */ - 0x0F126081, /*70003E14 */ - 0x0F126A70, /*70003E16 */ - 0x0F120200, /*70003E18 */ - 0x0F12F000, /*70003E1A */ - 0x0F12FA8D, /*70003E1C */ - 0x0F120400, /*70003E1E */ - 0x0F120C00, /*70003E20 */ - 0x0F124A96, /*70003E22 */ - 0x0F128A11, /*70003E24 */ - 0x0F129109, /*70003E26 */ - 0x0F122101, /*70003E28 */ - 0x0F120349, /*70003E2A */ - 0x0F124288, /*70003E2C */ - 0x0F12D200, /*70003E2E */ - 0x0F120001, /*70003E30 */ - 0x0F124A92, /*70003E32 */ - 0x0F128211, /*70003E34 */ - 0x0F124D97, /*70003E36 */ - 0x0F128829, /*70003E38 */ - 0x0F129108, /*70003E3A */ - 0x0F124A8B, /*70003E3C */ - 0x0F122303, /*70003E3E */ - 0x0F123222, /*70003E40 */ - 0x0F121F91, /*70003E42 */ - 0x0F12F000, /*70003E44 */ - 0x0F12FA7E, /*70003E46 */ - 0x0F128028, /*70003E48 */ - 0x0F12488E, /*70003E4A */ - 0x0F124987, /*70003E4C */ - 0x0F126BC2, /*70003E4E */ - 0x0F126AC0, /*70003E50 */ - 0x0F124282, /*70003E52 */ - 0x0F12D201, /*70003E54 */ - 0x0F128CC8, /*70003E56 */ - 0x0F128028, /*70003E58 */ - 0x0F1288E8, /*70003E5A */ - 0x0F129007, /*70003E5C */ - 0x0F122240, /*70003E5E */ - 0x0F124310, /*70003E60 */ - 0x0F1280E8, /*70003E62 */ - 0x0F122000, /*70003E64 */ - 0x0F120041, /*70003E66 */ - 0x0F12194B, /*70003E68 */ - 0x0F12001E, /*70003E6A */ - 0x0F123680, /*70003E6C */ - 0x0F128BB2, /*70003E6E */ - 0x0F12AF04, /*70003E70 */ - 0x0F12527A, /*70003E72 */ - 0x0F124A7D, /*70003E74 */ - 0x0F12188A, /*70003E76 */ - 0x0F128897, /*70003E78 */ - 0x0F1283B7, /*70003E7A */ - 0x0F1233A0, /*70003E7C */ - 0x0F12891F, /*70003E7E */ - 0x0F12AE01, /*70003E80 */ - 0x0F125277, /*70003E82 */ - 0x0F128A11, /*70003E84 */ - 0x0F128119, /*70003E86 */ - 0x0F121C40, /*70003E88 */ - 0x0F120400, /*70003E8A */ - 0x0F120C00, /*70003E8C */ - 0x0F122806, /*70003E8E */ - 0x0F12D3E9, /*70003E90 */ - 0x0F12F000, /*70003E92 */ - 0x0F12FA5F, /*70003E94 */ - 0x0F12F000, /*70003E96 */ - 0x0F12FA65, /*70003E98 */ - 0x0F124F79, /*70003E9A */ - 0x0F1237A8, /*70003E9C */ - 0x0F122800, /*70003E9E */ - 0x0F12D10A, /*70003EA0 */ - 0x0F121FE0, /*70003EA2 */ - 0x0F1238FD, /*70003EA4 */ - 0x0F12D001, /*70003EA6 */ - 0x0F121CC0, /*70003EA8 */ - 0x0F12D105, /*70003EAA */ - 0x0F124874, /*70003EAC */ - 0x0F128829, /*70003EAE */ - 0x0F123818, /*70003EB0 */ - 0x0F126840, /*70003EB2 */ - 0x0F124348, /*70003EB4 */ - 0x0F126078, /*70003EB6 */ - 0x0F124972, /*70003EB8 */ - 0x0F126878, /*70003EBA */ - 0x0F126B89, /*70003EBC */ - 0x0F124288, /*70003EBE */ - 0x0F12D300, /*70003EC0 */ - 0x0F120008, /*70003EC2 */ - 0x0F126078, /*70003EC4 */ - 0x0F122000, /*70003EC6 */ - 0x0F120041, /*70003EC8 */ - 0x0F12AA04, /*70003ECA */ - 0x0F125A53, /*70003ECC */ - 0x0F12194A, /*70003ECE */ - 0x0F12269C, /*70003ED0 */ - 0x0F1252B3, /*70003ED2 */ - 0x0F12AB01, /*70003ED4 */ - 0x0F125A59, /*70003ED6 */ - 0x0F1232A0, /*70003ED8 */ - 0x0F128111, /*70003EDA */ - 0x0F121C40, /*70003EDC */ - 0x0F120400, /*70003EDE */ - 0x0F120C00, /*70003EE0 */ - 0x0F122806, /*70003EE2 */ - 0x0F12D3F0, /*70003EE4 */ - 0x0F124965, /*70003EE6 */ - 0x0F129809, /*70003EE8 */ - 0x0F128208, /*70003EEA */ - 0x0F129808, /*70003EEC */ - 0x0F128028, /*70003EEE */ - 0x0F129807, /*70003EF0 */ - 0x0F1280E8, /*70003EF2 */ - 0x0F121FE0, /*70003EF4 */ - 0x0F1238FD, /*70003EF6 */ - 0x0F12D13B, /*70003EF8 */ - 0x0F124D64, /*70003EFA */ - 0x0F1289E8, /*70003EFC */ - 0x0F121FC1, /*70003EFE */ - 0x0F1239FF, /*70003F00 */ - 0x0F12D136, /*70003F02 */ - 0x0F124C5F, /*70003F04 */ - 0x0F128AE0, /*70003F06 */ - 0x0F12F000, /*70003F08 */ - 0x0F12FA34, /*70003F0A */ - 0x0F120006, /*70003F0C */ - 0x0F128B20, /*70003F0E */ - 0x0F12F000, /*70003F10 */ - 0x0F12FA38, /*70003F12 */ - 0x0F129000, /*70003F14 */ - 0x0F126AA1, /*70003F16 */ - 0x0F126878, /*70003F18 */ - 0x0F121809, /*70003F1A */ - 0x0F120200, /*70003F1C */ - 0x0F12F000, /*70003F1E */ - 0x0F12FA0B, /*70003F20 */ - 0x0F120400, /*70003F22 */ - 0x0F120C00, /*70003F24 */ - 0x0F120022, /*70003F26 */ - 0x0F123246, /*70003F28 */ - 0x0F120011, /*70003F2A */ - 0x0F12310A, /*70003F2C */ - 0x0F122305, /*70003F2E */ - 0x0F12F000, /*70003F30 */ - 0x0F12FA08, /*70003F32 */ - 0x0F1266E8, /*70003F34 */ - 0x0F126B23, /*70003F36 */ - 0x0F120002, /*70003F38 */ - 0x0F120031, /*70003F3A */ - 0x0F120018, /*70003F3C */ - 0x0F12F000, /*70003F3E */ - 0x0F12FA29, /*70003F40 */ - 0x0F12466B, /*70003F42 */ - 0x0F128518, /*70003F44 */ - 0x0F126EEA, /*70003F46 */ - 0x0F126B60, /*70003F48 */ - 0x0F129900, /*70003F4A */ - 0x0F12F000, /*70003F4C */ - 0x0F12FA22, /*70003F4E */ - 0x0F12466B, /*70003F50 */ - 0x0F128558, /*70003F52 */ - 0x0F120029, /*70003F54 */ - 0x0F12980A, /*70003F56 */ - 0x0F123170, /*70003F58 */ - 0x0F12F000, /*70003F5A */ - 0x0F12FA23, /*70003F5C */ - 0x0F120028, /*70003F5E */ - 0x0F123060, /*70003F60 */ - 0x0F128A02, /*70003F62 */ - 0x0F124946, /*70003F64 */ - 0x0F123128, /*70003F66 */ - 0x0F12808A, /*70003F68 */ - 0x0F128A42, /*70003F6A */ - 0x0F1280CA, /*70003F6C */ - 0x0F128A80, /*70003F6E */ - 0x0F128108, /*70003F70 */ - 0x0F12B00B, /*70003F72 */ - 0x0F12BCF0, /*70003F74 */ - 0x0F12BC08, /*70003F76 */ - 0x0F124718, /*70003F78 */ - 0x0F12B570, /*70003F7A */ - 0x0F122400, /*70003F7C */ - 0x0F124D46, /*70003F7E */ - 0x0F124846, /*70003F80 */ - 0x0F128881, /*70003F82 */ - 0x0F124846, /*70003F84 */ - 0x0F128041, /*70003F86 */ - 0x0F122101, /*70003F88 */ - 0x0F128001, /*70003F8A */ - 0x0F12F000, /*70003F8C */ - 0x0F12FA12, /*70003F8E */ - 0x0F124842, /*70003F90 */ - 0x0F123820, /*70003F92 */ - 0x0F128BC0, /*70003F94 */ - 0x0F12F000, /*70003F96 */ - 0x0F12FA15, /*70003F98 */ - 0x0F124B42, /*70003F9A */ - 0x0F12220D, /*70003F9C */ - 0x0F120712, /*70003F9E */ - 0x0F1218A8, /*70003FA0 */ - 0x0F128806, /*70003FA2 */ - 0x0F1200E1, /*70003FA4 */ - 0x0F1218C9, /*70003FA6 */ - 0x0F1281CE, /*70003FA8 */ - 0x0F128846, /*70003FAA */ - 0x0F12818E, /*70003FAC */ - 0x0F128886, /*70003FAE */ - 0x0F12824E, /*70003FB0 */ - 0x0F1288C0, /*70003FB2 */ - 0x0F128208, /*70003FB4 */ - 0x0F123508, /*70003FB6 */ - 0x0F12042D, /*70003FB8 */ - 0x0F120C2D, /*70003FBA */ - 0x0F121C64, /*70003FBC */ - 0x0F120424, /*70003FBE */ - 0x0F120C24, /*70003FC0 */ - 0x0F122C07, /*70003FC2 */ - 0x0F12D3EC, /*70003FC4 */ - 0x0F12E658, /*70003FC6 */ - 0x0F12B510, /*70003FC8 */ - 0x0F124834, /*70003FCA */ - 0x0F124C34, /*70003FCC */ - 0x0F1288C0, /*70003FCE */ - 0x0F128060, /*70003FD0 */ - 0x0F122001, /*70003FD2 */ - 0x0F128020, /*70003FD4 */ - 0x0F124831, /*70003FD6 */ - 0x0F123820, /*70003FD8 */ - 0x0F128BC0, /*70003FDA */ - 0x0F12F000, /*70003FDC */ - 0x0F12F9F2, /*70003FDE */ - 0x0F1288E0, /*70003FE0 */ - 0x0F124A31, /*70003FE2 */ - 0x0F122800, /*70003FE4 */ - 0x0F12D003, /*70003FE6 */ - 0x0F124930, /*70003FE8 */ - 0x0F128849, /*70003FEA */ - 0x0F122900, /*70003FEC */ - 0x0F12D009, /*70003FEE */ - 0x0F122001, /*70003FF0 */ - 0x0F1203C0, /*70003FF2 */ - 0x0F128050, /*70003FF4 */ - 0x0F1280D0, /*70003FF6 */ - 0x0F122000, /*70003FF8 */ - 0x0F128090, /*70003FFA */ - 0x0F128110, /*70003FFC */ - 0x0F12BC10, /*70003FFE */ - 0x0F12BC08, /*70004000 */ - 0x0F124718, /*70004002 */ - 0x0F128050, /*70004004 */ - 0x0F128920, /*70004006 */ - 0x0F1280D0, /*70004008 */ - 0x0F128960, /*7000400A */ - 0x0F120400, /*7000400C */ - 0x0F121400, /*7000400E */ - 0x0F128090, /*70004010 */ - 0x0F1289A1, /*70004012 */ - 0x0F120409, /*70004014 */ - 0x0F121409, /*70004016 */ - 0x0F128111, /*70004018 */ - 0x0F1289E3, /*7000401A */ - 0x0F128A24, /*7000401C */ - 0x0F122B00, /*7000401E */ - 0x0F12D104, /*70004020 */ - 0x0F1217C3, /*70004022 */ - 0x0F120F5B, /*70004024 */ - 0x0F121818, /*70004026 */ - 0x0F1210C0, /*70004028 */ - 0x0F128090, /*7000402A */ - 0x0F122C00, /*7000402C */ - 0x0F12D1E6, /*7000402E */ - 0x0F1217C8, /*70004030 */ - 0x0F120F40, /*70004032 */ - 0x0F121840, /*70004034 */ - 0x0F1210C0, /*70004036 */ - 0x0F128110, /*70004038 */ - 0x0F12E7E0, /*7000403A */ - 0x0F12B510, /*7000403C */ - 0x0F12000C, /*7000403E */ - 0x0F124919, /*70004040 */ - 0x0F122204, /*70004042 */ - 0x0F126820, /*70004044 */ - 0x0F125E8A, /*70004046 */ - 0x0F120140, /*70004048 */ - 0x0F121A80, /*7000404A */ - 0x0F120280, /*7000404C */ - 0x0F128849, /*7000404E */ - 0x0F12F000, /*70004050 */ - 0x0F12F9C0, /*70004052 */ - 0x0F126020, /*70004054 */ - 0x0F12E7D2, /*70004056 */ - 0x0F1238D4, /*70004058 */ - 0x0F127000, /*7000405A */ - 0x0F1217D0, /*7000405C */ - 0x0F127000, /*7000405E */ - 0x0F125000, /*70004060 */ - 0x0F12D000, /*70004062 */ - 0x0F121100, /*70004064 */ - 0x0F12D000, /*70004066 */ - 0x0F12171A, /*70004068 */ - 0x0F127000, /*7000406A */ - 0x0F124780, /*7000406C */ - 0x0F127000, /*7000406E */ - 0x0F122FCA, /*70004070 */ - 0x0F127000, /*70004072 */ - 0x0F122FC5, /*70004074 */ - 0x0F127000, /*70004076 */ - 0x0F122FC6, /*70004078 */ - 0x0F127000, /*7000407A */ - 0x0F122ED8, /*7000407C */ - 0x0F127000, /*7000407E */ - 0x0F122BD0, /*70004080 */ - 0x0F127000, /*70004082 */ - 0x0F1217E0, /*70004084 */ - 0x0F127000, /*70004086 */ - 0x0F122DE8, /*70004088 */ - 0x0F127000, /*7000408A */ - 0x0F1237E0, /*7000408C */ - 0x0F127000, /*7000408E */ - 0x0F12210C, /*70004090 */ - 0x0F127000, /*70004092 */ - 0x0F121484, /*70004094 */ - 0x0F127000, /*70004096 */ - 0x0F12A006, /*70004098 */ - 0x0F120000, /*7000409A */ - 0x0F120724, /*7000409C */ - 0x0F127000, /*7000409E */ - 0x0F12A000, /*700040A0 */ - 0x0F12D000, /*700040A2 */ - 0x0F122270, /*700040A4 */ - 0x0F127000, /*700040A6 */ - 0x0F122558, /*700040A8 */ - 0x0F127000, /*700040AA */ - 0x0F12146C, /*700040AC */ - 0x0F127000, /*700040AE */ - 0x0F12B510, /*700040B0 */ - 0x0F12000C, /*700040B2 */ - 0x0F124979, /*700040B4 */ - 0x0F122208, /*700040B6 */ - 0x0F126820, /*700040B8 */ - 0x0F125E8A, /*700040BA */ - 0x0F120140, /*700040BC */ - 0x0F121A80, /*700040BE */ - 0x0F120280, /*700040C0 */ - 0x0F1288C9, /*700040C2 */ - 0x0F12F000, /*700040C4 */ - 0x0F12F986, /*700040C6 */ - 0x0F126020, /*700040C8 */ - 0x0F12E798, /*700040CA */ - 0x0F12B5FE, /*700040CC */ - 0x0F12000C, /*700040CE */ - 0x0F126825, /*700040D0 */ - 0x0F126866, /*700040D2 */ - 0x0F1268A0, /*700040D4 */ - 0x0F129001, /*700040D6 */ - 0x0F1268E7, /*700040D8 */ - 0x0F121BA8, /*700040DA */ - 0x0F1242B5, /*700040DC */ - 0x0F12DA00, /*700040DE */ - 0x0F121B70, /*700040E0 */ - 0x0F129000, /*700040E2 */ - 0x0F12496D, /*700040E4 */ - 0x0F12486E, /*700040E6 */ - 0x0F12884A, /*700040E8 */ - 0x0F128843, /*700040EA */ - 0x0F12435A, /*700040EC */ - 0x0F122304, /*700040EE */ - 0x0F125ECB, /*700040F0 */ - 0x0F120A92, /*700040F2 */ - 0x0F1218D2, /*700040F4 */ - 0x0F1202D2, /*700040F6 */ - 0x0F120C12, /*700040F8 */ - 0x0F1288CB, /*700040FA */ - 0x0F128880, /*700040FC */ - 0x0F124343, /*700040FE */ - 0x0F120A98, /*70004100 */ - 0x0F122308, /*70004102 */ - 0x0F125ECB, /*70004104 */ - 0x0F1218C0, /*70004106 */ - 0x0F1202C0, /*70004108 */ - 0x0F120C00, /*7000410A */ - 0x0F120411, /*7000410C */ - 0x0F120400, /*7000410E */ - 0x0F121409, /*70004110 */ - 0x0F121400, /*70004112 */ - 0x0F121A08, /*70004114 */ - 0x0F124962, /*70004116 */ - 0x0F1239E0, /*70004118 */ - 0x0F126148, /*7000411A */ - 0x0F129801, /*7000411C */ - 0x0F123040, /*7000411E */ - 0x0F127880, /*70004120 */ - 0x0F122800, /*70004122 */ - 0x0F12D103, /*70004124 */ - 0x0F129801, /*70004126 */ - 0x0F120029, /*70004128 */ - 0x0F12F000, /*7000412A */ - 0x0F12F959, /*7000412C */ - 0x0F128839, /*7000412E */ - 0x0F129800, /*70004130 */ - 0x0F124281, /*70004132 */ - 0x0F12D814, /*70004134 */ - 0x0F128879, /*70004136 */ - 0x0F129800, /*70004138 */ - 0x0F124281, /*7000413A */ - 0x0F12D20C, /*7000413C */ - 0x0F129801, /*7000413E */ - 0x0F120029, /*70004140 */ - 0x0F12F000, /*70004142 */ - 0x0F12F955, /*70004144 */ - 0x0F129801, /*70004146 */ - 0x0F120029, /*70004148 */ - 0x0F12F000, /*7000414A */ - 0x0F12F951, /*7000414C */ - 0x0F129801, /*7000414E */ - 0x0F120029, /*70004150 */ - 0x0F12F000, /*70004152 */ - 0x0F12F94D, /*70004154 */ - 0x0F12E003, /*70004156 */ - 0x0F129801, /*70004158 */ - 0x0F120029, /*7000415A */ - 0x0F12F000, /*7000415C */ - 0x0F12F948, /*7000415E */ - 0x0F129801, /*70004160 */ - 0x0F120032, /*70004162 */ - 0x0F120039, /*70004164 */ - 0x0F12F000, /*70004166 */ - 0x0F12F94B, /*70004168 */ - 0x0F126020, /*7000416A */ - 0x0F12E5D0, /*7000416C */ - 0x0F12B57C, /*7000416E */ - 0x0F12484C, /*70004170 */ - 0x0F12A901, /*70004172 */ - 0x0F120004, /*70004174 */ - 0x0F12F000, /*70004176 */ - 0x0F12F8CF, /*70004178 */ - 0x0F12466B, /*7000417A */ - 0x0F1288D9, /*7000417C */ - 0x0F128898, /*7000417E */ - 0x0F124B47, /*70004180 */ - 0x0F123346, /*70004182 */ - 0x0F121E9A, /*70004184 */ - 0x0F12F000, /*70004186 */ - 0x0F12F943, /*70004188 */ - 0x0F124846, /*7000418A */ - 0x0F124944, /*7000418C */ - 0x0F123812, /*7000418E */ - 0x0F123140, /*70004190 */ - 0x0F128A42, /*70004192 */ - 0x0F12888B, /*70004194 */ - 0x0F1218D2, /*70004196 */ - 0x0F128242, /*70004198 */ - 0x0F128AC2, /*7000419A */ - 0x0F1288C9, /*7000419C */ - 0x0F121851, /*7000419E */ - 0x0F1282C1, /*700041A0 */ - 0x0F120020, /*700041A2 */ - 0x0F124669, /*700041A4 */ - 0x0F12F000, /*700041A6 */ - 0x0F12F8B7, /*700041A8 */ - 0x0F12483F, /*700041AA */ - 0x0F12214D, /*700041AC */ - 0x0F128301, /*700041AE */ - 0x0F122196, /*700041B0 */ - 0x0F128381, /*700041B2 */ - 0x0F12211D, /*700041B4 */ - 0x0F123020, /*700041B6 */ - 0x0F128001, /*700041B8 */ - 0x0F12F000, /*700041BA */ - 0x0F12F931, /*700041BC */ - 0x0F12F000, /*700041BE */ - 0x0F12F937, /*700041C0 */ - 0x0F12483A, /*700041C2 */ - 0x0F124C3A, /*700041C4 */ - 0x0F126E00, /*700041C6 */ - 0x0F1260E0, /*700041C8 */ - 0x0F12466B, /*700041CA */ - 0x0F128818, /*700041CC */ - 0x0F128859, /*700041CE */ - 0x0F120025, /*700041D0 */ - 0x0F121A40, /*700041D2 */ - 0x0F123540, /*700041D4 */ - 0x0F1261A8, /*700041D6 */ - 0x0F124831, /*700041D8 */ - 0x0F129900, /*700041DA */ - 0x0F123060, /*700041DC */ - 0x0F12F000, /*700041DE */ - 0x0F12F92F, /*700041E0 */ - 0x0F12466B, /*700041E2 */ - 0x0F128819, /*700041E4 */ - 0x0F121DE0, /*700041E6 */ - 0x0F1230F9, /*700041E8 */ - 0x0F128741, /*700041EA */ - 0x0F128859, /*700041EC */ - 0x0F128781, /*700041EE */ - 0x0F122000, /*700041F0 */ - 0x0F1271A0, /*700041F2 */ - 0x0F1274A8, /*700041F4 */ - 0x0F12BC7C, /*700041F6 */ - 0x0F12BC08, /*700041F8 */ - 0x0F124718, /*700041FA */ - 0x0F12B5F8, /*700041FC */ - 0x0F120005, /*700041FE */ - 0x0F126808, /*70004200 */ - 0x0F120400, /*70004202 */ - 0x0F120C00, /*70004204 */ - 0x0F12684A, /*70004206 */ - 0x0F120412, /*70004208 */ - 0x0F120C12, /*7000420A */ - 0x0F12688E, /*7000420C */ - 0x0F1268CC, /*7000420E */ - 0x0F124922, /*70004210 */ - 0x0F12884B, /*70004212 */ - 0x0F124343, /*70004214 */ - 0x0F120A98, /*70004216 */ - 0x0F122304, /*70004218 */ - 0x0F125ECB, /*7000421A */ - 0x0F1218C0, /*7000421C */ - 0x0F1202C0, /*7000421E */ - 0x0F120C00, /*70004220 */ - 0x0F1288CB, /*70004222 */ - 0x0F124353, /*70004224 */ - 0x0F120A9A, /*70004226 */ - 0x0F122308, /*70004228 */ - 0x0F125ECB, /*7000422A */ - 0x0F1218D1, /*7000422C */ - 0x0F1202C9, /*7000422E */ - 0x0F120C09, /*70004230 */ - 0x0F122701, /*70004232 */ - 0x0F12003A, /*70004234 */ - 0x0F1240AA, /*70004236 */ - 0x0F129200, /*70004238 */ - 0x0F12002A, /*7000423A */ - 0x0F123A10, /*7000423C */ - 0x0F124097, /*7000423E */ - 0x0F122D10, /*70004240 */ - 0x0F12DA06, /*70004242 */ - 0x0F124A1B, /*70004244 */ - 0x0F129B00, /*70004246 */ - 0x0F128812, /*70004248 */ - 0x0F12439A, /*7000424A */ - 0x0F124B19, /*7000424C */ - 0x0F12801A, /*7000424E */ - 0x0F12E003, /*70004250 */ - 0x0F124B18, /*70004252 */ - 0x0F12885A, /*70004254 */ - 0x0F1243BA, /*70004256 */ - 0x0F12805A, /*70004258 */ - 0x0F120023, /*7000425A */ - 0x0F120032, /*7000425C */ - 0x0F12F000, /*7000425E */ - 0x0F12F8D7, /*70004260 */ - 0x0F122D10, /*70004262 */ - 0x0F12DA05, /*70004264 */ - 0x0F124913, /*70004266 */ - 0x0F129A00, /*70004268 */ - 0x0F128808, /*7000426A */ - 0x0F124310, /*7000426C */ - 0x0F128008, /*7000426E */ - 0x0F12E003, /*70004270 */ - 0x0F124810, /*70004272 */ - 0x0F128841, /*70004274 */ - 0x0F124339, /*70004276 */ - 0x0F128041, /*70004278 */ - 0x0F124D0D, /*7000427A */ - 0x0F122000, /*7000427C */ - 0x0F123580, /*7000427E */ - 0x0F1288AA, /*70004280 */ - 0x0F125E30, /*70004282 */ - 0x0F122100, /*70004284 */ - 0x0F12F000, /*70004286 */ - 0x0F12F8E3, /*70004288 */ - 0x0F128030, /*7000428A */ - 0x0F122000, /*7000428C */ - 0x0F1288AA, /*7000428E */ - 0x0F125E20, /*70004290 */ - 0x0F122100, /*70004292 */ - 0x0F12F000, /*70004294 */ - 0x0F12F8DC, /*70004296 */ - 0x0F128020, /*70004298 */ - 0x0F12E587, /*7000429A */ - 0x0F122558, /*7000429C */ - 0x0F127000, /*7000429E */ - 0x0F122AB8, /*700042A0 */ - 0x0F127000, /*700042A2 */ - 0x0F12145E, /*700042A4 */ - 0x0F127000, /*700042A6 */ - 0x0F122698, /*700042A8 */ - 0x0F127000, /*700042AA */ - 0x0F122BB8, /*700042AC */ - 0x0F127000, /*700042AE */ - 0x0F122998, /*700042B0 */ - 0x0F127000, /*700042B2 */ - 0x0F121100, /*700042B4 */ - 0x0F12D000, /*700042B6 */ - 0x0F124778, /*700042B8 */ - 0x0F1246C0, /*700042BA */ - 0x0F12C000, /*700042BC */ - 0x0F12E59F, /*700042BE */ - 0x0F12FF1C, /*700042C0 */ - 0x0F12E12F, /*700042C2 */ - 0x0F121789, /*700042C4 */ - 0x0F120001, /*700042C6 */ - 0x0F124778, /*700042C8 */ - 0x0F1246C0, /*700042CA */ - 0x0F12C000, /*700042CC */ - 0x0F12E59F, /*700042CE */ - 0x0F12FF1C, /*700042D0 */ - 0x0F12E12F, /*700042D2 */ - 0x0F1216F1, /*700042D4 */ - 0x0F120001, /*700042D6 */ - 0x0F124778, /*700042D8 */ - 0x0F1246C0, /*700042DA */ - 0x0F12C000, /*700042DC */ - 0x0F12E59F, /*700042DE */ - 0x0F12FF1C, /*700042E0 */ - 0x0F12E12F, /*700042E2 */ - 0x0F12C3B1, /*700042E4 */ - 0x0F120000, /*700042E6 */ - 0x0F124778, /*700042E8 */ - 0x0F1246C0, /*700042EA */ - 0x0F12C000, /*700042EC */ - 0x0F12E59F, /*700042EE */ - 0x0F12FF1C, /*700042F0 */ - 0x0F12E12F, /*700042F2 */ - 0x0F12C36D, /*700042F4 */ - 0x0F120000, /*700042F6 */ - 0x0F124778, /*700042F8 */ - 0x0F1246C0, /*700042FA */ - 0x0F12C000, /*700042FC */ - 0x0F12E59F, /*700042FE */ - 0x0F12FF1C, /*70004300 */ - 0x0F12E12F, /*70004302 */ - 0x0F12F6D7, /*70004304 */ - 0x0F120000, /*70004306 */ - 0x0F124778, /*70004308 */ - 0x0F1246C0, /*7000430A */ - 0x0F12C000, /*7000430C */ - 0x0F12E59F, /*7000430E */ - 0x0F12FF1C, /*70004310 */ - 0x0F12E12F, /*70004312 */ - 0x0F12B49D, /*70004314 */ - 0x0F120000, /*70004316 */ - 0x0F124778, /*70004318 */ - 0x0F1246C0, /*7000431A */ - 0x0F12C000, /*7000431C */ - 0x0F12E59F, /*7000431E */ - 0x0F12FF1C, /*70004320 */ - 0x0F12E12F, /*70004322 */ - 0x0F127EDF, /*70004324 */ - 0x0F120000, /*70004326 */ - 0x0F124778, /*70004328 */ - 0x0F1246C0, /*7000432A */ - 0x0F12C000, /*7000432C */ - 0x0F12E59F, /*7000432E */ - 0x0F12FF1C, /*70004330 */ - 0x0F12E12F, /*70004332 */ - 0x0F12448D, /*70004334 */ - 0x0F120000, /*70004336 */ - 0x0F124778, /*70004338 */ - 0x0F1246C0, /*7000433A */ - 0x0F12F004, /*7000433C */ - 0x0F12E51F, /*7000433E */ - 0x0F1229EC, /*70004340 */ - 0x0F120001, /*70004342 */ - 0x0F124778, /*70004344 */ - 0x0F1246C0, /*70004346 */ - 0x0F12C000, /*70004348 */ - 0x0F12E59F, /*7000434A */ - 0x0F12FF1C, /*7000434C */ - 0x0F12E12F, /*7000434E */ - 0x0F122EF1, /*70004350 */ - 0x0F120000, /*70004352 */ - 0x0F124778, /*70004354 */ - 0x0F1246C0, /*70004356 */ - 0x0F12C000, /*70004358 */ - 0x0F12E59F, /*7000435A */ - 0x0F12FF1C, /*7000435C */ - 0x0F12E12F, /*7000435E */ - 0x0F12EE03, /*70004360 */ - 0x0F120000, /*70004362 */ - 0x0F124778, /*70004364 */ - 0x0F1246C0, /*70004366 */ - 0x0F12C000, /*70004368 */ - 0x0F12E59F, /*7000436A */ - 0x0F12FF1C, /*7000436C */ - 0x0F12E12F, /*7000436E */ - 0x0F12A58B, /*70004370 */ - 0x0F120000, /*70004372 */ - 0x0F124778, /*70004374 */ - 0x0F1246C0, /*70004376 */ - 0x0F12C000, /*70004378 */ - 0x0F12E59F, /*7000437A */ - 0x0F12FF1C, /*7000437C */ - 0x0F12E12F, /*7000437E */ - 0x0F127C49, /*70004380 */ - 0x0F120000, /*70004382 */ - 0x0F124778, /*70004384 */ - 0x0F1246C0, /*70004386 */ - 0x0F12C000, /*70004388 */ - 0x0F12E59F, /*7000438A */ - 0x0F12FF1C, /*7000438C */ - 0x0F12E12F, /*7000438E */ - 0x0F127C63, /*70004390 */ - 0x0F120000, /*70004392 */ - 0x0F124778, /*70004394 */ - 0x0F1246C0, /*70004396 */ - 0x0F12C000, /*70004398 */ - 0x0F12E59F, /*7000439A */ - 0x0F12FF1C, /*7000439C */ - 0x0F12E12F, /*7000439E */ - 0x0F122DB7, /*700043A0 */ - 0x0F120000, /*700043A2 */ - 0x0F124778, /*700043A4 */ - 0x0F1246C0, /*700043A6 */ - 0x0F12C000, /*700043A8 */ - 0x0F12E59F, /*700043AA */ - 0x0F12FF1C, /*700043AC */ - 0x0F12E12F, /*700043AE */ - 0x0F12EB3D, /*700043B0 */ - 0x0F120000, /*700043B2 */ - 0x0F124778, /*700043B4 */ - 0x0F1246C0, /*700043B6 */ - 0x0F12C000, /*700043B8 */ - 0x0F12E59F, /*700043BA */ - 0x0F12FF1C, /*700043BC */ - 0x0F12E12F, /*700043BE */ - 0x0F12F061, /*700043C0 */ - 0x0F120000, /*700043C2 */ - 0x0F124778, /*700043C4 */ - 0x0F1246C0, /*700043C6 */ - 0x0F12C000, /*700043C8 */ - 0x0F12E59F, /*700043CA */ - 0x0F12FF1C, /*700043CC */ - 0x0F12E12F, /*700043CE */ - 0x0F12F0EF, /*700043D0 */ - 0x0F120000, /*700043D2 */ - 0x0F124778, /*700043D4 */ - 0x0F1246C0, /*700043D6 */ - 0x0F12F004, /*700043D8 */ - 0x0F12E51F, /*700043DA */ - 0x0F122824, /*700043DC */ - 0x0F120001, /*700043DE */ - 0x0F124778, /*700043E0 */ - 0x0F1246C0, /*700043E2 */ - 0x0F12C000, /*700043E4 */ - 0x0F12E59F, /*700043E6 */ - 0x0F12FF1C, /*700043E8 */ - 0x0F12E12F, /*700043EA */ - 0x0F128EDD, /*700043EC */ - 0x0F120000, /*700043EE */ - 0x0F124778, /*700043F0 */ - 0x0F1246C0, /*700043F2 */ - 0x0F12C000, /*700043F4 */ - 0x0F12E59F, /*700043F6 */ - 0x0F12FF1C, /*700043F8 */ - 0x0F12E12F, /*700043FA */ - 0x0F128DCB, /*700043FC */ - 0x0F120000, /*700043FE */ - 0x0F124778, /*70004400 */ - 0x0F1246C0, /*70004402 */ - 0x0F12C000, /*70004404 */ - 0x0F12E59F, /*70004406 */ - 0x0F12FF1C, /*70004408 */ - 0x0F12E12F, /*7000440A */ - 0x0F128E17, /*7000440C */ - 0x0F120000, /*7000440E */ - 0x0F124778, /*70004410 */ - 0x0F1246C0, /*70004412 */ - 0x0F12C000, /*70004414 */ - 0x0F12E59F, /*70004416 */ - 0x0F12FF1C, /*70004418 */ - 0x0F12E12F, /*7000441A */ - 0x0F1298C5, /*7000441C */ - 0x0F120000, /*7000441E */ - 0x0F124778, /*70004420 */ - 0x0F1246C0, /*70004422 */ - 0x0F12C000, /*70004424 */ - 0x0F12E59F, /*70004426 */ - 0x0F12FF1C, /*70004428 */ - 0x0F12E12F, /*7000442A */ - 0x0F127C7D, /*7000442C */ - 0x0F120000, /*7000442E */ - 0x0F124778, /*70004430 */ - 0x0F1246C0, /*70004432 */ - 0x0F12C000, /*70004434 */ - 0x0F12E59F, /*70004436 */ - 0x0F12FF1C, /*70004438 */ - 0x0F12E12F, /*7000443A */ - 0x0F127E31, /*7000443C */ - 0x0F120000, /*7000443E */ - 0x0F124778, /*70004440 */ - 0x0F1246C0, /*70004442 */ - 0x0F12C000, /*70004444 */ - 0x0F12E59F, /*70004446 */ - 0x0F12FF1C, /*70004448 */ - 0x0F12E12F, /*7000444A */ - 0x0F127EAB, /*7000444C */ - 0x0F120000, /*7000444E */ - 0x0F124778, /*70004450 */ - 0x0F1246C0, /*70004452 */ - 0x0F12C000, /*70004454 */ - 0x0F12E59F, /*70004456 */ - 0x0F12FF1C, /*70004458 */ - 0x0F12E12F, /*7000445A */ - 0x0F127501, /*7000445C */ - 0x0F120000, /*7000445E */ -/* End of Patch Data(Last : 7000445Eh) -// Total Size 2408 (0x0968) -// Addr : 3AF8 , Size : 2406(966h) - -//TNP_USER_MBCV_CONTROL -//TNP_4EC_MBR_TUNE -//TNP_4EC_FORBIDDEN_TUNE -//TNP_AF_FINESEARCH_DRIVEBACK -//TNP_FLASH_ALG -//TNP_GAS_ALPHA_OTP -//TNP_AWB_MODUL_COMP -//TNP_AWB_INIT_QUEUE -//TNP_AWB_GRID_LOWBR -//TNP_AWB_GRID_MODULECOMP*/ - - 0x0028D000, - 0x002A1000, - 0x0F120001, - /* End of FACTORY ONLY. */ - - /*AF setting */ - 0x00287000, - 0x002A01FC, - 0x0F120001, /*REG_TC_IPRM_LedGpio */ - /*70001720 0100 Only STW Use IT */ - 0x002A01FE, - 0x0F120003, - 0x0F120000, - 0x002A0204, - 0x0F120061, - 0x002A020C, - 0x0F122F0C, - 0x0F120190, - 0x002A0294, - 0x0F120100, - 0x0F1200E3, - 0x0F120200, - 0x0F120238, - 0x0F1201C6, - 0x0F120166, - 0x0F120074, - 0x0F120132, - 0x0F120001, - - 0x002A070E, - 0x0F1200FF, - 0x002A071E, - 0x0F120001, - 0x002A163C, - 0x0F120000, - - 0x002A1648, - 0x0F129002, /*2nd search on when 2nd search lens opsite direct moving*/ - 0x002A1652, - 0x0F120002, - 0x0F120000, - 0x002A15E0, - 0x0F120801, /* when 2nd search 1code distance 6+1 position move */ - - 0x002A164C, - 0x0F120003, - 0x002A163E, - 0x0F1200E5, - 0x0F1200CC, /*98(60%) -> CC(80%) */ - 0x002A15D4, - 0x0F120000, - 0x0F12D000, - 0x002A169A, - 0x0F12FF95, - 0x002A166A, - 0x0F120280, - 0x002A1676, - 0x0F1203A0, - 0x0F120320, - 0x002A16BC, - 0x0F120030, - 0x002A16E0, - 0x0F120060, - 0x002A16D4, - 0x0F120010, - 0x002A1656, - 0x0F120000, - 0x002A15E6, - 0x0F12003C, - - 0x0F120017, /*af_pos_usTableLastInd */ - 0x0F120026, - 0x0F12002C, - 0x0F120032, - 0x0F120038, - 0x0F12003E, - 0x0F120044, - 0x0F12004A, - 0x0F120050, - 0x0F120056, - 0x0F12005C, - 0x0F120062, - 0x0F120068, - 0x0F12006E, - 0x0F120074, - 0x0F12007A, - 0x0F120080, - 0x0F120086, - 0x0F12008C, - 0x0F120092, - 0x0F120098, - 0x0F12009E, - 0x0F1200A4, - 0x0F1200AA, - 0x0F1200B0, - - 0x002A1722, - 0x0F128000, - 0x0F120006, - 0x0F123FF0, - 0x0F1203E8, - 0x0F120000, - 0x0F120080, /*delay2 when threshold upper lens moving when moving*/ - 0x0F120009, /*threshold */ - 0x0F120020, /*delay1 when threshold lower lens moving when moving*/ - 0x0F120040, - 0x0F120080, - 0x0F1200C0, - 0x0F1200E0, - - 0x002A028C, - 0x0F120003, /*REG_TC_AF_AfCmd */ - -/*=================================================================== -//04.Gas_Anti Shading_Otp -//==================================================================*/ - 0x002A08B4, - 0x0F120001, /*wbt_bUseOutdoorASH */ - -/* Refer Mon_AWB_RotGain*/ - 0x002A08BC, - 0x0F1200C0, /*TVAR_ash_AwbAshCord_0_ 2300K*/ - 0x0F1200DF, /*TVAR_ash_AwbAshCord_1_ 2750K*/ - 0x0F120100, /*TVAR_ash_AwbAshCord_2_ 3300K*/ - 0x0F120125, /*TVAR_ash_AwbAshCord_3_ 4150K*/ - 0x0F12015F, /*TVAR_ash_AwbAshCord_4_ 5250K*/ - 0x0F12017C, /*TVAR_ash_AwbAshCord_5_ 6400K*/ - 0x0F120194, /*TVAR_ash_AwbAshCord_6_ 7500K*/ - -/* GAS Alpha Table*/ - 0x002A08F6, - 0x0F124000, /*TVAR_ash_GASAlpha_0__0_ R // 2300K */ - 0x0F124000, /*TVAR_ash_GASAlpha_0__1_ GR */ - 0x0F124000, /*TVAR_ash_GASAlpha_0__2_ GB */ - 0x0F124000, /*TVAR_ash_GASAlpha_0__3_ B */ - 0x0F124000, /*TVAR_ash_GASAlpha_1__0_ R // 2750K */ - 0x0F124000, /*TVAR_ash_GASAlpha_1__1_ GR */ - 0x0F124000, /*TVAR_ash_GASAlpha_1__2_ GB */ - 0x0F124000, /*TVAR_ash_GASAlpha_1__3_ B */ - 0x0F124000, /*TVAR_ash_GASAlpha_2__0_ R // 3300K */ - 0x0F124000, /*TVAR_ash_GASAlpha_2__1_ GR */ - 0x0F124000, /*TVAR_ash_GASAlpha_2__2_ GB */ - 0x0F124000, /*TVAR_ash_GASAlpha_2__3_ B */ - 0x0F123C00, /*TVAR_ash_GASAlpha_3__0_ R // 4150K */ - 0x0F124000, /*TVAR_ash_GASAlpha_3__1_ GR */ - 0x0F124000, /*TVAR_ash_GASAlpha_3__2_ GB */ - 0x0F124000, /*TVAR_ash_GASAlpha_3__3_ B */ - 0x0F123E00, /*TVAR_ash_GASAlpha_4__0_ R // 5250K */ - 0x0F124000, /*TVAR_ash_GASAlpha_4__1_ GR */ - 0x0F124000, /*TVAR_ash_GASAlpha_4__2_ GB */ - 0x0F124000, /*TVAR_ash_GASAlpha_4__3_ B */ - 0x0F124100, /*TVAR_ash_GASAlpha_5__0_ R // 6400K */ - 0x0F124000, /*TVAR_ash_GASAlpha_5__1_ GR */ - 0x0F124000, /*TVAR_ash_GASAlpha_5__2_ GB */ - 0x0F124000, /*TVAR_ash_GASAlpha_5__3_ B */ - 0x0F124200, /*TVAR_ash_GASAlpha_6__0_ R // 7500K */ - 0x0F124000, /*TVAR_ash_GASAlpha_6__1_ GR */ - 0x0F124000, /*TVAR_ash_GASAlpha_6__2_ GB */ - 0x0F124000, /*TVAR_ash_GASAlpha_6__3_ B */ - -/* Outdoor GAS Alpha*/ - 0x0F124500, /*TVAR_ash_GASOutdoorAlpha_0_ R */ - 0x0F124000, /*TVAR_ash_GASOutdoorAlpha_1_ GR */ - 0x0F124000, /*TVAR_ash_GASOutdoorAlpha_2_ GB */ - 0x0F124000, /*TVAR_ash_GASOutdoorAlpha_3_ B */ - - 0x002A08F4, - 0x0F120001, /*ash_bUseGasAlpha */ - -/*================================================================= -// 09.Auto Flicker Detection -//================================================================*/ - - 0x002A0F30, - 0x0F120001, /*AFC_D_ConvAccelerPower */ - -/*Auto Flicker (60Mhz start)*/ - 0x002A0F2A, - 0x0F120000, /*AFC_Default BIT[0] 1:60Hz 0:50Hz */ - 0x002A04E6, - 0x0F12077F, /*REG_TC_DBG 7F: 60Hz 5F:50Hz */ - -/*=========================================================== -// 10.AE Setting -//==========================================================*/ - 0x002A1484, - 0x0F12003C, /*TVAR_ae_BrAve */ - 0x002A148A, - 0x0F12000F, /*ae_StatMode */ - 0x002A058C, - 0x0F123520, - 0x0F120000, /*lt_uMaxExp1 */ - 0x0F12C350, - 0x0F120000, /*lt_uMaxExp2 */ - 0x0F123520, - 0x0F120000, /*lt_uCapMaxExp1 */ - 0x0F12C350, - 0x0F120000, /*lt_uCapMaxExp2*/ - 0x002A059C, - 0x0F120470, /*lt_uMaxAnGain1 */ - 0x0F120C00, /*lt_uMaxAnGain2 */ - 0x0F120100, /*lt_uMaxDigGain */ - 0x0F121000, /*lt_uMaxTotGain */ - - 0x002A0544, - 0x0F120111, /*lt_uLimitHigh */ - 0x0F1200EF, /*lt_uLimitLow */ - - 0x002A0F2A, - 0x0F120000, /*AFC_Default60Hz 0001:60Hz 0000h:50Hz */ - 0x002A04E6, - 0x0F12077F, /*REG_TC_DBG */ - - 0x002A0F30, - 0x0F120001, /*AFC_D_ConvAccelerPower */ - - 0x002A0608, - 0x0F120001, /*lt_ExpGain_uSubsamplingmode */ - 0x0F120001, /*lt_ExpGain_uNonSubsampling */ - 0x0F120800, /*lt_ExpGain_ExpCurveGainMaxStr */ - 0x0F120100,/*0100 //lt_ExpGain_ExpCurveGainMaxStr_0_uMaxDigGain*/ - 0x0F120001, /*0001 */ - 0x0F120000,/*0000 //lt_ExpGain_ExpCurveGainMaxStr_0__ulExpIn_0_ */ - 0x0F120A3C, /*0A3C */ - 0x0F120000, /*0000 */ - 0x0F120D05, /*0D05 */ - 0x0F120000, /*0000 */ - 0x0F124008, /*4008 */ - 0x0F120000, /*0000 */ - 0x0F127000, /*7400 //?? //700Lux */ - 0x0F120000, /*0000 */ - 0x0F129C00, /*C000 //?? //9C00->9F->A5 //400Lux */ - 0x0F120000, /*0000 */ - 0x0F12AD00, /*AD00 */ - 0x0F120001, /*0001 */ - 0x0F12F1D4, /*F1D4 */ - 0x0F120002, /*0002 */ - 0x0F12DC00, /*DC00 */ - 0x0F120005, /*0005 */ - 0x0F12DC00, /*DC00 */ - 0x0F120005, /*0005 */ - /**/ - 0x002A0638, /*0638 */ - 0x0F120001, /*0001 */ - 0x0F120000,/*0000 //lt_ExpGain_ExpCurveGainMaxStr_0__ulExpOut_0_*/ - 0x0F120A3C, /*0A3C */ - 0x0F120000, /*0000 */ - 0x0F120D05, /*0D05 */ - 0x0F120000, /*0000 */ - 0x0F123408, /*3408 */ - 0x0F120000, /*0000 */ - 0x0F123408, /*3408 */ - 0x0F120000, /*0000 */ - 0x0F126810, /*6810 */ - 0x0F120000, /*0000 */ - 0x0F128214, /*8214 */ - 0x0F120000, /*0000 */ - 0x0F12C350, /*C350 */ - 0x0F120000, /*0000 */ - 0x0F12C350, /*C350 */ - 0x0F120000, /*0000 */ - 0x0F12C350, /*C350 */ - 0x0F120000, /*0000 */ - 0x002A0660, - 0x0F120650, /*lt_ExpGain_ExpCurveGainMaxStr_1_ */ - 0x0F120100, /*lt_ExpGain_ExpCurveGainMaxStr_1__uMaxDigGain */ - 0x002A06B8, - 0x0F12452C, - 0x0F120005, /*lt_uMaxLei */ - -/*=========================================================== -// 11.AE Weight (Normal) -//==========================================================*/ - 0x002A1492, - 0x0F120100, - 0x0F120101, - 0x0F120101, - 0x0F120001, - 0x0F120101, - 0x0F120201, - 0x0F120102, - 0x0F120101, - 0x0F120101, - 0x0F120202, - 0x0F120202, - 0x0F120101, - 0x0F120201, - 0x0F120302, - 0x0F120203, - 0x0F120102, - 0x0F120201, - 0x0F120302, - 0x0F120203, - 0x0F120102, - 0x0F120201, - 0x0F120202, - 0x0F120202, - 0x0F120102, - 0x0F120101, - 0x0F120202, - 0x0F120202, - 0x0F120101, - 0x0F120101, - 0x0F120101, - 0x0F120101, - 0x0F120101, - -/*============================================ -// 14.AWB-BASIC setting -//============================================*/ - -/*AWB init Start point*/ - 0x002A145E, - 0x0F120580, - 0x0F120428, - 0x0F1207B0, - - /*AWB Init */ -/*White Locus*/ - 0x002A11F0, - 0x0F120120, /*awbb_IntcR */ - 0x0F120121, /*awbb_IntcB */ - -/*Indoor Zone*/ - 0x002A101C, - 0x0F120386, - 0x0F1203A8, - 0x0F12033C, - 0x0F120394, - 0x0F1202FE, - 0x0F120372, - 0x0F1202A8, - 0x0F120352, - 0x0F12027C, - 0x0F120300, - 0x0F120264, - 0x0F1202C8, - 0x0F120244, - 0x0F1202A8, - 0x0F12022C, - 0x0F1202A0, - 0x0F12020C, - 0x0F1202A0, - 0x0F1201F4, - 0x0F120298, - 0x0F1201D4, - 0x0F120290, - 0x0F1201CC, - 0x0F120276, - 0x0F1201D2, - 0x0F120260, - 0x0F1201F6, - 0x0F12023A, - 0x0F120000, - 0x0F120000, - 0x0F120000, - 0x0F120000, - 0x0F120000, - 0x0F120000, - 0x0F120000, - 0x0F120000, - 0x0F120000, - 0x0F120000, - 0x0F120000, - 0x0F120000, /*awbb_IndoorGrZones_m_GridStep */ - 0x0F120005, - 0x002A1070, /*awbb_IndoorGrZones_ZInfo_m_GridSz */ - 0x0F12000F, - 0x002A1074, /*awbb_IndoorGrZones_m_Boffs */ - 0x0F120126, -/* Outdoor Zone*/ - 0x002A1078, - 0x0F120270, - 0x0F120296, - 0x0F12024A, - 0x0F1202AC, - 0x0F120240, - 0x0F1202B0, - 0x0F120234, - 0x0F1202B0, - 0x0F120228, - 0x0F1202AE, - 0x0F12021E, - 0x0F1202A8, - 0x0F120212, - 0x0F1202A0, - 0x0F120210, - 0x0F120294, - 0x0F12020E, - 0x0F120288, - 0x0F120218, - 0x0F12027E, - 0x0F120234, - 0x0F120256, - 0x0F120000, - 0x0F120000, - - 0x0F120004, /*awbb_OutdoorGrZones_m_GridStep */ - 0x002A10AC, - 0x0F12000B, /*awbb_OutdoorGrZones_ZInfo_m_GridSz */ - 0x002A10B0, - 0x0F1201E8, /*awbb_OutdoorGrZones_m_Boffs */ - - /*LowBR Zone */ - 0x002A10B4, - 0x0F120350, - 0x0F120422, - 0x0F1202C4, - 0x0F120452, - 0x0F120278, - 0x0F12041C, - 0x0F120230, - 0x0F1203EE, - 0x0F1201F0, - 0x0F120392, - 0x0F1201C0, - 0x0F120340, - 0x0F120194, - 0x0F120302, - 0x0F12016E, - 0x0F1202C2, - 0x0F120148, - 0x0F120286, - 0x0F12018A, - 0x0F120242, - 0x0F120000, - 0x0F120000, - 0x0F120000, - 0x0F120000, - - 0x0F120006, /*awbb_LowBrGrZones_m_GridStep */ - 0x002A10E8, - 0x0F12000A, /*awbb_LowBrGrZones_ZInfo_m_GridSz */ - 0x002A10EC, - 0x0F120106, /*awbb_LowBrGrZones_m_Boffs */ - - /*LowTemp Zone */ - 0x002A10F0, - 0x0F120380, - 0x0F120000, /*awbb_CrclLowT_R_c */ - 0x0F120168, - 0x0F120000, /*awbb_CrclLowT_B_c */ - 0x0F122D90, - 0x0F120000, /*awbb_CrclLowT_Rad_c */ - - /*AWB Convergence Speed */ - 0x002A1464, - 0x0F120008, - 0x0F120190, - 0x0F1200A0, - - 0x002A1228, - 0x0F1200C0, - 0x002A122C, - 0x0F120010, - 0x002A122A, - 0x0F120010, - - 0x002A120A, - 0x0F1205D5, /*awbb_MvEq_RBthresh */ - 0x002A120E, - 0x0F120000, - - 0x0F120771, - 0x0F1203A4, - 0x0F120036, - 0x0F12002A, - - 0x002A1278, - 0x0F12FEF7, - 0x0F120021, - 0x0F120AF0, /*0E74 */ - 0x0F120AF0, /*0E74 */ - 0x0F12018F, - 0x0F120096, - 0x0F12000E, - 0x002A1224, - 0x0F120032, - 0x0F12001E, - 0x0F1200C0, - 0x0F120010, - 0x0F120002, /*awbb_YThreshLow_Low */ - 0x002A2BA4, - 0x0F120006, /*Mon_AWB_ByPassMode */ - - 0x002A146C, - 0x0F120002, /*awbb_GridEnable */ - - /*Grid */ - 0x002A1434, - 0x0F1202CE, /* awbb_GridConst_1 */ - 0x0F120347, /* awbb_GridConst_1_1_ */ - 0x0F1203C2, /* awbb_GridConst_1_2_ */ - 0x0F1210A0, /* awbb_GridConst_2 */ - 0x0F1210A1, /* awbb_GridConst_2_1_ */ - 0x0F121185, /* awbb_GridConst_2_2_ */ - 0x0F121186, /* awbb_GridConst_2_3_ */ - 0x0F1211E5, /* awbb_GridConst_2_4_ */ - 0x0F1211E6, /* awbb_GridConst_2_5_ */ - 0x0F1200AB, /* awbb_GridCoeff_R_1 */ - 0x0F1200BF, /* awbb_GridCoeff_B_1 */ - 0x0F1200D2, /* awbb_GridCoeff_R_2 */ - 0x0F120093, /* awbb_GridCoeff_B_2 */ - - /*Indoor Grid Offset */ - 0x002A13A4, - 0x0F120000, /*0000 */ - 0x0F12FFE8, /*FFD8 */ - 0x0F12FFE8, /*FFD8 */ - 0x0F12FFC0, /*FFD8 */ - 0x0F12FFC0, /*FFD8 */ - 0x0F12FFD0, /*FFF6 B */ - /**/ - 0x0F120000,/*0000 */ - 0x0F12FFD8, /*FFD8 */ - 0x0F12FFD8, /*FFD8 */ - 0x0F12FFC0, /*FFD8 */ - 0x0F12FFC0, /*FFD8 */ - 0x0F12FFD0, /*FFF6 */ - /**/ - 0x0F120000,/*0000 */ - 0x0F12FFD8, /*FFD8 */ - 0x0F12FFD8, /*FFD8 */ - 0x0F12FFC0, /*FFD8 */ - 0x0F12FFC0, /*FFD8 */ - 0x0F12FFD0, /*FFF6 */ - /**/ - 0x0F12FFEC,/*FFEC*/ - 0x0F120010,/*000A */ - 0x0F120010, /*000A */ - 0x0F12FFC0, /*FFC4 */ - 0x0F12FFC0, /*FFC4 */ - 0x0F12FFBC, /*FF56 7 */ - /**/ - 0x0F12FFEC,/*FFEC*/ - 0x0F120010,/*000A */ - 0x0F120010, /*000A */ - 0x0F12FFC0, /*FFC4 */ - 0x0F12FFC0, /*FFC4 */ - 0x0F12FFBC, /*FF56 */ - /**/ - 0x0F12FFEC,/*FFEC*/ - 0x0F120010,/*000A */ - 0x0F120010, /*000A */ - 0x0F12FFC0, /*FFC4 */ - 0x0F12FFC0, /*FFC4 */ - 0x0F12FFBC, /*FF56 */ - -/*Outdoor Grid Offset*/ - 0x0F12FFE0, - 0x0F12FFE0, - 0x0F12FFE0, - 0x0F12FFE0, - 0x0F120000, - 0x0F120000, - 0x0F12FFE0, - 0x0F12FFE0, - 0x0F12FFE0, - 0x0F12FFE0, - 0x0F120000, - 0x0F120000, - 0x0F12FFE0, - 0x0F12FFE0, - 0x0F12FFE0, - 0x0F12FFE0, - 0x0F120000, - 0x0F120000, - 0x0F12FFB0, - 0x0F12FFA8, - 0x0F12FFA8, - 0x0F12FFA8, - 0x0F120000, - 0x0F120000, - 0x0F12FFB0, - 0x0F12FFA8, - 0x0F12FFA8, - 0x0F12FFA8, - 0x0F120000, - 0x0F120000, - 0x0F12FFB0, - 0x0F12FFA8, - 0x0F12FFA8, - 0x0F12FFA8, - 0x0F120000, - 0x0F120000, - 0x002A1208, - 0x0F120020, - - 0x002A144E, - 0x0F120000, /*awbb_RGainOff */ - 0x0F12FFE0, /*awbb_BGainOff */ - 0x0F120000, /*awbb_GGainOff */ - -/*====================================================== -// 15.CCM Setting -//=====================================================*/ - /*CCM*/ - 0x002A08A6, - 0x0F1200C0, - 0x0F120100, - 0x0F120125, - 0x0F12015F, - 0x0F12017C, - 0x0F120194, - - 0x0F120001, - - 0x002A0898, - 0x0F124800, - 0x0F127000, - 0x002A08A0, - 0x0F1248D8, - 0x0F127000, - 0x002A4800,/*Horizon */ - 0x0F120208, - 0x0F12FFB5, - 0x0F12FFE8, - 0x0F12FF20, - 0x0F1201BF, - 0x0F12FF53, - 0x0F120022, - 0x0F12FFEA, - 0x0F1201C2, - 0x0F1200C6, - 0x0F120095, - 0x0F12FEFD, - 0x0F120206, - 0x0F12FF7F, - 0x0F120191, - 0x0F12FF06, - 0x0F1201BA, - 0x0F120108, - - 0x0F120208, /* inca A */ - 0x0F12FFB5, - 0x0F12FFE8, - 0x0F12FF20, - 0x0F1201BF, - 0x0F12FF53, - 0x0F120022, - 0x0F12FFEA, - 0x0F1201C2, - 0x0F1200C6, - 0x0F120095, - 0x0F12FEFD, - 0x0F120206, - 0x0F12FF7F, - 0x0F120191, - 0x0F12FF06, - 0x0F1201BA, - 0x0F120108, - 0x0F120208,/*WW*/ - 0x0F12FFB5, - 0x0F12FFE8, - 0x0F12FF20, - 0x0F1201BF, - 0x0F12FF53, - 0x0F120022, - 0x0F12FFEA, - 0x0F1201C2, - 0x0F1200C6, - 0x0F120095, - 0x0F12FEFD, - 0x0F120206, - 0x0F12FF7F, - 0x0F120191, - 0x0F12FF06, - 0x0F1201BA, - 0x0F120108, - 0x0F120204,/*CW*/ - 0x0F12FFB2, - 0x0F12FFF5, - 0x0F12FEF1, - 0x0F12014E, - 0x0F12FF18, - 0x0F12FFE6, - 0x0F12FFDD, - 0x0F1201B2, - 0x0F1200F2, - 0x0F1200CA, - 0x0F12FF48, - 0x0F120151, - 0x0F12FF50, - 0x0F120147, - 0x0F12FF75, - 0x0F120187, - 0x0F1201BF, - 0x0F1201F5,/*D50*/ - 0x0F12FFB4, - 0x0F120001, - 0x0F12FED7, - 0x0F12014B, - 0x0F12FF35, - 0x0F12FFE6, - 0x0F12FFDD, - 0x0F1201B2, - 0x0F1200F2, - 0x0F1200CA, - 0x0F12FF48, - 0x0F120151, - 0x0F12FF50, - 0x0F120147, - 0x0F12FF75, - 0x0F120187, - 0x0F1201BF, - 0x0F1201F5,/*D65 */ - 0x0F12FFB4, - 0x0F120001, - 0x0F12FED7, - 0x0F12014B, - 0x0F12FF35, - 0x0F12FFE6, - 0x0F12FFDD, - 0x0F1201B2, - 0x0F1200F2, - 0x0F1200CA, - 0x0F12FF48, - 0x0F120151, - 0x0F12FF50, - 0x0F120147, - 0x0F12FF75, - 0x0F120187, - 0x0F1201BF, - 0x0F1201E5,/*Y hue-5. TVAR_wbt_pOutdoorCcm[0] */ - 0x0F12FFA4, - 0x0F12FFDC, - 0x0F12FE90, - 0x0F12013F, - 0x0F12FF1B, - 0x0F12FFD2, - 0x0F12FFDF, - 0x0F120236, - 0x0F1200F0, - 0x0F1200C9, - 0x0F12FF59, - 0x0F1201CE, - 0x0F12FF83, - 0x0F120195, - 0x0F12FEF3, - 0x0F120126, - 0x0F120162, -/*================================================================== -// 16.GAMMA -//================================================================*/ - 0x002A0734,/*R*/ - 0x0F120000, - 0x0F120001, - 0x0F120006, - 0x0F120017, - 0x0F12004A, - 0x0F1200C9, - 0x0F120138, - 0x0F120163, - 0x0F120189, - 0x0F1201C6, - 0x0F1201F8, - 0x0F120222, - 0x0F120247, - 0x0F120282, - 0x0F1202B5, - 0x0F12030F, - 0x0F12035F, - 0x0F1203A2, - 0x0F1203D8, - 0x0F1203FF, - - 0x0F120000,/*G*/ - 0x0F120001, - 0x0F120006, - 0x0F120017, - 0x0F12004A, - 0x0F1200C9, - 0x0F120138, - 0x0F120163, - 0x0F120189, - 0x0F1201C6, - 0x0F1201F8, - 0x0F120222, - 0x0F120247, - 0x0F120282, - 0x0F1202B5, - 0x0F12030F, - 0x0F12035F, - 0x0F1203A2, - 0x0F1203D8, - 0x0F1203FF, - - 0x0F120000,/*B*/ - 0x0F120001, - 0x0F120006, - 0x0F120017, - 0x0F12004A, - 0x0F1200C9, - 0x0F120138, - 0x0F120163, - 0x0F120189, - 0x0F1201C6, - 0x0F1201F8, - 0x0F120222, - 0x0F120247, - 0x0F120282, - 0x0F1202B5, - 0x0F12030F, - 0x0F12035F, - 0x0F1203A2, - 0x0F1203D8, - 0x0F1203FF, -/*RGB OutdoorGamma*/ - 0x0F120000, - 0x0F12000B, - 0x0F120019, - 0x0F120036, - 0x0F12006F, - 0x0F1200D8, - 0x0F120135, - 0x0F12015F, - 0x0F120185, - 0x0F1201C1, - 0x0F1201F3, - 0x0F120220, - 0x0F12024A, - 0x0F120291, - 0x0F1202D0, - 0x0F12032A, - 0x0F12036A, - 0x0F12039F, - 0x0F1203CC, - 0x0F1203F9, - 0x0F120000, - 0x0F12000B, - 0x0F120019, - 0x0F120036, - 0x0F12006F, - 0x0F1200D8, - 0x0F120135, - 0x0F12015F, - 0x0F120185, - 0x0F1201C1, - 0x0F1201F3, - 0x0F120220, - 0x0F12024A, - 0x0F120291, - 0x0F1202D0, - 0x0F12032A, - 0x0F12036A, - 0x0F12039F, - 0x0F1203CC, - 0x0F1203F9, - 0x0F120000, - 0x0F12000B, - 0x0F120019, - 0x0F120036, - 0x0F12006F, - 0x0F1200D8, - 0x0F120135, - 0x0F12015F, - 0x0F120185, - 0x0F1201C1, - 0x0F1201F3, - 0x0F120220, - 0x0F12024A, - 0x0F120291, - 0x0F1202D0, - 0x0F12032A, - 0x0F12036A, - 0x0F12039F, - 0x0F1203CC, - 0x0F1203F9, -/*=========================================================== -// 17.AFIT -//==========================================================*/ - 0x002A0944, - 0x0F120050,/*afit_uNoiseIndInDoor */ - 0x0F1200B0, /*afit_uNoiseIndInDoor */ - 0x0F120196, /*afit_uNoiseIndInDoor */ - 0x0F120245, /*afit_uNoiseIndInDoor */ - 0x0F120300, /*afit_uNoiseIndInDoor */ - - 0x002A0938, - 0x0F120000,/* on/off AFIT by NB option */ - 0x0F120014, /*SARR_uNormBrInDoor */ - 0x0F1200D2, /*SARR_uNormBrInDoor */ - 0x0F120384, /*SARR_uNormBrInDoor */ - 0x0F1207D0, /*SARR_uNormBrInDoor */ - 0x0F121388, /*SARR_uNormBrInDoor */ - - 0x002A0976, - 0x0F120070,/*afit_usGamutTh */ - 0x0F120005, /*afit_usNeargrayOffset */ - 0x0F120000, /*afit_bUseSenBpr */ - 0x0F1201CC, /*afit_usBprThr_0_ */ - 0x0F1201CC, /*afit_usBprThr_1_ */ - 0x0F1201CC, /*afit_usBprThr_2_ */ - 0x0F1201CC, /*afit_usBprThr_3_ */ - 0x0F1201CC, /*afit_usBprThr_4_ */ - 0x0F120180, /*afit_NIContrastAFITValue */ - 0x0F120196, /*afit_NIContrastTh */ - - 0x002A098C, - 0x0F12FFEC, /*7000098C//_BRIGHTNESS */ - 0x0F120000, /*7000098E//_CONTRAST */ - 0x0F120000, /*70000990//_SATURATION */ - 0x0F120000, /*70000992//_SHARP_BLUR */ - 0x0F120000, /*70000994//_GLAMOUR */ - 0x0F1200C0, /*70000996//_bnr_edge_high */ - 0x0F120064, /*70000998//_postdmsc_iLowBright */ - 0x0F120384, /*7000099A//_postdmsc_iHighBright */ - 0x0F12005F, /*7000099C//_postdmsc_iLowSat */ - 0x0F1201F4, /*7000099E//_postdmsc_iHighSat */ - 0x0F120070, /*700009A0//_postdmsc_iTune */ - 0x0F120040, /*700009A2//_yuvemix_mNegRanges_0 */ - 0x0F1200A0, /*700009A4//_yuvemix_mNegRanges_1 */ - 0x0F120100, /*700009A6//_yuvemix_mNegRanges_2 */ - 0x0F120010, /*700009A8//_yuvemix_mPosRanges_0 */ - 0x0F120040, /*700009AA//_yuvemix_mPosRanges_1 */ - 0x0F1200A0, /*700009AC//_yuvemix_mPosRanges_2 */ - 0x0F121430, /*700009AE//_bnr_edge_low */ - 0x0F120201, /*700009B0//_bnr_repl_force */ - 0x0F120204, /*700009B2//_bnr_iHotThreshLow */ - 0x0F123604, /*700009B4//_bnr_iColdThreshLow */ - 0x0F12032A, /*700009B6//_bnr_DispTH_High */ - 0x0F120403, /*700009B8//_bnr_DISP_Limit_High */ - 0x0F121B06, /*700009BA//_bnr_iDistSigmaMax */ - 0x0F126015, /*700009BC//_bnr_iDiffSigmaHigh */ - 0x0F1200C0, /*700009BE//_bnr_iNormalizedSTD_Limit */ - 0x0F126080, /*700009C0//_bnr_iDirMinThres */ - 0x0F124080, /*700009C2//_bnr_iDirFltDiffThresLow */ - 0x0F120640, /*700009C4//_bnr_iDirSmoothPowerLow */ - 0x0F120306, /*700009C6//_bnr_iHighMaxSlopeAllowed */ - 0x0F122003, /*700009C8//_bnr_iHighSlopeThresh */ - 0x0F12FF01, /*700009CA//_bnr_iSlopeBlurStrength */ - 0x0F120000, /*700009CC//_bnr_AddNoisePower1 */ - 0x0F120400, /*700009CE//_bnr_iRadialTune */ - 0x0F12365A, /*700009D0//_bnr_iRadialLimit */ - 0x0F12102A, /*700009D2//_ee_iFSMagThHigh */ - 0x0F12000B, /*700009D4//_ee_iFSVarThHigh */ - 0x0F120600, /*700009D6//_ee_iFSThHigh */ - 0x0F125A0F, /*700009D8//_ee_iFSVarCountTh */ - 0x0F120505, /*700009DA//_ee_iRadialPower */ - 0x0F121802, /*700009DC//_ee_iROADThres */ - 0x0F120000, /*700009DE//_ee_iROADSubMaxNR */ - 0x0F122006, /*700009E0//_ee_iROADNeiThres */ - 0x0F123028, /*700009E2//_ee_iSmoothEdgeThres */ - 0x0F120418, /*700009E4//_ee_iWSharpen */ - 0x0F120101, /*700009E6//_ee_iWShThresh */ - 0x0F120800, /*700009E8//_ee_iEmbossCentAdd */ - 0x0F121804, /*700009EA//_ee_iReduceEdgeThresh */ - 0x0F124008, /*700009EC//_dmsc_iDesatThresh */ - 0x0F120540, /*700009EE//_dmsc_iDemBlurLow */ - 0x0F128006, /*700009F0//_dmsc_iDecisionThresh */ - 0x0F120020, /*700009F2//_dmsc_iMonochrom */ - 0x0F120000, /*700009F4//_dmsc_iGRDenoiseVal */ - 0x0F122000, /*700009F6//_dmsc_iEdgeDesatThrLow */ - 0x0F120000, /*700009F8//_dmsc_iNearGrayDesat */ - 0x0F121E10, /*700009FA//_postdmsc_iBCoeff */ - 0x0F12000B, /*700009FC//_postdmsc_iWideMult */ - 0x0F120607, /*700009FE//_yuvemix_mNegSlopes_1 */ - 0x0F120005, /*70000A00//_yuvemix_mNegSlopes_3 */ - 0x0F120607, /*70000A02//_yuvemix_mPosSlopes_1 */ - 0x0F120705, /*70000A04//_yuvemix_mPosSlopes_3 */ - 0x0F120206, /*70000A06//_yuviirnr_iXSupportUV */ - 0x0F120304, /*70000A08//_yuviirnr_iHighYNorm */ - 0x0F120309, /*70000A0A//_yuviirnr_iHighUVNorm */ - 0x0F120305, /*70000A0C//_yuviirnr_iUVNormShift */ - 0x0F122006, /*70000A0E//_yuviirnr_iVertLength_UV */ - 0x0F121320, /*70000A10//_yuviirnr_iDiffThreshH_Y */ - 0x0F121014, /*70000A12//_yuviirnr_iDiffThreshH_UV */ - 0x0F121010, /*70000A14//_yuviirnr_iMaxThreshH_Y */ - 0x0F120C10, /*70000A16//_yuviirnr_iMaxThreshH_UV */ - 0x0F121A0C, /*70000A18//_yuviirnr_iYNRStrengthH */ - 0x0F124A18, /*70000A1A//_yuviirnr_iUVNRStrengthH */ - 0x0F120080, /*70000A1C//_RGBGamma2_iLinearity */ - 0x0F120350, /*70000A1E//_ccm_oscar_iSaturation */ - 0x0F120180, /*70000A20//_RGB2YUV_iRGBGain */ - 0x0F120A0A, /*70000A22//_bnr_iClustMulT_H */ - 0x0F120101, /*70000A24//_bnr_iClustThresh_H */ - 0x0F122A36, /*70000A26//_bnr_iDenThreshLow */ - 0x0F126024, /*70000A28//_ee_iLowSharpPower */ - 0x0F122A36, /*70000A2A//_ee_iLowShDenoise */ - 0x0F12FFFF, /*70000A2C//_ee_iLowSharpClamp */ - 0x0F120808, /*70000A2E//_ee_iReduceEdgeMinMult */ - 0x0F120A01, /*70000A30//_bnr_nClustLevel_H_Bin */ - 0x0F12010A, /*70000A32//_bnr_iClustMulT_C_Bin */ - 0x0F122701, /*70000A34//_bnr_iClustThresh_C_Bin */ - 0x0F12241E, /*70000A36//_bnr_iDenThreshHigh_Bin */ - 0x0F122E60, /*70000A38//_ee_iHighSharpPower_Bin */ - 0x0F12FF22, /*70000A3A//_ee_iHighShDenoise_Bin */ - 0x0F1240FF, /*70000A3C//_ee_iHighSharpClamp_Bin */ - 0x0F120009, /*70000A3E//_ee_iReduceEdgeSlope_Bin */ - 0x0F120001, /*70000A40//_bnr_nClustLevel_C */ - 0x0F120000, /*70000A42//_BRIGHTNESS */ - 0x0F120000, /*70000A44//_CONTRAST */ - 0x0F120000, /*70000A46//_SATURATION */ - 0x0F120000, /*70000A48//_SHARP_BLUR */ - 0x0F120000, /*70000A4A//_GLAMOUR */ - 0x0F1200C0, /*70000A4C//_bnr_edge_high */ - 0x0F120064, /*70000A4E//_postdmsc_iLowBright */ - 0x0F120384, /*70000A50//_postdmsc_iHighBright */ - 0x0F120051, /*70000A52//_postdmsc_iLowSat */ - 0x0F1201F4, /*70000A54//_postdmsc_iHighSat */ - 0x0F120070, /*70000A56//_postdmsc_iTune */ - 0x0F120040, /*70000A58//_yuvemix_mNegRanges_0 */ - 0x0F1200A0, /*70000A5A//_yuvemix_mNegRanges_1 */ - 0x0F120100, /*70000A5C//_yuvemix_mNegRanges_2 */ - 0x0F120010, /*70000A5E//_yuvemix_mPosRanges_0 */ - 0x0F120060, /*70000A60//_yuvemix_mPosRanges_1 */ - 0x0F120100, /*70000A62//_yuvemix_mPosRanges_2 */ - 0x0F121430, /*70000A64//_bnr_edge_low */ - 0x0F120201, /*70000A66//_bnr_repl_force */ - 0x0F120204, /*70000A68//_bnr_iHotThreshLow */ - 0x0F122404, /*70000A6A//_bnr_iColdThreshLow */ - 0x0F12031B, /*70000A6C//_bnr_DispTH_High */ - 0x0F120103, /*70000A6E//_bnr_DISP_Limit_High */ - 0x0F121205, /*70000A70//_bnr_iDistSigmaMax */ - 0x0F12400D, /*70000A72//_bnr_iDiffSigmaHigh */ - 0x0F120080, /*70000A74//_bnr_iNormalizedSTD_Limit */ - 0x0F121980, /*70000A76//_bnr_iDirMinThres */ - 0x0F12272E, /*70000A78//_bnr_iDirFltDiffThresLow */ - 0x0F120629, /*70000A7A//_bnr_iDirSmoothPowerLow */ - 0x0F120306, /*70000A7C//_bnr_iHighMaxSlopeAllowed */ - 0x0F122003, /*70000A7E//_bnr_iHighSlopeThresh */ - 0x0F12FF01, /*70000A80//_bnr_iSlopeBlurStrength */ - 0x0F120404, /*70000A82//_bnr_AddNoisePower1 */ - 0x0F120300, /*70000A84//_bnr_iRadialTune */ - 0x0F12245A, /*70000A86//_bnr_iRadialLimit */ - 0x0F121018, /*70000A88//_ee_iFSMagThHigh */ - 0x0F12000B, /*70000A8A//_ee_iFSVarThHigh */ - 0x0F120B00, /*70000A8C//_ee_iFSThHigh */ - 0x0F125A0F, /*70000A8E//_ee_iFSVarCountTh */ - 0x0F120505, /*70000A90//_ee_iRadialPower */ - 0x0F121802, /*70000A92//_ee_iROADThres */ - 0x0F120000, /*70000A94//_ee_iROADSubMaxNR */ - 0x0F122006, /*70000A96//_ee_iROADNeiThres */ - 0x0F123828, /*70000A98//_ee_iSmoothEdgeThres */ - 0x0F120425, /*70000A9A//_ee_iWSharpen */ - 0x0F120101, /*70000A9C//_ee_iWShThresh */ - 0x0F120800, /*70000A9E//_ee_iEmbossCentAdd */ - 0x0F121004, /*70000AA0//_ee_iReduceEdgeThresh */ - 0x0F124008, /*70000AA2//_dmsc_iDesatThresh */ - 0x0F120540, /*70000AA4//_dmsc_iDemBlurLow */ - 0x0F128006, /*70000AA6//_dmsc_iDecisionThresh */ - 0x0F120020, /*70000AA8//_dmsc_iMonochrom */ - 0x0F120000, /*70000AAA//_dmsc_iGRDenoiseVal */ - 0x0F122000, /*70000AAC//_dmsc_iEdgeDesatThrLow */ - 0x0F120000, /*70000AAE//_dmsc_iNearGrayDesat */ - 0x0F121E10, /*70000AB0//_postdmsc_iBCoeff */ - 0x0F12000B, /*70000AB2//_postdmsc_iWideMult */ - 0x0F120607, /*70000AB4//_yuvemix_mNegSlopes_1 */ - 0x0F120005, /*70000AB6//_yuvemix_mNegSlopes_3 */ - 0x0F120607, /*70000AB8//_yuvemix_mPosSlopes_1 */ - 0x0F120405, /*70000ABA//_yuvemix_mPosSlopes_3 */ - 0x0F120205, /*70000ABC//_yuviirnr_iXSupportUV */ - 0x0F120304, /*70000ABE//_yuviirnr_iHighYNorm */ - 0x0F120409, /*70000AC0//_yuviirnr_iHighUVNorm */ - 0x0F120306, /*70000AC2//_yuviirnr_iUVNormShift */ - 0x0F120407, /*70000AC4//_yuviirnr_iVertLength_UV */ - 0x0F122204, /*70000AC6//_yuviirnr_iDiffThreshH_Y */ - 0x0F12021C, /*70000AC8//_yuviirnr_iDiffThreshH_UV */ - 0x0F121102, /*70000ACA//_yuviirnr_iMaxThreshH_Y */ - 0x0F120611, /*70000ACC//_yuviirnr_iMaxThreshH_UV */ - 0x0F121A02, /*70000ACE//_yuviirnr_iYNRStrengthH */ - 0x0F128018, /*70000AD0//_yuviirnr_iUVNRStrengthH */ - 0x0F120080, /*70000AD2//_RGBGamma2_iLinearity */ - 0x0F120374, /*70000AD4//_ccm_oscar_iSaturation */ - 0x0F120180, /*70000AD6//_RGB2YUV_iRGBGain */ - 0x0F120A0A, /*70000AD8//_bnr_iClustMulT_H */ - 0x0F120101, /*70000ADA//_bnr_iClustThresh_H */ - 0x0F12141D, /*70000ADC//_bnr_iDenThreshLow */ - 0x0F126024, /*70000ADE//_ee_iLowSharpPower */ - 0x0F121217, /*70000AE0//_ee_iLowShDenoise */ - 0x0F12FFFF, /*70000AE2//_ee_iLowSharpClamp */ - 0x0F120808, /*70000AE4//_ee_iReduceEdgeMinMult */ - 0x0F120A01, /*70000AE6//_bnr_nClustLevel_H_Bin */ - 0x0F12010A, /*70000AE8//_bnr_iClustMulT_C_Bin */ - 0x0F120001, /*70000AEA//_bnr_iClustThresh_C_Bin */ - 0x0F122400, /*70000AEC//_bnr_iDenThreshHigh_Bin */ - 0x0F121660, /*70000AEE//_ee_iHighSharpPower_Bin */ - 0x0F12FF10, /*70000AF0//_ee_iHighShDenoise_Bin */ - 0x0F1240FF, /*70000AF2//_ee_iHighSharpClamp_Bin */ - 0x0F120009, /*70000AF4//_ee_iReduceEdgeSlope_Bin */ - 0x0F120001, /*70000AF6//_bnr_nClustLevel_C */ - 0x0F120000, /*70000AF8//_BRIGHTNESS AFIT 2 */ - 0x0F120000, /*70000AFA//_CONTRAST */ - 0x0F120000, /*70000AFC//_SATURATION */ - 0x0F120000, /*70000AFE//_SHARP_BLUR */ - 0x0F120000, /*70000B00//_GLAMOUR */ - 0x0F1200C0, /*70000B02//_bnr_edge_high */ - 0x0F120064, /*70000B04//_postdmsc_iLowBright */ - 0x0F120384, /*70000B06//_postdmsc_iHighBright */ - 0x0F120043, /*70000B08//_postdmsc_iLowSat */ - 0x0F1201F4, /*70000B0A//_postdmsc_iHighSat */ - 0x0F120070, /*70000B0C//_postdmsc_iTune */ - 0x0F120040, /*70000B0E//_yuvemix_mNegRanges_0 */ - 0x0F1200A0, /*70000B10//_yuvemix_mNegRanges_1 */ - 0x0F120100, /*70000B12//_yuvemix_mNegRanges_2 */ - 0x0F120010, /*70000B14//_yuvemix_mPosRanges_0 */ - 0x0F120060, /*70000B16//_yuvemix_mPosRanges_1 */ - 0x0F120100, /*70000B18//_yuvemix_mPosRanges_2 */ - 0x0F121430, /*70000B1A//_bnr_edge_low */ - 0x0F120201, /*70000B1C//_bnr_repl_force */ - 0x0F120204, /*70000B1E//_bnr_iHotThreshLow */ - 0x0F121B04, /*70000B20//_bnr_iColdThreshLow */ - 0x0F120312, /*70000B22//_bnr_DispTH_High */ - 0x0F120003, /*70000B24//_bnr_DISP_Limit_High */ - 0x0F120C03, /*70000B26//_bnr_iDistSigmaMax */ - 0x0F122806, /*70000B28//_bnr_iDiffSigmaHigh */ - 0x0F120060, /*70000B2A//_bnr_iNormalizedSTD_Limit */ - 0x0F121580, /*70000B2C//_bnr_iDirMinThres */ - 0x0F122020, /*70000B2E//_bnr_iDirFltDiffThresLow */ - 0x0F120620, /*70000B30//_bnr_iDirSmoothPowerLow */ - 0x0F120306, /*70000B32//_bnr_iHighMaxSlopeAllowed */ - 0x0F122003, /*70000B34//_bnr_iHighSlopeThresh */ - 0x0F12FF01, /*70000B36//_bnr_iSlopeBlurStrength */ - 0x0F120404, /*70000B38//_bnr_AddNoisePower1 */ - 0x0F120300, /*70000B3A//_bnr_iRadialTune */ - 0x0F12145A, /*70000B3C//_bnr_iRadialLimit */ - 0x0F121010, /*70000B3E//_ee_iFSMagThHigh */ - 0x0F12000B, /*70000B40//_ee_iFSVarThHigh */ - 0x0F120E00, /*70000B42//_ee_iFSThHigh */ - 0x0F125A0F, /*70000B44//_ee_iFSVarCountTh */ - 0x0F120504, /*70000B46//_ee_iRadialPower */ - 0x0F121802, /*70000B48//_ee_iROADThres */ - 0x0F120000, /*70000B4A//_ee_iROADSubMaxNR */ - 0x0F122006, /*70000B4C//_ee_iROADNeiThres */ - 0x0F123828, /*70000B4E//_ee_iSmoothEdgeThres */ - 0x0F120428, /*70000B50//_ee_iWSharpen */ - 0x0F120101, /*70000B52//_ee_iWShThresh */ - 0x0F128000, /*70000B54//_ee_iEmbossCentAdd */ - 0x0F120A04, /*70000B56//_ee_iReduceEdgeThresh */ - 0x0F124008, /*70000B58//_dmsc_iDesatThresh */ - 0x0F120540, /*70000B5A//_dmsc_iDemBlurLow */ - 0x0F128006, /*70000B5C//_dmsc_iDecisionThresh */ - 0x0F120020, /*70000B5E//_dmsc_iMonochrom */ - 0x0F120000, /*70000B60//_dmsc_iGRDenoiseVal */ - 0x0F122000, /*70000B62//_dmsc_iEdgeDesatThrLow */ - 0x0F120000, /*70000B64//_dmsc_iNearGrayDesat */ - 0x0F121E10, /*70000B66//_postdmsc_iBCoeff */ - 0x0F12000B, /*70000B68//_postdmsc_iWideMult */ - 0x0F120607, /*70000B6A//_yuvemix_mNegSlopes_1 */ - 0x0F120005, /*70000B6C//_yuvemix_mNegSlopes_3 */ - 0x0F120607, /*70000B6E//_yuvemix_mPosSlopes_1 */ - 0x0F120405, /*70000B70//_yuvemix_mPosSlopes_3 */ - 0x0F120207, /*70000B72//_yuviirnr_iXSupportUV */ - 0x0F120304, /*70000B74//_yuviirnr_iHighYNorm */ - 0x0F120409, /*70000B76//_yuviirnr_iHighUVNorm */ - 0x0F120306, /*70000B78//_yuviirnr_iUVNormShift */ - 0x0F120407, /*70000B7A//_yuviirnr_iVertLength_UV */ - 0x0F122404, /*70000B7C//_yuviirnr_iDiffThreshH_Y */ - 0x0F120221, /*70000B7E//_yuviirnr_iDiffThreshH_UV */ - 0x0F121202, /*70000B80//_yuviirnr_iMaxThreshH_Y */ - 0x0F120613, /*70000B82//_yuviirnr_iMaxThreshH_UV */ - 0x0F121A02, /*70000B84//_yuviirnr_iYNRStrengthH */ - 0x0F128018, /*70000B86//_yuviirnr_iUVNRStrengthH */ - 0x0F120080, /*70000B88//_RGBGamma2_iLinearity */ - 0x0F120080, /*70000B8A//_ccm_oscar_iSaturation */ - 0x0F120180, /*70000B8C//_RGB2YUV_iRGBGain */ - 0x0F120A0A, /*70000B8E//_bnr_iClustMulT_H */ - 0x0F120101, /*70000B90//_bnr_iClustThresh_H */ - 0x0F12121B, /*70000B92//_bnr_iDenThreshLow */ - 0x0F126024, /*70000B94//_ee_iLowSharpPower */ - 0x0F120C0C, /*70000B96//_ee_iLowShDenoise */ - 0x0F12FFFF, /*70000B98//_ee_iLowSharpClamp */ - 0x0F120808, /*70000B9A//_ee_iReduceEdgeMinMult */ - 0x0F120A01, /*70000B9C//_bnr_nClustLevel_H_Bin */ - 0x0F12010A, /*70000B9E//_bnr_iClustMulT_C_Bin */ - 0x0F120001, /*70000BA0//_bnr_iClustThresh_C_Bin */ - 0x0F122400, /*70000BA2//_bnr_iDenThreshHigh_Bin */ - 0x0F120460, /*70000BA4//_ee_iHighSharpPower_Bin */ - 0x0F12FF04, /*70000BA6//_ee_iHighShDenoise_Bin */ - 0x0F1240FF, /*70000BA8//_ee_iHighSharpClamp_Bin */ - 0x0F120009, /*70000BAA//_ee_iReduceEdgeSlope_Bin */ - 0x0F120001, /*70000BAC//_bnr_nClustLevel_C */ - 0x0F120000, /*70000BAE//_BRIGHTNESS AFIT 3 */ - 0x0F120000, /*70000BB0//_CONTRAST */ - 0x0F120000, /*70000BB2//_SATURATION */ - 0x0F120000, /*70000BB4//_SHARP_BLUR */ - 0x0F120000, /*70000BB6//_GLAMOUR */ - 0x0F1200C0, /*70000BB8//_bnr_edge_high */ - 0x0F120064, /*70000BBA//_postdmsc_iLowBright */ - 0x0F120384, /*70000BBC//_postdmsc_iHighBright */ - 0x0F120032, /*70000BBE//_postdmsc_iLowSat */ - 0x0F1201F4, /*70000BC0//_postdmsc_iHighSat */ - 0x0F120070, /*70000BC2//_postdmsc_iTune */ - 0x0F120040, /*70000BC4//_yuvemix_mNegRanges_0 */ - 0x0F1200A0, /*70000BC6//_yuvemix_mNegRanges_1 */ - 0x0F120100, /*70000BC8//_yuvemix_mNegRanges_2 */ - 0x0F120010, /*70000BCA//_yuvemix_mPosRanges_0 */ - 0x0F120060, /*70000BCC//_yuvemix_mPosRanges_1 */ - 0x0F120100, /*70000BCE//_yuvemix_mPosRanges_2 */ - 0x0F121430, /*70000BD0//_bnr_edge_low */ - 0x0F120201, /*70000BD2//_bnr_repl_force */ - 0x0F120204, /*70000BD4//_bnr_iHotThreshLow */ - 0x0F121504, /*70000BD6//_bnr_iColdThreshLow */ - 0x0F12030F, /*70000BD8//_bnr_DispTH_High */ - 0x0F120003, /*70000BDA//_bnr_DISP_Limit_High */ - 0x0F120902, /*70000BDC//_bnr_iDistSigmaMax */ - 0x0F122004, /*70000BDE//_bnr_iDiffSigmaHigh */ - 0x0F120050, /*70000BE0//_bnr_iNormalizedSTD_Limit */ - 0x0F121140, /*70000BE2//_bnr_iDirMinThres */ - 0x0F12201C, /*70000BE4//_bnr_iDirFltDiffThresLow */ - 0x0F120620, /*70000BE6//_bnr_iDirSmoothPowerLow */ - 0x0F120306, /*70000BE8//_bnr_iHighMaxSlopeAllowed */ - 0x0F122003, /*70000BEA//_bnr_iHighSlopeThresh */ - 0x0F12FF01, /*70000BEC//_bnr_iSlopeBlurStrength */ - 0x0F120404, /*70000BEE//_bnr_AddNoisePower1 */ - 0x0F120300, /*70000BF0//_bnr_iRadialTune */ - 0x0F12145A, /*70000BF2//_bnr_iRadialLimit */ - 0x0F121010, /*70000BF4//_ee_iFSMagThHigh */ - 0x0F12000B, /*70000BF6//_ee_iFSVarThHigh */ - 0x0F121000, /*70000BF8//_ee_iFSThHigh */ - 0x0F125A0F, /*70000BFA//_ee_iFSVarCountTh */ - 0x0F120503, /*70000BFC//_ee_iRadialPower */ - 0x0F121802, /*70000BFE//_ee_iROADThres */ - 0x0F120000, /*70000C00//_ee_iROADSubMaxNR */ - 0x0F122006, /*70000C02//_ee_iROADNeiThres */ - 0x0F123C28, /*70000C04//_ee_iSmoothEdgeThres */ - 0x0F12042C, /*70000C06//_ee_iWSharpen */ - 0x0F120101, /*70000C08//_ee_iWShThresh */ - 0x0F12FF00, /*70000C0A//_ee_iEmbossCentAdd */ - 0x0F120904, /*70000C0C//_ee_iReduceEdgeThresh */ - 0x0F124008, /*70000C0E//_dmsc_iDesatThresh */ - 0x0F120540, /*70000C10//_dmsc_iDemBlurLow */ - 0x0F128006, /*70000C12//_dmsc_iDecisionThresh */ - 0x0F120020, /*70000C14//_dmsc_iMonochrom */ - 0x0F120000, /*70000C16//_dmsc_iGRDenoiseVal */ - 0x0F122000, /*70000C18//_dmsc_iEdgeDesatThrLow */ - 0x0F120000, /*70000C1A//_dmsc_iNearGrayDesat */ - 0x0F121E10, /*70000C1C//_postdmsc_iBCoeff */ - 0x0F12000B, /*70000C1E//_postdmsc_iWideMult */ - 0x0F120607, /*70000C20//_yuvemix_mNegSlopes_1 */ - 0x0F120005, /*70000C22//_yuvemix_mNegSlopes_3 */ - 0x0F120607, /*70000C24//_yuvemix_mPosSlopes_1 */ - 0x0F120405, /*70000C26//_yuvemix_mPosSlopes_3 */ - 0x0F120206, /*70000C28//_yuviirnr_iXSupportUV */ - 0x0F120304, /*70000C2A//_yuviirnr_iHighYNorm */ - 0x0F120409, /*70000C2C//_yuviirnr_iHighUVNorm */ - 0x0F120305, /*70000C2E//_yuviirnr_iUVNormShift */ - 0x0F120406, /*70000C30//_yuviirnr_iVertLength_UV */ - 0x0F122804, /*70000C32//_yuviirnr_iDiffThreshH_Y */ - 0x0F120228, /*70000C34//_yuviirnr_iDiffThreshH_UV */ - 0x0F121402, /*70000C36//_yuviirnr_iMaxThreshH_Y */ - 0x0F120618, /*70000C38//_yuviirnr_iMaxThreshH_UV */ - 0x0F121A02, /*70000C3A//_yuviirnr_iYNRStrengthH */ - 0x0F128018, /*70000C3C//_yuviirnr_iUVNRStrengthH */ - 0x0F120080, /*70000C3E//_RGBGamma2_iLinearity */ - 0x0F120080, /*70000C40//_ccm_oscar_iSaturation */ - 0x0F120180, /*70000C42//_RGB2YUV_iRGBGain */ - 0x0F120A0A, /*70000C44//_bnr_iClustMulT_H */ - 0x0F120101, /*70000C46//_bnr_iClustThresh_H */ - 0x0F120F15, /*70000C48//_bnr_iDenThreshLow */ - 0x0F126024, /*70000C4A//_ee_iLowSharpPower */ - 0x0F120A0A, /*70000C4C//_ee_iLowShDenoise */ - 0x0F12FFFF, /*70000C4E//_ee_iLowSharpClamp */ - 0x0F120808, /*70000C50//_ee_iReduceEdgeMinMult */ - 0x0F120A01, /*70000C52//_bnr_nClustLevel_H_Bin */ - 0x0F12010A, /*70000C54//_bnr_iClustMulT_C_Bin */ - 0x0F120001, /*70000C56//_bnr_iClustThresh_C_Bin */ - 0x0F122400, /*70000C58//_bnr_iDenThreshHigh_Bin */ - 0x0F120260, /*70000C5A//_ee_iHighSharpPower_Bin */ - 0x0F12FF02, /*70000C5C//_ee_iHighShDenoise_Bin */ - 0x0F1240FF, /*70000C5E//_ee_iHighSharpClamp_Bin */ - 0x0F120009, /*70000C60//_ee_iReduceEdgeSlope_Bin */ - 0x0F120001, /*70000C62//_bnr_nClustLevel_C */ - 0x0F120000, /*70000C64//_BRIGHTNESS AFIT 4 */ - 0x0F120000, /*70000C66//_CONTRAST */ - 0x0F120000, /*70000C68//_SATURATION */ - 0x0F120000, /*70000C6A//_SHARP_BLUR */ - 0x0F120000, /*70000C6C//_GLAMOUR */ - 0x0F1200C0, /*70000C6E//_bnr_edge_high */ - 0x0F120064, /*70000C70//_postdmsc_iLowBright */ - 0x0F120384, /*70000C72//_postdmsc_iHighBright */ - 0x0F120032, /*70000C74//_postdmsc_iLowSat */ - 0x0F1201F4, /*70000C76//_postdmsc_iHighSat */ - 0x0F120070, /*70000C78//_postdmsc_iTune */ - 0x0F120040, /*70000C7A//_yuvemix_mNegRanges_0 */ - 0x0F1200A0, /*70000C7C//_yuvemix_mNegRanges_1 */ - 0x0F120100, /*70000C7E//_yuvemix_mNegRanges_2 */ - 0x0F120010, /*70000C80//_yuvemix_mPosRanges_0 */ - 0x0F120060, /*70000C82//_yuvemix_mPosRanges_1 */ - 0x0F120100, /*70000C84//_yuvemix_mPosRanges_2 */ - 0x0F121430, /*70000C86//_bnr_edge_low */ - 0x0F120201, /*70000C88//_bnr_repl_force */ - 0x0F120204, /*70000C8A//_bnr_iHotThreshLow */ - 0x0F120F04, /*70000C8C//_bnr_iColdThreshLow */ - 0x0F12030C, /*70000C8E//_bnr_DispTH_High */ - 0x0F120003, /*70000C90//_bnr_DISP_Limit_High */ - 0x0F120602, /*70000C92//_bnr_iDistSigmaMax */ - 0x0F121803, /*70000C94//_bnr_iDiffSigmaHigh */ - 0x0F120040, /*70000C96//_bnr_iNormalizedSTD_Limit */ - 0x0F120E20, /*70000C98//_bnr_iDirMinThres */ - 0x0F122018, /*70000C9A//_bnr_iDirFltDiffThresLow */ - 0x0F120620, /*70000C9C//_bnr_iDirSmoothPowerLow */ - 0x0F120306, /*70000C9E//_bnr_iHighMaxSlopeAllowed */ - 0x0F122003, /*70000CA0//_bnr_iHighSlopeThresh */ - 0x0F12FF01, /*70000CA2//_bnr_iSlopeBlurStrength */ - 0x0F120404, /*70000CA4//_bnr_AddNoisePower1 */ - 0x0F120200, /*70000CA6//_bnr_iRadialTune */ - 0x0F12145A, /*70000CA8//_bnr_iRadialLimit */ - 0x0F121010, /*70000CAA//_ee_iFSMagThHigh */ - 0x0F12000B, /*70000CAC//_ee_iFSVarThHigh */ - 0x0F121200, /*70000CAE//_ee_iFSThHigh */ - 0x0F125A0F, /*70000CB0//_ee_iFSVarCountTh */ - 0x0F120502, /*70000CB2//_ee_iRadialPower */ - 0x0F121802, /*70000CB4//_ee_iROADThres */ - 0x0F120000, /*70000CB6//_ee_iROADSubMaxNR */ - 0x0F122006, /*70000CB8//_ee_iROADNeiThres */ - 0x0F124028, /*70000CBA//_ee_iSmoothEdgeThres */ - 0x0F120430, /*70000CBC//_ee_iWSharpen */ - 0x0F120101, /*70000CBE//_ee_iWShThresh */ - 0x0F12FF00, /*70000CC0//_ee_iEmbossCentAdd */ - 0x0F120804, /*70000CC2//_ee_iReduceEdgeThresh */ - 0x0F124008, /*70000CC4//_dmsc_iDesatThresh */ - 0x0F120540, /*70000CC6//_dmsc_iDemBlurLow */ - 0x0F128006, /*70000CC8//_dmsc_iDecisionThresh */ - 0x0F120020, /*70000CCA//_dmsc_iMonochrom */ - 0x0F120000, /*70000CCC//_dmsc_iGRDenoiseVal */ - 0x0F122000, /*70000CCE//_dmsc_iEdgeDesatThrLow */ - 0x0F120000, /*70000CD0//_dmsc_iNearGrayDesat */ - 0x0F121E10, /*70000CD2//_postdmsc_iBCoeff */ - 0x0F12000B, /*70000CD4//_postdmsc_iWideMult */ - 0x0F120607, /*70000CD6//_yuvemix_mNegSlopes_1 */ - 0x0F120005, /*70000CD8//_yuvemix_mNegSlopes_3 */ - 0x0F120607, /*70000CDA//_yuvemix_mPosSlopes_1 */ - 0x0F120405, /*70000CDC//_yuvemix_mPosSlopes_3 */ - 0x0F120205, /*70000CDE//_yuviirnr_iXSupportUV */ - 0x0F120304, /*70000CE0//_yuviirnr_iHighYNorm */ - 0x0F120409, /*70000CE2//_yuviirnr_iHighUVNorm */ - 0x0F120306, /*70000CE4//_yuviirnr_iUVNormShift */ - 0x0F120407, /*70000CE6//_yuviirnr_iVertLength_UV */ - 0x0F122C04, /*70000CE8//_yuviirnr_iDiffThreshH_Y */ - 0x0F12022C, /*70000CEA//_yuviirnr_iDiffThreshH_UV */ - 0x0F121402, /*70000CEC//_yuviirnr_iMaxThreshH_Y */ - 0x0F120618, /*70000CEE//_yuviirnr_iMaxThreshH_UV */ - 0x0F121A02, /*70000CF0//_yuviirnr_iYNRStrengthH */ - 0x0F128018, /*70000CF2//_yuviirnr_iUVNRStrengthH */ - 0x0F120080, /*70000CF4//_RGBGamma2_iLinearity */ - 0x0F120080, /*70000CF6//_ccm_oscar_iSaturation */ - 0x0F120180, /*70000CF8//_RGB2YUV_iRGBGain */ - 0x0F120A0A, /*70000CFA//_bnr_iClustMulT_H */ - 0x0F120101, /*70000CFC//_bnr_iClustThresh_H */ - 0x0F120C0F, /*70000CFE//_bnr_iDenThreshLow */ - 0x0F126024, /*70000D00//_ee_iLowSharpPower */ - 0x0F120808, /*70000D02//_ee_iLowShDenoise */ - 0x0F12FFFF, /*70000D04//_ee_iLowSharpClamp */ - 0x0F120808, /*70000D06//_ee_iReduceEdgeMinMult */ - 0x0F120A01, /*70000D08//_bnr_nClustLevel_H_Bin */ - 0x0F12010A, /*70000D0A//_bnr_iClustMulT_C_Bin */ - 0x0F120001, /*70000D0C//_bnr_iClustThresh_C_Bin */ - 0x0F122400, /*70000D0E//_bnr_iDenThreshHigh_Bin */ - 0x0F120060, /*70000D10//_ee_iHighSharpPower_Bin */ - 0x0F12FF00, /*70000D12//_ee_iHighShDenoise_Bin */ - 0x0F1240FF, /*70000D14//_ee_iHighSharpClamp_Bin */ - 0x0F120009, /*70000D16//_ee_iReduceEdgeSlope_Bin */ - 0x0F120001, /*70000D18//_bnr_nClustLevel_C */ - - 0x0F1223CE, /*70000D1A//[0]CAFITB_bnr_bypass */ - 0x0F12FDC8, /*70000D1C//[0]CAFITB_bnr_bSlopenessTune */ - 0x0F12112E, /*70000D1E//[0]CAFITB_ee_bReduceNegMedSh */ - 0x0F1293A5, /*70000D20//[0]CAFITB_dmsc_bDoDesat */ - 0x0F12FE67, /*70000D22//[0]CAFITB_postdmsc_bSat */ - 0x0F120000, /*70000D24//[0]CAFITB_yuviirnr_bWideY */ - -/*======================================================= -// 06.Clock Setting -//=======================================================*/ -/*Input Clock (Mclk)*/ - 0x002A01F8, - 0x0F125DC0, /*REG_TC_IPRM_InClockLSBs */ - 0x002A0212, - 0x0F120000, /*REG_TC_IPRM_UseNPviClocks */ - 0x0F120002, /*REG_TC_IPRM_UseNMipiClocks */ - 0x0F120002, /*REG_TC_IPRM_NumberOfMipiLanes */ - -/*System Clock & Output clock (Pclk)*/ - - 0x002A021A, - 0x0F123A98, /*REG_TC_IPRM_OpClk4KHz_0 */ - 0x0F12278D, /*4F1A //REG_TC_IPRM_MinOutRate4KHz_0 */ - 0x0F12278D, /*4F1A //REG_TC_IPRM_MaxOutRate4KHz_0 */ - - 0x0F124F1A, /*REG_TC_IPRM_OpClk4KHz_11 */ - 0x0F12278D, /*4F1A //REG_TC_IPRM_MinOutRate4KHz_1 */ - 0x0F12278D, /*4F1A //REG_TC_IPRM_MaxOutRate4KHz_1 */ - - 0x002A022C, - 0x0F120001, /*REG_TC_IPRM_InitParamsUpdated */ - -/*============================================================= -// 18.JPEG Thumnail Setting -//=============================================================*/ - - 0x002A0478, - 0x0F12005F, /*REG_TC_BRC_usPrevQuality */ - 0x0F12005F, /*REG_TC_BRC_usCaptureQuality */ - -/*JPEG Thumnail*/ - 0x0F120001, /*REG_TC_THUMB_Thumb_bActive */ - 0x0F120280, /*REG_TC_THUMB_Thumb_uWidth */ - 0x0F1201E0, /*REG_TC_THUMB_Thumb_uHeight */ - 0x0F120005, /*REG_TC_THUMB_Thumb_Format */ - - 0x002A17DC, - 0x0F120054, /*jpeg_ManualMBCV */ - 0x002A1AE4, - 0x0F12001C, /*senHal_bExtraAddLine */ - 0x002A0284, - 0x0F120001, /*REG_TC_GP_bBypassScalerJpg */ - 0x002A028A, - 0x0F120000, /*REG_TC_GP_bUse1FrameCaptureMode */ - - 0x002A1CC2, /*DRx_uDRxWeight for AutoCont function */ - 0x0F120100, - 0x0F120100, - 0x0F120100, - 0x0F120100, - 0x002A147C, /*bp_uMaxBrightnessFactor*/ - 0x0F120170, - 0x002A1482, /*bp_uMinBrightnessFactor */ - 0x0F1201E0, - -/*======================================================= -// 07.Input Size Setting -//======================================================*/ -/*Input Size*/ - 0x002A0250, - 0x0F120A00, /*REG_TC_GP_PrevReqInputWidth */ - 0x0F120780, /*REG_TC_GP_PrevReqInputHeight */ - 0x0F120010, /*REG_TC_GP_PrevInputWidthOfs */ - 0x0F12000C, /*REG_TC_GP_PrevInputHeightOfs */ - 0x0F120A00, /*REG_TC_GP_CapReqInputWidth */ - 0x0F120780, /*REG_TC_GP_CapReqInputHeight */ - 0x0F120010, /*REG_TC_GP_CapInputWidthOfs */ - 0x0F12000C, /*REG_TC_GP_CapInputHeightOfs */ - - 0x002A0262, - 0x0F120001, /*REG_TC_GP_bUseReqInputInPre */ - 0x0F120001, /*REG_TC_GP_bUseReqInputInCap */ - - 0x002A0494, - 0x0F120A00, /*REG_TC_PZOOM_PrevZoomReqInputWidth */ - 0x0F120780, /*REG_TC_PZOOM_PrevZoomReqInputHeight */ - 0x0F120000, /*REG_TC_PZOOM_PrevZoomReqInputWidthOfs */ - 0x0F120000, /*REG_TC_PZOOM_PrevZoomReqInputHeightOfs */ - 0x0F120A00, /*REG_TC_PZOOM_CapZoomReqInputWidth */ - 0x0F120780, /*REG_TC_PZOOM_CapZoomReqInputHeight */ - 0x0F120000, /*REG_TC_PZOOM_CapZoomReqInputWidthOfs */ - 0x0F120000, /*REG_TC_PZOOM_CapZoomReqInputHeightOfs */ - -/*=========================================================== -// 08.Preview & Capture Configration Setting -//=======================================================*/ -/*Preview config[0] 640 480 10~30fps*/ - 0x002A02A6, - 0x0F120280, /*REG_0TC_PCFG_usWidth */ - 0x0F1201E0, /*REG_0TC_PCFG_usHeight */ - 0x0F120005, /*REG_0TC_PCFG_Format */ - 0x0F12278D, /*4F1A //REG_0TC_PCFG_usMaxOut4KHzRate */ - 0x0F12278D, /*4F1A //REG_0TC_PCFG_usMinOut4KHzRate */ - 0x0F120100, /*REG_0TC_PCFG_OutClkPerPix88 */ - 0x0F120300, /*REG_0TC_PCFG_uBpp88 */ - 0x0F120012, /*REG_0TC_PCFG_PVIMask */ - 0x0F120000, /*REG_0TC_PCFG_OIFMask */ - 0x0F1201E0, /*REG_0TC_PCFG_usJpegPacketSize */ - 0x0F120000, /*REG_0TC_PCFG_usJpegTotalPackets */ - 0x0F120000, /*REG_0TC_PCFG_uClockInd */ - 0x0F120000, /*REG_0TC_PCFG_usFrTimeType */ - 0x0F120001, /*REG_0TC_PCFG_FrRateQualityType */ - 0x0F1203E8, /*029A //REG_0TC_PCFG_usMaxFrTimeMsecMult10 */ - 0x0F12014A, /*REG_0TC_PCFG_usMinFrTimeMsecMult10 */ - 0x002A02D0, - 0x0F120000, /*REG_0TC_PCFG_uPrevMirror 0711 0000->000A */ - 0x0F120000, /*REG_0TC_PCFG_uCaptureMirror 0711 0000->000A */ - -/*Capture Config[0] 2560 1920 7.5~15fps*/ - 0x002A0396, - 0x0F120000, /*REG_0TC_CCFG_uCaptureMode */ - 0x0F120A00, /*REG_0TC_CCFG_usWidth */ - 0x0F120780, /*REG_0TC_CCFG_usHeight */ - 0x0F120009, /*REG_0TC_CCFG_Format */ - 0x0F12278D, /*4F1A //REG_0TC_CCFG_usMaxOut4KHzRate */ - 0x0F12278D, /*4F1A //REG_0TC_CCFG_usMinOut4KHzRate */ - 0x0F120100, /*REG_0TC_CCFG_OutClkPerPix88 */ - 0x0F120300, /*REG_0TC_CCFG_uBpp88 */ - 0x0F120012, /*REG_0TC_CCFG_PVIMask */ - 0x0F120040, /*REG_0TC_CCFG_OIFMask */ - 0x0F120810, /*REG_0TC_CCFG_usJpegPacketSize */ - 0x0F120000, /*REG_0TC_CCFG_usJpegTotalPackets */ - 0x0F120001, /*REG_0TC_CCFG_uClockInd */ - 0x0F120000, /*REG_0TC_CCFG_usFrTimeType */ - 0x0F120002, /*REG_0TC_CCFG_FrRateQualityType */ - 0x0F120535, /*REG_0TC_CCFG_usMaxFrTimeMsecMult10 */ - 0x0F12029A, /*REG_0TC_CCFG_usMinFrTimeMsecMult10 */ - -/* Delay 100ms*/ - -/*=========================================================== -// 19.Select Cofigration Display -//===========================================================*/ - /*PREVIEW*/ - 0x002A0266, - 0x0F120000, /*REG_TC_GP_ActivePrevConfig */ - 0x002A026A, - 0x0F120001, /*REG_TC_GP_PrevOpenAfterChange */ - 0x002A024E, - 0x0F120001, /*REG_TC_GP_NewConfigSync */ - 0x002A0268, - 0x0F120001, /*REG_TC_GP_PrevConfigChanged */ - 0x002A0270, - 0x0F120001, /*REG_TC_GP_CapConfigChanged */ - 0x002A023E, - 0x0F120001, /*REG_TC_GP_EnablePreview */ - 0x0F120001, /*REG_TC_GP_EnablePreviewChanged */ - - 0x00287000, - 0x002A0484, - 0x0F120002, /* capture flash on */ - - 0x002A183A, - 0x0F120001, /* one frame AE */ - - 0x002A17F6, - 0x0F12023C, /*210, 258 // AWB R point */ - 0x0F12020C, /*288, 228 ->258 -> 208 // AWB B point */ - - 0x002A1840, - 0x0F120001, /* Fls AE tune start */ - - 0x0F120100, /* fls_afl_FlsAFIn Rin */ - 0x0F120120, - 0x0F120180, - 0x0F120200, - 0x0F120400, - 0x0F120800, - 0x0F120A00, - 0x0F121000, - - 0x0F120100, /* fls_afl_FlsAFOut Rout */ - 0x0F1200A0, - 0x0F120090, - 0x0F120080, - 0x0F120070, - 0x0F120045, - 0x0F120030, - 0x0F120010, - - 0x002A1884, - 0x0F120100, /* fls_afl_FlsNBOut flash NB default */ - 0x0F120100, - 0x0F120100, - 0x0F120100, - 0x0F120100, - 0x0F120100, - 0x0F120100, - 0x0F120100, - - 0x002A1826, - - 0x0F120100, /* fls_afl_FlashWP_Weight flash NB default */ - 0x0F1200C0, - 0x0F120080, - 0x0F12000A, - 0x0F120000, - - 0x0F120030, /* fls_afl_FlashWP_Weight flash NB default */ - 0x0F120040, - 0x0F120048, - 0x0F120050, - 0x0F120060, - - 0x002A4784, - 0x0F1200A0, /*TNP_Regs_FlsWeightRIn weight tune start in */ - 0x0F1200C0, - 0x0F1200D0, - 0x0F120100, - 0x0F120200, - 0x0F120300, - - 0x0F120088, /* TNP_Regs_FlsWeightROut weight tune start out */ - 0x0F1200B0, - 0x0F1200C0, - 0x0F120100, - 0x0F120200, - 0x0F120300, - - 0x002A479C, - - 0x0F120120, /*Fls BRIn */ - 0x0F120150, - 0x0F120200, - - 0x0F12003C, /* Fls BROut */ - 0x0F12003B, - 0x0F120026, /*brightness // 23 //26 //30 */ -}; - -static const u32 s5k4ecgx_DTP_init_EVT1[] = { -/*Delay 500ms*/ - 0xFCFCD000, - 0x00287000, - 0x002A0944, - 0x0F12FFF0, /*af_uNoise_0_*/ - 0x0F12FFF1, /*afit_uNoiseIndInDoor_1_ */ - 0x0F12FFF2, /*afit_uNoiseIndInDoor_2_ */ - 0x0F12FFF3, /*afit_uNoiseIndInDoor_3_ */ - 0x0F12FFF4, /*afit_uNoiseIndInDoor_4_ */ - 0x002A0938, - 0x0F120000, /*afit_bUseNB_Afit */ - 0x0F12FFF0, /*SARR_uNormBrInDoor_0_ */ - 0x0F12FFF1, /*SARR_uNormBrInDoor_1_ */ - 0x0F12FFF2, /*SARR_uNormBrInDoor_2_ */ - 0x0F12FFF3, /*SARR_uNormBrInDoor_3_ */ - 0x0F12FFF4, /*SARR_uNormBrInDoor_4_ */ - 0x00287000, - 0x002A04A6, - 0x0F120001, - 0x002A04AA, - 0x0F120001, - 0x0028D000, - 0x002A4200, - 0x0F1208A3, /*GAS bypass */ - 0x002A6600, - 0x0F120001, /*CCM bypass */ - 0x002A6700, - 0x0F120001, /*Gamma bypass */ - 0x002A4900, - 0x0F120001, /*AWB bypass */ - -/*Delay 50ms*/ - 0x0028D000, - 0x002A3100, - 0x0F120002, /*Colorbar pattern */ - -}; - -static const u32 s5k4ecgx_DTP_stop_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A0944, - 0x0F12004B, /*afit_uNoiser0*/ - 0x0F120092, /*afit_uNoiseIndInDoor_1_ */ - 0x0F120196, /*afit_uNoiseIndInDoor_2_ */ - 0x0F120217, /*afit_uNoiseIndInDoor_3_ */ - 0x0F1202B0, /*afit_uNoiseIndInDoor_4_ */ - - /* Normal Brightness setting */ - 0x002A0938, - 0x0F120000, /*afit_bUseNB_Afit */ - 0x0F120014, /*SARR_uNormBrInDoor_0_ */ - 0x0F1200D2, /*SARR_uNormBrInDoor_1_ */ - 0x0F120384, /*SARR_uNormBrInDoor_2_ */ - 0x0F1207D0, /*SARR_uNormBrInDoor_3_ */ - 0x0F121388, /*SARR_uNormBrInDoor_4_ */ - 0x00287000, - 0x002A04A6, - 0x0F120000, - 0x002A04AA, - 0x0F120001, - 0x0028D000, - 0x002A4200, - 0x0F1208A2, /*GAS bypass */ - 0x002A6600, - 0x0F120000, /*CCM bypass */ - 0x002A6700, - 0x0F120000, /*Gamma bypass */ - 0x002A4900, - 0x0F120000, /*AWB bypass */ - 0xFFFE0032, /*p50 */ - 0x0028D000, - 0x002A3100, - 0x0F120000, /*Colorbar pattern */ - -}; - -static const u32 s5k4ecgx_FPS_Auto_EVT1[] = { -/* frame rate 10~30fps*/ - 0xFCFCD000, - 0x00287000, - 0x002A02BE, - 0x0F120000, /*usFrTimeType*/ - 0x0F120001, /*REG_0TC_PCFG_FrRateQualityType */ - 0x0F1203E8, /*029A/REG_0TC_PCFG_usMaxFrTimeMsecMult10 029Ah:15fps*/ - 0x0F12014A, /*REG_0TC_PCFG_usMinFrTimeMsecMult10 //014Ah:30fps*/ - 0x002A0266, - 0x0F120000, /*REG_TC_GP_ActivePrevConfig */ - 0x002A026A, - 0x0F120001, /*REG_TC_GP_PrevOpenAfterChange */ - 0x002A024E, - 0x0F120001, /*REG_TC_GP_NewConfigSync */ - 0x002A0268, - 0x0F120001, /*REG_TC_GP_PrevConfigChanged */ -}; - -static const u32 s5k4ecgx_FPS_5_EVT1[] = { - -}; - -static const u32 s5k4ecgx_FPS_7_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A02BE, - 0x0F120000, /*REG_0TC_PCFG_usFrTimeType */ - 0x0F120001, /*REG_0TC_PCFG_FrRateQualityType*/ - 0x0F120535, /*REG_0TC_PCFG_usMaxFrTimeMsecMult10 //0535h:7.5fps */ - 0x0F120535, /*REG_0TC_PCFG_usMinFrTimeMsecMult10 //0535h:7.5fps */ - - 0x002A0266, - 0x0F120000, /*REG_TC_GP_ActivePrevConfig */ - 0x002A026A, - 0x0F120001, /*REG_TC_GP_PrevOpenAfterChange */ - 0x002A024E, - 0x0F120001, /*REG_TC_GP_NewConfigSync */ - 0x002A0268, - 0x0F120001, /*REG_TC_GP_PrevConfigChanged */ - -}; - -static const u32 s5k4ecgx_FPS_10_EVT1[] = { - -}; - -static const u32 s5k4ecgx_FPS_15_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A02BE, - 0x0F120000, /*REG_0TC_PCFG_usFrTimeType */ - 0x0F120001, /*REG_0TC_PCFG_FrRateQualityType */ - 0x0F12029A, /*REG_0TC_PCFG_usMaxFrTimeMsecMult10 //029Ah:15fps */ - 0x0F12029A, /*REG_0TC_PCFG_usMinFrTimeMsecMult10 //029Ah:15fps */ - - 0x002A0266, - 0x0F120000, /*REG_TC_GP_ActivePrevConfig */ - 0x002A026A, - 0x0F120001, /*REG_TC_GP_PrevOpenAfterChange */ - 0x002A024E, - 0x0F120001, /*REG_TC_GP_NewConfigSync */ - 0x002A0268, - 0x0F120001, /*REG_TC_GP_PrevConfigChanged */ - -}; - -static const u32 s5k4ecgx_FPS_20_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A02BE, - 0x0F120000, /*REG_0TC_PCFG_usFrTimeType */ - 0x0F120001, /*REG_0TC_PCFG_FrRateQualityType */ - 0x0F1201F4, /*REG_0TC_PCFG_usMaxFrTimeMsecMult10 //01F4h:20fps */ - 0x0F1201F4, /*REG_0TC_PCFG_usMinFrTimeMsecMult10 //01F4h:20fps */ - - 0x002A0266, - 0x0F120000, /*REG_TC_GP_ActivePrevConfig */ - 0x002A026A, - 0x0F120001, /*REG_TC_GP_PrevOpenAfterChange */ - 0x002A024E, - 0x0F120001, /*REG_TC_GP_NewConfigSync */ - 0x002A0268, - 0x0F120001, /*REG_TC_GP_PrevConfigChanged */ -}; - -static const u32 s5k4ecgx_FPS_24_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A02B4, - 0x0F120052, - 0x002A02BE, - 0x0F120000, - 0x0F120001, - 0x0F1201A1, - 0x0F1201A1, - 0x002A02D0, - 0x0F120000, - 0x0F120000, - 0x002A0266, - 0x0F120000, - 0x002A026A, - 0x0F120001, - 0x002A024E, - 0x0F120001, - 0x002A0268, - 0x0F120001, -}; - -static const u32 s5k4ecgx_FPS_25_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A02BE, - 0x0F120000, /*REG_0TC_PCFG_usFrTimeType */ - 0x0F120001, /*REG_0TC_PCFG_FrRateQualityType */ - 0x0F120190, /*REG_0TC_PCFG_usMaxFrTimeMsecMult10 //014Ah:30fps */ - 0x0F120190, /*REG_0TC_PCFG_usMinFrTimeMsecMult10 //014Ah:30fps */ - - 0x002A0266, - 0x0F120000, /*REG_TC_GP_ActivePrevConfig */ - 0x002A026A, - 0x0F120001, /*REG_TC_GP_PrevOpenAfterChange */ - 0x002A024E, - 0x0F120001, /*REG_TC_GP_NewConfigSync */ - 0x002A0268, - 0x0F120001, /*REG_TC_GP_PrevConfigChanged */ -}; - - -static const u32 s5k4ecgx_FPS_30_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A02BE, - 0x0F120000, /*REG_0TC_PCFG_usFrTimeType */ - 0x0F120001, /*REG_0TC_PCFG_FrRateQualityType */ - 0x0F12014A, /*REG_0TC_PCFG_usMaxFrTimeMsecMult10 //014Ah:30fps */ - 0x0F12014A, /*REG_0TC_PCFG_usMinFrTimeMsecMult10 //014Ah:30fps */ - - 0x002A0266, - 0x0F120000, /*REG_TC_GP_ActivePrevConfig */ - 0x002A026A, - 0x0F120001, /*REG_TC_GP_PrevOpenAfterChange */ - 0x002A024E, - 0x0F120001, /*REG_TC_GP_NewConfigSync */ - 0x002A0268, - 0x0F120001, /*REG_TC_GP_PrevConfigChanged */ - -}; - -static const u32 s5k4ecgx_FPS_60_EVT1[] = { - -}; - -static const u32 s5k4ecgx_FPS_120_EVT1[] = { - -}; - -static const u32 s5k4ecgx_Effect_Normal_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A023C, - 0x0F120000, -}; - -static const u32 s5k4ecgx_Effect_Solarization_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A023C, - 0x0F120002, -}; - -static const u32 s5k4ecgx_Effect_Negative_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A023C, - 0x0F120003, -}; - -static const u32 s5k4ecgx_Effect_Sepia_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A023C, - 0x0F120004, -}; - -static const u32 s5k4ecgx_Effect_Black_White_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A023C, - 0x0F120001, -}; - -static const u32 s5k4ecgx_WB_Auto_EVT1[] = { - 0xFCFCD000, - 0x00287000, -}; - -static const u32 s5k4ecgx_WB_Sunny_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A04BA, - 0x0F1205C0, - - 0x002A04BE, - 0x0F1203D0, - - 0x002A04C2, - 0x0F120550, - - 0x002A04C6, - 0x0F120001, -}; - -static const u32 s5k4ecgx_WB_Cloudy_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A04BA, - 0x0F1206D8, - - 0x002A04BE, - 0x0F1203D0, - - 0x002A04C2, - 0x0F1204B0, - - 0x002A04C6, - 0x0F120001, -}; - -static const u32 s5k4ecgx_WB_Tungsten_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A04BA, - 0x0F1203B0, - - 0x002A04BE, - 0x0F1203D0, - - 0x002A04C2, - 0x0F1209B0, - 0x002A04C6, - 0x0F120001, -}; - -static const u32 s5k4ecgx_WB_Fluorescent_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A04BA, - 0x0F1205E0, - - 0x002A04BE, - 0x0F120440, - - 0x002A04C2, - 0x0F120998, - - 0x002A04C6, - 0x0F120001, -}; - -static const u32 s5k4ecgx_WB_Auto_ISO_on_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002a04E6, - 0x0f12075F, -}; - -static const u32 s5k4ecgx_WB_Sunny_ISO_on_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A04E6, - 0x0f120757, - 0x002A04BA, - 0x0F1205C0, - - 0x002A04BE, - 0x0F1203D0, - - 0x002A04C2, - 0x0F120580, - 0x002A04C6, - 0x0F120001, -}; - -static const u32 s5k4ecgx_WB_Cloudy_ISO_on_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A04E6, - 0x0f120757, - 0x002A04BA, - 0x0F1206E0, - - 0x002A04BE, - 0x0F1203D0, - - 0x002A04C2, - 0x0F1204B0, - 0x002A04C6, - 0x0F120001, -}; - -static const u32 s5k4ecgx_WB_Tungsten_ISO_on_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A04E6, - 0x0f120757, - 0x002A04BA, - 0x0F1203B0, - - 0x002A04BE, - 0x0F1203D0, - - 0x002A04C2, - 0x0F1209F0, - 0x002A04C6, - 0x0F120001, -}; - -static const u32 s5k4ecgx_WB_Fluorescent_ISO_on_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A04E6, - 0x0f120757, - 0x002A04BA, - 0x0F120600, - - 0x002A04BE, - 0x0F120440, - - 0x002A04C2, - 0x0F1209E0, - 0x002A04C6, - 0x0F120001, -}; - -static const u32 s5k4ecgx_WDR_on_EVT1[] = { - -}; - -static const u32 s5k4ecgx_WDR_off_EVT1[] = { - -}; - -static const u32 s5k4ecgx_ISO_Auto_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A0938, /*afit_bUseNB_Afit */ - 0x0F120000, - 0x0F120014, /*SARR_uNormBrInDoor_0_*/ - 0x0F1200D2, /*SARR_uNormBrInDoor_1_ */ - 0x0F120384, /*SARR_uNormBrInDoor_2_ */ - 0x0F1207D0, /*SARR_uNormBrInDoor_3_ */ - 0x0F121388, /*SARR_uNormBrInDoor_4_ */ - 0x002A1484, - 0x0F12003C, - 0x002A0F2A, /*AFC_Default60Hz */ - 0x0F120000, /*00:50Hz 01:60Hz */ - 0x002A04D0, - 0x0F120000, /*REG_SF_USER_IsoType */ - 0x0F120000, /*REG_SF_USER_IsoVal */ - 0x0F120001, /*REG_SF_USER_IsoChanged */ - 0x002A06C2, - 0x0F120200, /*lt_bUseSecISODgain */ -}; - -static const u32 s5k4ecgx_ISO_50_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A0938, - 0x0F120001, /*afit_bUseNB_Afit */ - 0x0F120014, /*SARR_uNormBrInDoor_0_ */ - 0x0F1200D2, /*SARR_uNormBrInDoor_1_ */ - 0x0F120384, /*SARR_uNormBrInDoor_2_ */ - 0x0F1207D0, /*SARR_uNormBrInDoor_3_ */ - 0x0F121388, /*SARR_uNormBrInDoor_4_ */ - 0x002A04D6, - 0x0F120000, /*REG_SF_USER_FlickerQuant */ - 0x0F120001, /*REG_SF_USER_FlickerQuantChanged */ - 0x002A04D0, - 0x0F120001, /*REG_SF_USER_IsoType*/ - 0x0F120100, /*REG_SF_USER_IsoVal */ - 0x0F120001, /*REG_SF_USER_IsoChanged */ - 0x002A06C2, - 0x0F120100, /*lt_bUseSecISODgain */ -}; - -static const u32 s5k4ecgx_ISO_100_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A0938, - 0x0F120001, /*afit_bUseNB_Afit */ - 0x0F120014, /*SARR_uNormBrInDoor_0_ */ - 0x0F1200D2, /*SARR_uNormBrInDoor_1_ */ - 0x0F120384, /*SARR_uNormBrInDoor_2_ */ - 0x0F1207D0, /*SARR_uNormBrInDoor_3_ */ - 0x0F121388, /*SARR_uNormBrInDoor_4_ */ - 0x002A1484, - 0x0F120044, - 0x002A04D6, - 0x0F120000, /*REG_SF_USER_FlickerQuant */ - 0x0F120001, /*REG_SF_USER_FlickerQuantChanged */ - 0x002A04D0, - 0x0F120001, /*REG_SF_USER_IsoType */ - 0x0F12018A, /*REG_SF_USER_IsoVal/1BA/1CA:16.9msec/1AA: 17.8msec */ - 0x0F120001, /*REG_SF_USER_IsoChanged */ - 0x002A06C2, - 0x0F120100, /*lt_bUseSecISODgain */ -}; - -static const u32 s5k4ecgx_ISO_200_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A0938, - 0x0F120001, /*afit_bUseNB_Afit */ - 0x0F120114, /*SARR_uNormBrInDoor_0_ */ - 0x0F1204A2, /*SARR_uNormBrInDoor_1_ */ - 0x0F120584, /*SARR_uNormBrInDoor_2_ */ - 0x0F1208D0, /*SARR_uNormBrInDoor_3_ */ - 0x0F121388, /*SARR_uNormBrInDoor_4_ */ - 0x002A1484, - 0x0F120044, - 0x002A04D6, - 0x0F120000, /*REG_SF_USER_FlickerQuant */ - 0x0F120001, /*REG_SF_USER_FlickerQuantChanged */ - 0x002A04D0, - 0x0F120001, /*REG_SF_USER_IsoType */ - 0x0F120300, /*REG_SF_IsoVal/36A/370:8.9msec/360:8.8msec/400:7.5msec*/ - 0x0F120001, /*REG_SF_USER_IsoChanged */ - 0x002A06C2, - 0x0F120100, /*lt_bUseSecISODgain */ - -}; - -static const u32 s5k4ecgx_ISO_400_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A0938, - 0x0F120001, /*afit_bUseNB_Afit */ - 0x0F120214, /*SARR_uNormBrInDoor_0_ */ - 0x0F120BD2, /*SARR_uNormBrInDoor_1_ */ - 0x0F120C84, /*SARR_uNormBrInDoor_2_ */ - 0x0F1210D0, /*SARR_uNormBrInDoor_3_ */ - 0x0F121388, /*SARR_uNormBrInDoor_4_ */ - 0x002A1484, - 0x0F120044, - 0x002A04D6, - 0x0F120000, /*REG_SF_USER_FlickerQuant */ - 0x0F120001, /*REG_SF_USER_FlickerQuantChanged */ - 0x002A04D0, - 0x0F120001, /*REG_SF_USER_IsoType */ - 0x0F120764, /*REGSFUSER_IsoVal/6F4*/ - 0x0F120001, /*REG_SF_USER_IsoChanged */ - 0x002A06C2, - 0x0F120100, /*lt_bUseSecISODgain */ -}; - -static const u32 s5k4ecgx_ISO_Auto_MWB_on_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A0938, /*afit_bUseNB_Afit */ - 0x0F120000, - 0x0F120014, /*SARR_uNormBrInDoor_0_ */ - 0x0F1200D2, /*SARR_uNormBrInDoor_1_ */ - 0x0F120384, /*SARR_uNormBrInDoor_2_ */ - 0x0F1207D0, /*SARR_uNormBrInDoor_3_ */ - 0x0F121388, /*SARR_uNormBrInDoor_4_ */ - 0x002A1484, - 0x0F12003C, - 0x002A0F2A, /*AFC_Default60Hz */ - 0x0F120000, /*00:50Hz 01:60Hz */ - 0x002A04E6, /*REG_TC_DBG_AutoAlgEnBits */ - 0x0F120777, - 0x002A04D0, - 0x0F120000, /*REG_SF_USER_IsoType */ - 0x0F120000, /*REG_SF_USER_IsoVal */ - 0x0F120001, /*REG_SF_USER_IsoChanged */ - 0x002A06C2, - 0x0F120200, /*lt_bUseSecISODgain */ - -}; - -static const u32 s5k4ecgx_ISO_50_MWB_on_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A0938, - 0x0F120001, /*afit_bUseNB_Afit*/ - 0x0F120014, /*SARR_uNormBrInDoor_0_*/ - 0x0F1200D2, /*SARR_uNormBrInDoor_1_*/ - 0x0F120384, /*SARR_uNormBrInDoor_2_*/ - 0x0F1207D0, /*SARR_uNormBrInDoor_3_*/ - 0x0F121388, /*SARR_uNormBrInDoor_4_*/ - - 0x002A04E6, - 0x0F120757, /*REG_TC_DBG_AutoAlgEnBits */ - 0x002A04D6, - 0x0F120000, /*REG_SF_USER_FlickerQuant */ - 0x0F120001, /*REG_SF_USER_FlickerQuantChanged */ - - 0x002A04D0, - 0x0F120001, /*REG_SF_USER_IsoType */ - 0x0F120100, /*REG_SF_USER_IsoVal */ - 0x0F120001, /*REG_SF_USER_IsoChanged */ - 0x002A06C2, - 0x0F120100, /*lt_bUseSecISODgain */ -}; - -static const u32 s5k4ecgx_ISO_100_MWB_on_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A0938, - 0x0F120001, /*afit_bUseNB_Afit */ - 0x0F120014, /*SARR_uNormBrInDoor_0_ */ - 0x0F1200D2, /*SARR_uNormBrInDoor_1_ */ - 0x0F120384, /*SARR_uNormBrInDoor_2_ */ - 0x0F1207D0, /*SARR_uNormBrInDoor_3_ */ - 0x0F121388, /*SARR_uNormBrInDoor_4_ */ - 0x002A1484, - 0x0F120044, - 0x002A04E6, - 0x0F120757, /*REG_TC_DBG_AutoAlgEnBits */ - 0x002A04D6, - 0x0F120000, /*REG_SF_USER_FlickerQuant */ - 0x0F120001, /*REG_SF_USER_FlickerQuantChanged */ - - 0x002A04D0, - 0x0F120001, /*REG_SF_USER_IsoType */ - 0x0F12018A, /*REG_SF_USER_IsoVal */ - 0x0F120001, /*REG_SF_USER_IsoChanged */ - 0x002A06C2, - 0x0F120100, /*lt_bUseSecISODgain */ -}; - -static const u32 s5k4ecgx_ISO_200_MWB_on_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A0938, - 0x0F120001, /*afit_bUseNB_Afit */ - 0x0F120014, /*SARR_uNormBrInDoor_0_ */ - 0x0F1203A2, /*SARR_uNormBrInDoor_1_ */ - 0x0F120484, /*SARR_uNormBrInDoor_2_ */ - 0x0F1207D0, /*SARR_uNormBrInDoor_3_ */ - 0x0F121388, /*SARR_uNormBrInDoor_4_ */ - 0x002A1484, - 0x0F120044, - 0x002A04E6, - 0x0F120757, /*REG_TC_DBG_AutoAlgEnBits */ - 0x002A04D6, - 0x0F120000, /*REG_SF_USER_FlickerQuant */ - 0x0F120001, /*REG_SF_USER_FlickerQuantChanged */ - - 0x002A04D0, - 0x0F120001, /*REG_SF_USER_IsoType */ - 0x0F120300, /*REG_SF_USER_IsoVal */ - 0x0F120001, /*REG_SF_USER_IsoChanged */ - 0x002A06C2, - 0x0F120100, /*lt_bUseSecISODgain */ -}; - -static const u32 s5k4ecgx_ISO_400_MWB_on_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A0938, - 0x0F120001, /*afit_bUseNB_Afit */ - 0x0F120014, /*SARR_uNormBrInDoor_0_ */ - 0x0F1208D2, /*SARR_uNormBrInDoor_1_ */ - 0x0F120C84, /*SARR_uNormBrInDoor_2_ */ - 0x0F1210D0, /*SARR_uNormBrInDoor_3_ */ - 0x0F121388, /*SARR_uNormBrInDoor_4_ */ - 0x002A1484, - 0x0F120044, - 0x002A04E6, - 0x0F120757, /*REG_TC_DBG_AutoAlgEnBits */ - 0x002A04D6, - 0x0F120000, /*REG_SF_USER_FlickerQuant */ - 0x0F120001, /*REG_SF_USER_FlickerQuantChanged */ - - 0x002A04D0, - 0x0F120001, /*REG_SF_USER_IsoType */ - 0x0F120764, /*REG_SF_USER_IsoVal */ - 0x0F120001, /*REG_SF_USER_IsoChanged */ - 0x002A06C2, - 0x0F120100, /*lt_bUseSecISODgain */ -}; - -static const u32 s5k4ecgx_Metering_Matrix_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A1492, - 0x0F120101, - 0x0F120101, - 0x0F120101, - 0x0F120101, - 0x0F120101, - 0x0F120101, - 0x0F120101, - 0x0F120101, - 0x0F120101, - 0x0F120101, - 0x0F120101, - 0x0F120101, - 0x0F120101, - 0x0F120101, - 0x0F120101, - 0x0F120101, - 0x0F120101, - 0x0F120101, - 0x0F120101, - 0x0F120101, - 0x0F120101, - 0x0F120101, - 0x0F120101, - 0x0F120101, - 0x0F120101, - 0x0F120101, - 0x0F120101, - 0x0F120101, - 0x0F120101, - 0x0F120101, - 0x0F120101, - 0x0F120101, - - 0x002A0268, /*REG_TC_GP_PrevConfigChanged */ - 0x0F120001, -}; - -static const u32 s5k4ecgx_Metering_Center_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A1492, - 0x0F120100, - 0x0F120101, - 0x0F120101, - 0x0F120001, - 0x0F120101, - 0x0F120201, - 0x0F120102, - 0x0F120101, - 0x0F120101, - 0x0F120202, - 0x0F120202, - 0x0F120101, - 0x0F120201, - 0x0F120302, - 0x0F120203, - 0x0F120102, - 0x0F120201, - 0x0F120302, - 0x0F120203, - 0x0F120102, - 0x0F120101, - 0x0F120202, - 0x0F120202, - 0x0F120101, - 0x0F120101, - 0x0F120201, - 0x0F120102, - 0x0F120101, - 0x0F120101, - 0x0F120101, - 0x0F120101, - 0x0F120101, - - 0x002A0268, /*REG_TC_GP_PrevConfigChanged */ - 0x0F120001, -}; - -static const u32 s5k4ecgx_Metering_Spot_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A1492, - 0x0F120000, - 0x0F120000, - 0x0F120000, - 0x0F120000, - 0x0F120000, - 0x0F120000, - 0x0F120000, - 0x0F120000, - 0x0F120000, - 0x0F120101, - 0x0F120101, - 0x0F120000, - 0x0F120000, - 0x0F12010F, - 0x0F120F01, - 0x0F120000, - 0x0F120000, - 0x0F12010F, - 0x0F120F01, - 0x0F120000, - 0x0F120000, - 0x0F120101, - 0x0F120101, - 0x0F120000, - 0x0F120000, - 0x0F120000, - 0x0F120000, - 0x0F120000, - 0x0F120000, - 0x0F120000, - 0x0F120000, - 0x0F120000, - - 0x002A0268, /*REG_TC_GP_PrevConfigChanged */ - 0x0F120001, -}; - -static const u32 s5k4ecgx_EV_Minus_4_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A1484, - 0x0F120018, /*TVAR_ae_BrAve */ -}; - -static const u32 s5k4ecgx_EV_Minus_3_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A1484, - 0x0F12001E, /*TVAR_ae_BrAve */ -}; - -static const u32 s5k4ecgx_EV_Minus_2_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A1484, - 0x0F120025, /*TVAR_ae_BrAve */ -}; - -static const u32 s5k4ecgx_EV_Minus_1_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A1484, - 0x0F120030, /*TVAR_ae_BrAve */ -}; - -static const u32 s5k4ecgx_EV_Default_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A1484, - 0x0F12003C, /*TVAR_ae_BrAve */ -}; - -static const u32 s5k4ecgx_EV_Plus_1_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A1484, - 0x0F12004E, /*TVAR_ae_BrAve */ -}; - -static const u32 s5k4ecgx_EV_Plus_2_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A1484, - 0x0F120060, /*TVAR_ae_BrAve */ -}; - -static const u32 s5k4ecgx_EV_Plus_3_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A1484, - 0x0F120070, /*TVAR_ae_BrAve */ -}; - -static const u32 s5k4ecgx_EV_Plus_4_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A1484, - 0x0F120080, /*TVAR_ae_BrAve */ -}; - -static const u32 s5k4ecgx_Contrast_Minus_4_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A0232, - 0x0F12FF81, -}; - -static const u32 s5k4ecgx_Contrast_Minus_3_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A0232, - 0x0F12FFA0, -}; - -static const u32 s5k4ecgx_Contrast_Minus_2_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A0232, - 0x0F12FFC0, -}; - -static const u32 s5k4ecgx_Contrast_Minus_1_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A0232, - 0x0F12FFE0, -}; - -static const u32 s5k4ecgx_Contrast_Default_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A0232, - 0x0F120000, -}; - -static const u32 s5k4ecgx_Contrast_Plus_1_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A0232, - 0x0F120020, -}; - -static const u32 s5k4ecgx_Contrast_Plus_2_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A0232, - 0x0F120040, -}; - -static const u32 s5k4ecgx_Contrast_Plus_3_EVT1[] = {/*Setting Unavailable*/ - 0xFCFCD000, - 0x00287000, - 0x002A0232, - 0x0F120060, -}; - -static const u32 s5k4ecgx_Contrast_Plus_4_EVT1[] = {/*Setting Unavailable*/ - 0xFCFCD000, - 0x00287000, - 0x002A0232, - 0x0F12007F, -}; - -static const u32 s5k4ecgx_Auto_Contrast_ON_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A098E, - 0x0F12FFB0, - - 0x002A0A44, - 0x0F12FFB0, - - 0x002A0AFA, - 0x0F12FFB0, - - 0x002A0BB0, - 0x0F12FFB0, - - 0x002A0C66, - 0x0F12FFB0, -}; - -static const u32 s5k4ecgx_Auto_Contrast_OFF_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A098E, - 0x0F120000, - - 0x002A0A44, - 0x0F120000, - - 0x002A0AFA, - 0x0F120000, - - 0x002A0BB0, - 0x0F120000, - - 0x002A0C66, - 0x0F120000, -}; - -static const u32 s5k4ecgx_Sharpness_Minus_3_EVT1[] = {/*Setting Unavailable*/ - 0x00287000, - 0x002A0A28, - 0x0F120000, - 0x002A0ADE, - 0x0F120000, - 0x002A0B94, - 0x0F120000, - 0x002A0C4A, - 0x0F120000, - 0x002A0D00, - 0x0F120000, -}; - -static const u32 s5k4ecgx_Sharpness_Minus_2_EVT1[] = { - 0x00287000, - 0x002A0A28, - 0x0F122010, - 0x002A0ADE, - 0x0F122010, - 0x002A0B94, - 0x0F122010, - 0x002A0C4A, - 0x0F122010, - 0x002A0D00, - 0x0F122010, -}; - -static const u32 s5k4ecgx_Sharpness_Minus_1_EVT1[] = { - 0x00287000, - 0x002A0A28, - 0x0F124020, - 0x002A0ADE, - 0x0F124020, - 0x002A0B94, - 0x0F124020, - 0x002A0C4A, - 0x0F124020, - 0x002A0D00, - 0x0F124020, -}; - -static const u32 s5k4ecgx_Sharpness_Default_EVT1[] = { - 0x00287000, - 0x002A0A28, - 0x0F126024, - 0x002A0ADE, - 0x0F126024, - 0x002A0B94, - 0x0F126024, - 0x002A0C4A, - 0x0F126024, - 0x002A0D00, - 0x0F126024, -}; - -static const u32 s5k4ecgx_Sharpness_Plus_1_EVT1[] = { - 0x00287000, - 0x002A0A28, - 0x0F128040, - 0x002A0ADE, - 0x0F128040, - 0x002A0B94, - 0x0F128040, - 0x002A0C4A, - 0x0F128040, - 0x002A0D00, - 0x0F128040, -}; - -static const u32 s5k4ecgx_Sharpness_Plus_2_EVT1[] = { - 0x00287000, - 0x002A0A28, - 0x0F12A060, - 0x002A0ADE, - 0x0F12A060, - 0x002A0B94, - 0x0F12A060, - 0x002A0C4A, - 0x0F12A060, - 0x002A0D00, - 0x0F12A060, -}; - -static const u32 s5k4ecgx_Sharpness_Plus_3_EVT1[] = { - 0x00287000, - 0x002A0A28, - 0x0F12C080, - 0x002A0ADE, - 0x0F12C080, - 0x002A0B94, - 0x0F12C080, - 0x002A0C4A, - 0x0F12C080, - 0x002A0D00, - 0x0F12C080, -}; - -static const u32 s5k4ecgx_Saturation_Minus_2_EVT1[] = { - 0x00287000, - 0x002A0234, - 0x0F12FF81, -}; - -static const u32 s5k4ecgx_Saturation_Minus_1_EVT1[] = { - 0x00287000, - 0x002A0234, - 0x0F12FFC0, -}; - -static const u32 s5k4ecgx_Saturation_Default_EVT1[] = { - 0x00287000, - 0x002A0234, - 0x0F120000, -}; - -static const u32 s5k4ecgx_Saturation_Plus_1_EVT1[] = { - 0x00287000, - 0x002A0234, - 0x0F120040, -}; - -static const u32 s5k4ecgx_Saturation_Plus_2_EVT1[] = { - 0x00287000, - 0x002A0234, - 0x0F12007F, -}; - -static const u32 s5k4ecgx_Jpeg_Quality_High_EVT1[] = { - 0x00287000, - 0x002A0478, - 0x0F12005F, - 0x0F12005F, -}; - -static const u32 s5k4ecgx_Jpeg_Quality_Normal_EVT1[] = { - 0x00287000, - 0x002A0478, - 0x0F12005A, - 0x0F12005A, -}; - -static const u32 s5k4ecgx_Jpeg_Quality_Low_EVT1[] = { - 0x00287000, - 0x002A0478, - 0x0F120054, - 0x0F120054, -}; - -static const u32 s5k4ecgx_Scene_Default_EVT1[] = { -/*scene Backlight landscape*/ - 0xFCFCD000, - 0x00287000, - 0x002A1484, - 0x0F12003C, - 0x002A1492, - 0x0F120100, - 0x0F120101, - 0x0F120101, - 0x0F120001, - 0x0F120101, - 0x0F120201, - 0x0F120102, - 0x0F120101, - 0x0F120101, - 0x0F120202, - 0x0F120202, - 0x0F120101, - 0x0F120201, - 0x0F120302, - 0x0F120203, - 0x0F120102, - 0x0F120201, - 0x0F120302, - 0x0F120203, - 0x0F120102, - 0x0F120101, - 0x0F120202, - 0x0F120202, - 0x0F120101, - 0x0F120101, - 0x0F120201, - 0x0F120102, - 0x0F120101, - 0x0F120101, - 0x0F120101, - 0x0F120101, - 0x0F120101, - -/* Sharpness 0*/ - 0x002A0A28, - 0x0F126024, /*_ee_iLowSharpPower*/ - 0x002A0ADE, - 0x0F126024, /*_ee_iLowSharpPower*/ - 0x002A0B94, - 0x0F126024, /*_ee_iLowSharpPower*/ - 0x002A0C4A, - 0x0F126024, /*_ee_iLowSharpPower*/ - 0x002A0D00, - 0x0F126024, /*_ee_iLowSharpPower*/ - -/* Saturation 0*/ - 0x002A0234, - 0x0F120000, /*REG_TC_UserSaturation */ - 0x002A06B8, - 0x0F12452C, - 0x0F120005, /*lt_uMaxLei */ - - 0x002A0A1E, - 0x0F120350,/*_ccm_oscar_iSaturation [7:0] AFIT8_RGB2YUV_iYOffset*/ - - 0x002A0638, - 0x0F120001, - 0x0F120000,/*lt_ExpGain_ExpCurveGainMaxStr_0__ulExpOut_0_ */ - 0x0F120A3C, - 0x0F120000,/*lt_ExpGain_ExpCurveGainMaxStr_0__ulExpOut_1_ */ - 0x0F120D05, - 0x0F120000,/*lt_ExpGain_ExpCurveGainMaxStr_0__ulExpOut_2_ */ - 0x0F123408, - 0x0F120000,/*lt_ExpGain_ExpCurveGainMaxStr_0__ulExpOut_3_ */ - 0x0F123408, - 0x0F120000,/*lt_ExpGain_ExpCurveGainMaxStr_0__ulExpOut_4_ */ - 0x0F126810, - 0x0F120000,/*lt_ExpGain_ExpCurveGainMaxStr_0__ulExpOut_5_ */ - 0x0F128214, - 0x0F120000,/*lt_ExpGain_ExpCurveGainMaxStr_0__ulExpOut_6_ */ - 0x0F12C350, - 0x0F120000,/*lt_ExpGain_ExpCurveGainMaxStr_0__ulExpOut_7_ */ - 0x0F12C350, - 0x0F120000,/*lt_ExpGain_ExpCurveGainMaxStr_0__ulExpOut_8_ */ - 0x0F12C350, - 0x0F120000,/*lt_ExpGain_ExpCurveGainMaxStr_0__ulExpOut_9_ */ - - 0x002A02C2, - 0x0F12029A,/*REG_0TC_PCFG_usMaxFrTimeMsecMult10 //029Ah:15fps */ - 0x0F12014A,/*REG_0TC_PCFG_usMinFrTimeMsecMult10 //014Ah:30fps */ - 0x002A03B4, - 0x0F120535,/*REG_0TC_CCFG_usMaxFrTimeMsecMult10 //0535h:7.5fps */ - 0x0F12029A,/*REG_0TC_CCFG_usMinFrTimeMsecMult10 //029Ah:15fps */ - - 0x002A0938, - 0x0F120000, /*afit_bUseNB_Afit */ - - 0x002A04E6, - 0x0F12077F, /*REG_TC_DBG_AutoAlgEnBits */ - - 0x002A04D0, - 0x0F120000, /*REG_SF_USER_IsoType */ - 0x0F120000, /*REG_SF_USER_IsoVal */ - 0x0F120001, /*REG_SF_USER_IsoChanged */ - - 0x002A06C2, - 0x0F120200, /*lt_bUseSecISODgain */ - - 0x002A1648, - 0x0F129002, /*af_search_usSingleAfFlags */ - - 0x002A15E8, - 0x0F120015, /*af_pos_usTableLastInd */ - 0x0F120027, /*af_pos_usTable_0_ */ - 0x0F120030, /*af_pos_usTable_1_ */ - 0x0F120036, /*af_pos_usTable_2_ */ - 0x0F12003C, /*af_pos_usTable_3_ */ - 0x0F120042, /*af_pos_usTable_4_ */ - 0x0F120048, /*af_pos_usTable_5_ */ - 0x0F12004E, /*af_pos_usTable_6_ */ - 0x0F120054, /*af_pos_usTable_7_ */ - 0x0F12005A, /*af_pos_usTable_8_ */ - 0x0F120060, /*af_pos_usTable_9_ */ - 0x0F120066, /*af_pos_usTable_10 */ - 0x0F12006C, /*af_pos_usTable_11_ */ - 0x0F120072, /*af_pos_usTable_12_ */ - 0x0F120078, /*af_pos_usTable_13_ */ - 0x0F12007E, /*af_pos_usTable_14_ */ - 0x0F120084, /*af_pos_usTable_15_ */ - 0x0F12008A, /*af_pos_usTable_16_ */ - 0x0F120090, /*af_pos_usTable_17_ */ - 0x0F120096, /*af_pos_usTable_18_ */ - 0x0F12009C, /*af_pos_usTable_19_ */ - 0x0F1200A2, /*af_pos_usTable_20_ */ - 0x0F1200A8, /*af_pos_usTable_21_ */ - 0x0F1200AE, /*af_pos_usTable_22_ */ - 0x0F1200B4, /*af_pos_usTable_23_ */ - 0x0F1200BA, /*af_pos_usTable_24_ */ - - 0x002A0266, - 0x0F120000, /*REG_TC_GP_ActivePrevConfig */ - 0x002A026A, - 0x0F120001, /*REG_TC_GP_PrevOpenAfterChange */ - 0x002A024E, - 0x0F120001, /*REG_TC_GP_NewConfigSync */ - 0x002A0268, - 0x0F120001, /*REG_TC_GP_PrevConfigChanged */ - 0x002A0270, - 0x0F120001, /*REG_TC_GP_CapConfigChanged */ - 0x002A023E, - 0x0F120001, /*REG_TC_GP_EnablePreview */ - 0x0F120001, /*REG_TC_GP_EnablePreviewChanged */ - -}; - -static const u32 s5k4ecgx_Scene_Portrait_EVT1[] = { - 0x00287000, - 0x002A0A28, - 0x0F124020, - 0x002A0ADE, - 0x0F124020, - 0x002A0B94, - 0x0F124020, - 0x002A0C4A, - 0x0F124020, - 0x002A0D00, - 0x0F124020, -}; - -static const u32 s5k4ecgx_Scene_Nightshot_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A06B8, - 0x0F12FFFF, /*lt_uMaxLei */ - 0x0F1200FF, /*lt_usMinExp */ - - 0x002A0A1E, - 0x0F1215C0,/*_ccm_oscar_iSaturation [7:0] AFIT8_RGB2YUV_iYOffset*/ - - 0x002A0638, - 0x0F120001, - 0x0F120000,/*ltExpGainExpCurveGainMaxStr_0_ulExpOut0*/ - 0x0F121478, - 0x0F120000,/*lt_ExpGain_ExpCurveGainMaxStr_0__ulExpOut_1_ */ - 0x0F121A0A, - 0x0F120000,/*lt_ExpGain_ExpCurveGainMaxStr_0__ulExpOut_2_ */ - 0x0F126810, - 0x0F120000,/*lt_ExpGain_ExpCurveGainMaxStr_0__ulExpOut_3_ */ - 0x0F126810, - 0x0F120000,/*lt_ExpGain_ExpCurveGainMaxStr_0__ulExpOut_4_ */ - 0x0F12D020, - 0x0F120000,/*lt_ExpGain_ExpCurveGainMaxStr_0__ulExpOut_5_ */ - 0x0F120428, - 0x0F120001,/*lt_ExpGain_ExpCurveGainMaxStr_0__ulExpOut_6_ */ - 0x0F121A80, - 0x0F120006,/*lt_ExpGain_ExpCurveGainMaxStr_0__ulExpOut_7_ */ - 0x0F121A80, - 0x0F120006,/*lt_ExpGain_ExpCurveGainMaxStr_0__ulExpOut_8_ */ - 0x0F121A80, - 0x0F120006,/*lt_ExpGain_ExpCurveGainMaxStr_0__ulExpOut_9_ */ - - 0x002A02C2, - 0x0F1209C4,/*REG_0TC_PCFG_usMaxFrTimeMsecMult10 //09C4h:4fps */ - 0x0F12014A,/*REG_0TC_PCFG_usMinFrTimeMsecMult10 //014Ah:30fps */ - 0x002A03B4, - 0x0F121388,/*REG_0TC_CCFG_usMaxFrTimeMsecMult10 //1388h:2fps */ - 0x0F121388,/*REG_0TC_CCFG_usMinFrTimeMsecMult10 //1388h:2fps */ - - 0x002A1648, /*af_search_usSingleAfFlags */ - 0x0F129000, - - 0x002A15E8, - 0x0F120006, /*af_pos_usTableLastInd */ - 0x0F120036, - 0x0F12003A, - 0x0F120040, - 0x0F120048, - 0x0F120050, - 0x0F120058, - 0x0F120060, - - 0x002A0266, - 0x0F120000, /*REG_TC_GP_ActivePrevConfig */ - 0x002A026A, - 0x0F120001, /*REG_TC_GP_PrevOpenAfterChange */ - 0x002A024E, - 0x0F120001, /*REG_TC_GP_NewConfigSync */ - 0x002A0268, - 0x0F120001, /*REG_TC_GP_PrevConfigChanged */ - 0x002A0270, - 0x0F120001, /*REG_TC_GP_CapConfigChanged */ - 0x002A023E, - 0x0F120001, /*REG_TC_GP_EnablePreview */ - 0x0F120001, /*REG_TC_GP_EnablePreviewChanged */ - -}; - -static const u32 s5k4ecgx_Scene_Backlight_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A1492, - 0x0F120000, /*ae_WeightTbl_16 */ - 0x0F120000, - 0x0F120000, - 0x0F120000, - 0x0F120000, - 0x0F120000, - 0x0F120000, - 0x0F120000, - 0x0F120000, - 0x0F120101, - 0x0F120101, - 0x0F120000, - 0x0F120000, - 0x0F12010F, - 0x0F120F01, - 0x0F120000, - 0x0F120000, - 0x0F12010F, - 0x0F120F01, - 0x0F120000, - 0x0F120000, - 0x0F120101, - 0x0F120101, - 0x0F120000, - 0x0F120000, - 0x0F120000, - 0x0F120000, - 0x0F120000, - 0x0F120000, - 0x0F120000, - 0x0F120000, - 0x0F120000, - -}; - -static const u32 s5k4ecgx_Scene_Landscape_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A1492, - 0x0F120101, /*ae_WeightTbl_16 */ - 0x0F120101, - 0x0F120101, - 0x0F120101, - 0x0F120101, - 0x0F120101, - 0x0F120101, - 0x0F120101, - 0x0F120101, - 0x0F120101, - 0x0F120101, - 0x0F120101, - 0x0F120101, - 0x0F120101, - 0x0F120101, - 0x0F120101, - 0x0F120101, - 0x0F120101, - 0x0F120101, - 0x0F120101, - 0x0F120101, - 0x0F120101, - 0x0F120101, - 0x0F120101, - 0x0F120101, - 0x0F120101, - 0x0F120101, - 0x0F120101, - 0x0F120101, - 0x0F120101, - 0x0F120101, - 0x0F120101, - - 0x002A0A28, - 0x0F12E082,/*_ee_iLowSharpPower [7:0] AFIT8_ee_iHighSharpPower*/ - 0x002A0ADE, - 0x0F12E082,/*_ee_iLowSharpPower [7:0] AFIT8_ee_iHighSharpPower*/ - 0x002A0B94, - 0x0F12E082,/*_ee_iLowSharpPower [7:0] AFIT8_ee_iHighSharpPower*/ - 0x002A0C4A, - 0x0F12E082,/*_ee_iLowSharpPower [7:0] AFIT8_ee_iHighSharpPower*/ - 0x002A0D00, - 0x0F12E082,/*_ee_iLowSharpPower [7:0] AFIT8_ee_iHighSharpPower*/ - - 0x002A0234, - 0x0F120030, /*REG_TC_UserSaturation */ -}; - -static const u32 s5k4ecgx_Scene_Sports_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A0638, - 0x0F120001, - 0x0F120000,/*lt_ExpGain_ExpCurveGainMaxStr_0__ulExpOut_0_ */ - 0x0F120A3C, - 0x0F120000,/*lt_ExpGain_ExpCurveGainMaxStr_0__ulExpOut_1_ */ - 0x0F120D05, - 0x0F120000,/*lt_ExpGain_ExpCurveGainMaxStr_0__ulExpOut_2_ */ - 0x0F123408, - 0x0F120000,/*lt_ExpGain_ExpCurveGainMaxStr_0__ulExpOut_3_ */ - 0x0F123408, - 0x0F120000,/*lt_ExpGain_ExpCurveGainMaxStr_0__ulExpOut_4_ */ - 0x0F123408, - 0x0F120000,/*lt_ExpGain_ExpCurveGainMaxStr_0__ulExpOut_5_ */ - 0x0F123408, - 0x0F120000,/*lt_ExpGain_ExpCurveGainMaxStr_0__ulExpOut_6_ */ - 0x0F123408, - 0x0F120000,/*lt_ExpGain_ExpCurveGainMaxStr_0__ulExpOut_7_ */ - 0x0F123408, - 0x0F120000,/*lt_ExpGain_ExpCurveGainMaxStr_0__ulExpOut_8_ */ - 0x0F123408, - 0x0F120000,/*lt_ExpGain_ExpCurveGainMaxStr_0__ulExpOut_9_ */ - - 0x002A0938, - 0x0F120001, /*afit_bUseNB_Afit */ - - 0x002A04D0, - 0x0F120001, /*REG_SF_USER_IsoType */ - 0x0F120200, /*REG_SF_USER_IsoVal */ - 0x0F120001, /*REG_SF_USER_IsoChanged */ - 0x002A06C2, - 0x0F120150, /*lt_bUseSecISODgain */ - - 0x002A0266, - 0x0F120000, /*REG_TC_GP_ActivePrevConfig */ - 0x002A026A, - 0x0F120001, /*REG_TC_GP_PrevOpenAfterChange */ - 0x002A024E, - 0x0F120001, /*REG_TC_GP_NewConfigSync */ - 0x002A0268, - 0x0F120001, /*REG_TC_GP_PrevConfigChanged */ - 0x002A0270, - 0x0F120001, /*REG_TC_GP_CapConfigChanged */ - 0x002A023E, - 0x0F120001, /*REG_TC_GP_EnablePreview */ - 0x0F120001, /*REG_TC_GP_EnablePreviewChanged */ - -}; - -static const u32 s5k4ecgx_Scene_Party_Indoor_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A0938, - 0x0F120001, /*afit_bUseNB_Afit */ - - 0x002A04D0, - 0x0F120001, /*REG_SF_USER_IsoType */ - 0x0F120340, /*REG_SF_USER_IsoVal */ - 0x0F120001, /*REG_SF_USER_IsoChanged */ - 0x002A06C2, - 0x0F120180, /*lt_bUseSecISODgain */ - - 0x002A0234, - 0x0F120030, /*REG_TC_UserSaturation */ -}; - -static const u32 s5k4ecgx_Scene_Beach_Snow_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A1484, - 0x0F120045, /*TVAR_ae_BrAve */ - - 0x002A0938, - 0x0F120001, /*afit_bUseNB_Afit */ - - 0x002A04D0, - 0x0F120001, /*REG_SF_USER_IsoType */ - 0x0F1200D0, /*REG_SF_USER_IsoVal */ - 0x0F120001, /*REG_SF_USER_IsoChanged */ - 0x002A06C2, - 0x0F120150, /*lt_bUseSecISODgain */ - - 0x002A0234, - 0x0F120030, /*REG_TC_UserSaturation */ -}; - -static const u32 s5k4ecgx_Scene_Sunset_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A04E6, - 0x0F120777, /*REG_TC_DBG_AutoAlgEnBits //AWB Off */ - - 0x002A04BA, - 0x0F1205F0, /*REG_SF_USER_Rgain */ - 0x002A04BE, - 0x0F120400, /*REG_SF_USER_Ggain */ - 0x002A04C2, - 0x0F120588, /*REG_SF_USER_Bgain */ - - 0x002A04C6, - 0x0F120001, /*REG_SF_USER_RGBGainChanged */ -}; - -static const u32 s5k4ecgx_Scene_Duskdawn_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A04E6, - 0x0F120777, /*REG_TC_DBG_AutoAlgEnBits //AWB Off */ - - 0x002A04BA, - 0x0F1205A5, /*REG_SF_USER_Rgain */ - 0x002A04BE, - 0x0F120400, /*REG_SF_USER_Ggain */ - 0x002A04C2, - 0x0F1208A8, /*REG_SF_USER_Bgain */ - - 0x002A04C6, - 0x0F120001, /*REG_SF_USER_RGBGainChanged */ -}; - -static const u32 s5k4ecgx_Scene_Fall_Color_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A0234, - 0x0F120060, -}; - -static const u32 s5k4ecgx_Scene_Fireworks_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A0638, - 0x0F120001, - 0x0F120000,/*lt_ExpGain_ExpCurveGainMaxStr_0__ulExpOut_0_ */ - 0x0F121478, - 0x0F120000,/*lt_ExpGain_ExpCurveGainMaxStr_0__ulExpOut_1_ */ - 0x0F121A0A, - 0x0F120000,/*lt_ExpGain_ExpCurveGainMaxStr_0__ulExpOut_2_ */ - 0x0F126810, - 0x0F120000,/*lt_ExpGain_ExpCurveGainMaxStr_0__ulExpOut_3_ */ - 0x0F126810, - 0x0F120000,/*lt_ExpGain_ExpCurveGainMaxStr_0__ulExpOut_4_ */ - 0x0F12D020, - 0x0F120000,/*lt_ExpGain_ExpCurveGainMaxStr_0__ulExpOut_5_ */ - 0x0F120428, - 0x0F120001,/*lt_ExpGain_ExpCurveGainMaxStr_0__ulExpOut_6_ */ - 0x0F121A80, - 0x0F120006,/*lt_ExpGain_ExpCurveGainMaxStr_0__ulExpOut_7_ */ - 0x0F121A80, - 0x0F120006,/*lt_ExpGain_ExpCurveGainMaxStr_0__ulExpOut_8_ */ - 0x0F121A80, - 0x0F120006,/*lt_ExpGain_ExpCurveGainMaxStr_0__ulExpOut_9_ */ - - 0x002A03B4, - 0x0F122710,/*REG_0TC_CCFG_usMaxFrTimeMsecMult10 //2710h:1fps */ - 0x0F122710,/*REG_0TC_CCFG_usMinFrTimeMsecMult10 //2710h:1fps */ - - 0x002A0266, - 0x0F120000, /*REG_TC_GP_ActivePrevConfig */ - 0x002A026A, - 0x0F120001, /*REG_TC_GP_PrevOpenAfterChange */ - 0x002A024E, - 0x0F120001, /*REG_TC_GP_NewConfigSync */ - 0x002A0268, - 0x0F120001, /*REG_TC_GP_PrevConfigChanged */ - 0x002A0270, - 0x0F120001, /*REG_TC_GP_CapConfigChanged */ - 0x002A023E, - 0x0F120001, /*REG_TC_GP_EnablePreview */ - 0x0F120001, /*REG_TC_GP_EnablePreviewChanged */ -}; - -static const u32 s5k4ecgx_Scene_Text_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A0A28, - 0x0F12A060,/*_ee_iLowSharpPower [7:0] AFIT8_ee_iHighSharpPower*/ - 0x002A0ADE, - 0x0F12A060,/*_ee_iLowSharpPower [7:0] AFIT8_ee_iHighSharpPower*/ - 0x002A0B94, - 0x0F12A060,/*_ee_iLowSharpPower [7:0] AFIT8_ee_iHighSharpPower*/ - 0x002A0C4A, - 0x0F12A060,/*_ee_iLowSharpPower [7:0] AFIT8_ee_iHighSharpPower*/ - 0x002A0D00, - 0x0F12A060,/*_ee_iLowSharpPower [7:0] AFIT8_ee_iHighSharpPower*/ -}; - -static const u32 s5k4ecgx_Scene_Candle_Light_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A04E6, - 0x0F120777, /*REG_TC_DBG_AutoAlgEnBits //AWB Off */ - - 0x002A04BA, - 0x0F1205F0, /*REG_SF_USER_Rgain */ - 0x002A04BE, - 0x0F120400, /*REG_SF_USER_Ggain */ - 0x002A04C2, - 0x0F120588, /*REG_SF_USER_Bgain */ - - 0x002A04C6, - 0x0F120001, /*REG_SF_USER_RGBGainChanged */ -}; - - /* AE Lock */ -static const u32 s5k4ecgx_ae_lock_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A2C5E, - 0x0F120000, -}; - - /* AE unLock */ -static const u32 s5k4ecgx_ae_unlock_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A2C5E, - 0x0F120001, -}; - - /* AWB Lock */ -static const u32 s5k4ecgx_awb_lock_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A2C66, - 0x0F120000, -}; - - /* AWB unLock */ -static const u32 s5k4ecgx_awb_unlock_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A2C66, - 0x0F120001, -}; - -static const u32 s5k4ecgx_Night_Mode_Off_EVT1[] = { - -}; - -static const u32 s5k4ecgx_AF_Return_Inf_pos_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A15D6, - 0x0F12D000, -}; - -static const u32 s5k4ecgx_AF_Return_Macro_pos_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A15E8, - 0x0F120018, - 0x0F12002A, - 0x0F120030, - 0x0F120036, - 0x0F12003C, - 0x0F120042, - 0x0F120048, - 0x0F12004E, - 0x0F120054, - 0x0F12005A, - 0x0F120060, - 0x0F120066, - 0x0F12006C, - 0x0F120072, - 0x0F120078, - 0x0F12007E, - 0x0F120084, - 0x0F12008A, - 0x0F120090, - 0x0F120096, - 0x0F12009C, - 0x0F1200A2, - 0x0F1200A8, - 0x0F1200AE, - 0x0F1200B4, - 0x0F1200BA, -}; - -static const u32 s5k4ecgx_AF_Normal_mode_4_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A1648, - 0x0F129002, -}; - -static const u32 s5k4ecgx_AF_Normal_mode_1_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A028E, - 0x0F120000, -}; - -static const u32 s5k4ecgx_AF_Normal_mode_2_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A028C, - 0x0F120004, -}; - -static const u32 s5k4ecgx_AF_Normal_mode_3_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A1648, - 0x0F129002, - - 0x002A15E8, - 0x0F120017, /*af_pos_usTableLastInd */ - 0x0F120026, - 0x0F12002C, - 0x0F120032, - 0x0F120038, - 0x0F12003E, - 0x0F120044, - 0x0F12004A, - 0x0F120050, - 0x0F120056, - 0x0F12005C, - 0x0F120062, - 0x0F120068, - 0x0F12006E, - 0x0F120074, - 0x0F12007A, - 0x0F120080, - 0x0F120086, - 0x0F12008C, - 0x0F120092, - 0x0F120098, - 0x0F12009E, - 0x0F1200A4, - 0x0F1200AA, - 0x0F1200B0, -}; - -static const u32 s5k4ecgx_AF_Macro_mode_1_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A028E, - 0x0F1200D0, -}; - -static const u32 s5k4ecgx_AF_Macro_mode_2_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A028C, - 0x0F120004, -}; - -static const u32 s5k4ecgx_AF_Macro_mode_3_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A1648, - 0x0F129042, - - 0x002A15E8, - 0x0F120015, /*af_pos_usTableLastInd */ - 0x0F120032, - 0x0F120038, - 0x0F12003E, - 0x0F120044, - 0x0F12004A, - 0x0F120050, - 0x0F120056, - 0x0F12005C, - 0x0F120062, - 0x0F120068, - 0x0F12006E, - 0x0F120074, - 0x0F12007A, - 0x0F120080, - 0x0F120086, - 0x0F12008C, - 0x0F120092, - 0x0F120098, - 0x0F12009E, - 0x0F1200A4, - 0x0F1200AA, - 0x0F1200B0, - - 0x002A15DA, - 0x0F121500,/* 16 start number of table 00 End number of table */ -}; - -static const u32 s5k4ecgx_AF_Low_Light_normal_mode_1_EVT1[] = { - -}; - -static const u32 s5k4ecgx_AF_Low_Light_normal_mode_2_EVT1[] = { - -}; - -static const u32 s5k4ecgx_AF_Low_Light_normal_mode_3_EVT1[] = { - -}; - -static const u32 s5k4ecgx_AF_Low_Light_Macro_mode_1_EVT1[] = { - -}; - -static const u32 s5k4ecgx_AF_Low_Light_Macro_mode_2_EVT1[] = { - -}; - -static const u32 s5k4ecgx_AF_Low_Light_Macro_mode_3_EVT1[] = { - -}; - -static const u32 s5k4ecgx_Single_AF_Start_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A028C, - 0x0F120005, -}; - -static const u32 s5k4ecgx_Single_AF_Off_1_EVT1[] = { - -}; - -static const u32 s5k4ecgx_Single_AF_Off_2_EVT1[] = { - -}; - -static const u32 s5k4ecgx_Single_AF_Off_3_EVT1[] = { - -}; - -static const u32 s5k4ecgx_Face_Detection_On_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A0294, - 0x0F120100, - 0x0F1200E3, - 0x0F120200, - 0x0F120238, - 0x0F1201C6, - 0x0F120166, - 0x0F120074, - 0x0F120132, - 0x0F120001, -}; - -static const u32 s5k4ecgx_Face_Detection_Off_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A0294, - 0x0F120100, - 0x0F1200E3, - 0x0F120200, - 0x0F120238, - 0x0F1201C6, - 0x0F120166, - 0x0F120074, - 0x0F120132, - 0x0F120001, -}; - -static const u32 s5k4ecgx_Low_Cap_On_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A06B8, - 0x0F12552C, /*lt_uMaxLei */ - 0x0F120006, /*lt_usMinExp */ - - 0x002A0608, - 0x0F120001, /*lt_ExpGain_uSubsamplingmode */ - 0x0F120001, /*lt_ExpGain_uNonSubsampling */ - 0x0F120900, /*lt_ExpGain_ExpCurveGainMaxStr_0__uMaxAnGain */ - -}; - -static const u32 s5k4ecgx_Low_Cap_Off_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A06B8, - 0x0F12452C, /*lt_uMaxLei */ - 0x0F120005, /*lt_usMinExp // 0725 000C->0005 */ - - 0x002A0608, - 0x0F120001, /*lt_ExpGain_uSubsamplingmode */ - 0x0F120001, /*lt_ExpGain_uNonSubsampling */ - 0x0F120800, /*lt_ExpGain_ExpCurveGainMaxStr_0__uMaxAnGain */ - -}; - -static const u32 s5k4ecgx_Night_Mode_On_EVT1[] = { - -}; - -static const u32 s5k4ecgx_Capture_Start_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A0242, - 0x0F120001, - 0x002A024E, - 0x0F120001, - 0x002A0244, - 0x0F120001, -}; - -static const u32 s5k4ecgx_Preview_Return_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A0242, - 0x0F120000, /*REG_TC_GP_EnableCapture*/ - 0x002A024E, - 0x0F120001, /*REG_TC_GP_NewConfigSync*/ - 0x002A0244, - 0x0F120001, /*REG_TC_GP_EnableCaptureChanged*/ - -}; - - /* Flash Control */ -static const u32 s5k4ecgx_Flash_init_EVT1[] = { -/* Include initial setting*/ -}; - -static const u32 s5k4ecgx_Pre_Flash_On_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A17FC, /* fls_FlashWP_0_Pre_Flash_Start*/ - 0x0F120001, -}; - -static const u32 s5k4ecgx_Pre_Flash_Off_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A1800, /*fls_afl_FlashWP_Weight_0_Pre_Flash_end*/ - 0x0F120001, -}; - -static const u32 s5k4ecgx_Main_Flash_On_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A17E8,/*fls_afl_FlashMode:Flash alg start*/ - 0x0F120001, - 0x002A180C,/*fls_afl_FlashWP_Weight_4:flash br avg*/ - 0x0F120027, -}; - -static const u32 s5k4ecgx_Main_Flash_Off_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A17E8, /*fls_afl_FlashMode Flash alg end*/ - 0x0F120000, -}; - -static const u32 s5k4ecgx_5M_Capture_EVT1[] = { /* 2560 x 1920 */ - 0xFCFCD000, - 0x00287000, - 0x002A0258, - 0x0F120A00, /*REG_TC_GP_CapReqInputWidth //2560 */ - 0x0F120780, /*REG_TC_GP_CapReqInputHeight //1920 */ - 0x0F120010, /*REG_TC_GP_CapInputWidthOfs //(2592-2560)/2 */ - 0x0F12000C, /*REG_TC_GP_CapInputHeightOfs //(1944-1920)/2 */ - - 0x002A0264, - 0x0F120001, /*REG_TC_GP_bUseReqInputInCap */ - - 0x002A049C, - 0x0F120A00, /*REG_TC_PZOOM_CapZoomReqInputWidth //2560 */ - 0x0F120780, /*REG_TC_PZOOM_CapZoomReqInputHeight //1920 */ - 0x0F120000, /*REG_TC_PZOOM_CapZoomReqInputWidthOfs */ - 0x0F120000, /*REG_TC_PZOOM_CapZoomReqInputHeightOfs */ - - 0x002A047C, - 0x0F120001, /*REG_TC_THUMB_Thumb_bActive */ - 0x0F120280, /*REG_TC_THUMB_Thumb_uWidth //640 */ - 0x0F1201E0, /*REG_TC_THUMB_Thumb_uHeight //480 */ - - 0x002A0398, - 0x0F120A00, /*REG_0TC_CCFG_usWidth //2560 */ - 0x0F120780, /*REG_0TC_CCFG_usHeight //1920 */ - - 0x002A024E, - 0x0F120001, /*REG_TC_GP_NewConfigSync */ - 0x002A0270, - 0x0F120001, /*REG_TC_GP_CapConfigChanged */ -}; - -static const u32 s5k4ecgx_3M_Capture_EVT1[] = { /*2048 x 1536 */ - 0xFCFCD000, - 0x00287000, - 0x002A0258, - 0x0F120A00, /*REG_TC_GP_CapReqInputWidth //2560 */ - 0x0F120780, /*REG_TC_GP_CapReqInputHeight //1920 */ - 0x0F120010, /*REG_TC_GP_CapInputWidthOfs //(2592-2560)/2 */ - 0x0F12000C, /*REG_TC_GP_CapInputHeightOfs //(1944-1920)/2 */ - - 0x002A0264, - 0x0F120001, /*REG_TC_GP_bUseReqInputInCap */ - - 0x002A049C, - 0x0F120A00, /*REG_TC_PZOOM_CapZoomReqInputWidth //2560 */ - 0x0F120780, /*REG_TC_PZOOM_CapZoomReqInputHeight //1920 */ - 0x0F120000, /*REG_TC_PZOOM_CapZoomReqInputWidthOfs */ - 0x0F120000, /*REG_TC_PZOOM_CapZoomReqInputHeightOfs */ - - 0x002A047C, - 0x0F120001, /*REG_TC_THUMB_Thumb_bActive */ - 0x0F120280, /*REG_TC_THUMB_Thumb_uWidth //640 */ - 0x0F1201E0, /*REG_TC_THUMB_Thumb_uHeight //480 */ - - 0x002A0398, - 0x0F120800, /*REG_0TC_CCFG_usWidth //2048 */ - 0x0F120600, /*REG_0TC_CCFG_usHeight //1536 */ - - 0x002A024E, - 0x0F120001, /*REG_TC_GP_NewConfigSync */ - 0x002A0270, - 0x0F120001, /*REG_TC_GP_CapConfigChanged */ - -}; - -static const u32 s5k4ecgx_2M_Capture_EVT1[] = { /*1600 x 1200 */ - 0xFCFCD000, - 0x00287000, - 0x002A0258, - 0x0F120A00, /*REG_TC_GP_CapReqInputWidth //2560 */ - 0x0F120780, /*REG_TC_GP_CapReqInputHeight //1920 */ - 0x0F120010, /*REG_TC_GP_CapInputWidthOfs //(2592-2560)/2 */ - 0x0F12000C, /*REG_TC_GP_CapInputHeightOfs //(1944-1920)/2 */ - - 0x002A0264, - 0x0F120001, /*REG_TC_GP_bUseReqInputInCap */ - - 0x002A049C, - 0x0F120A00, /*REG_TC_PZOOM_CapZoomReqInputWidth //2560 */ - 0x0F120780, /*REG_TC_PZOOM_CapZoomReqInputHeight //1920 */ - 0x0F120000, /*REG_TC_PZOOM_CapZoomReqInputWidthOfs */ - 0x0F120000, /*REG_TC_PZOOM_CapZoomReqInputHeightOfs */ - - 0x002A047C, - 0x0F120001, /*REG_TC_THUMB_Thumb_bActive */ - 0x0F120280, /*REG_TC_THUMB_Thumb_uWidth //640 */ - 0x0F1201E0, /*REG_TC_THUMB_Thumb_uHeight //480 */ - - 0x002A0398, - 0x0F120640, /*REG_0TC_CCFG_usWidth //1600 */ - 0x0F1204B0, /*REG_0TC_CCFG_usHeight //1200 */ - - 0x002A024E, - 0x0F120001, /*REG_TC_GP_NewConfigSync */ - 0x002A0270, - 0x0F120001, /*REG_TC_GP_CapConfigChanged */ -}; - -static const u32 s5k4ecgx_1M_Capture_EVT1[] = { /* 1280 x 960 */ - 0xFCFCD000, - 0x00287000, - 0x002A0258, - 0x0F120A00, /*REG_TC_GP_CapReqInputWidth //2560 */ - 0x0F120780, /*REG_TC_GP_CapReqInputHeight //1920 */ - 0x0F120010, /*REG_TC_GP_CapInputWidthOfs //(2592-2560)/2 */ - 0x0F12000C, /*REG_TC_GP_CapInputHeightOfs //(1944-1920)/2 */ - - 0x002A0264, - 0x0F120001, /*REG_TC_GP_bUseReqInputInCap */ - - 0x002A049C, - 0x0F120A00, /*REG_TC_PZOOM_CapZoomReqInputWidth //2560 */ - 0x0F120780, /*REG_TC_PZOOM_CapZoomReqInputHeight //1920 */ - 0x0F120000, /*REG_TC_PZOOM_CapZoomReqInputWidthOfs */ - 0x0F120000, /*REG_TC_PZOOM_CapZoomReqInputHeightOfs */ - - 0x002A047C, - 0x0F120001, /*REG_TC_THUMB_Thumb_bActive */ - 0x0F120280, /*REG_TC_THUMB_Thumb_uWidth //640 */ - 0x0F1201E0, /*REG_TC_THUMB_Thumb_uHeight //480 */ - - 0x002A0398, - 0x0F120500, /*REG_0TC_CCFG_usWidth //1280 */ - 0x0F1203C0, /*REG_0TC_CCFG_usHeight //960 */ - - 0x002A024E, - 0x0F120001, /*REG_TC_GP_NewConfigSync */ - 0x002A0270, - 0x0F120001, /*REG_TC_GP_CapConfigChanged */ - -}; - - /* 1024 x 768 */ -static const u32 s5k4ecgx_XGA_Capture_EVT1[] = { -/* 0725 add*/ - 0xFCFCD000, - 0x00287000, - 0x002A0258, - 0x0F120A00, /*REG_TC_GP_CapReqInputWidth //2560 */ - 0x0F120780, /*REG_TC_GP_CapReqInputHeight //1920 */ - 0x0F120010, /*REG_TC_GP_CapInputWidthOfs //(2592-2560)/2 */ - 0x0F12000C, /*REG_TC_GP_CapInputHeightOfs //(1944-1920)/2 */ - - 0x002A0264, - 0x0F120001, /*REG_TC_GP_bUseReqInputInCap */ - - 0x002A049C, - 0x0F120A00, /*REG_TC_PZOOM_CapZoomReqInputWidth //2560 */ - 0x0F120780, /*REG_TC_PZOOM_CapZoomReqInputHeight //1920 */ - 0x0F120000, /*REG_TC_PZOOM_CapZoomReqInputWidthOfs */ - 0x0F120000, /*REG_TC_PZOOM_CapZoomReqInputHeightOfs */ - - 0x002A047C, - 0x0F120001, /*REG_TC_THUMB_Thumb_bActive */ - 0x0F120280, /*REG_TC_THUMB_Thumb_uWidth //640 */ - 0x0F1201E0, /*REG_TC_THUMB_Thumb_uHeight //480 */ - - 0x002A0398, - 0x0F120400, /*REG_0TC_CCFG_usWidth //1024 */ - 0x0F120300, /*REG_0TC_CCFG_usHeight //768 */ - - 0x002A024E, - 0x0F120001, /*REG_TC_GP_NewConfigSync */ - 0x002A0270, - 0x0F120001, /*REG_TC_GP_CapConfigChanged */ -}; - -static const u32 s5k4ecgx_VGA_Capture_EVT1[] = { /* 640 x 480 */ - 0xFCFCD000, - 0x00287000, - 0x002A0258, - 0x0F120A00, /*REG_TC_GP_CapReqInputWidth //2560 */ - 0x0F120780, /*REG_TC_GP_CapReqInputHeight //1920 */ - 0x0F120010, /*REG_TC_GP_CapInputWidthOfs //(2592-2560)/2 */ - 0x0F12000C, /*REG_TC_GP_CapInputHeightOfs //(1944-1920)/2 */ - - 0x002A0264, - 0x0F120001, /*REG_TC_GP_bUseReqInputInCap */ - - 0x002A049C, - 0x0F120A00, /*REG_TC_PZOOM_CapZoomReqInputWidth //2560 */ - 0x0F120780, /*REG_TC_PZOOM_CapZoomReqInputHeight //1920 */ - 0x0F120000, /*REG_TC_PZOOM_CapZoomReqInputWidthOfs */ - 0x0F120000, /*REG_TC_PZOOM_CapZoomReqInputHeightOfs */ - - 0x002A047C, - 0x0F120001, /*REG_TC_THUMB_Thumb_bActive */ - 0x0F120280, /*REG_TC_THUMB_Thumb_uWidth //640 */ - 0x0F1201E0, /*REG_TC_THUMB_Thumb_uHeight //480 */ - - 0x002A0398, - 0x0F120280, /*REG_0TC_CCFG_usWidth //640 */ - 0x0F1201E0, /*REG_0TC_CCFG_usHeight //480 */ - - 0x002A024E, - 0x0F120001, /*REG_TC_GP_NewConfigSync */ - 0x002A0270, - 0x0F120001, /*REG_TC_GP_CapConfigChanged */ -}; - -static const u32 s5k4ecgx_QVGA_Capture_EVT1[] = { /* 320 x 240 */ - -}; - -static const u32 s5k4ecgx_1280_Preview_EVT1[] = { /* 1280 x 720 */ - /*720P enable setting */ - 0xFCFCD000, - 0x00287000, - 0x002A18AC, - 0x0F120060, /*senHal_uAddColsBin */ - 0x0F120060, /*senHal_uAddColsNoBin */ - 0x0F1207DC, /*senHal_uMinColsBin */ - 0x0F1205C0, /*senHal_uMinColsNoBin */ - - /* Size */ - 0x002A0250, - 0x0F120A00, /*REG_TC_GP_PrevReqInputWidth //2560 */ - 0x0F1205A0, /*REG_TC_GP_PrevReqInputHeight //1440 */ - 0x0F120010, /*REG_TC_GP_PrevInputWidthOfs //(2592-2560)/2 */ - 0x0F1200FC, /*REG_TC_GP_PrevInputHeightOfs //(1944-1440)/2*/ - 0x002A0262, - 0x0F120001, /*REG_TC_GP_bUseReqInputInPre */ - 0x002A0494, - 0x0F120A00, /*REG_TC_PZOOM_PrevZoomReqInputWidth //2560 */ - 0x0F1205A0, /*REG_TC_PZOOM_PrevZoomReqInputHeight //1440 */ - 0x0F120000, /*REG_TC_PZOOM_PrevZoomReqInputWidthOfs */ - 0x0F120000, /*REG_TC_PZOOM_PrevZoomReqInputHeightOfs */ - 0x002A02A6, - 0x0F120500, /*REG_0TC_PCFG_usWidth //1280 */ - 0x0F1202D0, /*REG_0TC_PCFG_usHeight //720 */ - - /* Frame Rate */ - 0x002A02BE, - 0x0F120000, /*REG_0TC_PCFG_usFrTimeType */ - 0x0F120001, /*REG_0TC_PCFG_FrRateQualityType */ - 0x0F12014A,/*REG_0TC_PCFG_usMaxFrTimeMsecMult10 //014Ah:30fps */ - 0x0F12014A,/*REG_0TC_PCFG_usMinFrTimeMsecMult10 //014Ah:30fps */ - - /* AE Target */ - 0x002A1484, - 0x0F12002A, /*003C //TVAR_ae_BrAve */ - - /* AE Weight Matrix */ - 0x002A1492, - 0x0F120101, /*0100 */ - 0x0F120101, /*0101 */ - 0x0F120101, /*0101 */ - 0x0F120101, /*0001 */ - 0x0F120101, /*0101 */ - 0x0F120101, /*0201 */ - 0x0F120101, /*0102 */ - 0x0F120101, /*0101 */ - 0x0F120101, /*0101 */ - 0x0F120101, /*0202 */ - 0x0F120101, /*0202 */ - 0x0F120101, /*0101 */ - 0x0F120101, /*0201 */ - 0x0F120101, /*0302 */ - 0x0F120101, /*0203 */ - 0x0F120101, /*0102 */ - 0x0F120101, /*0201 */ - 0x0F120101, /*0302 */ - 0x0F120101, /*0203 */ - 0x0F120101, /*0102 */ - 0x0F120101, /*0101 */ - 0x0F120101, /*0202 */ - 0x0F120101, /*0202 */ - 0x0F120101, /*0101 */ - 0x0F120101, /*0101 */ - 0x0F120101, /*0201 */ - 0x0F120101, /*0102 */ - 0x0F120101, /*0101 */ - 0x0F120101, /*0101 */ - 0x0F120101, /*0101 */ - 0x0F120101, /*0101 */ - 0x0F120101, /*0101 */ - - /* Slow AE */ - 0x002A1568, - 0x0F120030, /*0010 //ae_GainIn_0_ */ - 0x0F120090, /*0020 //ae_GainIn_1_ */ - 0x0F1200A8, /*0040 //ae_GainIn_2_ */ - 0x0F1200C0, /*0080 //ae_GainIn_3_ */ - 0x0F120100, /*0010 //ae_GainIn_4_ FIX */ - 0x0F120140, /*0200 //ae_GainIn_5_ */ - 0x0F120180, /*0400 //ae_GainIn_6_ */ - 0x0F120400, /*0800 //ae_GainIn_7_ */ - 0x0F122000, /*0800 //ae_GainIn_8_ */ - 0x0F120080, /*0010 //ae_GainOut_0_ */ - 0x0F1200D0, /*0020 //ae_GainOut_1_ */ - 0x0F1200D8, /*0040 //ae_GainOut_2_ */ - 0x0F1200F8, /*0080 //ae_GainOut_3_ */ - 0x0F120100, /*0100 //ae_GainOut_4_ FIX */ - 0x0F120103, /*0200 //ae_GainOut_5_ */ - 0x0F120110, /*0400 //ae_GainOut_6_ */ - 0x0F120150, /*0800 //ae_GainOut_7_ */ - 0x0F120400, /*2000 //ae_GainOut_8_*/ - 0x002A0544, - 0x0F120105, /*0111 //lt_uLimitHigh */ - 0x0F1200FA, /*00EF //lt_uLimitLow */ - 0x002A0588, - 0x0F120001, /*0000 //lt_uInitPostToleranceCnt */ - 0x002A0582, - 0x0F1200D0, /*0000 //lt_uSlowFilterCoef */ - - 0x002A0734, /*R*/ - 0x0F120000, - 0x0F120005, - 0x0F12000F, - 0x0F120026, - 0x0F120066, - 0x0F1200D5, - 0x0F120138, - 0x0F120163, - 0x0F120189, - 0x0F1201C6, - 0x0F1201F8, - 0x0F120222, - 0x0F120247, - 0x0F120282, - 0x0F1202B5, - 0x0F12030F, - 0x0F12035F, - 0x0F1203A2, - 0x0F1203D8, - 0x0F1203FF, - - 0x0F120000, /*G*/ - 0x0F120005, - 0x0F12000F, - 0x0F120026, - 0x0F120066, - 0x0F1200D5, - 0x0F120138, - 0x0F120163, - 0x0F120189, - 0x0F1201C6, - 0x0F1201F8, - 0x0F120222, - 0x0F120247, - 0x0F120282, - 0x0F1202B5, - 0x0F12030F, - 0x0F12035F, - 0x0F1203A2, - 0x0F1203D8, - 0x0F1203FF, - - 0x0F120000, /*B*/ - 0x0F120005, - 0x0F12000F, - 0x0F120026, - 0x0F120066, - 0x0F1200D5, - 0x0F120138, - 0x0F120163, - 0x0F120189, - 0x0F1201C6, - 0x0F1201F8, - 0x0F120222, - 0x0F120247, - 0x0F120282, - 0x0F1202B5, - 0x0F12030F, - 0x0F12035F, - 0x0F1203A2, - 0x0F1203D8, - 0x0F1203FF, - - /* Slow AWB */ - 0x002A139A, - 0x0F120158, /*0258 //awbb_GainsMaxMove */ - - /* AWB Convergence Speed */ - 0x002A1464, - 0x0F120008, /*awbb_WpFilterMinThr */ - 0x0F12FFFF, /*0190 //awbb_WpFilterMaxThr */ - 0x0F120010, /*00A0 //awbb_WpFilterCoef */ - 0x0F120020, /*0004 //awbb_WpFilterSize */ - 0x002A0938, - 0x0F120001,/*0000 // on/off AFIT by NB option */ - 0x0F120014, /*0014//SARR_uNormBrInDoor */ - 0x0F1200D2, /*00D2//SARR_uNormBrInDoor */ - 0x0F120784, /*0384//SARR_uNormBrInDoor */ - 0x0F1210D0, /*07D0//SARR_uNormBrInDoor */ - 0x0F121388, /*1388//SARR_uNormBrInDoor */ - 0x002A098C, - 0x0F120000, /*0000//7000098C//_BRIGHTNESS AFIT 0 */ - 0x0F120000, /*0000//7000098E//_CONTRAST */ - 0x0F120000, /*0000//70000990//_SATURATION */ - 0x0F120000, /*0000//70000992//_SHARP_BLUR */ - 0x0F120000, /*0000//70000994//_GLAMOUR */ - 0x0F1200C0, /*00C0//70000996//_bnr_edge_high */ - 0x0F120064, /*0064//70000998//_postdmsc_iLowBright */ - 0x0F120384, /*0384//7000099A//_postdmsc_iHighBright */ - 0x0F120051, /*005F//7000099C//_postdmsc_iLowSat */ - 0x0F1201F4, /*01F4//7000099E//_postdmsc_iHighSat */ - 0x0F120070, /*0070//700009A0//_postdmsc_iTune */ - 0x0F120040, /*0040//700009A2//_yuvemix_mNegRanges_0 */ - 0x0F1200A0, /*00A0//700009A4//_yuvemix_mNegRanges_1 */ - 0x0F120100, /*0100//700009A6//_yuvemix_mNegRanges_2 */ - 0x0F120010, /*0010//700009A8//_yuvemix_mPosRanges_0 */ - 0x0F120060, /*0040//700009AA//_yuvemix_mPosRanges_1 */ - 0x0F120100, /*00A0//700009AC//_yuvemix_mPosRanges_2 */ - 0x0F121430, /*1430//700009AE//_bnr_edge_low */ - 0x0F120201, /*0201//700009B0//_bnr_repl_force */ - 0x0F120204, /*0204//700009B2//_bnr_iHotThreshLow */ - 0x0F122404, /*3604//700009B4//_bnr_iColdThreshLow */ - 0x0F12031B, /*032A//700009B6//_bnr_DispTH_High */ - 0x0F120103, /*0403//700009B8//_bnr_DISP_Limit_High */ - 0x0F121205, /*1B06//700009BA//_bnr_iDistSigmaMax */ - 0x0F12400D, /*6015//700009BC//_bnr_iDiffSigmaHigh */ - 0x0F120080, /*00C0//700009BE//_bnr_iNormalizedSTD_Limit */ - 0x0F122080, /*6080//700009C0//_bnr_iDirMinThres */ - 0x0F123040, /*4080//700009C2//_bnr_iDirFltDiffThresLow*/ - 0x0F120630, /*0640//700009C4//_bnr_iDirSmoothPowerLow*/ - 0x0F120306, /*0306//700009C6//_bnr_iHighMaxSlopeAllowed */ - 0x0F122003, /*2003//700009C8//_bnr_iHighSlopeThresh*/ - 0x0F12FF01, /*FF01//700009CA//_bnr_iSlopeBlurStrength */ - 0x0F120404, /*0000//700009CC//_bnr_AddNoisePower1 */ - 0x0F120300, /*0400//700009CE//_bnr_iRadialTune */ - 0x0F12245A, /*365A//700009D0//_bnr_iRadialLimit */ - 0x0F121018, /*102A//700009D2//_ee_iFSMagThHigh */ - 0x0F12000B, /*000B//700009D4//_ee_iFSVarThHigh */ - 0x0F120B00, /*0600//700009D6//_ee_iFSThHigh */ - 0x0F125A0F, /*5A0F//700009D8//_ee_iFSVarCountTh */ - 0x0F120505, /*0505//700009DA//_ee_iRadialPower */ - 0x0F121802, /*1802//700009DC//_ee_iROADThres */ - 0x0F120000, /*0000//700009DE//_ee_iROADSubMaxNR */ - 0x0F122006, /*2006//700009E0//_ee_iROADNeiThres */ - 0x0F123428, /*3028//700009E2//_ee_iSmoothEdgeThres */ - 0x0F12041C, /*0418//700009E4//_ee_iWSharpen */ - 0x0F120101, /*0101//700009E6//_ee_iWShThresh */ - 0x0F120800, /*0800//700009E8//_ee_iEmbossCentAdd */ - 0x0F121004, /*1804//700009EA//_ee_iReduceEdgeThresh */ - 0x0F124008, /*4008//700009EC//_dmsc_iDesatThresh */ - 0x0F120540, /*0540//700009EE//_dmsc_iDemBlurLow */ - 0x0F128006, /*8006//700009F0//_dmsc_iDecisionThresh */ - 0x0F120020, /*0020//700009F2//_dmsc_iMonochrom */ - 0x0F120000, /*0000//700009F4//_dmsc_iGRDenoiseVal */ - 0x0F121800, /*2000//700009F6//_dmsc_iEdgeDesatThrLow */ - 0x0F120000, /*0000//700009F8//_dmsc_iNearGrayDesat */ - 0x0F121E10, /*1E10//700009FA//_postdmsc_iBCoeff */ - 0x0F12000B, /*000B//700009FC//_postdmsc_iWideMult */ - 0x0F120607, /*0607//700009FE//_yuvemix_mNegSlopes_1 */ - 0x0F120005, /*0005//70000A00//_yuvemix_mNegSlopes_3 */ - 0x0F120607, /*0607//70000A02//_yuvemix_mPosSlopes_1 */ - 0x0F120405, /*0705//70000A04//_yuvemix_mPosSlopes_3 */ - 0x0F120205, /*0206//70000A06//_yuviirnr_iXSupportUV */ - 0x0F120304, /*0304//70000A08//_yuviirnr_iHighYNorm */ - 0x0F120409, /*0309//70000A0A//_yuviirnr_iHighUVNorm */ - 0x0F120306, /*0305//70000A0C//_yuviirnr_iUVNormShift */ - 0x0F120407, /*2006//70000A0E//_yuviirnr_iVertLength_UV */ - 0x0F121F04, /*1320//70000A10//_yuviirnr_iDiffThreshH_Y */ - 0x0F120218, /*1014//70000A12//_yuviirnr_iDiffThreshH_UV */ - 0x0F121102, /*1010//70000A14//_yuviirnr_iMaxThreshH_Y */ - 0x0F120611, /*0C10//70000A16//_yuviirnr_iMaxThreshH_UV */ - 0x0F121A02, /*1A0C//70000A18//_yuviirnr_iYNRStrengthH */ - 0x0F128018, /*4A18//70000A1A//_yuviirnr_iUVNRStrengthH */ - 0x0F1200B0, /*0080//70000A1C//_RGBGamma2_iLinearity */ - 0x0F121080, /*0350//70000A1E//_ccm_oscar_iSaturation */ - 0x0F120180, /*0180//70000A20//_RGB2YUV_iRGBGain */ - 0x0F120A0A, /*0A0A//70000A22//_bnr_iClustMulT_H */ - 0x0F120101, /*0101//70000A24//_bnr_iClustThresh_H */ - 0x0F121B24, /*2A36//70000A26//_bnr_iDenThreshLow */ - 0x0F126024, /*6024//70000A28//_ee_iLowSharpPower */ - 0x0F121D22, /*2A36//70000A2A//_ee_iLowShDenoise */ - 0x0F12FFFF, /*FFFF//70000A2C//_ee_iLowSharpClamp */ - 0x0F120808, /*0808//70000A2E//_ee_iReduceEdgeMinMult */ - 0x0F120A01, /*0A01//70000A30//_bnr_nClustLevel_H_Bin */ - 0x0F12010A, /*010A//70000A32//_bnr_iClustMulT_C_Bin */ - 0x0F122401, /*2701//70000A34//_bnr_iClustThresh_C_Bin*/ - 0x0F12241B, /*241E//70000A36//_bnr_iDenThreshHigh_Bin*/ - 0x0F121E60, /*2E60//70000A38//_ee_iHighSharpPower_Bin*/ - 0x0F12FF18, /*FF22//70000A3A//_ee_iHighShDenoise_Bin */ - 0x0F1208FF, /*40FF//70000A3C//_ee_iHighSharpClamp_Bin */ - 0x0F120008, /*0009//70000A3E//_ee_iReduceEdgeSlope_Bin */ - 0x0F120001, /*0001//70000A40//_bnr_nClustLevel_C */ - 0x0F120000, /*0000//70000A42//_BRIGHTNESS AFIT 1 */ - 0x0F120000, /*0000//70000A44//_CONTRAST */ - 0x0F120000, /*0000//70000A46//_SATURATION */ - 0x0F120000, /*0000//70000A48//_SHARP_BLUR */ - 0x0F120000, /*0000//70000A4A//_GLAMOUR */ - 0x0F1200C0, /*00C0//70000A4C//_bnr_edge_high */ - 0x0F120064, /*0064//70000A4E//_postdmsc_iLowBright */ - 0x0F120384, /*0384//70000A50//_postdmsc_iHighBright */ - 0x0F120051, /*0051//70000A52//_postdmsc_iLowSat */ - 0x0F1201F4, /*01F4//70000A54//_postdmsc_iHighSat */ - 0x0F120070, /*0070//70000A56//_postdmsc_iTune */ - 0x0F120040, /*0040//70000A58//_yuvemix_mNegRanges_0 */ - 0x0F1200A0, /*00A0//70000A5A//_yuvemix_mNegRanges_1 */ - 0x0F120100, /*0100//70000A5C//_yuvemix_mNegRanges_2 */ - 0x0F120010, /*0010//70000A5E//_yuvemix_mPosRanges_0 */ - 0x0F120060, /*0060//70000A60//_yuvemix_mPosRanges_1 */ - 0x0F120100, /*0100//70000A62//_yuvemix_mPosRanges_2 */ - 0x0F121430, /*1430//70000A64//_bnr_edge_low */ - 0x0F120201, /*0201//70000A66//_bnr_repl_force */ - 0x0F120204, /*0204//70000A68//_bnr_iHotThreshLow */ - 0x0F121B04, /*2404//70000A6A//_bnr_iColdThreshLow */ - 0x0F120312, /*031B//70000A6C//_bnr_DispTH_High */ - 0x0F120003, /*0103//70000A6E//_bnr_DISP_Limit_High */ - 0x0F120C03, /*1205//70000A70//_bnr_iDistSigmaMax */ - 0x0F122806, /*400D//70000A72//_bnr_iDiffSigmaHigh */ - 0x0F120060, /*0080//70000A74//_bnr_iNormalizedSTD_Limit */ - 0x0F121540, /*1980//70000A76//_bnr_iDirMinThres */ - 0x0F12201C, /*272E//70000A78//_bnr_iDirFltDiffThresLow */ - 0x0F120620, /*0629//70000A7A//_bnr_iDirSmoothPowerLow */ - 0x0F120306, /*0306//70000A7C//_bnr_iHighMaxSlopeAllowed */ - 0x0F122003, /*2003//70000A7E//_bnr_iHighSlopeThresh */ - 0x0F12FF01, /*FF01//70000A80//_bnr_iSlopeBlurStrength */ - 0x0F120404, /*0404//70000A82//_bnr_AddNoisePower1 */ - 0x0F120300, /*0300//70000A84//_bnr_iRadialTune */ - 0x0F12145A, /*245A//70000A86//_bnr_iRadialLimit */ - 0x0F121010, /*1018//70000A88//_ee_iFSMagThHigh */ - 0x0F12000B, /*000B//70000A8A//_ee_iFSVarThHigh */ - 0x0F120B00, /*0B00//70000A8C//_ee_iFSThHigh */ - 0x0F125A0F, /*5A0F//70000A8E//_ee_iFSVarCountTh */ - 0x0F120503, /*0505//70000A90//_ee_iRadialPower */ - 0x0F121802, /*1802//70000A92//_ee_iROADThres */ - 0x0F120000, /*0000//70000A94//_ee_iROADSubMaxNR */ - 0x0F122006, /*2006//70000A96//_ee_iROADNeiThres */ - 0x0F123C28, /*3828//70000A98//_ee_iSmoothEdgeThres */ - 0x0F120428, /*0425//70000A9A//_ee_iWSharpen */ - 0x0F120101, /*0101//70000A9C//_ee_iWShThresh */ - 0x0F128000, /*0800//70000A9E//_ee_iEmbossCentAdd */ - 0x0F121004, /*1004//70000AA0//_ee_iReduceEdgeThresh */ - 0x0F124008, /*4008//70000AA2//_dmsc_iDesatThresh */ - 0x0F120540, /*0540//70000AA4//_dmsc_iDemBlurLow */ - 0x0F128006, /*8006//70000AA6//_dmsc_iDecisionThresh */ - 0x0F120020, /*0020//70000AA8//_dmsc_iMonochrom */ - 0x0F120000, /*0000//70000AAA//_dmsc_iGRDenoiseVal */ - 0x0F121800, /*2000//70000AAC//_dmsc_iEdgeDesatThrLow */ - 0x0F120000, /*0000//70000AAE//_dmsc_iNearGrayDesat */ - 0x0F121E10, /*1E10//70000AB0//_postdmsc_iBCoeff */ - 0x0F12000B, /*000B//70000AB2//_postdmsc_iWideMult */ - 0x0F120607, /*0607//70000AB4//_yuvemix_mNegSlopes_1 */ - 0x0F120005, /*0005//70000AB6//_yuvemix_mNegSlopes_3 */ - 0x0F120607, /*0607//70000AB8//_yuvemix_mPosSlopes_1 */ - 0x0F120405, /*0405//70000ABA//_yuvemix_mPosSlopes_3 */ - 0x0F120205, /*0205//70000ABC//_yuviirnr_iXSupportUV */ - 0x0F120304, /*0304//70000ABE//_yuviirnr_iHighYNorm */ - 0x0F120409, /*0409//70000AC0//_yuviirnr_iHighUVNorm */ - 0x0F120306, /*0306//70000AC2//_yuviirnr_iUVNormShift */ - 0x0F120407, /*0407//70000AC4//_yuviirnr_iVertLength_UV*/ - 0x0F121F04, /*2204//70000AC6//_yuviirnr_iDiffThreshH_Y*/ - 0x0F120228, /*021C//70000AC8//_yuviirnr_iDiffThreshH_UV */ - 0x0F121402, /*1102//70000ACA//_yuviirnr_iMaxThreshH_Y */ - 0x0F120618, /*0611//70000ACC//_yuviirnr_iMaxThreshH_UV */ - 0x0F121A02, /*1A02//70000ACE//_yuviirnr_iYNRStrengthH */ - 0x0F128018, /*8018//70000AD0//_yuviirnr_iUVNRStrengthH*/ - 0x0F1200A0, /*0080//70000AD2//_RGBGamma2_iLinearity */ - 0x0F121080, /*0374//70000AD4//_ccm_oscar_iSaturation */ - 0x0F120180, /*0180//70000AD6//_RGB2YUV_iRGBGain */ - 0x0F120A0A, /*0A0A//70000AD8//_bnr_iClustMulT_H */ - 0x0F120101, /*0101//70000ADA//_bnr_iClustThresh_H */ - 0x0F121B24, /*141D//70000ADC//_bnr_iDenThreshLow */ - 0x0F126024, /*6024//70000ADE//_ee_iLowSharpPower */ - 0x0F120C0C, /*1217//70000AE0//_ee_iLowShDenoise */ - 0x0F12FFFF, /*FFFF//70000AE2//_ee_iLowSharpClamp */ - 0x0F120808, /*0808//70000AE4//_ee_iReduceEdgeMinMult */ - 0x0F120A01, /*0A01//70000AE6//_bnr_nClustLevel_H_Bin */ - 0x0F12010A, /*010A//70000AE8//_bnr_iClustMulT_C_Bin */ - 0x0F121501, /*0001//70000AEA//_bnr_iClustThresh_C_Bin*/ - 0x0F12240F, /*2400//70000AEC//_bnr_iDenThreshHigh_Bin*/ - 0x0F120C60, /*1660//70000AEE//_ee_iHighSharpPower_Bin*/ - 0x0F12FF0C, /*FF10//70000AF0//_ee_iHighShDenoise_Bin */ - 0x0F1208FF, /*40FF//70000AF2//_ee_iHighSharpClamp_Bin*/ - 0x0F120008, /*0009//70000AF4//_ee_iReduceEdgeSlope_Bin */ - 0x0F120001, /*0001//70000AF6//_bnr_nClustLevel_C */ - 0x0F120000, /*0000//70000AF8//_BRIGHTNESS AFIT 2 */ - 0x0F120000, /*0000//70000AFA//_CONTRAST */ - 0x0F120000, /*0000//70000AFC//_SATURATION */ - 0x0F120000, /*0000//70000AFE//_SHARP_BLUR */ - 0x0F120000, /*0000//70000B00//_GLAMOUR */ - 0x0F1200C0, /*00C0//70000B02//_bnr_edge_high */ - 0x0F120064, /*0064//70000B04//_postdmsc_iLowBright */ - 0x0F120384, /*0384//70000B06//_postdmsc_iHighBright */ - 0x0F120043, /*0043//70000B08//_postdmsc_iLowSat */ - 0x0F1201F4, /*01F4//70000B0A//_postdmsc_iHighSat */ - 0x0F120070, /*0070//70000B0C//_postdmsc_iTune */ - 0x0F120040, /*0040//70000B0E//_yuvemix_mNegRanges_0 */ - 0x0F1200A0, /*00A0//70000B10//_yuvemix_mNegRanges_1 */ - 0x0F120100, /*0100//70000B12//_yuvemix_mNegRanges_2 */ - 0x0F120010, /*0010//70000B14//_yuvemix_mPosRanges_0 */ - 0x0F120060, /*0060//70000B16//_yuvemix_mPosRanges_1 */ - 0x0F120100, /*0100//70000B18//_yuvemix_mPosRanges_2 */ - 0x0F121430, /*1430//70000B1A//_bnr_edge_low */ - 0x0F120201, /*0201//70000B1C//_bnr_repl_force */ - 0x0F120204, /*0204//70000B1E//_bnr_iHotThreshLow */ - 0x0F121B04, /*1B04//70000B20//_bnr_iColdThreshLow */ - 0x0F120312, /*0312//70000B22//_bnr_DispTH_High */ - 0x0F120003, /*0003//70000B24//_bnr_DISP_Limit_High */ - 0x0F120C03, /*0C03//70000B26//_bnr_iDistSigmaMax */ - 0x0F122806, /*2806//70000B28//_bnr_iDiffSigmaHigh */ - 0x0F120060, /*0060//70000B2A//_bnr_iNormalizedSTD_Limit*/ - 0x0F121540, /*1580//70000B2C//_bnr_iDirMinThres */ - 0x0F12201C, /*2020//70000B2E//_bnr_iDirFltDiffThresLow */ - 0x0F120620, /*0620//70000B30//_bnr_iDirSmoothPowerLow */ - 0x0F120306, /*0306//70000B32//_bnr_iHighMaxSlopeAllowed*/ - 0x0F122003, /*2003//70000B34//_bnr_iHighSlopeThresh */ - 0x0F12FF01, /*FF01//70000B36//_bnr_iSlopeBlurStrength*/ - 0x0F120404, /*0404//70000B38//_bnr_AddNoisePower1 */ - 0x0F120300, /*0300//70000B3A//_bnr_iRadialTune */ - 0x0F12145A, /*145A//70000B3C//_bnr_iRadialLimit */ - 0x0F121010, /*1010//70000B3E//_ee_iFSMagThHigh*/ - 0x0F12000B, /*000B//70000B40//_ee_iFSVarThHigh*/ - 0x0F120E00, /*0E00//70000B42//_ee_iFSThHigh */ - 0x0F125A0F, /*5A0F//70000B44//_ee_iFSVarCountTh */ - 0x0F120503, /*0504//70000B46//_ee_iRadialPower*/ - 0x0F121802, /*1802//70000B48//_ee_iROADThres */ - 0x0F120000, /*0000//70000B4A//_ee_iROADSubMaxNR */ - 0x0F122006, /*2006//70000B4C//_ee_iROADNeiThres */ - 0x0F123C28, /*3828//70000B4E//_ee_iSmoothEdgeThres */ - 0x0F120428, /*0428//70000B50//_ee_iWSharpen */ - 0x0F120101, /*0101//70000B52//_ee_iWShThresh */ - 0x0F128000, /*8000//70000B54//_ee_iEmbossCentAdd */ - 0x0F120A04, /*0A04//70000B56//_ee_iReduceEdgeThresh */ - 0x0F124008, /*4008//70000B58//_dmsc_iDesatThresh */ - 0x0F120540, /*0540//70000B5A//_dmsc_iDemBlurLow */ - 0x0F128006, /*8006//70000B5C//_dmsc_iDecisionThresh */ - 0x0F120020, /*0020//70000B5E//_dmsc_iMonochrom */ - 0x0F120000, /*0000//70000B60//_dmsc_iGRDenoiseVal */ - 0x0F121800, /*2000//70000B62//_dmsc_iEdgeDesatThrLow */ - 0x0F120000, /*0000//70000B64//_dmsc_iNearGrayDesat */ - 0x0F121E10, /*1E10//70000B66//_postdmsc_iBCoeff */ - 0x0F12000B, /*000B//70000B68//_postdmsc_iWideMult */ - 0x0F120607, /*0607//70000B6A//_yuvemix_mNegSlopes_1 */ - 0x0F120005, /*0005//70000B6C//_yuvemix_mNegSlopes_3 */ - 0x0F120607, /*0607//70000B6E//_yuvemix_mPosSlopes_1 */ - 0x0F120405, /*0405//70000B70//_yuvemix_mPosSlopes_3 */ - 0x0F120205, /*0207//70000B72//_yuviirnr_iXSupportUV */ - 0x0F120304, /*0304//70000B74//_yuviirnr_iHighYNorm */ - 0x0F120409, /*0409//70000B76//_yuviirnr_iHighUVNorm */ - 0x0F120306, /*0306//70000B78//_yuviirnr_iUVNormShift */ - 0x0F120407, /*0407//70000B7A//_yuviirnr_iVertLength_UV*/ - 0x0F122404, /*2404//70000B7C//_yuviirnr_iDiffThreshH_Y*/ - 0x0F120228, /*0221//70000B7E//_yuviirnr_iDiffThreshH_UV */ - 0x0F121402, /*1202//70000B80//_yuviirnr_iMaxThreshH_Y */ - 0x0F120618, /*0613//70000B82//_yuviirnr_iMaxThreshH_UV */ - 0x0F121A02, /*1A02//70000B84//_yuviirnr_iYNRStrengthH */ - 0x0F128018, /*8018//70000B86//_yuviirnr_iUVNRStrengthH */ - 0x0F120080, /*0080//70000B88//_RGBGamma2_iLinearity */ - 0x0F121080, /*0080//70000B8A//_ccm_oscar_iSaturation */ - 0x0F120180, /*0180//70000B8C//_RGB2YUV_iRGBGain */ - 0x0F120A0A, /*0A0A//70000B8E//_bnr_iClustMulT_H */ - 0x0F120101, /*0101//70000B90//_bnr_iClustThresh_H */ - 0x0F12141D, /*121B//70000B92//_bnr_iDenThreshLow */ - 0x0F126024, /*6024//70000B94//_ee_iLowSharpPower */ - 0x0F120C0C, /*0C0C//70000B96//_ee_iLowShDenoise */ - 0x0F12FFFF, /*FFFF//70000B98//_ee_iLowSharpClamp */ - 0x0F120808, /*0808//70000B9A//_ee_iReduceEdgeMinMult */ - 0x0F120A01, /*0A01//70000B9C//_bnr_nClustLevel_H_Bin */ - 0x0F12010A, /*010A//70000B9E//_bnr_iClustMulT_C_Bin */ - 0x0F121501, /*0001//70000BA0//_bnr_iClustThresh_C_Bin*/ - 0x0F12240F, /*2400//70000BA2//_bnr_iDenThreshHigh_Bin*/ - 0x0F120C60, /*0460//70000BA4//_ee_iHighSharpPower_Bin*/ - 0x0F12FF0C, /*FF04//70000BA6//_ee_iHighShDenoise_Bin*/ - 0x0F1208FF, /*40FF//70000BA8//_ee_iHighSharpClamp_Bin */ - 0x0F120008, /*0009//70000BAA//_ee_iReduceEdgeSlope_Bin */ - 0x0F120001, /*0001//70000BAC//_bnr_nClustLevel_C */ - 0x0F120000, /*0000//70000BAE//_BRIGHTNESS AFIT 3 */ - 0x0F120000, /*0000//70000BB0//_CONTRAST */ - 0x0F120000, /*0000//70000BB2//_SATURATION */ - 0x0F120000, /*0000//70000BB4//_SHARP_BLUR */ - 0x0F120000, /*0000//70000BB6//_GLAMOUR */ - 0x0F1200C0, /*00C0//70000BB8//_bnr_edge_high */ - 0x0F120064, /*0064//70000BBA//_postdmsc_iLowBright */ - 0x0F120384, /*0384//70000BBC//_postdmsc_iHighBright */ - 0x0F120032, /*0032//70000BBE//_postdmsc_iLowSat */ - 0x0F1201F4, /*01F4//70000BC0//_postdmsc_iHighSat */ - 0x0F120070, /*0070//70000BC2//_postdmsc_iTune */ - 0x0F120040, /*0040//70000BC4//_yuvemix_mNegRanges_0 */ - 0x0F1200A0, /*00A0//70000BC6//_yuvemix_mNegRanges_1 */ - 0x0F120100, /*0100//70000BC8//_yuvemix_mNegRanges_2 */ - 0x0F120010, /*0010//70000BCA//_yuvemix_mPosRanges_0 */ - 0x0F120060, /*0060//70000BCC//_yuvemix_mPosRanges_1 */ - 0x0F120100, /*0100//70000BCE//_yuvemix_mPosRanges_2 */ - 0x0F121430, /*1430//70000BD0//_bnr_edge_low */ - 0x0F120201, /*0201//70000BD2//_bnr_repl_force */ - 0x0F120204, /*0204//70000BD4//_bnr_iHotThreshLow */ - 0x0F121504, /*1504//70000BD6//_bnr_iColdThreshLow */ - 0x0F12030F, /*030F//70000BD8//_bnr_DispTH_High */ - 0x0F120003, /*0003//70000BDA//_bnr_DISP_Limit_High */ - 0x0F120902, /*0902//70000BDC//_bnr_iDistSigmaMax */ - 0x0F122004, /*2004//70000BDE//_bnr_iDiffSigmaHigh */ - 0x0F120050, /*0050//70000BE0//_bnr_iNormalizedSTD_Limit*/ - 0x0F121140, /*1140//70000BE2//_bnr_iDirMinThres */ - 0x0F12201C, /*201C//70000BE4//_bnr_iDirFltDiffThresLow */ - 0x0F120620, /*0620//70000BE6//_bnr_iDirSmoothPowerLow */ - 0x0F120306, /*0306//70000BE8//_bnr_iHighMaxSlopeAllowed*/ - 0x0F122003, /*2003//70000BEA//_bnr_iHighSlopeThresh */ - 0x0F12FF01, /*FF01//70000BEC//_bnr_iSlopeBlurStrength*/ - 0x0F120404, /*0404//70000BEE//_bnr_AddNoisePower1 */ - 0x0F120300, /*0300//70000BF0//_bnr_iRadialTune */ - 0x0F12145A, /*145A//70000BF2//_bnr_iRadialLimit */ - 0x0F121010, /*1010//70000BF4//_ee_iFSMagThHigh */ - 0x0F12000B, /*000B//70000BF6//_ee_iFSVarThHigh */ - 0x0F121000, /*1000//70000BF8//_ee_iFSThHigh */ - 0x0F125A0F, /*5A0F//70000BFA//_ee_iFSVarCountTh */ - 0x0F120503, /*0503//70000BFC//_ee_iRadialPower */ - 0x0F121802, /*1802//70000BFE//_ee_iROADThres */ - 0x0F120000, /*0000//70000C00//_ee_iROADSubMaxNR */ - 0x0F122006, /*2006//70000C02//_ee_iROADNeiThres */ - 0x0F123C28, /*3C28//70000C04//_ee_iSmoothEdgeThres */ - 0x0F12042C, /*042C//70000C06//_ee_iWSharpen */ - 0x0F120101, /*0101//70000C08//_ee_iWShThresh */ - 0x0F128000, /*FF00//70000C0A//_ee_iEmbossCentAdd */ - 0x0F120904, /*0904//70000C0C//_ee_iReduceEdgeThresh */ - 0x0F124008, /*4008//70000C0E//_dmsc_iDesatThresh */ - 0x0F120540, /*0540//70000C10//_dmsc_iDemBlurLow */ - 0x0F128006, /*8006//70000C12//_dmsc_iDecisionThresh */ - 0x0F120020, /*0020//70000C14//_dmsc_iMonochrom */ - 0x0F120000, /*0000//70000C16//_dmsc_iGRDenoiseVal */ - 0x0F121800, /*2000//70000C18//_dmsc_iEdgeDesatThrLow */ - 0x0F120000, /*0000//70000C1A//_dmsc_iNearGrayDesat */ - 0x0F121E10, /*1E10//70000C1C//_postdmsc_iBCoeff */ - 0x0F12000B, /*000B//70000C1E//_postdmsc_iWideMult */ - 0x0F120607, /*0607//70000C20//_yuvemix_mNegSlopes_1 */ - 0x0F120005, /*0005//70000C22//_yuvemix_mNegSlopes_3 */ - 0x0F120607, /*0607//70000C24//_yuvemix_mPosSlopes_1 */ - 0x0F120405, /*0405//70000C26//_yuvemix_mPosSlopes_3 */ - 0x0F120205, /*0206//70000C28//_yuviirnr_iXSupportUV */ - 0x0F120304, /*0304//70000C2A//_yuviirnr_iHighYNorm */ - 0x0F120409, /*0409//70000C2C//_yuviirnr_iHighUVNorm */ - 0x0F120306, /*0305//70000C2E//_yuviirnr_iUVNormShift */ - 0x0F120407, /*0406//70000C30//_yuviirnr_iVertLength_UV*/ - 0x0F122804, /*2804//70000C32//_yuviirnr_iDiffThreshH_Y*/ - 0x0F120228, /*0228//70000C34//_yuviirnr_iDiffThreshH_UV */ - 0x0F121402, /*1402//70000C36//_yuviirnr_iMaxThreshH_Y */ - 0x0F120618, /*0618//70000C38//_yuviirnr_iMaxThreshH_UV */ - 0x0F121A02, /*1A02//70000C3A//_yuviirnr_iYNRStrengthH */ - 0x0F128018, /*8018//70000C3C//_yuviirnr_iUVNRStrengthH*/ - 0x0F120080, /*0080//70000C3E//_RGBGamma2_iLinearity */ - 0x0F121080, /*0080//70000C40//_ccm_oscar_iSaturation */ - 0x0F120180, /*0180//70000C42//_RGB2YUV_iRGBGain */ - 0x0F120A0A, /*0A0A//70000C44//_bnr_iClustMulT_H */ - 0x0F120101, /*0101//70000C46//_bnr_iClustThresh_H */ - 0x0F121117, /*0F15//70000C48//_bnr_iDenThreshLow */ - 0x0F126024, /*6024//70000C4A//_ee_iLowSharpPower */ - 0x0F120A0A, /*0A0A//70000C4C//_ee_iLowShDenoise */ - 0x0F12FFFF, /*FFFF//70000C4E//_ee_iLowSharpClamp */ - 0x0F120808, /*0808//70000C50//_ee_iReduceEdgeMinMult */ - 0x0F120A01, /*0A01//70000C52//_bnr_nClustLevel_H_Bin */ - 0x0F12010A, /*010A//70000C54//_bnr_iClustMulT_C_Bin */ - 0x0F121501, /*0001//70000C56//_bnr_iClustThresh_C_Bin*/ - 0x0F12240F, /*2400//70000C58//_bnr_iDenThreshHigh_Bin*/ - 0x0F120A60, /*0260//70000C5A//_ee_iHighSharpPower_Bin*/ - 0x0F12FF0A, /*FF02//70000C5C//_ee_iHighShDenoise_Bin */ - 0x0F1208FF, /*40FF//70000C5E//_ee_iHighSharpClamp_Bin*/ - 0x0F120008, /*0009//70000C60//_ee_iReduceEdgeSlope_Bin */ - 0x0F120001, /*0001//70000C62//_bnr_nClustLevel_C */ - 0x0F120000, /*0000//70000C64//_BRIGHTNESS AFIT 4 */ - 0x0F120000, /*0000//70000C66//_CONTRAST */ - 0x0F120000, /*0000//70000C68//_SATURATION */ - 0x0F120000, /*0000//70000C6A//_SHARP_BLUR */ - 0x0F120000, /*0000//70000C6C//_GLAMOUR */ - 0x0F1200C0, /*00C0//70000C6E//_bnr_edge_high */ - 0x0F120064, /*0064//70000C70//_postdmsc_iLowBright */ - 0x0F120384, /*0384//70000C72//_postdmsc_iHighBright */ - 0x0F120032, /*0032//70000C74//_postdmsc_iLowSat */ - 0x0F1201F4, /*01F4//70000C76//_postdmsc_iHighSat */ - 0x0F120070, /*0070//70000C78//_postdmsc_iTune */ - 0x0F120040, /*0040//70000C7A//_yuvemix_mNegRanges_0 */ - 0x0F1200A0, /*00A0//70000C7C//_yuvemix_mNegRanges_1 */ - 0x0F120100, /*0100//70000C7E//_yuvemix_mNegRanges_2 */ - 0x0F120010, /*0010//70000C80//_yuvemix_mPosRanges_0 */ - 0x0F120060, /*0060//70000C82//_yuvemix_mPosRanges_1 */ - 0x0F120100, /*0100//70000C84//_yuvemix_mPosRanges_2 */ - 0x0F121430, /*1430//70000C86//_bnr_edge_low */ - 0x0F120201, /*0201//70000C88//_bnr_repl_force */ - 0x0F120204, /*0204//70000C8A//_bnr_iHotThreshLow */ - 0x0F120F04, /*0F04//70000C8C//_bnr_iColdThreshLow */ - 0x0F12030C, /*030C//70000C8E//_bnr_DispTH_High */ - 0x0F120003, /*0003//70000C90//_bnr_DISP_Limit_High */ - 0x0F120602, /*0602//70000C92//_bnr_iDistSigmaMax */ - 0x0F121803, /*1803//70000C94//_bnr_iDiffSigmaHigh */ - 0x0F120040, /*0040//70000C96//_bnr_iNormalizedSTD_Limit*/ - 0x0F120E20, /*0E20//70000C98//_bnr_iDirMinThres */ - 0x0F122018, /*2018//70000C9A//_bnr_iDirFltDiffThresLow */ - 0x0F120620, /*0620//70000C9C//_bnr_iDirSmoothPowerLow */ - 0x0F120306, /*0306//70000C9E//_bnr_iHighMaxSlopeAllowed*/ - 0x0F122003, /*2003//70000CA0//_bnr_iHighSlopeThresh */ - 0x0F12FF01, /*FF01//70000CA2//_bnr_iSlopeBlurStrength*/ - 0x0F120404, /*0404//70000CA4//_bnr_AddNoisePower1 */ - 0x0F120200, /*0200//70000CA6//_bnr_iRadialTune */ - 0x0F12145A, /*145A//70000CA8//_bnr_iRadialLimit */ - 0x0F121010, /*1010//70000CAA//_ee_iFSMagThHigh */ - 0x0F12000B, /*000B//70000CAC//_ee_iFSVarThHigh */ - 0x0F121200, /*1200//70000CAE//_ee_iFSThHigh */ - 0x0F125A0F, /*5A0F//70000CB0//_ee_iFSVarCountTh */ - 0x0F120502, /*0502//70000CB2//_ee_iRadialPower */ - 0x0F121802, /*1802//70000CB4//_ee_iROADThres */ - 0x0F120000, /*0000//70000CB6//_ee_iROADSubMaxNR */ - 0x0F122006, /*2006//70000CB8//_ee_iROADNeiThres */ - 0x0F124028, /*4028//70000CBA//_ee_iSmoothEdgeThres */ - 0x0F120430, /*0430//70000CBC//_ee_iWSharpen */ - 0x0F120101, /*0101//70000CBE//_ee_iWShThresh */ - 0x0F12FF00, /*FF00//70000CC0//_ee_iEmbossCentAdd */ - 0x0F120804, /*0804//70000CC2//_ee_iReduceEdgeThresh */ - 0x0F124008, /*4008//70000CC4//_dmsc_iDesatThresh */ - 0x0F120540, /*0540//70000CC6//_dmsc_iDemBlurLow */ - 0x0F128006, /*8006//70000CC8//_dmsc_iDecisionThresh */ - 0x0F120020, /*0020//70000CCA//_dmsc_iMonochrom */ - 0x0F120000, /*0000//70000CCC//_dmsc_iGRDenoiseVal */ - 0x0F121800, /*2000//70000CCE//_dmsc_iEdgeDesatThrLow */ - 0x0F120000, /*0000//70000CD0//_dmsc_iNearGrayDesat */ - 0x0F121E10, /*1E10//70000CD2//_postdmsc_iBCoeff */ - 0x0F12000B, /*000B//70000CD4//_postdmsc_iWideMult */ - 0x0F120607, /*0607//70000CD6//_yuvemix_mNegSlopes_1 */ - 0x0F120005, /*0005//70000CD8//_yuvemix_mNegSlopes_3 */ - 0x0F120607, /*0607//70000CDA//_yuvemix_mPosSlopes_1 */ - 0x0F120405, /*0405//70000CDC//_yuvemix_mPosSlopes_3 */ - 0x0F120205, /*0205//70000CDE//_yuviirnr_iXSupportUV */ - 0x0F120304, /*0304//70000CE0//_yuviirnr_iHighYNorm */ - 0x0F120409, /*0409//70000CE2//_yuviirnr_iHighUVNorm */ - 0x0F120306, /*0306//70000CE4//_yuviirnr_iUVNormShift */ - 0x0F120407, /*0407//70000CE6//_yuviirnr_iVertLength_UV*/ - 0x0F122C04, /*2C04//70000CE8//_yuviirnr_iDiffThreshH_Y*/ - 0x0F12022C, /*022C//70000CEA//_yuviirnr_iDiffThreshH_UV */ - 0x0F121402, /*1402//70000CEC//_yuviirnr_iMaxThreshH_Y */ - 0x0F120618, /*0618//70000CEE//_yuviirnr_iMaxThreshH_UV */ - 0x0F121A02, /*1A02//70000CF0//_yuviirnr_iYNRStrengthH */ - 0x0F128018, /*8018//70000CF2//_yuviirnr_iUVNRStrengthH */ - 0x0F120080, /*0080//70000CF4//_RGBGamma2_iLinearity */ - 0x0F121080, /*0080//70000CF6//_ccm_oscar_iSaturation */ - 0x0F120180, /*0180//70000CF8//_RGB2YUV_iRGBGain */ - 0x0F120A0A, /*0A0A//70000CFA//_bnr_iClustMulT_H */ - 0x0F120101, /*0101//70000CFC//_bnr_iClustThresh_H */ - 0x0F120C0F, /*0C0F//70000CFE//_bnr_iDenThreshLow */ - 0x0F126024, /*6024//70000D00//_ee_iLowSharpPower */ - 0x0F120808, /*0808//70000D02//_ee_iLowShDenoise */ - 0x0F12FFFF, /*FFFF//70000D04//_ee_iLowSharpClamp */ - 0x0F120808, /*0808//70000D06//_ee_iReduceEdgeMinMult */ - 0x0F120A01, /*0A01//70000D08//_bnr_nClustLevel_H_Bin */ - 0x0F12010A, /*010A//70000D0A//_bnr_iClustMulT_C_Bin */ - 0x0F120F01, /*0001//70000D0C//_bnr_iClustThresh_C_Bin*/ - 0x0F12240C, /*2400//70000D0E//_bnr_iDenThreshHigh_Bin*/ - 0x0F120860, /*0060//70000D10//_ee_iHighSharpPower_Bin*/ - 0x0F12FF08, /*FF00//70000D12//_ee_iHighShDenoise_Bin */ - 0x0F1208FF, /*40FF//70000D14//_ee_iHighSharpClamp_Bin*/ - 0x0F120008, /*0009//70000D16//_ee_iReduceEdgeSlope_Bin */ - 0x0F120001, /*0001//70000D18//_bnr_nClustLevel_C */ - 0x002A0266, - 0x0F120000, /*REG_TC_GP_ActivePrevConfig */ - 0x002A026A, - 0x0F120001, /*REG_TC_GP_PrevOpenAfterChange */ - 0x002A024E, - 0x0F120001, /*REG_TC_GP_NewConfigSync */ - 0x002A0268, - 0x0F120001, /*REG_TC_GP_PrevConfigChanged */ - -}; - -static const u32 s5k4ecgx_1280_Preview_Disable_EVT1[] = {/*1280x720 */ - /* 720P disable setting */ - 0xFCFCD000, - 0x00287000, - 0x002A18AC, - 0x0F120060, /*senHal_uAddColsBin */ - 0x0F120060, /*senHal_uAddColsNoBin */ - 0x0F1205C0, /*senHal_uMinColsBin */ - 0x0F1205C0, /*senHal_uMinColsNoBin */ - - /* Size */ - 0x002A0250, - 0x0F120A00, /*REG_TC_GP_PrevReqInputWidth //2560 */ - 0x0F120780, /*REG_TC_GP_PrevReqInputHeight //1920 */ - 0x0F120010, /*REG_TC_GP_PrevInputWidthOfs/(2592-2560)/2*/ - 0x0F12000C, /*REG_TC_GP_PrevInputHeightOfs/(1944-1920)/2*/ - 0x002A0262, - 0x0F120001, /*REG_TC_GP_bUseReqInputInPre */ - 0x002A0494, - 0x0F120A00, /*REG_TC_PZOOM_PrevZoomReqInputWidth //2560 */ - 0x0F120780, /*REG_TC_PZOOM_PrevZoomReqInputHeight //1920 */ - 0x0F120000, /*REG_TC_PZOOM_PrevZoomReqInputWidthOfs */ - 0x0F120000, /*REG_TC_PZOOM_PrevZoomReqInputHeightOfs */ - 0x002A02A6, - 0x0F120280, /*REG_0TC_PCFG_usWidth //640 */ - 0x0F1201E0, /*REG_0TC_PCFG_usHeight //480 */ - - /* Frame Rate */ - 0x002A02BE, - 0x0F120000, /*REG_0TC_PCFG_usFrTimeType*/ - 0x0F120001, /*REG_0TC_PCFG_FrRateQualityType */ - 0x0F1203E8, /*029A/REG_0TC_PCFG_usMaxFrTimeMsecMult10/029Ah:15fps*/ - 0x0F12014A, /*REG_0TC_PCFG_usMinFrTimeMsecMult10/014Ah:30fps*/ - - /* AE Target */ - 0x002A1484, - 0x0F12003C, /*TVAR_ae_BrAve */ - - /* AE Weight Matrix */ - 0x002A1492, - 0x0F120100, - 0x0F120101, - 0x0F120101, - 0x0F120001, - 0x0F120101, - 0x0F120201, - 0x0F120102, - 0x0F120101, - 0x0F120101, - 0x0F120202, - 0x0F120202, - 0x0F120101, - 0x0F120201, - 0x0F120302, - 0x0F120203, - 0x0F120102, - 0x0F120201, - 0x0F120302, - 0x0F120203, - 0x0F120102, - 0x0F120101, - 0x0F120202, - 0x0F120202, - 0x0F120101, - 0x0F120101, - 0x0F120201, - 0x0F120102, - 0x0F120101, - 0x0F120101, - 0x0F120101, - 0x0F120101, - 0x0F120101, - - /* Slow AE */ - 0x002A1568, - 0x0F120010, /*ae_GainIn_0_ */ - 0x0F120020, /*ae_GainIn_1_ */ - 0x0F120040, /*ae_GainIn_2_ */ - 0x0F120080, /*ae_GainIn_3_ */ - 0x0F120100, /*ae_GainIn_4_ FIX */ - 0x0F120200, /*ae_GainIn_5_ */ - 0x0F120400, /*ae_GainIn_6_ */ - 0x0F120800, /*ae_GainIn_7_ */ - 0x0F120800, /*ae_GainIn_8_ */ - 0x0F120010, /*ae_GainOut_0_ */ - 0x0F120020, /*ae_GainOut_1_ */ - 0x0F120040, /*ae_GainOut_2_ */ - 0x0F120080, /*ae_GainOut_3_ */ - 0x0F120100, /*ae_GainOut_4_ FIX */ - 0x0F120200, /*ae_GainOut_5_ */ - 0x0F120400, /*ae_GainOut_6_ */ - 0x0F120800, /*ae_GainOut_7_ */ - 0x0F122000, /*ae_GainOut_8_ */ - 0x002A0544, - 0x0F120111, /*lt_uLimitHigh */ - 0x0F1200EF, /*lt_uLimitLow */ - 0x002A0588, - 0x0F120000, /*lt_uInitPostToleranceCnt */ - 0x002A0582, - 0x0F120000, /*lt_uSlowFilterCoef */ - 0x002A0734, /*R*/ - 0x0F120000, - 0x0F120001, - 0x0F120006, - 0x0F120017, - 0x0F12004A, - 0x0F1200C9, - 0x0F120138, - 0x0F120163, - 0x0F120189, - 0x0F1201C6, - 0x0F1201F8, - 0x0F120222, - 0x0F120247, - 0x0F120282, - 0x0F1202B5, - 0x0F12030F, - 0x0F12035F, - 0x0F1203A2, - 0x0F1203D8, - 0x0F1203FF, - 0x0F120000, /*G*/ - 0x0F120001, - 0x0F120006, - 0x0F120017, - 0x0F12004A, - 0x0F1200C9, - 0x0F120138, - 0x0F120163, - 0x0F120189, - 0x0F1201C6, - 0x0F1201F8, - 0x0F120222, - 0x0F120247, - 0x0F120282, - 0x0F1202B5, - 0x0F12030F, - 0x0F12035F, - 0x0F1203A2, - 0x0F1203D8, - 0x0F1203FF, - 0x0F120000, /*B*/ - 0x0F120001, - 0x0F120006, - 0x0F120017, - 0x0F12004A, - 0x0F1200C9, - 0x0F120138, - 0x0F120163, - 0x0F120189, - 0x0F1201C6, - 0x0F1201F8, - 0x0F120222, - 0x0F120247, - 0x0F120282, - 0x0F1202B5, - 0x0F12030F, - 0x0F12035F, - 0x0F1203A2, - 0x0F1203D8, - 0x0F1203FF, - - /* Slow AWB */ - 0x002A139A, - 0x0F120258, /*awbb_GainsMaxMove */ - - /* AWB Convergence Speed */ - 0x002A1464, - 0x0F120008, /*awbb_WpFilterMinThr */ - 0x0F120190, /*awbb_WpFilterMaxThr */ - 0x0F1200A0, /*awbb_WpFilterCoef */ - 0x0F120004, /*awbb_WpFilterSize */ - 0x002A0938, - 0x0F120000, /* on/off AFIT by NB option */ - 0x0F120014, /*SARR_uNormBrInDoor */ - 0x0F1200D2, /*SARR_uNormBrInDoor */ - 0x0F120384, /*SARR_uNormBrInDoor */ - 0x0F1207D0, /*SARR_uNormBrInDoor */ - 0x0F121388, /*SARR_uNormBrInDoor */ - 0x002A098C, - 0x0F120000, /*7000098C//_BRIGHTNESS AFIT 0 */ - 0x0F120000, /*7000098E//_CONTRAST */ - 0x0F120000, /*70000990//_SATURATION */ - 0x0F120000, /*70000992//_SHARP_BLUR */ - 0x0F120000, /*70000994//_GLAMOUR */ - 0x0F1200C0, /*70000996//_bnr_edge_high */ - 0x0F120064, /*70000998//_postdmsc_iLowBright */ - 0x0F120384, /*7000099A//_postdmsc_iHighBright */ - 0x0F12005F, /*7000099C//_postdmsc_iLowSat */ - 0x0F1201F4, /*7000099E//_postdmsc_iHighSat */ - 0x0F120070, /*700009A0//_postdmsc_iTune */ - 0x0F120040, /*700009A2//_yuvemix_mNegRanges_0 */ - 0x0F1200A0, /*700009A4//_yuvemix_mNegRanges_1 */ - 0x0F120100, /*700009A6//_yuvemix_mNegRanges_2 */ - 0x0F120010, /*700009A8//_yuvemix_mPosRanges_0 */ - 0x0F120040, /*700009AA//_yuvemix_mPosRanges_1 */ - 0x0F1200A0, /*700009AC//_yuvemix_mPosRanges_2 */ - 0x0F121430, /*700009AE//_bnr_edge_low */ - 0x0F120201, /*700009B0//_bnr_repl_force */ - 0x0F120204, /*700009B2//_bnr_iHotThreshLow */ - 0x0F123604, /*700009B4//_bnr_iColdThreshLow */ - 0x0F12032A, /*700009B6//_bnr_DispTH_High */ - 0x0F120403, /*700009B8//_bnr_DISP_Limit_High */ - 0x0F121B06, /*700009BA//_bnr_iDistSigmaMax */ - 0x0F126015, /*700009BC//_bnr_iDiffSigmaHigh */ - 0x0F1200C0, /*700009BE//_bnr_iNormalizedSTD_Limit */ - 0x0F126080, /*700009C0//_bnr_iDirMinThres */ - 0x0F124080, /*700009C2//_bnr_iDirFltDiffThresLow */ - 0x0F120640, /*700009C4//_bnr_iDirSmoothPowerLow */ - 0x0F120306, /*700009C6//_bnr_iHighMaxSlopeAllowed */ - 0x0F122003, /*700009C8//_bnr_iHighSlopeThresh */ - 0x0F12FF01, /*700009CA//_bnr_iSlopeBlurStrength */ - 0x0F120000, /*700009CC//_bnr_AddNoisePower1 */ - 0x0F120400, /*700009CE//_bnr_iRadialTune */ - 0x0F12365A, /*700009D0//_bnr_iRadialLimit */ - 0x0F12102A, /*700009D2//_ee_iFSMagThHigh */ - 0x0F12000B, /*700009D4//_ee_iFSVarThHigh */ - 0x0F120600, /*700009D6//_ee_iFSThHigh */ - 0x0F125A0F, /*700009D8//_ee_iFSVarCountTh */ - 0x0F120505, /*700009DA//_ee_iRadialPower */ - 0x0F121802, /*700009DC//_ee_iROADThres */ - 0x0F120000, /*700009DE//_ee_iROADSubMaxNR */ - 0x0F122006, /*700009E0//_ee_iROADNeiThres */ - 0x0F123028, /*700009E2//_ee_iSmoothEdgeThres */ - 0x0F120418, /*700009E4//_ee_iWSharpen */ - 0x0F120101, /*700009E6//_ee_iWShThresh */ - 0x0F120800, /*700009E8//_ee_iEmbossCentAdd */ - 0x0F121804, /*700009EA//_ee_iReduceEdgeThresh */ - 0x0F124008, /*700009EC//_dmsc_iDesatThresh */ - 0x0F120540, /*700009EE//_dmsc_iDemBlurLow */ - 0x0F128006, /*700009F0//_dmsc_iDecisionThresh */ - 0x0F120020, /*700009F2//_dmsc_iMonochrom */ - 0x0F120000, /*700009F4//_dmsc_iGRDenoiseVal */ - 0x0F122000, /*700009F6//_dmsc_iEdgeDesatThrLow */ - 0x0F120000, /*700009F8//_dmsc_iNearGrayDesat */ - 0x0F121E10, /*700009FA//_postdmsc_iBCoeff */ - 0x0F12000B, /*700009FC//_postdmsc_iWideMult */ - 0x0F120607, /*700009FE//_yuvemix_mNegSlopes_1 */ - 0x0F120005, /*70000A00//_yuvemix_mNegSlopes_3 */ - 0x0F120607, /*70000A02//_yuvemix_mPosSlopes_1 */ - 0x0F120705, /*70000A04//_yuvemix_mPosSlopes_3 */ - 0x0F120206, /*70000A06//_yuviirnr_iXSupportUV */ - 0x0F120304, /*70000A08//_yuviirnr_iHighYNorm */ - 0x0F120309, /*70000A0A//_yuviirnr_iHighUVNorm */ - 0x0F120305, /*70000A0C//_yuviirnr_iUVNormShift */ - 0x0F122006, /*70000A0E//_yuviirnr_iVertLength_UV */ - 0x0F121320, /*70000A10//_yuviirnr_iDiffThreshH_Y */ - 0x0F121014, /*70000A12//_yuviirnr_iDiffThreshH_UV */ - 0x0F121010, /*70000A14//_yuviirnr_iMaxThreshH_Y */ - 0x0F120C10, /*70000A16//_yuviirnr_iMaxThreshH_UV */ - 0x0F121A0C, /*70000A18//_yuviirnr_iYNRStrengthH */ - 0x0F124A18, /*70000A1A//_yuviirnr_iUVNRStrengthH */ - 0x0F120080, /*70000A1C//_RGBGamma2_iLinearity */ - 0x0F120350, /*70000A1E//_ccm_oscar_iSaturation */ - 0x0F120180, /*70000A20//_RGB2YUV_iRGBGain */ - 0x0F120A0A, /*70000A22//_bnr_iClustMulT_H */ - 0x0F120101, /*70000A24//_bnr_iClustThresh_H */ - 0x0F122A36, /*70000A26//_bnr_iDenThreshLow */ - 0x0F126024, /*70000A28//_ee_iLowSharpPower */ - 0x0F122A36, /*70000A2A//_ee_iLowShDenoise */ - 0x0F12FFFF, /*70000A2C//_ee_iLowSharpClamp */ - 0x0F120808, /*70000A2E//_ee_iReduceEdgeMinMult */ - 0x0F120A01, /*70000A30//_bnr_nClustLevel_H_Bin */ - 0x0F12010A, /*70000A32//_bnr_iClustMulT_C_Bin */ - 0x0F122701, /*70000A34//_bnr_iClustThresh_C_Bin */ - 0x0F12241E, /*70000A36//_bnr_iDenThreshHigh_Bin */ - 0x0F122E60, /*70000A38//_ee_iHighSharpPower_Bin */ - 0x0F12FF22, /*70000A3A//_ee_iHighShDenoise_Bin */ - 0x0F1240FF, /*70000A3C//_ee_iHighSharpClamp_Bin */ - 0x0F120009, /*70000A3E//_ee_iReduceEdgeSlope_Bin */ - 0x0F120001, /*70000A40//_bnr_nClustLevel_C */ - 0x0F120000, /*70000A42//_BRIGHTNESS AFIT 1 */ - 0x0F120000, /*70000A44//_CONTRAST */ - 0x0F120000, /*70000A46//_SATURATION */ - 0x0F120000, /*70000A48//_SHARP_BLUR */ - 0x0F120000, /*70000A4A//_GLAMOUR */ - 0x0F1200C0, /*70000A4C//_bnr_edge_high */ - 0x0F120064, /*70000A4E//_postdmsc_iLowBright */ - 0x0F120384, /*70000A50//_postdmsc_iHighBright */ - 0x0F120051, /*70000A52//_postdmsc_iLowSat */ - 0x0F1201F4, /*70000A54//_postdmsc_iHighSat */ - 0x0F120070, /*70000A56//_postdmsc_iTune */ - 0x0F120040, /*70000A58//_yuvemix_mNegRanges_0 */ - 0x0F1200A0, /*70000A5A//_yuvemix_mNegRanges_1 */ - 0x0F120100, /*70000A5C//_yuvemix_mNegRanges_2 */ - 0x0F120010, /*70000A5E//_yuvemix_mPosRanges_0 */ - 0x0F120060, /*70000A60//_yuvemix_mPosRanges_1 */ - 0x0F120100, /*70000A62//_yuvemix_mPosRanges_2 */ - 0x0F121430, /*70000A64//_bnr_edge_low */ - 0x0F120201, /*70000A66//_bnr_repl_force */ - 0x0F120204, /*70000A68//_bnr_iHotThreshLow */ - 0x0F122404, /*70000A6A//_bnr_iColdThreshLow */ - 0x0F12031B, /*70000A6C//_bnr_DispTH_High */ - 0x0F120103, /*70000A6E//_bnr_DISP_Limit_High */ - 0x0F121205, /*70000A70//_bnr_iDistSigmaMax */ - 0x0F12400D, /*70000A72//_bnr_iDiffSigmaHigh */ - 0x0F120080, /*70000A74//_bnr_iNormalizedSTD_Limit */ - 0x0F121980, /*70000A76//_bnr_iDirMinThres */ - 0x0F12272E, /*70000A78//_bnr_iDirFltDiffThresLow */ - 0x0F120629, /*70000A7A//_bnr_iDirSmoothPowerLow */ - 0x0F120306, /*70000A7C//_bnr_iHighMaxSlopeAllowed */ - 0x0F122003, /*70000A7E//_bnr_iHighSlopeThresh */ - 0x0F12FF01, /*70000A80//_bnr_iSlopeBlurStrength */ - 0x0F120404, /*70000A82//_bnr_AddNoisePower1 */ - 0x0F120300, /*70000A84//_bnr_iRadialTune */ - 0x0F12245A, /*70000A86//_bnr_iRadialLimit */ - 0x0F121018, /*70000A88//_ee_iFSMagThHigh */ - 0x0F12000B, /*70000A8A//_ee_iFSVarThHigh */ - 0x0F120B00, /*70000A8C//_ee_iFSThHigh */ - 0x0F125A0F, /*70000A8E//_ee_iFSVarCountTh */ - 0x0F120505, /*70000A90//_ee_iRadialPower */ - 0x0F121802, /*70000A92//_ee_iROADThres */ - 0x0F120000, /*70000A94//_ee_iROADSubMaxNR */ - 0x0F122006, /*70000A96//_ee_iROADNeiThres */ - 0x0F123828, /*70000A98//_ee_iSmoothEdgeThres */ - 0x0F120425, /*70000A9A//_ee_iWSharpen */ - 0x0F120101, /*70000A9C//_ee_iWShThresh */ - 0x0F120800, /*70000A9E//_ee_iEmbossCentAdd */ - 0x0F121004, /*70000AA0//_ee_iReduceEdgeThresh */ - 0x0F124008, /*70000AA2//_dmsc_iDesatThresh */ - 0x0F120540, /*70000AA4//_dmsc_iDemBlurLow */ - 0x0F128006, /*70000AA6//_dmsc_iDecisionThresh */ - 0x0F120020, /*70000AA8//_dmsc_iMonochrom */ - 0x0F120000, /*70000AAA//_dmsc_iGRDenoiseVal */ - 0x0F122000, /*70000AAC//_dmsc_iEdgeDesatThrLow */ - 0x0F120000, /*70000AAE//_dmsc_iNearGrayDesat */ - 0x0F121E10, /*70000AB0//_postdmsc_iBCoeff */ - 0x0F12000B, /*70000AB2//_postdmsc_iWideMult */ - 0x0F120607, /*70000AB4//_yuvemix_mNegSlopes_1 */ - 0x0F120005, /*70000AB6//_yuvemix_mNegSlopes_3 */ - 0x0F120607, /*70000AB8//_yuvemix_mPosSlopes_1 */ - 0x0F120405, /*70000ABA//_yuvemix_mPosSlopes_3 */ - 0x0F120205, /*70000ABC//_yuviirnr_iXSupportUV */ - 0x0F120304, /*70000ABE//_yuviirnr_iHighYNorm */ - 0x0F120409, /*70000AC0//_yuviirnr_iHighUVNorm */ - 0x0F120306, /*70000AC2//_yuviirnr_iUVNormShift */ - 0x0F120407, /*70000AC4//_yuviirnr_iVertLength_UV */ - 0x0F122204, /*70000AC6//_yuviirnr_iDiffThreshH_Y */ - 0x0F12021C, /*70000AC8//_yuviirnr_iDiffThreshH_UV */ - 0x0F121102, /*70000ACA//_yuviirnr_iMaxThreshH_Y */ - 0x0F120611, /*70000ACC//_yuviirnr_iMaxThreshH_UV */ - 0x0F121A02, /*70000ACE//_yuviirnr_iYNRStrengthH */ - 0x0F128018, /*70000AD0//_yuviirnr_iUVNRStrengthH */ - 0x0F120080, /*70000AD2//_RGBGamma2_iLinearity */ - 0x0F120374, /*70000AD4//_ccm_oscar_iSaturation */ - 0x0F120180, /*70000AD6//_RGB2YUV_iRGBGain */ - 0x0F120A0A, /*70000AD8//_bnr_iClustMulT_H */ - 0x0F120101, /*70000ADA//_bnr_iClustThresh_H */ - 0x0F12141D, /*70000ADC//_bnr_iDenThreshLow */ - 0x0F126024, /*70000ADE//_ee_iLowSharpPower */ - 0x0F121217, /*70000AE0//_ee_iLowShDenoise */ - 0x0F12FFFF, /*70000AE2//_ee_iLowSharpClamp */ - 0x0F120808, /*70000AE4//_ee_iReduceEdgeMinMult */ - 0x0F120A01, /*70000AE6//_bnr_nClustLevel_H_Bin */ - 0x0F12010A, /*70000AE8//_bnr_iClustMulT_C_Bin */ - 0x0F120001, /*70000AEA//_bnr_iClustThresh_C_Bin */ - 0x0F122400, /*70000AEC//_bnr_iDenThreshHigh_Bin */ - 0x0F121660, /*70000AEE//_ee_iHighSharpPower_Bin */ - 0x0F12FF10, /*70000AF0//_ee_iHighShDenoise_Bin */ - 0x0F1240FF, /*70000AF2//_ee_iHighSharpClamp_Bin */ - 0x0F120009, /*70000AF4//_ee_iReduceEdgeSlope_Bin */ - 0x0F120001, /*70000AF6//_bnr_nClustLevel_C */ - 0x0F120000, /*70000AF8//_BRIGHTNESS AFIT 2 */ - 0x0F120000, /*70000AFA//_CONTRAST */ - 0x0F120000, /*70000AFC//_SATURATION */ - 0x0F120000, /*70000AFE//_SHARP_BLUR */ - 0x0F120000, /*70000B00//_GLAMOUR */ - 0x0F1200C0, /*70000B02//_bnr_edge_high */ - 0x0F120064, /*70000B04//_postdmsc_iLowBright */ - 0x0F120384, /*70000B06//_postdmsc_iHighBright */ - 0x0F120043, /*70000B08//_postdmsc_iLowSat */ - 0x0F1201F4, /*70000B0A//_postdmsc_iHighSat */ - 0x0F120070, /*70000B0C//_postdmsc_iTune */ - 0x0F120040, /*70000B0E//_yuvemix_mNegRanges_0 */ - 0x0F1200A0, /*70000B10//_yuvemix_mNegRanges_1 */ - 0x0F120100, /*70000B12//_yuvemix_mNegRanges_2 */ - 0x0F120010, /*70000B14//_yuvemix_mPosRanges_0 */ - 0x0F120060, /*70000B16//_yuvemix_mPosRanges_1 */ - 0x0F120100, /*70000B18//_yuvemix_mPosRanges_2 */ - 0x0F121430, /*70000B1A//_bnr_edge_low */ - 0x0F120201, /*70000B1C//_bnr_repl_force */ - 0x0F120204, /*70000B1E//_bnr_iHotThreshLow */ - 0x0F121B04, /*70000B20//_bnr_iColdThreshLow */ - 0x0F120312, /*70000B22//_bnr_DispTH_High */ - 0x0F120003, /*70000B24//_bnr_DISP_Limit_High */ - 0x0F120C03, /*70000B26//_bnr_iDistSigmaMax */ - 0x0F122806, /*70000B28//_bnr_iDiffSigmaHigh */ - 0x0F120060, /*70000B2A//_bnr_iNormalizedSTD_Limit */ - 0x0F121580, /*70000B2C//_bnr_iDirMinThres */ - 0x0F122020, /*70000B2E//_bnr_iDirFltDiffThresLow */ - 0x0F120620, /*70000B30//_bnr_iDirSmoothPowerLow */ - 0x0F120306, /*70000B32//_bnr_iHighMaxSlopeAllowed */ - 0x0F122003, /*70000B34//_bnr_iHighSlopeThresh */ - 0x0F12FF01, /*70000B36//_bnr_iSlopeBlurStrength */ - 0x0F120404, /*70000B38//_bnr_AddNoisePower1 */ - 0x0F120300, /*70000B3A//_bnr_iRadialTune */ - 0x0F12145A, /*70000B3C//_bnr_iRadialLimit */ - 0x0F121010, /*70000B3E//_ee_iFSMagThHigh */ - 0x0F12000B, /*70000B40//_ee_iFSVarThHigh */ - 0x0F120E00, /*70000B42//_ee_iFSThHigh */ - 0x0F125A0F, /*70000B44//_ee_iFSVarCountTh */ - 0x0F120504, /*70000B46//_ee_iRadialPower */ - 0x0F121802, /*70000B48//_ee_iROADThres */ - 0x0F120000, /*70000B4A//_ee_iROADSubMaxNR */ - 0x0F122006, /*70000B4C//_ee_iROADNeiThres */ - 0x0F123828, /*70000B4E//_ee_iSmoothEdgeThres */ - 0x0F120428, /*70000B50//_ee_iWSharpen */ - 0x0F120101, /*70000B52//_ee_iWShThresh */ - 0x0F128000, /*70000B54//_ee_iEmbossCentAdd */ - 0x0F120A04, /*70000B56//_ee_iReduceEdgeThresh */ - 0x0F124008, /*70000B58//_dmsc_iDesatThresh */ - 0x0F120540, /*70000B5A//_dmsc_iDemBlurLow */ - 0x0F128006, /*70000B5C//_dmsc_iDecisionThresh */ - 0x0F120020, /*70000B5E//_dmsc_iMonochrom */ - 0x0F120000, /*70000B60//_dmsc_iGRDenoiseVal */ - 0x0F122000, /*70000B62//_dmsc_iEdgeDesatThrLow */ - 0x0F120000, /*70000B64//_dmsc_iNearGrayDesat */ - 0x0F121E10, /*70000B66//_postdmsc_iBCoeff */ - 0x0F12000B, /*70000B68//_postdmsc_iWideMult */ - 0x0F120607, /*70000B6A//_yuvemix_mNegSlopes_1 */ - 0x0F120005, /*70000B6C//_yuvemix_mNegSlopes_3 */ - 0x0F120607, /*70000B6E//_yuvemix_mPosSlopes_1 */ - 0x0F120405, /*70000B70//_yuvemix_mPosSlopes_3 */ - 0x0F120207, /*70000B72//_yuviirnr_iXSupportUV */ - 0x0F120304, /*70000B74//_yuviirnr_iHighYNorm */ - 0x0F120409, /*70000B76//_yuviirnr_iHighUVNorm */ - 0x0F120306, /*70000B78//_yuviirnr_iUVNormShift */ - 0x0F120407, /*70000B7A//_yuviirnr_iVertLength_UV */ - 0x0F122404, /*70000B7C//_yuviirnr_iDiffThreshH_Y */ - 0x0F120221, /*70000B7E//_yuviirnr_iDiffThreshH_UV */ - 0x0F121202, /*70000B80//_yuviirnr_iMaxThreshH_Y*/ - 0x0F120613, /*70000B82//_yuviirnr_iMaxThreshH_UV */ - 0x0F121A02, /*70000B84//_yuviirnr_iYNRStrengthH */ - 0x0F128018, /*70000B86//_yuviirnr_iUVNRStrengthH */ - 0x0F120080, /*70000B88//_RGBGamma2_iLinearity */ - 0x0F120080, /*70000B8A//_ccm_oscar_iSaturation */ - 0x0F120180, /*70000B8C//_RGB2YUV_iRGBGain */ - 0x0F120A0A, /*70000B8E//_bnr_iClustMulT_H */ - 0x0F120101, /*70000B90//_bnr_iClustThresh_H */ - 0x0F12121B, /*70000B92//_bnr_iDenThreshLow */ - 0x0F126024, /*70000B94//_ee_iLowSharpPower */ - 0x0F120C0C, /*70000B96//_ee_iLowShDenoise */ - 0x0F12FFFF, /*70000B98//_ee_iLowSharpClamp */ - 0x0F120808, /*70000B9A//_ee_iReduceEdgeMinMult */ - 0x0F120A01, /*70000B9C//_bnr_nClustLevel_H_Bin */ - 0x0F12010A, /*70000B9E//_bnr_iClustMulT_C_Bin */ - 0x0F120001, /*70000BA0//_bnr_iClustThresh_C_Bin */ - 0x0F122400, /*70000BA2//_bnr_iDenThreshHigh_Bin */ - 0x0F120460, /*70000BA4//_ee_iHighSharpPower_Bin */ - 0x0F12FF04, /*70000BA6//_ee_iHighShDenoise_Bin */ - 0x0F1240FF, /*70000BA8//_ee_iHighSharpClamp_Bin */ - 0x0F120009, /*70000BAA//_ee_iReduceEdgeSlope_Bin */ - 0x0F120001, /*70000BAC//_bnr_nClustLevel_C */ - 0x0F120000, /*70000BAE//_BRIGHTNESS AFIT 3 */ - 0x0F120000, /*70000BB0//_CONTRAST */ - 0x0F120000, /*70000BB2//_SATURATION */ - 0x0F120000, /*70000BB4//_SHARP_BLUR */ - 0x0F120000, /*70000BB6//_GLAMOUR */ - 0x0F1200C0, /*70000BB8//_bnr_edge_high */ - 0x0F120064, /*70000BBA//_postdmsc_iLowBright */ - 0x0F120384, /*70000BBC//_postdmsc_iHighBright */ - 0x0F120032, /*70000BBE//_postdmsc_iLowSat */ - 0x0F1201F4, /*70000BC0//_postdmsc_iHighSat */ - 0x0F120070, /*70000BC2//_postdmsc_iTune */ - 0x0F120040, /*70000BC4//_yuvemix_mNegRanges_0 */ - 0x0F1200A0, /*70000BC6//_yuvemix_mNegRanges_1 */ - 0x0F120100, /*70000BC8//_yuvemix_mNegRanges_2 */ - 0x0F120010, /*70000BCA//_yuvemix_mPosRanges_0 */ - 0x0F120060, /*70000BCC//_yuvemix_mPosRanges_1 */ - 0x0F120100, /*70000BCE//_yuvemix_mPosRanges_2 */ - 0x0F121430, /*70000BD0//_bnr_edge_low */ - 0x0F120201, /*70000BD2//_bnr_repl_force */ - 0x0F120204, /*70000BD4//_bnr_iHotThreshLow */ - 0x0F121504, /*70000BD6//_bnr_iColdThreshLow */ - 0x0F12030F, /*70000BD8//_bnr_DispTH_High */ - 0x0F120003, /*70000BDA//_bnr_DISP_Limit_High */ - 0x0F120902, /*70000BDC//_bnr_iDistSigmaMax */ - 0x0F122004, /*70000BDE//_bnr_iDiffSigmaHigh */ - 0x0F120050, /*70000BE0//_bnr_iNormalizedSTD_Limit */ - 0x0F121140, /*70000BE2//_bnr_iDirMinThres */ - 0x0F12201C, /*70000BE4//_bnr_iDirFltDiffThresLow */ - 0x0F120620, /*70000BE6//_bnr_iDirSmoothPowerLow */ - 0x0F120306, /*70000BE8//_bnr_iHighMaxSlopeAllowed */ - 0x0F122003, /*70000BEA//_bnr_iHighSlopeThresh */ - 0x0F12FF01, /*70000BEC//_bnr_iSlopeBlurStrength */ - 0x0F120404, /*70000BEE//_bnr_AddNoisePower1 */ - 0x0F120300, /*70000BF0//_bnr_iRadialTune */ - 0x0F12145A, /*70000BF2//_bnr_iRadialLimit */ - 0x0F121010, /*70000BF4//_ee_iFSMagThHigh */ - 0x0F12000B, /*70000BF6//_ee_iFSVarThHigh */ - 0x0F121000, /*70000BF8//_ee_iFSThHigh */ - 0x0F125A0F, /*70000BFA//_ee_iFSVarCountTh */ - 0x0F120503, /*70000BFC//_ee_iRadialPower */ - 0x0F121802, /*70000BFE//_ee_iROADThres */ - 0x0F120000, /*70000C00//_ee_iROADSubMaxNR */ - 0x0F122006, /*70000C02//_ee_iROADNeiThres */ - 0x0F123C28, /*70000C04//_ee_iSmoothEdgeThres */ - 0x0F12042C, /*70000C06//_ee_iWSharpen */ - 0x0F120101, /*70000C08//_ee_iWShThresh */ - 0x0F12FF00, /*70000C0A//_ee_iEmbossCentAdd */ - 0x0F120904, /*70000C0C//_ee_iReduceEdgeThresh */ - 0x0F124008, /*70000C0E//_dmsc_iDesatThresh */ - 0x0F120540, /*70000C10//_dmsc_iDemBlurLow */ - 0x0F128006, /*70000C12//_dmsc_iDecisionThresh */ - 0x0F120020, /*70000C14//_dmsc_iMonochrom */ - 0x0F120000, /*70000C16//_dmsc_iGRDenoiseVal */ - 0x0F122000, /*70000C18//_dmsc_iEdgeDesatThrLow */ - 0x0F120000, /*70000C1A//_dmsc_iNearGrayDesat */ - 0x0F121E10, /*70000C1C//_postdmsc_iBCoeff */ - 0x0F12000B, /*70000C1E//_postdmsc_iWideMult */ - 0x0F120607, /*70000C20//_yuvemix_mNegSlopes_1 */ - 0x0F120005, /*70000C22//_yuvemix_mNegSlopes_3 */ - 0x0F120607, /*70000C24//_yuvemix_mPosSlopes_1 */ - 0x0F120405, /*70000C26//_yuvemix_mPosSlopes_3 */ - 0x0F120206, /*70000C28//_yuviirnr_iXSupportUV */ - 0x0F120304, /*70000C2A//_yuviirnr_iHighYNorm */ - 0x0F120409, /*70000C2C//_yuviirnr_iHighUVNorm */ - 0x0F120305, /*70000C2E//_yuviirnr_iUVNormShift */ - 0x0F120406, /*70000C30//_yuviirnr_iVertLength_UV */ - 0x0F122804, /*70000C32//_yuviirnr_iDiffThreshH_Y */ - 0x0F120228, /*70000C34//_yuviirnr_iDiffThreshH_UV */ - 0x0F121402, /*70000C36//_yuviirnr_iMaxThreshH_Y */ - 0x0F120618, /*70000C38//_yuviirnr_iMaxThreshH_UV */ - 0x0F121A02, /*70000C3A//_yuviirnr_iYNRStrengthH */ - 0x0F128018, /*70000C3C//_yuviirnr_iUVNRStrengthH */ - 0x0F120080, /*70000C3E//_RGBGamma2_iLinearity */ - 0x0F120080, /*70000C40//_ccm_oscar_iSaturation */ - 0x0F120180, /*70000C42//_RGB2YUV_iRGBGain */ - 0x0F120A0A, /*70000C44//_bnr_iClustMulT_H */ - 0x0F120101, /*70000C46//_bnr_iClustThresh_H */ - 0x0F120F15, /*70000C48//_bnr_iDenThreshLow */ - 0x0F126024, /*70000C4A//_ee_iLowSharpPower */ - 0x0F120A0A, /*70000C4C//_ee_iLowShDenoise */ - 0x0F12FFFF, /*70000C4E//_ee_iLowSharpClamp */ - 0x0F120808, /*70000C50//_ee_iReduceEdgeMinMult */ - 0x0F120A01, /*70000C52//_bnr_nClustLevel_H_Bin */ - 0x0F12010A, /*70000C54//_bnr_iClustMulT_C_Bin */ - 0x0F120001, /*70000C56//_bnr_iClustThresh_C_Bin */ - 0x0F122400, /*70000C58//_bnr_iDenThreshHigh_Bin */ - 0x0F120260, /*70000C5A//_ee_iHighSharpPower_Bin */ - 0x0F12FF02, /*70000C5C//_ee_iHighShDenoise_Bin */ - 0x0F1240FF, /*70000C5E//_ee_iHighSharpClamp_Bin */ - 0x0F120009, /*70000C60//_ee_iReduceEdgeSlope_Bin */ - 0x0F120001, /*70000C62//_bnr_nClustLevel_C */ - 0x0F120000, /*70000C64//_BRIGHTNESS AFIT 4 */ - 0x0F120000, /*70000C66//_CONTRAST */ - 0x0F120000, /*70000C68//_SATURATION */ - 0x0F120000, /*70000C6A//_SHARP_BLUR */ - 0x0F120000, /*70000C6C//_GLAMOUR */ - 0x0F1200C0, /*70000C6E//_bnr_edge_high */ - 0x0F120064, /*70000C70//_postdmsc_iLowBright */ - 0x0F120384, /*70000C72//_postdmsc_iHighBright */ - 0x0F120032, /*70000C74//_postdmsc_iLowSat */ - 0x0F1201F4, /*70000C76//_postdmsc_iHighSat */ - 0x0F120070, /*70000C78//_postdmsc_iTune */ - 0x0F120040, /*70000C7A//_yuvemix_mNegRanges_0 */ - 0x0F1200A0, /*70000C7C//_yuvemix_mNegRanges_1 */ - 0x0F120100, /*70000C7E//_yuvemix_mNegRanges_2 */ - 0x0F120010, /*70000C80//_yuvemix_mPosRanges_0 */ - 0x0F120060, /*70000C82//_yuvemix_mPosRanges_1 */ - 0x0F120100, /*70000C84//_yuvemix_mPosRanges_2 */ - 0x0F121430, /*70000C86//_bnr_edge_low */ - 0x0F120201, /*70000C88//_bnr_repl_force */ - 0x0F120204, /*70000C8A//_bnr_iHotThreshLow */ - 0x0F120F04, /*70000C8C//_bnr_iColdThreshLow */ - 0x0F12030C, /*70000C8E//_bnr_DispTH_High */ - 0x0F120003, /*70000C90//_bnr_DISP_Limit_High */ - 0x0F120602, /*70000C92//_bnr_iDistSigmaMax */ - 0x0F121803, /*70000C94//_bnr_iDiffSigmaHigh */ - 0x0F120040, /*70000C96//_bnr_iNormalizedSTD_Limit */ - 0x0F120E20, /*70000C98//_bnr_iDirMinThres */ - 0x0F122018, /*70000C9A//_bnr_iDirFltDiffThresLow */ - 0x0F120620, /*70000C9C//_bnr_iDirSmoothPowerLow */ - 0x0F120306, /*70000C9E//_bnr_iHighMaxSlopeAllowed */ - 0x0F122003, /*70000CA0//_bnr_iHighSlopeThresh */ - 0x0F12FF01, /*70000CA2//_bnr_iSlopeBlurStrength */ - 0x0F120404, /*70000CA4//_bnr_AddNoisePower1 */ - 0x0F120200, /*70000CA6//_bnr_iRadialTune */ - 0x0F12145A, /*70000CA8//_bnr_iRadialLimit */ - 0x0F121010, /*70000CAA//_ee_iFSMagThHigh */ - 0x0F12000B, /*70000CAC//_ee_iFSVarThHigh */ - 0x0F121200, /*70000CAE//_ee_iFSThHigh */ - 0x0F125A0F, /*70000CB0//_ee_iFSVarCountTh */ - 0x0F120502, /*70000CB2//_ee_iRadialPower */ - 0x0F121802, /*70000CB4//_ee_iROADThres */ - 0x0F120000, /*70000CB6//_ee_iROADSubMaxNR */ - 0x0F122006, /*70000CB8//_ee_iROADNeiThres */ - 0x0F124028, /*70000CBA//_ee_iSmoothEdgeThres */ - 0x0F120430, /*70000CBC//_ee_iWSharpen */ - 0x0F120101, /*70000CBE//_ee_iWShThresh */ - 0x0F12FF00, /*70000CC0//_ee_iEmbossCentAdd */ - 0x0F120804, /*70000CC2//_ee_iReduceEdgeThresh */ - 0x0F124008, /*70000CC4//_dmsc_iDesatThresh */ - 0x0F120540, /*70000CC6//_dmsc_iDemBlurLow */ - 0x0F128006, /*70000CC8//_dmsc_iDecisionThresh */ - 0x0F120020, /*70000CCA//_dmsc_iMonochrom */ - 0x0F120000, /*70000CCC//_dmsc_iGRDenoiseVal */ - 0x0F122000, /*70000CCE//_dmsc_iEdgeDesatThrLow */ - 0x0F120000, /*70000CD0//_dmsc_iNearGrayDesat */ - 0x0F121E10, /*70000CD2//_postdmsc_iBCoeff */ - 0x0F12000B, /*70000CD4//_postdmsc_iWideMult */ - 0x0F120607, /*70000CD6//_yuvemix_mNegSlopes_1 */ - 0x0F120005, /*70000CD8//_yuvemix_mNegSlopes_3 */ - 0x0F120607, /*70000CDA//_yuvemix_mPosSlopes_1 */ - 0x0F120405, /*70000CDC//_yuvemix_mPosSlopes_3 */ - 0x0F120205, /*70000CDE//_yuviirnr_iXSupportUV */ - 0x0F120304, /*70000CE0//_yuviirnr_iHighYNorm */ - 0x0F120409, /*70000CE2//_yuviirnr_iHighUVNorm */ - 0x0F120306, /*70000CE4//_yuviirnr_iUVNormShift */ - 0x0F120407, /*70000CE6//_yuviirnr_iVertLength_UV */ - 0x0F122C04, /*70000CE8//_yuviirnr_iDiffThreshH_Y */ - 0x0F12022C, /*70000CEA//_yuviirnr_iDiffThreshH_UV */ - 0x0F121402, /*70000CEC//_yuviirnr_iMaxThreshH_Y */ - 0x0F120618, /*70000CEE//_yuviirnr_iMaxThreshH_UV */ - 0x0F121A02, /*70000CF0//_yuviirnr_iYNRStrengthH */ - 0x0F128018, /*70000CF2//_yuviirnr_iUVNRStrengthH */ - 0x0F120080, /*70000CF4//_RGBGamma2_iLinearity */ - 0x0F120080, /*70000CF6//_ccm_oscar_iSaturation */ - 0x0F120180, /*70000CF8//_RGB2YUV_iRGBGain */ - 0x0F120A0A, /*70000CFA//_bnr_iClustMulT_H */ - 0x0F120101, /*70000CFC//_bnr_iClustThresh_H */ - 0x0F120C0F, /*70000CFE//_bnr_iDenThreshLow */ - 0x0F126024, /*70000D00//_ee_iLowSharpPower */ - 0x0F120808, /*70000D02//_ee_iLowShDenoise */ - 0x0F12FFFF, /*70000D04//_ee_iLowSharpClamp */ - 0x0F120808, /*70000D06//_ee_iReduceEdgeMinMult */ - 0x0F120A01, /*70000D08//_bnr_nClustLevel_H_Bin */ - 0x0F12010A, /*70000D0A//_bnr_iClustMulT_C_Bin */ - 0x0F120001, /*70000D0C//_bnr_iClustThresh_C_Bin */ - 0x0F122400, /*70000D0E//_bnr_iDenThreshHigh_Bin */ - 0x0F120060, /*70000D10//_ee_iHighSharpPower_Bin */ - 0x0F12FF00, /*70000D12//_ee_iHighShDenoise_Bin */ - 0x0F1240FF, /*70000D14//_ee_iHighSharpClamp_Bin */ - 0x0F120009, /*70000D16//_ee_iReduceEdgeSlope_Bin */ - 0x0F120001, /*70000D18//_bnr_nClustLevel_C */ - 0x002A0266, - 0x0F120000, /*REG_TC_GP_ActivePrevConfig */ - 0x002A026A, - 0x0F120001, /*REG_TC_GP_PrevOpenAfterChange */ - 0x002A024E, - 0x0F120001, /*REG_TC_GP_NewConfigSync */ - 0x002A0268, - 0x0F120001, /*REG_TC_GP_PrevConfigChanged */ - -}; - -static const u32 s5k4ecgx_800_Preview_EVT1[] = { /* 800 x 480 // */ - 0xFCFCD000, - 0x00287000, - - 0x002A18AC, - 0x0F120060, /*senHal_uAddColsBin */ - 0x0F120060, /*senHal_uAddColsNoBin */ - 0x0F1205C0, /*senHal_uMinColsBin */ - 0x0F1205C0, /*senHal_uMinColsNoBin */ - - 0x002A0250, - 0x0F120A00, /*REG_TC_GP_PrevReqInputWidth //2560 */ - 0x0F120600, /*REG_TC_GP_PrevReqInputHeight //1536 */ - 0x0F120010, /*REG_TC_GP_PrevInputWidthOfs //(2592-2560)/2*/ - 0x0F1200CC, /*REG_TC_GP_PrevInputHeightOfs/(1944-1536)/2*/ - - 0x002A0262, - 0x0F120001, /*REG_TC_GP_bUseReqInputInPre */ - - 0x002A0494, - 0x0F120A00, /*REG_TC_PZOOM_PrevZoomReqInputWidth //2560 */ - 0x0F120600, /*REG_TC_PZOOM_PrevZoomReqInputHeight //1536 */ - 0x0F120000, /*REG_TC_PZOOM_PrevZoomReqInputWidthOfs */ - 0x0F120000, /*REG_TC_PZOOM_PrevZoomReqInputHeightOfs */ - - 0x002A02A6, - 0x0F120320, /*REG_0TC_PCFG_usWidth //800 */ - 0x0F1201E0, /*REG_0TC_PCFG_usHeight //480 */ - - 0x002A0266, - 0x0F120000, /*REG_TC_GP_ActivePrevConfig */ - 0x002A026A, - 0x0F120001, /*REG_TC_GP_PrevOpenAfterChange */ - 0x002A024E, - 0x0F120001, /*REG_TC_GP_NewConfigSync */ - 0x002A0268, - 0x0F120001, /*REG_TC_GP_PrevConfigChanged */ - -}; - -static const u32 s5k4ecgx_720_Preview_EVT1[] = { /* 720 x 480 */ - 0xFCFCD000, - 0x00287000, - - 0x002A18AC, - 0x0F120060, /*senHal_uAddColsBin */ - 0x0F120060, /*senHal_uAddColsNoBin */ - 0x0F1205C0, /*senHal_uMinColsBin */ - 0x0F1205C0, /*senHal_uMinColsNoBin */ - - 0x002A0250, - 0x0F120A00, /*REG_TC_GP_PrevReqInputWidth //2560 */ - 0x0F1206A8, /*REG_TC_GP_PrevReqInputHeight //1704 */ - 0x0F120010, /*REG_TC_GP_PrevInputWidthOfs/(2592-2560)/2*/ - 0x0F120078, /*REG_TC_GP_PrevInputHeightOfs //(1944-1704)/2*/ - - 0x002A0262, - 0x0F120001, /*REG_TC_GP_bUseReqInputInPre */ - - 0x002A0494, - 0x0F120A00, /*REG_TC_PZOOM_PrevZoomReqInputWidth //2560 */ - 0x0F1206A8, /*REG_TC_PZOOM_PrevZoomReqInputHeight //1704 */ - 0x0F120000, /*REG_TC_PZOOM_PrevZoomReqInputWidthOfs */ - 0x0F120000, /*REG_TC_PZOOM_PrevZoomReqInputHeightOfs */ - - 0x002A02A6, - 0x0F1202D0, /*REG_0TC_PCFG_usWidth //720 */ - 0x0F1201E0, /*REG_0TC_PCFG_usHeight //480 */ - - 0x002A0266, - 0x0F120000, /*REG_TC_GP_ActivePrevConfig */ - 0x002A026A, - 0x0F120001, /*REG_TC_GP_PrevOpenAfterChange */ - 0x002A024E, - 0x0F120001, /*REG_TC_GP_NewConfigSync */ - 0x002A0268, - 0x0F120001, /*REG_TC_GP_PrevConfigChanged */ -}; - -static const u32 s5k4ecgx_640_Preview_EVT1[] = { /* 640 x 480 */ - 0xFCFCD000, - 0x00287000, - - 0x002A18AC, - 0x0F120060, /*senHal_uAddColsBin */ - 0x0F120060, /*senHal_uAddColsNoBin */ - 0x0F1205C0, /*senHal_uMinColsBin */ - 0x0F1205C0, /*senHal_uMinColsNoBin */ - - 0x002A0250, - 0x0F120A00, /*REG_TC_GP_PrevReqInputWidth //2560 */ - 0x0F120780, /*REG_TC_GP_PrevReqInputHeight //1920 */ - 0x0F120010, /*REG_TC_GP_PrevInputWidthOfs/(2592-2560)/2*/ - 0x0F12000C, /*REG_TC_GP_PrevInputHeightOfs/(1944-1920)/2*/ - - 0x002A0262, - 0x0F120001, /*REG_TC_GP_bUseReqInputInPre */ - - 0x002A0494, - 0x0F120A00, /*REG_TC_PZOOM_PrevZoomReqInputWidth //2560 */ - 0x0F120780, /*REG_TC_PZOOM_PrevZoomReqInputHeight //1920 */ - 0x0F120000, /*REG_TC_PZOOM_PrevZoomReqInputWidthOfs */ - 0x0F120000, /*REG_TC_PZOOM_PrevZoomReqInputHeightOfs */ - - 0x002A02A6, - 0x0F120280, /*REG_0TC_PCFG_usWidth //640 */ - 0x0F1201E0, /*REG_0TC_PCFG_usHeight //480 */ - - 0x002A0266, - 0x0F120000, /*REG_TC_GP_ActivePrevConfig */ - 0x002A026A, - 0x0F120001, /*REG_TC_GP_PrevOpenAfterChange */ - 0x002A024E, - 0x0F120001, /*REG_TC_GP_NewConfigSync */ - 0x002A0268, - 0x0F120001, /*REG_TC_GP_PrevConfigChanged */ - -}; - -static const u32 s5k4ecgx_352_Preview_EVT1[] = { /* 352 x 288 */ - 0xFCFCD000, - 0x00287000, - - 0x002A18AC, - 0x0F120060, /*senHal_uAddColsBin */ - 0x0F120060, /*senHal_uAddColsNoBin */ - 0x0F1205C0, /*senHal_uMinColsBin */ - 0x0F1205C0, /*senHal_uMinColsNoBin */ - - 0x002A0250, - 0x0F120928, /*REG_TC_GP_PrevReqInputWidth //2344 */ - 0x0F120780, /*REG_TC_GP_PrevReqInputHeight //1920 */ - 0x0F12007C, /*REG_TC_GP_PrevInputWidthOfs //(2592-2344)/2 */ - 0x0F12000C, /*REG_TC_GP_PrevInputHeightOfs //(1944-1920)/2 */ - - 0x002A0262, - 0x0F120001, /*REG_TC_GP_bUseReqInputInPre */ - - 0x002A0494, - 0x0F120928, /*REG_TC_PZOOM_PrevZoomReqInputWidth //2344 */ - 0x0F120780, /*REG_TC_PZOOM_PrevZoomReqInputHeight //1920 */ - 0x0F120000, /*REG_TC_PZOOM_PrevZoomReqInputWidthOfs */ - 0x0F120000, /*REG_TC_PZOOM_PrevZoomReqInputHeightOfs */ - - 0x002A02A6, - 0x0F120160, /*REG_0TC_PCFG_usWidth //352 */ - 0x0F120120, /*REG_0TC_PCFG_usHeight //288 */ - - 0x002A0266, - 0x0F120000, /*REG_TC_GP_ActivePrevConfig */ - 0x002A026A, - 0x0F120001, /*REG_TC_GP_PrevOpenAfterChange */ - 0x002A024E, - 0x0F120001, /*REG_TC_GP_NewConfigSync */ - 0x002A0268, - 0x0F120001, /*REG_TC_GP_PrevConfigChanged */ - -}; - -static const u32 s5k4ecgx_320_Preview_EVT1[] = { /* 320 x 240 */ - 0xFCFCD000, - 0x00287000, - - 0x002A18AC, - 0x0F120060, /*senHal_uAddColsBin */ - 0x0F120060, /*senHal_uAddColsNoBin */ - 0x0F1205C0, /*senHal_uMinColsBin */ - 0x0F1205C0, /*senHal_uMinColsNoBin */ - - 0x002A0250, - 0x0F120A00, /*REG_TC_GP_PrevReqInputWidth //2560 */ - 0x0F120780, /*REG_TC_GP_PrevReqInputHeight //1920 */ - 0x0F120010, /*REG_TC_GP_PrevInputWidthOfs //(2592-2560)/2 */ - 0x0F12000C, /*REG_TC_GP_PrevInputHeightOfs //(1944-1920)/2*/ - - 0x002A0262, - 0x0F120001, /*REG_TC_GP_bUseReqInputInPre */ - - 0x002A0494, - 0x0F120A00, /*REG_TC_PZOOM_PrevZoomReqInputWidth //2560 */ - 0x0F120780, /*REG_TC_PZOOM_PrevZoomReqInputHeight //1920 */ - 0x0F120000, /*REG_TC_PZOOM_PrevZoomReqInputWidthOfs */ - 0x0F120000, /*REG_TC_PZOOM_PrevZoomReqInputHeightOfs */ - - 0x002A02A6, - 0x0F120140, /*REG_0TC_PCFG_usWidth //320 */ - 0x0F1200F0, /*REG_0TC_PCFG_usHeight //240 */ - - 0x002A0266, - 0x0F120000, /*REG_TC_GP_ActivePrevConfig */ - 0x002A026A, - 0x0F120001, /*REG_TC_GP_PrevOpenAfterChange */ - 0x002A024E, - 0x0F120001, /*REG_TC_GP_NewConfigSync */ - 0x002A0268, - 0x0F120001, /*REG_TC_GP_PrevConfigChanged */ - -}; - -static const u32 s5k4ecgx_176_Preview_EVT1[] = { /* 176 x 144 */ - 0xFCFCD000, - 0x00287000, - - 0x002A18AC, - 0x0F120060, /*senHal_uAddColsBin */ - 0x0F120060, /*senHal_uAddColsNoBin */ - 0x0F1205C0, /*senHal_uMinColsBin */ - 0x0F1205C0, /*senHal_uMinColsNoBin */ - - 0x002A0250, - 0x0F120928, /*REG_TC_GP_PrevReqInputWidth //2344 */ - 0x0F120780, /*REG_TC_GP_PrevReqInputHeight //1920 */ - 0x0F12007C, /*REG_TC_GP_PrevInputWidthOfs //(2592-2344)/2 */ - 0x0F12000C,/*REG_TC_GP_PrevInputHeightOfs/(1944-1920)/2*/ - - 0x002A0262, - 0x0F120001, /*REG_TC_GP_bUseReqInputInPre */ - - 0x002A0494, - 0x0F120928, /*REG_TC_PZOOM_PrevZoomReqInputWidth //2344 */ - 0x0F120780, /*REG_TC_PZOOM_PrevZoomReqInputHeight //1920 */ - 0x0F120000, /*REG_TC_PZOOM_PrevZoomReqInputWidthOfs */ - 0x0F120000, /*REG_TC_PZOOM_PrevZoomReqInputHeightOfs */ - - 0x002A02A6, - 0x0F1200B0, /*REG_0TC_PCFG_usWidth //176 */ - 0x0F120090, /*REG_0TC_PCFG_usHeight //144 */ - - 0x002A0266, - 0x0F120000, /*REG_TC_GP_ActivePrevConfig */ - 0x002A026A, - 0x0F120001, /*REG_TC_GP_PrevOpenAfterChange */ - 0x002A024E, - 0x0F120001, /*REG_TC_GP_NewConfigSync */ - 0x002A0268, - 0x0F120001, /*REG_TC_GP_PrevConfigChanged */ -}; - -/* Zoom set for 320,176*/ -static const u32 s5k4ecgx_X4_Zoom_0_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A048E, - 0x0F120100, - 0x002A04A4, - 0x0F120005, -}; - -static const u32 s5k4ecgx_X4_Zoom_1_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A048E, - 0x0F120120, - 0x002A04A4, - 0x0F120005, -}; - -static const u32 s5k4ecgx_X4_Zoom_2_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A048E, - 0x0F120140, - 0x002A04A4, - 0x0F120005, -}; - -static const u32 s5k4ecgx_X4_Zoom_3_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A048E, - 0x0F120160, - 0x002A04A4, - 0x0F120005, -}; - -static const u32 s5k4ecgx_X4_Zoom_4_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A048E, - 0x0F120180, - 0x002A04A4, - 0x0F120005, -}; - -static const u32 s5k4ecgx_X4_Zoom_5_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A048E, - 0x0F1201A0, - 0x002A04A4, - 0x0F120005, -}; - -static const u32 s5k4ecgx_X4_Zoom_6_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A048E, - 0x0F1201C0, - 0x002A04A4, - 0x0F120005, -}; - -static const u32 s5k4ecgx_X4_Zoom_7_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A048E, - 0x0F1201E0, - 0x002A04A4, - 0x0F120005, -}; - -static const u32 s5k4ecgx_X4_Zoom_8_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A048E, - 0x0F120200, - 0x002A04A4, - 0x0F120005, -}; - -/* Zoom set for 1280 x 640*/ -static const u32 s5k4ecgx_X2_Zoom_0_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A048E, - 0x0F120100, - 0x002A04A4, - 0x0F120005, -}; - -static const u32 s5k4ecgx_X2_Zoom_1_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A048E, - 0x0F120120, - 0x002A04A4, - 0x0F120005, -}; - -static const u32 s5k4ecgx_X2_Zoom_2_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A048E, - 0x0F120140, - 0x002A04A4, - 0x0F120005, -}; - -static const u32 s5k4ecgx_X2_Zoom_3_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A048E, - 0x0F120160, - 0x002A04A4, - 0x0F120005, -}; - -static const u32 s5k4ecgx_X2_Zoom_4_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A048E, - 0x0F120180, - 0x002A04A4, - 0x0F120005, -}; - -static const u32 s5k4ecgx_X2_Zoom_5_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A048E, - 0x0F1201A0, - 0x002A04A4, - 0x0F120005, -}; - -static const u32 s5k4ecgx_X2_Zoom_6_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A048E, - 0x0F1201C0, - 0x002A04A4, - 0x0F120005, -}; - -static const u32 s5k4ecgx_X2_Zoom_7_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A048E, - 0x0F1201E0, - 0x002A04A4, - 0x0F120005, -}; - -static const u32 s5k4ecgx_X2_Zoom_8_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A048E, - 0x0F120200, - 0x002A04A4, - 0x0F120005, -}; - -/* Zoom set for 720*/ -static const u32 s5k4ecgx_X1_77_Zoom_0_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A048E, - 0x0F120100, - 0x002A04A4, - 0x0F120005, -}; - -static const u32 s5k4ecgx_X1_77_Zoom_1_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A048E, - 0x0F120118, - 0x002A04A4, - 0x0F120005, -}; - -static const u32 s5k4ecgx_X1_77_Zoom_2_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A048E, - 0x0F120130, - 0x002A04A4, - 0x0F120005, -}; - -static const u32 s5k4ecgx_X1_77_Zoom_3_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A048E, - 0x0F120148, - 0x002A04A4, - 0x0F120005, -}; - -static const u32 s5k4ecgx_X1_77_Zoom_4_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A048E, - 0x0F120160, - 0x002A04A4, - 0x0F120005, -}; - -static const u32 s5k4ecgx_X1_77_Zoom_5_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A048E, - 0x0F120178, - 0x002A04A4, - 0x0F120005, -}; - -static const u32 s5k4ecgx_X1_77_Zoom_6_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A048E, - 0x0F120190, - 0x002A04A4, - 0x0F120005, -}; - -static const u32 s5k4ecgx_X1_77_Zoom_7_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A048E, - 0x0F1201A8, - 0x002A04A4, - 0x0F120005, -}; - -static const u32 s5k4ecgx_X1_77_Zoom_8_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A048E, - 0x0F1201C5, - 0x002A04A4, - 0x0F120005, -}; - -/* Zoom set for 1600 */ -static const u32 s5k4ecgx_X1_6_Zoom_0_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A048E, - 0x0F120100, - 0x002A04A4, - 0x0F120005, -}; - -static const u32 s5k4ecgx_X1_6_Zoom_1_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A048E, - 0x0F120113, - 0x002A04A4, - 0x0F120005, -}; - -static const u32 s5k4ecgx_X1_6_Zoom_2_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A048E, - 0x0F120126, - 0x002A04A4, - 0x0F120005, -}; - -static const u32 s5k4ecgx_X1_6_Zoom_3_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A048E, - 0x0F120139, - 0x002A04A4, - 0x0F120005, -}; - -static const u32 s5k4ecgx_X1_6_Zoom_4_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A048E, - 0x0F12014C, - 0x002A04A4, - 0x0F120005, -}; - -static const u32 s5k4ecgx_X1_6_Zoom_5_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A048E, - 0x0F12015F, - 0x002A04A4, - 0x0F120005, -}; - -static const u32 s5k4ecgx_X1_6_Zoom_6_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A048E, - 0x0F120172, - 0x002A04A4, - 0x0F120005, -}; - -static const u32 s5k4ecgx_X1_6_Zoom_7_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A048E, - 0x0F120185, - 0x002A04A4, - 0x0F120005, -}; - -static const u32 s5k4ecgx_X1_6_Zoom_8_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A048E, - 0x0F12019A, - 0x002A04A4, - 0x0F120005, -}; - -/* Zoom set for 2048 */ -static const u32 s5k4ecgx_X1_25_Zoom_0_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A048E, - 0x0F120100, - 0x002A04A4, - 0x0F120005, -}; - -static const u32 s5k4ecgx_X1_25_Zoom_1_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A048E, - 0x0F120108, - 0x002A04A4, - 0x0F120005, -}; - -static const u32 s5k4ecgx_X1_25_Zoom_2_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A048E, - 0x0F120110, - 0x002A04A4, - 0x0F120005, -}; - -static const u32 s5k4ecgx_X1_25_Zoom_3_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A048E, - 0x0F120118, - 0x002A04A4, - 0x0F120005, -}; - -static const u32 s5k4ecgx_X1_25_Zoom_4_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A048E, - 0x0F120120, - 0x002A04A4, - 0x0F120005, -}; - -static const u32 s5k4ecgx_X1_25_Zoom_5_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A048E, - 0x0F120128, - 0x002A04A4, - 0x0F120005, -}; - -static const u32 s5k4ecgx_X1_25_Zoom_6_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A048E, - 0x0F120130, - 0x002A04A4, - 0x0F120005, -}; - -static const u32 s5k4ecgx_X1_25_Zoom_7_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A048E, - 0x0F120138, - 0x002A04A4, - 0x0F120005, -}; - -static const u32 s5k4ecgx_X1_25_Zoom_8_EVT1[] = { - 0xFCFCD000, - 0x00287000, - 0x002A048E, - 0x0F120140, - 0x002A04A4, - 0x0F120005, -}; - -#endif /* __S5K4ECGX_SETFILE_H */ |