diff options
author | Min-wuk Lee <mlee@nvidia.com> | 2011-08-02 11:39:53 +0900 |
---|---|---|
committer | Varun Colbert <vcolbert@nvidia.com> | 2011-08-05 17:59:33 -0700 |
commit | d94b060899f4c68d5a501fa0e03efb73b9677308 (patch) | |
tree | fd38d41f7630a5140159154c4f30821b84a3b9c6 | |
parent | 887ad41a33a527976e2db996b7d545040a4a8d6a (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
Change-Id: I952aa73c50d1df57b1cedf0a5f9ffee0044048ea
Reviewed-on: http://git-master/r/44304
Reviewed-by: Varun Colbert <vcolbert@nvidia.com>
Tested-by: Varun Colbert <vcolbert@nvidia.com>
-rw-r--r-- | arch/arm/mach-tegra/include/mach/dc.h | 2 | ||||
-rw-r--r-- | drivers/video/backlight/tegra_pwm_bl.c | 2 | ||||
-rw-r--r-- | drivers/video/tegra/dc/dc.c | 8 | ||||
-rw-r--r-- | include/linux/tegra_pwm_bl.h | 2 |
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 15b1b42cf3ea..21e08ea36ffe 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 77d50756e493..4331e8ef626a 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 5c391eb5e6a9..b370cde64422 100644 --- a/drivers/video/tegra/dc/dc.c +++ b/drivers/video/tegra/dc/dc.c @@ -1426,6 +1426,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 */ @@ -1446,7 +1451,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); @@ -1601,7 +1606,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; |