From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
To: Sam Ravnborg <sam@ravnborg.org>
Cc: Neil Armstrong <narmstrong@baylibre.com>,
David Airlie <airlied@linux.ie>,
Linus Walleij <linus.walleij@linaro.org>,
dri-devel@lists.freedesktop.org,
Andrzej Hajda <a.hajda@samsung.com>,
Thierry Reding <thierry.reding@gmail.com>,
Benjamin Gaignard <benjamin.gaignard@linaro.org>,
Stefan Agner <stefan@agner.ch>,
linux-samsung-soc@vger.kernel.org,
linux-rockchip@lists.infradead.org,
Tomi Valkeinen <tomi.valkeinen@ti.com>,
NXP Linux Team <linux-imx@nxp.com>,
Jagan Teki <jagan@amarulasolutions.com>,
Jitao Shi <jitao.shi@mediatek.com>,
Pengutronix Kernel Team <kernel@pengutronix.de>,
Maarten Lankhorst <maarten.lankhorst@linux.intel.com>,
Maxime Ripard <mripard@kernel.org>,
linux-mediatek@lists.infradead.org,
Abhinav Kumar <abhinavk@codeaurora.org>,
linux-tegra@vger.kernel.org, Sean Paul <sean@poorly.run>,
linux-arm-kernel@lists.infradead.org,
Purism Kernel Team <kernel@puri.sm>,
linux-renesas-soc@vger.kernel.org,
Boris Brezillon <boris.brezillon@collabora.com>,
Daniel Vetter <daniel@ffwll.ch>
Subject: Re: [PATCH v1 03/26] drm/panel: simple: use drm_panel backlight support
Date: Tue, 3 Dec 2019 08:39:40 +0200 [thread overview]
Message-ID: <20191203063940.GC4730@pendragon.ideasonboard.com> (raw)
In-Reply-To: <20191202193230.21310-4-sam@ravnborg.org>
Hi Sam,
Thank you for the patch.
On Mon, Dec 02, 2019 at 08:32:07PM +0100, Sam Ravnborg wrote:
> Use drm_panel infrastructure for backlight.
> Replace direct calls with drm_panel_*() calls
> to utilize the drm_panel support.
>
> Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
> cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> Cc: Thierry Reding <thierry.reding@gmail.com>
> Cc: Sam Ravnborg <sam@ravnborg.org>
> ---
> drivers/gpu/drm/panel/panel-simple.c | 50 ++++++----------------------
> 1 file changed, 11 insertions(+), 39 deletions(-)
>
> diff --git a/drivers/gpu/drm/panel/panel-simple.c b/drivers/gpu/drm/panel/panel-simple.c
> index 72f69709f349..a5df6d6dd455 100644
> --- a/drivers/gpu/drm/panel/panel-simple.c
> +++ b/drivers/gpu/drm/panel/panel-simple.c
> @@ -21,7 +21,6 @@
> * DEALINGS IN THE SOFTWARE.
> */
>
> -#include <linux/backlight.h>
> #include <linux/delay.h>
> #include <linux/gpio/consumer.h>
> #include <linux/module.h>
> @@ -105,7 +104,6 @@ struct panel_simple {
>
> const struct panel_desc *desc;
>
> - struct backlight_device *backlight;
> struct regulator *supply;
> struct i2c_adapter *ddc;
>
> @@ -236,12 +234,6 @@ static int panel_simple_disable(struct drm_panel *panel)
> if (!p->enabled)
> return 0;
>
> - if (p->backlight) {
> - p->backlight->props.power = FB_BLANK_POWERDOWN;
> - p->backlight->props.state |= BL_CORE_FBBLANK;
> - backlight_update_status(p->backlight);
> - }
> -
> if (p->desc->delay.disable)
> msleep(p->desc->delay.disable);
>
> @@ -307,12 +299,6 @@ static int panel_simple_enable(struct drm_panel *panel)
> if (p->desc->delay.enable)
> msleep(p->desc->delay.enable);
>
> - if (p->backlight) {
> - p->backlight->props.state &= ~BL_CORE_FBBLANK;
> - p->backlight->props.power = FB_BLANK_UNBLANK;
> - backlight_update_status(p->backlight);
> - }
> -
> p->enabled = true;
>
> return 0;
> @@ -414,9 +400,9 @@ static void panel_simple_parse_panel_timing_node(struct device *dev,
>
> static int panel_simple_probe(struct device *dev, const struct panel_desc *desc)
> {
> - struct device_node *backlight, *ddc;
> struct panel_simple *panel;
> struct display_timing dt;
> + struct device_node *ddc;
> int err;
>
> panel = devm_kzalloc(dev, sizeof(*panel), GFP_KERNEL);
> @@ -442,24 +428,13 @@ static int panel_simple_probe(struct device *dev, const struct panel_desc *desc)
> return err;
> }
>
> - backlight = of_parse_phandle(dev->of_node, "backlight", 0);
> - if (backlight) {
> - panel->backlight = of_find_backlight_by_node(backlight);
> - of_node_put(backlight);
> -
> - if (!panel->backlight)
> - return -EPROBE_DEFER;
> - }
> -
> ddc = of_parse_phandle(dev->of_node, "ddc-i2c-bus", 0);
> if (ddc) {
> panel->ddc = of_find_i2c_adapter_by_node(ddc);
> of_node_put(ddc);
>
> - if (!panel->ddc) {
> - err = -EPROBE_DEFER;
> - goto free_backlight;
> - }
> + if (!panel->ddc)
> + return -EPROBE_DEFER;
> }
>
> if (!of_get_display_timing(dev->of_node, "panel-timing", &dt))
> @@ -468,6 +443,10 @@ static int panel_simple_probe(struct device *dev, const struct panel_desc *desc)
> drm_panel_init(&panel->base, dev, &panel_simple_funcs,
> desc->connector_type);
>
> + err = drm_panel_of_backlight(&panel->base);
> + if (err)
> + goto free_ddc;
> +
> err = drm_panel_add(&panel->base);
> if (err < 0)
> goto free_ddc;
> @@ -479,9 +458,6 @@ static int panel_simple_probe(struct device *dev, const struct panel_desc *desc)
> free_ddc:
> if (panel->ddc)
> put_device(&panel->ddc->dev);
> -free_backlight:
> - if (panel->backlight)
> - put_device(&panel->backlight->dev);
>
> return err;
> }
> @@ -491,16 +467,12 @@ static int panel_simple_remove(struct device *dev)
> struct panel_simple *panel = dev_get_drvdata(dev);
>
> drm_panel_remove(&panel->base);
> -
> - panel_simple_disable(&panel->base);
> - panel_simple_unprepare(&panel->base);
> + drm_panel_disable(&panel->base);
> + drm_panel_unprepare(&panel->base);
>
> if (panel->ddc)
> put_device(&panel->ddc->dev);
>
> - if (panel->backlight)
> - put_device(&panel->backlight->dev);
> -
> return 0;
> }
>
> @@ -508,8 +480,8 @@ static void panel_simple_shutdown(struct device *dev)
> {
> struct panel_simple *panel = dev_get_drvdata(dev);
>
> - panel_simple_disable(&panel->base);
> - panel_simple_unprepare(&panel->base);
> + drm_panel_disable(&panel->base);
> + drm_panel_unprepare(&panel->base);
Without your panel double-disable protection series, you risk disabling
the backlight twice. I think backlight_disable() will work fine, but you
may want to double-check.
With this checked (and possibly addressed if needed),
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> }
>
> static const struct drm_display_mode ampire_am_480272h3tmqw_t01h_mode = {
--
Regards,
Laurent Pinchart
_______________________________________________
Linux-mediatek mailing list
Linux-mediatek@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-mediatek
WARNING: multiple messages have this Message-ID (diff)
From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
To: Sam Ravnborg <sam@ravnborg.org>
Cc: Neil Armstrong <narmstrong@baylibre.com>,
David Airlie <airlied@linux.ie>,
dri-devel@lists.freedesktop.org,
Thierry Reding <thierry.reding@gmail.com>,
linux-samsung-soc@vger.kernel.org,
linux-rockchip@lists.infradead.org,
Tomi Valkeinen <tomi.valkeinen@ti.com>,
NXP Linux Team <linux-imx@nxp.com>,
Jagan Teki <jagan@amarulasolutions.com>,
Jitao Shi <jitao.shi@mediatek.com>,
Pengutronix Kernel Team <kernel@pengutronix.de>,
linux-mediatek@lists.infradead.org,
Abhinav Kumar <abhinavk@codeaurora.org>,
linux-tegra@vger.kernel.org, Sean Paul <sean@poorly.run>,
linux-arm-kernel@lists.infradead.org,
Purism Kernel Team <kernel@puri.sm>,
linux-renesas-soc@vger.kernel.org,
Boris Brezillon <boris.brezillon@collabora.com>
Subject: Re: [PATCH v1 03/26] drm/panel: simple: use drm_panel backlight support
Date: Tue, 3 Dec 2019 08:39:40 +0200 [thread overview]
Message-ID: <20191203063940.GC4730@pendragon.ideasonboard.com> (raw)
In-Reply-To: <20191202193230.21310-4-sam@ravnborg.org>
Hi Sam,
Thank you for the patch.
On Mon, Dec 02, 2019 at 08:32:07PM +0100, Sam Ravnborg wrote:
> Use drm_panel infrastructure for backlight.
> Replace direct calls with drm_panel_*() calls
> to utilize the drm_panel support.
>
> Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
> cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> Cc: Thierry Reding <thierry.reding@gmail.com>
> Cc: Sam Ravnborg <sam@ravnborg.org>
> ---
> drivers/gpu/drm/panel/panel-simple.c | 50 ++++++----------------------
> 1 file changed, 11 insertions(+), 39 deletions(-)
>
> diff --git a/drivers/gpu/drm/panel/panel-simple.c b/drivers/gpu/drm/panel/panel-simple.c
> index 72f69709f349..a5df6d6dd455 100644
> --- a/drivers/gpu/drm/panel/panel-simple.c
> +++ b/drivers/gpu/drm/panel/panel-simple.c
> @@ -21,7 +21,6 @@
> * DEALINGS IN THE SOFTWARE.
> */
>
> -#include <linux/backlight.h>
> #include <linux/delay.h>
> #include <linux/gpio/consumer.h>
> #include <linux/module.h>
> @@ -105,7 +104,6 @@ struct panel_simple {
>
> const struct panel_desc *desc;
>
> - struct backlight_device *backlight;
> struct regulator *supply;
> struct i2c_adapter *ddc;
>
> @@ -236,12 +234,6 @@ static int panel_simple_disable(struct drm_panel *panel)
> if (!p->enabled)
> return 0;
>
> - if (p->backlight) {
> - p->backlight->props.power = FB_BLANK_POWERDOWN;
> - p->backlight->props.state |= BL_CORE_FBBLANK;
> - backlight_update_status(p->backlight);
> - }
> -
> if (p->desc->delay.disable)
> msleep(p->desc->delay.disable);
>
> @@ -307,12 +299,6 @@ static int panel_simple_enable(struct drm_panel *panel)
> if (p->desc->delay.enable)
> msleep(p->desc->delay.enable);
>
> - if (p->backlight) {
> - p->backlight->props.state &= ~BL_CORE_FBBLANK;
> - p->backlight->props.power = FB_BLANK_UNBLANK;
> - backlight_update_status(p->backlight);
> - }
> -
> p->enabled = true;
>
> return 0;
> @@ -414,9 +400,9 @@ static void panel_simple_parse_panel_timing_node(struct device *dev,
>
> static int panel_simple_probe(struct device *dev, const struct panel_desc *desc)
> {
> - struct device_node *backlight, *ddc;
> struct panel_simple *panel;
> struct display_timing dt;
> + struct device_node *ddc;
> int err;
>
> panel = devm_kzalloc(dev, sizeof(*panel), GFP_KERNEL);
> @@ -442,24 +428,13 @@ static int panel_simple_probe(struct device *dev, const struct panel_desc *desc)
> return err;
> }
>
> - backlight = of_parse_phandle(dev->of_node, "backlight", 0);
> - if (backlight) {
> - panel->backlight = of_find_backlight_by_node(backlight);
> - of_node_put(backlight);
> -
> - if (!panel->backlight)
> - return -EPROBE_DEFER;
> - }
> -
> ddc = of_parse_phandle(dev->of_node, "ddc-i2c-bus", 0);
> if (ddc) {
> panel->ddc = of_find_i2c_adapter_by_node(ddc);
> of_node_put(ddc);
>
> - if (!panel->ddc) {
> - err = -EPROBE_DEFER;
> - goto free_backlight;
> - }
> + if (!panel->ddc)
> + return -EPROBE_DEFER;
> }
>
> if (!of_get_display_timing(dev->of_node, "panel-timing", &dt))
> @@ -468,6 +443,10 @@ static int panel_simple_probe(struct device *dev, const struct panel_desc *desc)
> drm_panel_init(&panel->base, dev, &panel_simple_funcs,
> desc->connector_type);
>
> + err = drm_panel_of_backlight(&panel->base);
> + if (err)
> + goto free_ddc;
> +
> err = drm_panel_add(&panel->base);
> if (err < 0)
> goto free_ddc;
> @@ -479,9 +458,6 @@ static int panel_simple_probe(struct device *dev, const struct panel_desc *desc)
> free_ddc:
> if (panel->ddc)
> put_device(&panel->ddc->dev);
> -free_backlight:
> - if (panel->backlight)
> - put_device(&panel->backlight->dev);
>
> return err;
> }
> @@ -491,16 +467,12 @@ static int panel_simple_remove(struct device *dev)
> struct panel_simple *panel = dev_get_drvdata(dev);
>
> drm_panel_remove(&panel->base);
> -
> - panel_simple_disable(&panel->base);
> - panel_simple_unprepare(&panel->base);
> + drm_panel_disable(&panel->base);
> + drm_panel_unprepare(&panel->base);
>
> if (panel->ddc)
> put_device(&panel->ddc->dev);
>
> - if (panel->backlight)
> - put_device(&panel->backlight->dev);
> -
> return 0;
> }
>
> @@ -508,8 +480,8 @@ static void panel_simple_shutdown(struct device *dev)
> {
> struct panel_simple *panel = dev_get_drvdata(dev);
>
> - panel_simple_disable(&panel->base);
> - panel_simple_unprepare(&panel->base);
> + drm_panel_disable(&panel->base);
> + drm_panel_unprepare(&panel->base);
Without your panel double-disable protection series, you risk disabling
the backlight twice. I think backlight_disable() will work fine, but you
may want to double-check.
With this checked (and possibly addressed if needed),
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> }
>
> static const struct drm_display_mode ampire_am_480272h3tmqw_t01h_mode = {
--
Regards,
Laurent Pinchart
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
WARNING: multiple messages have this Message-ID (diff)
From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
To: Sam Ravnborg <sam@ravnborg.org>
Cc: dri-devel@lists.freedesktop.org,
Thierry Reding <thierry.reding@gmail.com>,
Abhinav Kumar <abhinavk@codeaurora.org>,
Andrzej Hajda <a.hajda@samsung.com>,
Benjamin Gaignard <benjamin.gaignard@linaro.org>,
Boris Brezillon <boris.brezillon@collabora.com>,
Daniel Vetter <daniel@ffwll.ch>, David Airlie <airlied@linux.ie>,
Jagan Teki <jagan@amarulasolutions.com>,
Jitao Shi <jitao.shi@mediatek.com>,
Linus Walleij <linus.walleij@linaro.org>,
linux-arm-kernel@lists.infradead.org,
linux-mediatek@lists.infradead.org,
linux-renesas-soc@vger.kernel.org,
linux-rockchip@lists.infradead.org,
linux-samsung-soc@vger.kernel.org, linux-tegra@vger.kernel.org,
Maarten Lankhorst <maarten.lankhorst@linux.intel.com>,
Maxime Ripard <mripard@kernel.org>,
Neil Armstrong <narmstrong@baylibre.com>,
NXP Linux Team <linux-imx@nxp.com>,
Pengutronix Kernel Team <kernel@pengutronix.de>,
Purism Kernel Team <kernel@puri.sm>, Sean Paul <sean@poorly.run>,
Stefan Agner <stefan@agner.ch>,
Tomi Valkeinen <tomi.valkeinen@ti.com>
Subject: Re: [PATCH v1 03/26] drm/panel: simple: use drm_panel backlight support
Date: Tue, 3 Dec 2019 08:39:40 +0200 [thread overview]
Message-ID: <20191203063940.GC4730@pendragon.ideasonboard.com> (raw)
In-Reply-To: <20191202193230.21310-4-sam@ravnborg.org>
Hi Sam,
Thank you for the patch.
On Mon, Dec 02, 2019 at 08:32:07PM +0100, Sam Ravnborg wrote:
> Use drm_panel infrastructure for backlight.
> Replace direct calls with drm_panel_*() calls
> to utilize the drm_panel support.
>
> Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
> cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> Cc: Thierry Reding <thierry.reding@gmail.com>
> Cc: Sam Ravnborg <sam@ravnborg.org>
> ---
> drivers/gpu/drm/panel/panel-simple.c | 50 ++++++----------------------
> 1 file changed, 11 insertions(+), 39 deletions(-)
>
> diff --git a/drivers/gpu/drm/panel/panel-simple.c b/drivers/gpu/drm/panel/panel-simple.c
> index 72f69709f349..a5df6d6dd455 100644
> --- a/drivers/gpu/drm/panel/panel-simple.c
> +++ b/drivers/gpu/drm/panel/panel-simple.c
> @@ -21,7 +21,6 @@
> * DEALINGS IN THE SOFTWARE.
> */
>
> -#include <linux/backlight.h>
> #include <linux/delay.h>
> #include <linux/gpio/consumer.h>
> #include <linux/module.h>
> @@ -105,7 +104,6 @@ struct panel_simple {
>
> const struct panel_desc *desc;
>
> - struct backlight_device *backlight;
> struct regulator *supply;
> struct i2c_adapter *ddc;
>
> @@ -236,12 +234,6 @@ static int panel_simple_disable(struct drm_panel *panel)
> if (!p->enabled)
> return 0;
>
> - if (p->backlight) {
> - p->backlight->props.power = FB_BLANK_POWERDOWN;
> - p->backlight->props.state |= BL_CORE_FBBLANK;
> - backlight_update_status(p->backlight);
> - }
> -
> if (p->desc->delay.disable)
> msleep(p->desc->delay.disable);
>
> @@ -307,12 +299,6 @@ static int panel_simple_enable(struct drm_panel *panel)
> if (p->desc->delay.enable)
> msleep(p->desc->delay.enable);
>
> - if (p->backlight) {
> - p->backlight->props.state &= ~BL_CORE_FBBLANK;
> - p->backlight->props.power = FB_BLANK_UNBLANK;
> - backlight_update_status(p->backlight);
> - }
> -
> p->enabled = true;
>
> return 0;
> @@ -414,9 +400,9 @@ static void panel_simple_parse_panel_timing_node(struct device *dev,
>
> static int panel_simple_probe(struct device *dev, const struct panel_desc *desc)
> {
> - struct device_node *backlight, *ddc;
> struct panel_simple *panel;
> struct display_timing dt;
> + struct device_node *ddc;
> int err;
>
> panel = devm_kzalloc(dev, sizeof(*panel), GFP_KERNEL);
> @@ -442,24 +428,13 @@ static int panel_simple_probe(struct device *dev, const struct panel_desc *desc)
> return err;
> }
>
> - backlight = of_parse_phandle(dev->of_node, "backlight", 0);
> - if (backlight) {
> - panel->backlight = of_find_backlight_by_node(backlight);
> - of_node_put(backlight);
> -
> - if (!panel->backlight)
> - return -EPROBE_DEFER;
> - }
> -
> ddc = of_parse_phandle(dev->of_node, "ddc-i2c-bus", 0);
> if (ddc) {
> panel->ddc = of_find_i2c_adapter_by_node(ddc);
> of_node_put(ddc);
>
> - if (!panel->ddc) {
> - err = -EPROBE_DEFER;
> - goto free_backlight;
> - }
> + if (!panel->ddc)
> + return -EPROBE_DEFER;
> }
>
> if (!of_get_display_timing(dev->of_node, "panel-timing", &dt))
> @@ -468,6 +443,10 @@ static int panel_simple_probe(struct device *dev, const struct panel_desc *desc)
> drm_panel_init(&panel->base, dev, &panel_simple_funcs,
> desc->connector_type);
>
> + err = drm_panel_of_backlight(&panel->base);
> + if (err)
> + goto free_ddc;
> +
> err = drm_panel_add(&panel->base);
> if (err < 0)
> goto free_ddc;
> @@ -479,9 +458,6 @@ static int panel_simple_probe(struct device *dev, const struct panel_desc *desc)
> free_ddc:
> if (panel->ddc)
> put_device(&panel->ddc->dev);
> -free_backlight:
> - if (panel->backlight)
> - put_device(&panel->backlight->dev);
>
> return err;
> }
> @@ -491,16 +467,12 @@ static int panel_simple_remove(struct device *dev)
> struct panel_simple *panel = dev_get_drvdata(dev);
>
> drm_panel_remove(&panel->base);
> -
> - panel_simple_disable(&panel->base);
> - panel_simple_unprepare(&panel->base);
> + drm_panel_disable(&panel->base);
> + drm_panel_unprepare(&panel->base);
>
> if (panel->ddc)
> put_device(&panel->ddc->dev);
>
> - if (panel->backlight)
> - put_device(&panel->backlight->dev);
> -
> return 0;
> }
>
> @@ -508,8 +480,8 @@ static void panel_simple_shutdown(struct device *dev)
> {
> struct panel_simple *panel = dev_get_drvdata(dev);
>
> - panel_simple_disable(&panel->base);
> - panel_simple_unprepare(&panel->base);
> + drm_panel_disable(&panel->base);
> + drm_panel_unprepare(&panel->base);
Without your panel double-disable protection series, you risk disabling
the backlight twice. I think backlight_disable() will work fine, but you
may want to double-check.
With this checked (and possibly addressed if needed),
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> }
>
> static const struct drm_display_mode ampire_am_480272h3tmqw_t01h_mode = {
--
Regards,
Laurent Pinchart
WARNING: multiple messages have this Message-ID (diff)
From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
To: Sam Ravnborg <sam@ravnborg.org>
Cc: Neil Armstrong <narmstrong@baylibre.com>,
David Airlie <airlied@linux.ie>,
Linus Walleij <linus.walleij@linaro.org>,
dri-devel@lists.freedesktop.org,
Andrzej Hajda <a.hajda@samsung.com>,
Thierry Reding <thierry.reding@gmail.com>,
Benjamin Gaignard <benjamin.gaignard@linaro.org>,
Stefan Agner <stefan@agner.ch>,
linux-samsung-soc@vger.kernel.org,
linux-rockchip@lists.infradead.org,
Tomi Valkeinen <tomi.valkeinen@ti.com>,
NXP Linux Team <linux-imx@nxp.com>,
Jagan Teki <jagan@amarulasolutions.com>,
Jitao Shi <jitao.shi@mediatek.com>,
Pengutronix Kernel Team <kernel@pengutronix.de>,
Maarten Lankhorst <maarten.lankhorst@linux.intel.com>,
Maxime Ripard <mripard@kernel.org>,
linux-mediatek@lists.infradead.org,
Abhinav Kumar <abhinavk@codeaurora.org>,
linux-tegra@vger.kernel.org, Sean Paul <sean@poorly.run>,
linux-arm-kernel@lists.infradead.org,
Purism Kernel Team <kernel@puri.sm>,
linux-renesas-soc@vger.kernel.org,
Boris Brezillon <boris.brezillon@collabora.com>,
Daniel Vetter <daniel@ffwll.ch>
Subject: Re: [PATCH v1 03/26] drm/panel: simple: use drm_panel backlight support
Date: Tue, 3 Dec 2019 08:39:40 +0200 [thread overview]
Message-ID: <20191203063940.GC4730@pendragon.ideasonboard.com> (raw)
In-Reply-To: <20191202193230.21310-4-sam@ravnborg.org>
Hi Sam,
Thank you for the patch.
On Mon, Dec 02, 2019 at 08:32:07PM +0100, Sam Ravnborg wrote:
> Use drm_panel infrastructure for backlight.
> Replace direct calls with drm_panel_*() calls
> to utilize the drm_panel support.
>
> Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
> cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> Cc: Thierry Reding <thierry.reding@gmail.com>
> Cc: Sam Ravnborg <sam@ravnborg.org>
> ---
> drivers/gpu/drm/panel/panel-simple.c | 50 ++++++----------------------
> 1 file changed, 11 insertions(+), 39 deletions(-)
>
> diff --git a/drivers/gpu/drm/panel/panel-simple.c b/drivers/gpu/drm/panel/panel-simple.c
> index 72f69709f349..a5df6d6dd455 100644
> --- a/drivers/gpu/drm/panel/panel-simple.c
> +++ b/drivers/gpu/drm/panel/panel-simple.c
> @@ -21,7 +21,6 @@
> * DEALINGS IN THE SOFTWARE.
> */
>
> -#include <linux/backlight.h>
> #include <linux/delay.h>
> #include <linux/gpio/consumer.h>
> #include <linux/module.h>
> @@ -105,7 +104,6 @@ struct panel_simple {
>
> const struct panel_desc *desc;
>
> - struct backlight_device *backlight;
> struct regulator *supply;
> struct i2c_adapter *ddc;
>
> @@ -236,12 +234,6 @@ static int panel_simple_disable(struct drm_panel *panel)
> if (!p->enabled)
> return 0;
>
> - if (p->backlight) {
> - p->backlight->props.power = FB_BLANK_POWERDOWN;
> - p->backlight->props.state |= BL_CORE_FBBLANK;
> - backlight_update_status(p->backlight);
> - }
> -
> if (p->desc->delay.disable)
> msleep(p->desc->delay.disable);
>
> @@ -307,12 +299,6 @@ static int panel_simple_enable(struct drm_panel *panel)
> if (p->desc->delay.enable)
> msleep(p->desc->delay.enable);
>
> - if (p->backlight) {
> - p->backlight->props.state &= ~BL_CORE_FBBLANK;
> - p->backlight->props.power = FB_BLANK_UNBLANK;
> - backlight_update_status(p->backlight);
> - }
> -
> p->enabled = true;
>
> return 0;
> @@ -414,9 +400,9 @@ static void panel_simple_parse_panel_timing_node(struct device *dev,
>
> static int panel_simple_probe(struct device *dev, const struct panel_desc *desc)
> {
> - struct device_node *backlight, *ddc;
> struct panel_simple *panel;
> struct display_timing dt;
> + struct device_node *ddc;
> int err;
>
> panel = devm_kzalloc(dev, sizeof(*panel), GFP_KERNEL);
> @@ -442,24 +428,13 @@ static int panel_simple_probe(struct device *dev, const struct panel_desc *desc)
> return err;
> }
>
> - backlight = of_parse_phandle(dev->of_node, "backlight", 0);
> - if (backlight) {
> - panel->backlight = of_find_backlight_by_node(backlight);
> - of_node_put(backlight);
> -
> - if (!panel->backlight)
> - return -EPROBE_DEFER;
> - }
> -
> ddc = of_parse_phandle(dev->of_node, "ddc-i2c-bus", 0);
> if (ddc) {
> panel->ddc = of_find_i2c_adapter_by_node(ddc);
> of_node_put(ddc);
>
> - if (!panel->ddc) {
> - err = -EPROBE_DEFER;
> - goto free_backlight;
> - }
> + if (!panel->ddc)
> + return -EPROBE_DEFER;
> }
>
> if (!of_get_display_timing(dev->of_node, "panel-timing", &dt))
> @@ -468,6 +443,10 @@ static int panel_simple_probe(struct device *dev, const struct panel_desc *desc)
> drm_panel_init(&panel->base, dev, &panel_simple_funcs,
> desc->connector_type);
>
> + err = drm_panel_of_backlight(&panel->base);
> + if (err)
> + goto free_ddc;
> +
> err = drm_panel_add(&panel->base);
> if (err < 0)
> goto free_ddc;
> @@ -479,9 +458,6 @@ static int panel_simple_probe(struct device *dev, const struct panel_desc *desc)
> free_ddc:
> if (panel->ddc)
> put_device(&panel->ddc->dev);
> -free_backlight:
> - if (panel->backlight)
> - put_device(&panel->backlight->dev);
>
> return err;
> }
> @@ -491,16 +467,12 @@ static int panel_simple_remove(struct device *dev)
> struct panel_simple *panel = dev_get_drvdata(dev);
>
> drm_panel_remove(&panel->base);
> -
> - panel_simple_disable(&panel->base);
> - panel_simple_unprepare(&panel->base);
> + drm_panel_disable(&panel->base);
> + drm_panel_unprepare(&panel->base);
>
> if (panel->ddc)
> put_device(&panel->ddc->dev);
>
> - if (panel->backlight)
> - put_device(&panel->backlight->dev);
> -
> return 0;
> }
>
> @@ -508,8 +480,8 @@ static void panel_simple_shutdown(struct device *dev)
> {
> struct panel_simple *panel = dev_get_drvdata(dev);
>
> - panel_simple_disable(&panel->base);
> - panel_simple_unprepare(&panel->base);
> + drm_panel_disable(&panel->base);
> + drm_panel_unprepare(&panel->base);
Without your panel double-disable protection series, you risk disabling
the backlight twice. I think backlight_disable() will work fine, but you
may want to double-check.
With this checked (and possibly addressed if needed),
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> }
>
> static const struct drm_display_mode ampire_am_480272h3tmqw_t01h_mode = {
--
Regards,
Laurent Pinchart
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2019-12-03 6:39 UTC|newest]
Thread overview: 240+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-12-02 19:32 [PATCH v1 0/26] drm/panel infrastructure + backlight update Sam Ravnborg
2019-12-02 19:32 ` Sam Ravnborg
2019-12-02 19:32 ` Sam Ravnborg
2019-12-02 19:32 ` Sam Ravnborg
2019-12-02 19:32 ` [PATCH v1 01/26] drm/drm_panel: no error when no callback Sam Ravnborg
2019-12-02 19:32 ` Sam Ravnborg
2019-12-02 19:32 ` Sam Ravnborg
2019-12-02 19:32 ` Sam Ravnborg
2019-12-03 6:24 ` Laurent Pinchart
2019-12-03 6:24 ` Laurent Pinchart
2019-12-03 6:24 ` Laurent Pinchart
2019-12-03 6:24 ` Laurent Pinchart
2019-12-02 19:32 ` [PATCH v1 02/26] drm/panel: add backlight support Sam Ravnborg
2019-12-02 19:32 ` Sam Ravnborg
2019-12-02 19:32 ` Sam Ravnborg
2019-12-02 19:32 ` Sam Ravnborg
2019-12-03 6:32 ` Laurent Pinchart
2019-12-03 6:32 ` Laurent Pinchart
2019-12-03 6:32 ` Laurent Pinchart
2019-12-03 6:32 ` Laurent Pinchart
2019-12-02 19:32 ` [PATCH v1 03/26] drm/panel: simple: use drm_panel " Sam Ravnborg
2019-12-02 19:32 ` Sam Ravnborg
2019-12-02 19:32 ` Sam Ravnborg
2019-12-02 19:32 ` Sam Ravnborg
2019-12-03 6:39 ` Laurent Pinchart [this message]
2019-12-03 6:39 ` Laurent Pinchart
2019-12-03 6:39 ` Laurent Pinchart
2019-12-03 6:39 ` Laurent Pinchart
2019-12-02 19:32 ` [PATCH v1 04/26] drm: get drm_bridge_panel connector via helper Sam Ravnborg
2019-12-02 19:32 ` Sam Ravnborg
2019-12-02 19:32 ` Sam Ravnborg
2019-12-02 19:32 ` Sam Ravnborg
2019-12-03 6:44 ` Laurent Pinchart
2019-12-03 6:44 ` Laurent Pinchart
2019-12-03 6:44 ` Laurent Pinchart
2019-12-03 6:44 ` Laurent Pinchart
2019-12-03 13:22 ` Linus Walleij
2019-12-03 13:22 ` Linus Walleij
2019-12-03 13:22 ` Linus Walleij
2019-12-03 13:22 ` Linus Walleij
2019-12-03 13:22 ` Linus Walleij
2019-12-02 19:32 ` [PATCH v1 05/26] drm/panel: add drm_connector argument to get_modes() Sam Ravnborg
2019-12-02 19:32 ` Sam Ravnborg
2019-12-02 19:32 ` Sam Ravnborg
2019-12-02 19:32 ` Sam Ravnborg
2019-12-03 6:50 ` Laurent Pinchart
2019-12-03 6:50 ` Laurent Pinchart
2019-12-03 6:50 ` Laurent Pinchart
2019-12-03 6:50 ` Laurent Pinchart
2019-12-03 13:25 ` Linus Walleij
2019-12-03 13:25 ` Linus Walleij
2019-12-03 13:25 ` Linus Walleij
2019-12-03 13:25 ` Linus Walleij
2019-12-03 13:25 ` Linus Walleij
2019-12-04 12:08 ` Guido Günther
2019-12-04 12:08 ` Guido Günther
2019-12-04 12:08 ` Guido Günther
2019-12-04 12:08 ` Guido Günther
2019-12-04 13:11 ` Laurent Pinchart
2019-12-04 13:11 ` Laurent Pinchart
2019-12-04 13:11 ` Laurent Pinchart
2019-12-04 13:11 ` Laurent Pinchart
2019-12-02 19:32 ` [PATCH v1 06/26] drm/panel: decouple connector from drm_panel Sam Ravnborg
2019-12-02 19:32 ` Sam Ravnborg
2019-12-02 19:32 ` Sam Ravnborg
2019-12-03 6:54 ` Laurent Pinchart
2019-12-03 6:54 ` Laurent Pinchart
2019-12-03 6:54 ` Laurent Pinchart
2019-12-03 13:26 ` Linus Walleij
2019-12-03 13:26 ` Linus Walleij
2019-12-03 13:26 ` Linus Walleij
2019-12-02 19:32 ` [PATCH v1 07/26] drm/panel: remove get_timings Sam Ravnborg
2019-12-02 19:32 ` Sam Ravnborg
2019-12-02 19:32 ` Sam Ravnborg
2019-12-02 19:32 ` Sam Ravnborg
2019-12-03 7:02 ` Laurent Pinchart
2019-12-03 7:02 ` Laurent Pinchart
2019-12-03 7:02 ` Laurent Pinchart
2019-12-03 7:02 ` Laurent Pinchart
2019-12-03 7:46 ` Maxime Ripard
2019-12-03 7:46 ` Maxime Ripard
2019-12-03 7:46 ` Maxime Ripard
2019-12-03 7:46 ` Maxime Ripard
2019-12-03 8:18 ` Laurent Pinchart
2019-12-03 8:18 ` Laurent Pinchart
2019-12-03 8:18 ` Laurent Pinchart
2019-12-03 8:18 ` Laurent Pinchart
2019-12-03 8:39 ` Sam Ravnborg
2019-12-03 8:39 ` Sam Ravnborg
2019-12-03 8:39 ` Sam Ravnborg
2019-12-03 8:39 ` Sam Ravnborg
2019-12-04 8:05 ` Maxime Ripard
2019-12-04 8:05 ` Maxime Ripard
2019-12-04 8:05 ` Maxime Ripard
2019-12-04 8:05 ` Maxime Ripard
2019-12-03 15:20 ` Linus Walleij
2019-12-03 15:20 ` Linus Walleij
2019-12-03 15:20 ` Linus Walleij
2019-12-03 15:20 ` Linus Walleij
2019-12-03 15:20 ` Linus Walleij
2019-12-04 8:16 ` Maxime Ripard
2019-12-04 8:16 ` Maxime Ripard
2019-12-04 8:16 ` Maxime Ripard
2019-12-04 8:16 ` Maxime Ripard
2019-12-04 8:16 ` Maxime Ripard
2019-12-04 8:23 ` Laurent Pinchart
2019-12-04 8:23 ` Laurent Pinchart
2019-12-04 8:23 ` Laurent Pinchart
2019-12-04 8:23 ` Laurent Pinchart
2019-12-04 8:23 ` Laurent Pinchart
2019-12-10 21:33 ` Linus Walleij
2019-12-10 21:33 ` Linus Walleij
2019-12-10 21:33 ` Linus Walleij
2019-12-10 21:33 ` Linus Walleij
2019-12-10 21:33 ` Linus Walleij
2019-12-02 19:32 ` [PATCH v1 08/26] drm/panel: drop drm_device from drm_panel Sam Ravnborg
2019-12-02 19:32 ` Sam Ravnborg
2019-12-02 19:32 ` Sam Ravnborg
2019-12-02 19:32 ` Sam Ravnborg
2019-12-03 7:15 ` Laurent Pinchart
2019-12-03 7:15 ` Laurent Pinchart
2019-12-03 7:15 ` Laurent Pinchart
2019-12-03 7:15 ` Laurent Pinchart
2019-12-03 13:27 ` Linus Walleij
2019-12-03 13:27 ` Linus Walleij
2019-12-03 13:27 ` Linus Walleij
2019-12-03 13:27 ` Linus Walleij
2019-12-03 13:27 ` Linus Walleij
2019-12-02 19:32 ` [PATCH v1 09/26] drm/panel: feiyang-fy07024di26a30d: use drm_panel backlight support Sam Ravnborg
2019-12-02 19:32 ` Sam Ravnborg
2019-12-02 19:32 ` Sam Ravnborg
2019-12-02 19:32 ` Sam Ravnborg
2019-12-02 19:32 ` [PATCH v1 10/26] drm/panel: ilitek-ili9881c: " Sam Ravnborg
2019-12-02 19:32 ` Sam Ravnborg
2019-12-02 19:32 ` Sam Ravnborg
2019-12-02 19:32 ` Sam Ravnborg
2019-12-02 19:32 ` [PATCH v1 11/26] drm/panel: innolux-p079zca: " Sam Ravnborg
2019-12-02 19:32 ` Sam Ravnborg
2019-12-02 19:32 ` Sam Ravnborg
2019-12-02 19:32 ` Sam Ravnborg
2019-12-02 19:32 ` [PATCH v1 12/26] drm/panel: kingdisplay-kd097d04: " Sam Ravnborg
2019-12-02 19:32 ` Sam Ravnborg
2019-12-02 19:32 ` Sam Ravnborg
2019-12-02 19:32 ` Sam Ravnborg
2019-12-02 19:32 ` [PATCH v1 13/26] drm/panel: lvds: " Sam Ravnborg
2019-12-02 19:32 ` Sam Ravnborg
2019-12-02 19:32 ` Sam Ravnborg
2019-12-02 19:32 ` Sam Ravnborg
2019-12-03 7:16 ` Laurent Pinchart
2019-12-03 7:16 ` Laurent Pinchart
2019-12-03 7:16 ` Laurent Pinchart
2019-12-03 7:16 ` Laurent Pinchart
2019-12-02 19:32 ` [PATCH v1 14/26] drm/panel: olimex-lcd-olinuxino: " Sam Ravnborg
2019-12-02 19:32 ` Sam Ravnborg
2019-12-02 19:32 ` Sam Ravnborg
2019-12-02 19:32 ` Sam Ravnborg
2019-12-02 19:32 ` [PATCH v1 15/26] drm/panel: osd-osd101t2587-53ts: " Sam Ravnborg
2019-12-02 19:32 ` Sam Ravnborg
2019-12-02 19:32 ` Sam Ravnborg
2019-12-02 19:32 ` Sam Ravnborg
2019-12-02 19:32 ` [PATCH v1 16/26] drm/panel: panasonic-vvx10f034n00: " Sam Ravnborg
2019-12-02 19:32 ` Sam Ravnborg
2019-12-02 19:32 ` Sam Ravnborg
2019-12-02 19:32 ` Sam Ravnborg
2019-12-02 19:32 ` [PATCH v1 17/26] drm/panel: raydium-rm68200: " Sam Ravnborg
2019-12-02 19:32 ` Sam Ravnborg
2019-12-02 19:32 ` Sam Ravnborg
2019-12-02 19:32 ` Sam Ravnborg
2019-12-02 19:32 ` [PATCH v1 18/26] drm/panel: rocktech-jh057n00900: " Sam Ravnborg
2019-12-02 19:32 ` Sam Ravnborg
2019-12-02 19:32 ` Sam Ravnborg
2019-12-02 19:32 ` Sam Ravnborg
2019-12-04 12:04 ` Guido Günther
2019-12-04 12:04 ` Guido Günther
2019-12-04 12:04 ` Guido Günther
2019-12-04 12:04 ` Guido Günther
2019-12-02 19:32 ` [PATCH v1 19/26] drm/panel: ronbo-rb070d30: " Sam Ravnborg
2019-12-02 19:32 ` Sam Ravnborg
2019-12-02 19:32 ` Sam Ravnborg
2019-12-02 19:32 ` Sam Ravnborg
2019-12-02 19:32 ` [PATCH v1 20/26] drm/panel: seiko-43wvf1g: " Sam Ravnborg
2019-12-02 19:32 ` Sam Ravnborg
2019-12-02 19:32 ` Sam Ravnborg
2019-12-02 19:32 ` Sam Ravnborg
2019-12-02 19:32 ` [PATCH v1 21/26] drm/panel: sharp-lq101r1sx01: " Sam Ravnborg
2019-12-02 19:32 ` Sam Ravnborg
2019-12-02 19:32 ` Sam Ravnborg
2019-12-02 19:32 ` Sam Ravnborg
2019-12-02 19:32 ` [PATCH v1 22/26] drm/panel: sharp-ls043t1le01: " Sam Ravnborg
2019-12-02 19:32 ` Sam Ravnborg
2019-12-02 19:32 ` Sam Ravnborg
2019-12-02 19:32 ` Sam Ravnborg
2019-12-02 19:32 ` [PATCH v1 23/26] drm/panel: sitronix-st7701: " Sam Ravnborg
2019-12-02 19:32 ` Sam Ravnborg
2019-12-02 19:32 ` Sam Ravnborg
2019-12-02 19:32 ` Sam Ravnborg
2019-12-02 19:32 ` [PATCH v1 24/26] drm/panel: sitronix-st7789v: " Sam Ravnborg
2019-12-02 19:32 ` Sam Ravnborg
2019-12-02 19:32 ` Sam Ravnborg
2019-12-02 19:32 ` Sam Ravnborg
2019-12-02 19:32 ` [PATCH v1 25/26] drm/panel: tpo-td028ttec1: " Sam Ravnborg
2019-12-02 19:32 ` Sam Ravnborg
2019-12-02 19:32 ` Sam Ravnborg
2019-12-02 19:32 ` Sam Ravnborg
2019-12-03 7:16 ` Laurent Pinchart
2019-12-03 7:16 ` Laurent Pinchart
2019-12-03 7:16 ` Laurent Pinchart
2019-12-03 7:16 ` Laurent Pinchart
2019-12-03 7:16 ` Laurent Pinchart
2019-12-02 19:32 ` [PATCH v1 26/26] drm/panel: tpo-tpg110: " Sam Ravnborg
2019-12-02 19:32 ` Sam Ravnborg
2019-12-02 19:32 ` Sam Ravnborg
2019-12-02 19:32 ` Sam Ravnborg
2019-12-03 13:20 ` Linus Walleij
2019-12-03 13:20 ` Linus Walleij
2019-12-03 13:20 ` Linus Walleij
2019-12-03 13:20 ` Linus Walleij
2019-12-03 13:20 ` Linus Walleij
2019-12-02 19:59 ` [PATCH v1 0/26] drm/panel infrastructure + backlight update Jeffrey Hugo
2019-12-02 19:59 ` Jeffrey Hugo
2019-12-02 19:59 ` Jeffrey Hugo
2019-12-02 19:59 ` Jeffrey Hugo
2019-12-02 19:59 ` Jeffrey Hugo
2019-12-02 20:48 ` Sam Ravnborg
2019-12-02 20:48 ` Sam Ravnborg
2019-12-02 20:48 ` Sam Ravnborg
2019-12-02 20:48 ` Sam Ravnborg
2019-12-02 20:51 ` Jeffrey Hugo
2019-12-02 20:51 ` Jeffrey Hugo
2019-12-02 20:51 ` Jeffrey Hugo
2019-12-02 20:51 ` Jeffrey Hugo
2019-12-02 20:51 ` Jeffrey Hugo
2019-12-03 7:24 ` Laurent Pinchart
2019-12-03 7:24 ` Laurent Pinchart
2019-12-03 7:24 ` Laurent Pinchart
2019-12-03 7:24 ` Laurent Pinchart
2019-12-03 8:33 ` Sam Ravnborg
2019-12-03 8:33 ` Sam Ravnborg
2019-12-03 8:33 ` Sam Ravnborg
2019-12-03 8:33 ` Sam Ravnborg
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20191203063940.GC4730@pendragon.ideasonboard.com \
--to=laurent.pinchart@ideasonboard.com \
--cc=a.hajda@samsung.com \
--cc=abhinavk@codeaurora.org \
--cc=airlied@linux.ie \
--cc=benjamin.gaignard@linaro.org \
--cc=boris.brezillon@collabora.com \
--cc=daniel@ffwll.ch \
--cc=dri-devel@lists.freedesktop.org \
--cc=jagan@amarulasolutions.com \
--cc=jitao.shi@mediatek.com \
--cc=kernel@pengutronix.de \
--cc=kernel@puri.sm \
--cc=linus.walleij@linaro.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-imx@nxp.com \
--cc=linux-mediatek@lists.infradead.org \
--cc=linux-renesas-soc@vger.kernel.org \
--cc=linux-rockchip@lists.infradead.org \
--cc=linux-samsung-soc@vger.kernel.org \
--cc=linux-tegra@vger.kernel.org \
--cc=maarten.lankhorst@linux.intel.com \
--cc=mripard@kernel.org \
--cc=narmstrong@baylibre.com \
--cc=sam@ravnborg.org \
--cc=sean@poorly.run \
--cc=stefan@agner.ch \
--cc=thierry.reding@gmail.com \
--cc=tomi.valkeinen@ti.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.