Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1169089AbcKANKi (ORCPT ); Tue, 1 Nov 2016 09:10:38 -0400 Received: from metis.ext.4.pengutronix.de ([92.198.50.35]:45357 "EHLO metis.ext.4.pengutronix.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1169066AbcKANKi (ORCPT ); Tue, 1 Nov 2016 09:10:38 -0400 Message-ID: <1478005831.2475.84.camel@pengutronix.de> Subject: Re: [PATCH v3 1/2] backlight: pwm_bl: Move the checks for initial power state to a separate function From: Philipp Zabel To: Peter Ujfalusi Cc: thierry.reding@gmail.com, lee.jones@linaro.org, tomi.valkeinen@ti.com, linux-pwm@vger.kernel.org, linux-fbdev@vger.kernel.org, linux-kernel@vger.kernel.org Date: Tue, 01 Nov 2016 14:10:31 +0100 In-Reply-To: <20161101125933.11168-2-peter.ujfalusi@ti.com> References: <20161101125933.11168-1-peter.ujfalusi@ti.com> <20161101125933.11168-2-peter.ujfalusi@ti.com> Content-Type: text/plain; charset="UTF-8" X-Mailer: Evolution 3.12.9-1+b1 Mime-Version: 1.0 Content-Transfer-Encoding: 7bit X-SA-Exim-Connect-IP: 2001:67c:670:100:96de:80ff:fec2:9969 X-SA-Exim-Mail-From: p.zabel@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 4090 Lines: 111 Am Dienstag, den 01.11.2016, 14:59 +0200 schrieb Peter Ujfalusi: > Move the checks to select the initial state for the backlight to a new > function and document the checks we are doing. > > With the separate function it is going to be easier to fix or improve the > initial power state configuration later and it is easier to read the code. > > Signed-off-by: Peter Ujfalusi Reviewed-by: Philipp Zabel regards Philipp > --- > drivers/video/backlight/pwm_bl.c | 53 ++++++++++++++++++++++++++-------------- > 1 file changed, 34 insertions(+), 19 deletions(-) > > diff --git a/drivers/video/backlight/pwm_bl.c b/drivers/video/backlight/pwm_bl.c > index 12614006211e..4b07da278b4f 100644 > --- a/drivers/video/backlight/pwm_bl.c > +++ b/drivers/video/backlight/pwm_bl.c > @@ -192,6 +192,32 @@ static int pwm_backlight_parse_dt(struct device *dev, > } > #endif > > +static int pwm_backlight_initial_power_state(const struct pwm_bl_data *pb) > +{ > + struct device_node *node = pb->dev->of_node; > + > + /* Not booted with device tree or no phandle link to the node */ > + if (!node || !node->phandle) > + return FB_BLANK_UNBLANK; > + > + /* > + * If the driver is probed from the device tree and there is a > + * phandle link pointing to the backlight node, it is safe to > + * assume that another driver will enable the backlight at the > + * appropriate time. Therefore, if it is disabled, keep it so. > + */ > + > + /* if the enable GPIO is disabled, do not enable the backlight */ > + if (pb->enable_gpio && gpiod_get_value(pb->enable_gpio) == 0) > + return FB_BLANK_POWERDOWN; > + > + /* The regulator is disabled, do not enable the backlight */ > + if (!regulator_is_enabled(pb->power_supply)) > + return FB_BLANK_POWERDOWN; > + > + return FB_BLANK_UNBLANK; > +} > + > static int pwm_backlight_probe(struct platform_device *pdev) > { > struct platform_pwm_backlight_data *data = dev_get_platdata(&pdev->dev); > @@ -200,7 +226,6 @@ static int pwm_backlight_probe(struct platform_device *pdev) > struct backlight_device *bl; > struct device_node *node = pdev->dev.of_node; > struct pwm_bl_data *pb; > - int initial_blank = FB_BLANK_UNBLANK; > struct pwm_args pargs; > int ret; > > @@ -267,20 +292,13 @@ static int pwm_backlight_probe(struct platform_device *pdev) > pb->enable_gpio = gpio_to_desc(data->enable_gpio); > } > > - if (pb->enable_gpio) { > - /* > - * If the driver is probed from the device tree and there is a > - * phandle link pointing to the backlight node, it is safe to > - * assume that another driver will enable the backlight at the > - * appropriate time. Therefore, if it is disabled, keep it so. > - */ > - if (node && node->phandle && > - gpiod_get_direction(pb->enable_gpio) == GPIOF_DIR_OUT && > - gpiod_get_value(pb->enable_gpio) == 0) > - initial_blank = FB_BLANK_POWERDOWN; > - else > - gpiod_direction_output(pb->enable_gpio, 1); > - } > + /* > + * If the GPIO is configured as input, change the direction to output > + * and set the GPIO as active. > + */ > + if (pb->enable_gpio && > + gpiod_get_direction(pb->enable_gpio) == GPIOF_DIR_IN) > + gpiod_direction_output(pb->enable_gpio, 1); > > pb->power_supply = devm_regulator_get(&pdev->dev, "power"); > if (IS_ERR(pb->power_supply)) { > @@ -288,9 +306,6 @@ static int pwm_backlight_probe(struct platform_device *pdev) > goto err_alloc; > } > > - if (node && node->phandle && !regulator_is_enabled(pb->power_supply)) > - initial_blank = FB_BLANK_POWERDOWN; > - > pb->pwm = devm_pwm_get(&pdev->dev, NULL); > if (IS_ERR(pb->pwm) && PTR_ERR(pb->pwm) != -EPROBE_DEFER && !node) { > dev_err(&pdev->dev, "unable to request PWM, trying legacy API\n"); > @@ -347,7 +362,7 @@ static int pwm_backlight_probe(struct platform_device *pdev) > } > > bl->props.brightness = data->dft_brightness; > - bl->props.power = initial_blank; > + bl->props.power = pwm_backlight_initial_power_state(pb); > backlight_update_status(bl); > > platform_set_drvdata(pdev, bl);