Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
linux-davinci
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
linux
linux-davinci
Commits
312286aa
Commit
312286aa
authored
Nov 25, 2009
by
Kevin Hilman
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'davinci-upstream-submitted' into davinci-reset
parents
c95dc93d
62597811
Changes
7
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
1470 additions
and
8 deletions
+1470
-8
arch/arm/boot/compressed/head.S
arch/arm/boot/compressed/head.S
+15
-0
arch/arm/mach-davinci/include/mach/nand.h
arch/arm/mach-davinci/include/mach/nand.h
+4
-0
drivers/mmc/host/Kconfig
drivers/mmc/host/Kconfig
+8
-0
drivers/mmc/host/Makefile
drivers/mmc/host/Makefile
+1
-0
drivers/mmc/host/davinci_mmc.c
drivers/mmc/host/davinci_mmc.c
+1349
-0
drivers/mtd/nand/davinci_nand.c
drivers/mtd/nand/davinci_nand.c
+18
-0
drivers/video/da8xx-fb.c
drivers/video/da8xx-fb.c
+75
-8
No files found.
arch/arm/boot/compressed/head.S
View file @
312286aa
...
...
@@ -412,7 +412,11 @@ __setup_mmu: sub r3, r4, #16384 @ Page directory size
orr
r1
,
r1
,
#
3
<<
10
add
r2
,
r3
,
#
16384
1
:
cmp
r1
,
r9
@
if
virt
>
start
of
RAM
#ifdef CONFIG_CPU_DCACHE_WRITETHROUGH
orrhs
r1
,
r1
,
#
0x08
@
set
cacheable
#else
orrhs
r1
,
r1
,
#
0x0c
@
set
cacheable
,
bufferable
#endif
cmp
r1
,
r10
@
if
virt
>
end
of
RAM
bichs
r1
,
r1
,
#
0x0c
@
clear
cacheable
,
bufferable
str
r1
,
[
r0
],
#
4
@
1
:
1
mapping
...
...
@@ -436,6 +440,11 @@ __setup_mmu: sub r3, r4, #16384 @ Page directory size
mov
pc
,
lr
ENDPROC
(
__setup_mmu
)
__arm926ejs_mmu_cache_on
:
#ifdef CONFIG_CPU_DCACHE_WRITETHROUGH
mov
r0
,
#
4
@
put
dcache
in
WT
mode
mcr
p15
,
7
,
r0
,
c15
,
c0
,
0
#endif
__armv4_mmu_cache_on
:
mov
r12
,
lr
#ifdef CONFIG_MMU
...
...
@@ -655,6 +664,12 @@ proc_types:
W
(
b
)
__armv4_mpu_cache_off
W
(
b
)
__armv4_mpu_cache_flush
.
word
0x41069260
@
ARM926EJ
-
S
(
v5TEJ
)
.
word
0xff0ffff0
b
__arm926ejs_mmu_cache_on
b
__armv4_mmu_cache_off
b
__armv5tej_mmu_cache_flush
.
word
0x00007000
@
ARM7
IDs
.
word
0x0000f000
mov
pc
,
lr
...
...
arch/arm/mach-davinci/include/mach/nand.h
View file @
312286aa
...
...
@@ -79,6 +79,10 @@ struct davinci_nand_pdata { /* platform_data */
/* e.g. NAND_BUSWIDTH_16 or NAND_USE_FLASH_BBT */
unsigned
options
;
/* Main and mirror bbt descriptor overrides */
struct
nand_bbt_descr
*
bbt_td
;
struct
nand_bbt_descr
*
bbt_md
;
};
#endif
/* __ARCH_ARM_DAVINCI_NAND_H */
drivers/mmc/host/Kconfig
View file @
312286aa
...
...
@@ -251,6 +251,14 @@ config MMC_MVSDIO
To compile this driver as a module, choose M here: the
module will be called mvsdio.
config MMC_DAVINCI
tristate "TI DAVINCI Multimedia Card Interface support"
depends on ARCH_DAVINCI
help
This selects the TI DAVINCI Multimedia card Interface.
If you have an DAVINCI board with a Multimedia Card slot,
say Y or M here. If unsure, say N.
config MMC_SPI
tristate "MMC/SD/SDIO over SPI"
depends on SPI_MASTER && !HIGHMEM && HAS_DMA
...
...
drivers/mmc/host/Makefile
View file @
312286aa
...
...
@@ -25,6 +25,7 @@ obj-$(CONFIG_MMC_ATMELMCI) += atmel-mci.o
obj-$(CONFIG_MMC_TIFM_SD)
+=
tifm_sd.o
obj-$(CONFIG_MMC_MSM7X00A)
+=
msm_sdcc.o
obj-$(CONFIG_MMC_MVSDIO)
+=
mvsdio.o
obj-$(CONFIG_MMC_DAVINCI)
+=
davinci_mmc.o
obj-$(CONFIG_MMC_SPI)
+=
mmc_spi.o
ifeq
($(CONFIG_OF),y)
obj-$(CONFIG_MMC_SPI)
+=
of_mmc_spi.o
...
...
drivers/mmc/host/davinci_mmc.c
0 → 100644
View file @
312286aa
This diff is collapsed.
Click to expand it.
drivers/mtd/nand/davinci_nand.c
View file @
312286aa
...
...
@@ -310,6 +310,7 @@ static int nand_davinci_correct_4bit(struct mtd_info *mtd,
unsigned
short
ecc10
[
8
];
unsigned
short
*
ecc16
;
u32
syndrome
[
4
];
u32
ecc_state
;
unsigned
num_errors
,
corrected
;
/* All bytes 0xff? It's an erased page; ignore its ECC. */
...
...
@@ -360,6 +361,21 @@ compare:
*/
davinci_nand_writel
(
info
,
NANDFCR_OFFSET
,
davinci_nand_readl
(
info
,
NANDFCR_OFFSET
)
|
BIT
(
13
));
/*
* ECC_STATE field reads 0x3 (Error correction complete) immediately
* after setting the 4BITECC_ADD_CALC_START bit. So if you immediately
* begin trying to poll for the state, you may fall right out of your
* loop without any of the correction calculations having taken place.
* The recommendation from the hardware team is to wait till ECC_STATE
* reads less than 4, which means ECC HW has entered correction state.
*/
do
{
ecc_state
=
(
davinci_nand_readl
(
info
,
NANDFSR_OFFSET
)
>>
8
)
&
0x0f
;
cpu_relax
();
}
while
(
ecc_state
<
4
);
for
(;;)
{
u32
fsr
=
davinci_nand_readl
(
info
,
NANDFSR_OFFSET
);
...
...
@@ -591,6 +607,8 @@ static int __init nand_davinci_probe(struct platform_device *pdev)
/* options such as NAND_USE_FLASH_BBT or 16-bit widths */
info
->
chip
.
options
=
pdata
->
options
;
info
->
chip
.
bbt_td
=
pdata
->
bbt_td
;
info
->
chip
.
bbt_md
=
pdata
->
bbt_md
;
info
->
ioaddr
=
(
uint32_t
__force
)
vaddr
;
...
...
drivers/video/da8xx-fb.c
View file @
312286aa
...
...
@@ -28,6 +28,7 @@
#include <linux/uaccess.h>
#include <linux/interrupt.h>
#include <linux/clk.h>
#include <linux/cpufreq.h>
#include <video/da8xx-fb.h>
#define DRIVER_NAME "da8xx_lcdc"
...
...
@@ -113,6 +114,10 @@ struct da8xx_fb_par {
unsigned
short
pseudo_palette
[
16
];
unsigned
int
databuf_sz
;
unsigned
int
palette_sz
;
unsigned
int
pxl_clk
;
#ifdef CONFIG_CPU_FREQ
struct
notifier_block
freq_transition
;
#endif
};
/* Variable Screen Information */
...
...
@@ -155,7 +160,7 @@ struct da8xx_panel {
int
vfp
;
/* Vertical front porch */
int
vbp
;
/* Vertical back porch */
int
vsw
;
/* Vertical Sync Pulse Width */
int
pxl_clk
;
/* Pixel clock */
unsigned
int
pxl_clk
;
/* Pixel clock */
unsigned
char
invert_pxl_clk
;
/* Invert Pixel clock */
};
...
...
@@ -171,7 +176,7 @@ static struct da8xx_panel known_lcd_panels[] = {
.
vfp
=
2
,
.
vbp
=
2
,
.
vsw
=
0
,
.
pxl_clk
=
0x1
0
,
.
pxl_clk
=
460800
0
,
.
invert_pxl_clk
=
1
,
},
/* Sharp LK043T1DG01 */
...
...
@@ -185,7 +190,7 @@ static struct da8xx_panel known_lcd_panels[] = {
.
vfp
=
2
,
.
vbp
=
2
,
.
vsw
=
10
,
.
pxl_clk
=
0x12
,
.
pxl_clk
=
7833600
,
.
invert_pxl_clk
=
0
,
},
};
...
...
@@ -451,6 +456,18 @@ static void lcd_reset(struct da8xx_fb_par *par)
lcdc_write
(
0
,
LCD_RASTER_CTRL_REG
);
}
static
void
lcd_calc_clk_divider
(
struct
da8xx_fb_par
*
par
)
{
unsigned
int
lcd_clk
,
div
;
lcd_clk
=
clk_get_rate
(
par
->
lcdc_clk
);
div
=
lcd_clk
/
par
->
pxl_clk
;
/* Configure the LCD clock divisor. */
lcdc_write
(
LCD_CLK_DIVISOR
(
div
)
|
(
LCD_RASTER_MODE
&
0x1
),
LCD_CTRL_REG
);
}
static
int
lcd_init
(
struct
da8xx_fb_par
*
par
,
const
struct
lcd_ctrl_config
*
cfg
,
struct
da8xx_panel
*
panel
)
{
...
...
@@ -459,9 +476,8 @@ static int lcd_init(struct da8xx_fb_par *par, const struct lcd_ctrl_config *cfg,
lcd_reset
(
par
);
/* Configure the LCD clock divisor. */
lcdc_write
(
LCD_CLK_DIVISOR
(
panel
->
pxl_clk
)
|
(
LCD_RASTER_MODE
&
0x1
),
LCD_CTRL_REG
);
/* Calculate the divider */
lcd_calc_clk_divider
(
par
);
if
(
panel
->
invert_pxl_clk
)
lcdc_write
((
lcdc_read
(
LCD_RASTER_TIMING_2_REG
)
|
...
...
@@ -574,6 +590,41 @@ static int fb_check_var(struct fb_var_screeninfo *var,
return
err
;
}
#ifdef CONFIG_CPU_FREQ
static
int
lcd_da8xx_cpufreq_transition
(
struct
notifier_block
*
nb
,
unsigned
long
val
,
void
*
data
)
{
struct
da8xx_fb_par
*
par
;
unsigned
int
reg
;
par
=
container_of
(
nb
,
struct
da8xx_fb_par
,
freq_transition
);
if
(
val
==
CPUFREQ_PRECHANGE
)
{
reg
=
lcdc_read
(
LCD_RASTER_CTRL_REG
);
lcdc_write
(
reg
&
~
LCD_RASTER_ENABLE
,
LCD_RASTER_CTRL_REG
);
}
else
if
(
val
==
CPUFREQ_POSTCHANGE
)
{
lcd_calc_clk_divider
(
par
);
reg
=
lcdc_read
(
LCD_RASTER_CTRL_REG
);
lcdc_write
(
reg
|
LCD_RASTER_ENABLE
,
LCD_RASTER_CTRL_REG
);
}
return
0
;
}
static
inline
int
lcd_da8xx_cpufreq_register
(
struct
da8xx_fb_par
*
par
)
{
par
->
freq_transition
.
notifier_call
=
lcd_da8xx_cpufreq_transition
;
return
cpufreq_register_notifier
(
&
par
->
freq_transition
,
CPUFREQ_TRANSITION_NOTIFIER
);
}
static
inline
void
lcd_da8xx_cpufreq_deregister
(
struct
da8xx_fb_par
*
par
)
{
cpufreq_unregister_notifier
(
&
par
->
freq_transition
,
CPUFREQ_TRANSITION_NOTIFIER
);
}
#endif
static
int
__devexit
fb_remove
(
struct
platform_device
*
dev
)
{
struct
fb_info
*
info
=
dev_get_drvdata
(
&
dev
->
dev
);
...
...
@@ -581,6 +632,9 @@ static int __devexit fb_remove(struct platform_device *dev)
if
(
info
)
{
struct
da8xx_fb_par
*
par
=
info
->
par
;
#ifdef CONFIG_CPU_FREQ
lcd_da8xx_cpufreq_deregister
(
par
);
#endif
if
(
lcdc_read
(
LCD_RASTER_CTRL_REG
)
&
LCD_RASTER_ENABLE
)
lcd_disable_raster
(
par
);
lcdc_write
(
0
,
LCD_RASTER_CTRL_REG
);
...
...
@@ -721,6 +775,8 @@ static int __init fb_probe(struct platform_device *device)
}
par
=
da8xx_fb_info
->
par
;
par
->
lcdc_clk
=
fb_clk
;
par
->
pxl_clk
=
lcdc_info
->
pxl_clk
;
if
(
lcd_init
(
par
,
lcd_cfg
,
lcdc_info
)
<
0
)
{
dev_err
(
&
device
->
dev
,
"lcd_init failed
\n
"
);
...
...
@@ -753,8 +809,6 @@ static int __init fb_probe(struct platform_device *device)
da8xx_fb_fix
.
smem_len
=
par
->
databuf_sz
-
par
->
palette_sz
;
da8xx_fb_fix
.
line_length
=
(
lcdc_info
->
width
*
lcd_cfg
->
bpp
)
/
8
;
par
->
lcdc_clk
=
fb_clk
;
par
->
irq
=
platform_get_irq
(
device
,
0
);
if
(
par
->
irq
<
0
)
{
ret
=
-
ENOENT
;
...
...
@@ -811,12 +865,25 @@ static int __init fb_probe(struct platform_device *device)
goto
err_dealloc_cmap
;
}
#ifdef CONFIG_CPU_FREQ
ret
=
lcd_da8xx_cpufreq_register
(
par
);
if
(
ret
)
{
dev_err
(
&
device
->
dev
,
"failed to register cpufreq
\n
"
);
goto
err_cpu_freq
;
}
#endif
/* enable raster engine */
lcdc_write
(
lcdc_read
(
LCD_RASTER_CTRL_REG
)
|
LCD_RASTER_ENABLE
,
LCD_RASTER_CTRL_REG
);
return
0
;
#ifdef CONFIG_CPU_FREQ
err_cpu_freq:
unregister_framebuffer
(
da8xx_fb_info
);
#endif
err_dealloc_cmap:
fb_dealloc_cmap
(
&
da8xx_fb_info
->
cmap
);
...
...
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