* [v6 1/5] drm/panel: add basic DP AUX backlight support
2021-06-12 12:07 [v6 0/5] drm: Support basic DPCD backlight in panel-simple and add a new panel ATNA33XC20 Rajeev Nandan
@ 2021-06-12 12:07 ` Rajeev Nandan
2021-06-16 19:22 ` Lyude Paul
2021-06-12 12:07 ` [v6 2/5] drm/panel-simple: Support DP AUX backlight Rajeev Nandan
` (3 subsequent siblings)
4 siblings, 1 reply; 8+ messages in thread
From: Rajeev Nandan @ 2021-06-12 12:07 UTC (permalink / raw)
To: dri-devel, linux-arm-msm, freedreno, devicetree
Cc: daniel.thompson, Rajeev Nandan, mkrishn, jani.nikula, lee.jones,
linux-kernel, abhinavk, dianders, a.hajda, thierry.reding,
seanpaul, laurent.pinchart, linux-fbdev, kalyan_t, jingoohan1,
hoegsberg, sam
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 <rajeevny@codeaurora.org>
Reviewed-by: Douglas Anderson <dianders@chromium.org>
---
Changes in v5:
- New
Changes in v6:
- Fixed ordering of memory allocation (Douglas)
- Updated word wrapping in a comment (Douglas)
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..9e65342 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;
+
+ 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;
+ }
+
+ bl = devm_kzalloc(panel->dev, sizeof(*bl), GFP_KERNEL);
+ if (!bl)
+ return -ENOMEM;
+
+ bl->aux = aux;
+
+ ret = drm_edp_backlight_init(aux, &bl->info, 0, edp_dpcd,
+ ¤t_level, ¤t_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 <treding@nvidia.com>");
diff --git a/include/drm/drm_panel.h b/include/drm/drm_panel.h
index 33605c3..3ebfaa6 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() or
+ * 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
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [v6 1/5] drm/panel: add basic DP AUX backlight support
2021-06-12 12:07 ` [v6 1/5] drm/panel: add basic DP AUX backlight support Rajeev Nandan
@ 2021-06-16 19:22 ` Lyude Paul
0 siblings, 0 replies; 8+ messages in thread
From: Lyude Paul @ 2021-06-16 19:22 UTC (permalink / raw)
To: Rajeev Nandan, dri-devel, linux-arm-msm, freedreno, devicetree
Cc: daniel.thompson, mkrishn, jani.nikula, lee.jones, linux-kernel,
abhinavk, dianders, a.hajda, robdclark, thierry.reding, seanpaul,
laurent.pinchart, linux-fbdev, kalyan_t, jingoohan1, hoegsberg,
sam
Reviewed-by: Lyude Paul <lyude@redhat.com>
On Sat, 2021-06-12 at 17:37 +0530, Rajeev Nandan wrote:
> 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 <rajeevny@codeaurora.org>
> Reviewed-by: Douglas Anderson <dianders@chromium.org>
> ---
>
> Changes in v5:
> - New
>
> Changes in v6:
> - Fixed ordering of memory allocation (Douglas)
> - Updated word wrapping in a comment (Douglas)
>
> 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..9e65342 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;
> +
> + 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;
> + }
> +
> + bl = devm_kzalloc(panel->dev, sizeof(*bl), GFP_KERNEL);
> + if (!bl)
> + return -ENOMEM;
> +
> + bl->aux = aux;
> +
> + ret = drm_edp_backlight_init(aux, &bl->info, 0, edp_dpcd,
> + ¤t_level, ¤t_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 <treding@nvidia.com>");
> diff --git a/include/drm/drm_panel.h b/include/drm/drm_panel.h
> index 33605c3..3ebfaa6 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() or
> + * 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
--
Cheers,
Lyude Paul (she/her)
Software Engineer at Red Hat
^ permalink raw reply [flat|nested] 8+ messages in thread
* [v6 2/5] drm/panel-simple: Support DP AUX backlight
2021-06-12 12:07 [v6 0/5] drm: Support basic DPCD backlight in panel-simple and add a new panel ATNA33XC20 Rajeev Nandan
2021-06-12 12:07 ` [v6 1/5] drm/panel: add basic DP AUX backlight support Rajeev Nandan
@ 2021-06-12 12:07 ` Rajeev Nandan
2021-06-12 12:08 ` [v6 3/5] drm/panel-simple: Support for delays between GPIO & regulator Rajeev Nandan
` (2 subsequent siblings)
4 siblings, 0 replies; 8+ messages in thread
From: Rajeev Nandan @ 2021-06-12 12:07 UTC (permalink / raw)
To: dri-devel, linux-arm-msm, freedreno, devicetree
Cc: daniel.thompson, Rajeev Nandan, mkrishn, jani.nikula, lee.jones,
linux-kernel, abhinavk, dianders, a.hajda, thierry.reding,
seanpaul, laurent.pinchart, linux-fbdev, kalyan_t, jingoohan1,
hoegsberg, sam
If there is no backlight specified in the device tree and the panel
has access to the DP AUX channel then create a DP AUX backlight if
supported by the panel.
Signed-off-by: Rajeev Nandan <rajeevny@codeaurora.org>
Reviewed-by: Douglas Anderson <dianders@chromium.org>
---
(no changes since v5)
This patch depends on the previous patch (2/5) of this series.
Changes in v4:
- New
Changes in v5:
- Address review comments and move backlight functions to drm_panel.c (Douglas)
- Create and register DP AUX backlight if there is no backlight specified in the
device tree and panel has the DP AUX channel. (Douglas)
- The new drm_panel_dp_aux_backlight() will do the drm_edp_backlight_supported() check.
drivers/gpu/drm/panel/panel-simple.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/drivers/gpu/drm/panel/panel-simple.c b/drivers/gpu/drm/panel/panel-simple.c
index df6fbd1..26555ec 100644
--- a/drivers/gpu/drm/panel/panel-simple.c
+++ b/drivers/gpu/drm/panel/panel-simple.c
@@ -800,6 +800,12 @@ static int panel_simple_probe(struct device *dev, const struct panel_desc *desc,
if (err)
goto disable_pm_runtime;
+ if (!panel->base.backlight && panel->aux) {
+ err = drm_panel_dp_aux_backlight(&panel->base, panel->aux);
+ if (err)
+ goto disable_pm_runtime;
+ }
+
drm_panel_add(&panel->base);
return 0;
--
2.7.4
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [v6 3/5] drm/panel-simple: Support for delays between GPIO & regulator
2021-06-12 12:07 [v6 0/5] drm: Support basic DPCD backlight in panel-simple and add a new panel ATNA33XC20 Rajeev Nandan
2021-06-12 12:07 ` [v6 1/5] drm/panel: add basic DP AUX backlight support Rajeev Nandan
2021-06-12 12:07 ` [v6 2/5] drm/panel-simple: Support DP AUX backlight Rajeev Nandan
@ 2021-06-12 12:08 ` Rajeev Nandan
2021-06-12 12:08 ` [v6 4/5] dt-bindings: display: simple: Add Samsung ATNA33XC20 Rajeev Nandan
2021-06-12 12:08 ` [v6 5/5] drm/panel-simple: " Rajeev Nandan
4 siblings, 0 replies; 8+ messages in thread
From: Rajeev Nandan @ 2021-06-12 12:08 UTC (permalink / raw)
To: dri-devel, linux-arm-msm, freedreno, devicetree
Cc: daniel.thompson, Rajeev Nandan, mkrishn, jani.nikula,
linux-kernel, abhinavk, dianders, a.hajda, thierry.reding,
seanpaul, laurent.pinchart, kalyan_t, hoegsberg, sam
Some panels datasheets may specify a delay between the enable GPIO and
the regulator. Support this in panel-simple.
Signed-off-by: Rajeev Nandan <rajeevny@codeaurora.org>
Reviewed-by: Douglas Anderson <dianders@chromium.org>
---
Changes in v4:
- New
Changes in v5:
- Update description (Douglas)
- Warn if "power_to_enable" or "disable_to_power_off" is non-zero and panel->enable_gpio
is NULL (Douglas)
Changes in v6:
- Update warning message to make it more meaningful. (Douglas)
drivers/gpu/drm/panel/panel-simple.c | 28 ++++++++++++++++++++++++++++
1 file changed, 28 insertions(+)
diff --git a/drivers/gpu/drm/panel/panel-simple.c b/drivers/gpu/drm/panel/panel-simple.c
index 26555ec..86e5a45 100644
--- a/drivers/gpu/drm/panel/panel-simple.c
+++ b/drivers/gpu/drm/panel/panel-simple.c
@@ -133,6 +133,22 @@ struct panel_desc {
unsigned int prepare_to_enable;
/**
+ * @delay.power_to_enable: Time for the power to enable the display on.
+ *
+ * The time (in milliseconds) to wait after powering up the display
+ * before asserting its enable pin.
+ */
+ unsigned int power_to_enable;
+
+ /**
+ * @delay.disable_to_power_off: Time for the disable to power the display off.
+ *
+ * The time (in milliseconds) to wait before powering off the display
+ * after deasserting its enable pin.
+ */
+ unsigned int disable_to_power_off;
+
+ /**
* @delay.enable: Time for the panel to display a valid frame.
*
* The time (in milliseconds) that it takes for the panel to
@@ -347,6 +363,10 @@ static int panel_simple_suspend(struct device *dev)
struct panel_simple *p = dev_get_drvdata(dev);
gpiod_set_value_cansleep(p->enable_gpio, 0);
+
+ if (p->desc->delay.disable_to_power_off)
+ msleep(p->desc->delay.disable_to_power_off);
+
regulator_disable(p->supply);
p->unprepared_time = ktime_get();
@@ -407,6 +427,9 @@ static int panel_simple_prepare_once(struct panel_simple *p)
return err;
}
+ if (p->desc->delay.power_to_enable)
+ msleep(p->desc->delay.power_to_enable);
+
gpiod_set_value_cansleep(p->enable_gpio, 1);
delay = p->desc->delay.prepare;
@@ -782,6 +805,11 @@ static int panel_simple_probe(struct device *dev, const struct panel_desc *desc,
break;
}
+ if (!panel->enable_gpio && desc->delay.disable_to_power_off)
+ dev_warn(dev, "Need a delay after disabling panel GPIO, but a GPIO wasn't provided\n");
+ if (!panel->enable_gpio && desc->delay.power_to_enable)
+ dev_warn(dev, "Need a delay before enabling panel GPIO, but a GPIO wasn't provided\n");
+
dev_set_drvdata(dev, panel);
/*
--
2.7.4
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [v6 4/5] dt-bindings: display: simple: Add Samsung ATNA33XC20
2021-06-12 12:07 [v6 0/5] drm: Support basic DPCD backlight in panel-simple and add a new panel ATNA33XC20 Rajeev Nandan
` (2 preceding siblings ...)
2021-06-12 12:08 ` [v6 3/5] drm/panel-simple: Support for delays between GPIO & regulator Rajeev Nandan
@ 2021-06-12 12:08 ` Rajeev Nandan
2021-06-12 12:08 ` [v6 5/5] drm/panel-simple: " Rajeev Nandan
4 siblings, 0 replies; 8+ messages in thread
From: Rajeev Nandan @ 2021-06-12 12:08 UTC (permalink / raw)
To: dri-devel, linux-arm-msm, freedreno, devicetree
Cc: daniel.thompson, Rajeev Nandan, mkrishn, jani.nikula,
linux-kernel, abhinavk, dianders, a.hajda, thierry.reding,
seanpaul, laurent.pinchart, kalyan_t, hoegsberg, sam
Add Samsung 13.3" FHD eDP AMOLED panel.
Signed-off-by: Rajeev Nandan <rajeevny@codeaurora.org>
Reviewed-by: Douglas Anderson <dianders@chromium.org>
Acked-by: Rob Herring <robh@kernel.org>
---
(no changes since v4)
Changes in v4:
- New
Documentation/devicetree/bindings/display/panel/panel-simple.yaml | 2 ++
1 file changed, 2 insertions(+)
diff --git a/Documentation/devicetree/bindings/display/panel/panel-simple.yaml b/Documentation/devicetree/bindings/display/panel/panel-simple.yaml
index 4a0a5e1..f5acfd6 100644
--- a/Documentation/devicetree/bindings/display/panel/panel-simple.yaml
+++ b/Documentation/devicetree/bindings/display/panel/panel-simple.yaml
@@ -242,6 +242,8 @@ properties:
- rocktech,rk101ii01d-ct
# Rocktech Display Ltd. RK070ER9427 800(RGB)x480 TFT LCD panel
- rocktech,rk070er9427
+ # Samsung 13.3" FHD (1920x1080 pixels) eDP AMOLED panel
+ - samsung,atna33xc20
# Samsung 12.2" (2560x1600 pixels) TFT LCD panel
- samsung,lsn122dl01-c01
# Samsung Electronics 10.1" WSVGA TFT LCD panel
--
2.7.4
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [v6 5/5] drm/panel-simple: Add Samsung ATNA33XC20
2021-06-12 12:07 [v6 0/5] drm: Support basic DPCD backlight in panel-simple and add a new panel ATNA33XC20 Rajeev Nandan
` (3 preceding siblings ...)
2021-06-12 12:08 ` [v6 4/5] dt-bindings: display: simple: Add Samsung ATNA33XC20 Rajeev Nandan
@ 2021-06-12 12:08 ` Rajeev Nandan
2021-06-16 15:02 ` Doug Anderson
4 siblings, 1 reply; 8+ messages in thread
From: Rajeev Nandan @ 2021-06-12 12:08 UTC (permalink / raw)
To: dri-devel, linux-arm-msm, freedreno, devicetree
Cc: daniel.thompson, Rajeev Nandan, mkrishn, jani.nikula,
linux-kernel, abhinavk, dianders, a.hajda, thierry.reding,
seanpaul, laurent.pinchart, kalyan_t, hoegsberg, sam
Add Samsung 13.3" FHD eDP AMOLED panel.
Signed-off-by: Rajeev Nandan <rajeevny@codeaurora.org>
Reviewed-by: Douglas Anderson <dianders@chromium.org>
---
(no changes since v5)
Changes in v4:
- New
Changes in v5:
- Remove "uses_dpcd_backlight" property, not required now. (Douglas)
drivers/gpu/drm/panel/panel-simple.c | 33 +++++++++++++++++++++++++++++++++
1 file changed, 33 insertions(+)
diff --git a/drivers/gpu/drm/panel/panel-simple.c b/drivers/gpu/drm/panel/panel-simple.c
index 86e5a45..23242fc 100644
--- a/drivers/gpu/drm/panel/panel-simple.c
+++ b/drivers/gpu/drm/panel/panel-simple.c
@@ -3562,6 +3562,36 @@ static const struct panel_desc rocktech_rk101ii01d_ct = {
.connector_type = DRM_MODE_CONNECTOR_LVDS,
};
+static const struct drm_display_mode samsung_atna33xc20_mode = {
+ .clock = 138770,
+ .hdisplay = 1920,
+ .hsync_start = 1920 + 48,
+ .hsync_end = 1920 + 48 + 32,
+ .htotal = 1920 + 48 + 32 + 80,
+ .vdisplay = 1080,
+ .vsync_start = 1080 + 8,
+ .vsync_end = 1080 + 8 + 8,
+ .vtotal = 1080 + 8 + 8 + 16,
+ .flags = DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC,
+};
+
+static const struct panel_desc samsung_atna33xc20 = {
+ .modes = &samsung_atna33xc20_mode,
+ .num_modes = 1,
+ .bpc = 10,
+ .size = {
+ .width = 294,
+ .height = 165,
+ },
+ .delay = {
+ .disable_to_power_off = 150,
+ .power_to_enable = 150,
+ .hpd_absent_delay = 200,
+ .unprepare = 500,
+ },
+ .connector_type = DRM_MODE_CONNECTOR_eDP,
+};
+
static const struct drm_display_mode samsung_lsn122dl01_c01_mode = {
.clock = 271560,
.hdisplay = 2560,
@@ -4563,6 +4593,9 @@ static const struct of_device_id platform_of_match[] = {
.compatible = "rocktech,rk101ii01d-ct",
.data = &rocktech_rk101ii01d_ct,
}, {
+ .compatible = "samsung,atna33xc20",
+ .data = &samsung_atna33xc20,
+ }, {
.compatible = "samsung,lsn122dl01-c01",
.data = &samsung_lsn122dl01_c01,
}, {
--
2.7.4
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [v6 5/5] drm/panel-simple: Add Samsung ATNA33XC20
2021-06-12 12:08 ` [v6 5/5] drm/panel-simple: " Rajeev Nandan
@ 2021-06-16 15:02 ` Doug Anderson
0 siblings, 0 replies; 8+ messages in thread
From: Doug Anderson @ 2021-06-16 15:02 UTC (permalink / raw)
To: Rajeev Nandan
Cc: open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS,
Daniel Thompson, Krishna Manikandan, Sam Ravnborg, Jani Nikula,
linux-arm-msm, Abhinav Kumar, LKML, dri-devel, Andrzej Hajda,
Rob Clark, Thierry Reding, Sean Paul, Laurent Pinchart,
Kalyan Thota, Kristian H. Kristensen, freedreno
Hi,
On Sat, Jun 12, 2021 at 5:09 AM Rajeev Nandan <rajeevny@codeaurora.org> wrote:
>
> +static const struct panel_desc samsung_atna33xc20 = {
> + .modes = &samsung_atna33xc20_mode,
> + .num_modes = 1,
> + .bpc = 10,
> + .size = {
> + .width = 294,
> + .height = 165,
> + },
> + .delay = {
> + .disable_to_power_off = 150,
> + .power_to_enable = 150,
As per <https://crrev.com/c/2966167> it's apparently been discovered
that these should be:
.disable_to_power_off = 200,
.power_to_enable = 400,
^ permalink raw reply [flat|nested] 8+ messages in thread