Example #1
0
static void sony_tft_set_pwm_val(int val)
{
	uint8_t data[4] = {0,0,0,0};
	unsigned int min_pwm, def_pwm, max_pwm;

	pr_info("%s: %d\n", __func__, val);

	last_val = val;

	if (!tft_panel_on)
		return;

	if(!is_sony_spi()) {
		min_pwm = SONY_TFT_MIN_PANEL_UP_VAL;
		def_pwm = SONY_TFT_DEF_PANEL_UP_VAL;
		max_pwm = SONY_TFT_MAX_PANEL_UP_VAL;
	} else {
		min_pwm = SONY_TFT_MIN_PANEL_VAL;
		def_pwm = SONY_TFT_DEF_PANEL_VAL;
		max_pwm = SONY_TFT_MAX_PANEL_VAL;
	}

	if (val <= SONY_TFT_DEF_USER_VAL) {
		if (val <= SONY_TFT_MIN_USER_VAL)
			val = min_pwm;
		else
			val = (def_pwm - min_pwm) *
				(val - SONY_TFT_MIN_USER_VAL) /
				SONY_TFT_DEF_USER_DELTA +
				min_pwm;
	} else {
		val = (max_pwm - def_pwm) *
			(val - SONY_TFT_DEF_USER_VAL) /
			(SONY_TFT_MAX_USER_VAL - SONY_TFT_DEF_USER_VAL) +
			def_pwm;
	}

	if (!is_sony_spi()) {
		data[0] = 5;
		data[1] = val;
		data[3] = 1;
		microp_i2c_write(0x25, data, 4);
	} else {
		clk_enable(spi_clk);
		qspi_send_9bit(0x0, 0x51);
		qspi_send_9bit(0x1, val);
		qspi_send_9bit(0x0, 0x53);
		qspi_send_9bit(0x1, 0x24);
		clk_disable(spi_clk);
	}
}
Example #2
0
static int sony_tft_panel_blank(struct msm_lcdc_panel_ops *ops)
{
	uint8_t data[4] = {0, 0, 0, 0};
	pr_info("%s: +()\n", __func__);

	mutex_lock(&panel_lock);

	clk_enable(spi_clk);
	qspi_send_9bit(0x0, 0x28);
	qspi_send_9bit(0x0, 0x10);
	clk_disable(spi_clk);

	msleep(40);
	sony_tft_panel_power(0);
	tft_panel_on = 0;

	mutex_unlock(&panel_lock);

	if (!is_sony_spi()) {
		data[0] = 5;
		data[1] = 0;
		data[3] = 1;
		microp_i2c_write(0x25, data, 4);
	}

	pr_info("%s: -()\n", __func__);
	return 0;
}
static int sonywvga_panel_blank(struct msm_lcdc_panel_ops *panel_data)
{
	uint8_t data[4] = {0, 0, 0, 0};
	LCMDBG("%s\n", __func__);

	mutex_lock(&panel_lock);

	blank_msg.cmd = 0x28;
	qspi_send_9bit(&blank_msg);
	blank_msg.cmd = 0x10;
	qspi_send_9bit(&blank_msg);
	hr_msleep(40);
	g_unblank_stage = 0;
	mutex_unlock(&panel_lock);
	sonywvga_panel_power(0);

	if (!is_sony_spi()) {
		data[0] = 5;
		data[1] = 0;
		data[3] = 1;
		microp_i2c_write(0x25, data, 4);
	}

	return 0;
}
static int
sonywvga_panel_shrink_pwm(int brightness)
{
	int level;
	unsigned int min_pwm, def_pwm, max_pwm;

	if(!is_sony_spi()) {
		min_pwm = SONYWVGA_BR_MIN_PANEL_UP_PWM;
		def_pwm = SONYWVGA_BR_DEF_PANEL_UP_PWM;
		max_pwm = SONYWVGA_BR_MAX_PANEL_UP_PWM;
	} else {
		min_pwm = SONYWVGA_BR_MIN_PANEL_PWM;
		def_pwm = SONYWVGA_BR_DEF_PANEL_PWM;
		max_pwm = SONYWVGA_BR_MAX_PANEL_PWM;
	}

	if (brightness <= SONYWVGA_BR_DEF_USER_PWM) {
		if (brightness <= SONYWVGA_BR_MIN_USER_PWM)
			level = min_pwm;
		else
			level = (def_pwm - min_pwm) *
				(brightness - SONYWVGA_BR_MIN_USER_PWM) /
				(SONYWVGA_BR_DEF_USER_PWM - SONYWVGA_BR_MIN_USER_PWM) +
				min_pwm;
	} else
		level = (max_pwm - def_pwm) *
		(brightness - SONYWVGA_BR_DEF_USER_PWM) /
		(SONYWVGA_BR_MAX_USER_PWM - SONYWVGA_BR_DEF_USER_PWM) +
		def_pwm;

	return level;
}
Example #5
0
static int sony_tft_panel_unblank(struct msm_lcdc_panel_ops *ops)
{
	pr_info("%s: +()\n", __func__);

	mutex_lock(&panel_lock);

	if (tft_panel_on) {
		pr_info("%s: -() already unblanked\n", __func__);
		goto done;
	}

	sony_tft_panel_power(1);
	msleep(45);

	clk_enable(spi_clk);
	qspi_send_9bit(0x0, 0x11);
	msleep(5);
	qspi_send_9bit(0x0, 0x3a);
	if (is_sony_RGB666())
		qspi_send_9bit(0x1, 0x06);
	else
		qspi_send_9bit(0x1, 0x05);
	msleep(100);
	qspi_send_9bit(0x0, 0x29);
	msleep(20);

	//init gamma setting
	if(!is_sony_with_gamma())
		sony_tft_panel_without_gamma_init();

	/* unlock register page for pwm setting */
	if (is_sony_spi()) {
		qspi_send_9bit(0x0, 0xf0);
		qspi_send_9bit(0x1, 0x5a);
		qspi_send_9bit(0x1, 0x5a);
		qspi_send_9bit(0x0, 0xf1);
		qspi_send_9bit(0x1, 0x5a);
		qspi_send_9bit(0x1, 0x5a);
		qspi_send_9bit(0x0, 0xd0);
		qspi_send_9bit(0x1, 0x5a);
		qspi_send_9bit(0x1, 0x5a);

		qspi_send_9bit(0x0, 0xc2);
		qspi_send_9bit(0x1, 0x53);
		qspi_send_9bit(0x1, 0x12);
	}
	clk_disable(spi_clk);
	msleep(100);
	tft_panel_on = 1;
	sony_tft_set_pwm_val(last_val);

	pr_info("%s: -()\n", __func__);
done:
	mutex_unlock(&panel_lock);
	return 0;
}
/*
 * Caller must make sure the spi is ready
 * */
static void sonywvga_set_gamma_val(int val)
{
	uint8_t data[4] = {0, 0, 0, 0};

	if (!is_sony_spi()) {
		//turn on backlight
		data[0] = 5;
		data[1] = sonywvga_panel_shrink_pwm(val);
		data[3] = 1;
		microp_i2c_write(0x25, data, 4);
	} else {
		shrink_pwm = sonywvga_panel_shrink_pwm(val);
	        qspi_send_9bit(&gamma_update);
		lcm_write_tb(SONY_GAMMA_UPDATE_TABLE,  ARRAY_SIZE(SONY_GAMMA_UPDATE_TABLE));
	}
	last_val_pwm = val;
}
static int sonywvga_probe(struct platform_device *pdev)
{
	int rc = -EIO;
	struct panel_platform_data *pdata;
	pdata = pdev->dev.platform_data;

	sonywvga_power = pdata->power;
	gpio_switch = pdata->gpio_switch;
	sonywvga_lcdc_platform_data.fb_resource = pdata->fb_res;

	if(!is_sony_spi())
		last_val_pwm = SONYWVGA_DEFAULT_VAL;
	else
		last_val_pwm = SONYWVGA_BR_DEF_PANEL_PWM;

	rc = sonywvga_init_panel();
	if (rc)
		printk(KERN_ERR "%s fail %d\n", __func__, rc);

	display_sysfs_init();
	return rc;
}