From ec6c1765a75090dd884efebd45126a8694a4b740 Mon Sep 17 00:00:00 2001 From: =?utf8?q?=E9=BB=84=E6=B6=9B?= Date: Tue, 16 Oct 2012 11:23:50 +0800 Subject: [PATCH] rk: ddr_freq: move video_state to plat-rk and better support release --- arch/arm/mach-rk2928/Makefile | 2 +- arch/arm/mach-rk2928/video_state.c | 161 ----------------------------- arch/arm/mach-rk30/Makefile | 2 +- arch/arm/mach-rk30/video_state.c | 161 ----------------------------- arch/arm/plat-rk/Makefile | 1 + arch/arm/plat-rk/video_state.c | 110 ++++++++++++++++++++ 6 files changed, 113 insertions(+), 324 deletions(-) delete mode 100755 arch/arm/mach-rk2928/video_state.c delete mode 100755 arch/arm/mach-rk30/video_state.c create mode 100644 arch/arm/plat-rk/video_state.c diff --git a/arch/arm/mach-rk2928/Makefile b/arch/arm/mach-rk2928/Makefile index d20a4987ea83..33c3f0c03560 100755 --- a/arch/arm/mach-rk2928/Makefile +++ b/arch/arm/mach-rk2928/Makefile @@ -8,7 +8,7 @@ obj-y += iomux.o obj-y += ../plat-rk/clock.o obj-y += clock_data.o obj-y += ddr.o -obj-$(CONFIG_DDR_FREQ) += ddr_freq.o video_state.o +obj-$(CONFIG_DDR_FREQ) += ddr_freq.o obj-$(CONFIG_CPU_FREQ) += cpufreq.o obj-$(CONFIG_DVFS) += dvfs.o obj-$(CONFIG_PM) += pm.o diff --git a/arch/arm/mach-rk2928/video_state.c b/arch/arm/mach-rk2928/video_state.c deleted file mode 100755 index a792aeaed5f0..000000000000 --- a/arch/arm/mach-rk2928/video_state.c +++ /dev/null @@ -1,161 +0,0 @@ -/* arch/arm/mach-rk30/video_state.c - * - * Copyright (C) 2012 ROCKCHIP, Inc. - * - * This software is licensed under the terms of the GNU General Public - * License version 2, as published by the Free Software Foundation, and - * may be copied, distributed, and modified under those terms. - * - * 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 -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - - -#ifdef CONFIG_DDR_SDRAM_FREQ -#define DDR_FREQ (CONFIG_DDR_SDRAM_FREQ) -#else -#define DDR_FREQ 400 -#endif - - -int rk_video_state=0; -static struct clk * ddr_clk; - - -#define VIDEO_STATE_NAME "video_state" -#define BUFFER_SIZE 16 - -MODULE_AUTHOR("Mike Lockwood "); -MODULE_DESCRIPTION("Key chord input driver"); -MODULE_SUPPORTED_DEVICE("video_state"); -MODULE_LICENSE("GPL"); - -/* - * video_state_read is used to read video_state events from the driver - */ -static ssize_t video_state_read(struct file *file, char __user *buffer, - size_t count, loff_t *ppos) -{ - return count; -} - -/* - * video_state_write is used to configure the driver - */ -static ssize_t video_state_write(struct file *file, const char __user *buffer, - size_t count, loff_t *ppos) -{ - char *parameters= 0; - int vedeo_state; - int set_rate=0; - int set_rate_old=0; - - if(DDR_FREQ<=333) - return count; - //if (count < sizeof(struct input_keychord)) - // return -EINVAL; - parameters = kzalloc(count, GFP_KERNEL); - if (!parameters) - return -ENOMEM; - - /* read list of keychords from userspace */ - if (copy_from_user(parameters, buffer, count)) { - kfree(parameters); - return -EFAULT; - } - sscanf(parameters, "%d", &vedeo_state); - - //printk("video_state %d\n",vedeo_state); - switch(vedeo_state) - { - case 0: - rk_video_state=0; - set_rate=DDR_FREQ; - break; - case 1: - rk_video_state=1; - set_rate=330; - break; - default: - rk_video_state=0; - return -EFAULT; - } - set_rate_old=clk_get_rate(ddr_clk); - set_rate=clk_round_rate(ddr_clk,set_rate*1000*1000); - if(set_rate_old!=set_rate) - { - clk_set_rate(ddr_clk,set_rate); - //printk("ddr rate=%d\n",set_rate/(1000*1000)); - } - kfree(parameters); - return count; -} - -static unsigned int video_state_poll(struct file *file, poll_table *wait) -{ - return 0; -} - -static int video_state_open(struct inode *inode, struct file *file) -{ - - - return 0; -} - -static int video_state_release(struct inode *inode, struct file *file) -{ - return 0; -} - -static const struct file_operations video_state_fops = { - .owner = THIS_MODULE, - .open = video_state_open, - .release = video_state_release, - .read = video_state_read, - .write = video_state_write, - .poll = video_state_poll, -}; - -static struct miscdevice video_state = { - .fops = &video_state_fops, - .name = VIDEO_STATE_NAME, - .minor = MISC_DYNAMIC_MINOR, -}; - - -static int __init video_state_init(void) -{ - ddr_clk=clk_get(NULL,"ddr"); - if(IS_ERR(ddr_clk)) - return -1; - - - return misc_register(&video_state); -} - -static void __exit video_state_exit(void) -{ - misc_deregister(&video_state); -} - -module_init(video_state_init); -module_exit(video_state_exit); - - - diff --git a/arch/arm/mach-rk30/Makefile b/arch/arm/mach-rk30/Makefile index 71a2aa7ef01b..9a6c0b15416c 100755 --- a/arch/arm/mach-rk30/Makefile +++ b/arch/arm/mach-rk30/Makefile @@ -23,7 +23,7 @@ CFLAGS_pm.o += -mthumb obj-$(CONFIG_CPU_IDLE) += cpuidle.o obj-$(CONFIG_CPU_FREQ) += cpufreq.o obj-$(CONFIG_DVFS) += dvfs.o -obj-$(CONFIG_DDR_FREQ) += ddr_freq.o video_state.o +obj-$(CONFIG_DDR_FREQ) += ddr_freq.o obj-$(CONFIG_RK30_I2C_INSRAM) += i2c_sram.o CFLAGS_i2c_sram.o += -mthumb diff --git a/arch/arm/mach-rk30/video_state.c b/arch/arm/mach-rk30/video_state.c deleted file mode 100755 index 9e0589bcc73d..000000000000 --- a/arch/arm/mach-rk30/video_state.c +++ /dev/null @@ -1,161 +0,0 @@ -/* arch/arm/mach-rk30/video_state.c - * - * Copyright (C) 2012 ROCKCHIP, Inc. - * - * This software is licensed under the terms of the GNU General Public - * License version 2, as published by the Free Software Foundation, and - * may be copied, distributed, and modified under those terms. - * - * 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 -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - - -#ifdef CONFIG_DDR_SDRAM_FREQ -#define DDR_FREQ (CONFIG_DDR_SDRAM_FREQ) -#else -#define DDR_FREQ 400 -#endif - - -int rk_video_state=0; -static struct clk * ddr_clk; - - -#define VIDEO_STATE_NAME "video_state" -#define BUFFER_SIZE 16 - -MODULE_AUTHOR("Mike Lockwood "); -MODULE_DESCRIPTION("Key chord input driver"); -MODULE_SUPPORTED_DEVICE("video_state"); -MODULE_LICENSE("GPL"); - -/* - * video_state_read is used to read video_state events from the driver - */ -static ssize_t video_state_read(struct file *file, char __user *buffer, - size_t count, loff_t *ppos) -{ - return count; -} - -/* - * video_state_write is used to configure the driver - */ -static ssize_t video_state_write(struct file *file, const char __user *buffer, - size_t count, loff_t *ppos) -{ - char *parameters= 0; - int vedeo_state; - int set_rate=0; - int set_rate_old=0; - - if(DDR_FREQ<=333) - return count; - //if (count < sizeof(struct input_keychord)) - // return -EINVAL; - parameters = kzalloc(count, GFP_KERNEL); - if (!parameters) - return -ENOMEM; - - /* read list of keychords from userspace */ - if (copy_from_user(parameters, buffer, count)) { - kfree(parameters); - return -EFAULT; - } - sscanf(parameters, "%d", &vedeo_state); - - //printk("video_state %d\n",vedeo_state); - switch(vedeo_state) - { - case 0: - rk_video_state=0; - set_rate=DDR_FREQ; - break; - case 1: - rk_video_state=1; - set_rate=300; - break; - default: - rk_video_state=0; - return -EFAULT; - } - set_rate_old=clk_get_rate(ddr_clk); - set_rate=clk_round_rate(ddr_clk,set_rate*1000*1000); - if(set_rate_old!=set_rate) - { - clk_set_rate(ddr_clk,set_rate); - //printk("ddr rate=%d\n",set_rate/(1000*1000)); - } - kfree(parameters); - return count; -} - -static unsigned int video_state_poll(struct file *file, poll_table *wait) -{ - return 0; -} - -static int video_state_open(struct inode *inode, struct file *file) -{ - - - return 0; -} - -static int video_state_release(struct inode *inode, struct file *file) -{ - return 0; -} - -static const struct file_operations video_state_fops = { - .owner = THIS_MODULE, - .open = video_state_open, - .release = video_state_release, - .read = video_state_read, - .write = video_state_write, - .poll = video_state_poll, -}; - -static struct miscdevice video_state = { - .fops = &video_state_fops, - .name = VIDEO_STATE_NAME, - .minor = MISC_DYNAMIC_MINOR, -}; - - -static int __init video_state_init(void) -{ - ddr_clk=clk_get(NULL,"ddr"); - if(IS_ERR(ddr_clk)) - return -1; - - - return misc_register(&video_state); -} - -static void __exit video_state_exit(void) -{ - misc_deregister(&video_state); -} - -module_init(video_state_init); -module_exit(video_state_exit); - - - diff --git a/arch/arm/plat-rk/Makefile b/arch/arm/plat-rk/Makefile index 1c295798bdcd..630896ac33fb 100644 --- a/arch/arm/plat-rk/Makefile +++ b/arch/arm/plat-rk/Makefile @@ -12,3 +12,4 @@ obj-y += config.o obj-y += sram.o CFLAGS_sram.o += -mthumb obj-$(CONFIG_DDR_TEST) += memtester.o +obj-$(CONFIG_DDR_FREQ) += video_state.o diff --git a/arch/arm/plat-rk/video_state.c b/arch/arm/plat-rk/video_state.c new file mode 100644 index 000000000000..8b165e676920 --- /dev/null +++ b/arch/arm/plat-rk/video_state.c @@ -0,0 +1,110 @@ +/* + * Copyright (C) 2012 ROCKCHIP, Inc. + * + * This software is licensed under the terms of the GNU General Public + * License version 2, as published by the Free Software Foundation, and + * may be copied, distributed, and modified under those terms. + * + * 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 +#include +#include +#include +#include +#include + +#ifdef CONFIG_ARCH_RK2928 +#define VIDEO_DDR_RATE (330*1000*1000) +#else +#define VIDEO_DDR_RATE (300*1000*1000) +#endif + +static struct clk *ddr_clk; +static unsigned long ddr_rate; +static char video_state = '0'; + +static int video_state_open(struct inode *inode, struct file *file) +{ + ddr_rate = clk_get_rate(ddr_clk); + return 0; +} + +static int video_state_release(struct inode *inode, struct file *file) +{ + clk_set_rate(ddr_clk, ddr_rate); + return 0; +} + +static ssize_t video_state_read(struct file *file, char __user *buffer, + size_t count, loff_t *ppos) +{ + if (copy_to_user(buffer, &video_state, 1)) + return -EFAULT; + return 1; +} + +static ssize_t video_state_write(struct file *file, const char __user *buffer, + size_t count, loff_t *ppos) +{ + unsigned long rate = 0; + + if (ddr_rate <= 333000000) + return count; + if (count < 1) + return count; + if (copy_from_user(&video_state, buffer, 1)) { + return -EFAULT; + } + + switch (video_state) { + case '0': + rate = ddr_rate; + break; + case '1': + rate = VIDEO_DDR_RATE; + break; + default: + return -EINVAL; + } + clk_set_rate(ddr_clk, rate); + return count; +} + +static const struct file_operations video_state_fops = { + .owner = THIS_MODULE, + .open = video_state_open, + .release= video_state_release, + .read = video_state_read, + .write = video_state_write, +}; + +static struct miscdevice video_state_dev = { + .fops = &video_state_fops, + .name = "video_state", + .minor = MISC_DYNAMIC_MINOR, +}; + +static int __init video_state_init(void) +{ + ddr_clk = clk_get(NULL, "ddr"); + if (IS_ERR(ddr_clk)) + return PTR_ERR(ddr_clk); + + return misc_register(&video_state_dev); +} + +static void __exit video_state_exit(void) +{ + misc_deregister(&video_state_dev); + clk_put(ddr_clk); +} + +module_init(video_state_init); +module_exit(video_state_exit); +MODULE_LICENSE("GPL"); -- 2.34.1