OMAP1: pass LCD config with omapfb_set_lcd_config()
authorTomi Valkeinen <tomi.valkeinen@ti.com>
Tue, 20 Sep 2011 12:23:13 +0000 (15:23 +0300)
committerTomi Valkeinen <tomi.valkeinen@ti.com>
Thu, 23 Feb 2012 07:39:23 +0000 (09:39 +0200)
LCD config for old omapfb driver is passed with OMAP_TAG_LCD from board
files or from the bootloader. In an effort to remove OMAP_TAG_LCD, this
patch adds omapfb_set_lcd_config() function that the board files can
call to set the LCD config.

This has the drawback that configuration can no longer come from the
bootloader. Of the boards supported by the kernel, this should only
affect N770 which depends on the data from the bootloader. This patch
adds an LCD config for N770 to its board files, but that is most
probably broken. Fixing this would need information about the HW setup
in N770 boards.

Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Acked-by: Tony Lindgren <tony@atomide.com>
15 files changed:
arch/arm/mach-omap1/board-ams-delta.c
arch/arm/mach-omap1/board-fsample.c
arch/arm/mach-omap1/board-h2.c
arch/arm/mach-omap1/board-h3.c
arch/arm/mach-omap1/board-htcherald.c
arch/arm/mach-omap1/board-innovator.c
arch/arm/mach-omap1/board-nokia770.c
arch/arm/mach-omap1/board-osk.c
arch/arm/mach-omap1/board-palmte.c
arch/arm/mach-omap1/board-palmtt.c
arch/arm/mach-omap1/board-palmz71.c
arch/arm/mach-omap1/board-perseus2.c
arch/arm/mach-omap1/board-sx1.c
arch/arm/plat-omap/fb.c
include/linux/omapfb.h

index 88909cc0b25407eada87f91b651525fa35cf30fe..e0e8245f3c9fd9c8510b772c4ddf44f0de752b2f 100644 (file)
@@ -20,6 +20,7 @@
 #include <linux/platform_device.h>
 #include <linux/serial_8250.h>
 #include <linux/export.h>
+#include <linux/omapfb.h>
 
 #include <media/soc_camera.h>
 
@@ -169,10 +170,6 @@ static struct omap_usb_config ams_delta_usb_config __initdata = {
        .pins[0]        = 2,
 };
 
-static struct omap_board_config_kernel ams_delta_config[] __initdata = {
-       { OMAP_TAG_LCD,         &ams_delta_lcd_config },
-};
-
 static struct resource ams_delta_nand_resources[] = {
        [0] = {
                .start  = OMAP1_MPUIO_BASE,
@@ -302,8 +299,6 @@ static void __init ams_delta_init(void)
        omap_cfg_reg(J19_1610_CAM_D6);
        omap_cfg_reg(J18_1610_CAM_D7);
 
-       omap_board_config = ams_delta_config;
-       omap_board_config_size = ARRAY_SIZE(ams_delta_config);
        omap_serial_init();
        omap_register_i2c_bus(1, 100, NULL, 0);
 
@@ -321,6 +316,8 @@ static void __init ams_delta_init(void)
        ams_delta_init_fiq();
 
        omap_writew(omap_readw(ARM_RSTCT1) | 0x0004, ARM_RSTCT1);
+
+       omapfb_set_lcd_config(&ams_delta_lcd_config);
 }
 
 static struct plat_serial8250_port ams_delta_modem_ports[] = {
index 0b9464b4121286c930b2f1c6af835386cdc306f4..b00844f7414d919bfddcb8f9c926b6e83d498751 100644 (file)
@@ -21,6 +21,7 @@
 #include <linux/mtd/physmap.h>
 #include <linux/input.h>
 #include <linux/smc91x.h>
+#include <linux/omapfb.h>
 
 #include <mach/hardware.h>
 #include <asm/mach-types.h>
@@ -290,10 +291,6 @@ static struct omap_lcd_config fsample_lcd_config = {
        .ctrl_name      = "internal",
 };
 
-static struct omap_board_config_kernel fsample_config[] __initdata = {
-       { OMAP_TAG_LCD,         &fsample_lcd_config },
-};
-
 static void __init omap_fsample_init(void)
 {
        /* Early, board-dependent init */
@@ -352,10 +349,10 @@ static void __init omap_fsample_init(void)
 
        platform_add_devices(devices, ARRAY_SIZE(devices));
 
-       omap_board_config = fsample_config;
-       omap_board_config_size = ARRAY_SIZE(fsample_config);
        omap_serial_init();
        omap_register_i2c_bus(1, 100, NULL, 0);
+
+       omapfb_set_lcd_config(&fsample_lcd_config);
 }
 
 /* Only FPGA needs to be mapped here. All others are done with ioremap */
index 00ad6b22d60a287e488295859b7995a5af87a4b1..471233fe147a45d34e28fc45814ca766d18e6a16 100644 (file)
@@ -30,6 +30,7 @@
 #include <linux/input.h>
 #include <linux/i2c/tps65010.h>
 #include <linux/smc91x.h>
+#include <linux/omapfb.h>
 
 #include <mach/hardware.h>
 
@@ -391,10 +392,6 @@ static struct omap_lcd_config h2_lcd_config __initdata = {
        .ctrl_name      = "internal",
 };
 
-static struct omap_board_config_kernel h2_config[] __initdata = {
-       { OMAP_TAG_LCD,         &h2_lcd_config },
-};
-
 static void __init h2_init(void)
 {
        h2_init_smc91x();
@@ -438,13 +435,13 @@ static void __init h2_init(void)
        omap_cfg_reg(N19_1610_KBR5);
 
        platform_add_devices(h2_devices, ARRAY_SIZE(h2_devices));
-       omap_board_config = h2_config;
-       omap_board_config_size = ARRAY_SIZE(h2_config);
        omap_serial_init();
        omap_register_i2c_bus(1, 100, h2_i2c_board_info,
                              ARRAY_SIZE(h2_i2c_board_info));
        omap1_usb_init(&h2_usb_config);
        h2_mmc_init();
+
+       omapfb_set_lcd_config(&h2_lcd_config);
 }
 
 MACHINE_START(OMAP_H2, "TI-H2")
index 4a7f25149703a6cdd9384d376fa792f6eadfd094..7cfd25b90735cb6cbc00989083d8185bbc7d7c2c 100644 (file)
@@ -30,6 +30,7 @@
 #include <linux/spi/spi.h>
 #include <linux/i2c/tps65010.h>
 #include <linux/smc91x.h>
+#include <linux/omapfb.h>
 
 #include <asm/setup.h>
 #include <asm/page.h>
@@ -370,10 +371,6 @@ static struct omap_lcd_config h3_lcd_config __initdata = {
        .ctrl_name      = "internal",
 };
 
-static struct omap_board_config_kernel h3_config[] __initdata = {
-       { OMAP_TAG_LCD,         &h3_lcd_config },
-};
-
 static struct i2c_board_info __initdata h3_i2c_board_info[] = {
        {
                I2C_BOARD_INFO("tps65013", 0x48),
@@ -426,13 +423,13 @@ static void __init h3_init(void)
        platform_add_devices(devices, ARRAY_SIZE(devices));
        spi_register_board_info(h3_spi_board_info,
                                ARRAY_SIZE(h3_spi_board_info));
-       omap_board_config = h3_config;
-       omap_board_config_size = ARRAY_SIZE(h3_config);
        omap_serial_init();
        omap_register_i2c_bus(1, 100, h3_i2c_board_info,
                              ARRAY_SIZE(h3_i2c_board_info));
        omap1_usb_init(&h3_usb_config);
        h3_mmc_init();
+
+       omapfb_set_lcd_config(&h3_lcd_config);
 }
 
 MACHINE_START(OMAP_H3, "TI OMAP1710 H3 board")
index 731cc3db7ab377c1ee556d63fb37e5039ad3f20d..af2afcf24f75ccee3fa306f3a8dc6dfa9e41bd5d 100644 (file)
@@ -36,6 +36,7 @@
 #include <linux/leds.h>
 #include <linux/spi/spi.h>
 #include <linux/spi/ads7846.h>
+#include <linux/omapfb.h>
 
 #include <asm/mach-types.h>
 #include <asm/mach/arch.h>
@@ -398,10 +399,6 @@ static struct omap_lcd_config htcherald_lcd_config __initdata = {
        .ctrl_name      = "internal",
 };
 
-static struct omap_board_config_kernel htcherald_config[] __initdata = {
-       { OMAP_TAG_LCD, &htcherald_lcd_config },
-};
-
 static struct platform_device lcd_device = {
        .name           = "lcd_htcherald",
        .id             = -1,
@@ -580,8 +577,6 @@ static void __init htcherald_init(void)
        printk(KERN_INFO "HTC Herald init.\n");
 
        /* Do board initialization before we register all the devices */
-       omap_board_config = htcherald_config;
-       omap_board_config_size = ARRAY_SIZE(htcherald_config);
        platform_add_devices(devices, ARRAY_SIZE(devices));
 
        htcherald_disable_watchdog();
@@ -598,6 +593,8 @@ static void __init htcherald_init(void)
        htc_mmc_data[0] = &htc_mmc1_data;
        omap1_init_mmc(htc_mmc_data, 1);
 #endif
+
+       omapfb_set_lcd_config(&htcherald_lcd_config);
 }
 
 MACHINE_START(HERALD, "HTC Herald")
index 309369ea6978e59367e7e884875706b52f85478d..1d5ab6606b9f28c89830e0de61172e3df45a8e7e 100644 (file)
@@ -25,6 +25,7 @@
 #include <linux/mtd/physmap.h>
 #include <linux/input.h>
 #include <linux/smc91x.h>
+#include <linux/omapfb.h>
 
 #include <mach/hardware.h>
 #include <asm/mach-types.h>
@@ -370,10 +371,6 @@ static inline void innovator_mmc_init(void)
 }
 #endif
 
-static struct omap_board_config_kernel innovator_config[] = {
-       { OMAP_TAG_LCD,         NULL },
-};
-
 static void __init innovator_init(void)
 {
        if (cpu_is_omap1510())
@@ -416,17 +413,15 @@ static void __init innovator_init(void)
 #ifdef CONFIG_ARCH_OMAP15XX
        if (cpu_is_omap1510()) {
                omap1_usb_init(&innovator1510_usb_config);
-               innovator_config[1].data = &innovator1510_lcd_config;
+               omapfb_set_lcd_config(&innovator1510_lcd_config);
        }
 #endif
 #ifdef CONFIG_ARCH_OMAP16XX
        if (cpu_is_omap1610()) {
                omap1_usb_init(&h2_usb_config);
-               innovator_config[1].data = &innovator1610_lcd_config;
+               omapfb_set_lcd_config(&innovator1610_lcd_config);
        }
 #endif
-       omap_board_config = innovator_config;
-       omap_board_config_size = ARRAY_SIZE(innovator_config);
        omap_serial_init();
        omap_register_i2c_bus(1, 100, NULL, 0);
        innovator_mmc_init();
index 7155d8ce516a32e1247c4c3b74d51989fc38f149..9b6332a31fb6e3769a861ef5fe1295e375705a47 100644 (file)
@@ -98,15 +98,16 @@ static struct mipid_platform_data nokia770_mipid_platform_data = {
        .shutdown = mipid_shutdown,
 };
 
+static struct omap_lcd_config nokia770_lcd_config __initdata = {
+       .ctrl_name      = "hwa742",
+};
+
 static void __init mipid_dev_init(void)
 {
-       const struct omap_lcd_config *conf;
+       nokia770_mipid_platform_data.nreset_gpio = 13;
+       nokia770_mipid_platform_data.data_lines = 16;
 
-       conf = omap_get_config(OMAP_TAG_LCD, struct omap_lcd_config);
-       if (conf != NULL) {
-               nokia770_mipid_platform_data.nreset_gpio = conf->nreset_gpio;
-               nokia770_mipid_platform_data.data_lines = conf->data_lines;
-       }
+       omapfb_set_lcd_config(&nokia770_lcd_config);
 }
 
 static void __init ads7846_dev_init(void)
index 675de06557aab60bb8c16345d9ada9dcc32d720a..ef874655fbd3bd835068aa7324aa36d957ebe1fd 100644 (file)
@@ -34,6 +34,7 @@
 #include <linux/i2c.h>
 #include <linux/leds.h>
 #include <linux/smc91x.h>
+#include <linux/omapfb.h>
 
 #include <linux/mtd/mtd.h>
 #include <linux/mtd/partitions.h>
@@ -300,12 +301,6 @@ static struct omap_lcd_config osk_lcd_config __initdata = {
 };
 #endif
 
-static struct omap_board_config_kernel osk_config[] __initdata = {
-#ifdef CONFIG_OMAP_OSK_MISTRAL
-       { OMAP_TAG_LCD,                 &osk_lcd_config },
-#endif
-};
-
 #ifdef CONFIG_OMAP_OSK_MISTRAL
 
 #include <linux/input.h>
@@ -549,8 +544,6 @@ static void __init osk_init(void)
        osk_flash_resource.end = osk_flash_resource.start = omap_cs3_phys();
        osk_flash_resource.end += SZ_32M - 1;
        platform_add_devices(osk5912_devices, ARRAY_SIZE(osk5912_devices));
-       omap_board_config = osk_config;
-       omap_board_config_size = ARRAY_SIZE(osk_config);
 
        l = omap_readl(USB_TRANSCEIVER_CTRL);
        l |= (3 << 1);
@@ -567,6 +560,11 @@ static void __init osk_init(void)
        omap_register_i2c_bus(1, 400, osk_i2c_board_info,
                              ARRAY_SIZE(osk_i2c_board_info));
        osk_mistral_init();
+
+#ifdef CONFIG_OMAP_OSK_MISTRAL
+       omapfb_set_lcd_config(&osk_lcd_config);
+#endif
+
 }
 
 MACHINE_START(OMAP_OSK, "TI-OSK")
index 81fa27f88369e00f05601c2d44c696e34b4ddeef..612342cb2a2d2598a41e2a8be4e787e7b9ae16c2 100644 (file)
@@ -27,6 +27,7 @@
 #include <linux/spi/spi.h>
 #include <linux/interrupt.h>
 #include <linux/apm-emulation.h>
+#include <linux/omapfb.h>
 
 #include <mach/hardware.h>
 #include <asm/mach-types.h>
@@ -209,10 +210,6 @@ static struct omap_lcd_config palmte_lcd_config __initdata = {
        .ctrl_name      = "internal",
 };
 
-static struct omap_board_config_kernel palmte_config[] __initdata = {
-       { OMAP_TAG_LCD,         &palmte_lcd_config },
-};
-
 static struct spi_board_info palmte_spi_info[] __initdata = {
        {
                .modalias       = "tsc2102",
@@ -250,9 +247,6 @@ static void __init omap_palmte_init(void)
        omap_cfg_reg(UART3_TX);
        omap_cfg_reg(UART3_RX);
 
-       omap_board_config = palmte_config;
-       omap_board_config_size = ARRAY_SIZE(palmte_config);
-
        platform_add_devices(palmte_devices, ARRAY_SIZE(palmte_devices));
 
        spi_register_board_info(palmte_spi_info, ARRAY_SIZE(palmte_spi_info));
@@ -260,6 +254,8 @@ static void __init omap_palmte_init(void)
        omap_serial_init();
        omap1_usb_init(&palmte_usb_config);
        omap_register_i2c_bus(1, 100, NULL, 0);
+
+       omapfb_set_lcd_config(&palmte_lcd_config);
 }
 
 MACHINE_START(OMAP_PALMTE, "OMAP310 based Palm Tungsten E")
index 81cb82178388ed63743baf8470af756f1978a1cd..b63350bc88fd2c6f90f062597804a033ab083cdb 100644 (file)
@@ -24,6 +24,7 @@
 #include <linux/mtd/partitions.h>
 #include <linux/mtd/physmap.h>
 #include <linux/leds.h>
+#include <linux/omapfb.h>
 
 #include <mach/hardware.h>
 #include <asm/mach-types.h>
@@ -273,10 +274,6 @@ static struct omap_lcd_config palmtt_lcd_config __initdata = {
        .ctrl_name      = "internal",
 };
 
-static struct omap_board_config_kernel palmtt_config[] __initdata = {
-       { OMAP_TAG_LCD,         &palmtt_lcd_config      },
-};
-
 static void __init omap_mpu_wdt_mode(int mode) {
        if (mode)
                omap_writew(0x8000, OMAP_WDT_TIMER_MODE);
@@ -298,15 +295,14 @@ static void __init omap_palmtt_init(void)
 
        omap_mpu_wdt_mode(0);
 
-       omap_board_config = palmtt_config;
-       omap_board_config_size = ARRAY_SIZE(palmtt_config);
-
        platform_add_devices(palmtt_devices, ARRAY_SIZE(palmtt_devices));
 
        spi_register_board_info(palmtt_boardinfo,ARRAY_SIZE(palmtt_boardinfo));
        omap_serial_init();
        omap1_usb_init(&palmtt_usb_config);
        omap_register_i2c_bus(1, 100, NULL, 0);
+
+       omapfb_set_lcd_config(&palmtt_lcd_config);
 }
 
 MACHINE_START(OMAP_PALMTT, "OMAP1510 based Palm Tungsten|T")
index e881945ce8ec7a043db554c0470302f64a8378a0..9924c70af09f1c13fe3ab8a37e663af7b288264a 100644 (file)
@@ -27,6 +27,7 @@
 #include <linux/mtd/mtd.h>
 #include <linux/mtd/partitions.h>
 #include <linux/mtd/physmap.h>
+#include <linux/omapfb.h>
 
 #include <mach/hardware.h>
 #include <asm/mach-types.h>
@@ -239,10 +240,6 @@ static struct omap_lcd_config palmz71_lcd_config __initdata = {
        .ctrl_name = "internal",
 };
 
-static struct omap_board_config_kernel palmz71_config[] __initdata = {
-       {OMAP_TAG_LCD,  &palmz71_lcd_config},
-};
-
 static irqreturn_t
 palmz71_powercable(int irq, void *dev_id)
 {
@@ -313,9 +310,6 @@ omap_palmz71_init(void)
        palmz71_gpio_setup(1);
        omap_mpu_wdt_mode(0);
 
-       omap_board_config = palmz71_config;
-       omap_board_config_size = ARRAY_SIZE(palmz71_config);
-
        platform_add_devices(devices, ARRAY_SIZE(devices));
 
        spi_register_board_info(palmz71_boardinfo,
@@ -324,6 +318,8 @@ omap_palmz71_init(void)
        omap_serial_init();
        omap_register_i2c_bus(1, 100, NULL, 0);
        palmz71_gpio_setup(0);
+
+       omapfb_set_lcd_config(&palmz71_lcd_config);
 }
 
 MACHINE_START(OMAP_PALMZ71, "OMAP310 based Palm Zire71")
index c000bed7627633135bf0e2d5b39450e56b41ab51..44df931726533bc227af1d062b38631e3a63cebd 100644 (file)
@@ -21,6 +21,7 @@
 #include <linux/mtd/physmap.h>
 #include <linux/input.h>
 #include <linux/smc91x.h>
+#include <linux/omapfb.h>
 
 #include <mach/hardware.h>
 #include <asm/mach-types.h>
@@ -249,10 +250,6 @@ static struct omap_lcd_config perseus2_lcd_config __initdata = {
        .ctrl_name      = "internal",
 };
 
-static struct omap_board_config_kernel perseus2_config[] __initdata = {
-       { OMAP_TAG_LCD,         &perseus2_lcd_config },
-};
-
 static void __init perseus2_init_smc91x(void)
 {
        fpga_write(1, H2P2_DBG_FPGA_LAN_RESET);
@@ -320,10 +317,10 @@ static void __init omap_perseus2_init(void)
 
        platform_add_devices(devices, ARRAY_SIZE(devices));
 
-       omap_board_config = perseus2_config;
-       omap_board_config_size = ARRAY_SIZE(perseus2_config);
        omap_serial_init();
        omap_register_i2c_bus(1, 100, NULL, 0);
+
+       omapfb_set_lcd_config(&perseus2_lcd_config);
 }
 
 /* Only FPGA needs to be mapped here. All others are done with ioremap */
index 7bcd82ab0fd0a655d9b216b8770e1cb8b49bb836..0c880be112763406ab9fb13fc5192c1d0408ec70 100644 (file)
@@ -27,6 +27,7 @@
 #include <linux/i2c.h>
 #include <linux/errno.h>
 #include <linux/export.h>
+#include <linux/omapfb.h>
 
 #include <mach/hardware.h>
 #include <asm/mach-types.h>
@@ -371,11 +372,6 @@ static struct platform_device *sx1_devices[] __initdata = {
        &sx1_lcd_device,
        &sx1_irda_device,
 };
-/*-----------------------------------------*/
-
-static struct omap_board_config_kernel sx1_config[] __initdata = {
-       { OMAP_TAG_LCD, &sx1_lcd_config },
-};
 
 /*-----------------------------------------*/
 
@@ -391,8 +387,6 @@ static void __init omap_sx1_init(void)
 
        platform_add_devices(sx1_devices, ARRAY_SIZE(sx1_devices));
 
-       omap_board_config = sx1_config;
-       omap_board_config_size = ARRAY_SIZE(sx1_config);
        omap_serial_init();
        omap_register_i2c_bus(1, 100, NULL, 0);
        omap1_usb_init(&sx1_usb_config);
@@ -406,6 +400,8 @@ static void __init omap_sx1_init(void)
        gpio_direction_output(1, 1);    /*A_IRDA_OFF = 1 */
        gpio_direction_output(11, 0);   /*A_SWITCH = 0 */
        gpio_direction_output(15, 0);   /*A_USB_ON = 0 */
+
+       omapfb_set_lcd_config(&sx1_lcd_config);
 }
 
 MACHINE_START(SX1, "OMAP310 based Siemens SX1")
index 45f35c983f44a54b6f9f440eac51364703af2e3b..24e62693b809c1d6abf454a84bdff46da7ea4e71 100644 (file)
@@ -37,6 +37,7 @@
 
 #if defined(CONFIG_FB_OMAP) || defined(CONFIG_FB_OMAP_MODULE)
 
+static bool omapfb_lcd_configured;
 static struct omapfb_platform_data omapfb_config;
 
 static u64 omap_fb_dma_mask = ~(u32)0;
@@ -52,16 +53,21 @@ static struct platform_device omap_fb_device = {
        .num_resources = 0,
 };
 
-static int __init omap_init_fb(void)
+void __init omapfb_set_lcd_config(const struct omap_lcd_config *config)
 {
-       const struct omap_lcd_config *conf;
+       omapfb_config.lcd = *config;
+       omapfb_lcd_configured = true;
+}
 
-       conf = omap_get_config(OMAP_TAG_LCD, struct omap_lcd_config);
-       if (conf == NULL)
+static int __init omap_init_fb(void)
+{
+       /*
+        * If the board file has not set the lcd config with
+        * omapfb_set_lcd_config(), don't bother registering the omapfb device
+        */
+       if (!omapfb_lcd_configured)
                return 0;
 
-       omapfb_config.lcd = *conf;
-
        return platform_device_register(&omap_fb_device);
 }
 
@@ -90,4 +96,8 @@ static int __init omap_init_fb(void)
 
 arch_initcall(omap_init_fb);
 
+#else
+
+void __init omapfb_set_lcd_config(omap_lcd_config *config) { }
+
 #endif
index a575706a83c36dde919ad0fea67d96739283088c..4ff57e81051ddfd43ec696947a1bb9ecfa1eee89 100644 (file)
@@ -226,6 +226,8 @@ struct omapfb_platform_data {
        struct omap_lcd_config          lcd;
 };
 
+void __init omapfb_set_lcd_config(const struct omap_lcd_config *config);
+
 #endif
 
 #endif /* __OMAPFB_H */
This page took 0.035367 seconds and 5 git commands to generate.