static void lms500_suspend (struct clk *clk) { u32 val; gpio_set_value(TT_VGPIO_LCD_ON, 0); gpio_direction_input(TT_VGPIO_LCD_ON); panel_sleep(150); /* T5-T4 should be greater than 6 frames */ /* disabling clk, CNTL_LCDPWR and CNTL_LCDEN before suspend * doesn't happen in bcm4760_clcd.c that's why it's added * here to be compliant with LCM power sequence specs */ val = readl(IO_ADDRESS(LCD_REG_BASE_ADDR + CLCD_CNTL)); if (val & CNTL_LCDPWR){ val &= ~CNTL_LCDPWR; writel(val, IO_ADDRESS(LCD_REG_BASE_ADDR + CLCD_CNTL)); panel_sleep(20); } if (val & CNTL_LCDEN) { val &= ~CNTL_LCDEN; writel(val, IO_ADDRESS(LCD_REG_BASE_ADDR + CLCD_CNTL)); } clk_disable( clk); }
static void lms500_resume (struct clk *clk) { gpio_direction_output(TT_VGPIO_LCD_ON, 0); panel_sleep(200); /* T3 should be greater than 11 frames */ /* enabling clk, CNTL_LCDPWR and CNTL_LCDEN after resume happens in bcm4760_clcd.c */ }
/* TODO: correct init procedure according to spec */ static int mendoza_gpio_setup(struct platform_device *pdev) { unsigned int cfg; int i; /* select TFT LCD type (RGB I/F) */ cfg = readl(S5P64XX_SPC_BASE); cfg &= ~S5P6450_SPCON_LCD_SEL_MASK; cfg |= S5P6450_SPCON_LCD_SEL_RGB; writel(cfg, S5P64XX_SPC_BASE); for (i = 0; i < 16; i++) s3c_gpio_cfgpin(S5P6450_GPI(i), S3C_GPIO_SFN(2)); for (i = 0; i < 12; i++) s3c_gpio_cfgpin(S5P6450_GPJ(i), S3C_GPIO_SFN(2)); if (gpio_request(TT_VGPIO_LCM_PWR_EN, "TT_VGPIO_LCM_PWR_EN") || gpio_request(TT_VGPIO_DISP_ON, "TT_VGPIO_DISP_ON")) { printk("LCD: Failed to request gpio\n"); } else { gpio_direction_output(TT_VGPIO_LCM_PWR_EN, 1); gpio_direction_output(TT_VGPIO_DISP_ON, 1); } panel_sleep(100); return 0; }
static int mendoza_fb_reboot(struct notifier_block *block, unsigned long code, void *null) { pr_emerg("LCD: Shutting off LCM\n"); gpio_set_value(TT_VGPIO_DISP_ON, 0); panel_sleep(100); return 0; }
static void panel_disable(struct omap_dss_device *disp) { struct panel_data *td = dev_get_drvdata(&disp->dev); if (disp->platform_disable) disp->platform_disable(disp); else panel_sleep(1); td->enabled = 0; }
static int panel_enable(struct omap_dss_device *disp) { struct panel_data *td = dev_get_drvdata(&disp->dev); int ret = 0; printk("panel enable\n"); if (disp->platform_enable) ret = disp->platform_enable(disp); if (ret < 0) return ret; panel_initial_settings(); panel_sleep(0); td->enabled = 1; return 0; }
static void lms500_disable (struct clk *clk) { gpio_set_value(TT_VGPIO_LCD_ON, 0); /* T5-T4 should be greater than 6 frames */ panel_sleep(150); }