From 6a60bab3de7006c20a6048b9f0fa499d3d90ef81 Mon Sep 17 00:00:00 2001 From: =?utf8?q?=E6=9D=9C=E5=9D=A4=E6=98=8E?= Date: Wed, 19 May 2010 02:34:54 +0000 Subject: [PATCH] update dsp driver --- arch/arm/mach-rk2818/board-midsdk.c | 3 ++- arch/arm/mach-rk2818/devices.c | 34 +++++++++++++++++++++++++++++ arch/arm/mach-rk2818/devices.h | 1 + drivers/staging/Kconfig | 2 ++ drivers/staging/Makefile | 1 + drivers/video/fbmem.c | 14 ++++++++++++ 6 files changed, 54 insertions(+), 1 deletion(-) diff --git a/arch/arm/mach-rk2818/board-midsdk.c b/arch/arm/mach-rk2818/board-midsdk.c index c30fa6a6b98b..523c92074aab 100644 --- a/arch/arm/mach-rk2818/board-midsdk.c +++ b/arch/arm/mach-rk2818/board-midsdk.c @@ -290,8 +290,9 @@ static struct platform_device *devices[] __initdata = { &rk2818_device_pmem, &rk2818_device_adc, &rk2818_device_adckey, - &rk2818_device_fb, + &rk2818_device_fb, &rk2818_device_backlight, + &rk2818_device_dsp, }; extern struct sys_timer rk2818_timer; diff --git a/arch/arm/mach-rk2818/devices.c b/arch/arm/mach-rk2818/devices.c index f9ed143361a8..c85174224f1b 100644 --- a/arch/arm/mach-rk2818/devices.c +++ b/arch/arm/mach-rk2818/devices.c @@ -280,6 +280,40 @@ struct platform_device rk2818_device_adckey = { }; +/* + * rk2818 dsp device + */ + static struct resource resources_dsp[] = { + [0] = { + .start = RK2818_DSP_PHYS, + .end = RK2818_DSP_PHYS + 0x5fffff, + .flags = IORESOURCE_DMA, + }, + [1] = { + .start = IRQ_NR_PIUCMD, + .end = IRQ_NR_PIUCMD, + .flags = IORESOURCE_IRQ, + }, + [2] = { + .start = IRQ_NR_DSPSWI, + .end = IRQ_NR_DSPSWI, + .flags = IORESOURCE_IRQ, + }, +}; +static u64 rk2818_device_dsp_dmamask = 0xffffffffUL; +struct platform_device rk2818_device_dsp = { + .name = "rk28-dsp", + .id = 0, + .num_resources = ARRAY_SIZE(resources_dsp), + .resource = resources_dsp, + .dev = { + .dma_mask = &rk2818_device_dsp_dmamask, + .coherent_dma_mask = 0xffffffffUL + } +}; + + + #if defined(CONFIG_ANDROID_PMEM) static struct android_pmem_platform_data pmem_pdata = { .name = "pmem", diff --git a/arch/arm/mach-rk2818/devices.h b/arch/arm/mach-rk2818/devices.h index 1e4c78f559f1..fb31f0cf6636 100644 --- a/arch/arm/mach-rk2818/devices.h +++ b/arch/arm/mach-rk2818/devices.h @@ -31,4 +31,5 @@ extern struct platform_device rk2818_device_fb; extern struct platform_device rk2818_device_adc; extern struct platform_device rk2818_device_adckey; extern struct platform_device rk2818_device_backlight; +extern struct platform_device rk2818_device_dsp; #endif diff --git a/drivers/staging/Kconfig b/drivers/staging/Kconfig index d21b3469f6d7..ee4ea388c651 100644 --- a/drivers/staging/Kconfig +++ b/drivers/staging/Kconfig @@ -125,5 +125,7 @@ source "drivers/staging/sep/Kconfig" source "drivers/staging/iio/Kconfig" +source "drivers/staging/rk2818/rk2818_dsp/Kconfig" + endif # !STAGING_EXCLUDE_BUILD endif # STAGING diff --git a/drivers/staging/Makefile b/drivers/staging/Makefile index b516268957d0..f671915a19ce 100644 --- a/drivers/staging/Makefile +++ b/drivers/staging/Makefile @@ -44,3 +44,4 @@ obj-$(CONFIG_VME_BUS) += vme/ obj-$(CONFIG_RAR_REGISTER) += rar/ obj-$(CONFIG_DX_SEP) += sep/ obj-$(CONFIG_IIO) += iio/ +obj-$(CONFIG_RK2818_DSP) += rk2818/rk2818_dsp/ diff --git a/drivers/video/fbmem.c b/drivers/video/fbmem.c index 99bbd282ce63..8e60b26864f8 100644 --- a/drivers/video/fbmem.c +++ b/drivers/video/fbmem.c @@ -41,6 +41,8 @@ */ #define FBPIXMAPSIZE (1024 * 8) +#define SETFBIOVADDR 0x4619 +#define GETFBIOVADDR 0x4620 struct fb_info *registered_fb[FB_MAX] __read_mostly; int num_registered_fb __read_mostly; @@ -1026,6 +1028,7 @@ fb_blank(struct fb_info *info, int blank) return ret; } +int fb_vaddr = 0; static long do_fb_ioctl(struct fb_info *info, unsigned int cmd, unsigned long arg) @@ -1144,6 +1147,17 @@ static long do_fb_ioctl(struct fb_info *info, unsigned int cmd, release_console_sem(); unlock_fb_info(info); break; +#if 1 + case SETFBIOVADDR: + if (copy_from_user(&fb_vaddr, argp, 4)) + return -EFAULT; + //printk("fbmem.c set fb_vaddr = 0x%08x \n",fb_vaddr); + break; + case GETFBIOVADDR: + copy_to_user(argp, &fb_vaddr, 4); + //printk("fbmem.c get fb_vaddr = 0x%08x \n",fb_vaddr); + break; +#endif default: if (!lock_fb_info(info)) return -ENODEV; -- 2.34.1