static int nec_8048_panel_probe(struct omap_dss_device *dssdev)
{
	struct panel_nec_nl8048_data *pd = get_panel_data(dssdev);
	int r;

	if (!pd)
		return -EINVAL;

	dssdev->panel.timings = nec_8048_panel_timings;

	if (gpio_is_valid(pd->qvga_gpio)) {
		r = devm_gpio_request_one(dssdev->dev, pd->qvga_gpio,
				GPIOF_OUT_INIT_HIGH, "lcd QVGA");
		if (r)
			return r;
	}

	if (gpio_is_valid(pd->res_gpio)) {
		r = devm_gpio_request_one(dssdev->dev, pd->res_gpio,
				GPIOF_OUT_INIT_LOW, "lcd RES");
		if (r)
			return r;
	}

	return 0;
}
static int sharp_ls_power_on(struct omap_dss_device *dssdev)
{
	struct panel_sharp_ls037v7dw01_data *pd = get_panel_data(dssdev);
	int r = 0;

	if (dssdev->state == OMAP_DSS_DISPLAY_ACTIVE)
		return 0;

	omapdss_dpi_set_timings(dssdev, &dssdev->panel.timings);
	omapdss_dpi_set_data_lines(dssdev, dssdev->phy.dpi.data_lines);

	r = omapdss_dpi_display_enable(dssdev);
	if (r)
		goto err0;

	/* wait couple of vsyncs until enabling the LCD */
	msleep(50);

	if (gpio_is_valid(pd->resb_gpio))
		gpio_set_value_cansleep(pd->resb_gpio, 1);

	if (gpio_is_valid(pd->ini_gpio))
		gpio_set_value_cansleep(pd->ini_gpio, 1);

	return 0;
err0:
	return r;
}
static void nec_8048_panel_power_off(struct omap_dss_device *dssdev)
{
	struct panel_nec_nl8048_data *pd = get_panel_data(dssdev);

	if (dssdev->state != OMAP_DSS_DISPLAY_ACTIVE)
		return;

	if (gpio_is_valid(pd->res_gpio))
		gpio_set_value_cansleep(pd->res_gpio, 0);

	omapdss_dpi_display_disable(dssdev);
}
void __init omap4_superior_display_init(void)
{
	struct panel_s6e8aa0a01_data *panel;
	int oled_det_gpio;

	/* Removed ENABLE_ON_INIT flag for dss_sys_clk(functional clock)
	 * in arch/arm/mach-omap2/clock44xx_data.c, manually
	 * enabling the functional clock by getting dss_sys_fclk.
	 * NOTE: It will be disabled, during disable path.
	 */
#ifdef CONFIG_FB_OMAP_BOOTLOADER_INIT
	dss_ick = clk_get(NULL, "ick");
	if (IS_ERR(dss_ick)) {
		pr_err("Could not get dss interface clock\n");
		/* return -ENOENT; */
	}
	dss_sys_fclk = omap_clk_get_by_name("dss_sys_clk");
	if (IS_ERR(dss_sys_fclk)) {
		pr_err("Could not get dss system clock\n");
		/* return -ENOENT; */
	}
	clk_enable(dss_sys_fclk);
	dss_dss_fclk = omap_clk_get_by_name("dss_dss_clk");
	if (IS_ERR(dss_dss_fclk)) {
		pr_err("Could not get dss functional clock\n");
		/* return -ENOENT; */
	}
#endif

	panel = &superior_oled_data;

	superior_oled_device.data = panel;

	omap4_ctrl_pad_writel(0x1FF80000,
			OMAP4_CTRL_MODULE_PAD_CORE_CONTROL_DSIPHY);

	panel->reset_gpio =
	    omap_muxtbl_get_gpio_by_name("MLCD_RST");
	panel->oled_id_gpio =
		omap_muxtbl_get_gpio_by_name("OLED_ID");

	oled_det_gpio = omap_muxtbl_get_gpio_by_name("OLED_DET");
	gpio_request(oled_det_gpio, "OLED_DET");
	gpio_direction_input(oled_det_gpio);
	panel->oled_det_irq = gpio_to_irq(oled_det_gpio);

	get_panel_data(panel_data, panel);

	omap_display_init(&superior_dss_data);
}
static int sharp_ls_panel_probe(struct omap_dss_device *dssdev)
{
	struct panel_sharp_ls037v7dw01_data *pd = get_panel_data(dssdev);
	int r;

	if (!pd)
		return -EINVAL;

	dssdev->panel.timings = sharp_ls_timings;

	if (gpio_is_valid(pd->mo_gpio)) {
		r = devm_gpio_request_one(&dssdev->dev, pd->mo_gpio,
				GPIOF_OUT_INIT_LOW, "lcd MO");
		if (r)
			return r;
	}

	if (gpio_is_valid(pd->lr_gpio)) {
		r = devm_gpio_request_one(&dssdev->dev, pd->lr_gpio,
				GPIOF_OUT_INIT_HIGH, "lcd LR");
		if (r)
			return r;
	}

	if (gpio_is_valid(pd->ud_gpio)) {
		r = devm_gpio_request_one(&dssdev->dev, pd->ud_gpio,
				GPIOF_OUT_INIT_HIGH, "lcd UD");
		if (r)
			return r;
	}

	if (gpio_is_valid(pd->resb_gpio)) {
		r = devm_gpio_request_one(&dssdev->dev, pd->resb_gpio,
				GPIOF_OUT_INIT_LOW, "lcd RESB");
		if (r)
			return r;
	}

	if (gpio_is_valid(pd->ini_gpio)) {
		r = devm_gpio_request_one(&dssdev->dev, pd->ini_gpio,
				GPIOF_OUT_INIT_LOW, "lcd INI");
		if (r)
			return r;
	}

	return 0;
}
static void sharp_ls_power_off(struct omap_dss_device *dssdev)
{
	struct panel_sharp_ls037v7dw01_data *pd = get_panel_data(dssdev);

	if (dssdev->state != OMAP_DSS_DISPLAY_ACTIVE)
		return;

	if (gpio_is_valid(pd->ini_gpio))
		gpio_set_value_cansleep(pd->ini_gpio, 0);

	if (gpio_is_valid(pd->resb_gpio))
		gpio_set_value_cansleep(pd->resb_gpio, 0);

	/* wait at least 5 vsyncs after disabling the LCD */

	msleep(100);

	omapdss_dpi_display_disable(dssdev);
}
static int nec_8048_panel_power_on(struct omap_dss_device *dssdev)
{
	struct panel_nec_nl8048_data *pd = get_panel_data(dssdev);
	int r;

	if (dssdev->state == OMAP_DSS_DISPLAY_ACTIVE)
		return 0;

	omapdss_dpi_set_timings(dssdev, &dssdev->panel.timings);
	omapdss_dpi_set_data_lines(dssdev, dssdev->phy.dpi.data_lines);

	r = omapdss_dpi_display_enable(dssdev);
	if (r)
		goto err0;

	if (gpio_is_valid(pd->res_gpio))
		gpio_set_value_cansleep(pd->res_gpio, 1);

	return 0;

err0:
	return r;
}