summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMin-wuk Lee <mlee@nvidia.com>2011-08-02 11:39:53 +0900
committerDan Willemsen <dwillemsen@nvidia.com>2011-11-30 21:48:04 -0800
commitbd3ac96ba64f0899d18d898ad2439a6668c697e0 (patch)
treedd8d1df448b4e3e8b0088a9c759e9b1b685ebf21
parent3f262a2e2eb5b0ebf6fccba596cceab207d77565 (diff)
video: tegra: dc: Set PWM pin to SFIO in default
Set PWM pin to SFIO before it is configured to DC output pin: Having too early SFIO setting for this pin makes black screen in display transition from bootloader to kenel and android since backlight can be turned off. Bug 858120 Original-Change-Id: I952aa73c50d1df57b1cedf0a5f9ffee0044048ea Reviewed-on: http://git-master/r/44304 Reviewed-by: Varun Colbert <vcolbert@nvidia.com> Tested-by: Varun Colbert <vcolbert@nvidia.com> Rebase-Id: R89903c1f14f1b867638834bd1581d8637b079c94
-rw-r--r--arch/arm/mach-tegra/include/mach/dc.h2
-rw-r--r--drivers/video/backlight/tegra_pwm_bl.c2
-rw-r--r--drivers/video/tegra/dc/dc.c8
-rw-r--r--include/linux/tegra_pwm_bl.h2
4 files changed, 12 insertions, 2 deletions
diff --git a/arch/arm/mach-tegra/include/mach/dc.h b/arch/arm/mach-tegra/include/mach/dc.h
index 400abce5bf02..1fd08f9e5c9f 100644
--- a/arch/arm/mach-tegra/include/mach/dc.h
+++ b/arch/arm/mach-tegra/include/mach/dc.h
@@ -469,6 +469,8 @@ unsigned tegra_dc_get_out_max_pixclock(const struct tegra_dc *dc);
struct tegra_dc_pwm_params {
int which_pwm;
+ void (*switch_to_sfio)(int);
+ int gpio_conf_to_sfio;
unsigned int period;
unsigned int clk_div;
unsigned int clk_select;
diff --git a/drivers/video/backlight/tegra_pwm_bl.c b/drivers/video/backlight/tegra_pwm_bl.c
index 31b021cbd40c..7e7bfe76ee25 100644
--- a/drivers/video/backlight/tegra_pwm_bl.c
+++ b/drivers/video/backlight/tegra_pwm_bl.c
@@ -96,6 +96,8 @@ static int tegra_pwm_backlight_probe(struct platform_device *pdev)
tbl->dev = &pdev->dev;
tbl->which_dc = data->which_dc;
tbl->params.which_pwm = data->which_pwm;
+ tbl->params.gpio_conf_to_sfio = data->gpio_conf_to_sfio;
+ tbl->params.switch_to_sfio = data->switch_to_sfio;
tbl->params.period = data->period;
tbl->params.clk_div = data->clk_div;
tbl->params.clk_select = data->clk_select;
diff --git a/drivers/video/tegra/dc/dc.c b/drivers/video/tegra/dc/dc.c
index 9910ef238373..5a7d1c9cd217 100644
--- a/drivers/video/tegra/dc/dc.c
+++ b/drivers/video/tegra/dc/dc.c
@@ -1423,6 +1423,11 @@ tegra_dc_config_pwm(struct tegra_dc *dc, struct tegra_dc_pwm_params *cfg)
cmd_state = tegra_dc_readl(dc, DC_CMD_STATE_ACCESS);
tegra_dc_writel(dc, (cmd_state | (1 << 2)), DC_CMD_STATE_ACCESS);
+ if (cfg->switch_to_sfio && cfg->gpio_conf_to_sfio)
+ cfg->switch_to_sfio(cfg->gpio_conf_to_sfio);
+ else
+ dev_err(&dc->ndev->dev, "Error: Need gpio_conf_to_sfio\n");
+
switch (cfg->which_pwm) {
case TEGRA_PWM_PM0:
/* Select the LM0 on PM0 */
@@ -1443,7 +1448,7 @@ tegra_dc_config_pwm(struct tegra_dc *dc, struct tegra_dc_pwm_params *cfg)
tegra_dc_writel(dc, cfg->duty_cycle, DC_COM_PM1_DUTY_CYCLE);
break;
default:
- dev_err(&dc->ndev->dev, "Error\n");
+ dev_err(&dc->ndev->dev, "Error: Need which_pwm\n");
break;
}
tegra_dc_writel(dc, cmd_state, DC_CMD_STATE_ACCESS);
@@ -1598,7 +1603,6 @@ void tegra_dc_disable_crc(struct tegra_dc *dc)
u32 tegra_dc_read_checksum_latched(struct tegra_dc *dc)
{
int crc = 0;
- u32 val = 0;
if(!dc) {
dev_err(&dc->ndev->dev, "Failed to get dc.\n");
diff --git a/include/linux/tegra_pwm_bl.h b/include/linux/tegra_pwm_bl.h
index 4eac77b04203..ee924842bf84 100644
--- a/include/linux/tegra_pwm_bl.h
+++ b/include/linux/tegra_pwm_bl.h
@@ -15,6 +15,8 @@
struct platform_tegra_pwm_backlight_data {
int which_dc;
int which_pwm;
+ void (*switch_to_sfio)(int);
+ int gpio_conf_to_sfio;
unsigned int dft_brightness;
unsigned int max_brightness;
unsigned int period;