From: Grant Likely <grant.likely@secretlab.ca> To: Jean-Christophe Plagniol-Villard <plagnioj@jcrosoft.com> Cc: Mark Rutland <mark.rutland@arm.com>, devicetree@vger.kernel.org, Jingoo Han <jg1.han@samsung.com>, Sascha Hauer <kernel@pengutronix.de>, Pawel Moll <pawel.moll@arm.com>, Stephen Warren <swarren@wwwdotorg.org>, Ian Campbell <ijc+devicetree@hellion.org.uk>, Rob Herring <rob.herring@calxeda.com>, Denis Carikli <denis@eukrea.com>, Richard Purdie <rpurdie@rpsys.net>, Laurent Pinchart <laurent.pinchart@ideasonboard.com>, linux-arm-kernel@lists.infradead.org Subject: Re: [PATCHv4] video: backlight: gpio-backlight: Add DT support. Date: Fri, 25 Oct 2013 21:10:06 +0100 [thread overview] Message-ID: <20131025201006.2D999C405AB@trevor.secretlab.ca> (raw) In-Reply-To: <1382346813-8449-1-git-send-email-denis@eukrea.com> [-- Attachment #1: Type: text/plain, Size: 6439 bytes --] On Mon, 21 Oct 2013 11:13:33 +0200, Denis Carikli <denis@eukrea.com> wrote: > Cc: Richard Purdie <rpurdie@rpsys.net> > Cc: Jingoo Han <jg1.han@samsung.com> > Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com> > Cc: Rob Herring <rob.herring@calxeda.com> > Cc: Pawel Moll <pawel.moll@arm.com> > Cc: Mark Rutland <mark.rutland@arm.com> > Cc: Stephen Warren <swarren@wwwdotorg.org> > Cc: Ian Campbell <ijc+devicetree@hellion.org.uk> > Cc: devicetree@vger.kernel.org > Cc: Sascha Hauer <kernel@pengutronix.de> > Cc: linux-arm-kernel@lists.infradead.org > Cc: Lothar WaÃmann <LW@KARO-electronics.de> > Cc: Jean-Christophe Plagniol-Villard <plagnioj@jcrosoft.com> > Cc: Eric Bénard <eric@eukrea.com> > Signed-off-by: Denis Carikli <denis@eukrea.com> > --- > ChangeLog v3->v4: > - The default-brightness property is now optional, it defaults to 1 if not set. > - def_value int becomes an u32. > - gbl->def_value was set to pdata->def_value in pdata mode to avoid an extra > check. > --- > .../bindings/video/backlight/gpio-backlight.txt | 20 ++++++ > drivers/video/backlight/gpio_backlight.c | 69 ++++++++++++++++++-- > 2 files changed, 82 insertions(+), 7 deletions(-) > create mode 100644 Documentation/devicetree/bindings/video/backlight/gpio-backlight.txt > > diff --git a/Documentation/devicetree/bindings/video/backlight/gpio-backlight.txt b/Documentation/devicetree/bindings/video/backlight/gpio-backlight.txt > new file mode 100644 > index 0000000..3474d4a > --- /dev/null > +++ b/Documentation/devicetree/bindings/video/backlight/gpio-backlight.txt > @@ -0,0 +1,20 @@ > +gpio-backlight bindings > + > +Required properties: > + - compatible: "gpio-backlight" > + - gpios: describes the gpio that is used for enabling/disabling the backlight > + (see GPIO binding[0] for more details). > + > +Optional properties: > + - default-brightness-level: the default brightness level (can be 0(off) or > + 1(on) since GPIOs only support theses levels). Seems odd to call it brightness since it can only be on or off. Why not call it "default-state" or and empty bool named "default-on"? Otherwise looks okay to me. g. > + > +[0]: Documentation/devicetree/bindings/gpio/gpio.txt > + > +Example: > + > + backlight { > + compatible = "gpio-backlight"; > + gpios = <&gpio3 4 0>; > + default-brightness-level = <0>; > + }; > diff --git a/drivers/video/backlight/gpio_backlight.c b/drivers/video/backlight/gpio_backlight.c > index 81fb127..248124d 100644 > --- a/drivers/video/backlight/gpio_backlight.c > +++ b/drivers/video/backlight/gpio_backlight.c > @@ -13,6 +13,8 @@ > #include <linux/init.h> > #include <linux/kernel.h> > #include <linux/module.h> > +#include <linux/of.h> > +#include <linux/of_gpio.h> > #include <linux/platform_data/gpio_backlight.h> > #include <linux/platform_device.h> > #include <linux/slab.h> > @@ -23,6 +25,7 @@ struct gpio_backlight { > > int gpio; > int active; > + u32 def_value; > }; > > static int gpio_backlight_update_status(struct backlight_device *bl) > @@ -60,6 +63,41 @@ static const struct backlight_ops gpio_backlight_ops = { > .check_fb = gpio_backlight_check_fb, > }; > > +static int gpio_backlight_probe_dt(struct platform_device *pdev, > + struct gpio_backlight *gbl) > +{ > + struct device_node *np = pdev->dev.of_node; > + enum of_gpio_flags gpio_flags; > + int ret; > + > + gbl->fbdev = NULL; > + gbl->gpio = of_get_gpio_flags(np, 0, &gpio_flags); > + > + gbl->active = (gpio_flags & OF_GPIO_ACTIVE_LOW) ? 0 : 1; > + > + if (gbl->gpio == -EPROBE_DEFER) { > + return ERR_PTR(-EPROBE_DEFER); > + } else if (gbl->gpio < 0) { > + dev_err(&pdev->dev, "Error: gpios is a required parameter.\n"); > + return gbl->gpio; > + } > + > + ret = of_property_read_u32(np, "default-brightness-level", > + &gbl->def_value); > + if (ret < 0) { > + /* The property is optional. */ > + gbl->def_value = 1; > + } > + > + if (gbl->def_value > 1) { > + dev_warn(&pdev->dev, > + "Warning: Invalid default-brightness-level value. Its value can be either 0(off) or 1(on).\n"); > + gbl->def_value = 1; > + } > + > + return 0; > +} > + > static int gpio_backlight_probe(struct platform_device *pdev) > { > struct gpio_backlight_platform_data *pdata = > @@ -67,10 +105,12 @@ static int gpio_backlight_probe(struct platform_device *pdev) > struct backlight_properties props; > struct backlight_device *bl; > struct gpio_backlight *gbl; > + struct device_node *np = pdev->dev.of_node; > int ret; > > - if (!pdata) { > - dev_err(&pdev->dev, "failed to find platform data\n"); > + if (!pdata && !np) { > + dev_err(&pdev->dev, > + "failed to find platform data or device tree node.\n"); > return -ENODEV; > } > > @@ -79,14 +119,22 @@ static int gpio_backlight_probe(struct platform_device *pdev) > return -ENOMEM; > > gbl->dev = &pdev->dev; > - gbl->fbdev = pdata->fbdev; > - gbl->gpio = pdata->gpio; > - gbl->active = pdata->active_low ? 0 : 1; > + > + if (np) { > + ret = gpio_backlight_probe_dt(pdev, gbl); > + if (ret) > + return ret; > + } else { > + gbl->fbdev = pdata->fbdev; > + gbl->gpio = pdata->gpio; > + gbl->active = pdata->active_low ? 0 : 1; > + gbl->def_value = pdata->def_value; > + } > > ret = devm_gpio_request_one(gbl->dev, gbl->gpio, GPIOF_DIR_OUT | > (gbl->active ? GPIOF_INIT_LOW > : GPIOF_INIT_HIGH), > - pdata->name); > + pdata ? pdata->name : "backlight"); > if (ret < 0) { > dev_err(&pdev->dev, "unable to request GPIO\n"); > return ret; > @@ -103,17 +151,24 @@ static int gpio_backlight_probe(struct platform_device *pdev) > return PTR_ERR(bl); > } > > - bl->props.brightness = pdata->def_value; > + bl->props.brightness = gbl->def_value; > + > backlight_update_status(bl); > > platform_set_drvdata(pdev, bl); > return 0; > } > > +static struct of_device_id gpio_backlight_of_match[] = { > + { .compatible = "gpio-backlight" }, > + { /* sentinel */ } > +}; > + > static struct platform_driver gpio_backlight_driver = { > .driver = { > .name = "gpio-backlight", > .owner = THIS_MODULE, > + .of_match_table = of_match_ptr(gpio_backlight_of_match), > }, > .probe = gpio_backlight_probe, > }; > -- > 1.7.9.5 > > > _______________________________________________ > linux-arm-kernel mailing list > linux-arm-kernel@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel [-- Attachment #2: Type: text/plain, Size: 176 bytes --] _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
WARNING: multiple messages have this Message-ID (diff)
From: grant.likely@secretlab.ca (Grant Likely) To: linux-arm-kernel@lists.infradead.org Subject: [PATCHv4] video: backlight: gpio-backlight: Add DT support. Date: Fri, 25 Oct 2013 21:10:06 +0100 [thread overview] Message-ID: <20131025201006.2D999C405AB@trevor.secretlab.ca> (raw) In-Reply-To: <1382346813-8449-1-git-send-email-denis@eukrea.com> On Mon, 21 Oct 2013 11:13:33 +0200, Denis Carikli <denis@eukrea.com> wrote: > Cc: Richard Purdie <rpurdie@rpsys.net> > Cc: Jingoo Han <jg1.han@samsung.com> > Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com> > Cc: Rob Herring <rob.herring@calxeda.com> > Cc: Pawel Moll <pawel.moll@arm.com> > Cc: Mark Rutland <mark.rutland@arm.com> > Cc: Stephen Warren <swarren@wwwdotorg.org> > Cc: Ian Campbell <ijc+devicetree@hellion.org.uk> > Cc: devicetree at vger.kernel.org > Cc: Sascha Hauer <kernel@pengutronix.de> > Cc: linux-arm-kernel at lists.infradead.org > Cc: Lothar Wa??mann <LW@KARO-electronics.de> > Cc: Jean-Christophe Plagniol-Villard <plagnioj@jcrosoft.com> > Cc: Eric B??nard <eric@eukrea.com> > Signed-off-by: Denis Carikli <denis@eukrea.com> > --- > ChangeLog v3->v4: > - The default-brightness property is now optional, it defaults to 1 if not set. > - def_value int becomes an u32. > - gbl->def_value was set to pdata->def_value in pdata mode to avoid an extra > check. > --- > .../bindings/video/backlight/gpio-backlight.txt | 20 ++++++ > drivers/video/backlight/gpio_backlight.c | 69 ++++++++++++++++++-- > 2 files changed, 82 insertions(+), 7 deletions(-) > create mode 100644 Documentation/devicetree/bindings/video/backlight/gpio-backlight.txt > > diff --git a/Documentation/devicetree/bindings/video/backlight/gpio-backlight.txt b/Documentation/devicetree/bindings/video/backlight/gpio-backlight.txt > new file mode 100644 > index 0000000..3474d4a > --- /dev/null > +++ b/Documentation/devicetree/bindings/video/backlight/gpio-backlight.txt > @@ -0,0 +1,20 @@ > +gpio-backlight bindings > + > +Required properties: > + - compatible: "gpio-backlight" > + - gpios: describes the gpio that is used for enabling/disabling the backlight > + (see GPIO binding[0] for more details). > + > +Optional properties: > + - default-brightness-level: the default brightness level (can be 0(off) or > + 1(on) since GPIOs only support theses levels). Seems odd to call it brightness since it can only be on or off. Why not call it "default-state" or and empty bool named "default-on"? Otherwise looks okay to me. g. > + > +[0]: Documentation/devicetree/bindings/gpio/gpio.txt > + > +Example: > + > + backlight { > + compatible = "gpio-backlight"; > + gpios = <&gpio3 4 0>; > + default-brightness-level = <0>; > + }; > diff --git a/drivers/video/backlight/gpio_backlight.c b/drivers/video/backlight/gpio_backlight.c > index 81fb127..248124d 100644 > --- a/drivers/video/backlight/gpio_backlight.c > +++ b/drivers/video/backlight/gpio_backlight.c > @@ -13,6 +13,8 @@ > #include <linux/init.h> > #include <linux/kernel.h> > #include <linux/module.h> > +#include <linux/of.h> > +#include <linux/of_gpio.h> > #include <linux/platform_data/gpio_backlight.h> > #include <linux/platform_device.h> > #include <linux/slab.h> > @@ -23,6 +25,7 @@ struct gpio_backlight { > > int gpio; > int active; > + u32 def_value; > }; > > static int gpio_backlight_update_status(struct backlight_device *bl) > @@ -60,6 +63,41 @@ static const struct backlight_ops gpio_backlight_ops = { > .check_fb = gpio_backlight_check_fb, > }; > > +static int gpio_backlight_probe_dt(struct platform_device *pdev, > + struct gpio_backlight *gbl) > +{ > + struct device_node *np = pdev->dev.of_node; > + enum of_gpio_flags gpio_flags; > + int ret; > + > + gbl->fbdev = NULL; > + gbl->gpio = of_get_gpio_flags(np, 0, &gpio_flags); > + > + gbl->active = (gpio_flags & OF_GPIO_ACTIVE_LOW) ? 0 : 1; > + > + if (gbl->gpio == -EPROBE_DEFER) { > + return ERR_PTR(-EPROBE_DEFER); > + } else if (gbl->gpio < 0) { > + dev_err(&pdev->dev, "Error: gpios is a required parameter.\n"); > + return gbl->gpio; > + } > + > + ret = of_property_read_u32(np, "default-brightness-level", > + &gbl->def_value); > + if (ret < 0) { > + /* The property is optional. */ > + gbl->def_value = 1; > + } > + > + if (gbl->def_value > 1) { > + dev_warn(&pdev->dev, > + "Warning: Invalid default-brightness-level value. Its value can be either 0(off) or 1(on).\n"); > + gbl->def_value = 1; > + } > + > + return 0; > +} > + > static int gpio_backlight_probe(struct platform_device *pdev) > { > struct gpio_backlight_platform_data *pdata = > @@ -67,10 +105,12 @@ static int gpio_backlight_probe(struct platform_device *pdev) > struct backlight_properties props; > struct backlight_device *bl; > struct gpio_backlight *gbl; > + struct device_node *np = pdev->dev.of_node; > int ret; > > - if (!pdata) { > - dev_err(&pdev->dev, "failed to find platform data\n"); > + if (!pdata && !np) { > + dev_err(&pdev->dev, > + "failed to find platform data or device tree node.\n"); > return -ENODEV; > } > > @@ -79,14 +119,22 @@ static int gpio_backlight_probe(struct platform_device *pdev) > return -ENOMEM; > > gbl->dev = &pdev->dev; > - gbl->fbdev = pdata->fbdev; > - gbl->gpio = pdata->gpio; > - gbl->active = pdata->active_low ? 0 : 1; > + > + if (np) { > + ret = gpio_backlight_probe_dt(pdev, gbl); > + if (ret) > + return ret; > + } else { > + gbl->fbdev = pdata->fbdev; > + gbl->gpio = pdata->gpio; > + gbl->active = pdata->active_low ? 0 : 1; > + gbl->def_value = pdata->def_value; > + } > > ret = devm_gpio_request_one(gbl->dev, gbl->gpio, GPIOF_DIR_OUT | > (gbl->active ? GPIOF_INIT_LOW > : GPIOF_INIT_HIGH), > - pdata->name); > + pdata ? pdata->name : "backlight"); > if (ret < 0) { > dev_err(&pdev->dev, "unable to request GPIO\n"); > return ret; > @@ -103,17 +151,24 @@ static int gpio_backlight_probe(struct platform_device *pdev) > return PTR_ERR(bl); > } > > - bl->props.brightness = pdata->def_value; > + bl->props.brightness = gbl->def_value; > + > backlight_update_status(bl); > > platform_set_drvdata(pdev, bl); > return 0; > } > > +static struct of_device_id gpio_backlight_of_match[] = { > + { .compatible = "gpio-backlight" }, > + { /* sentinel */ } > +}; > + > static struct platform_driver gpio_backlight_driver = { > .driver = { > .name = "gpio-backlight", > .owner = THIS_MODULE, > + .of_match_table = of_match_ptr(gpio_backlight_of_match), > }, > .probe = gpio_backlight_probe, > }; > -- > 1.7.9.5 > > > _______________________________________________ > linux-arm-kernel mailing list > linux-arm-kernel at lists.infradead.org > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2013-10-25 20:10 UTC|newest] Thread overview: 50+ messages / expand[flat|nested] mbox.gz Atom feed top 2013-10-18 15:04 [PATCH 01/11] of: add vendor prefix for Eukréa Electromatique Denis Carikli 2013-10-18 15:04 ` Denis Carikli 2013-10-18 15:04 ` [PATCH 02/11] video: imxfb: Introduce regulator support Denis Carikli 2013-10-18 15:04 ` Denis Carikli 2013-10-19 10:45 ` Jean-Christophe PLAGNIOL-VILLARD 2013-10-19 10:45 ` Jean-Christophe PLAGNIOL-VILLARD [not found] ` <20131019104555.GI18477-HVbc7XotTAhnXn40ka+A6Q@public.gmane.org> 2013-10-21 9:13 ` [PATCHv4] video: backlight: gpio-backlight: Add DT support Denis Carikli 2013-10-21 9:13 ` Denis Carikli [not found] ` <1382346813-8449-1-git-send-email-denis-fO0SIAKYzcbQT0dZR+AlfA@public.gmane.org> 2013-10-21 22:48 ` Laurent Pinchart 2013-10-21 22:48 ` Laurent Pinchart 2013-10-22 5:11 ` Jean-Christophe PLAGNIOL-VILLARD 2013-10-22 5:11 ` Jean-Christophe PLAGNIOL-VILLARD 2013-10-22 4:58 ` Jean-Christophe PLAGNIOL-VILLARD 2013-10-22 4:58 ` Jean-Christophe PLAGNIOL-VILLARD [not found] ` <20131022045833.GB17512-HVbc7XotTAhnXn40ka+A6Q@public.gmane.org> 2013-10-22 7:23 ` Thierry Reding 2013-10-22 7:23 ` Thierry Reding 2013-10-22 15:34 ` Jean-Christophe PLAGNIOL-VILLARD 2013-10-22 15:34 ` Jean-Christophe PLAGNIOL-VILLARD [not found] ` <20131022153445.GD17512-HVbc7XotTAhnXn40ka+A6Q@public.gmane.org> 2013-10-22 20:01 ` Thierry Reding 2013-10-22 20:01 ` Thierry Reding 2013-10-23 13:42 ` Jean-Christophe PLAGNIOL-VILLARD 2013-10-23 13:42 ` Jean-Christophe PLAGNIOL-VILLARD [not found] ` <20131023134236.GE17512-HVbc7XotTAhnXn40ka+A6Q@public.gmane.org> 2013-10-23 16:49 ` Stephen Warren 2013-10-23 16:49 ` Stephen Warren [not found] ` <5267FE02.6000001-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org> 2013-10-23 20:08 ` Thierry Reding 2013-10-23 20:08 ` Thierry Reding 2013-10-23 16:51 ` Stephen Warren 2013-10-23 16:51 ` Stephen Warren [not found] ` <5267FE81.3070201-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org> 2013-10-23 20:20 ` Thierry Reding 2013-10-23 20:20 ` Thierry Reding 2013-10-23 22:38 ` Laurent Pinchart 2013-10-23 22:38 ` Laurent Pinchart 2013-10-24 11:05 ` Thierry Reding 2013-10-24 11:05 ` Thierry Reding [not found] ` <20131024110524.GB11296-AwZRO8vwLAwmlAP/+Wk3EA@public.gmane.org> 2013-10-25 13:57 ` Laurent Pinchart 2013-10-25 13:57 ` Laurent Pinchart 2013-10-31 23:44 ` Jingoo Han 2013-10-31 23:44 ` Jingoo Han [not found] ` <003701ced693$2f856150$8e9023f0$%han-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org> 2013-11-01 9:57 ` Thierry Reding 2013-11-01 9:57 ` Thierry Reding [not found] ` <20131101095754.GJ27864-AwZRO8vwLAwmlAP/+Wk3EA@public.gmane.org> 2013-11-04 0:20 ` Jingoo Han 2013-11-04 0:20 ` Jingoo Han 2013-10-31 23:37 ` Jingoo Han 2013-10-31 23:37 ` Jingoo Han [not found] ` <001e01ced692$267a6d90$736f48b0$%han-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org> 2013-11-01 10:13 ` Thierry Reding 2013-11-01 10:13 ` Thierry Reding [not found] ` <20131101101346.GK27864-AwZRO8vwLAwmlAP/+Wk3EA@public.gmane.org> 2013-11-06 0:08 ` Laurent Pinchart 2013-11-06 0:08 ` Laurent Pinchart 2013-10-25 20:10 ` Grant Likely [this message] 2013-10-25 20:10 ` Grant Likely
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=20131025201006.2D999C405AB@trevor.secretlab.ca \ --to=grant.likely@secretlab.ca \ --cc=denis@eukrea.com \ --cc=devicetree@vger.kernel.org \ --cc=ijc+devicetree@hellion.org.uk \ --cc=jg1.han@samsung.com \ --cc=kernel@pengutronix.de \ --cc=laurent.pinchart@ideasonboard.com \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=mark.rutland@arm.com \ --cc=pawel.moll@arm.com \ --cc=plagnioj@jcrosoft.com \ --cc=rob.herring@calxeda.com \ --cc=rpurdie@rpsys.net \ --cc=swarren@wwwdotorg.org \ /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: linkBe 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.