2021-05-30 16:02:41

by Rajeev Nandan

[permalink] [raw]
Subject: [v5 0/5] drm: Support basic DPCD backlight in panel-simple and add a new panel ATNA33XC20

This series adds the support for the eDP panel that needs the backlight
controlling over the DP AUX channel using DPCD registers of the panel
as per the VESA's standard.

This series also adds support for the Samsung eDP AMOLED panel that
needs DP AUX to control the backlight, and introduces new delays in the
@panel_desc.delay to support this panel.

This patch series depends on the following two series:
- Doug's series [1], exposed the DP AUX channel to the panel-simple.
- Lyude's series [2], introduced new drm helper functions for DPCD
backlight.

This series is the logical successor to the series [3].

Changes in v1:
- Created dpcd backlight helper with very basic functionality, added
backlight registration in the ti-sn65dsi86 bridge driver.

Changes in v2:
- Created a new DisplayPort aux backlight driver and moved the code from
drm_dp_aux_backlight.c (v1) to the new driver.

Changes in v3:
- Fixed module compilation (kernel test bot).

Changes in v4:
- Added basic DPCD backlight support in panel-simple.
- Added support for a new Samsung panel ATNA33XC20 that needs DPCD
backlight controlling and has a requirement of delays between enable
GPIO and regulator.

Changes in v5:
Addressed review suggestions from Douglas:
- Created a new API drm_panel_dp_aux_backlight() in drm_panel.c
- Moved DP AUX backlight functions from panel-simple.c to drm_panel.c
- panel-simple probe() calls drm_panel_dp_aux_backlight() to create
backlight when the backlight phandle is not specified in panel DT
and DP AUX channel is present.
- Added check for drm_edp_backlight_supported() before registering.
- Removed the @uses_dpcd_backlight flag from panel_desc as this
should be auto-detected.
- Updated comments/descriptions.

[1] https://lore.kernel.org/dri-devel/[email protected]/
[2] https://lore.kernel.org/dri-devel/[email protected]/
[3] https://lore.kernel.org/dri-devel/[email protected]/

Rajeev Nandan (5):
drm/panel: add basic DP AUX backlight support
drm/panel-simple: Support DP AUX backlight
drm/panel-simple: Support for delays between GPIO & regulator
dt-bindings: display: simple: Add Samsung ATNA33XC20
drm/panel-simple: Add Samsung ATNA33XC20

.../bindings/display/panel/panel-simple.yaml | 2 +
drivers/gpu/drm/drm_panel.c | 108 +++++++++++++++++++++
drivers/gpu/drm/panel/panel-simple.c | 67 +++++++++++++
include/drm/drm_panel.h | 15 ++-
4 files changed, 188 insertions(+), 4 deletions(-)

--
2.7.4


2021-05-30 16:04:00

by Rajeev Nandan

[permalink] [raw]
Subject: [v5 1/5] drm/panel: add basic DP AUX backlight support

Some panels support backlight control over DP AUX channel using
VESA's standard backlight control interface.
Using new DRM eDP backlight helpers, add support to create and
register a backlight for those panels in drm_panel to simplify
the panel drivers.

The panel driver with access to "struct drm_dp_aux" can create and
register a backlight device using following code snippet in its
probe() function:

err = drm_panel_dp_aux_backlight(panel, aux);
if (err)
return err;

Then drm_panel will handle backlight_(enable|disable) calls
similar to the case when drm_panel_of_backlight() is used.

Currently, we are not supporting one feature where the source
device can combine the backlight brightness levels set through
DP AUX and the BL_PWM_DIM eDP connector pin. Since it's not
required for the basic backlight controls, it can be added later.

Signed-off-by: Rajeev Nandan <[email protected]>
---

Changes in v5:
- New (Douglas) [1]

[1] https://lore.kernel.org/dri-devel/CAD=FV=UuWuKibpT15McweuZ24qxsSAsSvJ3Q2MbZqgw5oggBVQ@mail.gmail.com/

drivers/gpu/drm/drm_panel.c | 108 ++++++++++++++++++++++++++++++++++++++++++++
include/drm/drm_panel.h | 15 ++++--
2 files changed, 119 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/drm_panel.c b/drivers/gpu/drm/drm_panel.c
index f634371..f290315 100644
--- a/drivers/gpu/drm/drm_panel.c
+++ b/drivers/gpu/drm/drm_panel.c
@@ -26,12 +26,20 @@
#include <linux/module.h>

#include <drm/drm_crtc.h>
+#include <drm/drm_dp_helper.h>
#include <drm/drm_panel.h>
#include <drm/drm_print.h>

static DEFINE_MUTEX(panel_lock);
static LIST_HEAD(panel_list);

+struct dp_aux_backlight {
+ struct backlight_device *base;
+ struct drm_dp_aux *aux;
+ struct drm_edp_backlight_info info;
+ bool enabled;
+};
+
/**
* DOC: drm panel
*
@@ -342,6 +350,106 @@ int drm_panel_of_backlight(struct drm_panel *panel)
return 0;
}
EXPORT_SYMBOL(drm_panel_of_backlight);
+
+static int dp_aux_backlight_update_status(struct backlight_device *bd)
+{
+ struct dp_aux_backlight *bl = bl_get_data(bd);
+ u16 brightness = backlight_get_brightness(bd);
+ int ret = 0;
+
+ if (brightness > 0) {
+ if (!bl->enabled) {
+ drm_edp_backlight_enable(bl->aux, &bl->info, brightness);
+ bl->enabled = true;
+ return 0;
+ }
+ ret = drm_edp_backlight_set_level(bl->aux, &bl->info, brightness);
+ } else {
+ if (bl->enabled) {
+ drm_edp_backlight_disable(bl->aux, &bl->info);
+ bl->enabled = false;
+ }
+ }
+
+ return ret;
+}
+
+static const struct backlight_ops dp_aux_bl_ops = {
+ .update_status = dp_aux_backlight_update_status,
+};
+
+/**
+ * drm_panel_dp_aux_backlight - create and use DP AUX backlight
+ * @panel: DRM panel
+ * @aux: The DP AUX channel to use
+ *
+ * Use this function to create and handle backlight if your panel
+ * supports backlight control over DP AUX channel using DPCD
+ * registers as per VESA's standard backlight control interface.
+ *
+ * When the panel is enabled backlight will be enabled after a
+ * successful call to &drm_panel_funcs.enable()
+ *
+ * When the panel is disabled backlight will be disabled before the
+ * call to &drm_panel_funcs.disable().
+ *
+ * A typical implementation for a panel driver supporting backlight
+ * control over DP AUX will call this function at probe time.
+ * Backlight will then be handled transparently without requiring
+ * any intervention from the driver.
+ *
+ * drm_panel_dp_aux_backlight() must be called after the call to drm_panel_init().
+ *
+ * Return: 0 on success or a negative error code on failure.
+ */
+int drm_panel_dp_aux_backlight(struct drm_panel *panel, struct drm_dp_aux *aux)
+{
+ struct dp_aux_backlight *bl;
+ struct backlight_properties props = { 0 };
+ u16 current_level;
+ u8 current_mode;
+ u8 edp_dpcd[EDP_DISPLAY_CTL_CAP_SIZE];
+ int ret;
+
+ if (!panel || !panel->dev || !aux)
+ return -EINVAL;
+
+ bl = devm_kzalloc(panel->dev, sizeof(*bl), GFP_KERNEL);
+ if (!bl)
+ return -ENOMEM;
+
+ bl->aux = aux;
+
+ ret = drm_dp_dpcd_read(aux, DP_EDP_DPCD_REV, edp_dpcd,
+ EDP_DISPLAY_CTL_CAP_SIZE);
+ if (ret < 0)
+ return ret;
+
+ if (!drm_edp_backlight_supported(edp_dpcd)) {
+ DRM_DEV_INFO(panel->dev, "DP AUX backlight is not supported\n");
+ return 0;
+ }
+
+ ret = drm_edp_backlight_init(aux, &bl->info, 0, edp_dpcd,
+ &current_level, &current_mode);
+ if (ret < 0)
+ return ret;
+
+ props.type = BACKLIGHT_RAW;
+ props.brightness = current_level;
+ props.max_brightness = bl->info.max;
+
+ bl->base = devm_backlight_device_register(panel->dev, "dp_aux_backlight",
+ panel->dev, bl,
+ &dp_aux_bl_ops, &props);
+ if (IS_ERR(bl->base))
+ return PTR_ERR(bl->base);
+
+ panel->backlight = bl->base;
+
+ return 0;
+}
+EXPORT_SYMBOL(drm_panel_dp_aux_backlight);
#endif

MODULE_AUTHOR("Thierry Reding <[email protected]>");
diff --git a/include/drm/drm_panel.h b/include/drm/drm_panel.h
index 33605c3..b1ba4de 100644
--- a/include/drm/drm_panel.h
+++ b/include/drm/drm_panel.h
@@ -32,6 +32,7 @@ struct backlight_device;
struct device_node;
struct drm_connector;
struct drm_device;
+struct drm_dp_aux;
struct drm_panel;
struct display_timing;

@@ -64,8 +65,8 @@ enum drm_panel_orientation;
* the panel. This is the job of the .unprepare() function.
*
* Backlight can be handled automatically if configured using
- * drm_panel_of_backlight(). Then the driver does not need to implement the
- * functionality to enable/disable backlight.
+ * drm_panel_of_backlight() or drm_panel_dp_aux_backlight(). Then the driver
+ * does not need to implement the functionality to enable/disable backlight.
*/
struct drm_panel_funcs {
/**
@@ -144,8 +145,8 @@ struct drm_panel {
* Backlight device, used to turn on backlight after the call
* to enable(), and to turn off backlight before the call to
* disable().
- * backlight is set by drm_panel_of_backlight() and drivers
- * shall not assign it.
+ * backlight is set by drm_panel_of_backlight()/drm_panel_dp_aux_backlight()
+ * and drivers shall not assign it.
*/
struct backlight_device *backlight;

@@ -208,11 +209,17 @@ static inline int of_drm_get_panel_orientation(const struct device_node *np,
#if IS_ENABLED(CONFIG_DRM_PANEL) && (IS_BUILTIN(CONFIG_BACKLIGHT_CLASS_DEVICE) || \
(IS_MODULE(CONFIG_DRM) && IS_MODULE(CONFIG_BACKLIGHT_CLASS_DEVICE)))
int drm_panel_of_backlight(struct drm_panel *panel);
+int drm_panel_dp_aux_backlight(struct drm_panel *panel, struct drm_dp_aux *aux);
#else
static inline int drm_panel_of_backlight(struct drm_panel *panel)
{
return 0;
}
+static inline int drm_panel_dp_aux_backlight(struct drm_panel *panel,
+ struct drm_dp_aux *aux)
+{
+ return 0;
+}
#endif

#endif
--
2.7.4

2021-05-30 18:58:40

by kernel test robot

[permalink] [raw]
Subject: Re: [v5 1/5] drm/panel: add basic DP AUX backlight support

Hi Rajeev,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on drm-intel/for-linux-next]
[also build test ERROR on drm-tip/drm-tip drm-exynos/exynos-drm-next tegra-drm/drm/tegra/for-next linus/master v5.13-rc3 next-20210528]
[cannot apply to drm/drm-next]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url: https://github.com/0day-ci/linux/commits/Rajeev-Nandan/drm-Support-basic-DPCD-backlight-in-panel-simple-and-add-a-new-panel-ATNA33XC20/20210530-235810
base: git://anongit.freedesktop.org/drm-intel for-linux-next
config: openrisc-randconfig-r002-20210530 (attached as .config)
compiler: or1k-linux-gcc (GCC) 9.3.0
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# https://github.com/0day-ci/linux/commit/1cf1b3f6b1f766d4e932422d1cdec19354acdcc3
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Rajeev-Nandan/drm-Support-basic-DPCD-backlight-in-panel-simple-and-add-a-new-panel-ATNA33XC20/20210530-235810
git checkout 1cf1b3f6b1f766d4e932422d1cdec19354acdcc3
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=openrisc

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <[email protected]>

All errors (new ones prefixed by >>):

>> drivers/gpu/drm/drm_panel.c:39:32: error: field 'info' has incomplete type
39 | struct drm_edp_backlight_info info;
| ^~~~
drivers/gpu/drm/drm_panel.c: In function 'dp_aux_backlight_update_status':
>> drivers/gpu/drm/drm_panel.c:362:4: error: implicit declaration of function 'drm_edp_backlight_enable'; did you mean 'backlight_enable'? [-Werror=implicit-function-declaration]
362 | drm_edp_backlight_enable(bl->aux, &bl->info, brightness);
| ^~~~~~~~~~~~~~~~~~~~~~~~
| backlight_enable
>> drivers/gpu/drm/drm_panel.c:366:9: error: implicit declaration of function 'drm_edp_backlight_set_level' [-Werror=implicit-function-declaration]
366 | ret = drm_edp_backlight_set_level(bl->aux, &bl->info, brightness);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/gpu/drm/drm_panel.c:369:4: error: implicit declaration of function 'drm_edp_backlight_disable'; did you mean 'backlight_disable'? [-Werror=implicit-function-declaration]
369 | drm_edp_backlight_disable(bl->aux, &bl->info);
| ^~~~~~~~~~~~~~~~~~~~~~~~~
| backlight_disable
drivers/gpu/drm/drm_panel.c: In function 'drm_panel_dp_aux_backlight':
>> drivers/gpu/drm/drm_panel.c:428:7: error: implicit declaration of function 'drm_edp_backlight_supported' [-Werror=implicit-function-declaration]
428 | if (!drm_edp_backlight_supported(edp_dpcd)) {
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/gpu/drm/drm_panel.c:433:8: error: implicit declaration of function 'drm_edp_backlight_init' [-Werror=implicit-function-declaration]
433 | ret = drm_edp_backlight_init(aux, &bl->info, 0, edp_dpcd,
| ^~~~~~~~~~~~~~~~~~~~~~
cc1: some warnings being treated as errors

Kconfig warnings: (for reference only)
WARNING: unmet direct dependencies detected for LOCKDEP
Depends on DEBUG_KERNEL && LOCK_DEBUGGING_SUPPORT && (FRAME_POINTER || MIPS || PPC || S390 || MICROBLAZE || ARM || ARC || X86)
Selected by
- PROVE_LOCKING && DEBUG_KERNEL && LOCK_DEBUGGING_SUPPORT
- DEBUG_LOCK_ALLOC && DEBUG_KERNEL && LOCK_DEBUGGING_SUPPORT


vim +/info +39 drivers/gpu/drm/drm_panel.c

35
36 struct dp_aux_backlight {
37 struct backlight_device *base;
38 struct drm_dp_aux *aux;
> 39 struct drm_edp_backlight_info info;
40 bool enabled;
41 };
42

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/[email protected]


Attachments:
(No filename) (4.12 kB)
.config.gz (34.84 kB)
Download all attachments

2021-05-30 18:59:27

by kernel test robot

[permalink] [raw]
Subject: Re: [v5 1/5] drm/panel: add basic DP AUX backlight support

Hi Rajeev,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on drm-intel/for-linux-next]
[also build test ERROR on drm-tip/drm-tip drm-exynos/exynos-drm-next tegra-drm/drm/tegra/for-next linus/master v5.13-rc3 next-20210528]
[cannot apply to drm/drm-next]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url: https://github.com/0day-ci/linux/commits/Rajeev-Nandan/drm-Support-basic-DPCD-backlight-in-panel-simple-and-add-a-new-panel-ATNA33XC20/20210530-235810
base: git://anongit.freedesktop.org/drm-intel for-linux-next
config: arm64-randconfig-r005-20210530 (attached as .config)
compiler: clang version 13.0.0 (https://github.com/llvm/llvm-project bc6799f2f79f0ae87e9f1ebf9d25ba799fbd25a9)
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# install arm64 cross compiling tool for clang build
# apt-get install binutils-aarch64-linux-gnu
# https://github.com/0day-ci/linux/commit/1cf1b3f6b1f766d4e932422d1cdec19354acdcc3
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Rajeev-Nandan/drm-Support-basic-DPCD-backlight-in-panel-simple-and-add-a-new-panel-ATNA33XC20/20210530-235810
git checkout 1cf1b3f6b1f766d4e932422d1cdec19354acdcc3
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=arm64

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <[email protected]>

All errors (new ones prefixed by >>):

>> drivers/gpu/drm/drm_panel.c:39:32: error: field has incomplete type 'struct drm_edp_backlight_info'
struct drm_edp_backlight_info info;
^
drivers/gpu/drm/drm_panel.c:39:9: note: forward declaration of 'struct drm_edp_backlight_info'
struct drm_edp_backlight_info info;
^
>> drivers/gpu/drm/drm_panel.c:362:4: error: implicit declaration of function 'drm_edp_backlight_enable' [-Werror,-Wimplicit-function-declaration]
drm_edp_backlight_enable(bl->aux, &bl->info, brightness);
^
drivers/gpu/drm/drm_panel.c:362:4: note: did you mean 'backlight_enable'?
include/linux/backlight.h:363:19: note: 'backlight_enable' declared here
static inline int backlight_enable(struct backlight_device *bd)
^
>> drivers/gpu/drm/drm_panel.c:366:9: error: implicit declaration of function 'drm_edp_backlight_set_level' [-Werror,-Wimplicit-function-declaration]
ret = drm_edp_backlight_set_level(bl->aux, &bl->info, brightness);
^
>> drivers/gpu/drm/drm_panel.c:369:4: error: implicit declaration of function 'drm_edp_backlight_disable' [-Werror,-Wimplicit-function-declaration]
drm_edp_backlight_disable(bl->aux, &bl->info);
^
drivers/gpu/drm/drm_panel.c:369:4: note: did you mean 'backlight_disable'?
include/linux/backlight.h:379:19: note: 'backlight_disable' declared here
static inline int backlight_disable(struct backlight_device *bd)
^
>> drivers/gpu/drm/drm_panel.c:428:7: error: implicit declaration of function 'drm_edp_backlight_supported' [-Werror,-Wimplicit-function-declaration]
if (!drm_edp_backlight_supported(edp_dpcd)) {
^
>> drivers/gpu/drm/drm_panel.c:433:8: error: implicit declaration of function 'drm_edp_backlight_init' [-Werror,-Wimplicit-function-declaration]
ret = drm_edp_backlight_init(aux, &bl->info, 0, edp_dpcd,
^
6 errors generated.


vim +39 drivers/gpu/drm/drm_panel.c

35
36 struct dp_aux_backlight {
37 struct backlight_device *base;
38 struct drm_dp_aux *aux;
> 39 struct drm_edp_backlight_info info;
40 bool enabled;
41 };
42

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/[email protected]


Attachments:
(No filename) (4.24 kB)
.config.gz (41.93 kB)
Download all attachments

2021-06-03 00:16:26

by Doug Anderson

[permalink] [raw]
Subject: Re: [v5 1/5] drm/panel: add basic DP AUX backlight support

Hi,

On Sun, May 30, 2021 at 8:57 AM Rajeev Nandan <[email protected]> wrote:
>
> +static int dp_aux_backlight_update_status(struct backlight_device *bd)
> +{
> + struct dp_aux_backlight *bl = bl_get_data(bd);
> + u16 brightness = backlight_get_brightness(bd);
> + int ret = 0;
> +
> + if (brightness > 0) {
> + if (!bl->enabled) {
> + drm_edp_backlight_enable(bl->aux, &bl->info, brightness);
> + bl->enabled = true;
> + return 0;
> + }
> + ret = drm_edp_backlight_set_level(bl->aux, &bl->info, brightness);
> + } else {
> + if (bl->enabled) {
> + drm_edp_backlight_disable(bl->aux, &bl->info);
> + bl->enabled = false;
> + }
> + }

I was trying to figure out if there are any races / locking problems /
problems trying to tweak the backlight when the panel is off. I don't
_think_ there are. Specifically:

1. Before turning the panel off, drm_panel will call
backlight_disable(). That will set BL_CORE_FBBLANK which is not set by
any other calls. Then it will call your
dp_aux_backlight_update_status().

2. Once BL_CORE_FBBLANK is set then backlight_get_brightness() will
always return 0.

This means that a transition from 0 -> non-zero (and enable) will
always only happen when the panel is on, which is good. It also means
that we'll always transition to 0 (disable the backlight) when the
panel turns off.

In terms of other races, it looks like the AUX transfer code handles
grabbing a mutex around transfers so we should be safe there.

So I guess the above is just a long-winded way of saying that this
looks right to me. :-)

BTW: we should probably make sure that the full set of people
identified by `./scripts/get_maintainer.pl -f
./drivers/video/backlight` are CCed on your series. I see Daniel
already and I've added the rest.


> +/**
> + * drm_panel_dp_aux_backlight - create and use DP AUX backlight
> + * @panel: DRM panel
> + * @aux: The DP AUX channel to use
> + *
> + * Use this function to create and handle backlight if your panel
> + * supports backlight control over DP AUX channel using DPCD
> + * registers as per VESA's standard backlight control interface.
> + *
> + * When the panel is enabled backlight will be enabled after a
> + * successful call to &drm_panel_funcs.enable()
> + *
> + * When the panel is disabled backlight will be disabled before the
> + * call to &drm_panel_funcs.disable().
> + *
> + * A typical implementation for a panel driver supporting backlight
> + * control over DP AUX will call this function at probe time.
> + * Backlight will then be handled transparently without requiring
> + * any intervention from the driver.
> + *
> + * drm_panel_dp_aux_backlight() must be called after the call to drm_panel_init().
> + *
> + * Return: 0 on success or a negative error code on failure.
> + */
> +int drm_panel_dp_aux_backlight(struct drm_panel *panel, struct drm_dp_aux *aux)
> +{
> + struct dp_aux_backlight *bl;
> + struct backlight_properties props = { 0 };
> + u16 current_level;
> + u8 current_mode;
> + u8 edp_dpcd[EDP_DISPLAY_CTL_CAP_SIZE];
> + int ret;
> +
> + if (!panel || !panel->dev || !aux)
> + return -EINVAL;
> +
> + bl = devm_kzalloc(panel->dev, sizeof(*bl), GFP_KERNEL);
> + if (!bl)
> + return -ENOMEM;
> +
> + bl->aux = aux;
> +
> + ret = drm_dp_dpcd_read(aux, DP_EDP_DPCD_REV, edp_dpcd,
> + EDP_DISPLAY_CTL_CAP_SIZE);
> + if (ret < 0)
> + return ret;
> +
> + if (!drm_edp_backlight_supported(edp_dpcd)) {
> + DRM_DEV_INFO(panel->dev, "DP AUX backlight is not supported\n");
> + return 0;
> + }

nit: move this part up above the memory allocation. There's no reason
to allocate memory for "bl" if the backlight isn't supported.


> @@ -64,8 +65,8 @@ enum drm_panel_orientation;
> * the panel. This is the job of the .unprepare() function.
> *
> * Backlight can be handled automatically if configured using
> - * drm_panel_of_backlight(). Then the driver does not need to implement the
> - * functionality to enable/disable backlight.
> + * drm_panel_of_backlight() or drm_panel_dp_aux_backlight(). Then the driver
> + * does not need to implement the functionality to enable/disable backlight.
> */
> struct drm_panel_funcs {
> /**
> @@ -144,8 +145,8 @@ struct drm_panel {
> * Backlight device, used to turn on backlight after the call
> * to enable(), and to turn off backlight before the call to
> * disable().
> - * backlight is set by drm_panel_of_backlight() and drivers
> - * shall not assign it.
> + * backlight is set by drm_panel_of_backlight()/drm_panel_dp_aux_backlight()
> + * and drivers shall not assign it.

Slight nit that I would have wrapped the drm_panel_dp_aux_backlight()
to the next line just to avoid one really long line followed by a
short one.

Other than the two nits (ordering of memory allocation and word
wrapping in a comment), this looks good to me. Feel free to add my
Reviewed-by tag when you fix the nits.

NOTE: Even though I have commit access to drm-misc now, I wouldn't
feel comfortable merging this to drm-misc myself without review
feedback from someone more senior. Obviously we're still blocked on my
and Lyude's series landing first, but even assuming those just land
as-is we'll need some more adult supervision before this can land. ;-)
That being said, I personally think this looks pretty nice now.


-Doug



> */
> struct backlight_device *backlight;
>
> @@ -208,11 +209,17 @@ static inline int of_drm_get_panel_orientation(const struct device_node *np,
> #if IS_ENABLED(CONFIG_DRM_PANEL) && (IS_BUILTIN(CONFIG_BACKLIGHT_CLASS_DEVICE) || \
> (IS_MODULE(CONFIG_DRM) && IS_MODULE(CONFIG_BACKLIGHT_CLASS_DEVICE)))
> int drm_panel_of_backlight(struct drm_panel *panel);
> +int drm_panel_dp_aux_backlight(struct drm_panel *panel, struct drm_dp_aux *aux);
> #else
> static inline int drm_panel_of_backlight(struct drm_panel *panel)
> {
> return 0;
> }
> +static inline int drm_panel_dp_aux_backlight(struct drm_panel *panel,
> + struct drm_dp_aux *aux)
> +{
> + return 0;
> +}
> #endif
>
> #endif
> --
> 2.7.4
>

2021-06-03 06:28:31

by Rajeev Nandan

[permalink] [raw]
Subject: Re: [v5 1/5] drm/panel: add basic DP AUX backlight support

On 03-06-2021 05:35, Doug Anderson wrote:
> Hi,
>
> On Sun, May 30, 2021 at 8:57 AM Rajeev Nandan <[email protected]>
> wrote:
>>

>
> Other than the two nits (ordering of memory allocation and word
> wrapping in a comment), this looks good to me. Feel free to add my
> Reviewed-by tag when you fix the nits.
>
> NOTE: Even though I have commit access to drm-misc now, I wouldn't
> feel comfortable merging this to drm-misc myself without review
> feedback from someone more senior. Obviously we're still blocked on my
> and Lyude's series landing first, but even assuming those just land
> as-is we'll need some more adult supervision before this can land. ;-)
> That being said, I personally think this looks pretty nice now.
>
>
> -Doug

Thank you, Doug.

I'll address the review comments of this patch and another patch (v5
3/5)
in the next spin. I'll wait for Lyude to check this series, as she
wanted
to review it in a few days.


Thanks,
Rajeev