static void samsung_oled_set_gamma_val(int val) { int i; int level; int frac; val = clamp(val, SAMSUNG_OLED_MIN_VAL, SAMSUNG_OLED_MAX_VAL); val = (val / 2) * 2; level = (val - SAMSUNG_OLED_MIN_VAL) / SAMSUNG_OLED_LEVEL_STEP; frac = (val - SAMSUNG_OLED_MIN_VAL) % SAMSUNG_OLED_LEVEL_STEP; clk_enable(spi_clk); for (i = 0; i < OLED_GAMMA_TABLE_SIZE; ++i) { unsigned int v1; unsigned int v2 = 0; u8 v; if (frac == 0) { v = samsung_oled_gamma_table[level][i].val; } else { v1 = samsung_oled_gamma_table[level][i].val; v2 = samsung_oled_gamma_table[level+1][i].val; v = (v1 * (SAMSUNG_OLED_LEVEL_STEP - frac) + v2 * frac) / SAMSUNG_OLED_LEVEL_STEP; } lcm_writeb(samsung_oled_gamma_table[level][i].reg, v); } gamma_table_bank_select(); clk_disable(spi_clk); last_val = val; }
static int samsung_oled_panel_unblank(struct msm_lcdc_panel_ops *ops) { int i; pr_info("%s: +()\n", __func__); mutex_lock(&panel_lock); samsung_oled_panel_gpio_switch(1); gpio_set_value(BRAVO_GPIO_LCD_RST_N, 1); udelay(50); gpio_set_value(BRAVO_GPIO_LCD_RST_N, 0); udelay(20); gpio_set_value(BRAVO_GPIO_LCD_RST_N, 1); msleep(20); clk_enable(spi_clk); for (i = 0; i < init_table_sz; i++) lcm_writeb(init_tablep[i].reg, init_tablep[i].val); lcm_writew(0xef, 0xd0e8); lcm_writeb(0x1d, 0xa0); table_sel_idx = 0; gamma_table_bank_select(); samsung_oled_set_gamma_val(last_val); msleep(250); lcm_writeb(0x14, 0x03); clk_disable(spi_clk); mutex_unlock(&panel_lock); pr_info("%s: -()\n", __func__); return 0; }
static int samsung_oled_panel_init(struct msm_lcdc_panel_ops *ops) { LCMDBG("%s()\n", __func__); amoled_panel_power(1); wake_lock(&panel_idle_lock); mutex_lock(&panel_lock); if (machine_is_passionc()) { /* FIXME: display team will clean up the below codes */ if (system_rev == 0xC0 || system_rev == 0) /* for Passion#C EVT1 */ lcm_write_tb(lcm_init_seq, ARRAY_SIZE(lcm_init_seq)); else lcm_write_tb(lcm_init_seq, ARRAY_SIZE(lcm_init_666seq)); } else { if (system_rev < 1) lcm_write_tb(lcm_init_seq, ARRAY_SIZE(lcm_init_seq)); else lcm_write_tb(lcm_init_seq, ARRAY_SIZE(lcm_init_666seq)); } gamma_table_bank_select(); mutex_unlock(&panel_lock); wake_unlock(&panel_idle_lock); return 0; }
static int samsung_oled_panel_init(void) { LCMDBG("%s()\n", __func__); amoled_panel_power(1); wake_lock(&panel_idle_lock); mutex_lock(&panel_lock); if (system_rev < 1) lcm_write_tb(lcm_init_seq, ARRAY_SIZE(lcm_init_seq)); else lcm_write_tb(lcm_init_666seq, ARRAY_SIZE(lcm_init_666seq)); gamma_table_bank_select(); mutex_unlock(&panel_lock); wake_unlock(&panel_idle_lock); return 0; }
static int amoled_panel_unblank(struct msm_lcdc_panel_ops *panel_data) { LCMDBG("%s\n", __func__); wake_lock(&panel_idle_lock); table_sel_idx = 0; mutex_lock(&panel_lock); gamma_table_bank_select(); amoled_set_gamma_val(last_val); qspi_send(0, 0xef); qspi_send(1, 0xd0); qspi_send(1, 0xe8); lcm_write_cmd(0x14, 0x03); mutex_unlock(&panel_lock); wake_unlock(&panel_idle_lock); LCMDBG("%s: last_val = %d\n", __func__,last_val); led_trigger_event(amoled_lcd_backlight, LED_FULL); return 0; }
/* * Caller must make sure the spi is ready * */ static void amoled_set_gamma_val(int val) { int i; int level; int frac; val = clamp(val, SAMSUNG_OLED_MIN_VAL, SAMSUNG_OLED_MAX_VAL); val = (val / 2) * 2; if (val < 31) { val = 20; } level = (val - SAMSUNG_OLED_MIN_VAL) / SAMSUNG_OLED_LEVEL_STEP; /* LCMDBG("set brightness = (%d, %d)\n", level, val); */ frac = (val - SAMSUNG_OLED_MIN_VAL) % SAMSUNG_OLED_LEVEL_STEP; for (i = 0; i < OLED_GAMMA_TABLE_SIZE; ++i) { unsigned int v1; unsigned int v2 = 0; u8 v; if (frac == 0) { v = samsung_oled_gamma_table[level][i].val; } else { v1 = samsung_oled_gamma_table[level][i].val; v2 = samsung_oled_gamma_table[level+1][i].val; v = (v1 * (SAMSUNG_OLED_LEVEL_STEP - frac) + v2 * frac) / SAMSUNG_OLED_LEVEL_STEP; } lcm_write_cmd(samsung_oled_gamma_table[level][i].reg, v); } gamma_table_bank_select(); last_val = val; }
static int amoled_panel_unblank(struct platform_device *pdev) { LCMDBG("%s\n", __func__); if (samsung_oled_panel_init()) printk(KERN_ERR "samsung_oled_panel_init failed\n"); wake_lock(&panel_idle_lock); mutex_lock(&panel_lock); table_sel_idx = 0; gamma_table_bank_select(); amoled_set_gamma_val(last_val); qspi_send(0, 0xef); qspi_send(1, 0xd0); qspi_send(1, 0xe8); lcm_write_cmd(0x14, 0x03); mutex_unlock(&panel_lock); wake_unlock(&panel_idle_lock); LCMDBG("%s: last_val = %d\n", __func__,last_val); led_trigger_event(amoled_lcd_backlight, LED_FULL); return 0; }