Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
fd775c08
Commit
fd775c08
authored
Mar 28, 2009
by
Russell King
Committed by
Russell King
Mar 28, 2009
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'for-rmk' of
git://git.pengutronix.de/git/imx/linux-2.6
into devel
parents
dc52b5bf
4d1e4e5a
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
96 additions
and
71 deletions
+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
No files found.
arch/arm/common/clkdev.c
View file @
fd775c08
...
@@ -62,9 +62,8 @@ static struct clk *clk_find(const char *dev_id, const char *con_id)
...
@@ -62,9 +62,8 @@ static struct clk *clk_find(const char *dev_id, const char *con_id)
return
clk
;
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
;
struct
clk
*
clk
;
mutex_lock
(
&
clocks_mutex
);
mutex_lock
(
&
clocks_mutex
);
...
@@ -75,6 +74,14 @@ struct clk *clk_get(struct device *dev, const char *con_id)
...
@@ -75,6 +74,14 @@ struct clk *clk_get(struct device *dev, const char *con_id)
return
clk
?
clk
:
ERR_PTR
(
-
ENOENT
);
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
);
EXPORT_SYMBOL
(
clk_get
);
void
clk_put
(
struct
clk
*
clk
)
void
clk_put
(
struct
clk
*
clk
)
...
...
arch/arm/mach-imx/generic.c
View file @
fd775c08
...
@@ -29,7 +29,6 @@
...
@@ -29,7 +29,6 @@
#include <linux/string.h>
#include <linux/string.h>
#include <asm/errno.h>
#include <asm/errno.h>
#include <mach/imxfb.h>
#include <mach/hardware.h>
#include <mach/hardware.h>
#include <mach/imx-regs.h>
#include <mach/imx-regs.h>
...
@@ -245,43 +244,8 @@ void __init imx_set_mmc_info(struct imxmmc_platform_data *info)
...
@@ -245,43 +244,8 @@ void __init imx_set_mmc_info(struct imxmmc_platform_data *info)
imx_mmc_device
.
dev
.
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
=
{
static
struct
platform_device
*
devices
[]
__initdata
=
{
&
imx_mmc_device
,
&
imx_mmc_device
,
&
imxfb_device
,
};
};
static
struct
map_desc
imx_io_desc
[]
__initdata
=
{
static
struct
map_desc
imx_io_desc
[]
__initdata
=
{
...
...
arch/arm/mach-mx2/Makefile
View file @
fd775c08
...
@@ -4,7 +4,7 @@
...
@@ -4,7 +4,7 @@
# Object file lists.
# 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
obj-$(CONFIG_MACH_MX21)
+=
clock_imx21.o
...
...
arch/arm/mach-mx2/devices.c
View file @
fd775c08
...
@@ -229,7 +229,6 @@ struct platform_device mxc_nand_device = {
...
@@ -229,7 +229,6 @@ struct platform_device mxc_nand_device = {
.
resource
=
mxc_nand_resources
,
.
resource
=
mxc_nand_resources
,
};
};
#ifdef CONFIG_FB_IMX
/*
/*
* lcdc:
* lcdc:
* - i.MX1: the basic controller
* - i.MX1: the basic controller
...
@@ -259,7 +258,6 @@ struct platform_device mxc_fb_device = {
...
@@ -259,7 +258,6 @@ struct platform_device mxc_fb_device = {
.
coherent_dma_mask
=
0xFFFFFFFF
,
.
coherent_dma_mask
=
0xFFFFFFFF
,
},
},
};
};
#endif
#ifdef CONFIG_MACH_MX27
#ifdef CONFIG_MACH_MX27
static
struct
resource
mxc_fec_resources
[]
=
{
static
struct
resource
mxc_fec_resources
[]
=
{
...
...
arch/arm/plat-mxc/Makefile
View file @
fd775c08
...
@@ -3,7 +3,7 @@
...
@@ -3,7 +3,7 @@
#
#
# Common support
# 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_MX1)
+=
iomux-mx1-mx2.o dma-mx1-mx2.o
obj-$(CONFIG_ARCH_MX2)
+=
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
View file @
fd775c08
...
@@ -26,9 +26,6 @@ static inline void arch_idle(void)
...
@@ -26,9 +26,6 @@ static inline void arch_idle(void)
cpu_do_idle
();
cpu_do_idle
();
}
}
static
inline
void
arch_reset
(
char
mode
,
const
char
*
cmd
)
void
arch_reset
(
char
mode
,
const
char
*
cmd
);
{
cpu_reset
(
0
);
}
#endif
/* __ASM_ARCH_MXC_SYSTEM_H__ */
#endif
/* __ASM_ARCH_MXC_SYSTEM_H__ */
arch/arm/
mach-mx2
/system.c
→
arch/arm/
plat-mxc
/system.c
View file @
fd775c08
...
@@ -3,6 +3,7 @@
...
@@ -3,6 +3,7 @@
* Copyright (C) 2000 Deep Blue Solutions Ltd
* Copyright (C) 2000 Deep Blue Solutions Ltd
* Copyright 2006-2007 Freescale Semiconductor, Inc. All Rights Reserved.
* Copyright 2006-2007 Freescale Semiconductor, Inc. All Rights Reserved.
* Copyright 2008 Juergen Beisert, kernel@pengutronix.de
* 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
* 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
* it under the terms of the GNU General Public License as published by
...
@@ -22,42 +23,45 @@
...
@@ -22,42 +23,45 @@
#include <linux/kernel.h>
#include <linux/kernel.h>
#include <linux/clk.h>
#include <linux/clk.h>
#include <linux/io.h>
#include <linux/io.h>
#include <linux/err.h>
#include <linux/delay.h>
#include <mach/hardware.h>
#include <mach/hardware.h>
#include <asm/proc-fns.h>
#include <asm/proc-fns.h>
#include <asm/system.h>
#include <asm/system.h>
/*
#ifdef CONFIG_ARCH_MX1
* Put the CPU into idle mode. It is called by default_idle()
#define WDOG_WCR_REG IO_ADDRESS(WDT_BASE_ADDR)
* in process.c file.
#define WDOG_WCR_ENABLE (1 << 0)
*/
#else
void
arch_idle
(
void
)
#define WDOG_WCR_REG IO_ADDRESS(WDOG_BASE_ADDR)
{
#define WDOG_WCR_ENABLE (1 << 2)
/*
#endif
* 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)
/*
/*
* Reset the system. It is called by machine_restart().
* Reset the system. It is called by machine_restart().
*/
*/
void
arch_reset
(
char
mode
,
const
char
*
cmd
)
void
arch_reset
(
char
mode
,
const
char
*
cmd
)
{
{
struct
clk
*
clk
;
if
(
!
cpu_is_mx1
())
{
struct
clk
*
clk
;
clk
=
clk_get
(
NULL
,
"wdog_clk"
);
clk
=
clk_get_sys
(
"imx-wdt.0"
,
NULL
);
if
(
!
clk
)
{
if
(
!
IS_ERR
(
clk
))
printk
(
KERN_ERR
"Cannot activate the watchdog. Giving up
\n
"
);
clk_enable
(
clk
);
return
;
}
}
clk_enable
(
clk
);
/* Assert SRS signal */
/* 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
View file @
fd775c08
...
@@ -26,9 +26,11 @@
...
@@ -26,9 +26,11 @@
#include <linux/init.h>
#include <linux/init.h>
#include <linux/ioport.h>
#include <linux/ioport.h>
#include <linux/cpufreq.h>
#include <linux/cpufreq.h>
#include <linux/clk.h>
#include <linux/platform_device.h>
#include <linux/platform_device.h>
#include <linux/dma-mapping.h>
#include <linux/dma-mapping.h>
#include <linux/io.h>
#include <linux/io.h>
#include <linux/math64.h>
#include <mach/imxfb.h>
#include <mach/imxfb.h>
...
@@ -141,6 +143,7 @@ struct imxfb_rgb {
...
@@ -141,6 +143,7 @@ struct imxfb_rgb {
struct
imxfb_info
{
struct
imxfb_info
{
struct
platform_device
*
pdev
;
struct
platform_device
*
pdev
;
void
__iomem
*
regs
;
void
__iomem
*
regs
;
struct
clk
*
clk
;
u_int
max_bpp
;
u_int
max_bpp
;
u_int
max_xres
;
u_int
max_xres
;
...
@@ -324,7 +327,7 @@ static int imxfb_check_var(struct fb_var_screeninfo *var, struct fb_info *info)
...
@@ -324,7 +327,7 @@ static int imxfb_check_var(struct fb_var_screeninfo *var, struct fb_info *info)
break
;
break
;
case
16
:
case
16
:
default:
default:
if
(
readl
(
fbi
->
regs
+
LCDC_PCR
)
&
PCR_TFT
)
if
(
fbi
->
pcr
&
PCR_TFT
)
rgb
=
&
def_rgb_16_tft
;
rgb
=
&
def_rgb_16_tft
;
else
else
rgb
=
&
def_rgb_16_stn
;
rgb
=
&
def_rgb_16_stn
;
...
@@ -403,6 +406,8 @@ static void imxfb_enable_controller(struct imxfb_info *fbi)
...
@@ -403,6 +406,8 @@ static void imxfb_enable_controller(struct imxfb_info *fbi)
writel
(
RMCR_LCDC_EN
,
fbi
->
regs
+
LCDC_RMCR
);
writel
(
RMCR_LCDC_EN
,
fbi
->
regs
+
LCDC_RMCR
);
clk_enable
(
fbi
->
clk
);
if
(
fbi
->
backlight_power
)
if
(
fbi
->
backlight_power
)
fbi
->
backlight_power
(
1
);
fbi
->
backlight_power
(
1
);
if
(
fbi
->
lcd_power
)
if
(
fbi
->
lcd_power
)
...
@@ -418,6 +423,8 @@ static void imxfb_disable_controller(struct imxfb_info *fbi)
...
@@ -418,6 +423,8 @@ static void imxfb_disable_controller(struct imxfb_info *fbi)
if
(
fbi
->
lcd_power
)
if
(
fbi
->
lcd_power
)
fbi
->
lcd_power
(
0
);
fbi
->
lcd_power
(
0
);
clk_disable
(
fbi
->
clk
);
writel
(
0
,
fbi
->
regs
+
LCDC_RMCR
);
writel
(
0
,
fbi
->
regs
+
LCDC_RMCR
);
}
}
...
@@ -461,6 +468,9 @@ static struct fb_ops imxfb_ops = {
...
@@ -461,6 +468,9 @@ static struct fb_ops imxfb_ops = {
static
int
imxfb_activate_var
(
struct
fb_var_screeninfo
*
var
,
struct
fb_info
*
info
)
static
int
imxfb_activate_var
(
struct
fb_var_screeninfo
*
var
,
struct
fb_info
*
info
)
{
{
struct
imxfb_info
*
fbi
=
info
->
par
;
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
"
,
pr_debug
(
"var: xres=%d hslen=%d lm=%d rm=%d
\n
"
,
var
->
xres
,
var
->
hsync_len
,
var
->
xres
,
var
->
hsync_len
,
var
->
left_margin
,
var
->
right_margin
);
var
->
left_margin
,
var
->
right_margin
);
...
@@ -507,7 +517,23 @@ static int imxfb_activate_var(struct fb_var_screeninfo *var, struct fb_info *inf
...
@@ -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
),
writel
(
SIZE_XMAX
(
var
->
xres
)
|
SIZE_YMAX
(
var
->
yres
),
fbi
->
regs
+
LCDC_SIZE
);
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
->
pwmr
,
fbi
->
regs
+
LCDC_PWMR
);
writel
(
fbi
->
lscr1
,
fbi
->
regs
+
LCDC_LSCR1
);
writel
(
fbi
->
lscr1
,
fbi
->
regs
+
LCDC_LSCR1
);
writel
(
fbi
->
dmacr
,
fbi
->
regs
+
LCDC_DMACR
);
writel
(
fbi
->
dmacr
,
fbi
->
regs
+
LCDC_DMACR
);
...
@@ -649,6 +675,13 @@ static int __init imxfb_probe(struct platform_device *pdev)
...
@@ -649,6 +675,13 @@ static int __init imxfb_probe(struct platform_device *pdev)
goto
failed_req
;
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
));
fbi
->
regs
=
ioremap
(
res
->
start
,
resource_size
(
res
));
if
(
fbi
->
regs
==
NULL
)
{
if
(
fbi
->
regs
==
NULL
)
{
printk
(
KERN_ERR
"Cannot map frame buffer registers
\n
"
);
printk
(
KERN_ERR
"Cannot map frame buffer registers
\n
"
);
...
@@ -717,6 +750,8 @@ static int __init imxfb_probe(struct platform_device *pdev)
...
@@ -717,6 +750,8 @@ static int __init imxfb_probe(struct platform_device *pdev)
dma_free_writecombine
(
&
pdev
->
dev
,
fbi
->
map_size
,
fbi
->
map_cpu
,
dma_free_writecombine
(
&
pdev
->
dev
,
fbi
->
map_size
,
fbi
->
map_cpu
,
fbi
->
map_dma
);
fbi
->
map_dma
);
failed_map:
failed_map:
clk_put
(
fbi
->
clk
);
failed_getclock:
iounmap
(
fbi
->
regs
);
iounmap
(
fbi
->
regs
);
failed_ioremap:
failed_ioremap:
release_mem_region
(
res
->
start
,
res
->
end
-
res
->
start
);
release_mem_region
(
res
->
start
,
res
->
end
-
res
->
start
);
...
@@ -751,6 +786,9 @@ static int __devexit imxfb_remove(struct platform_device *pdev)
...
@@ -751,6 +786,9 @@ static int __devexit imxfb_remove(struct platform_device *pdev)
iounmap
(
fbi
->
regs
);
iounmap
(
fbi
->
regs
);
release_mem_region
(
res
->
start
,
res
->
end
-
res
->
start
+
1
);
release_mem_region
(
res
->
start
,
res
->
end
-
res
->
start
+
1
);
clk_disable
(
fbi
->
clk
);
clk_put
(
fbi
->
clk
);
platform_set_drvdata
(
pdev
,
NULL
);
platform_set_drvdata
(
pdev
,
NULL
);
return
0
;
return
0
;
...
...
include/linux/clk.h
View file @
fd775c08
...
@@ -125,4 +125,21 @@ int clk_set_parent(struct clk *clk, struct clk *parent);
...
@@ -125,4 +125,21 @@ int clk_set_parent(struct clk *clk, struct clk *parent);
*/
*/
struct
clk
*
clk_get_parent
(
struct
clk
*
clk
);
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
#endif
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment