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
nexedi
linux
Commits
f9b4a5ce
Commit
f9b4a5ce
authored
Mar 13, 2012
by
Florian Tobias Schandinat
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'for-next' of
git://linuxtv.org/pinchartl/fbdev
into fbdev-next
parents
afb0499b
af89956b
Changes
22
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
22 changed files
with
1594 additions
and
1490 deletions
+1594
-1490
arch/arm/mach-shmobile/board-ag5evm.c
arch/arm/mach-shmobile/board-ag5evm.c
+7
-17
arch/arm/mach-shmobile/board-ap4evb.c
arch/arm/mach-shmobile/board-ap4evb.c
+145
-145
arch/arm/mach-shmobile/board-bonito.c
arch/arm/mach-shmobile/board-bonito.c
+3
-3
arch/arm/mach-shmobile/board-mackerel.c
arch/arm/mach-shmobile/board-mackerel.c
+50
-56
arch/sh/boards/mach-ap325rxa/setup.c
arch/sh/boards/mach-ap325rxa/setup.c
+10
-12
arch/sh/boards/mach-ecovec24/setup.c
arch/sh/boards/mach-ecovec24/setup.c
+9
-11
arch/sh/boards/mach-kfr2r09/lcd_wqvga.c
arch/sh/boards/mach-kfr2r09/lcd_wqvga.c
+4
-6
arch/sh/boards/mach-kfr2r09/setup.c
arch/sh/boards/mach-kfr2r09/setup.c
+3
-5
arch/sh/boards/mach-migor/lcd_qvga.c
arch/sh/boards/mach-migor/lcd_qvga.c
+1
-2
arch/sh/boards/mach-migor/setup.c
arch/sh/boards/mach-migor/setup.c
+7
-9
arch/sh/boards/mach-se/7724/setup.c
arch/sh/boards/mach-se/7724/setup.c
+5
-7
arch/sh/include/mach-kfr2r09/mach/kfr2r09.h
arch/sh/include/mach-kfr2r09/mach/kfr2r09.h
+8
-8
arch/sh/include/mach-migor/mach/migor.h
arch/sh/include/mach-migor/mach/migor.h
+1
-1
drivers/video/Kconfig
drivers/video/Kconfig
+1
-0
drivers/video/sh_mipi_dsi.c
drivers/video/sh_mipi_dsi.c
+43
-54
drivers/video/sh_mobile_hdmi.c
drivers/video/sh_mobile_hdmi.c
+74
-223
drivers/video/sh_mobile_lcdcfb.c
drivers/video/sh_mobile_lcdcfb.c
+753
-545
drivers/video/sh_mobile_lcdcfb.h
drivers/video/sh_mobile_lcdcfb.h
+69
-15
drivers/video/sh_mobile_meram.c
drivers/video/sh_mobile_meram.c
+366
-324
include/video/sh_mobile_hdmi.h
include/video/sh_mobile_hdmi.h
+0
-2
include/video/sh_mobile_lcdc.h
include/video/sh_mobile_lcdc.h
+15
-20
include/video/sh_mobile_meram.h
include/video/sh_mobile_meram.h
+20
-25
No files found.
arch/arm/mach-shmobile/board-ag5evm.c
View file @
f9b4a5ce
...
...
@@ -229,16 +229,6 @@ static void lcd_backlight_reset(void)
gpio_set_value
(
GPIO_PORT235
,
1
);
}
static
void
lcd_on
(
void
*
board_data
,
struct
fb_info
*
info
)
{
lcd_backlight_on
();
}
static
void
lcd_off
(
void
*
board_data
)
{
lcd_backlight_reset
();
}
/* LCDC0 */
static
const
struct
fb_videomode
lcdc0_modes
[]
=
{
{
...
...
@@ -262,14 +252,14 @@ static struct sh_mobile_lcdc_info lcdc0_info = {
.
interface_type
=
RGB24
,
.
clock_divider
=
1
,
.
flags
=
LCDC_FLAGS_DWPOL
,
.
lcd_size_cfg
.
width
=
44
,
.
lcd_size_cfg
.
height
=
79
,
.
fourcc
=
V4L2_PIX_FMT_RGB565
,
.
lcd_cfg
=
lcdc0_modes
,
.
num_cfg
=
ARRAY_SIZE
(
lcdc0_modes
),
.
board_cfg
=
{
.
display_on
=
lcd_on
,
.
display_off
=
lcd_off
,
.
lcd_modes
=
lcdc0_modes
,
.
num_modes
=
ARRAY_SIZE
(
lcdc0_modes
),
.
panel_cfg
=
{
.
width
=
44
,
.
height
=
79
,
.
display_on
=
lcd_backlight_on
,
.
display_off
=
lcd_backlight_reset
,
},
}
};
...
...
arch/arm/mach-shmobile/board-ap4evb.c
View file @
f9b4a5ce
...
...
@@ -258,8 +258,14 @@ static struct sh_mobile_meram_info meram_info = {
static
struct
resource
meram_resources
[]
=
{
[
0
]
=
{
.
name
=
"MERAM
"
,
.
name
=
"regs
"
,
.
start
=
0xe8000000
,
.
end
=
0xe807ffff
,
.
flags
=
IORESOURCE_MEM
,
},
[
1
]
=
{
.
name
=
"meram"
,
.
start
=
0xe8080000
,
.
end
=
0xe81fffff
,
.
flags
=
IORESOURCE_MEM
,
},
...
...
@@ -437,82 +443,6 @@ static struct platform_device usb1_host_device = {
.
resource
=
usb1_host_resources
,
};
static
const
struct
fb_videomode
ap4evb_lcdc_modes
[]
=
{
{
#ifdef CONFIG_AP4EVB_QHD
.
name
=
"R63302(QHD)"
,
.
xres
=
544
,
.
yres
=
961
,
.
left_margin
=
72
,
.
right_margin
=
600
,
.
hsync_len
=
16
,
.
upper_margin
=
8
,
.
lower_margin
=
8
,
.
vsync_len
=
2
,
.
sync
=
FB_SYNC_VERT_HIGH_ACT
|
FB_SYNC_HOR_HIGH_ACT
,
#else
.
name
=
"WVGA Panel"
,
.
xres
=
800
,
.
yres
=
480
,
.
left_margin
=
220
,
.
right_margin
=
110
,
.
hsync_len
=
70
,
.
upper_margin
=
20
,
.
lower_margin
=
5
,
.
vsync_len
=
5
,
.
sync
=
0
,
#endif
},
};
static
struct
sh_mobile_meram_cfg
lcd_meram_cfg
=
{
.
icb
[
0
]
=
{
.
marker_icb
=
28
,
.
cache_icb
=
24
,
.
meram_offset
=
0x0
,
.
meram_size
=
0x40
,
},
.
icb
[
1
]
=
{
.
marker_icb
=
29
,
.
cache_icb
=
25
,
.
meram_offset
=
0x40
,
.
meram_size
=
0x40
,
},
};
static
struct
sh_mobile_lcdc_info
lcdc_info
=
{
.
meram_dev
=
&
meram_info
,
.
ch
[
0
]
=
{
.
chan
=
LCDC_CHAN_MAINLCD
,
.
fourcc
=
V4L2_PIX_FMT_RGB565
,
.
lcd_cfg
=
ap4evb_lcdc_modes
,
.
num_cfg
=
ARRAY_SIZE
(
ap4evb_lcdc_modes
),
.
meram_cfg
=
&
lcd_meram_cfg
,
}
};
static
struct
resource
lcdc_resources
[]
=
{
[
0
]
=
{
.
name
=
"LCDC"
,
.
start
=
0xfe940000
,
/* P4-only space */
.
end
=
0xfe943fff
,
.
flags
=
IORESOURCE_MEM
,
},
[
1
]
=
{
.
start
=
intcs_evt2irq
(
0x580
),
.
flags
=
IORESOURCE_IRQ
,
},
};
static
struct
platform_device
lcdc_device
=
{
.
name
=
"sh_mobile_lcdc_fb"
,
.
num_resources
=
ARRAY_SIZE
(
lcdc_resources
),
.
resource
=
lcdc_resources
,
.
dev
=
{
.
platform_data
=
&
lcdc_info
,
.
coherent_dma_mask
=
~
0
,
},
};
/*
* QHD display
*/
...
...
@@ -593,6 +523,8 @@ static struct resource mipidsi0_resources[] = {
},
};
static
struct
sh_mobile_lcdc_info
lcdc_info
;
static
struct
sh_mipi_dsi_info
mipidsi0_info
=
{
.
data_format
=
MIPI_RGB888
,
.
lcd_chan
=
&
lcdc_info
.
ch
[
0
],
...
...
@@ -619,6 +551,81 @@ static struct platform_device *qhd_devices[] __initdata = {
};
#endif
/* CONFIG_AP4EVB_QHD */
/* LCDC0 */
static
const
struct
fb_videomode
ap4evb_lcdc_modes
[]
=
{
{
#ifdef CONFIG_AP4EVB_QHD
.
name
=
"R63302(QHD)"
,
.
xres
=
544
,
.
yres
=
961
,
.
left_margin
=
72
,
.
right_margin
=
600
,
.
hsync_len
=
16
,
.
upper_margin
=
8
,
.
lower_margin
=
8
,
.
vsync_len
=
2
,
.
sync
=
FB_SYNC_VERT_HIGH_ACT
|
FB_SYNC_HOR_HIGH_ACT
,
#else
.
name
=
"WVGA Panel"
,
.
xres
=
800
,
.
yres
=
480
,
.
left_margin
=
220
,
.
right_margin
=
110
,
.
hsync_len
=
70
,
.
upper_margin
=
20
,
.
lower_margin
=
5
,
.
vsync_len
=
5
,
.
sync
=
0
,
#endif
},
};
static
const
struct
sh_mobile_meram_cfg
lcd_meram_cfg
=
{
.
icb
[
0
]
=
{
.
meram_size
=
0x40
,
},
.
icb
[
1
]
=
{
.
meram_size
=
0x40
,
},
};
static
struct
sh_mobile_lcdc_info
lcdc_info
=
{
.
meram_dev
=
&
meram_info
,
.
ch
[
0
]
=
{
.
chan
=
LCDC_CHAN_MAINLCD
,
.
fourcc
=
V4L2_PIX_FMT_RGB565
,
.
lcd_modes
=
ap4evb_lcdc_modes
,
.
num_modes
=
ARRAY_SIZE
(
ap4evb_lcdc_modes
),
.
meram_cfg
=
&
lcd_meram_cfg
,
#ifdef CONFIG_AP4EVB_QHD
.
tx_dev
=
&
mipidsi0_device
,
#endif
}
};
static
struct
resource
lcdc_resources
[]
=
{
[
0
]
=
{
.
name
=
"LCDC"
,
.
start
=
0xfe940000
,
/* P4-only space */
.
end
=
0xfe943fff
,
.
flags
=
IORESOURCE_MEM
,
},
[
1
]
=
{
.
start
=
intcs_evt2irq
(
0x580
),
.
flags
=
IORESOURCE_IRQ
,
},
};
static
struct
platform_device
lcdc_device
=
{
.
name
=
"sh_mobile_lcdc_fb"
,
.
num_resources
=
ARRAY_SIZE
(
lcdc_resources
),
.
resource
=
lcdc_resources
,
.
dev
=
{
.
platform_data
=
&
lcdc_info
,
.
coherent_dma_mask
=
~
0
,
},
};
/* FSI */
#define IRQ_FSI evt2irq(0x1840)
static
int
__fsi_set_rate
(
struct
clk
*
clk
,
long
rate
,
int
enable
)
...
...
@@ -798,65 +805,11 @@ static struct platform_device fsi_ak4643_device = {
},
};
static
struct
sh_mobile_meram_cfg
hdmi_meram_cfg
=
{
.
icb
[
0
]
=
{
.
marker_icb
=
30
,
.
cache_icb
=
26
,
.
meram_offset
=
0x80
,
.
meram_size
=
0x100
,
},
.
icb
[
1
]
=
{
.
marker_icb
=
31
,
.
cache_icb
=
27
,
.
meram_offset
=
0x180
,
.
meram_size
=
0x100
,
},
};
static
struct
sh_mobile_lcdc_info
sh_mobile_lcdc1_info
=
{
.
clock_source
=
LCDC_CLK_EXTERNAL
,
.
meram_dev
=
&
meram_info
,
.
ch
[
0
]
=
{
.
chan
=
LCDC_CHAN_MAINLCD
,
.
fourcc
=
V4L2_PIX_FMT_RGB565
,
.
interface_type
=
RGB24
,
.
clock_divider
=
1
,
.
flags
=
LCDC_FLAGS_DWPOL
,
.
meram_cfg
=
&
hdmi_meram_cfg
,
}
};
static
struct
resource
lcdc1_resources
[]
=
{
[
0
]
=
{
.
name
=
"LCDC1"
,
.
start
=
0xfe944000
,
.
end
=
0xfe947fff
,
.
flags
=
IORESOURCE_MEM
,
},
[
1
]
=
{
.
start
=
intcs_evt2irq
(
0x1780
),
.
flags
=
IORESOURCE_IRQ
,
},
};
static
struct
platform_device
lcdc1_device
=
{
.
name
=
"sh_mobile_lcdc_fb"
,
.
num_resources
=
ARRAY_SIZE
(
lcdc1_resources
),
.
resource
=
lcdc1_resources
,
.
id
=
1
,
.
dev
=
{
.
platform_data
=
&
sh_mobile_lcdc1_info
,
.
coherent_dma_mask
=
~
0
,
},
};
/* LCDC1 */
static
long
ap4evb_clk_optimize
(
unsigned
long
target
,
unsigned
long
*
best_freq
,
unsigned
long
*
parent_freq
);
static
struct
sh_mobile_hdmi_info
hdmi_info
=
{
.
lcd_chan
=
&
sh_mobile_lcdc1_info
.
ch
[
0
],
.
lcd_dev
=
&
lcdc1_device
.
dev
,
.
flags
=
HDMI_SND_SRC_SPDIF
,
.
clk_optimize_parent
=
ap4evb_clk_optimize
,
};
...
...
@@ -885,10 +838,6 @@ static struct platform_device hdmi_device = {
},
};
static
struct
platform_device
fsi_hdmi_device
=
{
.
name
=
"sh_fsi2_b_hdmi"
,
};
static
long
ap4evb_clk_optimize
(
unsigned
long
target
,
unsigned
long
*
best_freq
,
unsigned
long
*
parent_freq
)
{
...
...
@@ -908,6 +857,57 @@ static long ap4evb_clk_optimize(unsigned long target, unsigned long *best_freq,
return
error
;
}
static
const
struct
sh_mobile_meram_cfg
hdmi_meram_cfg
=
{
.
icb
[
0
]
=
{
.
meram_size
=
0x100
,
},
.
icb
[
1
]
=
{
.
meram_size
=
0x100
,
},
};
static
struct
sh_mobile_lcdc_info
sh_mobile_lcdc1_info
=
{
.
clock_source
=
LCDC_CLK_EXTERNAL
,
.
meram_dev
=
&
meram_info
,
.
ch
[
0
]
=
{
.
chan
=
LCDC_CHAN_MAINLCD
,
.
fourcc
=
V4L2_PIX_FMT_RGB565
,
.
interface_type
=
RGB24
,
.
clock_divider
=
1
,
.
flags
=
LCDC_FLAGS_DWPOL
,
.
meram_cfg
=
&
hdmi_meram_cfg
,
.
tx_dev
=
&
hdmi_device
,
}
};
static
struct
resource
lcdc1_resources
[]
=
{
[
0
]
=
{
.
name
=
"LCDC1"
,
.
start
=
0xfe944000
,
.
end
=
0xfe947fff
,
.
flags
=
IORESOURCE_MEM
,
},
[
1
]
=
{
.
start
=
intcs_evt2irq
(
0x1780
),
.
flags
=
IORESOURCE_IRQ
,
},
};
static
struct
platform_device
lcdc1_device
=
{
.
name
=
"sh_mobile_lcdc_fb"
,
.
num_resources
=
ARRAY_SIZE
(
lcdc1_resources
),
.
resource
=
lcdc1_resources
,
.
id
=
1
,
.
dev
=
{
.
platform_data
=
&
sh_mobile_lcdc1_info
,
.
coherent_dma_mask
=
~
0
,
},
};
static
struct
platform_device
fsi_hdmi_device
=
{
.
name
=
"sh_fsi2_b_hdmi"
,
};
static
struct
gpio_led
ap4evb_leds
[]
=
{
{
.
name
=
"led4"
,
...
...
@@ -1042,9 +1042,9 @@ static struct platform_device *ap4evb_devices[] __initdata = {
&
fsi_ak4643_device
,
&
fsi_hdmi_device
,
&
sh_mmcif_device
,
&
lcdc1_device
,
&
lcdc_device
,
&
hdmi_device
,
&
lcdc_device
,
&
lcdc1_device
,
&
ceu_device
,
&
ap4evb_camera
,
&
meram_device
,
...
...
@@ -1355,8 +1355,8 @@ static void __init ap4evb_init(void)
lcdc_info
.
ch
[
0
].
interface_type
=
RGB24
;
lcdc_info
.
ch
[
0
].
clock_divider
=
1
;
lcdc_info
.
ch
[
0
].
flags
=
LCDC_FLAGS_DWPOL
;
lcdc_info
.
ch
[
0
].
lcd_size_cfg
.
width
=
44
;
lcdc_info
.
ch
[
0
].
lcd_size
_cfg
.
height
=
79
;
lcdc_info
.
ch
[
0
].
panel_cfg
.
width
=
44
;
lcdc_info
.
ch
[
0
].
panel
_cfg
.
height
=
79
;
platform_add_devices
(
qhd_devices
,
ARRAY_SIZE
(
qhd_devices
));
...
...
@@ -1397,8 +1397,8 @@ static void __init ap4evb_init(void)
lcdc_info
.
ch
[
0
].
interface_type
=
RGB18
;
lcdc_info
.
ch
[
0
].
clock_divider
=
3
;
lcdc_info
.
ch
[
0
].
flags
=
0
;
lcdc_info
.
ch
[
0
].
lcd_size_cfg
.
width
=
152
;
lcdc_info
.
ch
[
0
].
lcd_size
_cfg
.
height
=
91
;
lcdc_info
.
ch
[
0
].
panel_cfg
.
width
=
152
;
lcdc_info
.
ch
[
0
].
panel
_cfg
.
height
=
91
;
/* enable TouchScreen */
irq_set_irq_type
(
IRQ7
,
IRQ_TYPE_LEVEL_LOW
);
...
...
arch/arm/mach-shmobile/board-bonito.c
View file @
f9b4a5ce
...
...
@@ -245,9 +245,9 @@ static struct sh_mobile_lcdc_info lcdc0_info = {
.
interface_type
=
RGB24
,
.
clock_divider
=
5
,
.
flags
=
0
,
.
lcd_
cfg
=
&
lcdc0_mode
,
.
num_
cfg
=
1
,
.
lcd_size
_cfg
=
{
.
lcd_
modes
=
&
lcdc0_mode
,
.
num_
modes
=
1
,
.
panel
_cfg
=
{
.
width
=
152
,
.
height
=
91
,
},
...
...
arch/arm/mach-shmobile/board-mackerel.c
View file @
f9b4a5ce
...
...
@@ -318,8 +318,14 @@ static struct sh_mobile_meram_info mackerel_meram_info = {
static
struct
resource
meram_resources
[]
=
{
[
0
]
=
{
.
name
=
"
MERAM
"
,
.
name
=
"
regs
"
,
.
start
=
0xe8000000
,
.
end
=
0xe807ffff
,
.
flags
=
IORESOURCE_MEM
,
},
[
1
]
=
{
.
name
=
"meram"
,
.
start
=
0xe8080000
,
.
end
=
0xe81fffff
,
.
flags
=
IORESOURCE_MEM
,
},
...
...
@@ -351,29 +357,23 @@ static struct fb_videomode mackerel_lcdc_modes[] = {
},
};
static
int
mackerel_set_brightness
(
void
*
board_data
,
int
brightness
)
static
int
mackerel_set_brightness
(
int
brightness
)
{
gpio_set_value
(
GPIO_PORT31
,
brightness
);
return
0
;
}
static
int
mackerel_get_brightness
(
void
*
board_data
)
static
int
mackerel_get_brightness
(
void
)
{
return
gpio_get_value
(
GPIO_PORT31
);
}
static
struct
sh_mobile_meram_cfg
lcd_meram_cfg
=
{
static
const
struct
sh_mobile_meram_cfg
lcd_meram_cfg
=
{
.
icb
[
0
]
=
{
.
marker_icb
=
28
,
.
cache_icb
=
24
,
.
meram_offset
=
0x0
,
.
meram_size
=
0x40
,
},
.
icb
[
1
]
=
{
.
marker_icb
=
29
,
.
cache_icb
=
25
,
.
meram_offset
=
0x40
,
.
meram_size
=
0x40
,
},
};
...
...
@@ -384,20 +384,20 @@ static struct sh_mobile_lcdc_info lcdc_info = {
.
ch
[
0
]
=
{
.
chan
=
LCDC_CHAN_MAINLCD
,
.
fourcc
=
V4L2_PIX_FMT_RGB565
,
.
lcd_
cfg
=
mackerel_lcdc_modes
,
.
num_
cfg
=
ARRAY_SIZE
(
mackerel_lcdc_modes
),
.
lcd_
modes
=
mackerel_lcdc_modes
,
.
num_
modes
=
ARRAY_SIZE
(
mackerel_lcdc_modes
),
.
interface_type
=
RGB24
,
.
clock_divider
=
3
,
.
flags
=
0
,
.
lcd_size_cfg
.
width
=
152
,
.
lcd_size_cfg
.
height
=
91
,
.
board_cfg
=
{
.
set_brightness
=
mackerel_set_brightness
,
.
get_brightness
=
mackerel_get_brightness
,
.
panel_cfg
=
{
.
width
=
152
,
.
height
=
91
,
},
.
bl_info
=
{
.
name
=
"sh_mobile_lcdc_bl"
,
.
max_brightness
=
1
,
.
set_brightness
=
mackerel_set_brightness
,
.
get_brightness
=
mackerel_get_brightness
,
},
.
meram_cfg
=
&
lcd_meram_cfg
,
}
...
...
@@ -426,21 +426,44 @@ static struct platform_device lcdc_device = {
},
};
static
struct
sh_mobile_meram_cfg
hdmi_meram_cfg
=
{
/* HDMI */
static
struct
sh_mobile_hdmi_info
hdmi_info
=
{
.
flags
=
HDMI_SND_SRC_SPDIF
,
};
static
struct
resource
hdmi_resources
[]
=
{
[
0
]
=
{
.
name
=
"HDMI"
,
.
start
=
0xe6be0000
,
.
end
=
0xe6be00ff
,
.
flags
=
IORESOURCE_MEM
,
},
[
1
]
=
{
/* There's also an HDMI interrupt on INTCS @ 0x18e0 */
.
start
=
evt2irq
(
0x17e0
),
.
flags
=
IORESOURCE_IRQ
,
},
};
static
struct
platform_device
hdmi_device
=
{
.
name
=
"sh-mobile-hdmi"
,
.
num_resources
=
ARRAY_SIZE
(
hdmi_resources
),
.
resource
=
hdmi_resources
,
.
id
=
-
1
,
.
dev
=
{
.
platform_data
=
&
hdmi_info
,
},
};
static
const
struct
sh_mobile_meram_cfg
hdmi_meram_cfg
=
{
.
icb
[
0
]
=
{
.
marker_icb
=
30
,
.
cache_icb
=
26
,
.
meram_offset
=
0x80
,
.
meram_size
=
0x100
,
},
.
icb
[
1
]
=
{
.
marker_icb
=
31
,
.
cache_icb
=
27
,
.
meram_offset
=
0x180
,
.
meram_size
=
0x100
,
},
};
/* HDMI */
static
struct
sh_mobile_lcdc_info
hdmi_lcdc_info
=
{
.
meram_dev
=
&
mackerel_meram_info
,
.
clock_source
=
LCDC_CLK_EXTERNAL
,
...
...
@@ -451,6 +474,7 @@ static struct sh_mobile_lcdc_info hdmi_lcdc_info = {
.
clock_divider
=
1
,
.
flags
=
LCDC_FLAGS_DWPOL
,
.
meram_cfg
=
&
hdmi_meram_cfg
,
.
tx_dev
=
&
hdmi_device
,
}
};
...
...
@@ -478,36 +502,6 @@ static struct platform_device hdmi_lcdc_device = {
},
};
static
struct
sh_mobile_hdmi_info
hdmi_info
=
{
.
lcd_chan
=
&
hdmi_lcdc_info
.
ch
[
0
],
.
lcd_dev
=
&
hdmi_lcdc_device
.
dev
,
.
flags
=
HDMI_SND_SRC_SPDIF
,
};
static
struct
resource
hdmi_resources
[]
=
{
[
0
]
=
{
.
name
=
"HDMI"
,
.
start
=
0xe6be0000
,
.
end
=
0xe6be00ff
,
.
flags
=
IORESOURCE_MEM
,
},
[
1
]
=
{
/* There's also an HDMI interrupt on INTCS @ 0x18e0 */
.
start
=
evt2irq
(
0x17e0
),
.
flags
=
IORESOURCE_IRQ
,
},
};
static
struct
platform_device
hdmi_device
=
{
.
name
=
"sh-mobile-hdmi"
,
.
num_resources
=
ARRAY_SIZE
(
hdmi_resources
),
.
resource
=
hdmi_resources
,
.
id
=
-
1
,
.
dev
=
{
.
platform_data
=
&
hdmi_info
,
},
};
static
struct
platform_device
fsi_hdmi_device
=
{
.
name
=
"sh_fsi2_b_hdmi"
,
};
...
...
@@ -1276,8 +1270,8 @@ static struct platform_device *mackerel_devices[] __initdata = {
&
sh_mmcif_device
,
&
ceu_device
,
&
mackerel_camera
,
&
hdmi_lcdc_device
,
&
hdmi_device
,
&
hdmi_lcdc_device
,
&
meram_device
,
};
...
...
arch/sh/boards/mach-ap325rxa/setup.c
View file @
f9b4a5ce
...
...
@@ -157,7 +157,7 @@ static struct platform_device nand_flash_device = {
#define PORT_DRVCRA 0xA405018A
#define PORT_DRVCRB 0xA405018C
static
int
ap320_wvga_set_brightness
(
void
*
board_data
,
int
brightness
)
static
int
ap320_wvga_set_brightness
(
int
brightness
)
{
if
(
brightness
)
{
gpio_set_value
(
GPIO_PTS3
,
0
);
...
...
@@ -170,12 +170,12 @@ static int ap320_wvga_set_brightness(void *board_data, int brightness)
return
0
;
}
static
int
ap320_wvga_get_brightness
(
void
*
board_data
)
static
int
ap320_wvga_get_brightness
(
void
)
{
return
gpio_get_value
(
GPIO_PTS3
);
}
static
void
ap320_wvga_power_on
(
void
*
board_data
,
struct
fb_info
*
info
)
static
void
ap320_wvga_power_on
(
void
)
{
msleep
(
100
);
...
...
@@ -183,7 +183,7 @@ static void ap320_wvga_power_on(void *board_data, struct fb_info *info)
__raw_writew
(
FPGA_LCDREG_VAL
,
FPGA_LCDREG
);
}
static
void
ap320_wvga_power_off
(
void
*
board_data
)
static
void
ap320_wvga_power_off
(
void
)
{
/* ASD AP-320/325 LCD OFF */
__raw_writew
(
0
,
FPGA_LCDREG
);
...
...
@@ -211,21 +211,19 @@ static struct sh_mobile_lcdc_info lcdc_info = {
.
fourcc
=
V4L2_PIX_FMT_RGB565
,
.
interface_type
=
RGB18
,
.
clock_divider
=
1
,
.
lcd_
cfg
=
ap325rxa_lcdc_modes
,
.
num_
cfg
=
ARRAY_SIZE
(
ap325rxa_lcdc_modes
),
.
lcd_size_cfg
=
{
/* 7.0 inch */
.
width
=
152
,
.
lcd_
modes
=
ap325rxa_lcdc_modes
,
.
num_
modes
=
ARRAY_SIZE
(
ap325rxa_lcdc_modes
),
.
panel_cfg
=
{
.
width
=
152
,
/* 7.0 inch */
.
height
=
91
,
},
.
board_cfg
=
{
.
display_on
=
ap320_wvga_power_on
,
.
display_off
=
ap320_wvga_power_off
,
.
set_brightness
=
ap320_wvga_set_brightness
,
.
get_brightness
=
ap320_wvga_get_brightness
,
},
.
bl_info
=
{
.
name
=
"sh_mobile_lcdc_bl"
,
.
max_brightness
=
1
,
.
set_brightness
=
ap320_wvga_set_brightness
,
.
get_brightness
=
ap320_wvga_get_brightness
,
},
}
};
...
...
arch/sh/boards/mach-ecovec24/setup.c
View file @
f9b4a5ce
...
...
@@ -310,14 +310,14 @@ static const struct fb_videomode ecovec_dvi_modes[] = {
},
};
static
int
ecovec24_set_brightness
(
void
*
board_data
,
int
brightness
)
static
int
ecovec24_set_brightness
(
int
brightness
)
{
gpio_set_value
(
GPIO_PTR1
,
brightness
);
return
0
;
}
static
int
ecovec24_get_brightness
(
void
*
board_data
)
static
int
ecovec24_get_brightness
(
void
)
{
return
gpio_get_value
(
GPIO_PTR1
);
}
...
...
@@ -327,17 +327,15 @@ static struct sh_mobile_lcdc_info lcdc_info = {
.
interface_type
=
RGB18
,
.
chan
=
LCDC_CHAN_MAINLCD
,
.
fourcc
=
V4L2_PIX_FMT_RGB565
,
.
lcd_size
_cfg
=
{
/* 7.0 inch */
.
panel
_cfg
=
{
/* 7.0 inch */
.
width
=
152
,
.
height
=
91
,
},
.
board_cfg
=
{
.
set_brightness
=
ecovec24_set_brightness
,
.
get_brightness
=
ecovec24_get_brightness
,
},
.
bl_info
=
{
.
name
=
"sh_mobile_lcdc_bl"
,
.
max_brightness
=
1
,
.
set_brightness
=
ecovec24_set_brightness
,
.
get_brightness
=
ecovec24_get_brightness
,
},
}
};
...
...
@@ -1116,8 +1114,8 @@ static int __init arch_setup(void)
/* DVI */
lcdc_info
.
clock_source
=
LCDC_CLK_EXTERNAL
;
lcdc_info
.
ch
[
0
].
clock_divider
=
1
;
lcdc_info
.
ch
[
0
].
lcd_
cfg
=
ecovec_dvi_modes
;
lcdc_info
.
ch
[
0
].
num_
cfg
=
ARRAY_SIZE
(
ecovec_dvi_modes
);
lcdc_info
.
ch
[
0
].
lcd_
modes
=
ecovec_dvi_modes
;
lcdc_info
.
ch
[
0
].
num_
modes
=
ARRAY_SIZE
(
ecovec_dvi_modes
);
gpio_set_value
(
GPIO_PTA2
,
1
);
gpio_set_value
(
GPIO_PTU1
,
1
);
...
...
@@ -1125,8 +1123,8 @@ static int __init arch_setup(void)
/* Panel */
lcdc_info
.
clock_source
=
LCDC_CLK_PERIPHERAL
;
lcdc_info
.
ch
[
0
].
clock_divider
=
2
;
lcdc_info
.
ch
[
0
].
lcd_
cfg
=
ecovec_lcd_modes
;
lcdc_info
.
ch
[
0
].
num_
cfg
=
ARRAY_SIZE
(
ecovec_lcd_modes
);
lcdc_info
.
ch
[
0
].
lcd_
modes
=
ecovec_lcd_modes
;
lcdc_info
.
ch
[
0
].
num_
modes
=
ARRAY_SIZE
(
ecovec_lcd_modes
);
gpio_set_value
(
GPIO_PTR1
,
1
);
...
...
arch/sh/boards/mach-kfr2r09/lcd_wqvga.c
View file @
f9b4a5ce
...
...
@@ -251,8 +251,7 @@ static void display_on(void *sohandle,
write_memory_start
(
sohandle
,
so
);
}
int
kfr2r09_lcd_setup
(
void
*
board_data
,
void
*
sohandle
,
struct
sh_mobile_lcdc_sys_bus_ops
*
so
)
int
kfr2r09_lcd_setup
(
void
*
sohandle
,
struct
sh_mobile_lcdc_sys_bus_ops
*
so
)
{
/* power on */
gpio_set_value
(
GPIO_PTF4
,
0
);
/* PROTECT/ -> L */
...
...
@@ -273,8 +272,7 @@ int kfr2r09_lcd_setup(void *board_data, void *sohandle,
return
0
;
}
void
kfr2r09_lcd_start
(
void
*
board_data
,
void
*
sohandle
,
struct
sh_mobile_lcdc_sys_bus_ops
*
so
)
void
kfr2r09_lcd_start
(
void
*
sohandle
,
struct
sh_mobile_lcdc_sys_bus_ops
*
so
)
{
write_memory_start
(
sohandle
,
so
);
}
...
...
@@ -327,12 +325,12 @@ static int kfr2r09_lcd_backlight(int on)
return
0
;
}
void
kfr2r09_lcd_on
(
void
*
board_data
,
struct
fb_info
*
info
)
void
kfr2r09_lcd_on
(
void
)
{
kfr2r09_lcd_backlight
(
1
);
}
void
kfr2r09_lcd_off
(
void
*
board_data
)
void
kfr2r09_lcd_off
(
void
)
{
kfr2r09_lcd_backlight
(
0
);
}
arch/sh/boards/mach-kfr2r09/setup.c
View file @
f9b4a5ce
...
...
@@ -148,13 +148,11 @@ static struct sh_mobile_lcdc_info kfr2r09_sh_lcdc_info = {
.
interface_type
=
SYS18
,
.
clock_divider
=
6
,
.
flags
=
LCDC_FLAGS_DWPOL
,
.
lcd_
cfg
=
kfr2r09_lcdc_modes
,
.
num_
cfg
=
ARRAY_SIZE
(
kfr2r09_lcdc_modes
),
.
lcd_size
_cfg
=
{
.
lcd_
modes
=
kfr2r09_lcdc_modes
,
.
num_
modes
=
ARRAY_SIZE
(
kfr2r09_lcdc_modes
),
.
panel
_cfg
=
{
.
width
=
35
,
.
height
=
58
,
},
.
board_cfg
=
{
.
setup_sys
=
kfr2r09_lcd_setup
,
.
start_transfer
=
kfr2r09_lcd_start
,
.
display_on
=
kfr2r09_lcd_on
,
...
...
arch/sh/boards/mach-migor/lcd_qvga.c
View file @
f9b4a5ce
...
...
@@ -113,8 +113,7 @@ static const unsigned short magic3_data[] = {
0x0010
,
0x16B0
,
0x0011
,
0x0111
,
0x0007
,
0x0061
,
};
int
migor_lcd_qvga_setup
(
void
*
board_data
,
void
*
sohandle
,
struct
sh_mobile_lcdc_sys_bus_ops
*
so
)
int
migor_lcd_qvga_setup
(
void
*
sohandle
,
struct
sh_mobile_lcdc_sys_bus_ops
*
so
)
{
unsigned
long
xres
=
320
;
unsigned
long
yres
=
240
;
...
...
arch/sh/boards/mach-migor/setup.c
View file @
f9b4a5ce
...
...
@@ -246,9 +246,9 @@ static struct sh_mobile_lcdc_info sh_mobile_lcdc_info = {
.
fourcc
=
V4L2_PIX_FMT_RGB565
,
.
interface_type
=
RGB16
,
.
clock_divider
=
2
,
.
lcd_
cfg
=
migor_lcd_modes
,
.
num_
cfg
=
ARRAY_SIZE
(
migor_lcd_modes
),
.
lcd_size
_cfg
=
{
/* 7.0 inch */
.
lcd_
modes
=
migor_lcd_modes
,
.
num_
modes
=
ARRAY_SIZE
(
migor_lcd_modes
),
.
panel
_cfg
=
{
/* 7.0 inch */
.
width
=
152
,
.
height
=
91
,
},
...
...
@@ -260,13 +260,11 @@ static struct sh_mobile_lcdc_info sh_mobile_lcdc_info = {
.
fourcc
=
V4L2_PIX_FMT_RGB565
,
.
interface_type
=
SYS16A
,
.
clock_divider
=
10
,
.
lcd_
cfg
=
migor_lcd_modes
,
.
num_
cfg
=
ARRAY_SIZE
(
migor_lcd_modes
),
.
lcd_size_cfg
=
{
/* 2.4 inch */
.
width
=
49
,
.
lcd_
modes
=
migor_lcd_modes
,
.
num_
modes
=
ARRAY_SIZE
(
migor_lcd_modes
),
.
panel_cfg
=
{
.
width
=
49
,
/* 2.4 inch */
.
height
=
37
,
},
.
board_cfg
=
{
.
setup_sys
=
migor_lcd_qvga_setup
,
},
.
sys_bus_cfg
=
{
...
...
arch/sh/boards/mach-se/7724/setup.c
View file @
f9b4a5ce
...
...
@@ -182,12 +182,10 @@ static struct sh_mobile_lcdc_info lcdc_info = {
.
chan
=
LCDC_CHAN_MAINLCD
,
.
fourcc
=
V4L2_PIX_FMT_RGB565
,
.
clock_divider
=
1
,
.
lcd_size
_cfg
=
{
/* 7.0 inch */
.
panel
_cfg
=
{
/* 7.0 inch */
.
width
=
152
,
.
height
=
91
,
},
.
board_cfg
=
{
},
}
};
...
...
@@ -888,12 +886,12 @@ static int __init devices_setup(void)
if
(
sw
&
SW41_B
)
{
/* 720p */
lcdc_info
.
ch
[
0
].
lcd_
cfg
=
lcdc_720p_modes
;
lcdc_info
.
ch
[
0
].
num_
cfg
=
ARRAY_SIZE
(
lcdc_720p_modes
);
lcdc_info
.
ch
[
0
].
lcd_
modes
=
lcdc_720p_modes
;
lcdc_info
.
ch
[
0
].
num_
modes
=
ARRAY_SIZE
(
lcdc_720p_modes
);
}
else
{
/* VGA */
lcdc_info
.
ch
[
0
].
lcd_
cfg
=
lcdc_vga_modes
;
lcdc_info
.
ch
[
0
].
num_
cfg
=
ARRAY_SIZE
(
lcdc_vga_modes
);
lcdc_info
.
ch
[
0
].
lcd_
modes
=
lcdc_vga_modes
;
lcdc_info
.
ch
[
0
].
num_
modes
=
ARRAY_SIZE
(
lcdc_vga_modes
);
}
if
(
sw
&
SW41_A
)
{
...
...
arch/sh/include/mach-kfr2r09/mach/kfr2r09.h
View file @
f9b4a5ce
...
...
@@ -4,21 +4,21 @@
#include <video/sh_mobile_lcdc.h>
#if defined(CONFIG_FB_SH_MOBILE_LCDC) || defined(CONFIG_FB_SH_MOBILE_LCDC_MODULE)
void
kfr2r09_lcd_on
(
void
*
board_data
,
struct
fb_info
*
info
);
void
kfr2r09_lcd_off
(
void
*
board_data
);
int
kfr2r09_lcd_setup
(
void
*
board_data
,
void
*
sys_ops_handle
,
void
kfr2r09_lcd_on
(
void
);
void
kfr2r09_lcd_off
(
void
);
int
kfr2r09_lcd_setup
(
void
*
sys_ops_handle
,
struct
sh_mobile_lcdc_sys_bus_ops
*
sys_ops
);
void
kfr2r09_lcd_start
(
void
*
board_data
,
void
*
sys_ops_handle
,
void
kfr2r09_lcd_start
(
void
*
sys_ops_handle
,
struct
sh_mobile_lcdc_sys_bus_ops
*
sys_ops
);
#else
static
void
kfr2r09_lcd_on
(
void
*
board_data
)
{}
static
void
kfr2r09_lcd_off
(
void
*
board_data
)
{}
static
int
kfr2r09_lcd_setup
(
void
*
board_data
,
void
*
sys_ops_handle
,
static
void
kfr2r09_lcd_on
(
void
)
{}
static
void
kfr2r09_lcd_off
(
void
)
{}
static
int
kfr2r09_lcd_setup
(
void
*
sys_ops_handle
,
struct
sh_mobile_lcdc_sys_bus_ops
*
sys_ops
)
{
return
-
ENODEV
;
}
static
void
kfr2r09_lcd_start
(
void
*
board_data
,
void
*
sys_ops_handle
,
static
void
kfr2r09_lcd_start
(
void
*
sys_ops_handle
,
struct
sh_mobile_lcdc_sys_bus_ops
*
sys_ops
)
{
}
...
...
arch/sh/include/mach-migor/mach/migor.h
View file @
f9b4a5ce
...
...
@@ -9,7 +9,7 @@
#include <video/sh_mobile_lcdc.h>
int
migor_lcd_qvga_setup
(
void
*
board_data
,
void
*
sys_ops_handle
,
int
migor_lcd_qvga_setup
(
void
*
sys_ops_handle
,
struct
sh_mobile_lcdc_sys_bus_ops
*
sys_ops
);
#endif
/* __ASM_SH_MIGOR_H */
drivers/video/Kconfig
View file @
f9b4a5ce
...
...
@@ -2016,6 +2016,7 @@ config FB_SH_MOBILE_HDMI
config FB_SH_MOBILE_MERAM
tristate "SuperH Mobile MERAM read ahead support for LCDC"
depends on FB_SH_MOBILE_LCDC
select GENERIC_ALLOCATOR
default y
---help---
Enable MERAM support for the SH-Mobile LCD controller.
...
...
drivers/video/sh_mipi_dsi.c
View file @
f9b4a5ce
...
...
@@ -24,6 +24,8 @@
#include <video/sh_mipi_dsi.h>
#include <video/sh_mobile_lcdc.h>
#include "sh_mobile_lcdcfb.h"
#define SYSCTRL 0x0000
#define SYSCONF 0x0004
#define TIMSET 0x0008
...
...
@@ -50,16 +52,16 @@
#define MAX_SH_MIPI_DSI 2
struct
sh_mipi
{
struct
sh_mobile_lcdc_entity
entity
;
void
__iomem
*
base
;
void
__iomem
*
linkbase
;
struct
clk
*
dsit_clk
;
struct
platform_device
*
pdev
;
void
*
next_board_data
;
void
(
*
next_display_on
)(
void
*
board_data
,
struct
fb_info
*
info
);
void
(
*
next_display_off
)(
void
*
board_data
);
};
#define to_sh_mipi(e) container_of(e, struct sh_mipi, entity)
static
struct
sh_mipi
*
mipi_dsi
[
MAX_SH_MIPI_DSI
];
/* Protect the above array */
...
...
@@ -120,7 +122,7 @@ static void sh_mipi_dsi_enable(struct sh_mipi *mipi, bool enable)
static
void
sh_mipi_shutdown
(
struct
platform_device
*
pdev
)
{
struct
sh_mipi
*
mipi
=
platform_get_drvdata
(
pdev
);
struct
sh_mipi
*
mipi
=
to_sh_mipi
(
platform_get_drvdata
(
pdev
)
);
sh_mipi_dsi_enable
(
mipi
,
false
);
}
...
...
@@ -145,77 +147,77 @@ static int __init sh_mipi_setup(struct sh_mipi *mipi,
pctype
=
0
;
datatype
=
MIPI_DSI_PACKED_PIXEL_STREAM_24
;
pixfmt
=
MIPI_DCS_PIXEL_FMT_24BIT
;
linelength
=
ch
->
lcd_
cfg
[
0
].
xres
*
3
;
linelength
=
ch
->
lcd_
modes
[
0
].
xres
*
3
;
yuv
=
false
;
break
;
case
MIPI_RGB565
:
pctype
=
1
;
datatype
=
MIPI_DSI_PACKED_PIXEL_STREAM_16
;
pixfmt
=
MIPI_DCS_PIXEL_FMT_16BIT
;
linelength
=
ch
->
lcd_
cfg
[
0
].
xres
*
2
;
linelength
=
ch
->
lcd_
modes
[
0
].
xres
*
2
;
yuv
=
false
;
break
;
case
MIPI_RGB666_LP
:
pctype
=
2
;
datatype
=
MIPI_DSI_PIXEL_STREAM_3BYTE_18
;
pixfmt
=
MIPI_DCS_PIXEL_FMT_24BIT
;
linelength
=
ch
->
lcd_
cfg
[
0
].
xres
*
3
;
linelength
=
ch
->
lcd_
modes
[
0
].
xres
*
3
;
yuv
=
false
;
break
;
case
MIPI_RGB666
:
pctype
=
3
;
datatype
=
MIPI_DSI_PACKED_PIXEL_STREAM_18
;
pixfmt
=
MIPI_DCS_PIXEL_FMT_18BIT
;
linelength
=
(
ch
->
lcd_
cfg
[
0
].
xres
*
18
+
7
)
/
8
;
linelength
=
(
ch
->
lcd_
modes
[
0
].
xres
*
18
+
7
)
/
8
;
yuv
=
false
;
break
;
case
MIPI_BGR888
:
pctype
=
8
;
datatype
=
MIPI_DSI_PACKED_PIXEL_STREAM_24
;
pixfmt
=
MIPI_DCS_PIXEL_FMT_24BIT
;
linelength
=
ch
->
lcd_
cfg
[
0
].
xres
*
3
;
linelength
=
ch
->
lcd_
modes
[
0
].
xres
*
3
;
yuv
=
false
;
break
;
case
MIPI_BGR565
:
pctype
=
9
;
datatype
=
MIPI_DSI_PACKED_PIXEL_STREAM_16
;
pixfmt
=
MIPI_DCS_PIXEL_FMT_16BIT
;
linelength
=
ch
->
lcd_
cfg
[
0
].
xres
*
2
;
linelength
=
ch
->
lcd_
modes
[
0
].
xres
*
2
;
yuv
=
false
;
break
;
case
MIPI_BGR666_LP
:
pctype
=
0xa
;
datatype
=
MIPI_DSI_PIXEL_STREAM_3BYTE_18
;
pixfmt
=
MIPI_DCS_PIXEL_FMT_24BIT
;
linelength
=
ch
->
lcd_
cfg
[
0
].
xres
*
3
;
linelength
=
ch
->
lcd_
modes
[
0
].
xres
*
3
;
yuv
=
false
;
break
;
case
MIPI_BGR666
:
pctype
=
0xb
;
datatype
=
MIPI_DSI_PACKED_PIXEL_STREAM_18
;
pixfmt
=
MIPI_DCS_PIXEL_FMT_18BIT
;
linelength
=
(
ch
->
lcd_
cfg
[
0
].
xres
*
18
+
7
)
/
8
;
linelength
=
(
ch
->
lcd_
modes
[
0
].
xres
*
18
+
7
)
/
8
;
yuv
=
false
;
break
;
case
MIPI_YUYV
:
pctype
=
4
;
datatype
=
MIPI_DSI_PACKED_PIXEL_STREAM_YCBCR16
;
pixfmt
=
MIPI_DCS_PIXEL_FMT_16BIT
;
linelength
=
ch
->
lcd_
cfg
[
0
].
xres
*
2
;
linelength
=
ch
->
lcd_
modes
[
0
].
xres
*
2
;
yuv
=
true
;
break
;
case
MIPI_UYVY
:
pctype
=
5
;
datatype
=
MIPI_DSI_PACKED_PIXEL_STREAM_YCBCR16
;
pixfmt
=
MIPI_DCS_PIXEL_FMT_16BIT
;
linelength
=
ch
->
lcd_
cfg
[
0
].
xres
*
2
;
linelength
=
ch
->
lcd_
modes
[
0
].
xres
*
2
;
yuv
=
true
;
break
;
case
MIPI_YUV420_L
:
pctype
=
6
;
datatype
=
MIPI_DSI_PACKED_PIXEL_STREAM_YCBCR12
;
pixfmt
=
MIPI_DCS_PIXEL_FMT_12BIT
;
linelength
=
(
ch
->
lcd_
cfg
[
0
].
xres
*
12
+
7
)
/
8
;
linelength
=
(
ch
->
lcd_
modes
[
0
].
xres
*
12
+
7
)
/
8
;
yuv
=
true
;
break
;
case
MIPI_YUV420
:
...
...
@@ -223,7 +225,7 @@ static int __init sh_mipi_setup(struct sh_mipi *mipi,
datatype
=
MIPI_DSI_PACKED_PIXEL_STREAM_YCBCR12
;
pixfmt
=
MIPI_DCS_PIXEL_FMT_12BIT
;
/* Length of U/V line */
linelength
=
(
ch
->
lcd_
cfg
[
0
].
xres
+
1
)
/
2
;
linelength
=
(
ch
->
lcd_
modes
[
0
].
xres
+
1
)
/
2
;
yuv
=
true
;
break
;
default:
...
...
@@ -292,7 +294,7 @@ static int __init sh_mipi_setup(struct sh_mipi *mipi,
*/
iowrite32
(
0x00000006
,
mipi
->
linkbase
+
DTCTR
);
/* VSYNC width = 2 (<< 17) */
iowrite32
((
ch
->
lcd_
cfg
[
0
].
vsync_len
<<
pdata
->
vsynw_offset
)
|
iowrite32
((
ch
->
lcd_
modes
[
0
].
vsync_len
<<
pdata
->
vsynw_offset
)
|
(
pdata
->
clksrc
<<
16
)
|
(
pctype
<<
12
)
|
datatype
,
mipi
->
linkbase
+
VMCTR1
);
...
...
@@ -326,7 +328,7 @@ static int __init sh_mipi_setup(struct sh_mipi *mipi,
top
=
linelength
<<
16
;
/* RGBLEN */
bottom
=
0x00000001
;
if
(
pdata
->
flags
&
SH_MIPI_DSI_HSABM
)
/* HSALEN */
bottom
=
(
pdata
->
lane
*
ch
->
lcd_
cfg
[
0
].
hsync_len
)
-
10
;
bottom
=
(
pdata
->
lane
*
ch
->
lcd_
modes
[
0
].
hsync_len
)
-
10
;
iowrite32
(
top
|
bottom
,
mipi
->
linkbase
+
VMLEN1
);
/*
...
...
@@ -346,18 +348,18 @@ static int __init sh_mipi_setup(struct sh_mipi *mipi,
div
=
2
;
if
(
pdata
->
flags
&
SH_MIPI_DSI_HFPBM
)
{
/* HBPLEN */
top
=
ch
->
lcd_
cfg
[
0
].
hsync_len
+
ch
->
lcd_cfg
[
0
].
left_margin
;
top
=
ch
->
lcd_
modes
[
0
].
hsync_len
+
ch
->
lcd_modes
[
0
].
left_margin
;
top
=
((
pdata
->
lane
*
top
/
div
)
-
10
)
<<
16
;
}
if
(
pdata
->
flags
&
SH_MIPI_DSI_HBPBM
)
{
/* HFPLEN */
bottom
=
ch
->
lcd_
cfg
[
0
].
right_margin
;
bottom
=
ch
->
lcd_
modes
[
0
].
right_margin
;
bottom
=
(
pdata
->
lane
*
bottom
/
div
)
-
12
;
}
bpp
=
linelength
/
ch
->
lcd_
cfg
[
0
].
xres
;
/* byte / pixel */
bpp
=
linelength
/
ch
->
lcd_
modes
[
0
].
xres
;
/* byte / pixel */
if
((
pdata
->
lane
/
div
)
>
bpp
)
{
tmp
=
ch
->
lcd_
cfg
[
0
].
xres
/
bpp
;
/* output cycle */
tmp
=
ch
->
lcd_
cfg
[
0
].
xres
-
tmp
;
/* (input - output) cycle */
tmp
=
ch
->
lcd_
modes
[
0
].
xres
/
bpp
;
/* output cycle */
tmp
=
ch
->
lcd_
modes
[
0
].
xres
-
tmp
;
/* (input - output) cycle */
delay
=
(
pdata
->
lane
*
tmp
);
}
...
...
@@ -392,9 +394,9 @@ static int __init sh_mipi_setup(struct sh_mipi *mipi,
return
0
;
}
static
void
mipi_display_on
(
void
*
arg
,
struct
fb_info
*
info
)
static
int
mipi_display_on
(
struct
sh_mobile_lcdc_entity
*
entity
)
{
struct
sh_mipi
*
mipi
=
arg
;
struct
sh_mipi
*
mipi
=
to_sh_mipi
(
entity
)
;
struct
sh_mipi_dsi_info
*
pdata
=
mipi
->
pdev
->
dev
.
platform_data
;
int
ret
;
...
...
@@ -410,25 +412,21 @@ static void mipi_display_on(void *arg, struct fb_info *info)
sh_mipi_dsi_enable
(
mipi
,
true
);
if
(
mipi
->
next_display_on
)
mipi
->
next_display_on
(
mipi
->
next_board_data
,
info
);
return
;
return
SH_MOBILE_LCDC_DISPLAY_CONNECTED
;
mipi_display_on_fail1:
pm_runtime_put_sync
(
&
mipi
->
pdev
->
dev
);
mipi_display_on_fail2:
pdata
->
set_dot_clock
(
mipi
->
pdev
,
mipi
->
base
,
0
);
return
ret
;
}
static
void
mipi_display_off
(
void
*
arg
)
static
void
mipi_display_off
(
struct
sh_mobile_lcdc_entity
*
entity
)
{
struct
sh_mipi
*
mipi
=
arg
;
struct
sh_mipi
*
mipi
=
to_sh_mipi
(
entity
)
;
struct
sh_mipi_dsi_info
*
pdata
=
mipi
->
pdev
->
dev
.
platform_data
;
if
(
mipi
->
next_display_off
)
mipi
->
next_display_off
(
mipi
->
next_board_data
);
sh_mipi_dsi_enable
(
mipi
,
false
);
pdata
->
set_dot_clock
(
mipi
->
pdev
,
mipi
->
base
,
0
);
...
...
@@ -436,6 +434,11 @@ static void mipi_display_off(void *arg)
pm_runtime_put_sync
(
&
mipi
->
pdev
->
dev
);
}
static
const
struct
sh_mobile_lcdc_entity_ops
mipi_ops
=
{
.
display_on
=
mipi_display_on
,
.
display_off
=
mipi_display_off
,
};
static
int
__init
sh_mipi_probe
(
struct
platform_device
*
pdev
)
{
struct
sh_mipi
*
mipi
;
...
...
@@ -467,6 +470,9 @@ static int __init sh_mipi_probe(struct platform_device *pdev)
goto
ealloc
;
}
mipi
->
entity
.
owner
=
THIS_MODULE
;
mipi
->
entity
.
ops
=
&
mipi_ops
;
if
(
!
request_mem_region
(
res
->
start
,
resource_size
(
res
),
pdev
->
name
))
{
dev_err
(
&
pdev
->
dev
,
"MIPI register region already claimed
\n
"
);
ret
=
-
EBUSY
;
...
...
@@ -521,18 +527,7 @@ static int __init sh_mipi_probe(struct platform_device *pdev)
pm_runtime_resume
(
&
pdev
->
dev
);
mutex_unlock
(
&
array_lock
);
platform_set_drvdata
(
pdev
,
mipi
);
/* Save original LCDC callbacks */
mipi
->
next_board_data
=
pdata
->
lcd_chan
->
board_cfg
.
board_data
;
mipi
->
next_display_on
=
pdata
->
lcd_chan
->
board_cfg
.
display_on
;
mipi
->
next_display_off
=
pdata
->
lcd_chan
->
board_cfg
.
display_off
;
/* Set up LCDC callbacks */
pdata
->
lcd_chan
->
board_cfg
.
board_data
=
mipi
;
pdata
->
lcd_chan
->
board_cfg
.
display_on
=
mipi_display_on
;
pdata
->
lcd_chan
->
board_cfg
.
display_off
=
mipi_display_off
;
pdata
->
lcd_chan
->
board_cfg
.
owner
=
THIS_MODULE
;
platform_set_drvdata
(
pdev
,
&
mipi
->
entity
);
return
0
;
...
...
@@ -558,10 +553,9 @@ static int __init sh_mipi_probe(struct platform_device *pdev)
static
int
__exit
sh_mipi_remove
(
struct
platform_device
*
pdev
)
{
struct
sh_mipi_dsi_info
*
pdata
=
pdev
->
dev
.
platform_data
;
struct
resource
*
res
=
platform_get_resource
(
pdev
,
IORESOURCE_MEM
,
0
);
struct
resource
*
res2
=
platform_get_resource
(
pdev
,
IORESOURCE_MEM
,
1
);
struct
sh_mipi
*
mipi
=
platform_get_drvdata
(
pdev
);
struct
sh_mipi
*
mipi
=
to_sh_mipi
(
platform_get_drvdata
(
pdev
)
);
int
i
,
ret
;
mutex_lock
(
&
array_lock
);
...
...
@@ -581,11 +575,6 @@ static int __exit sh_mipi_remove(struct platform_device *pdev)
if
(
ret
<
0
)
return
ret
;
pdata
->
lcd_chan
->
board_cfg
.
owner
=
NULL
;
pdata
->
lcd_chan
->
board_cfg
.
display_on
=
NULL
;
pdata
->
lcd_chan
->
board_cfg
.
display_off
=
NULL
;
pdata
->
lcd_chan
->
board_cfg
.
board_data
=
NULL
;
pm_runtime_disable
(
&
pdev
->
dev
);
clk_disable
(
mipi
->
dsit_clk
);
clk_put
(
mipi
->
dsit_clk
);
...
...
drivers/video/sh_mobile_hdmi.c
View file @
f9b4a5ce
This diff is collapsed.
Click to expand it.
drivers/video/sh_mobile_lcdcfb.c
View file @
f9b4a5ce
This diff is collapsed.
Click to expand it.
drivers/video/sh_mobile_lcdcfb.h
View file @
f9b4a5ce
...
...
@@ -14,9 +14,35 @@ enum { LDDCKPAT1R, LDDCKPAT2R, LDMT1R, LDMT2R, LDMT3R, LDDFR, LDSM1R,
#define PALETTE_NR 16
struct
sh_mobile_lcdc_priv
;
struct
fb_info
;
struct
backlight_device
;
struct
fb_info
;
struct
module
;
struct
sh_mobile_lcdc_chan
;
struct
sh_mobile_lcdc_entity
;
struct
sh_mobile_lcdc_format_info
;
struct
sh_mobile_lcdc_priv
;
#define SH_MOBILE_LCDC_DISPLAY_DISCONNECTED 0
#define SH_MOBILE_LCDC_DISPLAY_CONNECTED 1
struct
sh_mobile_lcdc_entity_ops
{
/* Display */
int
(
*
display_on
)(
struct
sh_mobile_lcdc_entity
*
entity
);
void
(
*
display_off
)(
struct
sh_mobile_lcdc_entity
*
entity
);
};
enum
sh_mobile_lcdc_entity_event
{
SH_MOBILE_LCDC_EVENT_DISPLAY_CONNECT
,
SH_MOBILE_LCDC_EVENT_DISPLAY_DISCONNECT
,
SH_MOBILE_LCDC_EVENT_DISPLAY_MODE
,
};
struct
sh_mobile_lcdc_entity
{
struct
module
*
owner
;
const
struct
sh_mobile_lcdc_entity_ops
*
ops
;
struct
sh_mobile_lcdc_chan
*
lcdc
;
struct
fb_videomode
def_mode
;
};
/*
* struct sh_mobile_lcdc_chan - LCDC display channel
...
...
@@ -27,29 +53,57 @@ struct backlight_device;
*/
struct
sh_mobile_lcdc_chan
{
struct
sh_mobile_lcdc_priv
*
lcdc
;
struct
sh_mobile_lcdc_entity
*
tx_dev
;
const
struct
sh_mobile_lcdc_chan_cfg
*
cfg
;
unsigned
long
*
reg_offs
;
unsigned
long
ldmt1r_value
;
unsigned
long
enabled
;
/* ME and SE in LDCNT2R */
struct
sh_mobile_lcdc_chan_cfg
cfg
;
u32
pseudo_palette
[
PALETTE_NR
];
struct
fb_info
*
info
;
struct
backlight_device
*
bl
;
void
*
meram
;
struct
mutex
open_lock
;
/* protects the use counter */
int
use_count
;
void
*
fb_mem
;
unsigned
long
fb_size
;
dma_addr_t
dma_handle
;
struct
fb_deferred_io
defio
;
struct
scatterlist
*
sglist
;
unsigned
long
frame_end
;
unsigned
long
pan_offset
;
unsigned
long
frame_end
;
wait_queue_head_t
frame_end_wait
;
struct
completion
vsync_completion
;
struct
fb_var_screeninfo
display_var
;
int
use_count
;
int
blank_status
;
struct
mutex
open_lock
;
/* protects the use counter */
int
meram_enabled
;
const
struct
sh_mobile_lcdc_format_info
*
format
;
u32
colorspace
;
unsigned
int
xres
;
unsigned
int
xres_virtual
;
unsigned
int
yres
;
unsigned
int
yres_virtual
;
unsigned
int
pitch
;
unsigned
long
base_addr_y
;
unsigned
long
base_addr_c
;
unsigned
int
pitch
;
int
(
*
notify
)(
struct
sh_mobile_lcdc_chan
*
ch
,
enum
sh_mobile_lcdc_entity_event
event
,
const
struct
fb_videomode
*
mode
,
const
struct
fb_monspecs
*
monspec
);
/* Backlight */
struct
backlight_device
*
bl
;
/* FB */
struct
fb_info
*
info
;
u32
pseudo_palette
[
PALETTE_NR
];
struct
{
unsigned
int
width
;
unsigned
int
height
;
struct
fb_videomode
mode
;
}
display
;
struct
fb_deferred_io
defio
;
struct
scatterlist
*
sglist
;
int
blank_status
;
};
#endif
drivers/video/sh_mobile_meram.c
View file @
f9b4a5ce
This diff is collapsed.
Click to expand it.
include/video/sh_mobile_hdmi.h
View file @
f9b4a5ce
...
...
@@ -31,8 +31,6 @@ struct clk;
#define HDMI_SND_SRC_HBR (3 << 0)
struct
sh_mobile_hdmi_info
{
struct
sh_mobile_lcdc_chan_cfg
*
lcd_chan
;
struct
device
*
lcd_dev
;
unsigned
int
flags
;
long
(
*
clk_optimize_parent
)(
unsigned
long
target
,
unsigned
long
*
best_freq
,
unsigned
long
*
parent_freq
);
...
...
include/video/sh_mobile_lcdc.h
View file @
f9b4a5ce
...
...
@@ -147,29 +147,23 @@ struct sh_mobile_lcdc_sys_bus_ops {
unsigned
long
(
*
read_data
)(
void
*
handle
);
};
struct
module
;
struct
sh_mobile_lcdc_board_cfg
{
struct
module
*
owner
;
void
*
board_data
;
int
(
*
setup_sys
)(
void
*
board_data
,
void
*
sys_ops_handle
,
struct
sh_mobile_lcdc_panel_cfg
{
unsigned
long
width
;
/* Panel width in mm */
unsigned
long
height
;
/* Panel height in mm */
int
(
*
setup_sys
)(
void
*
sys_ops_handle
,
struct
sh_mobile_lcdc_sys_bus_ops
*
sys_ops
);
void
(
*
start_transfer
)(
void
*
board_data
,
void
*
sys_ops_handle
,
void
(
*
start_transfer
)(
void
*
sys_ops_handle
,
struct
sh_mobile_lcdc_sys_bus_ops
*
sys_ops
);
void
(
*
display_on
)(
void
*
board_data
,
struct
fb_info
*
info
);
void
(
*
display_off
)(
void
*
board_data
);
int
(
*
set_brightness
)(
void
*
board_data
,
int
brightness
);
int
(
*
get_brightness
)(
void
*
board_data
);
};
struct
sh_mobile_lcdc_lcd_size_cfg
{
/* width and height of panel in mm */
unsigned
long
width
;
unsigned
long
height
;
void
(
*
display_on
)(
void
);
void
(
*
display_off
)(
void
);
};
/* backlight info */
struct
sh_mobile_lcdc_bl_info
{
const
char
*
name
;
int
max_brightness
;
int
(
*
set_brightness
)(
int
brightness
);
int
(
*
get_brightness
)(
void
);
};
struct
sh_mobile_lcdc_chan_cfg
{
...
...
@@ -179,13 +173,14 @@ struct sh_mobile_lcdc_chan_cfg {
int
interface_type
;
/* selects RGBn or SYSn I/F, see above */
int
clock_divider
;
unsigned
long
flags
;
/* LCDC_FLAGS_... */
const
struct
fb_videomode
*
lcd_cfg
;
int
num_cfg
;
struct
sh_mobile_lcdc_lcd_size_cfg
lcd_size_cfg
;
struct
sh_mobile_lcdc_board_cfg
board_cfg
;
const
struct
fb_videomode
*
lcd_modes
;
int
num_modes
;
struct
sh_mobile_lcdc_panel_cfg
panel_cfg
;
struct
sh_mobile_lcdc_bl_info
bl_info
;
struct
sh_mobile_lcdc_sys_bus_cfg
sys_bus_cfg
;
/* only for SYSn I/F */
struct
sh_mobile_meram_cfg
*
meram_cfg
;
const
struct
sh_mobile_meram_cfg
*
meram_cfg
;
struct
platform_device
*
tx_dev
;
/* HDMI/DSI transmitter device */
};
struct
sh_mobile_lcdc_info
{
...
...
include/video/sh_mobile_meram.h
View file @
f9b4a5ce
...
...
@@ -17,48 +17,43 @@ enum {
struct
sh_mobile_meram_priv
;
struct
sh_mobile_meram_ops
;
/*
* struct sh_mobile_meram_info - MERAM platform data
* @reserved_icbs: Bitmask of reserved ICBs (for instance used through UIO)
*/
struct
sh_mobile_meram_info
{
int
addr_mode
;
u32
reserved_icbs
;
struct
sh_mobile_meram_ops
*
ops
;
struct
sh_mobile_meram_priv
*
priv
;
struct
platform_device
*
pdev
;
};
/* icb config */
struct
sh_mobile_meram_icb
{
int
marker_icb
;
/* ICB # for Marker ICB */
int
cache_icb
;
/* ICB # for Cache ICB */
int
meram_offset
;
/* MERAM Buffer Offset to use */
int
meram_size
;
/* MERAM Buffer Size to use */
int
cache_unit
;
/* bytes to cache per ICB */
struct
sh_mobile_meram_icb_cfg
{
unsigned
int
meram_size
;
/* MERAM Buffer Size to use */
};
struct
sh_mobile_meram_cfg
{
struct
sh_mobile_meram_icb
icb
[
2
];
int
pixelformat
;
int
current_reg
;
struct
sh_mobile_meram_icb_cfg
icb
[
2
];
};
struct
module
;
struct
sh_mobile_meram_ops
{
struct
module
*
module
;
/* register usage of meram */
int
(
*
meram_register
)(
struct
sh_mobile_meram_info
*
meram_dev
,
struct
sh_mobile_meram_cfg
*
cfg
,
int
xres
,
int
yres
,
int
pixelformat
,
unsigned
long
base_addr_y
,
unsigned
long
base_addr_c
,
unsigned
long
*
icb_addr_y
,
unsigned
long
*
icb_addr_c
,
int
*
pitch
);
void
*
(
*
meram_register
)(
struct
sh_mobile_meram_info
*
meram_dev
,
const
struct
sh_mobile_meram_cfg
*
cfg
,
unsigned
int
xres
,
unsigned
int
yres
,
unsigned
int
pixelformat
,
unsigned
int
*
pitch
);
/* unregister usage of meram */
int
(
*
meram_unregister
)(
struct
sh_mobile_meram_info
*
meram_dev
,
struct
sh_mobile_meram_cfg
*
cfg
);
void
(
*
meram_unregister
)(
struct
sh_mobile_meram_info
*
meram_dev
,
void
*
data
);
/* update meram settings */
int
(
*
meram_update
)(
struct
sh_mobile_meram_info
*
meram_dev
,
struct
sh_mobile_meram_cfg
*
cfg
,
void
(
*
meram_update
)(
struct
sh_mobile_meram_info
*
meram_dev
,
void
*
data
,
unsigned
long
base_addr_y
,
unsigned
long
base_addr_c
,
unsigned
long
*
icb_addr_y
,
...
...
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