gpio_set_value(AMS_DELTA_GPIO_PIN_LCD_NDISP, 0);
 }
 
-static unsigned long ams_delta_panel_get_caps(struct lcd_panel *panel)
-{
-       return 0;
-}
-
 static struct lcd_panel ams_delta_panel = {
        .name           = "ams-delta",
        .config         = 0,
        .cleanup        = ams_delta_panel_cleanup,
        .enable         = ams_delta_panel_enable,
        .disable        = ams_delta_panel_disable,
-       .get_caps       = ams_delta_panel_get_caps,
 };
 
 
 
 
 #define MODULE_NAME    "omapfb-lcd_h3"
 
-static int h3_panel_init(struct lcd_panel *panel, struct omapfb_device *fbdev)
-{
-       return 0;
-}
-
-static void h3_panel_cleanup(struct lcd_panel *panel)
-{
-}
-
 static int h3_panel_enable(struct lcd_panel *panel)
 {
        int r = 0;
                pr_err(MODULE_NAME ": Unable to turn off LCD panel\n");
 }
 
-static unsigned long h3_panel_get_caps(struct lcd_panel *panel)
-{
-       return 0;
-}
-
 static struct lcd_panel h3_panel = {
        .name           = "h3",
        .config         = OMAP_LCDC_PANEL_TFT,
        .vbp            = 0,
        .pcd            = 0,
 
-       .init           = h3_panel_init,
-       .cleanup        = h3_panel_cleanup,
        .enable         = h3_panel_enable,
        .disable        = h3_panel_disable,
-       .get_caps       = h3_panel_get_caps,
 };
 
 static int h3_panel_probe(struct platform_device *pdev)
 
 
 #include "omapfb.h"
 
-static int htcherald_panel_init(struct lcd_panel *panel,
-                                       struct omapfb_device *fbdev)
-{
-       return 0;
-}
-
-static void htcherald_panel_cleanup(struct lcd_panel *panel)
-{
-}
-
-static int htcherald_panel_enable(struct lcd_panel *panel)
-{
-       return 0;
-}
-
-static void htcherald_panel_disable(struct lcd_panel *panel)
-{
-}
-
-static unsigned long htcherald_panel_get_caps(struct lcd_panel *panel)
-{
-       return 0;
-}
-
 /* Found on WIZ200 (miknix) and some HERA110 models (darkstar62) */
 static struct lcd_panel htcherald_panel_1 = {
        .name           = "lcd_herald",
        .vsw            = 3,
        .vfp            = 2,
        .vbp            = 2,
-
-       .init           = htcherald_panel_init,
-       .cleanup        = htcherald_panel_cleanup,
-       .enable         = htcherald_panel_enable,
-       .disable        = htcherald_panel_disable,
-       .get_caps       = htcherald_panel_get_caps,
 };
 
 static int htcherald_panel_probe(struct platform_device *pdev)
 
 
 #include "omapfb.h"
 
-static int innovator1510_panel_init(struct lcd_panel *panel,
-                                   struct omapfb_device *fbdev)
-{
-       return 0;
-}
-
-static void innovator1510_panel_cleanup(struct lcd_panel *panel)
-{
-}
-
 static int innovator1510_panel_enable(struct lcd_panel *panel)
 {
        __raw_writeb(0x7, OMAP1510_FPGA_LCD_PANEL_CONTROL);
        __raw_writeb(0x0, OMAP1510_FPGA_LCD_PANEL_CONTROL);
 }
 
-static unsigned long innovator1510_panel_get_caps(struct lcd_panel *panel)
-{
-       return 0;
-}
-
 static struct lcd_panel innovator1510_panel = {
        .name           = "inn1510",
        .config         = OMAP_LCDC_PANEL_TFT,
        .vbp            = 0,
        .pcd            = 12,
 
-       .init           = innovator1510_panel_init,
-       .cleanup        = innovator1510_panel_cleanup,
        .enable         = innovator1510_panel_enable,
        .disable        = innovator1510_panel_disable,
-       .get_caps       = innovator1510_panel_get_caps,
 };
 
 static int innovator1510_panel_probe(struct platform_device *pdev)
 
        gpio_set_value(15, 0);
 }
 
-static unsigned long innovator1610_panel_get_caps(struct lcd_panel *panel)
-{
-       return 0;
-}
-
 static struct lcd_panel innovator1610_panel = {
        .name           = "inn1610",
        .config         = OMAP_LCDC_PANEL_TFT,
        .cleanup        = innovator1610_panel_cleanup,
        .enable         = innovator1610_panel_enable,
        .disable        = innovator1610_panel_disable,
-       .get_caps       = innovator1610_panel_get_caps,
 };
 
 static int innovator1610_panel_probe(struct platform_device *pdev)
 
 
 #include "omapfb.h"
 
-static int osk_panel_init(struct lcd_panel *panel, struct omapfb_device *fbdev)
-{
-       /* gpio2 was allocated in board init */
-       return 0;
-}
-
-static void osk_panel_cleanup(struct lcd_panel *panel)
-{
-}
-
 static int osk_panel_enable(struct lcd_panel *panel)
 {
        /* configure PWL pin */
        gpio_set_value(2, 0);
 }
 
-static unsigned long osk_panel_get_caps(struct lcd_panel *panel)
-{
-       return 0;
-}
-
 static struct lcd_panel osk_panel = {
        .name           = "osk",
        .config         = OMAP_LCDC_PANEL_TFT,
        .vbp            = 0,
        .pcd            = 12,
 
-       .init           = osk_panel_init,
-       .cleanup        = osk_panel_cleanup,
        .enable         = osk_panel_enable,
        .disable        = osk_panel_disable,
-       .get_caps       = osk_panel_get_caps,
 };
 
 static int osk_panel_probe(struct platform_device *pdev)
 
 
 #include "omapfb.h"
 
-static int palmte_panel_init(struct lcd_panel *panel,
-                               struct omapfb_device *fbdev)
-{
-       return 0;
-}
-
-static void palmte_panel_cleanup(struct lcd_panel *panel)
-{
-}
-
-static int palmte_panel_enable(struct lcd_panel *panel)
-{
-       return 0;
-}
-
-static void palmte_panel_disable(struct lcd_panel *panel)
-{
-}
-
-static unsigned long palmte_panel_get_caps(struct lcd_panel *panel)
-{
-       return 0;
-}
-
 static struct lcd_panel palmte_panel = {
        .name           = "palmte",
        .config         = OMAP_LCDC_PANEL_TFT | OMAP_LCDC_INV_VSYNC |
        .vfp            = 8,
        .vbp            = 7,
        .pcd            = 0,
-
-       .init           = palmte_panel_init,
-       .cleanup        = palmte_panel_cleanup,
-       .enable         = palmte_panel_enable,
-       .disable        = palmte_panel_disable,
-       .get_caps       = palmte_panel_get_caps,
 };
 
 static int palmte_panel_probe(struct platform_device *pdev)
 
 
 #include "omapfb.h"
 
-static int palmtt_panel_init(struct lcd_panel *panel,
-       struct omapfb_device *fbdev)
-{
-       return 0;
-}
-
-static void palmtt_panel_cleanup(struct lcd_panel *panel)
-{
-}
-
-static int palmtt_panel_enable(struct lcd_panel *panel)
-{
-       return 0;
-}
-
-static void palmtt_panel_disable(struct lcd_panel *panel)
-{
-}
-
 static unsigned long palmtt_panel_get_caps(struct lcd_panel *panel)
 {
        return OMAPFB_CAPS_SET_BACKLIGHT;
        .vbp            = 7,
        .pcd            = 0,
 
-       .init           = palmtt_panel_init,
-       .cleanup        = palmtt_panel_cleanup,
-       .enable         = palmtt_panel_enable,
-       .disable        = palmtt_panel_disable,
        .get_caps       = palmtt_panel_get_caps,
 };
 
 
 
 #include "omapfb.h"
 
-static int palmz71_panel_init(struct lcd_panel *panel,
-                             struct omapfb_device *fbdev)
-{
-       return 0;
-}
-
-static void palmz71_panel_cleanup(struct lcd_panel *panel)
-{
-
-}
-
-static int palmz71_panel_enable(struct lcd_panel *panel)
-{
-       return 0;
-}
-
-static void palmz71_panel_disable(struct lcd_panel *panel)
-{
-}
-
 static unsigned long palmz71_panel_get_caps(struct lcd_panel *panel)
 {
        return OMAPFB_CAPS_SET_BACKLIGHT;
        .vbp            = 7,
        .pcd            = 0,
 
-       .init           = palmz71_panel_init,
-       .cleanup        = palmz71_panel_cleanup,
-       .enable         = palmz71_panel_enable,
-       .disable        = palmz71_panel_disable,
        .get_caps       = palmz71_panel_get_caps,
 };
 
 
                if (fbdev->state == OMAPFB_SUSPENDED) {
                        if (fbdev->ctrl->resume)
                                fbdev->ctrl->resume();
-                       fbdev->panel->enable(fbdev->panel);
+                       if (fbdev->panel->enable)
+                               fbdev->panel->enable(fbdev->panel);
                        fbdev->state = OMAPFB_ACTIVE;
                        if (fbdev->ctrl->get_update_mode() ==
                                        OMAPFB_MANUAL_UPDATE)
                break;
        case FB_BLANK_POWERDOWN:
                if (fbdev->state == OMAPFB_ACTIVE) {
-                       fbdev->panel->disable(fbdev->panel);
+                       if (fbdev->panel->disable)
+                               fbdev->panel->disable(fbdev->panel);
                        if (fbdev->ctrl->suspend)
                                fbdev->ctrl->suspend();
                        fbdev->state = OMAPFB_SUSPENDED;
 {
        memset(caps, 0, sizeof(*caps));
        fbdev->ctrl->get_caps(plane, caps);
-       caps->ctrl |= fbdev->panel->get_caps(fbdev->panel);
+       if (fbdev->panel->get_caps)
+               caps->ctrl |= fbdev->panel->get_caps(fbdev->panel);
 }
 
 /* For lcd testing */
        case 7:
                omapfb_unregister_sysfs(fbdev);
        case 6:
-               fbdev->panel->disable(fbdev->panel);
+               if (fbdev->panel->disable)
+                       fbdev->panel->disable(fbdev->panel);
        case 5:
                omapfb_set_update_mode(fbdev, OMAPFB_UPDATE_DISABLED);
        case 4:
        case 3:
                ctrl_cleanup(fbdev);
        case 2:
-               fbdev->panel->cleanup(fbdev->panel);
+               if (fbdev->panel->cleanup)
+                       fbdev->panel->cleanup(fbdev->panel);
        case 1:
                dev_set_drvdata(fbdev->dev, NULL);
                kfree(fbdev);
                goto cleanup;
        }
 
-       r = fbdev->panel->init(fbdev->panel, fbdev);
-       if (r)
-               goto cleanup;
+       if (fbdev->panel->init) {
+               r = fbdev->panel->init(fbdev->panel, fbdev);
+               if (r)
+                       goto cleanup;
+       }
 
        pr_info("omapfb: configured for panel %s\n", fbdev->panel->name);
 
                                   OMAPFB_MANUAL_UPDATE : OMAPFB_AUTO_UPDATE);
        init_state++;
 
-       r = fbdev->panel->enable(fbdev->panel);
-       if (r)
-               goto cleanup;
+       if (fbdev->panel->enable) {
+               r = fbdev->panel->enable(fbdev->panel);
+               if (r)
+                       goto cleanup;
+       }
        init_state++;
 
        r = omapfb_register_sysfs(fbdev);