mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-11-04 06:54:27 -05:00 
			
		
		
		
	
		
			
				
	
	
		
			1700 lines
		
	
	
		
			55 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			1700 lines
		
	
	
		
			55 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
From 1ccc3052a80284d3d7fbdfc0badadf6ae4236f79 Mon Sep 17 00:00:00 2001
 | 
						|
From: Andy Green <andy@opennoko.com>
 | 
						|
Date: Wed, 2 Jul 2008 22:37:38 +0100
 | 
						|
Subject: [PATCH] uplevel-samsung-camera-unit.patch
 | 
						|
 | 
						|
Update this old code to clk API, I2C changes, official GPIO API
 | 
						|
various struct changes, explicit readl() writel(), DMA API changes.
 | 
						|
Still not ready for actual use (eg, I2C) but a LOT closer.
 | 
						|
 | 
						|
Compiles on 2.6.24 without errors or warnings now.
 | 
						|
 | 
						|
Use CONFIG_S3C2440_CAMERA=y in .config
 | 
						|
 | 
						|
Signed-off-by: Andy Green <andy@openmoko.com>
 | 
						|
---
 | 
						|
 arch/arm/mach-s3c2440/Kconfig               |    5 +-
 | 
						|
 arch/arm/mach-s3c2440/Makefile              |   26 +-
 | 
						|
 arch/arm/mach-s3c2440/camera/Makefile       |    1 -
 | 
						|
 arch/arm/mach-s3c2440/camera/cam_reg.h      |   92 +++--
 | 
						|
 arch/arm/mach-s3c2440/camera/camif.c        |  633 +++++++++++++++------------
 | 
						|
 arch/arm/mach-s3c2440/camera/camif_fsm.c    |    5 +
 | 
						|
 arch/arm/mach-s3c2440/camera/imgsensor.c    |   43 +-
 | 
						|
 arch/arm/mach-s3c2440/camera/qt-driver.c    |    5 +-
 | 
						|
 arch/arm/mach-s3c2440/camera/video-driver.c |   87 +++--
 | 
						|
 arch/arm/mach-s3c2440/camera/videodev.c     |   24 +-
 | 
						|
 arch/arm/mach-s3c2440/camera/videodev.h     |   16 +-
 | 
						|
 11 files changed, 533 insertions(+), 404 deletions(-)
 | 
						|
 | 
						|
diff --git a/arch/arm/mach-s3c2440/Kconfig b/arch/arm/mach-s3c2440/Kconfig
 | 
						|
index c350511..4a211d8 100644
 | 
						|
--- a/arch/arm/mach-s3c2440/Kconfig
 | 
						|
+++ b/arch/arm/mach-s3c2440/Kconfig
 | 
						|
@@ -30,9 +30,6 @@ config S3C2440_C_FIQ
 | 
						|
 	  Support for S3C2440 FIQ support in C -- see
 | 
						|
 	  ./arch/arm/macs3c2440/fiq_c_isr.c
 | 
						|
 
 | 
						|
-source "arch/arm/mach-s3c2440/camera/Kconfig"
 | 
						|
-
 | 
						|
-
 | 
						|
 menu "S3C2440 Machines"
 | 
						|
 
 | 
						|
 config MACH_ANUBIS
 | 
						|
@@ -102,3 +99,5 @@ config NEO1973_GTA02_2440
 | 
						|
 	   of the FIC/Openmoko Neo1973 GTA02 GSM Phone.
 | 
						|
 
 | 
						|
 endmenu
 | 
						|
+
 | 
						|
+#source "arch/arm/mach-s3c2440/camera/Kconfig"
 | 
						|
diff --git a/arch/arm/mach-s3c2440/Makefile b/arch/arm/mach-s3c2440/Makefile
 | 
						|
index 7112231..e3ca9e3 100644
 | 
						|
--- a/arch/arm/mach-s3c2440/Makefile
 | 
						|
+++ b/arch/arm/mach-s3c2440/Makefile
 | 
						|
@@ -1,2 +1,26 @@
 | 
						|
-obj-y                           += camera/
 | 
						|
+# arch/arm/mach-s3c2440/Makefile
 | 
						|
+#
 | 
						|
+# Copyright 2007 Simtec Electronics
 | 
						|
+#
 | 
						|
+# Licensed under GPLv2
 | 
						|
 
 | 
						|
+obj-y				:=
 | 
						|
+obj-m				:=
 | 
						|
+obj-n				:=
 | 
						|
+obj-				:=
 | 
						|
+
 | 
						|
+obj-$(CONFIG_CPU_S3C2440)	+= s3c2440.o dsc.o
 | 
						|
+obj-$(CONFIG_CPU_S3C2440)	+= irq.o
 | 
						|
+obj-$(CONFIG_CPU_S3C2440)	+= clock.o
 | 
						|
+obj-$(CONFIG_S3C2440_DMA)	+= dma.o
 | 
						|
+obj-$(CONFIG_S3C2440_C_FIQ)	+= fiq_c_isr.o
 | 
						|
+
 | 
						|
+# Machine support
 | 
						|
+
 | 
						|
+obj-$(CONFIG_MACH_ANUBIS)	+= mach-anubis.o
 | 
						|
+obj-$(CONFIG_MACH_OSIRIS)	+= mach-osiris.o
 | 
						|
+obj-$(CONFIG_MACH_RX3715)	+= mach-rx3715.o
 | 
						|
+obj-$(CONFIG_ARCH_S3C2440)	+= mach-smdk2440.o
 | 
						|
+obj-$(CONFIG_MACH_NEXCODER_2440) += mach-nexcoder.o
 | 
						|
+obj-$(CONFIG_MACH_HXD8)		+= mach-hxd8.o
 | 
						|
+obj-$(CONFIG_MACH_NEO1973_GTA02) += mach-gta02.o
 | 
						|
diff --git a/arch/arm/mach-s3c2440/camera/Makefile b/arch/arm/mach-s3c2440/camera/Makefile
 | 
						|
index a46d3be..9cd6d79 100644
 | 
						|
--- a/arch/arm/mach-s3c2440/camera/Makefile
 | 
						|
+++ b/arch/arm/mach-s3c2440/camera/Makefile
 | 
						|
@@ -1,7 +1,6 @@
 | 
						|
 obj-$(CONFIG_S3C2440_CAMERA) += \
 | 
						|
 	videodev.o \
 | 
						|
 	imgsensor.o \
 | 
						|
-	videodrv.o \
 | 
						|
 	video-driver.o \
 | 
						|
 	camif.o \
 | 
						|
 	camif_fsm.o \
 | 
						|
diff --git a/arch/arm/mach-s3c2440/camera/cam_reg.h b/arch/arm/mach-s3c2440/camera/cam_reg.h
 | 
						|
index 7247a4e..93d59b8 100644
 | 
						|
--- a/arch/arm/mach-s3c2440/camera/cam_reg.h
 | 
						|
+++ b/arch/arm/mach-s3c2440/camera/cam_reg.h
 | 
						|
@@ -7,6 +7,7 @@
 | 
						|
 #ifndef __FIMC20_CAMERA_H__
 | 
						|
 #define __FIMC20_CAMERA_H__
 | 
						|
 
 | 
						|
+extern u32 * camregs;
 | 
						|
 
 | 
						|
 #ifdef CONFIG_ARCH_S3C24A0
 | 
						|
 #define CAM_BASE_ADD             0x48000000
 | 
						|
@@ -14,10 +15,23 @@
 | 
						|
 #define CAM_BASE_ADD             0x4F000000
 | 
						|
 #endif
 | 
						|
 
 | 
						|
+#if ! defined(FExtr)
 | 
						|
+#define UData(Data)     ((unsigned long) (Data))
 | 
						|
+#define FExtr(Data, Field) \
 | 
						|
+                        ((UData (Data) >> FShft (Field)) & FAlnMsk (Field))
 | 
						|
+#define FInsrt(Value, Field) \
 | 
						|
+                        (UData (Value) << FShft (Field))
 | 
						|
+#define FSize(Field)    ((Field) >> 16)
 | 
						|
+#define FShft(Field)    ((Field) & 0x0000FFFF)
 | 
						|
+#define FMsk(Field)     (((UData (1) << FSize (Field)) - 1) << FShft (Field))
 | 
						|
+#define FAlnMsk(Field)  ((UData (1) << FSize (Field)) - 1)
 | 
						|
+#define F1stBit(Field)  (UData (1) << FShft (Field))
 | 
						|
+#define Fld(Size, Shft) (((Size) << 16) + (Shft))
 | 
						|
+#endif
 | 
						|
 
 | 
						|
 /*
 | 
						|
  * CAMERA IP
 | 
						|
- * P-port is used as RGB Capturing device which including scale and crop 
 | 
						|
+ * P-port is used as RGB Capturing device which including scale and crop
 | 
						|
  *  those who want to see(preview ) the image on display needs RGB image.
 | 
						|
  *
 | 
						|
  * C-port is used as YCbCr(4:2:0, 4:2:2) Capturing device which including the scale and crop
 | 
						|
@@ -25,45 +39,45 @@
 | 
						|
      YCBCB format not RGB 
 | 
						|
  */ 
 | 
						|
 
 | 
						|
-#define CISRCFMT            __REG(CAM_BASE_ADD+0x00) // RW Input Source Format
 | 
						|
-#define CIWDOFST            __REG(CAM_BASE_ADD+0x04) // Window offset register
 | 
						|
-#define CIGCTRL             __REG(CAM_BASE_ADD+0x08) // Global control register
 | 
						|
-#define CICOYSA0            __REG(CAM_BASE_ADD+0x18) // Y 1 st frame start address 
 | 
						|
-#define CICOYSA1            __REG(CAM_BASE_ADD+0x1C) // Y 2 nd frame start address 
 | 
						|
-#define CICOYSA2            __REG(CAM_BASE_ADD+0x20) // Y 3 rd frame start address 
 | 
						|
-#define CICOYSA3            __REG(CAM_BASE_ADD+0x24) // Y 4 th frame start address 
 | 
						|
-#define CICOCBSA0           __REG(CAM_BASE_ADD+0x28) // Cb 1 st frame start address 
 | 
						|
-#define CICOCBSA1           __REG(CAM_BASE_ADD+0x2C) // Cb 2 nd frame start address 
 | 
						|
-#define CICOCBSA2           __REG(CAM_BASE_ADD+0x30) // Cb 3 rd frame start address 
 | 
						|
-#define CICOCBSA3           __REG(CAM_BASE_ADD+0x34) // Cb 4 th frame start address 
 | 
						|
-#define CICOCRSA0           __REG(CAM_BASE_ADD+0x38) // Cr 1 st frame start address 
 | 
						|
-#define CICOCRSA1           __REG(CAM_BASE_ADD+0x3C) // Cr 2 nd frame start address 
 | 
						|
-#define CICOCRSA2           __REG(CAM_BASE_ADD+0x40) // Cr 3 rd frame start address 
 | 
						|
-#define CICOCRSA3           __REG(CAM_BASE_ADD+0x44) // Cr 4 th frame start address 
 | 
						|
-#define CICOTRGFMT          __REG(CAM_BASE_ADD+0x48) // Target image format of codec
 | 
						|
-#define CICOCTRL            __REG(CAM_BASE_ADD+0x4C) // Codec DMA control related
 | 
						|
-#define CICOSCPRERATIO      __REG(CAM_BASE_ADD+0x50) // Codec pre-scaler ratio control
 | 
						|
-#define CICOSCPREDST        __REG(CAM_BASE_ADD+0x54) // Codec pre-scaler destination
 | 
						|
-#define CICOSCCTRL          __REG(CAM_BASE_ADD+0x58) // Codec main-scaler control
 | 
						|
-#define CICOTAREA           __REG(CAM_BASE_ADD+0x5C) // Codec pre-scaler destination
 | 
						|
-#define CICOSTATUS          __REG(CAM_BASE_ADD+0x64) // Codec path status
 | 
						|
-#define CIPRCLRSA0          __REG(CAM_BASE_ADD+0x6C) // RGB 1 st frame start address 
 | 
						|
-#define CIPRCLRSA1          __REG(CAM_BASE_ADD+0x70) // RGB 2 nd frame start address 
 | 
						|
-#define CIPRCLRSA2          __REG(CAM_BASE_ADD+0x74) // RGB 3 rd frame start address 
 | 
						|
-#define CIPRCLRSA3          __REG(CAM_BASE_ADD+0x78) // RGB 4 th frame start address 
 | 
						|
-#define CIPRTRGFMT          __REG(CAM_BASE_ADD+0x7C) // Target image format of preview
 | 
						|
-#define CIPRCTRL            __REG(CAM_BASE_ADD+0x80) // Preview DMA control related
 | 
						|
-#define CIPRSCPRERATIO      __REG(CAM_BASE_ADD+0x84) // Preview pre-scaler ratio control
 | 
						|
-#define CIPRSCPREDST        __REG(CAM_BASE_ADD+0x88) // Preview pre-scaler destination
 | 
						|
-#define CIPRSCCTRL          __REG(CAM_BASE_ADD+0x8C) // Preview main-scaler control
 | 
						|
-#define CIPRTAREA           __REG(CAM_BASE_ADD+0x90) // Preview pre-scaler destination
 | 
						|
-#define CIPRSTATUS          __REG(CAM_BASE_ADD+0x98) // Preview path status
 | 
						|
-#define CIIMGCPT            __REG(CAM_BASE_ADD+0xA0) // Image capture enable command
 | 
						|
-
 | 
						|
-#define CICOYSA(__x)        __REG(CAM_BASE_ADD+0x18 + (__x)*4 ) 
 | 
						|
-#define CICOCBSA(__x)       __REG(CAM_BASE_ADD+0x28 + (__x)*4 )
 | 
						|
-#define CICOCRSA(__x)       __REG(CAM_BASE_ADD+0x38 + (__x)*4 ) 
 | 
						|
-#define CIPRCLRSA(__x)      __REG(CAM_BASE_ADD+0x6C + (__x)*4 )
 | 
						|
+#define S3C2440_CAM_REG_CISRCFMT            (0x00) // RW Input Source Format
 | 
						|
+#define S3C2440_CAM_REG_CIWDOFST            (0x04) // Window offset register
 | 
						|
+#define S3C2440_CAM_REG_CIGCTRL             (0x08) // Global control register
 | 
						|
+#define S3C2440_CAM_REG_CICOYSA0            (0x18) // Y 1 st frame start ads
 | 
						|
+#define S3C2440_CAM_REG_CICOYSA1            (0x1C) // Y 2 nd frame start ads
 | 
						|
+#define S3C2440_CAM_REG_CICOYSA2            (0x20) // Y 3 rd frame start ads
 | 
						|
+#define S3C2440_CAM_REG_CICOYSA3            (0x24) // Y 4 th frame start ads
 | 
						|
+#define S3C2440_CAM_REG_CICOCBSA0           (0x28) // Cb 1 st frame start ads
 | 
						|
+#define S3C2440_CAM_REG_CICOCBSA1           (0x2C) // Cb 2 nd frame start ads
 | 
						|
+#define S3C2440_CAM_REG_CICOCBSA2           (0x30) // Cb 3 rd frame start ads
 | 
						|
+#define S3C2440_CAM_REG_CICOCBSA3           (0x34) // Cb 4 th frame start ads
 | 
						|
+#define S3C2440_CAM_REG_CICOCRSA0           (0x38) // Cr 1 st frame start ads
 | 
						|
+#define S3C2440_CAM_REG_CICOCRSA1           (0x3C) // Cr 2 nd frame start ads
 | 
						|
+#define S3C2440_CAM_REG_CICOCRSA2           (0x40) // Cr 3 rd frame start ads
 | 
						|
+#define S3C2440_CAM_REG_CICOCRSA3           (0x44) // Cr 4 th frame start ads
 | 
						|
+#define S3C2440_CAM_REG_CICOTRGFMT          (0x48) // Target img format of codec
 | 
						|
+#define S3C2440_CAM_REG_CICOCTRL            (0x4C) // Codec DMA control related
 | 
						|
+#define S3C2440_CAM_REG_CICOSCPRERATIO      (0x50) // Codec pre-scaler ratio
 | 
						|
+#define S3C2440_CAM_REG_CICOSCPREDST        (0x54) // Codec pre-scaler dest
 | 
						|
+#define S3C2440_CAM_REG_CICOSCCTRL          (0x58) // Codec main-scaler control
 | 
						|
+#define S3C2440_CAM_REG_CICOTAREA           (0x5C) // Codec pre-scaler dest
 | 
						|
+#define S3C2440_CAM_REG_CICOSTATUS          (0x64) // Codec path status
 | 
						|
+#define S3C2440_CAM_REG_CIPRCLRSA0          (0x6C) // RGB 1 st frame start ads
 | 
						|
+#define S3C2440_CAM_REG_CIPRCLRSA1          (0x70) // RGB 2 nd frame start ads
 | 
						|
+#define S3C2440_CAM_REG_CIPRCLRSA2          (0x74) // RGB 3 rd frame start ads
 | 
						|
+#define S3C2440_CAM_REG_CIPRCLRSA3          (0x78) // RGB 4 th frame start ads
 | 
						|
+#define S3C2440_CAM_REG_CIPRTRGFMT          (0x7C) // Target img fmt of preview
 | 
						|
+#define S3C2440_CAM_REG_CIPRCTRL            (0x80) // Preview DMA ctl related
 | 
						|
+#define S3C2440_CAM_REG_CIPRSCPRERATIO      (0x84) // Preview pre-scaler ratio
 | 
						|
+#define S3C2440_CAM_REG_CIPRSCPREDST        (0x88) // Preview pre-scaler dest
 | 
						|
+#define S3C2440_CAM_REG_CIPRSCCTRL          (0x8C) // Preview main-scaler ctl
 | 
						|
+#define S3C2440_CAM_REG_CIPRTAREA           (0x90) // Preview pre-scaler dest
 | 
						|
+#define S3C2440_CAM_REG_CIPRSTATUS          (0x98) // Preview path status
 | 
						|
+#define S3C2440_CAM_REG_CIIMGCPT            (0xA0) // Image capture enable cmd
 | 
						|
+
 | 
						|
+#define S3C2440_CAM_REG_CICOYSA(__x)        (0x18 + (__x)*4 )
 | 
						|
+#define S3C2440_CAM_REG_CICOCBSA(__x)       (0x28 + (__x)*4 )
 | 
						|
+#define S3C2440_CAM_REG_CICOCRSA(__x)       (0x38 + (__x)*4 )
 | 
						|
+#define S3C2440_CAM_REG_CIPRCLRSA(__x)      (0x6C + (__x)*4 )
 | 
						|
 
 | 
						|
 /* CISRCFMT BitField */
 | 
						|
 #define SRCFMT_ITU601       BIT31
 | 
						|
diff --git a/arch/arm/mach-s3c2440/camera/camif.c b/arch/arm/mach-s3c2440/camera/camif.c
 | 
						|
index 36d4ccc..2e97e21 100644
 | 
						|
--- a/arch/arm/mach-s3c2440/camera/camif.c
 | 
						|
+++ b/arch/arm/mach-s3c2440/camera/camif.c
 | 
						|
@@ -7,14 +7,11 @@
 | 
						|
  * for more details.
 | 
						|
  */
 | 
						|
 
 | 
						|
-#include <linux/config.h>
 | 
						|
 #include <linux/module.h>
 | 
						|
 #include <linux/kernel.h>
 | 
						|
 #include <linux/init.h>
 | 
						|
 #include <linux/sched.h>
 | 
						|
 #include <linux/irq.h>
 | 
						|
-#include <linux/tqueue.h>
 | 
						|
-#include <linux/locks.h>
 | 
						|
 #include <linux/completion.h>
 | 
						|
 #include <linux/delay.h>
 | 
						|
 #include <linux/slab.h>
 | 
						|
@@ -26,28 +23,29 @@
 | 
						|
 #include <asm/semaphore.h>
 | 
						|
 #include <asm/hardware.h>
 | 
						|
 #include <asm/uaccess.h>
 | 
						|
+#include <linux/device.h>
 | 
						|
+#include <linux/dma-mapping.h>
 | 
						|
+#include <linux/clk.h>
 | 
						|
 
 | 
						|
 #ifdef CONFIG_ARCH_S3C24A0A
 | 
						|
 #include <asm/arch/S3C24A0.h>
 | 
						|
 #include <asm/arch/clocks.h>
 | 
						|
 #else
 | 
						|
-#include <asm/arch/S3C2440.h>
 | 
						|
-#include <asm/arch/clocks.h>
 | 
						|
+#include <asm/arch/regs-gpio.h>
 | 
						|
+#include <asm/arch/regs-gpioj.h>
 | 
						|
+#include <asm/arch/regs-irq.h>
 | 
						|
 #endif
 | 
						|
 
 | 
						|
 #include "cam_reg.h"
 | 
						|
 //#define SW_DEBUG
 | 
						|
+#define CONFIG_VIDEO_V4L1_COMPAT
 | 
						|
+#include <linux/videodev.h>
 | 
						|
 #include "camif.h"
 | 
						|
-#include "videodev.h"
 | 
						|
 #include "miscdevice.h"
 | 
						|
 
 | 
						|
-
 | 
						|
 static int camif_dma_burst(camif_cfg_t *);
 | 
						|
 static int camif_scaler(camif_cfg_t *);
 | 
						|
 
 | 
						|
-static const char *camif_version =
 | 
						|
-        "$Id: camif.c,v 1.10 2004/06/04 04:24:14 swlee Exp $";
 | 
						|
-	
 | 
						|
 /* For SXGA Image */
 | 
						|
 #define RESERVE_MEM  15*1024*1024
 | 
						|
 #define YUV_MEM      10*1024*1024
 | 
						|
@@ -66,11 +64,13 @@ static int camif_malloc(camif_cfg_t *cfg)
 | 
						|
 		t_size = t_size *cfg->pp_num;
 | 
						|
 
 | 
						|
 #ifndef SAMSUNG_SXGA_CAM
 | 
						|
-		cfg->pp_virt_buf = consistent_alloc(GFP_KERNEL, t_size, &cfg->pp_phys_buf);
 | 
						|
+		cfg->pp_virt_buf = dma_alloc_coherent(cfg->v->dev,
 | 
						|
+						      t_size, &cfg->pp_phys_buf,
 | 
						|
+						      GFP_KERNEL);
 | 
						|
 #else
 | 
						|
 		printk(KERN_INFO "Reserving High RAM Addresses \n");
 | 
						|
 		cfg->pp_phys_buf = PHYS_OFFSET + (MEM_SIZE - RESERVE_MEM);
 | 
						|
-		cfg->pp_virt_buf = ioremap_nocache(cfg->pp_phys_buf,YUV_MEM);
 | 
						|
+		cfg->pp_virt_buf = ioremap_nocache(cfg->pp_phys_buf, YUV_MEM);
 | 
						|
 #endif
 | 
						|
 
 | 
						|
 		if ( !cfg->pp_virt_buf ) {
 | 
						|
@@ -90,7 +90,9 @@ static int camif_malloc(camif_cfg_t *cfg)
 | 
						|
 		}
 | 
						|
 		t_size = t_size * cfg->pp_num;
 | 
						|
 #ifndef SAMSUNG_SXGA_CAM
 | 
						|
-		cfg->pp_virt_buf = consistent_alloc(GFP_KERNEL, t_size, &cfg->pp_phys_buf);
 | 
						|
+		cfg->pp_virt_buf = dma_alloc_coherent(cfg->v->dev,
 | 
						|
+						      t_size, &cfg->pp_phys_buf,
 | 
						|
+						      GFP_KERNEL);
 | 
						|
 #else
 | 
						|
 		printk(KERN_INFO "Reserving High RAM Addresses \n");
 | 
						|
 		cfg->pp_phys_buf = PHYS_OFFSET + (MEM_SIZE - RESERVE_MEM ) + YUV_MEM;
 | 
						|
@@ -112,7 +114,8 @@ static int camif_demalloc(camif_cfg_t *cfg)
 | 
						|
 {
 | 
						|
 #ifndef SAMSUNG_SXGA_CAM
 | 
						|
 	if ( cfg->pp_virt_buf ) {
 | 
						|
-		consistent_free(cfg->pp_virt_buf,cfg->pp_totalsize,cfg->pp_phys_buf);
 | 
						|
+		dma_free_coherent(cfg->v->dev, cfg->pp_totalsize,
 | 
						|
+				  cfg->pp_virt_buf, cfg->pp_phys_buf);
 | 
						|
 		cfg->pp_virt_buf = 0;
 | 
						|
 	}
 | 
						|
 #else
 | 
						|
@@ -131,13 +134,14 @@ int camif_g_frame_num(camif_cfg_t *cfg)
 | 
						|
 	int index = 0;
 | 
						|
 
 | 
						|
 	if (cfg->dma_type & CAMIF_CODEC ) {
 | 
						|
-		index = FRAME_CNT(CICOSTATUS);
 | 
						|
+		index = FRAME_CNT(readl(camregs + S3C2440_CAM_REG_CICOSTATUS));
 | 
						|
 		DPRINTK("CAMIF_CODEC frame %d \n", index);
 | 
						|
 	}
 | 
						|
 	else {
 | 
						|
 		assert(cfg->dma_type & CAMIF_PREVIEW );
 | 
						|
-		index = FRAME_CNT(CIPRSTATUS);
 | 
						|
-		DPRINTK("CAMIF_PREVIEW frame %d  0x%08X \n", index, CIPRSTATUS);
 | 
						|
+		index = FRAME_CNT(readl(camregs + S3C2440_CAM_REG_CIPRSTATUS));
 | 
						|
+		DPRINTK("CAMIF_PREVIEW frame %d  0x%08X \n", index,
 | 
						|
+			readl(camregs + S3C2440_CAM_REG_CIPRSTATUS));
 | 
						|
 	}
 | 
						|
 	cfg->now_frame_num = (index + 2) % 4; /* When 4 PingPong */
 | 
						|
 	return index; /* meaningless */
 | 
						|
@@ -148,60 +152,59 @@ static int camif_pp_codec(camif_cfg_t *cfg)
 | 
						|
 	u32 i, c_size; /* Cb,Cr size */
 | 
						|
 	u32 one_p_size;
 | 
						|
 	u32 daon = cfg->target_x * cfg->target_y;
 | 
						|
-	if (cfg->fmt & CAMIF_OUT_YCBCR420) {
 | 
						|
-		c_size = daon /4;
 | 
						|
-	}
 | 
						|
+	if (cfg->fmt & CAMIF_OUT_YCBCR420)
 | 
						|
+		c_size = daon / 4;
 | 
						|
 	else {
 | 
						|
 		assert(cfg->fmt & CAMIF_OUT_YCBCR422);
 | 
						|
-		c_size = daon /2;
 | 
						|
+		c_size = daon / 2;
 | 
						|
 	}
 | 
						|
 	switch ( cfg->pp_num ) {
 | 
						|
-		case 1 :
 | 
						|
-			for ( i =0 ; i < 4; i=i+1) {
 | 
						|
-				cfg->img_buf[i].virt_y = cfg->pp_virt_buf;
 | 
						|
-				cfg->img_buf[i].phys_y = cfg->pp_phys_buf;
 | 
						|
-				cfg->img_buf[i].virt_cb = cfg->pp_virt_buf + daon; 
 | 
						|
-				cfg->img_buf[i].phys_cb = cfg->pp_phys_buf + daon;
 | 
						|
-				cfg->img_buf[i].virt_cr = cfg->pp_virt_buf + daon + c_size;
 | 
						|
-				cfg->img_buf[i].phys_cr = cfg->pp_phys_buf + daon + c_size;
 | 
						|
-				CICOYSA(i)  =  cfg->img_buf[i].phys_y;
 | 
						|
-				CICOCBSA(i) =  cfg->img_buf[i].phys_cb;
 | 
						|
-				CICOCRSA(i) =  cfg->img_buf[i].phys_cr;
 | 
						|
-			}
 | 
						|
-			break;
 | 
						|
-		case 2:
 | 
						|
+	case 1 :
 | 
						|
+		for (i =0 ; i < 4; i++) {
 | 
						|
+			cfg->img_buf[i].virt_y = cfg->pp_virt_buf;
 | 
						|
+			cfg->img_buf[i].phys_y = cfg->pp_phys_buf;
 | 
						|
+			cfg->img_buf[i].virt_cb = cfg->pp_virt_buf + daon;
 | 
						|
+			cfg->img_buf[i].phys_cb = cfg->pp_phys_buf + daon;
 | 
						|
+			cfg->img_buf[i].virt_cr = cfg->pp_virt_buf + daon + c_size;
 | 
						|
+			cfg->img_buf[i].phys_cr = cfg->pp_phys_buf + daon + c_size;
 | 
						|
+			writel(cfg->img_buf[i].phys_y, camregs + S3C2440_CAM_REG_CICOYSA(i));
 | 
						|
+			writel(cfg->img_buf[i].phys_cb, camregs + S3C2440_CAM_REG_CICOCBSA(i));
 | 
						|
+			writel(cfg->img_buf[i].phys_cr, camregs + S3C2440_CAM_REG_CICOCRSA(i));
 | 
						|
+		}
 | 
						|
+		break;
 | 
						|
+	case 2:
 | 
						|
 #define  TRY   (( i%2 ) ? 1 :0)
 | 
						|
-			one_p_size = daon + 2*c_size;
 | 
						|
-			for (i = 0; i < 4  ; i++) {
 | 
						|
-				cfg->img_buf[i].virt_y = cfg->pp_virt_buf + TRY * one_p_size;
 | 
						|
-				cfg->img_buf[i].phys_y = cfg->pp_phys_buf + TRY * one_p_size;
 | 
						|
-				cfg->img_buf[i].virt_cb = cfg->pp_virt_buf + daon + TRY * one_p_size;
 | 
						|
-				cfg->img_buf[i].phys_cb = cfg->pp_phys_buf + daon + TRY * one_p_size;
 | 
						|
-				cfg->img_buf[i].virt_cr = cfg->pp_virt_buf + daon + c_size + TRY * one_p_size;
 | 
						|
-				cfg->img_buf[i].phys_cr = cfg->pp_phys_buf + daon + c_size + TRY * one_p_size;
 | 
						|
-				CICOYSA(i)  = cfg->img_buf[i].phys_y;
 | 
						|
-				CICOCBSA(i) = cfg->img_buf[i].phys_cb;
 | 
						|
-				CICOCRSA(i) = cfg->img_buf[i].phys_cr;
 | 
						|
-			}
 | 
						|
-			break;
 | 
						|
-		case 4: 
 | 
						|
-			one_p_size = daon + 2*c_size;
 | 
						|
-			for (i = 0; i < 4 ; i++) {
 | 
						|
-				cfg->img_buf[i].virt_y = cfg->pp_virt_buf + i * one_p_size;
 | 
						|
-				cfg->img_buf[i].phys_y = cfg->pp_phys_buf + i * one_p_size;
 | 
						|
-				cfg->img_buf[i].virt_cb = cfg->pp_virt_buf + daon + i * one_p_size;
 | 
						|
-				cfg->img_buf[i].phys_cb = cfg->pp_phys_buf + daon + i * one_p_size;
 | 
						|
-				cfg->img_buf[i].virt_cr = cfg->pp_virt_buf + daon + c_size + i * one_p_size;
 | 
						|
-				cfg->img_buf[i].phys_cr = cfg->pp_phys_buf + daon + c_size + i * one_p_size;
 | 
						|
-				CICOYSA(i)  =  cfg->img_buf[i].phys_y;
 | 
						|
-				CICOCBSA(i) =  cfg->img_buf[i].phys_cb;
 | 
						|
-				CICOCRSA(i) =  cfg->img_buf[i].phys_cr;
 | 
						|
-			}
 | 
						|
-			break;
 | 
						|
-		default:
 | 
						|
-			printk("Invalid PingPong Number %d \n",cfg->pp_num);
 | 
						|
-			panic("halt\n");
 | 
						|
-	}
 | 
						|
+		one_p_size = daon + 2*c_size;
 | 
						|
+		for (i = 0; i < 4  ; i++) {
 | 
						|
+			cfg->img_buf[i].virt_y = cfg->pp_virt_buf + TRY * one_p_size;
 | 
						|
+			cfg->img_buf[i].phys_y = cfg->pp_phys_buf + TRY * one_p_size;
 | 
						|
+			cfg->img_buf[i].virt_cb = cfg->pp_virt_buf + daon + TRY * one_p_size;
 | 
						|
+			cfg->img_buf[i].phys_cb = cfg->pp_phys_buf + daon + TRY * one_p_size;
 | 
						|
+			cfg->img_buf[i].virt_cr = cfg->pp_virt_buf + daon + c_size + TRY * one_p_size;
 | 
						|
+			cfg->img_buf[i].phys_cr = cfg->pp_phys_buf + daon + c_size + TRY * one_p_size;
 | 
						|
+			writel(cfg->img_buf[i].phys_y, camregs + S3C2440_CAM_REG_CICOYSA(i));
 | 
						|
+			writel(cfg->img_buf[i].phys_cb, camregs + S3C2440_CAM_REG_CICOCBSA(i));
 | 
						|
+			writel(cfg->img_buf[i].phys_cr, camregs + S3C2440_CAM_REG_CICOCRSA(i));
 | 
						|
+		}
 | 
						|
+		break;
 | 
						|
+	case 4:
 | 
						|
+		one_p_size = daon + 2*c_size;
 | 
						|
+		for (i = 0; i < 4 ; i++) {
 | 
						|
+			cfg->img_buf[i].virt_y = cfg->pp_virt_buf + i * one_p_size;
 | 
						|
+			cfg->img_buf[i].phys_y = cfg->pp_phys_buf + i * one_p_size;
 | 
						|
+			cfg->img_buf[i].virt_cb = cfg->pp_virt_buf + daon + i * one_p_size;
 | 
						|
+			cfg->img_buf[i].phys_cb = cfg->pp_phys_buf + daon + i * one_p_size;
 | 
						|
+			cfg->img_buf[i].virt_cr = cfg->pp_virt_buf + daon + c_size + i * one_p_size;
 | 
						|
+			cfg->img_buf[i].phys_cr = cfg->pp_phys_buf + daon + c_size + i * one_p_size;
 | 
						|
+			writel(cfg->img_buf[i].phys_y, camregs + S3C2440_CAM_REG_CICOYSA(i));
 | 
						|
+			writel(cfg->img_buf[i].phys_cb, camregs + S3C2440_CAM_REG_CICOCBSA(i));
 | 
						|
+			writel(cfg->img_buf[i].phys_cr, camregs + S3C2440_CAM_REG_CICOCRSA(i));
 | 
						|
+		}
 | 
						|
+		break;
 | 
						|
+	default:
 | 
						|
+		printk("Invalid PingPong Number %d \n",cfg->pp_num);
 | 
						|
+		panic("halt\n");
 | 
						|
+}
 | 
						|
 	return 0;
 | 
						|
 }
 | 
						|
 
 | 
						|
@@ -222,21 +225,21 @@ static int camif_pp_preview(camif_cfg_t *cfg)
 | 
						|
 			for ( i = 0; i < 4 ; i++ ) {
 | 
						|
 				cfg->img_buf[i].virt_rgb = cfg->pp_virt_buf ;
 | 
						|
 				cfg->img_buf[i].phys_rgb = cfg->pp_phys_buf ;
 | 
						|
-				CIPRCLRSA(i) = cfg->img_buf[i].phys_rgb;
 | 
						|
+				writel(cfg->img_buf[i].phys_rgb, camregs + S3C2440_CAM_REG_CICOCRSA(i));
 | 
						|
 			}
 | 
						|
 			break;
 | 
						|
 		case 2:
 | 
						|
 			for ( i = 0; i < 4 ; i++) {
 | 
						|
 				cfg->img_buf[i].virt_rgb = cfg->pp_virt_buf + TRY * daon;
 | 
						|
 				cfg->img_buf[i].phys_rgb = cfg->pp_phys_buf + TRY * daon;
 | 
						|
-				CIPRCLRSA(i) = cfg->img_buf[i].phys_rgb;
 | 
						|
+				writel(cfg->img_buf[i].phys_rgb, camregs + S3C2440_CAM_REG_CICOCRSA(i));
 | 
						|
 			}
 | 
						|
 			break;
 | 
						|
 		case 4:
 | 
						|
 			for ( i = 0; i < 4 ; i++) {
 | 
						|
 				cfg->img_buf[i].virt_rgb = cfg->pp_virt_buf + i * daon;
 | 
						|
 				cfg->img_buf[i].phys_rgb = cfg->pp_phys_buf + i * daon;
 | 
						|
-				CIPRCLRSA(i) = cfg->img_buf[i].phys_rgb;
 | 
						|
+				writel(cfg->img_buf[i].phys_rgb, camregs + S3C2440_CAM_REG_CICOCRSA(i));
 | 
						|
 			}
 | 
						|
 			break;
 | 
						|
 		default:
 | 
						|
@@ -308,7 +311,7 @@ static int camif_source_fmt(camif_gc_t *gc)
 | 
						|
 	cmd  |= SOURCE_HSIZE(gc->source_x)| SOURCE_VSIZE(gc->source_y);
 | 
						|
 	/* Order422 */
 | 
						|
 	cmd |=  gc->order422;
 | 
						|
-	CISRCFMT = cmd;
 | 
						|
+	writel(cmd, camregs + S3C2440_CAM_REG_CISRCFMT);
 | 
						|
 
 | 
						|
 	return 0 ;
 | 
						|
 }
 | 
						|
@@ -331,33 +334,24 @@ static int camif_target_fmt(camif_cfg_t *cfg)
 | 
						|
 			assert(cfg->fmt & CAMIF_OUT_YCBCR422);
 | 
						|
 			cmd |= OUT_YCBCR422|IN_YCBCR422;
 | 
						|
 		}
 | 
						|
-		CICOTRGFMT = cmd | cfg->flip;
 | 
						|
-	} 
 | 
						|
-	else {
 | 
						|
+		writel(cmd | cfg->flip, camregs + S3C2440_CAM_REG_CICOTRGFMT);
 | 
						|
+
 | 
						|
+	} else {
 | 
						|
 		assert(cfg->dma_type & CAMIF_PREVIEW);
 | 
						|
-		CIPRTRGFMT = 
 | 
						|
-			TARGET_HSIZE(cfg->target_x)|TARGET_VSIZE(cfg->target_y)|cfg->flip;
 | 
						|
+		writel(TARGET_HSIZE(cfg->target_x)|TARGET_VSIZE(cfg->target_y)|cfg->flip,
 | 
						|
+			camregs + S3C2440_CAM_REG_CIPRTRGFMT); 
 | 
						|
 	}
 | 
						|
 	return 0;
 | 
						|
 }
 | 
						|
 
 | 
						|
 void camif_change_flip(camif_cfg_t *cfg)
 | 
						|
 {
 | 
						|
-	u32 cmd = 0;
 | 
						|
+	u32 cmd = readl(camregs + S3C2440_CAM_REG_CICOTRGFMT);
 | 
						|
 
 | 
						|
-	if (cfg->dma_type & CAMIF_CODEC ) {
 | 
						|
-		/* YCBCR setting */  
 | 
						|
-		cmd  = CICOTRGFMT;
 | 
						|
-		cmd &= ~(BIT14|BIT15); /* Clear FLIP Mode */
 | 
						|
-		cmd |= cfg->flip; 
 | 
						|
-		CICOTRGFMT = cmd;
 | 
						|
-	} 
 | 
						|
-	else {
 | 
						|
-		cmd  = CIPRTRGFMT;
 | 
						|
-		cmd &= ~(BIT14|BIT15);
 | 
						|
-		cmd |= cfg->flip;
 | 
						|
-		CICOTRGFMT = cmd; 
 | 
						|
-	}
 | 
						|
+	cmd &= ~(BIT14|BIT15);
 | 
						|
+	cmd |= cfg->flip;
 | 
						|
+
 | 
						|
+	writel(cmd, camregs + S3C2440_CAM_REG_CICOTRGFMT);
 | 
						|
 }
 | 
						|
 
 | 
						|
 
 | 
						|
@@ -373,70 +367,81 @@ int camif_capture_start(camif_cfg_t *cfg)
 | 
						|
 	u32 n_cmd = 0;		/* Next Command */
 | 
						|
 
 | 
						|
 	switch(cfg->exec) {
 | 
						|
-		case CAMIF_BOTH_DMA_ON:
 | 
						|
-			camif_reset(CAMIF_RESET,0); /* Flush Camera Core Buffer */		
 | 
						|
-			CIPRSCCTRL |= SCALERSTART;
 | 
						|
-			CICOSCCTRL |= SCALERSTART;
 | 
						|
-			n_cmd = CAMIF_CAP_PREVIEW_ON|CAMIF_CAP_CODEC_ON;
 | 
						|
-			break;
 | 
						|
-		case CAMIF_DMA_ON:
 | 
						|
-			camif_reset(CAMIF_RESET,0); /* Flush Camera Core Buffer */		
 | 
						|
-			if (cfg->dma_type&CAMIF_CODEC) {
 | 
						|
-				CICOSCCTRL |= SCALERSTART;
 | 
						|
-				n_cmd = CAMIF_CAP_CODEC_ON;
 | 
						|
-			}else {
 | 
						|
-				CIPRSCCTRL |= SCALERSTART;
 | 
						|
-				n_cmd = CAMIF_CAP_PREVIEW_ON;
 | 
						|
-			}
 | 
						|
+	case CAMIF_BOTH_DMA_ON:
 | 
						|
+		camif_reset(CAMIF_RESET, 0); /* Flush Camera Core Buffer */
 | 
						|
+		writel(readl(camregs + S3C2440_CAM_REG_CIPRSCCTRL) |
 | 
						|
+			     SCALERSTART, camregs + S3C2440_CAM_REG_CIPRSCCTRL);
 | 
						|
+		writel(readl(camregs + S3C2440_CAM_REG_CICOSCCTRL) |
 | 
						|
+			     SCALERSTART, camregs + S3C2440_CAM_REG_CICOSCCTRL);
 | 
						|
+		n_cmd = CAMIF_CAP_PREVIEW_ON | CAMIF_CAP_CODEC_ON;
 | 
						|
+		break;
 | 
						|
+	case CAMIF_DMA_ON:
 | 
						|
+		camif_reset(CAMIF_RESET, 0); /* Flush Camera Core Buffer */
 | 
						|
+		if (cfg->dma_type&CAMIF_CODEC) {
 | 
						|
+			writel(readl(camregs + S3C2440_CAM_REG_CICOSCCTRL) |
 | 
						|
+			     SCALERSTART, camregs + S3C2440_CAM_REG_CICOSCCTRL);
 | 
						|
+			n_cmd = CAMIF_CAP_CODEC_ON;
 | 
						|
+		} else {
 | 
						|
+			writel(readl(camregs + S3C2440_CAM_REG_CIPRSCCTRL) |
 | 
						|
+			     SCALERSTART, camregs + S3C2440_CAM_REG_CIPRSCCTRL);
 | 
						|
+			n_cmd = CAMIF_CAP_PREVIEW_ON;
 | 
						|
+		}
 | 
						|
 
 | 
						|
-			/* wait until Sync Time expires */
 | 
						|
-			/* First settting, to wait VSYNC fall  */
 | 
						|
-			/* By VESA spec,in 640x480 @60Hz 
 | 
						|
-			   MAX Delay Time is around 64us which "while" has.*/ 
 | 
						|
-			while(VSYNC & CICOSTATUS);
 | 
						|
-			break;
 | 
						|
-		default:
 | 
						|
-			break;
 | 
						|
-	}
 | 
						|
-	CIIMGCPT = n_cmd|CAMIF_CAP_ON;
 | 
						|
+		/* wait until Sync Time expires */
 | 
						|
+		/* First settting, to wait VSYNC fall  */
 | 
						|
+		/* By VESA spec,in 640x480 @60Hz
 | 
						|
+			MAX Delay Time is around 64us which "while" has.*/
 | 
						|
+		while(VSYNC & readl(camregs + S3C2440_CAM_REG_CICOSTATUS));
 | 
						|
+		break;
 | 
						|
+	default:
 | 
						|
+		break;
 | 
						|
+}
 | 
						|
+	writel(n_cmd | CAMIF_CAP_ON, camregs + S3C2440_CAM_REG_CIIMGCPT); 
 | 
						|
 	return 0;
 | 
						|
 }
 | 
						|
 
 | 
						|
 
 | 
						|
 int camif_capture_stop(camif_cfg_t *cfg)
 | 
						|
 {
 | 
						|
-	u32 n_cmd = CIIMGCPT;	/* Next Command */
 | 
						|
+	u32 n_cmd = readl(camregs + S3C2440_CAM_REG_CIIMGCPT);	/* Next Command */
 | 
						|
 
 | 
						|
 	switch(cfg->exec) {
 | 
						|
-		case CAMIF_BOTH_DMA_OFF:
 | 
						|
-			CIPRSCCTRL &= ~SCALERSTART;
 | 
						|
-			CICOSCCTRL &= ~SCALERSTART;
 | 
						|
-			n_cmd = 0;
 | 
						|
-			break;
 | 
						|
-		case CAMIF_DMA_OFF_L_IRQ: /* fall thru */
 | 
						|
-		case CAMIF_DMA_OFF:
 | 
						|
-			if (cfg->dma_type&CAMIF_CODEC) {
 | 
						|
-				CICOSCCTRL &= ~SCALERSTART;
 | 
						|
-				n_cmd &= ~CAMIF_CAP_CODEC_ON;
 | 
						|
-				if (!(n_cmd & CAMIF_CAP_PREVIEW_ON))
 | 
						|
-					n_cmd = 0;
 | 
						|
-			}else {
 | 
						|
-				CIPRSCCTRL &= ~SCALERSTART;
 | 
						|
-				n_cmd &= ~CAMIF_CAP_PREVIEW_ON;
 | 
						|
-				if (!(n_cmd & CAMIF_CAP_CODEC_ON))
 | 
						|
-					n_cmd = 0;
 | 
						|
-			}
 | 
						|
-			break;
 | 
						|
-		default:
 | 
						|
-			panic("Unexpected \n");
 | 
						|
-	}
 | 
						|
-	CIIMGCPT = n_cmd;
 | 
						|
-	if(cfg->exec == CAMIF_DMA_OFF_L_IRQ) { /* Last IRQ  */
 | 
						|
-		if (cfg->dma_type & CAMIF_CODEC) 
 | 
						|
-			CICOCTRL |= LAST_IRQ_EN;
 | 
						|
-		else 
 | 
						|
-			CIPRCTRL |= LAST_IRQ_EN;
 | 
						|
-	} 
 | 
						|
+	case CAMIF_BOTH_DMA_OFF:
 | 
						|
+		writel(readl(camregs + S3C2440_CAM_REG_CIPRSCCTRL) &
 | 
						|
+			~SCALERSTART, camregs + S3C2440_CAM_REG_CIPRSCCTRL);
 | 
						|
+		writel(readl(camregs + S3C2440_CAM_REG_CICOSCCTRL) &
 | 
						|
+			~SCALERSTART, camregs + S3C2440_CAM_REG_CICOSCCTRL);
 | 
						|
+		n_cmd = 0;
 | 
						|
+		break;
 | 
						|
+	case CAMIF_DMA_OFF_L_IRQ: /* fall thru */
 | 
						|
+	case CAMIF_DMA_OFF:
 | 
						|
+		if (cfg->dma_type&CAMIF_CODEC) {
 | 
						|
+			writel(readl(camregs + S3C2440_CAM_REG_CICOSCCTRL) &
 | 
						|
+			    ~SCALERSTART, camregs + S3C2440_CAM_REG_CICOSCCTRL);
 | 
						|
+			n_cmd &= ~CAMIF_CAP_CODEC_ON;
 | 
						|
+			if (!(n_cmd & CAMIF_CAP_PREVIEW_ON))
 | 
						|
+				n_cmd = 0;
 | 
						|
+		} else {
 | 
						|
+			writel(readl(camregs + S3C2440_CAM_REG_CIPRSCCTRL) &
 | 
						|
+			    ~SCALERSTART, camregs + S3C2440_CAM_REG_CIPRSCCTRL);
 | 
						|
+			n_cmd &= ~CAMIF_CAP_PREVIEW_ON;
 | 
						|
+			if (!(n_cmd & CAMIF_CAP_CODEC_ON))
 | 
						|
+				n_cmd = 0;
 | 
						|
+		}
 | 
						|
+		break;
 | 
						|
+	default:
 | 
						|
+		panic("Unexpected \n");
 | 
						|
+	}
 | 
						|
+	writel(n_cmd, camregs + S3C2440_CAM_REG_CIIMGCPT);
 | 
						|
+
 | 
						|
+	if (cfg->exec == CAMIF_DMA_OFF_L_IRQ) { /* Last IRQ  */
 | 
						|
+		if (cfg->dma_type & CAMIF_CODEC)
 | 
						|
+			writel(readl(camregs + S3C2440_CAM_REG_CICOCTRL) |
 | 
						|
+			     LAST_IRQ_EN, camregs + S3C2440_CAM_REG_CICOCTRL);
 | 
						|
+		else
 | 
						|
+			writel(readl(camregs + S3C2440_CAM_REG_CIPRCTRL) |
 | 
						|
+			     LAST_IRQ_EN, camregs + S3C2440_CAM_REG_CIPRCTRL);
 | 
						|
+	}
 | 
						|
 #if 0
 | 
						|
 	else {				/* to make internal state machine of CAMERA stop */
 | 
						|
 		camif_reset(CAMIF_RESET, 0);
 | 
						|
@@ -449,16 +454,13 @@ int camif_capture_stop(camif_cfg_t *cfg)
 | 
						|
 /* LastIRQEn is autoclear */
 | 
						|
 void camif_last_irq_en(camif_cfg_t *cfg)
 | 
						|
 {
 | 
						|
-	if(cfg->exec == CAMIF_BOTH_DMA_ON) {
 | 
						|
-		CIPRCTRL |= LAST_IRQ_EN;
 | 
						|
-		CICOCTRL |= LAST_IRQ_EN;
 | 
						|
-	}
 | 
						|
-	else {
 | 
						|
-		if (cfg->dma_type & CAMIF_CODEC) 
 | 
						|
-			CICOCTRL |= LAST_IRQ_EN;
 | 
						|
-		else 
 | 
						|
-			CIPRCTRL |= LAST_IRQ_EN;
 | 
						|
-	}
 | 
						|
+	if ((cfg->exec == CAMIF_BOTH_DMA_ON) || (cfg->dma_type & CAMIF_CODEC))
 | 
						|
+		writel(readl(camregs + S3C2440_CAM_REG_CICOCTRL) |
 | 
						|
+			LAST_IRQ_EN, camregs + S3C2440_CAM_REG_CICOCTRL);
 | 
						|
+
 | 
						|
+	if ((cfg->exec == CAMIF_BOTH_DMA_ON) || !(cfg->dma_type & CAMIF_CODEC))
 | 
						|
+		writel(readl(camregs + S3C2440_CAM_REG_CIPRCTRL) |
 | 
						|
+			LAST_IRQ_EN, camregs + S3C2440_CAM_REG_CIPRCTRL);
 | 
						|
 }
 | 
						|
 
 | 
						|
 static int  
 | 
						|
@@ -502,23 +504,33 @@ int camif_g_fifo_status(camif_cfg_t *cfg)
 | 
						|
 	u32 reg;
 | 
						|
 
 | 
						|
 	if (cfg->dma_type & CAMIF_CODEC) {
 | 
						|
-		u32 flag = CO_OVERFLOW_Y|CO_OVERFLOW_CB|CO_OVERFLOW_CR;
 | 
						|
-		reg = CICOSTATUS;
 | 
						|
+		u32 flag = CO_OVERFLOW_Y | CO_OVERFLOW_CB | CO_OVERFLOW_CR;
 | 
						|
+		reg = readl(camregs + S3C2440_CAM_REG_CICOSTATUS);
 | 
						|
 		if (reg & flag) {
 | 
						|
 			printk("CODEC: FIFO error(0x%08x) and corrected\n",reg);
 | 
						|
 			/* FIFO Error Count ++  */
 | 
						|
-			CIWDOFST |= CO_FIFO_Y|CO_FIFO_CB|CO_FIFO_CR;
 | 
						|
-			CIWDOFST &= ~(CO_FIFO_Y|CO_FIFO_CB|CO_FIFO_CR);
 | 
						|
+			writel(readl(camregs + S3C2440_CAM_REG_CIWDOFST) |
 | 
						|
+				CO_FIFO_Y | CO_FIFO_CB | CO_FIFO_CR,
 | 
						|
+				camregs + S3C2440_CAM_REG_CIWDOFST);
 | 
						|
+
 | 
						|
+			writel(readl(camregs + S3C2440_CAM_REG_CIWDOFST) &
 | 
						|
+				~(CO_FIFO_Y | CO_FIFO_CB | CO_FIFO_CR),
 | 
						|
+				camregs + S3C2440_CAM_REG_CIWDOFST);
 | 
						|
 			return 1; /* Error */
 | 
						|
 		}
 | 
						|
 	}
 | 
						|
 	if (cfg->dma_type & CAMIF_PREVIEW) {
 | 
						|
-		u32 flag = PR_OVERFLOW_CB|PR_OVERFLOW_CR;
 | 
						|
-		reg = CIPRSTATUS;
 | 
						|
+		u32 flag = PR_OVERFLOW_CB | PR_OVERFLOW_CR;
 | 
						|
+		reg = readl(camregs + S3C2440_CAM_REG_CIPRSTATUS);
 | 
						|
 		if (reg & flag) {
 | 
						|
 			printk("PREVIEW:FIFO error(0x%08x) and corrected\n",reg);
 | 
						|
-			CIWDOFST |= PR_FIFO_CB|PR_FIFO_CR;
 | 
						|
-			CIWDOFST &= ~(CO_FIFO_Y|CO_FIFO_CB|CO_FIFO_CR);
 | 
						|
+			writel(readl(camregs + S3C2440_CAM_REG_CIWDOFST) |
 | 
						|
+				CO_FIFO_CB | CO_FIFO_CR,
 | 
						|
+				camregs + S3C2440_CAM_REG_CIWDOFST);
 | 
						|
+
 | 
						|
+			writel(readl(camregs + S3C2440_CAM_REG_CIWDOFST) &
 | 
						|
+				~(CO_FIFO_Y | CO_FIFO_CB | CO_FIFO_CR),
 | 
						|
+				camregs + S3C2440_CAM_REG_CIWDOFST);
 | 
						|
 			/* FIFO Error Count ++  */
 | 
						|
 			return 1; /* Error */
 | 
						|
 		}
 | 
						|
@@ -537,13 +549,16 @@ int camif_win_offset(camif_gc_t *gc )
 | 
						|
 	u32 v = gc->win_ver_ofst;
 | 
						|
 
 | 
						|
 	/*Clear Overflow */
 | 
						|
-	CIWDOFST = CO_FIFO_Y|CO_FIFO_CB|CO_FIFO_CR|PR_FIFO_CB|PR_FIFO_CB;
 | 
						|
-	CIWDOFST = 0;		/* ? Dummy */
 | 
						|
+	writel(CO_FIFO_Y | CO_FIFO_CB | CO_FIFO_CR | PR_FIFO_CB | PR_FIFO_CB,
 | 
						|
+		camregs + S3C2440_CAM_REG_CIWDOFST);
 | 
						|
+	writel(0, camregs + S3C2440_CAM_REG_CIWDOFST);
 | 
						|
+
 | 
						|
 	if (!h && !v)	{
 | 
						|
-		CIWDOFST = 0;
 | 
						|
+		writel(0, camregs + S3C2440_CAM_REG_CIWDOFST);
 | 
						|
 		return 0;
 | 
						|
 	}
 | 
						|
-	CIWDOFST = WINOFEN | WINHOROFST(h) | WINVEROFST(v);
 | 
						|
+
 | 
						|
+	writel(WINOFEN | WINHOROFST(h) | WINVEROFST(v), camregs + S3C2440_CAM_REG_CIWDOFST);
 | 
						|
 	return 0;
 | 
						|
 }
 | 
						|
 
 | 
						|
@@ -554,7 +569,7 @@ int camif_win_offset(camif_gc_t *gc )
 | 
						|
  */
 | 
						|
 static void camif_polarity(camif_gc_t *gc)
 | 
						|
 {
 | 
						|
-	u32 cmd = CIGCTRL;
 | 
						|
+	u32 cmd = readl(camregs + S3C2440_CAM_REG_CIGCTRL);;
 | 
						|
 	
 | 
						|
 	cmd = cmd & ~(BIT26|BIT25|BIT24); /* clear polarity */
 | 
						|
 	if (gc->polarity_pclk)
 | 
						|
@@ -563,7 +578,8 @@ static void camif_polarity(camif_gc_t *gc)
 | 
						|
 		cmd |= GC_INVPOLVSYNC;
 | 
						|
 	if (gc->polarity_href)
 | 
						|
 		cmd |= GC_INVPOLHREF;
 | 
						|
-	CIGCTRL |= cmd;
 | 
						|
+	writel(readl(camregs + S3C2440_CAM_REG_CIGCTRL) |
 | 
						|
+	       cmd, camregs + S3C2440_CAM_REG_CIGCTRL);
 | 
						|
 }
 | 
						|
 
 | 
						|
 
 | 
						|
@@ -599,12 +615,13 @@ int camif_dynamic_close(camif_cfg_t *cfg)
 | 
						|
 static int camif_target_area(camif_cfg_t *cfg) 
 | 
						|
 {
 | 
						|
 	u32 rect = cfg->target_x * cfg->target_y;
 | 
						|
-	if (cfg->dma_type & CAMIF_CODEC ) {
 | 
						|
-		CICOTAREA = rect;
 | 
						|
-	}
 | 
						|
-	if (cfg->dma_type & CAMIF_PREVIEW) {
 | 
						|
-		CIPRTAREA = rect;
 | 
						|
-	}
 | 
						|
+
 | 
						|
+	if (cfg->dma_type & CAMIF_CODEC)
 | 
						|
+		writel(rect, camregs + S3C2440_CAM_REG_CICOTAREA);
 | 
						|
+
 | 
						|
+	if (cfg->dma_type & CAMIF_PREVIEW)
 | 
						|
+		writel(rect, camregs + S3C2440_CAM_REG_CIPRTAREA);
 | 
						|
+
 | 
						|
 	return 0;
 | 
						|
 }
 | 
						|
 
 | 
						|
@@ -613,40 +630,44 @@ static int inline camif_hw_reg(camif_cfg_t *cfg)
 | 
						|
 	u32 cmd = 0;
 | 
						|
 
 | 
						|
 	if (cfg->dma_type & CAMIF_CODEC) {
 | 
						|
-		CICOSCPRERATIO = PRE_SHIFT(cfg->sc.shfactor)
 | 
						|
-			|PRE_HRATIO(cfg->sc.prehratio)|PRE_VRATIO(cfg->sc.prevratio);
 | 
						|
-		CICOSCPREDST = 
 | 
						|
-			PRE_DST_WIDTH(cfg->sc.predst_x)|PRE_DST_HEIGHT(cfg->sc.predst_y);
 | 
						|
+		writel(PRE_SHIFT(cfg->sc.shfactor) |
 | 
						|
+		       PRE_HRATIO(cfg->sc.prehratio) |
 | 
						|
+		       PRE_VRATIO(cfg->sc.prevratio),
 | 
						|
+		       camregs + S3C2440_CAM_REG_CICOSCPRERATIO);
 | 
						|
+		writel(PRE_DST_WIDTH(cfg->sc.predst_x) |
 | 
						|
+		       PRE_DST_HEIGHT(cfg->sc.predst_y),
 | 
						|
+		       camregs + S3C2440_CAM_REG_CICOSCPREDST);
 | 
						|
 
 | 
						|
 		/* Differ from Preview */
 | 
						|
 		if (cfg->sc.scalerbypass)
 | 
						|
 			cmd |= SCALERBYPASS;
 | 
						|
 		if (cfg->sc.scaleup_h & cfg->sc.scaleup_v)
 | 
						|
 			cmd |= BIT30|BIT29;
 | 
						|
-		CICOSCCTRL = cmd | MAIN_HRATIO(cfg->sc.mainhratio)
 | 
						|
-			|MAIN_VRATIO(cfg->sc.mainvratio);
 | 
						|
+		writel(cmd | MAIN_HRATIO(cfg->sc.mainhratio) |
 | 
						|
+		       MAIN_VRATIO(cfg->sc.mainvratio),
 | 
						|
+		       camregs + S3C2440_CAM_REG_CICOSCCTRL);
 | 
						|
 		return 0;
 | 
						|
 	}
 | 
						|
-	else if (cfg->dma_type & CAMIF_PREVIEW) {
 | 
						|
-		CIPRSCPRERATIO = PRE_SHIFT(cfg->sc.shfactor)
 | 
						|
-			|PRE_HRATIO(cfg->sc.prehratio)|PRE_VRATIO(cfg->sc.prevratio);
 | 
						|
-		CIPRSCPREDST = 
 | 
						|
-			PRE_DST_WIDTH(cfg->sc.predst_x)|PRE_DST_HEIGHT(cfg->sc.predst_y);
 | 
						|
+	if (cfg->dma_type & CAMIF_PREVIEW) {
 | 
						|
+		writel(PRE_SHIFT(cfg->sc.shfactor) |
 | 
						|
+		       PRE_HRATIO(cfg->sc.prehratio) |
 | 
						|
+		       PRE_VRATIO(cfg->sc.prevratio),
 | 
						|
+		       camregs + S3C2440_CAM_REG_CIPRSCPRERATIO);
 | 
						|
+		writel(PRE_DST_WIDTH(cfg->sc.predst_x) |
 | 
						|
+		       PRE_DST_HEIGHT(cfg->sc.predst_y),
 | 
						|
+		       camregs + S3C2440_CAM_REG_CIPRSCPREDST);
 | 
						|
 		/* Differ from Codec */
 | 
						|
-		if (cfg->fmt & CAMIF_RGB24) {
 | 
						|
+		if (cfg->fmt & CAMIF_RGB24)
 | 
						|
 			cmd |= RGB_FMT24;  
 | 
						|
-		}
 | 
						|
-		else {
 | 
						|
-			/* RGB16 */;
 | 
						|
-		}		
 | 
						|
 		if (cfg->sc.scaleup_h & cfg->sc.scaleup_v)
 | 
						|
-			cmd |= BIT29|BIT28;
 | 
						|
-		CIPRSCCTRL = cmd |MAIN_HRATIO(cfg->sc.mainhratio)|S_METHOD
 | 
						|
-			|MAIN_VRATIO(cfg->sc.mainvratio);
 | 
						|
-	}else {
 | 
						|
-		panic("CAMERA:DMA_TYPE Wrong \n");
 | 
						|
+			cmd |= BIT29 | BIT28;
 | 
						|
+		writel(cmd | MAIN_HRATIO(cfg->sc.mainhratio) | S_METHOD |
 | 
						|
+		       MAIN_VRATIO(cfg->sc.mainvratio),
 | 
						|
+		       camregs + S3C2440_CAM_REG_CIPRSCCTRL);
 | 
						|
+		return 0;
 | 
						|
 	}
 | 
						|
 
 | 
						|
+	panic("CAMERA:DMA_TYPE Wrong \n");
 | 
						|
 	return 0;
 | 
						|
 }
 | 
						|
 
 | 
						|
@@ -654,46 +675,50 @@ static int inline camif_hw_reg(camif_cfg_t *cfg)
 | 
						|
 /* Configure Pre-scaler control  & main scaler control register */
 | 
						|
 static int camif_scaler(camif_cfg_t *cfg)
 | 
						|
 {
 | 
						|
-	int tx = cfg->target_x,ty=cfg->target_y;
 | 
						|
+	int tx = cfg->target_x, ty = cfg->target_y;
 | 
						|
 	int sx, sy;
 | 
						|
 
 | 
						|
-	if (tx <= 0 || ty<= 0) 	panic("CAMERA: Invalid target size \n");
 | 
						|
+	if (tx <= 0 || ty <= 0)
 | 
						|
+		panic("CAMERA: Invalid target size \n");
 | 
						|
+
 | 
						|
+	sx = cfg->gc->source_x - 2 * cfg->gc->win_hor_ofst;
 | 
						|
+	sy = cfg->gc->source_y - 2 * cfg->gc->win_ver_ofst;	
 | 
						|
+	if (sx <= 0 || sy <= 0)
 | 
						|
+		panic("CAMERA: Invalid source size \n");
 | 
						|
 
 | 
						|
-	sx = cfg->gc->source_x - 2*cfg->gc->win_hor_ofst;
 | 
						|
-	sy = cfg->gc->source_y - 2*cfg->gc->win_ver_ofst;	
 | 
						|
-	if (sx <= 0 || sy<= 0) 	panic("CAMERA: Invalid source size \n");
 | 
						|
 	cfg->sc.modified_src_x = sx;
 | 
						|
 	cfg->sc.modified_src_y = sy;
 | 
						|
 
 | 
						|
 	/* Pre-scaler control register 1 */
 | 
						|
-	camif_scaler_internal(sx,tx,&cfg->sc.prehratio,&cfg->sc.hfactor);
 | 
						|
-	camif_scaler_internal(sy,ty,&cfg->sc.prevratio,&cfg->sc.vfactor);
 | 
						|
+	camif_scaler_internal(sx, tx, &cfg->sc.prehratio, &cfg->sc.hfactor);
 | 
						|
+	camif_scaler_internal(sy, ty, &cfg->sc.prevratio, &cfg->sc.vfactor);
 | 
						|
 
 | 
						|
-	if (cfg->dma_type & CAMIF_PREVIEW) {
 | 
						|
-		if ( (sx /cfg->sc.prehratio) <= 640 ) {}
 | 
						|
-		else {
 | 
						|
-			printk(KERN_INFO "CAMERA: Internal Preview line buffer is 640 pixels\n");
 | 
						|
+	if (cfg->dma_type & CAMIF_PREVIEW)
 | 
						|
+		if ((sx / cfg->sc.prehratio) > 640) {
 | 
						|
+			printk(KERN_INFO "CAMERA: Internal Preview line "
 | 
						|
+					 "buffer is 640 pixels\n");
 | 
						|
 			return 1; /* Error */
 | 
						|
 		}
 | 
						|
-	}
 | 
						|
 
 | 
						|
-	cfg->sc.shfactor = 10-(cfg->sc.hfactor+cfg->sc.vfactor);
 | 
						|
+	cfg->sc.shfactor = 10 - (cfg->sc.hfactor + cfg->sc.vfactor);
 | 
						|
 	/* Pre-scaler control register 2 */
 | 
						|
 	cfg->sc.predst_x = sx / cfg->sc.prehratio;
 | 
						|
 	cfg->sc.predst_y = sy / cfg->sc.prevratio;
 | 
						|
 
 | 
						|
 	/* Main-scaler control register */
 | 
						|
-	cfg->sc.mainhratio = (sx << 8)/(tx << cfg->sc.hfactor);
 | 
						|
-	cfg->sc.mainvratio = (sy << 8)/(ty << cfg->sc.vfactor);
 | 
						|
-	DPRINTK(" sx %d, sy %d tx %d ty %d  \n",sx,sy,tx,ty);
 | 
						|
-	DPRINTK(" hfactor %d  vfactor %d \n",cfg->sc.hfactor,cfg->sc.vfactor);
 | 
						|
+	cfg->sc.mainhratio = (sx << 8) / (tx << cfg->sc.hfactor);
 | 
						|
+	cfg->sc.mainvratio = (sy << 8) / (ty << cfg->sc.vfactor);
 | 
						|
+	DPRINTK(" sx %d, sy %d tx %d ty %d  \n", sx, sy, tx, ty);
 | 
						|
+	DPRINTK(" hfactor %d  vfactor %d \n",cfg->sc.hfactor, cfg->sc.vfactor);
 | 
						|
 
 | 
						|
 	cfg->sc.scaleup_h  = (sx <= tx) ? 1: 0;
 | 
						|
 	cfg->sc.scaleup_v  = (sy <= ty) ? 1: 0;
 | 
						|
-	if ( cfg->sc.scaleup_h != cfg->sc.scaleup_v) 
 | 
						|
+	if (cfg->sc.scaleup_h != cfg->sc.scaleup_v)
 | 
						|
 		printk(KERN_ERR "scaleup_h must be same to scaleup_v \n");
 | 
						|
+
 | 
						|
 	camif_hw_reg(cfg);
 | 
						|
 	camif_target_area(cfg);
 | 
						|
+
 | 
						|
 	return 0;
 | 
						|
 }
 | 
						|
 
 | 
						|
@@ -706,38 +731,38 @@ static void camif_g_bsize(u32 hsize, u32 *mburst, u32 *rburst)
 | 
						|
 {
 | 
						|
 	u32 tmp;
 | 
						|
 
 | 
						|
-	tmp = (hsize/4) % 16;
 | 
						|
+	tmp = (hsize / 4) % 16;
 | 
						|
 	switch(tmp) {
 | 
						|
+	case 0:
 | 
						|
+		*mburst=16;
 | 
						|
+		*rburst=16;
 | 
						|
+		break;
 | 
						|
+	case 4:
 | 
						|
+		*mburst=16;
 | 
						|
+		*rburst=4;
 | 
						|
+		break;
 | 
						|
+	case 8:
 | 
						|
+		*mburst=16;
 | 
						|
+		*rburst=8;
 | 
						|
+		break;
 | 
						|
+	default:
 | 
						|
+		tmp=(hsize / 4) % 8;
 | 
						|
+		switch(tmp) {
 | 
						|
 		case 0:
 | 
						|
-			*mburst=16;
 | 
						|
-			*rburst=16;
 | 
						|
+			*mburst = 8;
 | 
						|
+			*rburst = 8;
 | 
						|
 			break;
 | 
						|
 		case 4:
 | 
						|
-			*mburst=16;
 | 
						|
-			*rburst=4;
 | 
						|
-			break;
 | 
						|
-		case 8:
 | 
						|
-			*mburst=16;
 | 
						|
-			*rburst=8;
 | 
						|
-			break;
 | 
						|
+			*mburst = 8;
 | 
						|
+			*rburst = 4;
 | 
						|
 		default:
 | 
						|
-			tmp=(hsize/4)%8;
 | 
						|
-			switch(tmp) {
 | 
						|
-				case 0:
 | 
						|
-					*mburst=8;
 | 
						|
-					*rburst=8;
 | 
						|
-					break;
 | 
						|
-				case 4:
 | 
						|
-					*mburst=8;
 | 
						|
-					*rburst=4;
 | 
						|
-				default:
 | 
						|
-					*mburst=4;
 | 
						|
-					tmp=(hsize/4)%4;
 | 
						|
-					*rburst= (tmp) ? tmp: 4;
 | 
						|
-					break;
 | 
						|
-			}
 | 
						|
+			*mburst = 4;
 | 
						|
+			tmp = (hsize / 4) % 4;
 | 
						|
+			*rburst= (tmp) ? tmp: 4;
 | 
						|
 			break;
 | 
						|
 	}
 | 
						|
+		break;
 | 
						|
+	}
 | 
						|
 }
 | 
						|
 
 | 
						|
 /* SXGA 1028x1024*/
 | 
						|
@@ -759,24 +784,30 @@ static int camif_dma_burst(camif_cfg_t *cfg)
 | 
						|
 		u32 yburst_m, yburst_r;
 | 
						|
 		u32 cburst_m, cburst_r;
 | 
						|
 		/* CODEC DMA WIDHT is multiple of 16 */
 | 
						|
-		if (width %16 != 0 )  return BURST_ERR;   /* DMA Burst Length Error */
 | 
						|
-		camif_g_bsize(width,&yburst_m,&yburst_r);
 | 
						|
-		camif_g_bsize(width/2,&cburst_m,&cburst_r);
 | 
						|
-		CICOCTRL =YBURST_M(yburst_m)|CBURST_M(cburst_m)
 | 
						|
-			|YBURST_R(yburst_r)|CBURST_R(cburst_r);
 | 
						|
+		if (width % 16)
 | 
						|
+			return BURST_ERR;   /* DMA Burst Length Error */
 | 
						|
+		camif_g_bsize(width, &yburst_m, &yburst_r);
 | 
						|
+		camif_g_bsize(width / 2, &cburst_m, &cburst_r);
 | 
						|
+
 | 
						|
+		writel(YBURST_M(yburst_m) | CBURST_M(cburst_m) |
 | 
						|
+		       YBURST_R(yburst_r) | CBURST_R(cburst_r),
 | 
						|
+		       camregs + S3C2440_CAM_REG_CICOCTRL);
 | 
						|
 	}
 | 
						|
 
 | 
						|
 	if (cfg->dma_type & CAMIF_PREVIEW) {
 | 
						|
 		u32 rgburst_m, rgburst_r;
 | 
						|
 		if(cfg->fmt == CAMIF_RGB24) {
 | 
						|
-			if (width %2 != 0 )  return BURST_ERR;   /* DMA Burst Length Error */
 | 
						|
+			if (width % 2)
 | 
						|
+				return BURST_ERR;   /* DMA Burst Length Error */
 | 
						|
 			camif_g_bsize(width*4,&rgburst_m,&rgburst_r);
 | 
						|
-		}
 | 
						|
-		else {		/* CAMIF_RGB16 */
 | 
						|
-			if ((width/2) %2 != 0 )  return BURST_ERR; /* DMA Burst Length Error */
 | 
						|
+		} else {		/* CAMIF_RGB16 */
 | 
						|
+			if ((width / 2) %2)
 | 
						|
+				return BURST_ERR; /* DMA Burst Length Error */
 | 
						|
 			camif_g_bsize(width*2,&rgburst_m,&rgburst_r);  
 | 
						|
 		}
 | 
						|
-			CIPRCTRL = RGBURST_M(rgburst_m) | RGBURST_R(rgburst_r);
 | 
						|
+
 | 
						|
+		writel(RGBURST_M(rgburst_m) | RGBURST_R(rgburst_r),
 | 
						|
+		       camregs + S3C2440_CAM_REG_CIPRCTRL);
 | 
						|
 	}
 | 
						|
 	return 0;
 | 
						|
 }
 | 
						|
@@ -786,19 +817,20 @@ static int camif_gpio_init(void)
 | 
						|
 #ifdef CONFIG_ARCH_S3C24A0A
 | 
						|
 	/* S3C24A0A has the dedicated signal pins for Camera */
 | 
						|
 #else
 | 
						|
-	set_gpio_ctrl(GPIO_CAMDATA0);
 | 
						|
-	set_gpio_ctrl(GPIO_CAMDATA1);
 | 
						|
-	set_gpio_ctrl(GPIO_CAMDATA2);
 | 
						|
-	set_gpio_ctrl(GPIO_CAMDATA3);
 | 
						|
-	set_gpio_ctrl(GPIO_CAMDATA4);
 | 
						|
-	set_gpio_ctrl(GPIO_CAMDATA5);
 | 
						|
-	set_gpio_ctrl(GPIO_CAMDATA6);
 | 
						|
-	set_gpio_ctrl(GPIO_CAMDATA7);
 | 
						|
-	set_gpio_ctrl(GPIO_CAMPCLKIN);
 | 
						|
-	set_gpio_ctrl(GPIO_CAMVSYNC);
 | 
						|
-	set_gpio_ctrl(GPIO_CAMHREF);
 | 
						|
-	set_gpio_ctrl(GPIO_CAMPCLKOUT);
 | 
						|
-	set_gpio_ctrl(GPIO_CAMRESET);
 | 
						|
+	s3c2410_gpio_cfgpin(S3C2440_GPJ0, S3C2440_GPJ0_CAMDATA0);
 | 
						|
+	s3c2410_gpio_cfgpin(S3C2440_GPJ1, S3C2440_GPJ1_CAMDATA1);
 | 
						|
+	s3c2410_gpio_cfgpin(S3C2440_GPJ2, S3C2440_GPJ2_CAMDATA2);
 | 
						|
+	s3c2410_gpio_cfgpin(S3C2440_GPJ3, S3C2440_GPJ3_CAMDATA3);
 | 
						|
+	s3c2410_gpio_cfgpin(S3C2440_GPJ4, S3C2440_GPJ4_CAMDATA4);
 | 
						|
+	s3c2410_gpio_cfgpin(S3C2440_GPJ5, S3C2440_GPJ5_CAMDATA5);
 | 
						|
+	s3c2410_gpio_cfgpin(S3C2440_GPJ6, S3C2440_GPJ6_CAMDATA6);
 | 
						|
+	s3c2410_gpio_cfgpin(S3C2440_GPJ7, S3C2440_GPJ7_CAMDATA7);
 | 
						|
+
 | 
						|
+	s3c2410_gpio_cfgpin(S3C2440_GPJ8, S3C2440_GPJ8_CAMPCLK);
 | 
						|
+	s3c2410_gpio_cfgpin(S3C2440_GPJ9, S3C2440_GPJ9_CAMVSYNC);
 | 
						|
+	s3c2410_gpio_cfgpin(S3C2440_GPJ10, S3C2440_GPJ10_CAMHREF);
 | 
						|
+	s3c2410_gpio_cfgpin(S3C2440_GPJ11, S3C2440_GPJ11_CAMCLKOUT);
 | 
						|
+	s3c2410_gpio_cfgpin(S3C2440_GPJ12, S3C2440_GPJ12_CAMRESET);
 | 
						|
 #endif
 | 
						|
         return 0;
 | 
						|
 }
 | 
						|
@@ -827,21 +859,33 @@ int camif_clock_init(camif_gc_t *gc)
 | 
						|
 	camclk_div = (upll+ROUND_ADD) / camclk - 1;
 | 
						|
 	CLKDIVN = (CLKDIVN & 0xFF) | CLKDIVN_CAM(camclk_div);
 | 
						|
 	printk(KERN_INFO"CAMERA:upll %d MACRO 0x%08X CLKDIVN 0x%08X \n",
 | 
						|
-				upll, CLKDIVN_CAM(camclk_div),CLKDIVN);
 | 
						|
-	CIIMGCPT = 0;		/* Dummy ? */
 | 
						|
+				upll, CLKDIVN_CAM(camclk_div), CLKDIVN);
 | 
						|
+	writel(0, camregs + S3C2440_CAM_REG_CIIMGCPT);	/* Dummy ? */
 | 
						|
+
 | 
						|
 	return 0;
 | 
						|
 }
 | 
						|
 #else
 | 
						|
 int camif_clock_init(camif_gc_t *gc)
 | 
						|
 {
 | 
						|
-	unsigned int upll, camclk_div, camclk;
 | 
						|
-	if (!gc) camclk = 24000000;
 | 
						|
-	else  {
 | 
						|
+	unsigned int camclk;
 | 
						|
+	struct clk *clk_camif = clk_get(NULL, "camif");
 | 
						|
+	struct clk *clk_camif_upll = clk_get(NULL, "camif-upll");
 | 
						|
+
 | 
						|
+	if (!gc)
 | 
						|
+		camclk = 24000000;
 | 
						|
+	else {
 | 
						|
 		camclk = gc->camclk;
 | 
						|
 		if (camclk > 48000000)
 | 
						|
 			printk(KERN_ERR "Wrong Camera Clock\n");
 | 
						|
 	}
 | 
						|
 
 | 
						|
+	clk_set_rate(clk_camif, camclk);
 | 
						|
+
 | 
						|
+	clk_enable(clk_camif);
 | 
						|
+	clk_enable(clk_camif_upll);
 | 
						|
+	
 | 
						|
+
 | 
						|
+#if 0
 | 
						|
 	CLKCON |= CLKCON_CAMIF;
 | 
						|
 	upll = elfin_get_bus_clk(GET_UPLL);
 | 
						|
 	printk(KERN_INFO "CAMERA:Default UPLL %08d and Assing 96Mhz to UPLL\n",upll);	
 | 
						|
@@ -854,7 +898,9 @@ int camif_clock_init(camif_gc_t *gc)
 | 
						|
 	camclk_div = (upll+ROUND_ADD) /(camclk * 2) -1;
 | 
						|
 	CAMDIVN = CAMCLK_SET_DIV|(camclk_div&0xf);
 | 
						|
 	printk(KERN_INFO "CAMERA:upll %08d  cam_clk %08d CAMDIVN 0x%08x \n",upll,camclk, CAMDIVN);
 | 
						|
-	CIIMGCPT = 0;		/* Dummy ? */
 | 
						|
+#endif
 | 
						|
+	writel(0, camregs + S3C2440_CAM_REG_CIIMGCPT);	/* Dummy ? */
 | 
						|
+
 | 
						|
 	return 0;
 | 
						|
 }
 | 
						|
 #endif
 | 
						|
@@ -867,23 +913,39 @@ void camif_reset(int is, int delay)
 | 
						|
 {
 | 
						|
 	switch (is) {
 | 
						|
 		case CAMIF_RESET:
 | 
						|
-			CIGCTRL |= GC_SWRST;
 | 
						|
+			writel(readl(camregs + S3C2440_CAM_REG_CIGCTRL) |
 | 
						|
+			       GC_SWRST,
 | 
						|
+			       camregs + S3C2440_CAM_REG_CIGCTRL);
 | 
						|
 			mdelay(1);
 | 
						|
-			CIGCTRL &= ~GC_SWRST;
 | 
						|
+			writel(readl(camregs + S3C2440_CAM_REG_CIGCTRL) &
 | 
						|
+			       ~GC_SWRST,
 | 
						|
+			       camregs + S3C2440_CAM_REG_CIGCTRL);
 | 
						|
 			break;
 | 
						|
 		case CAMIF_EX_RESET_AH: /*Active High */
 | 
						|
-			CIGCTRL &= ~GC_CAMRST; 
 | 
						|
+			writel(readl(camregs + S3C2440_CAM_REG_CIGCTRL) &
 | 
						|
+			       ~GC_CAMRST,
 | 
						|
+			       camregs + S3C2440_CAM_REG_CIGCTRL);
 | 
						|
 			udelay(200);
 | 
						|
-			CIGCTRL |= GC_CAMRST;
 | 
						|
+			writel(readl(camregs + S3C2440_CAM_REG_CIGCTRL) |
 | 
						|
+			       GC_CAMRST,
 | 
						|
+			       camregs + S3C2440_CAM_REG_CIGCTRL);
 | 
						|
 			udelay(delay);
 | 
						|
-			CIGCTRL &= ~GC_CAMRST;
 | 
						|
+			writel(readl(camregs + S3C2440_CAM_REG_CIGCTRL) &
 | 
						|
+			       ~GC_CAMRST,
 | 
						|
+			       camregs + S3C2440_CAM_REG_CIGCTRL);
 | 
						|
 			break;
 | 
						|
 		case CAMIF_EX_RESET_AL:	/*Active Low */
 | 
						|
-			CIGCTRL |=  GC_CAMRST;
 | 
						|
+			writel(readl(camregs + S3C2440_CAM_REG_CIGCTRL) |
 | 
						|
+			       GC_CAMRST,
 | 
						|
+			       camregs + S3C2440_CAM_REG_CIGCTRL);
 | 
						|
 			udelay(200);
 | 
						|
-			CIGCTRL &= ~GC_CAMRST;
 | 
						|
+			writel(readl(camregs + S3C2440_CAM_REG_CIGCTRL) &
 | 
						|
+			       ~GC_CAMRST,
 | 
						|
+			       camregs + S3C2440_CAM_REG_CIGCTRL);
 | 
						|
 			udelay(delay);
 | 
						|
-			CIGCTRL |= GC_CAMRST;
 | 
						|
+			writel(readl(camregs + S3C2440_CAM_REG_CIGCTRL) |
 | 
						|
+			       GC_CAMRST,
 | 
						|
+			       camregs + S3C2440_CAM_REG_CIGCTRL);
 | 
						|
 			break;
 | 
						|
 		default:
 | 
						|
 			break;
 | 
						|
@@ -908,10 +970,10 @@ static void camif_bus_priority(int flag)
 | 
						|
 		PRIORITY1 = PRIORITY_I_FIX;
 | 
						|
 
 | 
						|
 #else
 | 
						|
-		old_priority = PRIORITY;	
 | 
						|
-		PRIORITY &= ~(3<<7);
 | 
						|
-		PRIORITY |=  (1<<7); /* Arbiter 1, REQ2 first */
 | 
						|
-		PRIORITY &= ~(1<<1); /* Disable Priority Rotate */
 | 
						|
+		old_priority = readl(S3C2410_PRIORITY);
 | 
						|
+		writel(readl(S3C2410_PRIORITY) & ~(3<<7), S3C2410_PRIORITY);
 | 
						|
+		writel(readl(S3C2410_PRIORITY) |  (1<<7), S3C2410_PRIORITY); /* Arbiter 1, REQ2 first */
 | 
						|
+		writel(readl(S3C2410_PRIORITY) & ~(1<<1), S3C2410_PRIORITY); /* Disable Priority Rotate */
 | 
						|
 #endif
 | 
						|
 	} 
 | 
						|
 	else {
 | 
						|
@@ -919,19 +981,26 @@ static void camif_bus_priority(int flag)
 | 
						|
 		PRIORITY0 = old_priority;
 | 
						|
 		PRIORITY1 = old_priority;
 | 
						|
 #else
 | 
						|
-		PRIORITY = old_priority;
 | 
						|
+		writel(old_priority, S3C2410_PRIORITY);
 | 
						|
 #endif
 | 
						|
 	}
 | 
						|
 }
 | 
						|
 
 | 
						|
 static void inline camif_clock_off(void)
 | 
						|
 {
 | 
						|
-	CIIMGCPT = 0;
 | 
						|
 #if defined (CONFIG_ARCH_S3C24A0A)
 | 
						|
+	writel(0, camregs + S3C2440_CAM_REG_CIIMGCPT);
 | 
						|
+
 | 
						|
 	CLKCON &= ~CLKCON_CAM_UPLL;
 | 
						|
 	CLKCON &= ~CLKCON_CAM_HCLK;
 | 
						|
 #else
 | 
						|
-	CLKCON &= ~CLKCON_CAMIF;
 | 
						|
+	struct clk *clk_camif = clk_get(NULL, "camif");
 | 
						|
+	struct clk *clk_camif_upll = clk_get(NULL, "camif-upll");
 | 
						|
+
 | 
						|
+	writel(0, camregs + S3C2440_CAM_REG_CIIMGCPT);
 | 
						|
+
 | 
						|
+	clk_disable(clk_camif);
 | 
						|
+	clk_disable(clk_camif_upll);
 | 
						|
 #endif
 | 
						|
 }
 | 
						|
 
 | 
						|
diff --git a/arch/arm/mach-s3c2440/camera/camif_fsm.c b/arch/arm/mach-s3c2440/camera/camif_fsm.c
 | 
						|
index 3e2b71a..b534aca 100644
 | 
						|
--- a/arch/arm/mach-s3c2440/camera/camif_fsm.c
 | 
						|
+++ b/arch/arm/mach-s3c2440/camera/camif_fsm.c
 | 
						|
@@ -31,7 +31,12 @@
 | 
						|
 #include <asm/semaphore.h>
 | 
						|
 #include <linux/miscdevice.h>
 | 
						|
 
 | 
						|
+#define CONFIG_VIDEO_V4L1_COMPAT
 | 
						|
+#include <linux/videodev.h>
 | 
						|
+#include "camif.h"
 | 
						|
+
 | 
						|
 //#define SW_DEBUG 
 | 
						|
+static void camif_start_p_with_c(camif_cfg_t *cfg);
 | 
						|
 
 | 
						|
 #include "camif.h"
 | 
						|
 const char *fsm_version =
 | 
						|
diff --git a/arch/arm/mach-s3c2440/camera/imgsensor.c b/arch/arm/mach-s3c2440/camera/imgsensor.c
 | 
						|
index 44b7bee..2099b69 100644
 | 
						|
--- a/arch/arm/mach-s3c2440/camera/imgsensor.c
 | 
						|
+++ b/arch/arm/mach-s3c2440/camera/imgsensor.c
 | 
						|
@@ -11,7 +11,7 @@
 | 
						|
  *  Driver for FIMC20 Camera Decoder 
 | 
						|
  */
 | 
						|
 
 | 
						|
-#include <linux/config.h>
 | 
						|
+
 | 
						|
 #include <linux/module.h>
 | 
						|
 #include <linux/kernel.h>
 | 
						|
 #include <linux/init.h>
 | 
						|
@@ -24,10 +24,12 @@
 | 
						|
 
 | 
						|
 #ifdef CONFIG_ARCH_S3C24A0A
 | 
						|
 #else
 | 
						|
-#include <asm/arch/S3C2440.h>
 | 
						|
+//#include <asm/arch/S3C2440.h>
 | 
						|
 #endif
 | 
						|
 
 | 
						|
 #define SW_DEBUG
 | 
						|
+#define CONFIG_VIDEO_V4L1_COMPAT
 | 
						|
+#include <linux/videodev.h>
 | 
						|
 #include "camif.h"
 | 
						|
 #include "sensor.h"
 | 
						|
 
 | 
						|
@@ -37,10 +39,6 @@
 | 
						|
 #include "sxga.h"
 | 
						|
 #endif
 | 
						|
 
 | 
						|
-static const char *sensor_version =
 | 
						|
-        "$Id: imgsensor.c,v 1.11 2004/06/10 12:45:40 swlee Exp $";
 | 
						|
-
 | 
						|
-
 | 
						|
 static struct i2c_driver s5x532_driver;
 | 
						|
 static camif_gc_t data = {
 | 
						|
 	itu_fmt:      CAMIF_ITU601,
 | 
						|
@@ -69,22 +67,18 @@ static camif_gc_t data = {
 | 
						|
 
 | 
						|
 #define CAM_ID 0x5a
 | 
						|
 
 | 
						|
-static unsigned short ignore[] = { I2C_CLIENT_END };
 | 
						|
+static unsigned short ignore = I2C_CLIENT_END;
 | 
						|
 static unsigned short normal_addr[] = { (CAM_ID>>1), I2C_CLIENT_END };
 | 
						|
 static struct i2c_client_address_data addr_data = {
 | 
						|
 	normal_i2c:		normal_addr,
 | 
						|
-	normal_i2c_range:	ignore,
 | 
						|
-	probe:			ignore,
 | 
						|
-	probe_range:		ignore,
 | 
						|
-	ignore:			ignore,
 | 
						|
-	ignore_range:		ignore,
 | 
						|
-	force:			ignore,
 | 
						|
+	probe:			&ignore,
 | 
						|
+	ignore:			&ignore,
 | 
						|
 };
 | 
						|
 
 | 
						|
 s5x532_t s5x532_regs_mirror[S5X532_REGS];
 | 
						|
 
 | 
						|
 unsigned char 
 | 
						|
-s5x532_read(struct i2c_client *client,unsigned char subaddr)
 | 
						|
+s5x532_read(struct i2c_client *client, unsigned char subaddr)
 | 
						|
 {
 | 
						|
 	int ret;
 | 
						|
 	unsigned char buf[1];
 | 
						|
@@ -151,7 +145,7 @@ void inline s5x532_init(struct i2c_client *sam_client)
 | 
						|
 }
 | 
						|
 
 | 
						|
 static int
 | 
						|
-s5x532_attach(struct i2c_adapter *adap, int addr, unsigned short flags,int kind)
 | 
						|
+s5x532_attach(struct i2c_adapter *adap, int addr, int kind)
 | 
						|
 {
 | 
						|
 	struct i2c_client *c;
 | 
						|
 
 | 
						|
@@ -159,13 +153,13 @@ s5x532_attach(struct i2c_adapter *adap, int addr, unsigned short flags,int kind)
 | 
						|
 	if (!c)	return -ENOMEM;
 | 
						|
 
 | 
						|
 	strcpy(c->name, "S5X532");
 | 
						|
-	c->id		= s5x532_driver.id;
 | 
						|
-	c->flags	= I2C_CLIENT_ALLOW_USE;
 | 
						|
+//	c->id		= s5x532_driver.id;
 | 
						|
+	c->flags	= 0 /* I2C_CLIENT_ALLOW_USE */;
 | 
						|
 	c->addr		= addr;
 | 
						|
 	c->adapter	= adap;
 | 
						|
 	c->driver	= &s5x532_driver;
 | 
						|
-	c->data		= &data;
 | 
						|
-	data.sensor     = c; 
 | 
						|
+	data.sensor     = c;
 | 
						|
+	i2c_set_clientdata(c, &data);
 | 
						|
 
 | 
						|
 	camif_register_decoder(c);
 | 
						|
 	return i2c_attach_client(c);
 | 
						|
@@ -192,10 +186,10 @@ s5x532_command(struct i2c_client *client, unsigned int cmd, void *arg)
 | 
						|
 		 printk(KERN_INFO "CAMERA: S5X532 Sensor initialized\n");
 | 
						|
 		 break;
 | 
						|
 	case USER_ADD:
 | 
						|
-		MOD_INC_USE_COUNT;
 | 
						|
+		/* MOD_INC_USE_COUNT; uh.. 2.6 deals with this, old-timer */
 | 
						|
 		break;
 | 
						|
 	case USER_EXIT:
 | 
						|
-		MOD_DEC_USE_COUNT;
 | 
						|
+		/* MOD_DEC_USE_COUNT; */
 | 
						|
 		break;
 | 
						|
 /* Todo
 | 
						|
 	case SENSOR_BRIGHTNESS:
 | 
						|
@@ -210,9 +204,8 @@ s5x532_command(struct i2c_client *client, unsigned int cmd, void *arg)
 | 
						|
 }
 | 
						|
 
 | 
						|
 static struct i2c_driver s5x532_driver = {
 | 
						|
-	name:		"S5X532",
 | 
						|
-	id:		I2C_ALGO_S3C,
 | 
						|
-	flags:		I2C_DF_NOTIFY,
 | 
						|
+	driver:		{ name:		"S5X532" },
 | 
						|
+	id:		0, /* optional in i2c-id.h I2C_ALGO_S3C, */
 | 
						|
 	attach_adapter:	s5x532_probe,
 | 
						|
 	detach_client:	s5x532_detach,
 | 
						|
 	command:	s5x532_command
 | 
						|
@@ -220,11 +213,13 @@ static struct i2c_driver s5x532_driver = {
 | 
						|
 
 | 
						|
 static void iic_gpio_port(void) 
 | 
						|
 {
 | 
						|
+/*    FIXME: no gpio config for i2c !!!
 | 
						|
 #ifdef CONFIG_ARCH_S3C24A0A
 | 
						|
 #else
 | 
						|
 	GPECON &=  ~(0xf <<28);
 | 
						|
 	GPECON |=    0xa <<28;
 | 
						|
 #endif
 | 
						|
+*/
 | 
						|
 }
 | 
						|
 
 | 
						|
 static __init int camif_sensor_init(void)
 | 
						|
diff --git a/arch/arm/mach-s3c2440/camera/qt-driver.c b/arch/arm/mach-s3c2440/camera/qt-driver.c
 | 
						|
index 0c5dd40..cbf8565 100644
 | 
						|
--- a/arch/arm/mach-s3c2440/camera/qt-driver.c
 | 
						|
+++ b/arch/arm/mach-s3c2440/camera/qt-driver.c
 | 
						|
@@ -31,12 +31,15 @@
 | 
						|
                                                                                                            
 | 
						|
 //#define SW_DEBUG
 | 
						|
                                                                                                            
 | 
						|
+#define CONFIG_VIDEO_V4L1_COMPAT
 | 
						|
+#include <linux/videodev.h>
 | 
						|
 #include "camif.h"
 | 
						|
-#include "videodev.h"
 | 
						|
 #include "miscdevice.h"
 | 
						|
 #include "cam_reg.h"
 | 
						|
 #include "sensor.h"
 | 
						|
 #include "userapp.h"
 | 
						|
+
 | 
						|
+extern camif_cfg_t * get_camif(int nr);
 | 
						|
                                                                                                            
 | 
						|
 
 | 
						|
 /************************* Sharp Zarus API **************************
 | 
						|
diff --git a/arch/arm/mach-s3c2440/camera/video-driver.c b/arch/arm/mach-s3c2440/camera/video-driver.c
 | 
						|
index fe9130c..9c77475 100644
 | 
						|
--- a/arch/arm/mach-s3c2440/camera/video-driver.c
 | 
						|
+++ b/arch/arm/mach-s3c2440/camera/video-driver.c
 | 
						|
@@ -29,11 +29,12 @@
 | 
						|
 #include <asm/irq.h>
 | 
						|
 #include <asm/semaphore.h>
 | 
						|
 #include <linux/miscdevice.h>
 | 
						|
+#include <asm/arch/irqs.h>
 | 
						|
 
 | 
						|
 //#define SW_DEBUG 
 | 
						|
-
 | 
						|
+#define CONFIG_VIDEO_V4L1_COMPAT
 | 
						|
+#include <linux/videodev.h>
 | 
						|
 #include "camif.h"
 | 
						|
-#include "videodev.h"
 | 
						|
 #include "miscdevice.h"
 | 
						|
 #include "cam_reg.h"
 | 
						|
 #include "sensor.h"
 | 
						|
@@ -46,12 +47,14 @@
 | 
						|
 /* Codec and Preview */
 | 
						|
 #define CAMIF_NUM  2
 | 
						|
 static camif_cfg_t  fimc[CAMIF_NUM];
 | 
						|
+u32 *camregs;
 | 
						|
 
 | 
						|
 static const char *driver_version = 
 | 
						|
 	"$Id: video-driver.c,v 1.9 2004/06/02 03:10:36 swlee Exp $";
 | 
						|
 extern const char *fimc_version;
 | 
						|
 extern const char *fsm_version;
 | 
						|
 
 | 
						|
+extern void camif_start_c_with_p (camif_cfg_t *cfg, camif_cfg_t *other);
 | 
						|
 
 | 
						|
 camif_cfg_t * get_camif(int nr)
 | 
						|
 {
 | 
						|
@@ -177,28 +180,34 @@ camif_c_read(struct file *file, char *buf, size_t count, loff_t *pos)
 | 
						|
 }
 | 
						|
 
 | 
						|
 
 | 
						|
-static void camif_c_irq(int irq, void *dev_id, struct pt_regs *regs)
 | 
						|
+static irqreturn_t camif_c_irq(int irq, void *dev_id)
 | 
						|
 {
 | 
						|
         camif_cfg_t *cfg = (camif_cfg_t *)dev_id;
 | 
						|
+
 | 
						|
 	DPRINTK("\n");
 | 
						|
 	camif_g_fifo_status(cfg);
 | 
						|
 	camif_g_frame_num(cfg);
 | 
						|
-	if(camif_enter_c_4fsm(cfg) == INSTANT_SKIP) return;
 | 
						|
-	wake_up_interruptible(&cfg->waitq);
 | 
						|
+	if(camif_enter_c_4fsm(cfg) != INSTANT_SKIP)
 | 
						|
+		wake_up_interruptible(&cfg->waitq);
 | 
						|
+
 | 
						|
+	return IRQ_HANDLED;
 | 
						|
 }
 | 
						|
 
 | 
						|
-static void camif_p_irq(int irq, void *dev_id, struct pt_regs * regs)
 | 
						|
+static irqreturn_t camif_p_irq(int irq, void *dev_id)
 | 
						|
 {
 | 
						|
         camif_cfg_t *cfg = (camif_cfg_t *)dev_id;
 | 
						|
+
 | 
						|
 	DPRINTK("\n");
 | 
						|
 	camif_g_fifo_status(cfg);
 | 
						|
 	camif_g_frame_num(cfg);
 | 
						|
-	if(camif_enter_p_4fsm(cfg) == INSTANT_SKIP) return;
 | 
						|
-	wake_up_interruptible(&cfg->waitq);
 | 
						|
+	if(camif_enter_p_4fsm(cfg) != INSTANT_SKIP)
 | 
						|
+		wake_up_interruptible(&cfg->waitq);
 | 
						|
 #if 0
 | 
						|
 	if( (cfg->perf.frames % 5) == 0)
 | 
						|
 		DPRINTK("5\n");
 | 
						|
 #endif
 | 
						|
+
 | 
						|
+	return IRQ_HANDLED;
 | 
						|
 }
 | 
						|
 
 | 
						|
 static void camif_release_irq(camif_cfg_t *cfg)
 | 
						|
@@ -213,13 +222,13 @@ static int camif_irq_request(camif_cfg_t *cfg)
 | 
						|
 
 | 
						|
 	if (cfg->dma_type & CAMIF_CODEC) {
 | 
						|
 		if ((ret = request_irq(cfg->irq, camif_c_irq, 
 | 
						|
-			       SA_INTERRUPT,cfg->shortname, cfg))) {
 | 
						|
+			       0, cfg->shortname, cfg))) {
 | 
						|
 			printk("request_irq(CAM_C) failed.\n");
 | 
						|
 		}
 | 
						|
 	}
 | 
						|
 	if (cfg->dma_type & CAMIF_PREVIEW) {
 | 
						|
 		if ((ret = request_irq(cfg->irq, camif_p_irq,
 | 
						|
-			       SA_INTERRUPT,cfg->shortname, cfg))) {
 | 
						|
+			       0, cfg->shortname, cfg))) {
 | 
						|
 			printk("request_irq(CAM_P) failed.\n");
 | 
						|
 		}
 | 
						|
 	}
 | 
						|
@@ -438,7 +447,7 @@ static struct video_device codec_template =
 | 
						|
 {
 | 
						|
 	.name     = "CODEC_IF",
 | 
						|
 	.type     = VID_TYPE_CAPTURE|VID_TYPE_CLIPPING|VID_TYPE_SCALES,
 | 
						|
-	.hardware = VID_HARDWARE_SAMSUNG_FIMC20,
 | 
						|
+/*	.hardware = VID_HARDWARE_SAMSUNG_FIMC20, */
 | 
						|
 	.fops     = &camif_c_fops,
 | 
						|
 //	.release  = camif_release
 | 
						|
 	.minor    = -1,
 | 
						|
@@ -448,7 +457,7 @@ static struct video_device preview_template =
 | 
						|
 {
 | 
						|
 	.name     = "PREVIEW_IF",
 | 
						|
 	.type     = VID_TYPE_CAPTURE|VID_TYPE_CLIPPING|VID_TYPE_SCALES,
 | 
						|
-	.hardware = VID_HARDWARE_SAMSUNG_FIMC20,
 | 
						|
+/*	.hardware = VID_HARDWARE_SAMSUNG_FIMC20, */
 | 
						|
 	.fops     = &camif_p_fops,
 | 
						|
 	.minor    = -1,
 | 
						|
 };
 | 
						|
@@ -465,8 +474,8 @@ static int preview_init(camif_cfg_t *cfg)
 | 
						|
 	cfg->fmt      = CAMIF_RGB16;
 | 
						|
 	cfg->flip     = CAMIF_FLIP_Y;
 | 
						|
 	cfg->v        = &preview_template;
 | 
						|
-	init_MUTEX(&cfg->v->lock);
 | 
						|
-	cfg->irq       = IRQ_CAM_P;
 | 
						|
+	mutex_init(&cfg->v->lock);
 | 
						|
+	cfg->irq       = IRQ_S3C2440_CAM_P;
 | 
						|
 	
 | 
						|
 	strcpy(cfg->shortname,name);
 | 
						|
         init_waitqueue_head(&cfg->waitq);
 | 
						|
@@ -486,8 +495,8 @@ static int codec_init(camif_cfg_t *cfg)
 | 
						|
 	cfg->fmt      = CAMIF_IN_YCBCR422|CAMIF_OUT_YCBCR420;
 | 
						|
 	cfg->flip     = CAMIF_FLIP_X;
 | 
						|
 	cfg->v         = &codec_template;
 | 
						|
-	init_MUTEX(&cfg->v->lock);
 | 
						|
-	cfg->irq       = IRQ_CAM_C;
 | 
						|
+	mutex_init(&cfg->v->lock);
 | 
						|
+	cfg->irq       = IRQ_S3C2440_CAM_C;
 | 
						|
 	strcpy(cfg->shortname,name);
 | 
						|
 	init_waitqueue_head(&cfg->waitq);
 | 
						|
 	cfg->status = CAMIF_STOPPED;
 | 
						|
@@ -510,25 +519,44 @@ static void print_version(void)
 | 
						|
 
 | 
						|
 static int camif_m_in(void)
 | 
						|
 {
 | 
						|
-	int ret = 0;
 | 
						|
+	int ret = -EINVAL;
 | 
						|
  	camif_cfg_t * cfg;
 | 
						|
 
 | 
						|
+	printk(KERN_INFO"Starting S3C2440 Camera Driver\n");
 | 
						|
+
 | 
						|
+	camregs = ioremap(CAM_BASE_ADD, 0x100);
 | 
						|
+	if (!camregs) {
 | 
						|
+		printk(KERN_ERR"Unable to map camera regs\n");
 | 
						|
+		ret = -ENOMEM;
 | 
						|
+		goto bail1;
 | 
						|
+	}
 | 
						|
+
 | 
						|
 	camif_init();		
 | 
						|
 	cfg = get_camif(CODEC_MINOR);
 | 
						|
 	codec_init(cfg);
 | 
						|
 
 | 
						|
-	if (video_register_device(cfg->v,0,CODEC_MINOR)!=0) {
 | 
						|
-			DPRINTK("Couldn't register codec driver.\n");
 | 
						|
-			return 0;
 | 
						|
+	ret = video_register_device(cfg->v,0,CODEC_MINOR);
 | 
						|
+	if (ret) {
 | 
						|
+			printk(KERN_ERR"Couldn't register codec driver.\n");
 | 
						|
+			goto bail2;
 | 
						|
 	}
 | 
						|
 	cfg = get_camif(PREVIEW_MINOR);
 | 
						|
 	preview_init(cfg);
 | 
						|
-	if (video_register_device(cfg->v,0,PREVIEW_MINOR)!=0) {
 | 
						|
-			DPRINTK("Couldn't register preview driver.\n");
 | 
						|
-			return 0;
 | 
						|
+	ret = video_register_device(cfg->v,0,PREVIEW_MINOR);
 | 
						|
+	if (ret) {
 | 
						|
+			printk(KERN_ERR"Couldn't register preview driver.\n");
 | 
						|
+			goto bail3; /* hm seems it us unregistered the once */
 | 
						|
 	}
 | 
						|
 	
 | 
						|
 	print_version();
 | 
						|
+	return 0;
 | 
						|
+
 | 
						|
+bail3:
 | 
						|
+	video_unregister_device(cfg->v);
 | 
						|
+bail2:
 | 
						|
+	iounmap(camregs);
 | 
						|
+	camregs = NULL;
 | 
						|
+bail1:
 | 
						|
 	return ret;
 | 
						|
 }
 | 
						|
 
 | 
						|
@@ -536,7 +564,9 @@ static void unconfig_device(camif_cfg_t *cfg)
 | 
						|
 {
 | 
						|
 	video_unregister_device(cfg->v);
 | 
						|
 	camif_hw_close(cfg);
 | 
						|
+	iounmap(camregs);
 | 
						|
 	//memset(cfg, 0, sizeof(camif_cfg_t));
 | 
						|
+	camregs = NULL;
 | 
						|
 }
 | 
						|
 
 | 
						|
 static void camif_m_out(void)	/* module out */
 | 
						|
@@ -547,20 +577,22 @@ static void camif_m_out(void)	/* module out */
 | 
						|
 	unconfig_device(cfg);
 | 
						|
 	cfg = get_camif(PREVIEW_MINOR);
 | 
						|
 	unconfig_device(cfg);
 | 
						|
+
 | 
						|
 	return;
 | 
						|
 }
 | 
						|
 
 | 
						|
 void camif_register_decoder(struct i2c_client *ptr)
 | 
						|
 {
 | 
						|
 	camif_cfg_t *cfg;
 | 
						|
+	void * data = i2c_get_clientdata(ptr);
 | 
						|
 
 | 
						|
 	cfg =get_camif(CODEC_MINOR);
 | 
						|
-	cfg->gc = (camif_gc_t *)(ptr->data);
 | 
						|
+	cfg->gc = (camif_gc_t *)(data);
 | 
						|
 
 | 
						|
 	cfg =get_camif(PREVIEW_MINOR);
 | 
						|
-	cfg->gc = (camif_gc_t *)(ptr->data);
 | 
						|
+	cfg->gc = (camif_gc_t *)(data);
 | 
						|
 
 | 
						|
-	sema_init(&cfg->gc->lock,1); /* global lock for both Codec and Preview */
 | 
						|
+	sema_init(&cfg->gc->lock, 1); /* global lock for both Codec and Preview */
 | 
						|
 	cfg->gc->status |= PNOTWORKING; /* Default Value */
 | 
						|
 	camif_hw_open(cfg->gc);
 | 
						|
 }
 | 
						|
@@ -568,8 +600,9 @@ void camif_register_decoder(struct i2c_client *ptr)
 | 
						|
 void camif_unregister_decoder(struct i2c_client *ptr)
 | 
						|
 {
 | 
						|
 	camif_gc_t *gc;
 | 
						|
+	void * data = i2c_get_clientdata(ptr);
 | 
						|
 		
 | 
						|
-	gc = (camif_gc_t *)(ptr->data);	
 | 
						|
+	gc = (camif_gc_t *)(data);
 | 
						|
 	gc->init_sensor = 0; /* need to modify */
 | 
						|
 }
 | 
						|
 
 | 
						|
diff --git a/arch/arm/mach-s3c2440/camera/videodev.c b/arch/arm/mach-s3c2440/camera/videodev.c
 | 
						|
index 0b3498f..6f862e4 100644
 | 
						|
--- a/arch/arm/mach-s3c2440/camera/videodev.c
 | 
						|
+++ b/arch/arm/mach-s3c2440/camera/videodev.c
 | 
						|
@@ -22,7 +22,7 @@
 | 
						|
 #include <linux/init.h>
 | 
						|
 #include <linux/kmod.h>
 | 
						|
 #include <linux/slab.h>
 | 
						|
-#include <linux/devfs_fs_kernel.h>
 | 
						|
+/* #include <linux/devfs_fs_kernel.h> */
 | 
						|
 #include <linux/miscdevice.h>
 | 
						|
 #include <asm/uaccess.h>
 | 
						|
 #include <asm/system.h>
 | 
						|
@@ -30,8 +30,9 @@
 | 
						|
 
 | 
						|
 
 | 
						|
 
 | 
						|
+#define CONFIG_VIDEO_V4L1_COMPAT
 | 
						|
+#include <linux/videodev.h>
 | 
						|
 #include "camif.h"
 | 
						|
-#include "videodev.h"
 | 
						|
 #include "miscdevice.h"
 | 
						|
 
 | 
						|
 
 | 
						|
@@ -42,18 +43,7 @@ const char *fimc_version = "$Id: videodev.c,v 1.1.1.1 2004/04/27 03:52:50 swlee
 | 
						|
 #define VIDEO_NAME              "video4linux"
 | 
						|
 
 | 
						|
 
 | 
						|
-static inline unsigned iminor(struct inode *inode)
 | 
						|
-{
 | 
						|
-        return MINOR(inode->i_rdev);
 | 
						|
-}
 | 
						|
-
 | 
						|
-static inline unsigned imajor(struct inode *inode)
 | 
						|
-{
 | 
						|
-        return MAJOR(inode->i_rdev);
 | 
						|
-}
 | 
						|
-
 | 
						|
-
 | 
						|
-#define VIDEO_NUM_DEVICES	2 
 | 
						|
+#define VIDEO_NUM_DEVICES	2
 | 
						|
 static struct video_device *video_device[VIDEO_NUM_DEVICES];
 | 
						|
 
 | 
						|
 static inline struct video_device * get_vd(int nr)
 | 
						|
@@ -104,7 +94,7 @@ static int video_open(struct inode *inode, struct file *file)
 | 
						|
 	int minor = MINOR(inode->i_rdev);
 | 
						|
 	int err = 0;
 | 
						|
 	struct video_device *vfl;
 | 
						|
-	struct file_operations *old_fops;
 | 
						|
+	struct file_operations const *old_fops;
 | 
						|
 	
 | 
						|
 	down(&videodev_lock);
 | 
						|
 
 | 
						|
@@ -131,13 +121,13 @@ extern int video_exclusive_open(struct inode *inode, struct file *file)
 | 
						|
 	struct  video_device *vfl = get_vd(MINOR(inode->i_rdev));
 | 
						|
 	int retval = 0;
 | 
						|
 
 | 
						|
-	down(&vfl->lock);
 | 
						|
+	mutex_lock(&vfl->lock);
 | 
						|
 	if (vfl->users) {
 | 
						|
 		retval = -EBUSY;
 | 
						|
 	} else {
 | 
						|
 		vfl->users++;
 | 
						|
 	}
 | 
						|
-	up(&vfl->lock);
 | 
						|
+	mutex_unlock(&vfl->lock);
 | 
						|
 	return retval;
 | 
						|
 }
 | 
						|
 
 | 
						|
diff --git a/arch/arm/mach-s3c2440/camera/videodev.h b/arch/arm/mach-s3c2440/camera/videodev.h
 | 
						|
index f12db43..1c2e35a 100644
 | 
						|
--- a/arch/arm/mach-s3c2440/camera/videodev.h
 | 
						|
+++ b/arch/arm/mach-s3c2440/camera/videodev.h
 | 
						|
@@ -1,11 +1,11 @@
 | 
						|
-#ifndef __LINUX_S3C_VIDEODEV_H
 | 
						|
-#define __LINUX_S3C_VIDEODEV_H
 | 
						|
+//#ifndef __LINUX_S3C_VIDEODEV_H
 | 
						|
+//#define __LINUX_S3C_VIDEODEV_H
 | 
						|
 
 | 
						|
 #include <linux/types.h>
 | 
						|
 #include <linux/version.h>
 | 
						|
-#include "videodev2.h"
 | 
						|
-
 | 
						|
+#include <media/v4l2-dev.h>
 | 
						|
 
 | 
						|
+#if 0
 | 
						|
 struct video_device
 | 
						|
 {
 | 
						|
 	/* device info */
 | 
						|
@@ -96,12 +96,10 @@ extern int video_usercopy(struct inode *inode, struct file *file,
 | 
						|
 
 | 
						|
 
 | 
						|
 
 | 
						|
-#define VID_HARDWARE_SAMSUNG_FIMC  255    
 | 
						|
-
 | 
						|
-
 | 
						|
-
 | 
						|
-#endif 
 | 
						|
+#endif
 | 
						|
+//#endif 
 | 
						|
 
 | 
						|
+#define VID_HARDWARE_SAMSUNG_FIMC  255
 | 
						|
 
 | 
						|
 /*
 | 
						|
  * Local variables:
 | 
						|
-- 
 | 
						|
1.5.6.5
 | 
						|
 |