[U-Boot] [PATCH] sunxi: display: Use PWM to drive backlight where applicable
Peter Korsgaard
peter at korsgaard.com
Mon Aug 22 16:01:56 CEST 2016
>>>>> "Hans" == Hans de Goede <hdegoede at redhat.com> writes:
> When the backlight's pwm input is connected to a pwm output of the SoC,
> actually use pwm to drive the backlight.
> The mean reason for doing this is to fix the backlight turning off
> for aprox. 1 second while the kernel is booting. This is caused by
> the kernel actually using pwm to drive the backlight, so that it
> can dim the backlight. First the pwm driver loads and switches the
> pinmux for the pin driving the backlight's pwm input to the pwm
> controller. Then about 1s later the actual backlight driver loads
> and tells the pwm driver to actually update the pwm settings, which
> have a power-on-reset value of "off".
> An additional advantage is that this allows us to initatiate the
> backlight at 80%, which is the kernel default, avoiding a brightness
> change while the kernel loads.
Nice!
> Signed-off-by: Hans de Goede <hdegoede at redhat.com>
> ---
> arch/arm/include/asm/arch-sunxi/cpu_sun4i.h | 1 +
> arch/arm/include/asm/arch-sunxi/gpio.h | 1 +
> arch/arm/include/asm/arch-sunxi/pwm.h | 27 +++++++++++++++++++++++++++
> drivers/video/sunxi_display.c | 12 +++++++++++-
> 4 files changed, 40 insertions(+), 1 deletion(-)
> create mode 100644 arch/arm/include/asm/arch-sunxi/pwm.h
> diff --git a/arch/arm/include/asm/arch-sunxi/cpu_sun4i.h b/arch/arm/include/asm/arch-sunxi/cpu_sun4i.h
> index cd009d7..a5f396e 100644
> --- a/arch/arm/include/asm/arch-sunxi/cpu_sun4i.h
> +++ b/arch/arm/include/asm/arch-sunxi/cpu_sun4i.h
> @@ -76,6 +76,7 @@
> #define SUNXI_INTC_BASE 0x01c20400
> #define SUNXI_PIO_BASE 0x01c20800
> #define SUNXI_TIMER_BASE 0x01c20c00
> +#define SUNXI_PWM_BASE 0x01c20e00
> #define SUNXI_SPDIF_BASE 0x01c21000
> #define SUNXI_AC97_BASE 0x01c21400
> #define SUNXI_IR0_BASE 0x01c21800
> diff --git a/arch/arm/include/asm/arch-sunxi/gpio.h b/arch/arm/include/asm/arch-sunxi/gpio.h
> index bff7d14..ef426ae 100644
> --- a/arch/arm/include/asm/arch-sunxi/gpio.h
> +++ b/arch/arm/include/asm/arch-sunxi/gpio.h
> @@ -150,6 +150,7 @@ enum sunxi_gpio_number {
> #define SUN6I_GPA_SDC3 4
> #define SUN8I_H3_GPA_UART0 2
> +#define SUN4I_GPB_PWM 2
Using this define for the ! SUN4I / SUN5I case is a bit icky (even if
they today happen to be the same numerical value). Perhaps introduce a
SUNXI_PWM_MODE indirection like you do for SUNXI_PWM_PIN0 would be
nicer.
> #define SUN4I_GPB_TWI0 2
> #define SUN4I_GPB_TWI1 2
> #define SUN5I_GPB_TWI1 2
> diff --git a/arch/arm/include/asm/arch-sunxi/pwm.h b/arch/arm/include/asm/arch-sunxi/pwm.h
> new file mode 100644
> index 0000000..ec997a6
> --- /dev/null
> +++ b/arch/arm/include/asm/arch-sunxi/pwm.h
> @@ -0,0 +1,27 @@
> +/*
> + * (C) Copyright 2016 Hans de Goede <hdegoede at redhat.com>
> + *
> + * SPDX-License-Identifier: GPL-2.0+
> + */
> +
> +#ifndef _SUNXI_PWM_H
> +#define _SUNXI_PWM_H
> +
> +#define SUNXI_PWM_CTRL_REG (SUNXI_PWM_BASE + 0)
> +#define SUNXI_PWM_CH0_PERIOD (SUNXI_PWM_BASE + 4)
> +
> +#define SUNXI_PWM_CTRL_PRESCALE0(x) ((x) & 0xf)
> +#define SUNXI_PWM_CTRL_ENABLE0 (0x5 << 4)
> +#define SUNXI_PWM_CTRL_POLARITY0(x) ((x) << 5)
> +
> +#define SUNXI_PWM_PERIOD_80PCT 0x04af03c0
> +
> +#if defined CONFIG_MACH_SUN4I || defined CONFIG_MACH_SUN5I
> +#define SUNXI_PWM_PIN0 SUNXI_GPB(2)
> +#endif
> +
This should afaik work for sun6i as well if you add:
#if defined CONFIG_MACH_SUN6I
#define SUNXI_PWM_PIN0 SUNXI_GPH(13)
#endif
E.G. the Yones Toptech BS1078v2 uses this.
I'll try to find some time to test it.
--
Bye, Peter Korsgaard
More information about the U-Boot
mailing list