Esempio n. 1
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;
}
Esempio n. 2
0
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;
}