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 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_blank(struct msm_lcdc_panel_ops *ops) { pr_info("%s: +()\n", __func__); mutex_lock(&panel_lock); clk_enable(spi_clk); lcm_writeb(0x14, 0x0); mdelay(1); lcm_writeb(0x1d, 0xa1); clk_disable(spi_clk); msleep(200); gpio_set_value(MAHIMAHI_GPIO_LCD_RST_N, 0); mutex_unlock(&panel_lock); pr_info("%s: -()\n", __func__); return 0; }
static int samsung_oled_panel_init(struct msm_lcdc_panel_ops *ops) { pr_info("%s: +()\n", __func__); mutex_lock(&panel_lock); clk_enable(spi_clk); /* Set the gamma write target to 4, leave the current gamma set at 2 */ lcm_writeb(0x39, 0x24); 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) { pr_info("%s: +()\n", __func__); mutex_lock(&panel_lock); clk_enable(spi_clk); lcm_writeb(0x39, 0x24); clk_disable(spi_clk); mutex_unlock(&panel_lock); pr_info("%s: -()\n", __func__); return 0; }
static void gamma_table_bank_select(void) { lcm_writeb(0x39, table_sel_vals[table_sel_idx]); table_sel_idx ^= 1; }