[PATCH 7/9] ARM: S5PV210: convert framebuffer to device-table
Marek Szyprowski
m.szyprowski at samsung.com
Wed Aug 11 08:03:56 EDT 2010
Convert s3c-fb platform device initialization to device-table approach.
The conversion is performed only for S5PV210 SoC.
Signed-off-by: Marek Szyprowski <m.szyprowski at samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park at samsung.com>
---
arch/arm/mach-s5pv210/Kconfig | 3 +-
arch/arm/mach-s5pv210/dev-table.c | 8 +++++
arch/arm/mach-s5pv210/mach-aquila.c | 5 +---
arch/arm/mach-s5pv210/mach-goni.c | 5 +---
arch/arm/plat-samsung/dev-fb.c | 44 ++++++------------------------
arch/arm/plat-samsung/dev_templates.c | 2 +
arch/arm/plat-samsung/include/plat/fb.h | 9 ++++++
7 files changed, 31 insertions(+), 45 deletions(-)
diff --git a/arch/arm/mach-s5pv210/Kconfig b/arch/arm/mach-s5pv210/Kconfig
index 7b59855..734c0b7 100644
--- a/arch/arm/mach-s5pv210/Kconfig
+++ b/arch/arm/mach-s5pv210/Kconfig
@@ -33,6 +33,7 @@ config S5PV210_SETUP_IDE
Common setup code for S5PV210 IDE GPIO configurations
config S5PV210_SETUP_FB_24BPP
+ select S3C_DEV_FB
bool
help
Common setup code for S5PV210 with an 24bpp RGB display helper.
@@ -77,7 +78,6 @@ config MACH_AQUILA
bool "Aquila"
select CPU_S5PV210
select ARCH_SPARSEMEM_ENABLE
- select S3C_DEV_FB
select S5P_DEV_FIMC0
select S5P_DEV_FIMC1
select S5P_DEV_FIMC2
@@ -92,7 +92,6 @@ config MACH_GONI
bool "GONI"
select CPU_S5PV210
select ARCH_SPARSEMEM_ENABLE
- select S3C_DEV_FB
select S5P_DEV_FIMC0
select S5P_DEV_FIMC1
select S5P_DEV_FIMC2
diff --git a/arch/arm/mach-s5pv210/dev-table.c b/arch/arm/mach-s5pv210/dev-table.c
index 86f3792..b88b43d 100644
--- a/arch/arm/mach-s5pv210/dev-table.c
+++ b/arch/arm/mach-s5pv210/dev-table.c
@@ -99,6 +99,14 @@ struct s3c_pdev_table s5pv210_dev_table[] __initdata = {
.res = {S5PV210_PA_HSMMC(2), IRQ_HSMMC2},
.defpdata = s5pv210_hsmmc2_def_platdata_p,
}, {
+ .type = SAMSUNG_DEVICE_FB,
+ .index = -1,
+ .name = "s3c-fb",
+ .res = {
+ S5PV210_PA_FB,
+ IRQ_LCD_VSYNC, IRQ_LCD_FIFO, IRQ_LCD_SYSTEM,
+ },
+ }, {
.type = SAMSUNG_DEVICE_ONENAND,
.name = "s5pc110-onenand",
.index = -1,
diff --git a/arch/arm/mach-s5pv210/mach-aquila.c b/arch/arm/mach-s5pv210/mach-aquila.c
index c4f5261..cb79256 100644
--- a/arch/arm/mach-s5pv210/mach-aquila.c
+++ b/arch/arm/mach-s5pv210/mach-aquila.c
@@ -475,13 +475,13 @@ static void aquila_setup_sdhci(void)
static struct platform_device *aquila_devices[] __initdata = {
&aquila_i2c_gpio_pmic,
&aquila_device_gpiokeys,
- &s3c_device_fb,
&s5p_device_fimc0,
&s5p_device_fimc1,
&s5p_device_fimc2,
};
static struct s3c_devtable aquila_devtable[] __initdata = {
+ { .type = SAMSUNG_DEVICE_FB, .index = -1, .pdata = &aquila_lcd_pdata},
{ .type = SAMSUNG_DEVICE_ONENAND, .index = -1 },
{ .type = SAMSUNG_DEVICE_SDHCI, .index = 0, .pdata = &aquila_hsmmc0_data},
{ .type = SAMSUNG_DEVICE_SDHCI, .index = 1, .pdata = &aquila_hsmmc1_data},
@@ -508,9 +508,6 @@ static void __init aquila_machine_init(void)
s3c_fimc_setname(1, "s5p-fimc");
s3c_fimc_setname(2, "s5p-fimc");
- /* FB */
- s3c_fb_set_platdata(&aquila_lcd_pdata);
-
platform_add_devices(aquila_devices, ARRAY_SIZE(aquila_devices));
samsung_add_devices(aquila_devtable, ARRAY_SIZE(aquila_devtable));
}
diff --git a/arch/arm/mach-s5pv210/mach-goni.c b/arch/arm/mach-s5pv210/mach-goni.c
index 9c9f6ca..23814cd 100644
--- a/arch/arm/mach-s5pv210/mach-goni.c
+++ b/arch/arm/mach-s5pv210/mach-goni.c
@@ -452,7 +452,6 @@ static void goni_setup_sdhci(void)
};
static struct platform_device *goni_devices[] __initdata = {
- &s3c_device_fb,
&goni_i2c_gpio_pmic,
&goni_device_gpiokeys,
&s5p_device_fimc0,
@@ -461,6 +460,7 @@ static struct platform_device *goni_devices[] __initdata = {
};
static struct s3c_devtable goni_devtable[] __initdata = {
+ { .type = SAMSUNG_DEVICE_FB, .index = -1, .pdata = &goni_lcd_pdata},
{ .type = SAMSUNG_DEVICE_ONENAND, .index = -1, },
{ .type = SAMSUNG_DEVICE_SDHCI, .index = 0, .pdata = &goni_hsmmc0_data},
{ .type = SAMSUNG_DEVICE_SDHCI, .index = 1, .pdata = &goni_hsmmc1_data},
@@ -483,9 +483,6 @@ static void __init goni_machine_init(void)
/* SDHCI */
goni_setup_sdhci();
- /* FB */
- s3c_fb_set_platdata(&goni_lcd_pdata);
-
platform_add_devices(goni_devices, ARRAY_SIZE(goni_devices));
samsung_add_devices(goni_devtable, ARRAY_SIZE(goni_devtable));
}
diff --git a/arch/arm/plat-samsung/dev-fb.c b/arch/arm/plat-samsung/dev-fb.c
index bf60204..dc604c3 100644
--- a/arch/arm/plat-samsung/dev-fb.c
+++ b/arch/arm/plat-samsung/dev-fb.c
@@ -17,57 +17,31 @@
#include <linux/fb.h>
#include <linux/gfp.h>
-#include <mach/irqs.h>
-#include <mach/map.h>
-
#include <plat/fb.h>
#include <plat/devs.h>
-#include <plat/cpu.h>
+#include <plat/dev-core.h>
-static struct resource s3c_fb_resource[] = {
+static struct resource s3c_fb_resources[] __initdata = {
[0] = {
- .start = S3C_PA_FB,
- .end = S3C_PA_FB + SZ_16K - 1,
+ .end = SZ_16K - 1,
.flags = IORESOURCE_MEM,
},
[1] = {
- .start = IRQ_LCD_VSYNC,
- .end = IRQ_LCD_VSYNC,
.flags = IORESOURCE_IRQ,
},
[2] = {
- .start = IRQ_LCD_FIFO,
- .end = IRQ_LCD_FIFO,
.flags = IORESOURCE_IRQ,
},
[3] = {
- .start = IRQ_LCD_SYSTEM,
- .end = IRQ_LCD_SYSTEM,
.flags = IORESOURCE_IRQ,
},
};
-struct platform_device s3c_device_fb = {
- .name = "s3c-fb",
- .id = -1,
- .num_resources = ARRAY_SIZE(s3c_fb_resource),
- .resource = s3c_fb_resource,
- .dev.dma_mask = &s3c_device_fb.dev.coherent_dma_mask,
- .dev.coherent_dma_mask = 0xffffffffUL,
+struct s3c_pdev_template s3c_fb_template __initdata = {
+ .type = SAMSUNG_DEVICE_FB,
+ .resources = s3c_fb_resources,
+ .nr_res = ARRAY_SIZE(s3c_fb_resources),
+ .pdata_size = sizeof(struct s3c_fb_platdata),
+ .dma = &samsung_std_dma_mask,
};
-void __init s3c_fb_set_platdata(struct s3c_fb_platdata *pd)
-{
- struct s3c_fb_platdata *npd;
-
- if (!pd) {
- printk(KERN_ERR "%s: no platform data\n", __func__);
- return;
- }
-
- npd = kmemdup(pd, sizeof(struct s3c_fb_platdata), GFP_KERNEL);
- if (!npd)
- printk(KERN_ERR "%s: no memory for platform data\n", __func__);
-
- s3c_device_fb.dev.platform_data = npd;
-}
diff --git a/arch/arm/plat-samsung/dev_templates.c b/arch/arm/plat-samsung/dev_templates.c
index 922c6e9..be06c19 100644
--- a/arch/arm/plat-samsung/dev_templates.c
+++ b/arch/arm/plat-samsung/dev_templates.c
@@ -22,6 +22,7 @@
#include <plat/cpu.h>
#include <plat/uart.h>
+#include <plat/fb.h>
#include <plat/sdhci.h>
#define TEMPLATE_ENTRY(_type, _res) \
@@ -45,6 +46,7 @@ static struct s3c_pdev_template *templates[] __initdata = {
s3c24xx_uart_template_p,
s3c64xx_uart_template_p,
s3c_hsmmc_template_p,
+ s3c_fb_template_p,
};
u64 samsung_std_dma_mask = 0xffffffffUL;
diff --git a/arch/arm/plat-samsung/include/plat/fb.h b/arch/arm/plat-samsung/include/plat/fb.h
index 27d3b49..6e64cb8 100644
--- a/arch/arm/plat-samsung/include/plat/fb.h
+++ b/arch/arm/plat-samsung/include/plat/fb.h
@@ -15,6 +15,8 @@
#ifndef __PLAT_S3C_FB_H
#define __PLAT_S3C_FB_H __FILE__
+#include <linux/fb.h>
+
/* S3C_FB_MAX_WIN
* Set to the maximum number of windows that any of the supported hardware
* can use. Since the platform data uses this for an array size, having it
@@ -91,4 +93,11 @@ extern void s5pc100_fb_gpio_setup_24bpp(void);
*/
extern void s5pv210_fb_gpio_setup_24bpp(void);
+#ifdef CONFIG_S3C_DEV_FB
+extern struct s3c_pdev_template s3c_fb_template;
+#define s3c_fb_template_p (&s3c_fb_template)
+#else
+#define s3c_fb_template_p NULL
+#endif
+
#endif /* __PLAT_S3C_FB_H */
--
1.7.1.569.g6f426
More information about the linux-arm-kernel
mailing list