Message ID | 1352469878-4532-1-git-send-email-thierry.reding@avionic-design.de (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Friday, November 09, 2012 11:05 PM Thierry Reding wrote > > This function finds the struct backlight_device for a given device tree > node. A dummy function is provided so that it safely compiles out if OF > support is disabled. > > Signed-off-by: Thierry Reding <thierry.reding@avionic-design.de> CC'ed Andrew Morton Hi Thierry Reding, The patch itself looks good. Could you explain when this API is used? Thank you. Best regards, Jingoo Han > --- > drivers/video/backlight/backlight.c | 17 +++++++++++++++++ > include/linux/backlight.h | 10 ++++++++++ > 2 files changed, 27 insertions(+) > > diff --git a/drivers/video/backlight/backlight.c b/drivers/video/backlight/backlight.c > index 297db2f..0d1ed4f 100644 > --- a/drivers/video/backlight/backlight.c > +++ b/drivers/video/backlight/backlight.c > @@ -370,6 +370,23 @@ void backlight_device_unregister(struct backlight_device *bd) > } > EXPORT_SYMBOL(backlight_device_unregister); > > +#if IS_ENABLED(CONFIG_OF) > +static int of_parent_match(struct device *dev, void *data) > +{ > + return dev->parent && dev->parent->of_node == data; > +} > + > +struct backlight_device *of_find_backlight_by_node(struct device_node *node) > +{ > + struct device *dev; > + > + dev = class_find_device(backlight_class, NULL, node, of_parent_match); > + > + return dev ? to_backlight_device(dev) : NULL; > +} > +EXPORT_SYMBOL(of_find_backlight_by_node); > +#endif > + > static void __exit backlight_class_exit(void) > { > class_destroy(backlight_class); > diff --git a/include/linux/backlight.h b/include/linux/backlight.h > index 5ffc6dd..11840e9 100644 > --- a/include/linux/backlight.h > +++ b/include/linux/backlight.h > @@ -134,4 +134,14 @@ struct generic_bl_info { > void (*kick_battery)(void); > }; > > +#if IS_ENABLED(CONFIG_OF) > +struct backlight_device *of_find_backlight_by_node(struct device_node *node); > +#else > +static inline struct backlight_device * > +of_find_backlight_by_node(struct device_node *node) > +{ > + return NULL; > +} > +#endif > + > #endif > -- > 1.8.0 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-fbdev" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe linux-fbdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Thu, Nov 15, 2012 at 10:30:11AM +0900, Jingoo Han wrote: > On Friday, November 09, 2012 11:05 PM Thierry Reding wrote > > > > This function finds the struct backlight_device for a given device tree > > node. A dummy function is provided so that it safely compiles out if OF > > support is disabled. > > > > Signed-off-by: Thierry Reding <thierry.reding@avionic-design.de> > > CC'ed Andrew Morton Yes, the backlight subsystem isn't very well maintained, so I should have added Andrew in the first place. Thanks. > > Hi Thierry Reding, > > The patch itself looks good. > Could you explain when this API is used? > Thank you. I use this for the upcoming Tegra DRM driver in order to hook up the backlight with the DRM driver via DT to allow switching off the backlight when the corresponding DRM output is switched of using DPMS. Basically what you have is something like this in the device tree: display { ... backlight = <&backlight>; ... } Then you call something along these lines: np = of_parse_phandle(display, "backlight", 0); if (np) { backlight = of_find_backlight_by_node(np); of_node_put(np); } And then use the standard backlight API on the returned pointer. Thierry
On Thursday, November 15, 2012 3:52 PM Thierry Reding wrote > On Thu, Nov 15, 2012 at 10:30:11AM +0900, Jingoo Han wrote: > > On Friday, November 09, 2012 11:05 PM Thierry Reding wrote > > > > > > This function finds the struct backlight_device for a given device tree > > > node. A dummy function is provided so that it safely compiles out if OF > > > support is disabled. > > > > > > Signed-off-by: Thierry Reding <thierry.reding@avionic-design.de> > > > > CC'ed Andrew Morton > > Yes, the backlight subsystem isn't very well maintained, so I should > have added Andrew in the first place. Thanks. > > > > > Hi Thierry Reding, > > > > The patch itself looks good. > > Could you explain when this API is used? > > Thank you. > > I use this for the upcoming Tegra DRM driver in order to hook up the > backlight with the DRM driver via DT to allow switching off the > backlight when the corresponding DRM output is switched of using DPMS. > Basically what you have is something like this in the device tree: > > display { > ... > > backlight = <&backlight>; > > ... > } > > Then you call something along these lines: > > np = of_parse_phandle(display, "backlight", 0); > if (np) { > backlight = of_find_backlight_by_node(np); > of_node_put(np); > } > > And then use the standard backlight API on the returned pointer. OK, I see how this API can be called. AS you mentioned, it will allow Tegra DRM driver to use the backlight driver. Acked-by: Jingoo Han <jg1.han@samsung.com> Best regards, Jingoo Han > > Thierry -- To unsubscribe from this list: send the line "unsubscribe linux-fbdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Thu, Nov 15, 2012 at 05:58:35PM +0900, Jingoo Han wrote: > On Thursday, November 15, 2012 3:52 PM Thierry Reding wrote > > On Thu, Nov 15, 2012 at 10:30:11AM +0900, Jingoo Han wrote: > > > On Friday, November 09, 2012 11:05 PM Thierry Reding wrote > > > > > > > > This function finds the struct backlight_device for a given device tree > > > > node. A dummy function is provided so that it safely compiles out if OF > > > > support is disabled. > > > > > > > > Signed-off-by: Thierry Reding <thierry.reding@avionic-design.de> > > > > > > CC'ed Andrew Morton > > > > Yes, the backlight subsystem isn't very well maintained, so I should > > have added Andrew in the first place. Thanks. > > > > > > > > Hi Thierry Reding, > > > > > > The patch itself looks good. > > > Could you explain when this API is used? > > > Thank you. > > > > I use this for the upcoming Tegra DRM driver in order to hook up the > > backlight with the DRM driver via DT to allow switching off the > > backlight when the corresponding DRM output is switched of using DPMS. > > Basically what you have is something like this in the device tree: > > > > display { > > ... > > > > backlight = <&backlight>; > > > > ... > > } > > > > Then you call something along these lines: > > > > np = of_parse_phandle(display, "backlight", 0); > > if (np) { > > backlight = of_find_backlight_by_node(np); > > of_node_put(np); > > } > > > > And then use the standard backlight API on the returned pointer. > > OK, I see how this API can be called. > AS you mentioned, it will allow Tegra DRM driver to use > the backlight driver. > > Acked-by: Jingoo Han <jg1.han@samsung.com> Andrew, any chance we could still get this in for the 3.8 merge window? Thierry
diff --git a/drivers/video/backlight/backlight.c b/drivers/video/backlight/backlight.c index 297db2f..0d1ed4f 100644 --- a/drivers/video/backlight/backlight.c +++ b/drivers/video/backlight/backlight.c @@ -370,6 +370,23 @@ void backlight_device_unregister(struct backlight_device *bd) } EXPORT_SYMBOL(backlight_device_unregister); +#if IS_ENABLED(CONFIG_OF) +static int of_parent_match(struct device *dev, void *data) +{ + return dev->parent && dev->parent->of_node == data; +} + +struct backlight_device *of_find_backlight_by_node(struct device_node *node) +{ + struct device *dev; + + dev = class_find_device(backlight_class, NULL, node, of_parent_match); + + return dev ? to_backlight_device(dev) : NULL; +} +EXPORT_SYMBOL(of_find_backlight_by_node); +#endif + static void __exit backlight_class_exit(void) { class_destroy(backlight_class); diff --git a/include/linux/backlight.h b/include/linux/backlight.h index 5ffc6dd..11840e9 100644 --- a/include/linux/backlight.h +++ b/include/linux/backlight.h @@ -134,4 +134,14 @@ struct generic_bl_info { void (*kick_battery)(void); }; +#if IS_ENABLED(CONFIG_OF) +struct backlight_device *of_find_backlight_by_node(struct device_node *node); +#else +static inline struct backlight_device * +of_find_backlight_by_node(struct device_node *node) +{ + return NULL; +} +#endif + #endif
This function finds the struct backlight_device for a given device tree node. A dummy function is provided so that it safely compiles out if OF support is disabled. Signed-off-by: Thierry Reding <thierry.reding@avionic-design.de> --- drivers/video/backlight/backlight.c | 17 +++++++++++++++++ include/linux/backlight.h | 10 ++++++++++ 2 files changed, 27 insertions(+)