Message ID | 20180326095213.18362-1-enric.balletbo@collabora.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Mon 2018-03-26 11:52:09, Enric Balletbo i Serra wrote: > Before this patch the enable signal was set before the PWM signal and > vice-versa on power off. This sequence is wrong, at least, it is on > the different panels datasheets that I checked, so I inverted the sequence > to follow the specs. > > For reference the following panels have the mentioned sequence: > - N133HSE-EA1 (Innolux) > - N116BGE (Innolux) > - N156BGE-L21 (Innolux) > - B101EAN0 (Auo) > - B101AW03 (Auo) > - LTN101NT05 (Samsung) > - CLAA101WA01A (Chunghwa) Ok, but this changes behaviour for other panels, too. Are you sure you are not breaking one of those? Pavel
Hi Pavel, 2018-03-26 12:42 GMT+02:00 Pavel Machek <pavel@ucw.cz>: > On Mon 2018-03-26 11:52:09, Enric Balletbo i Serra wrote: >> Before this patch the enable signal was set before the PWM signal and >> vice-versa on power off. This sequence is wrong, at least, it is on >> the different panels datasheets that I checked, so I inverted the sequence >> to follow the specs. >> >> For reference the following panels have the mentioned sequence: >> - N133HSE-EA1 (Innolux) >> - N116BGE (Innolux) >> - N156BGE-L21 (Innolux) >> - B101EAN0 (Auo) >> - B101AW03 (Auo) >> - LTN101NT05 (Samsung) >> - CLAA101WA01A (Chunghwa) > > Ok, but this changes behaviour for other panels, too. Are you sure you > are not breaking one of those? I can't say that I am 100% sure because I didn't find all the datasheets of all the panels supported in the kernel. But all the datasheets I checked specifies this sequence as valid. In general I think that doesn't really matter, but I know that at least the B116XTN02 panel requires enable first the PWM, wait 10ms and then enable BL_EN to avoid garbage. So the other way around is not valid for this panel. That's the reason for this patchset. If anyone knows a panel that says the contrary, please let me know and I'll try to rework the patches to satisfy both requirements. Regards, Enric > Pavel > > -- > (english) http://www.livejournal.com/~pavelmachek > (cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
On Mon, Mar 26, 2018 at 04:40:21PM +0200, Enric Balletbo Serra wrote: > Hi Pavel, > > 2018-03-26 12:42 GMT+02:00 Pavel Machek <pavel@ucw.cz>: > > On Mon 2018-03-26 11:52:09, Enric Balletbo i Serra wrote: > >> Before this patch the enable signal was set before the PWM signal and > >> vice-versa on power off. This sequence is wrong, at least, it is on > >> the different panels datasheets that I checked, so I inverted the sequence > >> to follow the specs. > >> > >> For reference the following panels have the mentioned sequence: > >> - N133HSE-EA1 (Innolux) > >> - N116BGE (Innolux) > >> - N156BGE-L21 (Innolux) > >> - B101EAN0 (Auo) > >> - B101AW03 (Auo) > >> - LTN101NT05 (Samsung) > >> - CLAA101WA01A (Chunghwa) > > > > Ok, but this changes behaviour for other panels, too. Are you sure you > > are not breaking one of those? > > I can't say that I am 100% sure because I didn't find all the > datasheets of all the panels supported in the kernel. But all the > datasheets I checked specifies this sequence as valid. In general I > think that doesn't really matter, but I know that at least the > B116XTN02 panel requires enable first the PWM, wait 10ms and then > enable BL_EN to avoid garbage. So the other way around is not valid > for this panel. That's the reason for this patchset. This is certainly a patch that could cause regressions... but it would be a very odd panel that *likes* to be exposed to all the weird edges that might occur whilst the PWM stablizes and a panel that *needs* to see weird edges to work seems even less likely (since it could act different with each SoC). So whilst the patch is not absolutely cast iron guaranteed free of risk, I think it is well enough argued for. Naturally I may change my position *very* quickly on receipt of the first bug report ;-) Daniel.
On Mon, 26 Mar 2018, Enric Balletbo i Serra wrote: > Before this patch the enable signal was set before the PWM signal and > vice-versa on power off. This sequence is wrong, at least, it is on > the different panels datasheets that I checked, so I inverted the sequence > to follow the specs. > > For reference the following panels have the mentioned sequence: > - N133HSE-EA1 (Innolux) > - N116BGE (Innolux) > - N156BGE-L21 (Innolux) > - B101EAN0 (Auo) > - B101AW03 (Auo) > - LTN101NT05 (Samsung) > - CLAA101WA01A (Chunghwa) > > Signed-off-by: Enric Balletbo i Serra <enric.balletbo@collabora.com> > Acked-by: Daniel Thompson <daniel.thompson@linaro.org> > Acked-by: Jingoo Han <jingoohan1@gmail.com> > Acked-by: Thierry Reding <thierry.reding@gmail.com> > --- > Changes since v5: > - Add Acked-by: Thierry Reding <thierry.reding@gmail.com> > Changes since v4: > - Rebase on top of mainline. > - Add the acks from Daniel Thompson and Jingoo Han. > Changes since v3: > - List the part numbers for the panel checked (Daniel Thompson) > Changes since v2: > - Add this as a separate patch (Thierry Reding) > Changes since v1: > - None > --- > drivers/video/backlight/pwm_bl.c | 9 +++++---- > 1 file changed, 5 insertions(+), 4 deletions(-) Enric, Please collect all of your Acks and submit a RESEND. I will then apply the set.
diff --git a/drivers/video/backlight/pwm_bl.c b/drivers/video/backlight/pwm_bl.c index 1c2289ddd555..698ec68bcdc9 100644 --- a/drivers/video/backlight/pwm_bl.c +++ b/drivers/video/backlight/pwm_bl.c @@ -54,10 +54,11 @@ static void pwm_backlight_power_on(struct pwm_bl_data *pb, int brightness) if (err < 0) dev_err(pb->dev, "failed to enable power supply\n"); + pwm_enable(pb->pwm); + if (pb->enable_gpio) gpiod_set_value_cansleep(pb->enable_gpio, 1); - pwm_enable(pb->pwm); pb->enabled = true; } @@ -66,12 +67,12 @@ static void pwm_backlight_power_off(struct pwm_bl_data *pb) if (!pb->enabled) return; - pwm_config(pb->pwm, 0, pb->period); - pwm_disable(pb->pwm); - if (pb->enable_gpio) gpiod_set_value_cansleep(pb->enable_gpio, 0); + pwm_config(pb->pwm, 0, pb->period); + pwm_disable(pb->pwm); + regulator_disable(pb->power_supply); pb->enabled = false; }