From: jacopo mondi <jacopo@jmondi.org>
To: Vladimir Zapolskiy <vladimir_zapolskiy@mentor.com>
Cc: Jacopo Mondi <jacopo+renesas@jmondi.org>,
architt@codeaurora.org, a.hajda@samsung.com,
Laurent.pinchart@ideasonboard.com, airlied@linux.ie,
horms@verge.net.au, magnus.damm@gmail.com, geert@linux-m68k.org,
niklas.soderlund@ragnatech.se,
sergei.shtylyov@cogentembedded.com, robh+dt@kernel.org,
mark.rutland@arm.com, dri-devel@lists.freedesktop.org,
linux-renesas-soc@vger.kernel.org, devicetree@vger.kernel.org,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH v6 2/3] drm: bridge: Add thc63lvd1024 LVDS decoder driver
Date: Tue, 27 Mar 2018 09:30:27 +0200 [thread overview]
Message-ID: <20180327073027.GH27746@w540> (raw)
In-Reply-To: <30381869-9bc8-b6aa-a37a-598d9c8f280d@mentor.com>
HI Vladimir,
On Tue, Mar 27, 2018 at 09:24:28AM +0300, Vladimir Zapolskiy wrote:
> Hi Jacopo,
>
> On 03/16/2018 05:16 PM, Jacopo Mondi wrote:
> > Add DRM bridge driver for Thine THC63LVD1024 LVDS to digital parallel
> > output converter.
> >
> > Signed-off-by: Jacopo Mondi <jacopo+renesas@jmondi.org>
> > Reviewed-by: Andrzej Hajda <a.hajda@samsung.com>
> > Reviewed-by: Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se>
> > ---
> > drivers/gpu/drm/bridge/Kconfig | 6 +
> > drivers/gpu/drm/bridge/Makefile | 1 +
> > drivers/gpu/drm/bridge/thc63lvd1024.c | 255 ++++++++++++++++++++++++++++++++++
> > 3 files changed, 262 insertions(+)
> > create mode 100644 drivers/gpu/drm/bridge/thc63lvd1024.c
> >
> > diff --git a/drivers/gpu/drm/bridge/Kconfig b/drivers/gpu/drm/bridge/Kconfig
> > index 3b99d5a..5815a20 100644
> > --- a/drivers/gpu/drm/bridge/Kconfig
> > +++ b/drivers/gpu/drm/bridge/Kconfig
> > @@ -92,6 +92,12 @@ config DRM_SII9234
> > It is an I2C driver, that detects connection of MHL bridge
> > and starts encapsulation of HDMI signal.
> >
> > +config DRM_THINE_THC63LVD1024
> > + tristate "Thine THC63LVD1024 LVDS decoder bridge"
> > + depends on OF
> > + ---help---
> > + Thine THC63LVD1024 LVDS/parallel converter driver.
> > +
> > config DRM_TOSHIBA_TC358767
> > tristate "Toshiba TC358767 eDP bridge"
> > depends on OF
> > diff --git a/drivers/gpu/drm/bridge/Makefile b/drivers/gpu/drm/bridge/Makefile
> > index 373eb28..fd90b16 100644
> > --- a/drivers/gpu/drm/bridge/Makefile
> > +++ b/drivers/gpu/drm/bridge/Makefile
> > @@ -8,6 +8,7 @@ obj-$(CONFIG_DRM_PARADE_PS8622) += parade-ps8622.o
> > obj-$(CONFIG_DRM_SIL_SII8620) += sil-sii8620.o
> > obj-$(CONFIG_DRM_SII902X) += sii902x.o
> > obj-$(CONFIG_DRM_SII9234) += sii9234.o
> > +obj-$(CONFIG_DRM_THINE_THC63LVD1024) += thc63lvd1024.o
> > obj-$(CONFIG_DRM_TOSHIBA_TC358767) += tc358767.o
> > obj-$(CONFIG_DRM_ANALOGIX_DP) += analogix/
> > obj-$(CONFIG_DRM_I2C_ADV7511) += adv7511/
> > diff --git a/drivers/gpu/drm/bridge/thc63lvd1024.c b/drivers/gpu/drm/bridge/thc63lvd1024.c
> > new file mode 100644
> > index 0000000..02a54c2
> > --- /dev/null
> > +++ b/drivers/gpu/drm/bridge/thc63lvd1024.c
> > @@ -0,0 +1,255 @@
> > +// SPDX-License-Identifier: GPL-2.0
> > +/*
> > + * THC63LVD1024 LVDS to parallel data DRM bridge driver.
> > + *
> > + * Copyright (C) 2018 Jacopo Mondi <jacopo+renesas@jmondi.org>
> > + */
> > +
> > +#include <drm/drmP.h>
> > +#include <drm/drm_bridge.h>
> > +#include <drm/drm_panel.h>
> > +
> > +#include <linux/gpio/consumer.h>
> > +#include <linux/of_graph.h>
> > +#include <linux/regulator/consumer.h>
> > +
> > +enum {
> > + THC63_LVDS_IN0,
> > + THC63_LVDS_IN1,
> > + THC63_DIGITAL_OUT0,
> > + THC63_DIGITAL_OUT1,
> > +};
> > +
> > +static const char * const thc63_reg_names[] = {
> > + "vcc", "lvcc", "pvcc", "cvcc",
> > +};
> > +
> > +struct thc63_dev {
> > + struct device *dev;
> > +
> > + struct regulator *vccs[ARRAY_SIZE(thc63_reg_names)];
> > +
> > + struct gpio_desc *pdwn;
> > + struct gpio_desc *oe;
> > +
> > + struct drm_bridge bridge;
> > + struct drm_bridge *next;
> > +};
> > +
> > +static inline struct thc63_dev *to_thc63(struct drm_bridge *bridge)
> > +{
> > + return container_of(bridge, struct thc63_dev, bridge);
> > +}
> > +
> > +static int thc63_attach(struct drm_bridge *bridge)
> > +{
> > + struct thc63_dev *thc63 = to_thc63(bridge);
> > +
> > + return drm_bridge_attach(bridge->encoder, thc63->next, bridge);
> > +}
> > +
> > +static void thc63_enable(struct drm_bridge *bridge)
> > +{
> > + struct thc63_dev *thc63 = to_thc63(bridge);
> > + struct regulator *vcc;
> > + int i;
>
> unsigned int i;
>
> > +
> > + for (i = 0; i < ARRAY_SIZE(thc63->vccs); i++) {
> > + vcc = thc63->vccs[i];
> > + if (!vcc)
> > + continue;
> > +
> > + if (regulator_enable(vcc))
> > + goto error_vcc_enable;
> > + }
> > +
> > + if (thc63->pdwn)
> > + gpiod_set_value(thc63->pdwn, 0);
> > +
> > + if (thc63->oe)
> > + gpiod_set_value(thc63->oe, 1);
> > +
> > + return;
> > +
> > +error_vcc_enable:
> > + dev_err(thc63->dev, "Failed to enable regulator %s\n",
> > + thc63_reg_names[i]);
> > +
> > + for (i = i - 1; i >= 0; i--) {
> > + vcc = thc63->vccs[i];
> > + if (!vcc)
> > + continue;
> > +
> > + regulator_disable(vcc);
> > + }
> > +}
> > +
> > +static void thc63_disable(struct drm_bridge *bridge)
> > +{
> > + struct thc63_dev *thc63 = to_thc63(bridge);
> > + struct regulator *vcc;
> > + int i;
> > +
> > + if (thc63->oe)
> > + gpiod_set_value(thc63->oe, 0);
> > +
> > + if (thc63->pdwn)
> > + gpiod_set_value(thc63->pdwn, 1);
> > +
> > + for (i = ARRAY_SIZE(thc63->vccs) - 1; i >= 0; i--) {
> > + vcc = thc63->vccs[i];
> > + if (!vcc)
> > + continue;
> > +
> > + if (regulator_disable(vcc))
> > + dev_dbg(thc63->dev,
> > + "Failed to disable regulator %s\n",
> > + thc63_reg_names[i]);
> > + }
> > +}
> > +
> > +struct drm_bridge_funcs thc63_bridge_func = {
>
> Apparently you missed all my comments from v2 review.
>
I did not :)
v6 was already out when you commented on v2..
> If you like to avoid non-NULL function pointers to the void, please
> use static const storage qualifier.
>
> --
> With best wishes,
> Vladimir
WARNING: multiple messages have this Message-ID (diff)
From: jacopo mondi <jacopo@jmondi.org>
To: Vladimir Zapolskiy <vladimir_zapolskiy@mentor.com>
Cc: mark.rutland@arm.com, devicetree@vger.kernel.org,
sergei.shtylyov@cogentembedded.com, airlied@linux.ie,
dri-devel@lists.freedesktop.org, magnus.damm@gmail.com,
linux-kernel@vger.kernel.org, robh+dt@kernel.org,
linux-renesas-soc@vger.kernel.org, horms@verge.net.au,
Jacopo Mondi <jacopo+renesas@jmondi.org>,
Laurent.pinchart@ideasonboard.com, niklas.soderlund@ragnatech.se,
geert@linux-m68k.org
Subject: Re: [PATCH v6 2/3] drm: bridge: Add thc63lvd1024 LVDS decoder driver
Date: Tue, 27 Mar 2018 09:30:27 +0200 [thread overview]
Message-ID: <20180327073027.GH27746@w540> (raw)
In-Reply-To: <30381869-9bc8-b6aa-a37a-598d9c8f280d@mentor.com>
HI Vladimir,
On Tue, Mar 27, 2018 at 09:24:28AM +0300, Vladimir Zapolskiy wrote:
> Hi Jacopo,
>
> On 03/16/2018 05:16 PM, Jacopo Mondi wrote:
> > Add DRM bridge driver for Thine THC63LVD1024 LVDS to digital parallel
> > output converter.
> >
> > Signed-off-by: Jacopo Mondi <jacopo+renesas@jmondi.org>
> > Reviewed-by: Andrzej Hajda <a.hajda@samsung.com>
> > Reviewed-by: Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se>
> > ---
> > drivers/gpu/drm/bridge/Kconfig | 6 +
> > drivers/gpu/drm/bridge/Makefile | 1 +
> > drivers/gpu/drm/bridge/thc63lvd1024.c | 255 ++++++++++++++++++++++++++++++++++
> > 3 files changed, 262 insertions(+)
> > create mode 100644 drivers/gpu/drm/bridge/thc63lvd1024.c
> >
> > diff --git a/drivers/gpu/drm/bridge/Kconfig b/drivers/gpu/drm/bridge/Kconfig
> > index 3b99d5a..5815a20 100644
> > --- a/drivers/gpu/drm/bridge/Kconfig
> > +++ b/drivers/gpu/drm/bridge/Kconfig
> > @@ -92,6 +92,12 @@ config DRM_SII9234
> > It is an I2C driver, that detects connection of MHL bridge
> > and starts encapsulation of HDMI signal.
> >
> > +config DRM_THINE_THC63LVD1024
> > + tristate "Thine THC63LVD1024 LVDS decoder bridge"
> > + depends on OF
> > + ---help---
> > + Thine THC63LVD1024 LVDS/parallel converter driver.
> > +
> > config DRM_TOSHIBA_TC358767
> > tristate "Toshiba TC358767 eDP bridge"
> > depends on OF
> > diff --git a/drivers/gpu/drm/bridge/Makefile b/drivers/gpu/drm/bridge/Makefile
> > index 373eb28..fd90b16 100644
> > --- a/drivers/gpu/drm/bridge/Makefile
> > +++ b/drivers/gpu/drm/bridge/Makefile
> > @@ -8,6 +8,7 @@ obj-$(CONFIG_DRM_PARADE_PS8622) += parade-ps8622.o
> > obj-$(CONFIG_DRM_SIL_SII8620) += sil-sii8620.o
> > obj-$(CONFIG_DRM_SII902X) += sii902x.o
> > obj-$(CONFIG_DRM_SII9234) += sii9234.o
> > +obj-$(CONFIG_DRM_THINE_THC63LVD1024) += thc63lvd1024.o
> > obj-$(CONFIG_DRM_TOSHIBA_TC358767) += tc358767.o
> > obj-$(CONFIG_DRM_ANALOGIX_DP) += analogix/
> > obj-$(CONFIG_DRM_I2C_ADV7511) += adv7511/
> > diff --git a/drivers/gpu/drm/bridge/thc63lvd1024.c b/drivers/gpu/drm/bridge/thc63lvd1024.c
> > new file mode 100644
> > index 0000000..02a54c2
> > --- /dev/null
> > +++ b/drivers/gpu/drm/bridge/thc63lvd1024.c
> > @@ -0,0 +1,255 @@
> > +// SPDX-License-Identifier: GPL-2.0
> > +/*
> > + * THC63LVD1024 LVDS to parallel data DRM bridge driver.
> > + *
> > + * Copyright (C) 2018 Jacopo Mondi <jacopo+renesas@jmondi.org>
> > + */
> > +
> > +#include <drm/drmP.h>
> > +#include <drm/drm_bridge.h>
> > +#include <drm/drm_panel.h>
> > +
> > +#include <linux/gpio/consumer.h>
> > +#include <linux/of_graph.h>
> > +#include <linux/regulator/consumer.h>
> > +
> > +enum {
> > + THC63_LVDS_IN0,
> > + THC63_LVDS_IN1,
> > + THC63_DIGITAL_OUT0,
> > + THC63_DIGITAL_OUT1,
> > +};
> > +
> > +static const char * const thc63_reg_names[] = {
> > + "vcc", "lvcc", "pvcc", "cvcc",
> > +};
> > +
> > +struct thc63_dev {
> > + struct device *dev;
> > +
> > + struct regulator *vccs[ARRAY_SIZE(thc63_reg_names)];
> > +
> > + struct gpio_desc *pdwn;
> > + struct gpio_desc *oe;
> > +
> > + struct drm_bridge bridge;
> > + struct drm_bridge *next;
> > +};
> > +
> > +static inline struct thc63_dev *to_thc63(struct drm_bridge *bridge)
> > +{
> > + return container_of(bridge, struct thc63_dev, bridge);
> > +}
> > +
> > +static int thc63_attach(struct drm_bridge *bridge)
> > +{
> > + struct thc63_dev *thc63 = to_thc63(bridge);
> > +
> > + return drm_bridge_attach(bridge->encoder, thc63->next, bridge);
> > +}
> > +
> > +static void thc63_enable(struct drm_bridge *bridge)
> > +{
> > + struct thc63_dev *thc63 = to_thc63(bridge);
> > + struct regulator *vcc;
> > + int i;
>
> unsigned int i;
>
> > +
> > + for (i = 0; i < ARRAY_SIZE(thc63->vccs); i++) {
> > + vcc = thc63->vccs[i];
> > + if (!vcc)
> > + continue;
> > +
> > + if (regulator_enable(vcc))
> > + goto error_vcc_enable;
> > + }
> > +
> > + if (thc63->pdwn)
> > + gpiod_set_value(thc63->pdwn, 0);
> > +
> > + if (thc63->oe)
> > + gpiod_set_value(thc63->oe, 1);
> > +
> > + return;
> > +
> > +error_vcc_enable:
> > + dev_err(thc63->dev, "Failed to enable regulator %s\n",
> > + thc63_reg_names[i]);
> > +
> > + for (i = i - 1; i >= 0; i--) {
> > + vcc = thc63->vccs[i];
> > + if (!vcc)
> > + continue;
> > +
> > + regulator_disable(vcc);
> > + }
> > +}
> > +
> > +static void thc63_disable(struct drm_bridge *bridge)
> > +{
> > + struct thc63_dev *thc63 = to_thc63(bridge);
> > + struct regulator *vcc;
> > + int i;
> > +
> > + if (thc63->oe)
> > + gpiod_set_value(thc63->oe, 0);
> > +
> > + if (thc63->pdwn)
> > + gpiod_set_value(thc63->pdwn, 1);
> > +
> > + for (i = ARRAY_SIZE(thc63->vccs) - 1; i >= 0; i--) {
> > + vcc = thc63->vccs[i];
> > + if (!vcc)
> > + continue;
> > +
> > + if (regulator_disable(vcc))
> > + dev_dbg(thc63->dev,
> > + "Failed to disable regulator %s\n",
> > + thc63_reg_names[i]);
> > + }
> > +}
> > +
> > +struct drm_bridge_funcs thc63_bridge_func = {
>
> Apparently you missed all my comments from v2 review.
>
I did not :)
v6 was already out when you commented on v2..
> If you like to avoid non-NULL function pointers to the void, please
> use static const storage qualifier.
>
> --
> With best wishes,
> Vladimir
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
next prev parent reply other threads:[~2018-03-27 7:30 UTC|newest]
Thread overview: 58+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-03-16 15:16 [PATCH v6 0/3] drm: Add Thine THC63LVD1024 LVDS decoder bridge Jacopo Mondi
2018-03-16 15:16 ` [PATCH v6 1/3] dt-bindings: display: bridge: Document THC63LVD1024 LVDS decoder Jacopo Mondi
2018-03-20 12:43 ` Laurent Pinchart
2018-03-20 12:43 ` Laurent Pinchart
2018-03-26 12:08 ` jacopo mondi
2018-03-26 22:22 ` Rob Herring
2018-03-26 22:22 ` Rob Herring
2018-03-27 6:15 ` Vladimir Zapolskiy
2018-03-27 6:15 ` Vladimir Zapolskiy
2018-03-27 6:15 ` Vladimir Zapolskiy
2018-03-27 7:12 ` Andrzej Hajda
2018-03-27 7:12 ` Andrzej Hajda
2018-03-27 7:12 ` Andrzej Hajda
2018-03-27 7:33 ` jacopo mondi
2018-03-27 7:33 ` jacopo mondi
2018-03-27 8:27 ` Sergei Shtylyov
2018-03-27 8:27 ` Sergei Shtylyov
2018-03-27 8:30 ` Vladimir Zapolskiy
2018-03-27 8:30 ` Vladimir Zapolskiy
2018-03-27 8:57 ` jacopo mondi
2018-03-27 8:57 ` jacopo mondi
2018-03-27 9:37 ` Vladimir Zapolskiy
2018-03-27 9:37 ` Vladimir Zapolskiy
2018-03-27 10:10 ` jacopo mondi
2018-03-27 10:10 ` jacopo mondi
2018-03-27 11:03 ` Vladimir Zapolskiy
2018-03-27 11:03 ` Vladimir Zapolskiy
2018-03-29 10:02 ` jacopo mondi
2018-04-02 13:36 ` Laurent Pinchart
2018-04-02 13:36 ` Laurent Pinchart
2018-04-03 12:33 ` jacopo mondi
2018-04-03 12:33 ` jacopo mondi
2018-04-05 16:33 ` Rob Herring
2018-04-05 16:33 ` Rob Herring
2018-04-05 18:53 ` Laurent Pinchart
2018-04-05 18:53 ` Laurent Pinchart
2018-04-05 21:27 ` Rob Herring
2018-03-16 15:16 ` [PATCH v6 2/3] drm: bridge: Add thc63lvd1024 LVDS decoder driver Jacopo Mondi
2018-03-20 13:00 ` Laurent Pinchart
2018-03-20 13:00 ` Laurent Pinchart
2018-03-27 6:24 ` Vladimir Zapolskiy
2018-03-27 6:24 ` Vladimir Zapolskiy
2018-03-27 7:28 ` Andrzej Hajda
2018-03-27 7:28 ` Andrzej Hajda
2018-03-27 7:36 ` Geert Uytterhoeven
2018-03-27 8:36 ` Andrzej Hajda
2018-03-27 8:36 ` Andrzej Hajda
2018-03-27 9:06 ` Geert Uytterhoeven
2018-03-27 9:06 ` Geert Uytterhoeven
2018-03-27 9:57 ` Vladimir Zapolskiy
2018-03-27 9:57 ` Vladimir Zapolskiy
2018-03-27 7:30 ` jacopo mondi [this message]
2018-03-27 7:30 ` jacopo mondi
2018-03-16 15:16 ` [PATCH v6 3/3] arm64: dts: renesas: Add LVDS decoder to R-Car V3M Eagle Jacopo Mondi
2018-03-20 13:01 ` Laurent Pinchart
2018-03-20 13:01 ` Laurent Pinchart
2018-03-27 6:27 ` Vladimir Zapolskiy
2018-03-27 6:27 ` Vladimir Zapolskiy
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=20180327073027.GH27746@w540 \
--to=jacopo@jmondi.org \
--cc=Laurent.pinchart@ideasonboard.com \
--cc=a.hajda@samsung.com \
--cc=airlied@linux.ie \
--cc=architt@codeaurora.org \
--cc=devicetree@vger.kernel.org \
--cc=dri-devel@lists.freedesktop.org \
--cc=geert@linux-m68k.org \
--cc=horms@verge.net.au \
--cc=jacopo+renesas@jmondi.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-renesas-soc@vger.kernel.org \
--cc=magnus.damm@gmail.com \
--cc=mark.rutland@arm.com \
--cc=niklas.soderlund@ragnatech.se \
--cc=robh+dt@kernel.org \
--cc=sergei.shtylyov@cogentembedded.com \
--cc=vladimir_zapolskiy@mentor.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.