From: Denis Carikli <denis-fO0SIAKYzcbQT0dZR+AlfA@public.gmane.org> To: Jean-Christophe Plagniol-Villard <plagnioj-sclMFOaUSTBWk0Htik3J/w@public.gmane.org> Cc: "Sascha Hauer" <kernel-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org, "Eric Bénard" <eric-fO0SIAKYzcbQT0dZR+AlfA@public.gmane.org>, "Denis Carikli" <denis-fO0SIAKYzcbQT0dZR+AlfA@public.gmane.org>, "Richard Purdie" <rpurdie-Fm38FmjxZ/leoWH0uzbU5w@public.gmane.org>, "Jingoo Han" <jg1.han-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>, "Laurent Pinchart" <laurent.pinchart-ryLnwIuWjnjg/C1BVhZhaw@public.gmane.org>, "Rob Herring" <rob.herring-bsGFqQB8/DxBDgjK7y7TUQ@public.gmane.org>, "Pawel Moll" <pawel.moll-5wv7dgnIgG8@public.gmane.org>, "Mark Rutland" <mark.rutland-5wv7dgnIgG8@public.gmane.org>, "Stephen Warren" <swarren-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>, "Ian Campbell" <ijc+devicetree-KcIKpvwj1kUDXYZnReoRVg@public.gmane.org>, devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, "Lothar Waßmann" <LW-bxm8fMRDkQLDiMYJYoSAnRvVK+yQ3ZXh@public.gmane.org> Subject: [PATCHv4] video: backlight: gpio-backlight: Add DT support. Date: Mon, 21 Oct 2013 11:13:33 +0200 [thread overview] Message-ID: <1382346813-8449-1-git-send-email-denis@eukrea.com> (raw) In-Reply-To: <20131019104555.GI18477-HVbc7XotTAhnXn40ka+A6Q@public.gmane.org> Cc: Richard Purdie <rpurdie-Fm38FmjxZ/leoWH0uzbU5w@public.gmane.org> Cc: Jingoo Han <jg1.han-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org> Cc: Laurent Pinchart <laurent.pinchart-ryLnwIuWjnjg/C1BVhZhaw@public.gmane.org> Cc: Rob Herring <rob.herring-bsGFqQB8/DxBDgjK7y7TUQ@public.gmane.org> Cc: Pawel Moll <pawel.moll-5wv7dgnIgG8@public.gmane.org> Cc: Mark Rutland <mark.rutland-5wv7dgnIgG8@public.gmane.org> Cc: Stephen Warren <swarren-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org> Cc: Ian Campbell <ijc+devicetree-KcIKpvwj1kUDXYZnReoRVg@public.gmane.org> Cc: devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org Cc: Sascha Hauer <kernel-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org> Cc: linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org Cc: Lothar Waßmann <LW-bxm8fMRDkQLDiMYJYoSAnRvVK+yQ3ZXh@public.gmane.org> Cc: Jean-Christophe Plagniol-Villard <plagnioj-sclMFOaUSTBWk0Htik3J/w@public.gmane.org> Cc: Eric Bénard <eric-fO0SIAKYzcbQT0dZR+AlfA@public.gmane.org> Signed-off-by: Denis Carikli <denis-fO0SIAKYzcbQT0dZR+AlfA@public.gmane.org> --- 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). + +[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 -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html
WARNING: multiple messages have this Message-ID (diff)
From: denis@eukrea.com (Denis Carikli) To: linux-arm-kernel@lists.infradead.org Subject: [PATCHv4] video: backlight: gpio-backlight: Add DT support. Date: Mon, 21 Oct 2013 11:13:33 +0200 [thread overview] Message-ID: <1382346813-8449-1-git-send-email-denis@eukrea.com> (raw) In-Reply-To: <20131019104555.GI18477@ns203013.ovh.net> 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). + +[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
next prev parent reply other threads:[~2013-10-21 9:13 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 ` Denis Carikli [this message] 2013-10-21 9:13 ` [PATCHv4] video: backlight: gpio-backlight: Add DT support 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 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=1382346813-8449-1-git-send-email-denis@eukrea.com \ --to=denis-fo0siakyzcbqt0dzr+alfa@public.gmane.org \ --cc=LW-bxm8fMRDkQLDiMYJYoSAnRvVK+yQ3ZXh@public.gmane.org \ --cc=devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \ --cc=eric-fO0SIAKYzcbQT0dZR+AlfA@public.gmane.org \ --cc=ijc+devicetree-KcIKpvwj1kUDXYZnReoRVg@public.gmane.org \ --cc=jg1.han-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org \ --cc=kernel-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org \ --cc=laurent.pinchart-ryLnwIuWjnjg/C1BVhZhaw@public.gmane.org \ --cc=linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org \ --cc=mark.rutland-5wv7dgnIgG8@public.gmane.org \ --cc=pawel.moll-5wv7dgnIgG8@public.gmane.org \ --cc=plagnioj-sclMFOaUSTBWk0Htik3J/w@public.gmane.org \ --cc=rob.herring-bsGFqQB8/DxBDgjK7y7TUQ@public.gmane.org \ --cc=rpurdie-Fm38FmjxZ/leoWH0uzbU5w@public.gmane.org \ --cc=swarren-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.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.