diff options
| -rw-r--r-- | target/linux/generic-2.6/files-2.6.30/include/linux/glamo-engine.h | 27 | ||||
| -rw-r--r-- | target/linux/generic-2.6/files-2.6.30/include/linux/glamofb.h (renamed from target/linux/s3c24xx/files-2.6.30/include/linux/glamofb.h) | 12 | ||||
| -rw-r--r-- | target/linux/generic-2.6/patches-2.6.30/750-glamo-headers.patch | 23 | ||||
| -rw-r--r-- | target/linux/s3c24xx/files-2.6.30/drivers/mfd/glamo/glamo-core.c | 54 | ||||
| -rw-r--r-- | target/linux/s3c24xx/files-2.6.30/drivers/mfd/glamo/glamo-core.h | 24 | ||||
| -rw-r--r-- | target/linux/s3c24xx/files-2.6.30/drivers/mfd/glamo/glamo-fb.c | 26 | ||||
| -rw-r--r-- | target/linux/s3c24xx/patches-2.6.30/053-glamo.patch | 10 | 
7 files changed, 132 insertions, 44 deletions
| diff --git a/target/linux/generic-2.6/files-2.6.30/include/linux/glamo-engine.h b/target/linux/generic-2.6/files-2.6.30/include/linux/glamo-engine.h new file mode 100644 index 000000000..516d45fa6 --- /dev/null +++ b/target/linux/generic-2.6/files-2.6.30/include/linux/glamo-engine.h @@ -0,0 +1,27 @@ +#ifndef __GLAMO_ENGINE_H +#define __GLAMO_ENGINE_H + +enum glamo_engine { +	GLAMO_ENGINE_CAPTURE = 0, +	GLAMO_ENGINE_ISP = 1, +	GLAMO_ENGINE_JPEG = 2, +	GLAMO_ENGINE_MPEG_ENC = 3, +	GLAMO_ENGINE_MPEG_DEC = 4, +	GLAMO_ENGINE_LCD = 5, +	GLAMO_ENGINE_CMDQ = 6, +	GLAMO_ENGINE_2D = 7, +	GLAMO_ENGINE_3D = 8, +	GLAMO_ENGINE_MMC = 9, +	GLAMO_ENGINE_MICROP0 = 10, +	GLAMO_ENGINE_RISC = 11, +	GLAMO_ENGINE_MICROP1_MPEG_ENC = 12, +	GLAMO_ENGINE_MICROP1_MPEG_DEC = 13, +#if 0 +	GLAMO_ENGINE_H264_DEC = 14, +	GLAMO_ENGINE_RISC1 = 15, +	GLAMO_ENGINE_SPI = 16, +#endif +	__NUM_GLAMO_ENGINES +}; + +#endif diff --git a/target/linux/s3c24xx/files-2.6.30/include/linux/glamofb.h b/target/linux/generic-2.6/files-2.6.30/include/linux/glamofb.h index 7f137feb3..b97dcba9d 100644 --- a/target/linux/s3c24xx/files-2.6.30/include/linux/glamofb.h +++ b/target/linux/generic-2.6/files-2.6.30/include/linux/glamofb.h @@ -1,8 +1,12 @@  #ifndef _LINUX_GLAMOFB_H  #define _LINUX_GLAMOFB_H -#include <linux/spi/glamo.h>  #include <linux/fb.h> +#include <linux/glamo-engine.h> + +#ifdef __KERNEL__ + +#include <linux/spi/glamo.h>  struct glamo_core; @@ -38,3 +42,9 @@ void glamo_lcm_reset(int level);  #endif  #endif + +#define GLAMOFB_ENGINE_ENABLE _IOW('F', 0x1, __u32) +#define GLAMOFB_ENGINE_DISABLE _IOW('F', 0x2, __u32) +#define GLAMOFB_ENGINE_RESET _IOW('F', 0x3, __u32) + +#endif diff --git a/target/linux/generic-2.6/patches-2.6.30/750-glamo-headers.patch b/target/linux/generic-2.6/patches-2.6.30/750-glamo-headers.patch new file mode 100644 index 000000000..532e00a3a --- /dev/null +++ b/target/linux/generic-2.6/patches-2.6.30/750-glamo-headers.patch @@ -0,0 +1,23 @@ +--- a/include/linux/fb.h ++++ b/include/linux/fb.h +@@ -124,6 +124,7 @@ struct dentry; + #define FB_ACCEL_TRIDENT_BLADE3D 52	/* Trident Blade3D		*/ + #define FB_ACCEL_TRIDENT_BLADEXP 53	/* Trident BladeXP		*/ + #define FB_ACCEL_CIRRUS_ALPINE   53	/* Cirrus Logic 543x/544x/5480	*/ ++#define FB_ACCEL_GLAMO		50	/* SMedia Glamo                 */ + #define FB_ACCEL_NEOMAGIC_NM2070 90	/* NeoMagic NM2070              */ + #define FB_ACCEL_NEOMAGIC_NM2090 91	/* NeoMagic NM2090              */ + #define FB_ACCEL_NEOMAGIC_NM2093 92	/* NeoMagic NM2093              */ +diff --git a/Kbuild b/Kbuild +index 3f0eaa3..72699f0 100644 +--- a/include/linux/Kbuild ++++ b/include/linux/Kbuild +@@ -75,6 +75,8 @@ header-y += genetlink.h + header-y += gen_stats.h + header-y += gfs2_ondisk.h + header-y += gigaset_dev.h ++header-y += glamofb.h ++header-y += glamo-engine.h + header-y += hysdn_if.h + header-y += i2o-dev.h + header-y += i8k.h diff --git a/target/linux/s3c24xx/files-2.6.30/drivers/mfd/glamo/glamo-core.c b/target/linux/s3c24xx/files-2.6.30/drivers/mfd/glamo/glamo-core.c index a2332a7df..a27f78527 100644 --- a/target/linux/s3c24xx/files-2.6.30/drivers/mfd/glamo/glamo-core.c +++ b/target/linux/s3c24xx/files-2.6.30/drivers/mfd/glamo/glamo-core.c @@ -536,6 +536,9 @@ int __glamo_engine_enable(struct glamo_core *glamo, enum glamo_engine engine)  		__reg_set_bit_mask(glamo, GLAMO_REG_HOSTBUS(2),  				   GLAMO_HOSTBUS2_MMIO_EN_2D,  				   GLAMO_HOSTBUS2_MMIO_EN_2D); +		__reg_set_bit_mask(glamo, GLAMO_REG_CLOCK_GEN5_1, +		                   GLAMO_CLOCK_GEN51_EN_DIV_GCLK, +						   0xffff);  		break;  	case GLAMO_ENGINE_CMDQ:  		__reg_set_bit_mask(glamo, GLAMO_REG_CLOCK_2D, @@ -543,10 +546,13 @@ int __glamo_engine_enable(struct glamo_core *glamo, enum glamo_engine engine)  		__reg_set_bit_mask(glamo, GLAMO_REG_HOSTBUS(2),  				   GLAMO_HOSTBUS2_MMIO_EN_CQ,  				   GLAMO_HOSTBUS2_MMIO_EN_CQ); +		__reg_set_bit_mask(glamo, GLAMO_REG_CLOCK_GEN5_1, +		                   GLAMO_CLOCK_GEN51_EN_DIV_MCLK, +						   0xffff);  		break;  	/* FIXME: Implementation */  	default: -		break; +		return -EINVAL;  	}  	glamo->engine_enabled_bitfield |= 1 << engine; @@ -589,17 +595,42 @@ int __glamo_engine_disable(struct glamo_core *glamo, enum glamo_engine engine)  		break;  	case GLAMO_ENGINE_MMC: -//		__reg_set_bit_mask(glamo, GLAMO_REG_CLOCK_MMC, -//						   GLAMO_CLOCK_MMC_EN_M9CLK | -//						   GLAMO_CLOCK_MMC_EN_TCLK | -//						   GLAMO_CLOCK_MMC_DG_M9CLK | -//						   GLAMO_CLOCK_MMC_DG_TCLK, 0); +		__reg_set_bit_mask(glamo, GLAMO_REG_CLOCK_MMC, +						   GLAMO_CLOCK_MMC_EN_M9CLK | +						   GLAMO_CLOCK_MMC_EN_TCLK | +						   GLAMO_CLOCK_MMC_DG_M9CLK | +						   GLAMO_CLOCK_MMC_DG_TCLK, 0);  		/* disable the TCLK divider clk input */ -//		__reg_set_bit_mask(glamo, GLAMO_REG_CLOCK_GEN5_1, -//					GLAMO_CLOCK_GEN51_EN_DIV_TCLK, 0); - -	default: +		__reg_set_bit_mask(glamo, GLAMO_REG_CLOCK_GEN5_1, +					GLAMO_CLOCK_GEN51_EN_DIV_TCLK, 0); +        break; +	case GLAMO_ENGINE_CMDQ: +			__reg_set_bit_mask(glamo, GLAMO_REG_CLOCK_2D, +			                   GLAMO_CLOCK_2D_EN_M6CLK, +							   0); +			__reg_set_bit_mask(glamo, GLAMO_REG_HOSTBUS(2), +			                   GLAMO_HOSTBUS2_MMIO_EN_CQ, +			                   GLAMO_HOSTBUS2_MMIO_EN_CQ); +/*			__reg_set_bit_mask(glamo, GLAMO_REG_CLOCK_GEN5_1, +			                   GLAMO_CLOCK_GEN51_EN_DIV_MCLK, +							   0);*/ +		break; +	case GLAMO_ENGINE_2D: +			__reg_set_bit_mask(glamo, GLAMO_REG_CLOCK_2D, +			                   GLAMO_CLOCK_2D_EN_M7CLK | +							   GLAMO_CLOCK_2D_EN_GCLK | +							   GLAMO_CLOCK_2D_DG_M7CLK | +							   GLAMO_CLOCK_2D_DG_GCLK, +							   0); +			__reg_set_bit_mask(glamo, GLAMO_REG_HOSTBUS(2), +			                   GLAMO_HOSTBUS2_MMIO_EN_2D, +			                   GLAMO_HOSTBUS2_MMIO_EN_2D); +			__reg_set_bit_mask(glamo, GLAMO_REG_CLOCK_GEN5_1, +			                   GLAMO_CLOCK_GEN51_EN_DIV_GCLK, +							   0);  		break; +	default: +		return -EINVAL;  	}  	glamo->engine_enabled_bitfield &= ~(1 << engine); @@ -667,6 +698,9 @@ struct glamo_script reset_regs[] = {  	[GLAMO_ENGINE_MMC] = {  		GLAMO_REG_CLOCK_MMC, GLAMO_CLOCK_MMC_RESET  	}, +    [GLAMO_ENGINE_CMDQ] = { +        GLAMO_REG_CLOCK_2D, GLAMO_CLOCK_2D_CQ_RESET +    },  	[GLAMO_ENGINE_2D] = {  		GLAMO_REG_CLOCK_2D, GLAMO_CLOCK_2D_RESET  	}, diff --git a/target/linux/s3c24xx/files-2.6.30/drivers/mfd/glamo/glamo-core.h b/target/linux/s3c24xx/files-2.6.30/drivers/mfd/glamo/glamo-core.h index 8e09564bc..8a7907e97 100644 --- a/target/linux/s3c24xx/files-2.6.30/drivers/mfd/glamo/glamo-core.h +++ b/target/linux/s3c24xx/files-2.6.30/drivers/mfd/glamo/glamo-core.h @@ -2,6 +2,7 @@  #define __GLAMO_CORE_H  #include <asm/system.h> +#include <linux/glamo-engine.h>  /* for the time being, we put the on-screen framebuffer into the lowest   * VRAM space.  This should make the code easily compatible with the various @@ -40,29 +41,6 @@ struct glamo_script {  int glamo_run_script(struct glamo_core *glamo,  		     struct glamo_script *script, int len, int may_sleep); -enum glamo_engine { -	GLAMO_ENGINE_CAPTURE, -	GLAMO_ENGINE_ISP, -	GLAMO_ENGINE_JPEG, -	GLAMO_ENGINE_MPEG_ENC, -	GLAMO_ENGINE_MPEG_DEC, -	GLAMO_ENGINE_LCD, -	GLAMO_ENGINE_CMDQ, -	GLAMO_ENGINE_2D, -	GLAMO_ENGINE_3D, -	GLAMO_ENGINE_MMC, -	GLAMO_ENGINE_MICROP0, -	GLAMO_ENGINE_RISC, -	GLAMO_ENGINE_MICROP1_MPEG_ENC, -	GLAMO_ENGINE_MICROP1_MPEG_DEC, -#if 0 -	GLAMO_ENGINE_H264_DEC, -	GLAMO_ENGINE_RISC1, -	GLAMO_ENGINE_SPI, -#endif -	__NUM_GLAMO_ENGINES -}; -  struct glamo_mci_pdata {  	struct glamo_core * pglamo;  	unsigned int	gpio_detect; diff --git a/target/linux/s3c24xx/files-2.6.30/drivers/mfd/glamo/glamo-fb.c b/target/linux/s3c24xx/files-2.6.30/drivers/mfd/glamo/glamo-fb.c index 0a47f65d3..c3422ffe9 100644 --- a/target/linux/s3c24xx/files-2.6.30/drivers/mfd/glamo/glamo-fb.c +++ b/target/linux/s3c24xx/files-2.6.30/drivers/mfd/glamo/glamo-fb.c @@ -535,6 +535,31 @@ static int glamofb_setcolreg(unsigned regno,  	return 0;  } +static int glamofb_ioctl(struct fb_info *info, unsigned int cmd, +                         unsigned long arg) { +	struct glamofb_handle *gfb = (struct glamofb_handle*)info->par; +	struct glamo_core *gcore = gfb->mach_info->glamo; +	int retval = -ENOTTY; + +	switch (cmd) { +	case GLAMOFB_ENGINE_ENABLE: +		retval = glamo_engine_enable(gcore, arg); +		break; +	case GLAMOFB_ENGINE_DISABLE: +		retval = glamo_engine_disable(gcore, arg); +		break; +	case GLAMOFB_ENGINE_RESET: +		glamo_engine_reset(gcore, arg); +		retval = 0; +		break; +	default: +		break; +	} + +	return retval; +} + +  #ifdef CONFIG_MFD_GLAMO_HWACCEL  static inline void glamofb_vsync_wait(struct glamofb_handle *glamo,  		int line, int size, int range) @@ -770,6 +795,7 @@ static struct fb_ops glamofb_ops = {  	.fb_set_par	= glamofb_set_par,  	.fb_blank	= glamofb_blank,  	.fb_setcolreg	= glamofb_setcolreg, +	.fb_ioctl = glamofb_ioctl,  #ifdef CONFIG_MFD_GLAMO_HWACCEL  	.fb_cursor	= glamofb_cursor,  #endif diff --git a/target/linux/s3c24xx/patches-2.6.30/053-glamo.patch b/target/linux/s3c24xx/patches-2.6.30/053-glamo.patch index eb6800cbc..f756e9f3c 100644 --- a/target/linux/s3c24xx/patches-2.6.30/053-glamo.patch +++ b/target/linux/s3c24xx/patches-2.6.30/053-glamo.patch @@ -19,13 +19,3 @@   obj-$(CONFIG_HTC_EGPIO)		+= htc-egpio.o   obj-$(CONFIG_HTC_PASIC3)	+= htc-pasic3.o ---- a/include/linux/fb.h -+++ b/include/linux/fb.h -@@ -124,6 +124,7 @@ struct dentry; - #define FB_ACCEL_TRIDENT_BLADE3D 52	/* Trident Blade3D		*/ - #define FB_ACCEL_TRIDENT_BLADEXP 53	/* Trident BladeXP		*/ - #define FB_ACCEL_CIRRUS_ALPINE   53	/* Cirrus Logic 543x/544x/5480	*/ -+#define FB_ACCEL_GLAMO		50	/* SMedia Glamo                 */ - #define FB_ACCEL_NEOMAGIC_NM2070 90	/* NeoMagic NM2070              */ - #define FB_ACCEL_NEOMAGIC_NM2090 91	/* NeoMagic NM2090              */ - #define FB_ACCEL_NEOMAGIC_NM2093 92	/* NeoMagic NM2093              */ | 
