<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>i.MX ProcessorsのトピックRe: Brightness Control in iMX6q</title>
    <link>https://community.nxp.com/t5/i-MX-Processors/Brightness-Control-in-iMX6q/m-p/1041375#M153419</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi&amp;nbsp; Igor,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks for your quick reply, i saw that even in Toradex also but no luck,&lt;/P&gt;&lt;P&gt;any changes in need in driver, because i am getting the pwm as 0,&lt;/P&gt;&lt;P&gt;and i made small changes in code&amp;nbsp;&lt;/P&gt;&lt;P&gt;====================================================================&lt;/P&gt;&lt;P&gt;static int compute_duty_cycle(struct pwm_bl_data *pb, int brightness)&lt;BR /&gt;{&lt;BR /&gt; unsigned int lth = pb-&amp;gt;lth_brightness;&lt;BR /&gt; int duty_cycle;&lt;BR /&gt; printk("INSIDE DUTY CYCLE \n\n\n");&lt;BR /&gt; printk("lth Brightness :%d \n\n\n\n",lth);&lt;BR /&gt; printk("period : %d \n\n\n\n",pb-&amp;gt;period);&lt;BR /&gt; if (pb-&amp;gt;levels)&lt;BR /&gt; { &lt;BR /&gt; duty_cycle = pb-&amp;gt;levels[brightness];&lt;BR /&gt; printk("DC1 : %d \n\n\n",duty_cycle);&lt;BR /&gt; }&lt;BR /&gt; else&lt;BR /&gt; {&lt;BR /&gt; duty_cycle = brightness;&lt;BR /&gt; printk("DC2 : %d\n\n\n",duty_cycle);&lt;BR /&gt; printk("DC Return : %d\n\n\n",(duty_cycle * (pb-&amp;gt;period - lth) / pb-&amp;gt;scale) + lth );&lt;BR /&gt; }&lt;BR /&gt; //return (duty_cycle * (pb-&amp;gt;period - lth) / pb-&amp;gt;scale) + lth;&lt;BR /&gt; &lt;STRONG&gt;return (duty_cycle);&lt;/STRONG&gt;&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;=============================================================&lt;/P&gt;&lt;P style="color: #51626f; background-color: #ffffff; border: 0px;"&gt;$ /sys/devices/soc0/backlight/backlight/backlight # echo 0 &amp;gt; brightness&lt;/P&gt;&lt;P style="color: #51626f; background-color: #ffffff; border: 0px;"&gt;BL UPDATE STATUS : 0&lt;/P&gt;&lt;P style="color: #51626f; background-color: #ffffff; border: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P style="color: #51626f; background-color: #ffffff; border: 0px;"&gt;$/sys/devices/soc0/backlight/backlight/backlight # echo 8 &amp;gt; brightness&lt;/P&gt;&lt;P&gt;BL UPDATE STATUS : 8&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;INSIDE BL UPDATE STATUS FUN Brightness : 8&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;INSIDE DUTY CYCLE&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;lth Brightness : 0&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;period : 0&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;DC1 : 158&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;Duty Cycle after compute : 158&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;pb-&amp;gt;pwm is : -665628032&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;pb-&amp;gt;period is : 0 &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;best regards&lt;/P&gt;&lt;P&gt;SGN&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Mon, 15 Jun 2020 10:55:45 GMT</pubDate>
    <dc:creator>nandish_sg</dc:creator>
    <dc:date>2020-06-15T10:55:45Z</dc:date>
    <item>
      <title>Brightness Control in iMX6q</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/Brightness-Control-in-iMX6q/m-p/1041373#M153417</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi All&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I am trying to control the LVDS display brightness in imx6q apalis, In user space i am able to see the brightness values change but on display its not changing the brightness control, below is the driver code and&amp;nbsp; dtsi file for brightness control, Can any one help to resolve this issue little bit urgent task,&lt;/P&gt;&lt;P&gt;Thanks in advance&lt;/P&gt;&lt;P&gt;===================================================================================&lt;/P&gt;&lt;P&gt;/*&lt;BR /&gt; *&lt;STRONG&gt; linux/drivers/video/backlight/pwm_bl.c&lt;/STRONG&gt;&lt;BR /&gt; *&lt;BR /&gt; * simple PWM based backlight control, board code has to setup&lt;BR /&gt; * 1) pin configuration so PWM waveforms can output&lt;BR /&gt; * 2) platform_data being correctly configured&lt;BR /&gt; *&lt;BR /&gt; * This program is free software; you can redistribute it and/or modify&lt;BR /&gt; * it under the terms of the GNU General Public License version 2 as&lt;BR /&gt; * published by the Free Software Foundation.&lt;BR /&gt; */&lt;/P&gt;&lt;P&gt;#include &amp;lt;linux/gpio.h&amp;gt;&lt;BR /&gt;#include &amp;lt;linux/of_gpio.h&amp;gt;&lt;BR /&gt;#include &amp;lt;linux/module.h&amp;gt;&lt;BR /&gt;#include &amp;lt;linux/kernel.h&amp;gt;&lt;BR /&gt;#include &amp;lt;linux/init.h&amp;gt;&lt;BR /&gt;#include &amp;lt;linux/platform_device.h&amp;gt;&lt;BR /&gt;#include &amp;lt;linux/fb.h&amp;gt;&lt;BR /&gt;#include &amp;lt;linux/backlight.h&amp;gt;&lt;BR /&gt;#include &amp;lt;linux/err.h&amp;gt;&lt;BR /&gt;#include &amp;lt;linux/pwm.h&amp;gt;&lt;BR /&gt;#include &amp;lt;linux/pwm_backlight.h&amp;gt;&lt;BR /&gt;#include &amp;lt;linux/regulator/consumer.h&amp;gt;&lt;BR /&gt;#include &amp;lt;linux/slab.h&amp;gt;&lt;BR /&gt;#include &amp;lt;linux/delay.h&amp;gt;&lt;/P&gt;&lt;P&gt;/* The S340 KOE TX18D206V panel has a requirement to turn on backlight after&lt;BR /&gt; around 1 second to avoid display artifacts. The delay is reduced to&lt;BR /&gt; 500 ms to reduce the delay in wakeup */&lt;BR /&gt;#define TX18D206V_BL_DELAY 200&lt;BR /&gt;#define TX18D206V_PWR_SIG_DELAY 1 /* LCD pwr to LDB signal delay */&lt;/P&gt;&lt;P&gt;struct pwm_bl_data {&lt;BR /&gt; struct pwm_device *pwm;&lt;BR /&gt; struct device *dev;&lt;BR /&gt; unsigned int period;&lt;BR /&gt; unsigned int lth_brightness;&lt;BR /&gt; unsigned int *levels;&lt;BR /&gt; bool enabled;&lt;BR /&gt; struct regulator *power_supply;&lt;BR /&gt; int enable_gpio;&lt;BR /&gt; unsigned long enable_gpio_flags;&lt;BR /&gt; int lcd_pwr_en_gpio;&lt;BR /&gt; unsigned long lcd_pwr_en_gpio_flags;&lt;BR /&gt; unsigned long lcd_pwr_en_time;&lt;BR /&gt; struct work_struct work;&lt;BR /&gt; unsigned int scale;&lt;BR /&gt; int (*notify)(struct device *,&lt;BR /&gt; int brightness);&lt;BR /&gt; void (*notify_after)(struct device *,&lt;BR /&gt; int brightness);&lt;BR /&gt; int (*check_fb)(struct device *, struct fb_info *);&lt;BR /&gt; void (*exit)(struct device *);&lt;BR /&gt;};&lt;/P&gt;&lt;P&gt;static void pwm_backlight_on_work(struct work_struct *work)&lt;BR /&gt;{&lt;BR /&gt; struct pwm_bl_data *pb = container_of(work, struct pwm_bl_data, work);&lt;BR /&gt; unsigned long remaining_time = 0, timeout = 0;&lt;BR /&gt; int err;&lt;/P&gt;&lt;P&gt;if (pb-&amp;gt;enabled)&lt;BR /&gt; return;&lt;/P&gt;&lt;P&gt;timeout = msecs_to_jiffies(TX18D206V_BL_DELAY);&lt;BR /&gt; if (time_before(pb-&amp;gt;lcd_pwr_en_time, timeout)) {&lt;BR /&gt; remaining_time = pb-&amp;gt;lcd_pwr_en_time + timeout - jiffies;&lt;BR /&gt; if (remaining_time &amp;gt; timeout) { /* Handling overflow cases */&lt;BR /&gt; remaining_time = timeout;&lt;BR /&gt; pb-&amp;gt;lcd_pwr_en_time = jiffies;&lt;BR /&gt; }&lt;BR /&gt; msleep(jiffies_to_msecs(remaining_time));&lt;BR /&gt; }&lt;/P&gt;&lt;P&gt;err = regulator_enable(pb-&amp;gt;power_supply);&lt;BR /&gt; if (err &amp;lt; 0)&lt;BR /&gt; dev_err(pb-&amp;gt;dev, "failed to enable power supply\n");&lt;/P&gt;&lt;P&gt;if (gpio_is_valid(pb-&amp;gt;enable_gpio)) {&lt;BR /&gt; if (pb-&amp;gt;enable_gpio_flags &amp;amp; PWM_BACKLIGHT_GPIO_ACTIVE_LOW)&lt;BR /&gt; gpio_set_value(pb-&amp;gt;enable_gpio, 0);&lt;BR /&gt; else&lt;BR /&gt; gpio_set_value(pb-&amp;gt;enable_gpio, 1);&lt;BR /&gt; }&lt;/P&gt;&lt;P&gt;pwm_enable(pb-&amp;gt;pwm);&lt;BR /&gt; pb-&amp;gt;enabled = true;&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;static void pwm_backlight_power_off(struct pwm_bl_data *pb)&lt;BR /&gt;{&lt;BR /&gt; if (!pb-&amp;gt;enabled)&lt;BR /&gt; return;&lt;/P&gt;&lt;P&gt;pwm_config(pb-&amp;gt;pwm, 0, pb-&amp;gt;period);&lt;BR /&gt; pwm_disable(pb-&amp;gt;pwm);&lt;/P&gt;&lt;P&gt;if (gpio_is_valid(pb-&amp;gt;enable_gpio)) {&lt;BR /&gt; if (pb-&amp;gt;enable_gpio_flags &amp;amp; PWM_BACKLIGHT_GPIO_ACTIVE_LOW)&lt;BR /&gt; gpio_set_value(pb-&amp;gt;enable_gpio, 1);&lt;BR /&gt; else&lt;BR /&gt; gpio_set_value(pb-&amp;gt;enable_gpio, 0);&lt;BR /&gt; }&lt;/P&gt;&lt;P&gt;regulator_disable(pb-&amp;gt;power_supply);&lt;BR /&gt; pb-&amp;gt;enabled = false;&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;static int compute_duty_cycle(struct pwm_bl_data *pb, int brightness)&lt;BR /&gt;{&lt;BR /&gt; unsigned int lth = pb-&amp;gt;lth_brightness;&lt;BR /&gt; int duty_cycle;&lt;BR /&gt; printk("INSIDE DUTY CYCLE \n\n\n");&lt;BR /&gt; printk("lth :%d \n\n\n\n",lth);&lt;BR /&gt; printk("period : %d \n\n\n\n",pb-&amp;gt;period);&lt;BR /&gt; if (pb-&amp;gt;levels)&lt;BR /&gt; { &lt;BR /&gt; duty_cycle = pb-&amp;gt;levels[brightness];&lt;BR /&gt; printk("DC1 : %d \n\n\n",duty_cycle);&lt;BR /&gt; }&lt;BR /&gt; else&lt;BR /&gt; {&lt;BR /&gt; duty_cycle = brightness;&lt;BR /&gt; printk("DC2 : %d\n\n\n",duty_cycle);&lt;BR /&gt; printk("DC Return : %d\n\n\n",(duty_cycle * (pb-&amp;gt;period - lth) / pb-&amp;gt;scale) + lth );&lt;BR /&gt; }&lt;BR /&gt; return (duty_cycle * (pb-&amp;gt;period - lth) / pb-&amp;gt;scale) + lth;&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;static int pwm_backlight_update_status(struct backlight_device *bl)&lt;BR /&gt;{&lt;BR /&gt; struct pwm_bl_data *pb = bl_get_data(bl);&lt;BR /&gt; int brightness = bl-&amp;gt;props.brightness;&lt;BR /&gt; int duty_cycle;&lt;BR /&gt; &lt;BR /&gt; printk("BL UPDATE STATUS : %d \n\n\n",brightness);&lt;/P&gt;&lt;P&gt;#ifndef CONFIG_MACH_APALIS_IMX6_THER_S340&lt;BR /&gt; if (bl-&amp;gt;props.power != FB_BLANK_UNBLANK ||&lt;BR /&gt; bl-&amp;gt;props.fb_blank != FB_BLANK_UNBLANK ||&lt;BR /&gt; bl-&amp;gt;props.state &amp;amp; BL_CORE_FBBLANK)&lt;BR /&gt; brightness = 0;&lt;BR /&gt;#endif&lt;/P&gt;&lt;P&gt;if (pb-&amp;gt;notify)&lt;BR /&gt; brightness = pb-&amp;gt;notify(pb-&amp;gt;dev, brightness);&lt;/P&gt;&lt;P&gt;if (brightness &amp;gt; 0) {&lt;BR /&gt; printk("INSIDE UPDATE STATUS FUN:\n\n\n");&lt;BR /&gt; duty_cycle = compute_duty_cycle(pb, brightness);&lt;BR /&gt; printk("Duty Cycle after compute : %d \n\n\n",duty_cycle);&lt;BR /&gt; pwm_config(pb-&amp;gt;pwm, duty_cycle, pb-&amp;gt;period);&lt;BR /&gt; //schedule_work(&amp;amp;pb-&amp;gt;work);&amp;nbsp;&lt;BR /&gt; pwm_backlight_on_work(&amp;amp;pb-&amp;gt;work); //myself added&lt;/P&gt;&lt;P&gt;} else {&lt;BR /&gt; /* Cancel the scheduled work to avoid race conditions */&lt;BR /&gt; cancel_work_sync(&amp;amp;pb-&amp;gt;work);&lt;BR /&gt; pwm_backlight_power_off(pb);&lt;BR /&gt; }&lt;/P&gt;&lt;P&gt;if (pb-&amp;gt;notify_after)&lt;BR /&gt; pb-&amp;gt;notify_after(pb-&amp;gt;dev, brightness);&lt;/P&gt;&lt;P&gt;return 0;&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;static int pwm_backlight_get_brightness(struct backlight_device *bl)&lt;BR /&gt;{&lt;BR /&gt; return bl-&amp;gt;props.brightness;&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;static int pwm_backlight_check_fb(struct backlight_device *bl,&lt;BR /&gt; struct fb_info *info)&lt;BR /&gt;{&lt;BR /&gt; struct pwm_bl_data *pb = bl_get_data(bl);&lt;/P&gt;&lt;P&gt;return !pb-&amp;gt;check_fb || pb-&amp;gt;check_fb(pb-&amp;gt;dev, info);&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;static const struct backlight_ops pwm_backlight_ops = {&lt;BR /&gt; .update_status = pwm_backlight_update_status,&lt;BR /&gt; .get_brightness = pwm_backlight_get_brightness,&lt;BR /&gt; .check_fb = pwm_backlight_check_fb,&lt;BR /&gt;};&lt;/P&gt;&lt;P&gt;#ifdef CONFIG_OF&lt;BR /&gt;static int pwm_backlight_parse_dt(struct device *dev,&lt;BR /&gt; struct platform_pwm_backlight_data *data)&lt;BR /&gt;{&lt;BR /&gt; struct device_node *node = dev-&amp;gt;of_node;&lt;BR /&gt; enum of_gpio_flags flags;&lt;BR /&gt; struct property *prop;&lt;BR /&gt; int length;&lt;BR /&gt; u32 value;&lt;BR /&gt; int ret;&lt;/P&gt;&lt;P&gt;if (!node)&lt;BR /&gt; return -ENODEV;&lt;/P&gt;&lt;P&gt;memset(data, 0, sizeof(*data));&lt;/P&gt;&lt;P&gt;/* determine the number of brightness levels */&lt;BR /&gt; prop = of_find_property(node, "brightness-levels", &amp;amp;length);&lt;BR /&gt; if (!prop)&lt;BR /&gt; return -EINVAL;&lt;/P&gt;&lt;P&gt;data-&amp;gt;max_brightness = length / sizeof(u32);&lt;/P&gt;&lt;P&gt;/* read brightness levels from DT property */&lt;BR /&gt; if (data-&amp;gt;max_brightness &amp;gt; 0) {&lt;BR /&gt; size_t size = sizeof(*data-&amp;gt;levels) * data-&amp;gt;max_brightness;&lt;/P&gt;&lt;P&gt;data-&amp;gt;levels = devm_kzalloc(dev, size, GFP_KERNEL);&lt;BR /&gt; if (!data-&amp;gt;levels)&lt;BR /&gt; return -ENOMEM;&lt;/P&gt;&lt;P&gt;ret = of_property_read_u32_array(node, "brightness-levels",&lt;BR /&gt; data-&amp;gt;levels,&lt;BR /&gt; data-&amp;gt;max_brightness);&lt;BR /&gt; if (ret &amp;lt; 0)&lt;BR /&gt; return ret;&lt;/P&gt;&lt;P&gt;ret = of_property_read_u32(node, "default-brightness-level",&lt;BR /&gt; &amp;amp;value);&lt;BR /&gt; if (ret &amp;lt; 0)&lt;BR /&gt; return ret;&lt;/P&gt;&lt;P&gt;data-&amp;gt;dft_brightness = value;&lt;BR /&gt; data-&amp;gt;max_brightness--;&lt;BR /&gt; }&lt;/P&gt;&lt;P&gt;data-&amp;gt;enable_gpio = of_get_named_gpio_flags(node, "enable-gpios", 0,&lt;BR /&gt; &amp;amp;flags);&lt;BR /&gt; if (data-&amp;gt;enable_gpio == -EPROBE_DEFER)&lt;BR /&gt; return -EPROBE_DEFER;&lt;/P&gt;&lt;P&gt;if (gpio_is_valid(data-&amp;gt;enable_gpio) &amp;amp;&amp;amp; (flags &amp;amp; OF_GPIO_ACTIVE_LOW))&lt;BR /&gt; data-&amp;gt;enable_gpio_flags |= PWM_BACKLIGHT_GPIO_ACTIVE_LOW;&lt;/P&gt;&lt;P&gt;data-&amp;gt;lcd_pwr_en_gpio = of_get_named_gpio_flags(node, "lcd-pwr-en-gpio", 0,&lt;BR /&gt; &amp;amp;flags);&lt;BR /&gt; if (data-&amp;gt;lcd_pwr_en_gpio == -EPROBE_DEFER)&lt;BR /&gt; return -EPROBE_DEFER;&lt;/P&gt;&lt;P&gt;if (gpio_is_valid(data-&amp;gt;lcd_pwr_en_gpio) &amp;amp;&amp;amp; (flags &amp;amp; OF_GPIO_ACTIVE_LOW))&lt;BR /&gt; data-&amp;gt;lcd_pwr_en_gpio_flags |= PWM_BACKLIGHT_GPIO_ACTIVE_LOW;&lt;/P&gt;&lt;P&gt;return 0;&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;static struct of_device_id pwm_backlight_of_match[] = {&lt;BR /&gt; { .compatible = "pwm-backlight" },&lt;BR /&gt; { }&lt;BR /&gt;};&lt;/P&gt;&lt;P&gt;MODULE_DEVICE_TABLE(of, pwm_backlight_of_match);&lt;BR /&gt;#else&lt;BR /&gt;static int pwm_backlight_parse_dt(struct device *dev,&lt;BR /&gt; struct platform_pwm_backlight_data *data)&lt;BR /&gt;{&lt;BR /&gt; return -ENODEV;&lt;BR /&gt;}&lt;BR /&gt;#endif&lt;/P&gt;&lt;P&gt;static int pwm_backlight_probe(struct platform_device *pdev)&lt;BR /&gt;{&lt;BR /&gt; struct platform_pwm_backlight_data *data = dev_get_platdata(&amp;amp;pdev-&amp;gt;dev);&lt;BR /&gt; struct platform_pwm_backlight_data defdata;&lt;BR /&gt; struct backlight_properties props;&lt;BR /&gt; struct backlight_device *bl;&lt;BR /&gt; struct pwm_bl_data *pb;&lt;BR /&gt; int ret;&lt;BR /&gt; &lt;BR /&gt; printk("PWM BACKLIGHT PROBED \n\n\n\n\n\n");&lt;/P&gt;&lt;P&gt;if (!data) {&lt;BR /&gt; ret = pwm_backlight_parse_dt(&amp;amp;pdev-&amp;gt;dev, &amp;amp;defdata);&lt;BR /&gt; if (ret &amp;lt; 0) {&lt;BR /&gt; dev_err(&amp;amp;pdev-&amp;gt;dev, "failed to find platform data\n");&lt;BR /&gt; return ret;&lt;BR /&gt; }&lt;/P&gt;&lt;P&gt;data = &amp;amp;defdata;&lt;BR /&gt; }&lt;/P&gt;&lt;P&gt;if (data-&amp;gt;init) {&lt;BR /&gt; ret = data-&amp;gt;init(&amp;amp;pdev-&amp;gt;dev);&lt;BR /&gt; if (ret &amp;lt; 0)&lt;BR /&gt; return ret;&lt;BR /&gt; }&lt;/P&gt;&lt;P&gt;pb = devm_kzalloc(&amp;amp;pdev-&amp;gt;dev, sizeof(*pb), GFP_KERNEL);&lt;BR /&gt; if (!pb) {&lt;BR /&gt; ret = -ENOMEM;&lt;BR /&gt; goto err_alloc;&lt;BR /&gt; }&lt;/P&gt;&lt;P&gt;if (data-&amp;gt;levels) {&lt;BR /&gt; unsigned int i;&lt;/P&gt;&lt;P&gt;for (i = 0; i &amp;lt;= data-&amp;gt;max_brightness; i++)&lt;BR /&gt; if (data-&amp;gt;levels[i] &amp;gt; pb-&amp;gt;scale)&lt;BR /&gt; pb-&amp;gt;scale = data-&amp;gt;levels[i];&lt;/P&gt;&lt;P&gt;pb-&amp;gt;levels = data-&amp;gt;levels;&lt;BR /&gt; } else&lt;BR /&gt; pb-&amp;gt;scale = data-&amp;gt;max_brightness;&lt;/P&gt;&lt;P&gt;pb-&amp;gt;enable_gpio = data-&amp;gt;enable_gpio;&lt;BR /&gt; pb-&amp;gt;enable_gpio_flags = data-&amp;gt;enable_gpio_flags;&lt;BR /&gt; pb-&amp;gt;lcd_pwr_en_gpio = data-&amp;gt;lcd_pwr_en_gpio;&lt;BR /&gt; pb-&amp;gt;lcd_pwr_en_gpio_flags = data-&amp;gt;lcd_pwr_en_gpio_flags;&lt;BR /&gt; pb-&amp;gt;notify = data-&amp;gt;notify;&lt;BR /&gt; pb-&amp;gt;notify_after = data-&amp;gt;notify_after;&lt;BR /&gt; pb-&amp;gt;check_fb = data-&amp;gt;check_fb;&lt;BR /&gt; pb-&amp;gt;exit = data-&amp;gt;exit;&lt;BR /&gt; pb-&amp;gt;dev = &amp;amp;pdev-&amp;gt;dev;&lt;BR /&gt; pb-&amp;gt;enabled = false;&lt;/P&gt;&lt;P&gt;INIT_WORK(&amp;amp;pb-&amp;gt;work, pwm_backlight_on_work);&lt;BR /&gt; if (gpio_is_valid(pb-&amp;gt;enable_gpio)) {&lt;BR /&gt; unsigned long flags;&lt;/P&gt;&lt;P&gt;if (pb-&amp;gt;enable_gpio_flags &amp;amp; PWM_BACKLIGHT_GPIO_ACTIVE_LOW)&lt;BR /&gt; flags = GPIOF_OUT_INIT_HIGH;&lt;BR /&gt; else&lt;BR /&gt; flags = GPIOF_OUT_INIT_LOW;&lt;/P&gt;&lt;P&gt;ret = gpio_request_one(pb-&amp;gt;enable_gpio, flags, "enable");&lt;BR /&gt; if (ret &amp;lt; 0) {&lt;BR /&gt; dev_err(&amp;amp;pdev-&amp;gt;dev, "failed to request GPIO#%d: %d\n",&lt;BR /&gt; pb-&amp;gt;enable_gpio, ret);&lt;BR /&gt; goto err_alloc;&lt;BR /&gt; }&lt;BR /&gt; }&lt;BR /&gt; if (gpio_is_valid(pb-&amp;gt;lcd_pwr_en_gpio)) {&lt;BR /&gt; unsigned long flags;&lt;/P&gt;&lt;P&gt;if (pb-&amp;gt;lcd_pwr_en_gpio_flags &amp;amp; PWM_BACKLIGHT_GPIO_ACTIVE_LOW)&lt;BR /&gt; flags = GPIOF_OUT_INIT_HIGH;&lt;BR /&gt; else&lt;BR /&gt; flags = GPIOF_OUT_INIT_LOW;&lt;/P&gt;&lt;P&gt;ret = gpio_request_one(pb-&amp;gt;lcd_pwr_en_gpio, flags, "enable");&lt;BR /&gt; if (ret &amp;lt; 0) {&lt;BR /&gt; dev_err(&amp;amp;pdev-&amp;gt;dev, "failed to request GPIO#%d: %d\n",&lt;BR /&gt; pb-&amp;gt;lcd_pwr_en_gpio, ret);&lt;BR /&gt; goto err_gpio;&lt;BR /&gt; }&lt;BR /&gt; /* Turn ON the LCD power explicitly */&lt;BR /&gt; if (pb-&amp;gt;lcd_pwr_en_gpio_flags &amp;amp; PWM_BACKLIGHT_GPIO_ACTIVE_LOW)&lt;BR /&gt; gpio_set_value(pb-&amp;gt;lcd_pwr_en_gpio, 0);&lt;BR /&gt; else&lt;BR /&gt; gpio_set_value(pb-&amp;gt;lcd_pwr_en_gpio, 1);&lt;BR /&gt; pb-&amp;gt;lcd_pwr_en_time = jiffies;&lt;/P&gt;&lt;P&gt;/* delaying by few ms to maintain panel timings */&lt;BR /&gt; mdelay(TX18D206V_PWR_SIG_DELAY);&lt;BR /&gt; }&lt;/P&gt;&lt;P&gt;pb-&amp;gt;power_supply = devm_regulator_get(&amp;amp;pdev-&amp;gt;dev, "power");&lt;BR /&gt; if (IS_ERR(pb-&amp;gt;power_supply)) {&lt;BR /&gt; ret = PTR_ERR(pb-&amp;gt;power_supply);&lt;BR /&gt; goto err_gpio;&lt;BR /&gt; }&lt;/P&gt;&lt;P&gt;pb-&amp;gt;pwm = devm_pwm_get(&amp;amp;pdev-&amp;gt;dev, NULL);&lt;BR /&gt; if (IS_ERR(pb-&amp;gt;pwm)) {&lt;BR /&gt; dev_err(&amp;amp;pdev-&amp;gt;dev, "unable to request PWM, trying legacy API\n");&lt;/P&gt;&lt;P&gt;pb-&amp;gt;pwm = pwm_request(data-&amp;gt;pwm_id, "pwm-backlight");&lt;BR /&gt; if (IS_ERR(pb-&amp;gt;pwm)) {&lt;BR /&gt; dev_err(&amp;amp;pdev-&amp;gt;dev, "unable to request legacy PWM\n");&lt;BR /&gt; ret = PTR_ERR(pb-&amp;gt;pwm);&lt;BR /&gt; goto err_gpio;&lt;BR /&gt; }&lt;BR /&gt; }&lt;/P&gt;&lt;P&gt;dev_dbg(&amp;amp;pdev-&amp;gt;dev, "got pwm for backlight\n");&lt;/P&gt;&lt;P&gt;/*&lt;BR /&gt; * The DT case will set the pwm_period_ns field to 0 and store the&lt;BR /&gt; * period, parsed from the DT, in the PWM device. For the non-DT case,&lt;BR /&gt; * set the period from platform data.&lt;BR /&gt; */&lt;BR /&gt; if (data-&amp;gt;pwm_period_ns &amp;gt; 0)&lt;BR /&gt; pwm_set_period(pb-&amp;gt;pwm, data-&amp;gt;pwm_period_ns);&lt;/P&gt;&lt;P&gt;pb-&amp;gt;period = pwm_get_period(pb-&amp;gt;pwm);&lt;BR /&gt; pb-&amp;gt;lth_brightness = data-&amp;gt;lth_brightness * (pb-&amp;gt;period / pb-&amp;gt;scale);&lt;/P&gt;&lt;P&gt;memset(&amp;amp;props, 0, sizeof(struct backlight_properties));&lt;BR /&gt; props.type = BACKLIGHT_RAW;&lt;BR /&gt; props.max_brightness = data-&amp;gt;max_brightness;&lt;BR /&gt; bl = backlight_device_register(dev_name(&amp;amp;pdev-&amp;gt;dev), &amp;amp;pdev-&amp;gt;dev, pb,&lt;BR /&gt; &amp;amp;pwm_backlight_ops, &amp;amp;props);&lt;BR /&gt; if (IS_ERR(bl)) {&lt;BR /&gt; dev_err(&amp;amp;pdev-&amp;gt;dev, "failed to register backlight\n");&lt;BR /&gt; ret = PTR_ERR(bl);&lt;BR /&gt; goto err_gpio;&lt;BR /&gt; }&lt;/P&gt;&lt;P&gt;if (data-&amp;gt;dft_brightness &amp;gt; data-&amp;gt;max_brightness) {&lt;BR /&gt; dev_warn(&amp;amp;pdev-&amp;gt;dev,&lt;BR /&gt; "invalid default brightness level: %u, using %u\n",&lt;BR /&gt; data-&amp;gt;dft_brightness, data-&amp;gt;max_brightness);&lt;BR /&gt; data-&amp;gt;dft_brightness = data-&amp;gt;max_brightness;&lt;BR /&gt; }&lt;/P&gt;&lt;P&gt;bl-&amp;gt;props.brightness = data-&amp;gt;dft_brightness;&lt;BR /&gt; backlight_update_status(bl);&lt;/P&gt;&lt;P&gt;platform_set_drvdata(pdev, bl);&lt;BR /&gt; return 0;&lt;/P&gt;&lt;P&gt;err_gpio:&lt;BR /&gt; if (gpio_is_valid(pb-&amp;gt;enable_gpio))&lt;BR /&gt; gpio_free(pb-&amp;gt;enable_gpio);&lt;BR /&gt; if (gpio_is_valid(pb-&amp;gt;lcd_pwr_en_gpio))&lt;BR /&gt; gpio_free(pb-&amp;gt;lcd_pwr_en_gpio);&lt;BR /&gt;err_alloc:&lt;BR /&gt; if (data-&amp;gt;exit)&lt;BR /&gt; data-&amp;gt;exit(&amp;amp;pdev-&amp;gt;dev);&lt;BR /&gt; return ret;&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;static int pwm_backlight_remove(struct platform_device *pdev)&lt;BR /&gt;{&lt;BR /&gt; struct backlight_device *bl = platform_get_drvdata(pdev);&lt;BR /&gt; struct pwm_bl_data *pb = bl_get_data(bl);&lt;/P&gt;&lt;P&gt;backlight_device_unregister(bl);&lt;BR /&gt; pwm_backlight_power_off(pb);&lt;/P&gt;&lt;P&gt;if (pb-&amp;gt;exit)&lt;BR /&gt; pb-&amp;gt;exit(&amp;amp;pdev-&amp;gt;dev);&lt;/P&gt;&lt;P&gt;return 0;&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;#ifdef CONFIG_PM_SLEEP&lt;BR /&gt;static int pwm_backlight_suspend(struct device *dev)&lt;BR /&gt;{&lt;BR /&gt; struct backlight_device *bl = dev_get_drvdata(dev);&lt;BR /&gt; struct pwm_bl_data *pb = bl_get_data(bl);&lt;/P&gt;&lt;P&gt;if (pb-&amp;gt;notify)&lt;BR /&gt; pb-&amp;gt;notify(pb-&amp;gt;dev, 0);&lt;/P&gt;&lt;P&gt;pwm_backlight_power_off(pb);&lt;BR /&gt; /* Cancel the scheduled work to avoid race conditions */&lt;BR /&gt; cancel_work_sync(&amp;amp;pb-&amp;gt;work);&lt;/P&gt;&lt;P&gt;if (gpio_is_valid(pb-&amp;gt;lcd_pwr_en_gpio)) {&lt;BR /&gt; if (pb-&amp;gt;lcd_pwr_en_gpio_flags &amp;amp; PWM_BACKLIGHT_GPIO_ACTIVE_LOW)&lt;BR /&gt; gpio_set_value(pb-&amp;gt;lcd_pwr_en_gpio, 1);&lt;BR /&gt; else&lt;BR /&gt; gpio_set_value(pb-&amp;gt;lcd_pwr_en_gpio, 0);&lt;BR /&gt; }&lt;/P&gt;&lt;P&gt;if (pb-&amp;gt;notify_after)&lt;BR /&gt; pb-&amp;gt;notify_after(pb-&amp;gt;dev, 0);&lt;/P&gt;&lt;P&gt;return 0;&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;static int pwm_backlight_resume(struct device *dev)&lt;BR /&gt;{&lt;BR /&gt; struct backlight_device *bl = dev_get_drvdata(dev);&lt;BR /&gt; struct pwm_bl_data *pb = bl_get_data(bl);&lt;/P&gt;&lt;P&gt;if (gpio_is_valid(pb-&amp;gt;lcd_pwr_en_gpio)) {&lt;BR /&gt; if (pb-&amp;gt;lcd_pwr_en_gpio_flags &amp;amp; PWM_BACKLIGHT_GPIO_ACTIVE_LOW)&lt;BR /&gt; gpio_set_value(pb-&amp;gt;lcd_pwr_en_gpio, 0);&lt;BR /&gt; else&lt;BR /&gt; gpio_set_value(pb-&amp;gt;lcd_pwr_en_gpio, 1);&lt;BR /&gt; pb-&amp;gt;lcd_pwr_en_time = jiffies;&lt;/P&gt;&lt;P&gt;/* delaying by few ms to maintain panel timings */&lt;BR /&gt; mdelay(TX18D206V_PWR_SIG_DELAY);&lt;BR /&gt; }&lt;/P&gt;&lt;P&gt;backlight_update_status(bl);&lt;/P&gt;&lt;P&gt;return 0;&lt;BR /&gt;}&lt;BR /&gt;#endif&lt;/P&gt;&lt;P&gt;static const struct dev_pm_ops pwm_backlight_pm_ops = {&lt;BR /&gt;#ifdef CONFIG_PM_SLEEP&lt;BR /&gt; .suspend = pwm_backlight_suspend,&lt;BR /&gt; .resume = pwm_backlight_resume,&lt;BR /&gt; .poweroff = pwm_backlight_suspend,&lt;BR /&gt; .restore = pwm_backlight_resume,&lt;BR /&gt;#endif&lt;BR /&gt;};&lt;/P&gt;&lt;P&gt;static struct platform_driver pwm_backlight_driver = {&lt;BR /&gt; .driver = {&lt;BR /&gt; .name = "pwm-backlight",&lt;BR /&gt; .owner = THIS_MODULE,&lt;BR /&gt; .pm = &amp;amp;pwm_backlight_pm_ops,&lt;BR /&gt; .of_match_table = of_match_ptr(pwm_backlight_of_match),&lt;BR /&gt; },&lt;BR /&gt; .probe = pwm_backlight_probe,&lt;BR /&gt; .remove = pwm_backlight_remove,&lt;BR /&gt;};&lt;/P&gt;&lt;P&gt;module_platform_driver(pwm_backlight_driver);&lt;/P&gt;&lt;P&gt;MODULE_DESCRIPTION("PWM based Backlight Driver");&lt;BR /&gt;MODULE_LICENSE("GPL");&lt;BR /&gt;MODULE_ALIAS("platform:pwm-backlight");&lt;/P&gt;&lt;P&gt;======================================================================&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;OUTPUT:&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;$ /sys/devices/soc0/backlight/backlight/backlight # echo 0 &amp;gt; brightness&lt;/P&gt;&lt;P&gt;BL UPDATE STATUS : 0&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;$/sys/devices/soc0/backlight/backlight/backlight # echo 7 &amp;gt; brightness&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;BL UPDATE STATUS : 7&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;INSIDE UPDATE STATUS FUN:&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;INSIDE DUTY CYCLE&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;lth :0&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;period : 0&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;DC1 : 174&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;Duty Cycle after compute : 0&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;===================================================================&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;in .dtsi file configuration:&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;amp;backlight {&lt;BR /&gt; brightness-levels = &amp;lt;255 228 224 218 210 200 188 174 158 140 120 98 74 48 0&amp;gt;;&lt;BR /&gt; default-brightness-level = &amp;lt;10&amp;gt;;&lt;BR /&gt; enable-gpios = &amp;lt;&amp;amp;gpio1 6 0&amp;gt;;&lt;BR /&gt; lcd-pwr-en-gpio = &amp;lt;&amp;amp;gpio1 9 0&amp;gt;;&lt;BR /&gt; status = "okay";&lt;BR /&gt;};&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;and&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;backlight: backlight {&lt;BR /&gt; compatible = "pwm-backlight";&lt;BR /&gt; pwms = &amp;lt;&amp;amp;pwm4 0 500000&amp;gt;;&lt;BR /&gt; //status = "disabled";&lt;BR /&gt; status = "okay";&amp;nbsp;&lt;BR /&gt; };&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Best Regards&amp;nbsp;&lt;/P&gt;&lt;P&gt;SGN&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 13 Jun 2020 12:39:53 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/Brightness-Control-in-iMX6q/m-p/1041373#M153417</guid>
      <dc:creator>nandish_sg</dc:creator>
      <dc:date>2020-06-13T12:39:53Z</dc:date>
    </item>
    <item>
      <title>Re: Brightness Control in iMX6q</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/Brightness-Control-in-iMX6q/m-p/1041374#M153418</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Nandish&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;for apalis board one can look at toradex resources:&lt;/P&gt;&lt;P&gt;&lt;A class="link-titled" href="https://developer.toradex.com/knowledge-base/backlight-(linux)" title="https://developer.toradex.com/knowledge-base/backlight-(linux)"&gt;Backlight (Linux)&lt;/A&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Best regards&lt;BR /&gt;igor&lt;BR /&gt;-----------------------------------------------------------------------------------------------------------------------&lt;BR /&gt;Note: If this post answers your question, please click the Correct Answer button. Thank you!&lt;BR /&gt;-----------------------------------------------------------------------------------------------------------------------&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 15 Jun 2020 10:39:01 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/Brightness-Control-in-iMX6q/m-p/1041374#M153418</guid>
      <dc:creator>igorpadykov</dc:creator>
      <dc:date>2020-06-15T10:39:01Z</dc:date>
    </item>
    <item>
      <title>Re: Brightness Control in iMX6q</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/Brightness-Control-in-iMX6q/m-p/1041375#M153419</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi&amp;nbsp; Igor,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks for your quick reply, i saw that even in Toradex also but no luck,&lt;/P&gt;&lt;P&gt;any changes in need in driver, because i am getting the pwm as 0,&lt;/P&gt;&lt;P&gt;and i made small changes in code&amp;nbsp;&lt;/P&gt;&lt;P&gt;====================================================================&lt;/P&gt;&lt;P&gt;static int compute_duty_cycle(struct pwm_bl_data *pb, int brightness)&lt;BR /&gt;{&lt;BR /&gt; unsigned int lth = pb-&amp;gt;lth_brightness;&lt;BR /&gt; int duty_cycle;&lt;BR /&gt; printk("INSIDE DUTY CYCLE \n\n\n");&lt;BR /&gt; printk("lth Brightness :%d \n\n\n\n",lth);&lt;BR /&gt; printk("period : %d \n\n\n\n",pb-&amp;gt;period);&lt;BR /&gt; if (pb-&amp;gt;levels)&lt;BR /&gt; { &lt;BR /&gt; duty_cycle = pb-&amp;gt;levels[brightness];&lt;BR /&gt; printk("DC1 : %d \n\n\n",duty_cycle);&lt;BR /&gt; }&lt;BR /&gt; else&lt;BR /&gt; {&lt;BR /&gt; duty_cycle = brightness;&lt;BR /&gt; printk("DC2 : %d\n\n\n",duty_cycle);&lt;BR /&gt; printk("DC Return : %d\n\n\n",(duty_cycle * (pb-&amp;gt;period - lth) / pb-&amp;gt;scale) + lth );&lt;BR /&gt; }&lt;BR /&gt; //return (duty_cycle * (pb-&amp;gt;period - lth) / pb-&amp;gt;scale) + lth;&lt;BR /&gt; &lt;STRONG&gt;return (duty_cycle);&lt;/STRONG&gt;&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;=============================================================&lt;/P&gt;&lt;P style="color: #51626f; background-color: #ffffff; border: 0px;"&gt;$ /sys/devices/soc0/backlight/backlight/backlight # echo 0 &amp;gt; brightness&lt;/P&gt;&lt;P style="color: #51626f; background-color: #ffffff; border: 0px;"&gt;BL UPDATE STATUS : 0&lt;/P&gt;&lt;P style="color: #51626f; background-color: #ffffff; border: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P style="color: #51626f; background-color: #ffffff; border: 0px;"&gt;$/sys/devices/soc0/backlight/backlight/backlight # echo 8 &amp;gt; brightness&lt;/P&gt;&lt;P&gt;BL UPDATE STATUS : 8&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;INSIDE BL UPDATE STATUS FUN Brightness : 8&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;INSIDE DUTY CYCLE&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;lth Brightness : 0&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;period : 0&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;DC1 : 158&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;Duty Cycle after compute : 158&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;pb-&amp;gt;pwm is : -665628032&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;pb-&amp;gt;period is : 0 &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;best regards&lt;/P&gt;&lt;P&gt;SGN&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 15 Jun 2020 10:55:45 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/Brightness-Control-in-iMX6q/m-p/1041375#M153419</guid>
      <dc:creator>nandish_sg</dc:creator>
      <dc:date>2020-06-15T10:55:45Z</dc:date>
    </item>
    <item>
      <title>Re: Brightness Control in iMX6q</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/Brightness-Control-in-iMX6q/m-p/1041376#M153420</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;for pwm4 usage toradex has special comments:&lt;/P&gt;&lt;P&gt;&lt;A class="link-titled" href="https://www.toradex.cn/community/questions/39563/apalis-imx-6-pwm4-backlight-pwm-sharing.html?childToView=39591#answer-39591" title="https://www.toradex.cn/community/questions/39563/apalis-imx-6-pwm4-backlight-pwm-sharing.html?childToView=39591#answer-39591"&gt;Apalis iMX 6 PWM4 &amp;amp; Backlight PWM Sharing - Toradex Community&lt;/A&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Best regards&lt;BR /&gt;igor&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 15 Jun 2020 11:55:09 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/Brightness-Control-in-iMX6q/m-p/1041376#M153420</guid>
      <dc:creator>igorpadykov</dc:creator>
      <dc:date>2020-06-15T11:55:09Z</dc:date>
    </item>
  </channel>
</rss>

