Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
Kernel
提交
fd775c08
K
Kernel
项目概览
openeuler
/
Kernel
大约 1 年 前同步成功
通知
5
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
Kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
fd775c08
编写于
3月 28, 2009
作者:
R
Russell King
提交者:
Russell King
3月 28, 2009
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'for-rmk' of
git://git.pengutronix.de/git/imx/linux-2.6
into devel
上级
dc52b5bf
4d1e4e5a
变更
9
隐藏空白更改
内联
并排
Showing
9 changed file
with
96 addition
and
71 deletion
+96
-71
arch/arm/common/clkdev.c
arch/arm/common/clkdev.c
+9
-2
arch/arm/mach-imx/generic.c
arch/arm/mach-imx/generic.c
+0
-36
arch/arm/mach-mx2/Makefile
arch/arm/mach-mx2/Makefile
+1
-1
arch/arm/mach-mx2/devices.c
arch/arm/mach-mx2/devices.c
+0
-2
arch/arm/plat-mxc/Makefile
arch/arm/plat-mxc/Makefile
+1
-1
arch/arm/plat-mxc/include/mach/system.h
arch/arm/plat-mxc/include/mach/system.h
+1
-4
arch/arm/plat-mxc/system.c
arch/arm/plat-mxc/system.c
+27
-23
drivers/video/imxfb.c
drivers/video/imxfb.c
+40
-2
include/linux/clk.h
include/linux/clk.h
+17
-0
未找到文件。
arch/arm/common/clkdev.c
浏览文件 @
fd775c08
...
...
@@ -62,9 +62,8 @@ static struct clk *clk_find(const char *dev_id, const char *con_id)
return
clk
;
}
struct
clk
*
clk_get
(
struct
device
*
dev
,
const
char
*
con_id
)
struct
clk
*
clk_get
_sys
(
const
char
*
dev_id
,
const
char
*
con_id
)
{
const
char
*
dev_id
=
dev
?
dev_name
(
dev
)
:
NULL
;
struct
clk
*
clk
;
mutex_lock
(
&
clocks_mutex
);
...
...
@@ -75,6 +74,14 @@ struct clk *clk_get(struct device *dev, const char *con_id)
return
clk
?
clk
:
ERR_PTR
(
-
ENOENT
);
}
EXPORT_SYMBOL
(
clk_get_sys
);
struct
clk
*
clk_get
(
struct
device
*
dev
,
const
char
*
con_id
)
{
const
char
*
dev_id
=
dev
?
dev_name
(
dev
)
:
NULL
;
return
clk_get_sys
(
dev_id
,
con_id
);
}
EXPORT_SYMBOL
(
clk_get
);
void
clk_put
(
struct
clk
*
clk
)
...
...
arch/arm/mach-imx/generic.c
浏览文件 @
fd775c08
...
...
@@ -29,7 +29,6 @@
#include <linux/string.h>
#include <asm/errno.h>
#include <mach/imxfb.h>
#include <mach/hardware.h>
#include <mach/imx-regs.h>
...
...
@@ -245,43 +244,8 @@ void __init imx_set_mmc_info(struct imxmmc_platform_data *info)
imx_mmc_device
.
dev
.
platform_data
=
info
;
}
static
struct
imx_fb_platform_data
imx_fb_info
;
void
__init
set_imx_fb_info
(
struct
imx_fb_platform_data
*
hard_imx_fb_info
)
{
memcpy
(
&
imx_fb_info
,
hard_imx_fb_info
,
sizeof
(
struct
imx_fb_platform_data
));
}
static
struct
resource
imxfb_resources
[]
=
{
[
0
]
=
{
.
start
=
0x00205000
,
.
end
=
0x002050FF
,
.
flags
=
IORESOURCE_MEM
,
},
[
1
]
=
{
.
start
=
LCDC_INT
,
.
end
=
LCDC_INT
,
.
flags
=
IORESOURCE_IRQ
,
},
};
static
u64
fb_dma_mask
=
~
(
u64
)
0
;
static
struct
platform_device
imxfb_device
=
{
.
name
=
"imx-fb"
,
.
id
=
0
,
.
dev
=
{
.
platform_data
=
&
imx_fb_info
,
.
dma_mask
=
&
fb_dma_mask
,
.
coherent_dma_mask
=
0xffffffff
,
},
.
num_resources
=
ARRAY_SIZE
(
imxfb_resources
),
.
resource
=
imxfb_resources
,
};
static
struct
platform_device
*
devices
[]
__initdata
=
{
&
imx_mmc_device
,
&
imxfb_device
,
};
static
struct
map_desc
imx_io_desc
[]
__initdata
=
{
...
...
arch/arm/mach-mx2/Makefile
浏览文件 @
fd775c08
...
...
@@ -4,7 +4,7 @@
# Object file lists.
obj-y
:=
system.o
generic.o devices.o serial.o
obj-y
:=
generic.o devices.o serial.o
obj-$(CONFIG_MACH_MX21)
+=
clock_imx21.o
...
...
arch/arm/mach-mx2/devices.c
浏览文件 @
fd775c08
...
...
@@ -229,7 +229,6 @@ struct platform_device mxc_nand_device = {
.
resource
=
mxc_nand_resources
,
};
#ifdef CONFIG_FB_IMX
/*
* lcdc:
* - i.MX1: the basic controller
...
...
@@ -259,7 +258,6 @@ struct platform_device mxc_fb_device = {
.
coherent_dma_mask
=
0xFFFFFFFF
,
},
};
#endif
#ifdef CONFIG_MACH_MX27
static
struct
resource
mxc_fec_resources
[]
=
{
...
...
arch/arm/plat-mxc/Makefile
浏览文件 @
fd775c08
...
...
@@ -3,7 +3,7 @@
#
# Common support
obj-y
:=
irq.o clock.o gpio.o time.o devices.o cpu.o
obj-y
:=
irq.o clock.o gpio.o time.o devices.o cpu.o
system.o
obj-$(CONFIG_ARCH_MX1)
+=
iomux-mx1-mx2.o dma-mx1-mx2.o
obj-$(CONFIG_ARCH_MX2)
+=
iomux-mx1-mx2.o dma-mx1-mx2.o
...
...
arch/arm/plat-mxc/include/mach/system.h
浏览文件 @
fd775c08
...
...
@@ -26,9 +26,6 @@ static inline void arch_idle(void)
cpu_do_idle
();
}
static
inline
void
arch_reset
(
char
mode
,
const
char
*
cmd
)
{
cpu_reset
(
0
);
}
void
arch_reset
(
char
mode
,
const
char
*
cmd
);
#endif
/* __ASM_ARCH_MXC_SYSTEM_H__ */
arch/arm/
mach-mx2
/system.c
→
arch/arm/
plat-mxc
/system.c
浏览文件 @
fd775c08
...
...
@@ -3,6 +3,7 @@
* Copyright (C) 2000 Deep Blue Solutions Ltd
* Copyright 2006-2007 Freescale Semiconductor, Inc. All Rights Reserved.
* Copyright 2008 Juergen Beisert, kernel@pengutronix.de
* Copyright 2009 Ilya Yanok, Emcraft Systems Ltd, yanok@emcraft.com
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
...
...
@@ -22,42 +23,45 @@
#include <linux/kernel.h>
#include <linux/clk.h>
#include <linux/io.h>
#include <linux/err.h>
#include <linux/delay.h>
#include <mach/hardware.h>
#include <asm/proc-fns.h>
#include <asm/system.h>
/*
* Put the CPU into idle mode. It is called by default_idle()
* in process.c file.
*/
void
arch_idle
(
void
)
{
/*
* This should do all the clock switching
* and wait for interrupt tricks.
*/
cpu_do_idle
();
}
#define WDOG_WCR_REG IO_ADDRESS(WDOG_BASE_ADDR)
#define WDOG_WCR_SRS (1 << 4)
#ifdef CONFIG_ARCH_MX1
#define WDOG_WCR_REG IO_ADDRESS(WDT_BASE_ADDR)
#define WDOG_WCR_ENABLE (1 << 0)
#else
#define WDOG_WCR_REG IO_ADDRESS(WDOG_BASE_ADDR)
#define WDOG_WCR_ENABLE (1 << 2)
#endif
/*
* Reset the system. It is called by machine_restart().
*/
void
arch_reset
(
char
mode
,
const
char
*
cmd
)
{
struct
clk
*
clk
;
if
(
!
cpu_is_mx1
())
{
struct
clk
*
clk
;
clk
=
clk_get
(
NULL
,
"wdog_clk"
);
if
(
!
clk
)
{
printk
(
KERN_ERR
"Cannot activate the watchdog. Giving up
\n
"
);
return
;
clk
=
clk_get_sys
(
"imx-wdt.0"
,
NULL
);
if
(
!
IS_ERR
(
clk
))
clk_enable
(
clk
);
}
clk_enable
(
clk
);
/* Assert SRS signal */
__raw_writew
(
__raw_readw
(
WDOG_WCR_REG
)
&
~
WDOG_WCR_SRS
,
WDOG_WCR_REG
);
__raw_writew
(
WDOG_WCR_ENABLE
,
WDOG_WCR_REG
);
/* wait for reset to assert... */
mdelay
(
500
);
printk
(
KERN_ERR
"Watchdog reset failed to assert reset
\n
"
);
/* delay to allow the serial port to show the message */
mdelay
(
50
);
/* we'll take a jump through zero as a poor second */
cpu_reset
(
0
);
}
drivers/video/imxfb.c
浏览文件 @
fd775c08
...
...
@@ -26,9 +26,11 @@
#include <linux/init.h>
#include <linux/ioport.h>
#include <linux/cpufreq.h>
#include <linux/clk.h>
#include <linux/platform_device.h>
#include <linux/dma-mapping.h>
#include <linux/io.h>
#include <linux/math64.h>
#include <mach/imxfb.h>
...
...
@@ -141,6 +143,7 @@ struct imxfb_rgb {
struct
imxfb_info
{
struct
platform_device
*
pdev
;
void
__iomem
*
regs
;
struct
clk
*
clk
;
u_int
max_bpp
;
u_int
max_xres
;
...
...
@@ -324,7 +327,7 @@ static int imxfb_check_var(struct fb_var_screeninfo *var, struct fb_info *info)
break
;
case
16
:
default:
if
(
readl
(
fbi
->
regs
+
LCDC_PCR
)
&
PCR_TFT
)
if
(
fbi
->
pcr
&
PCR_TFT
)
rgb
=
&
def_rgb_16_tft
;
else
rgb
=
&
def_rgb_16_stn
;
...
...
@@ -403,6 +406,8 @@ static void imxfb_enable_controller(struct imxfb_info *fbi)
writel
(
RMCR_LCDC_EN
,
fbi
->
regs
+
LCDC_RMCR
);
clk_enable
(
fbi
->
clk
);
if
(
fbi
->
backlight_power
)
fbi
->
backlight_power
(
1
);
if
(
fbi
->
lcd_power
)
...
...
@@ -418,6 +423,8 @@ static void imxfb_disable_controller(struct imxfb_info *fbi)
if
(
fbi
->
lcd_power
)
fbi
->
lcd_power
(
0
);
clk_disable
(
fbi
->
clk
);
writel
(
0
,
fbi
->
regs
+
LCDC_RMCR
);
}
...
...
@@ -461,6 +468,9 @@ static struct fb_ops imxfb_ops = {
static
int
imxfb_activate_var
(
struct
fb_var_screeninfo
*
var
,
struct
fb_info
*
info
)
{
struct
imxfb_info
*
fbi
=
info
->
par
;
unsigned
int
pcr
,
lcd_clk
;
unsigned
long
long
tmp
;
pr_debug
(
"var: xres=%d hslen=%d lm=%d rm=%d
\n
"
,
var
->
xres
,
var
->
hsync_len
,
var
->
left_margin
,
var
->
right_margin
);
...
...
@@ -507,7 +517,23 @@ static int imxfb_activate_var(struct fb_var_screeninfo *var, struct fb_info *inf
writel
(
SIZE_XMAX
(
var
->
xres
)
|
SIZE_YMAX
(
var
->
yres
),
fbi
->
regs
+
LCDC_SIZE
);
writel
(
fbi
->
pcr
,
fbi
->
regs
+
LCDC_PCR
);
lcd_clk
=
clk_get_rate
(
fbi
->
clk
);
tmp
=
var
->
pixclock
*
(
unsigned
long
long
)
lcd_clk
;
do_div
(
tmp
,
1000000
);
if
(
do_div
(
tmp
,
1000000
)
>
500000
)
tmp
++
;
pcr
=
(
unsigned
int
)
tmp
;
if
(
--
pcr
>
0x3F
)
{
pcr
=
0x3F
;
printk
(
KERN_WARNING
"Must limit pixel clock to %uHz
\n
"
,
lcd_clk
/
pcr
);
}
/* add sync polarities */
pcr
|=
fbi
->
pcr
&
~
0x3F
;
writel
(
pcr
,
fbi
->
regs
+
LCDC_PCR
);
writel
(
fbi
->
pwmr
,
fbi
->
regs
+
LCDC_PWMR
);
writel
(
fbi
->
lscr1
,
fbi
->
regs
+
LCDC_LSCR1
);
writel
(
fbi
->
dmacr
,
fbi
->
regs
+
LCDC_DMACR
);
...
...
@@ -649,6 +675,13 @@ static int __init imxfb_probe(struct platform_device *pdev)
goto
failed_req
;
}
fbi
->
clk
=
clk_get
(
&
pdev
->
dev
,
NULL
);
if
(
IS_ERR
(
fbi
->
clk
))
{
ret
=
PTR_ERR
(
fbi
->
clk
);;
dev_err
(
&
pdev
->
dev
,
"unable to get clock: %d
\n
"
,
ret
);
goto
failed_getclock
;
}
fbi
->
regs
=
ioremap
(
res
->
start
,
resource_size
(
res
));
if
(
fbi
->
regs
==
NULL
)
{
printk
(
KERN_ERR
"Cannot map frame buffer registers
\n
"
);
...
...
@@ -717,6 +750,8 @@ static int __init imxfb_probe(struct platform_device *pdev)
dma_free_writecombine
(
&
pdev
->
dev
,
fbi
->
map_size
,
fbi
->
map_cpu
,
fbi
->
map_dma
);
failed_map:
clk_put
(
fbi
->
clk
);
failed_getclock:
iounmap
(
fbi
->
regs
);
failed_ioremap:
release_mem_region
(
res
->
start
,
res
->
end
-
res
->
start
);
...
...
@@ -751,6 +786,9 @@ static int __devexit imxfb_remove(struct platform_device *pdev)
iounmap
(
fbi
->
regs
);
release_mem_region
(
res
->
start
,
res
->
end
-
res
->
start
+
1
);
clk_disable
(
fbi
->
clk
);
clk_put
(
fbi
->
clk
);
platform_set_drvdata
(
pdev
,
NULL
);
return
0
;
...
...
include/linux/clk.h
浏览文件 @
fd775c08
...
...
@@ -125,4 +125,21 @@ int clk_set_parent(struct clk *clk, struct clk *parent);
*/
struct
clk
*
clk_get_parent
(
struct
clk
*
clk
);
/**
* clk_get_sys - get a clock based upon the device name
* @dev_id: device name
* @con_id: connection ID
*
* Returns a struct clk corresponding to the clock producer, or
* valid IS_ERR() condition containing errno. The implementation
* uses @dev_id and @con_id to determine the clock consumer, and
* thereby the clock producer. In contrast to clk_get() this function
* takes the device name instead of the device itself for identification.
*
* Drivers must assume that the clock source is not enabled.
*
* clk_get_sys should not be called from within interrupt context.
*/
struct
clk
*
clk_get_sys
(
const
char
*
dev_id
,
const
char
*
con_id
);
#endif
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录