* [PATCH v3 0/4] Panel rotation patches @ 2019-06-22 3:41 ` Derek Basehore 0 siblings, 0 replies; 36+ messages in thread From: Derek Basehore @ 2019-06-22 3:41 UTC (permalink / raw) To: linux-kernel Cc: Maarten Lankhorst, Maxime Ripard, Sean Paul, David Airlie, Daniel Vetter, Thierry Reding, Sam Ravnborg, Jani Nikula, Joonas Lahtinen, Rodrigo Vivi, CK Hu, Philipp Zabel, Matthias Brugger, dri-devel, intel-gfx, linux-arm-kernel, linux-mediatek, Derek Basehore This adds the plumbing for reading panel rotation from the devicetree and sets up adding a panel property for the panel orientation on Mediatek SoCs when a rotation is present. v3 changes: -changed from attach/detach callbacks to directly setting fixed panel values in drm_panel_attach -removed update to Documentation -added separate function for quirked panel orientation property init v2 changes: fixed build errors in i915 Derek Basehore (4): drm/panel: Add helper for reading DT rotation drm/panel: set display info in panel attach drm/connector: Split out orientation quirk detection drm/mtk: add panel orientation property drivers/gpu/drm/drm_connector.c | 45 ++++++++++++++----- drivers/gpu/drm/drm_panel.c | 70 ++++++++++++++++++++++++++++++ drivers/gpu/drm/i915/intel_dp.c | 4 +- drivers/gpu/drm/i915/vlv_dsi.c | 5 +-- drivers/gpu/drm/mediatek/mtk_dsi.c | 8 ++++ include/drm/drm_connector.h | 2 + include/drm/drm_panel.h | 21 +++++++++ 7 files changed, 138 insertions(+), 17 deletions(-) -- 2.22.0.410.gd8fdbe21b5-goog ^ permalink raw reply [flat|nested] 36+ messages in thread
* [PATCH v3 0/4] Panel rotation patches @ 2019-06-22 3:41 ` Derek Basehore 0 siblings, 0 replies; 36+ messages in thread From: Derek Basehore @ 2019-06-22 3:41 UTC (permalink / raw) To: linux-kernel Cc: Derek Basehore, Philipp Zabel, Maxime Ripard, Sam Ravnborg, intel-gfx, Joonas Lahtinen, Maarten Lankhorst, Jani Nikula, David Airlie, Thierry Reding, Matthias Brugger, dri-devel, Daniel Vetter, Rodrigo Vivi, CK Hu, linux-mediatek, Sean Paul, linux-arm-kernel This adds the plumbing for reading panel rotation from the devicetree and sets up adding a panel property for the panel orientation on Mediatek SoCs when a rotation is present. v3 changes: -changed from attach/detach callbacks to directly setting fixed panel values in drm_panel_attach -removed update to Documentation -added separate function for quirked panel orientation property init v2 changes: fixed build errors in i915 Derek Basehore (4): drm/panel: Add helper for reading DT rotation drm/panel: set display info in panel attach drm/connector: Split out orientation quirk detection drm/mtk: add panel orientation property drivers/gpu/drm/drm_connector.c | 45 ++++++++++++++----- drivers/gpu/drm/drm_panel.c | 70 ++++++++++++++++++++++++++++++ drivers/gpu/drm/i915/intel_dp.c | 4 +- drivers/gpu/drm/i915/vlv_dsi.c | 5 +-- drivers/gpu/drm/mediatek/mtk_dsi.c | 8 ++++ include/drm/drm_connector.h | 2 + include/drm/drm_panel.h | 21 +++++++++ 7 files changed, 138 insertions(+), 17 deletions(-) -- 2.22.0.410.gd8fdbe21b5-goog _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 36+ messages in thread
* [PATCH v3 0/4] Panel rotation patches @ 2019-06-22 3:41 ` Derek Basehore 0 siblings, 0 replies; 36+ messages in thread From: Derek Basehore @ 2019-06-22 3:41 UTC (permalink / raw) To: linux-kernel Cc: Derek Basehore, Philipp Zabel, Maxime Ripard, Sam Ravnborg, intel-gfx, David Airlie, Matthias Brugger, dri-devel, CK Hu, linux-mediatek, linux-arm-kernel This adds the plumbing for reading panel rotation from the devicetree and sets up adding a panel property for the panel orientation on Mediatek SoCs when a rotation is present. v3 changes: -changed from attach/detach callbacks to directly setting fixed panel values in drm_panel_attach -removed update to Documentation -added separate function for quirked panel orientation property init v2 changes: fixed build errors in i915 Derek Basehore (4): drm/panel: Add helper for reading DT rotation drm/panel: set display info in panel attach drm/connector: Split out orientation quirk detection drm/mtk: add panel orientation property drivers/gpu/drm/drm_connector.c | 45 ++++++++++++++----- drivers/gpu/drm/drm_panel.c | 70 ++++++++++++++++++++++++++++++ drivers/gpu/drm/i915/intel_dp.c | 4 +- drivers/gpu/drm/i915/vlv_dsi.c | 5 +-- drivers/gpu/drm/mediatek/mtk_dsi.c | 8 ++++ include/drm/drm_connector.h | 2 + include/drm/drm_panel.h | 21 +++++++++ 7 files changed, 138 insertions(+), 17 deletions(-) -- 2.22.0.410.gd8fdbe21b5-goog _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply [flat|nested] 36+ messages in thread
* [PATCH v3 1/4] drm/panel: Add helper for reading DT rotation 2019-06-22 3:41 ` Derek Basehore (?) @ 2019-06-22 3:41 ` Derek Basehore -1 siblings, 0 replies; 36+ messages in thread From: Derek Basehore @ 2019-06-22 3:41 UTC (permalink / raw) To: linux-kernel Cc: Maarten Lankhorst, Maxime Ripard, Sean Paul, David Airlie, Daniel Vetter, Thierry Reding, Sam Ravnborg, Jani Nikula, Joonas Lahtinen, Rodrigo Vivi, CK Hu, Philipp Zabel, Matthias Brugger, dri-devel, intel-gfx, linux-arm-kernel, linux-mediatek, Derek Basehore This adds a helper function for reading the rotation (panel orientation) from the device tree. Signed-off-by: Derek Basehore <dbasehore@chromium.org> --- drivers/gpu/drm/drm_panel.c | 42 +++++++++++++++++++++++++++++++++++++ include/drm/drm_panel.h | 7 +++++++ 2 files changed, 49 insertions(+) diff --git a/drivers/gpu/drm/drm_panel.c b/drivers/gpu/drm/drm_panel.c index dbd5b873e8f2..507099af4b57 100644 --- a/drivers/gpu/drm/drm_panel.c +++ b/drivers/gpu/drm/drm_panel.c @@ -172,6 +172,48 @@ struct drm_panel *of_drm_find_panel(const struct device_node *np) return ERR_PTR(-EPROBE_DEFER); } EXPORT_SYMBOL(of_drm_find_panel); + +/** + * of_drm_get_panel_orientation - look up the rotation of the panel using a + * device tree node + * @np: device tree node of the panel + * @orientation: orientation enum to be filled in + * + * Looks up the rotation of a panel in the device tree. The rotation in the + * device tree is counter clockwise. + * + * Return: 0 when a valid rotation value (0, 90, 180, or 270) is read or the + * rotation property doesn't exist. -EERROR otherwise. + */ +int of_drm_get_panel_orientation(const struct device_node *np, + enum drm_panel_orientation *orientation) +{ + int rotation, ret; + + ret = of_property_read_u32(np, "rotation", &rotation); + if (ret == -EINVAL) { + /* Don't return an error if there's no rotation property. */ + *orientation = DRM_MODE_PANEL_ORIENTATION_UNKNOWN; + return 0; + } + + if (ret < 0) + return ret; + + if (rotation == 0) + *orientation = DRM_MODE_PANEL_ORIENTATION_NORMAL; + else if (rotation == 90) + *orientation = DRM_MODE_PANEL_ORIENTATION_RIGHT_UP; + else if (rotation == 180) + *orientation = DRM_MODE_PANEL_ORIENTATION_BOTTOM_UP; + else if (rotation == 270) + *orientation = DRM_MODE_PANEL_ORIENTATION_LEFT_UP; + else + return -EINVAL; + + return 0; +} +EXPORT_SYMBOL(of_drm_get_panel_orientation); #endif MODULE_AUTHOR("Thierry Reding <treding@nvidia.com>"); diff --git a/include/drm/drm_panel.h b/include/drm/drm_panel.h index 8c738c0e6e9f..3564952f1a4f 100644 --- a/include/drm/drm_panel.h +++ b/include/drm/drm_panel.h @@ -197,11 +197,18 @@ int drm_panel_detach(struct drm_panel *panel); #if defined(CONFIG_OF) && defined(CONFIG_DRM_PANEL) struct drm_panel *of_drm_find_panel(const struct device_node *np); +int of_drm_get_panel_orientation(const struct device_node *np, + enum drm_panel_orientation *orientation); #else static inline struct drm_panel *of_drm_find_panel(const struct device_node *np) { return ERR_PTR(-ENODEV); } +int of_drm_get_panel_orientation(const struct device_node *np, + enum drm_panel_orientation *orientation) +{ + return -ENODEV; +} #endif #endif -- 2.22.0.410.gd8fdbe21b5-goog ^ permalink raw reply related [flat|nested] 36+ messages in thread
* [PATCH v3 1/4] drm/panel: Add helper for reading DT rotation @ 2019-06-22 3:41 ` Derek Basehore 0 siblings, 0 replies; 36+ messages in thread From: Derek Basehore @ 2019-06-22 3:41 UTC (permalink / raw) To: linux-kernel Cc: Derek Basehore, Philipp Zabel, Maxime Ripard, Sam Ravnborg, intel-gfx, Joonas Lahtinen, Maarten Lankhorst, Jani Nikula, David Airlie, Thierry Reding, Matthias Brugger, dri-devel, Daniel Vetter, Rodrigo Vivi, CK Hu, linux-mediatek, Sean Paul, linux-arm-kernel This adds a helper function for reading the rotation (panel orientation) from the device tree. Signed-off-by: Derek Basehore <dbasehore@chromium.org> --- drivers/gpu/drm/drm_panel.c | 42 +++++++++++++++++++++++++++++++++++++ include/drm/drm_panel.h | 7 +++++++ 2 files changed, 49 insertions(+) diff --git a/drivers/gpu/drm/drm_panel.c b/drivers/gpu/drm/drm_panel.c index dbd5b873e8f2..507099af4b57 100644 --- a/drivers/gpu/drm/drm_panel.c +++ b/drivers/gpu/drm/drm_panel.c @@ -172,6 +172,48 @@ struct drm_panel *of_drm_find_panel(const struct device_node *np) return ERR_PTR(-EPROBE_DEFER); } EXPORT_SYMBOL(of_drm_find_panel); + +/** + * of_drm_get_panel_orientation - look up the rotation of the panel using a + * device tree node + * @np: device tree node of the panel + * @orientation: orientation enum to be filled in + * + * Looks up the rotation of a panel in the device tree. The rotation in the + * device tree is counter clockwise. + * + * Return: 0 when a valid rotation value (0, 90, 180, or 270) is read or the + * rotation property doesn't exist. -EERROR otherwise. + */ +int of_drm_get_panel_orientation(const struct device_node *np, + enum drm_panel_orientation *orientation) +{ + int rotation, ret; + + ret = of_property_read_u32(np, "rotation", &rotation); + if (ret == -EINVAL) { + /* Don't return an error if there's no rotation property. */ + *orientation = DRM_MODE_PANEL_ORIENTATION_UNKNOWN; + return 0; + } + + if (ret < 0) + return ret; + + if (rotation == 0) + *orientation = DRM_MODE_PANEL_ORIENTATION_NORMAL; + else if (rotation == 90) + *orientation = DRM_MODE_PANEL_ORIENTATION_RIGHT_UP; + else if (rotation == 180) + *orientation = DRM_MODE_PANEL_ORIENTATION_BOTTOM_UP; + else if (rotation == 270) + *orientation = DRM_MODE_PANEL_ORIENTATION_LEFT_UP; + else + return -EINVAL; + + return 0; +} +EXPORT_SYMBOL(of_drm_get_panel_orientation); #endif MODULE_AUTHOR("Thierry Reding <treding@nvidia.com>"); diff --git a/include/drm/drm_panel.h b/include/drm/drm_panel.h index 8c738c0e6e9f..3564952f1a4f 100644 --- a/include/drm/drm_panel.h +++ b/include/drm/drm_panel.h @@ -197,11 +197,18 @@ int drm_panel_detach(struct drm_panel *panel); #if defined(CONFIG_OF) && defined(CONFIG_DRM_PANEL) struct drm_panel *of_drm_find_panel(const struct device_node *np); +int of_drm_get_panel_orientation(const struct device_node *np, + enum drm_panel_orientation *orientation); #else static inline struct drm_panel *of_drm_find_panel(const struct device_node *np) { return ERR_PTR(-ENODEV); } +int of_drm_get_panel_orientation(const struct device_node *np, + enum drm_panel_orientation *orientation) +{ + return -ENODEV; +} #endif #endif -- 2.22.0.410.gd8fdbe21b5-goog _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply related [flat|nested] 36+ messages in thread
* [PATCH v3 1/4] drm/panel: Add helper for reading DT rotation @ 2019-06-22 3:41 ` Derek Basehore 0 siblings, 0 replies; 36+ messages in thread From: Derek Basehore @ 2019-06-22 3:41 UTC (permalink / raw) To: linux-kernel Cc: Derek Basehore, Philipp Zabel, Maxime Ripard, Sam Ravnborg, intel-gfx, David Airlie, Matthias Brugger, dri-devel, CK Hu, linux-mediatek, linux-arm-kernel This adds a helper function for reading the rotation (panel orientation) from the device tree. Signed-off-by: Derek Basehore <dbasehore@chromium.org> --- drivers/gpu/drm/drm_panel.c | 42 +++++++++++++++++++++++++++++++++++++ include/drm/drm_panel.h | 7 +++++++ 2 files changed, 49 insertions(+) diff --git a/drivers/gpu/drm/drm_panel.c b/drivers/gpu/drm/drm_panel.c index dbd5b873e8f2..507099af4b57 100644 --- a/drivers/gpu/drm/drm_panel.c +++ b/drivers/gpu/drm/drm_panel.c @@ -172,6 +172,48 @@ struct drm_panel *of_drm_find_panel(const struct device_node *np) return ERR_PTR(-EPROBE_DEFER); } EXPORT_SYMBOL(of_drm_find_panel); + +/** + * of_drm_get_panel_orientation - look up the rotation of the panel using a + * device tree node + * @np: device tree node of the panel + * @orientation: orientation enum to be filled in + * + * Looks up the rotation of a panel in the device tree. The rotation in the + * device tree is counter clockwise. + * + * Return: 0 when a valid rotation value (0, 90, 180, or 270) is read or the + * rotation property doesn't exist. -EERROR otherwise. + */ +int of_drm_get_panel_orientation(const struct device_node *np, + enum drm_panel_orientation *orientation) +{ + int rotation, ret; + + ret = of_property_read_u32(np, "rotation", &rotation); + if (ret == -EINVAL) { + /* Don't return an error if there's no rotation property. */ + *orientation = DRM_MODE_PANEL_ORIENTATION_UNKNOWN; + return 0; + } + + if (ret < 0) + return ret; + + if (rotation == 0) + *orientation = DRM_MODE_PANEL_ORIENTATION_NORMAL; + else if (rotation == 90) + *orientation = DRM_MODE_PANEL_ORIENTATION_RIGHT_UP; + else if (rotation == 180) + *orientation = DRM_MODE_PANEL_ORIENTATION_BOTTOM_UP; + else if (rotation == 270) + *orientation = DRM_MODE_PANEL_ORIENTATION_LEFT_UP; + else + return -EINVAL; + + return 0; +} +EXPORT_SYMBOL(of_drm_get_panel_orientation); #endif MODULE_AUTHOR("Thierry Reding <treding@nvidia.com>"); diff --git a/include/drm/drm_panel.h b/include/drm/drm_panel.h index 8c738c0e6e9f..3564952f1a4f 100644 --- a/include/drm/drm_panel.h +++ b/include/drm/drm_panel.h @@ -197,11 +197,18 @@ int drm_panel_detach(struct drm_panel *panel); #if defined(CONFIG_OF) && defined(CONFIG_DRM_PANEL) struct drm_panel *of_drm_find_panel(const struct device_node *np); +int of_drm_get_panel_orientation(const struct device_node *np, + enum drm_panel_orientation *orientation); #else static inline struct drm_panel *of_drm_find_panel(const struct device_node *np) { return ERR_PTR(-ENODEV); } +int of_drm_get_panel_orientation(const struct device_node *np, + enum drm_panel_orientation *orientation) +{ + return -ENODEV; +} #endif #endif -- 2.22.0.410.gd8fdbe21b5-goog _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply related [flat|nested] 36+ messages in thread
* Re: [PATCH v3 1/4] drm/panel: Add helper for reading DT rotation 2019-06-22 3:41 ` Derek Basehore @ 2019-06-24 20:36 ` Sam Ravnborg -1 siblings, 0 replies; 36+ messages in thread From: Sam Ravnborg @ 2019-06-24 20:36 UTC (permalink / raw) To: Derek Basehore Cc: linux-kernel, Maarten Lankhorst, Maxime Ripard, Sean Paul, David Airlie, Daniel Vetter, Thierry Reding, Jani Nikula, Joonas Lahtinen, Rodrigo Vivi, CK Hu, Philipp Zabel, Matthias Brugger, dri-devel, intel-gfx, linux-arm-kernel, linux-mediatek Hi Derek. On Fri, Jun 21, 2019 at 08:41:02PM -0700, Derek Basehore wrote: > This adds a helper function for reading the rotation (panel > orientation) from the device tree. > > Signed-off-by: Derek Basehore <dbasehore@chromium.org> > --- > drivers/gpu/drm/drm_panel.c | 42 +++++++++++++++++++++++++++++++++++++ > include/drm/drm_panel.h | 7 +++++++ > 2 files changed, 49 insertions(+) > > diff --git a/drivers/gpu/drm/drm_panel.c b/drivers/gpu/drm/drm_panel.c > index dbd5b873e8f2..507099af4b57 100644 > --- a/drivers/gpu/drm/drm_panel.c > +++ b/drivers/gpu/drm/drm_panel.c > @@ -172,6 +172,48 @@ struct drm_panel *of_drm_find_panel(const struct device_node *np) > return ERR_PTR(-EPROBE_DEFER); > } > EXPORT_SYMBOL(of_drm_find_panel); > + > +/** > + * of_drm_get_panel_orientation - look up the rotation of the panel using a > + * device tree node > + * @np: device tree node of the panel > + * @orientation: orientation enum to be filled in > + * > + * Looks up the rotation of a panel in the device tree. The rotation in the > + * device tree is counter clockwise. > + * > + * Return: 0 when a valid rotation value (0, 90, 180, or 270) is read or the > + * rotation property doesn't exist. -EERROR otherwise. > + */ This function should better spell out why it talks about rotation versus orientation. It happens that orientation, due to bad design choices is named rotation in DT. But then this function is all about orientation, that just happens to be named rotation in DT. And the comments associated to the function should reflect this. something like: /** * of_drm_get_panel_orientation - look up the orientation of the panel using a * device tree node * @np: device tree node of the panel * @orientation: orientation enum to be filled in * * Looks up the rotation property of a panel in the device tree. * The orientation of the panel is expressed as a property named * "rotation" in the device tree. * The rotation in the device tree is counter clockwise. * * Return: 0 when a valid orientation value (0, 90, 180, or 270) is read or the * rotation property doesn't exist. -EERROR otherwise. */ This would at least remove some of my confusiuon. And then maybe add a bit more explanation to the binding property description too. Sam > +int of_drm_get_panel_orientation(const struct device_node *np, > + enum drm_panel_orientation *orientation) > +{ > + int rotation, ret; > + > + ret = of_property_read_u32(np, "rotation", &rotation); > + if (ret == -EINVAL) { > + /* Don't return an error if there's no rotation property. */ > + *orientation = DRM_MODE_PANEL_ORIENTATION_UNKNOWN; > + return 0; > + } > + > + if (ret < 0) > + return ret; > + > + if (rotation == 0) > + *orientation = DRM_MODE_PANEL_ORIENTATION_NORMAL; > + else if (rotation == 90) > + *orientation = DRM_MODE_PANEL_ORIENTATION_RIGHT_UP; > + else if (rotation == 180) > + *orientation = DRM_MODE_PANEL_ORIENTATION_BOTTOM_UP; > + else if (rotation == 270) > + *orientation = DRM_MODE_PANEL_ORIENTATION_LEFT_UP; > + else > + return -EINVAL; > + > + return 0; > +} > +EXPORT_SYMBOL(of_drm_get_panel_orientation); > #endif > > MODULE_AUTHOR("Thierry Reding <treding@nvidia.com>"); > diff --git a/include/drm/drm_panel.h b/include/drm/drm_panel.h > index 8c738c0e6e9f..3564952f1a4f 100644 > --- a/include/drm/drm_panel.h > +++ b/include/drm/drm_panel.h > @@ -197,11 +197,18 @@ int drm_panel_detach(struct drm_panel *panel); > > #if defined(CONFIG_OF) && defined(CONFIG_DRM_PANEL) > struct drm_panel *of_drm_find_panel(const struct device_node *np); > +int of_drm_get_panel_orientation(const struct device_node *np, > + enum drm_panel_orientation *orientation); > #else > static inline struct drm_panel *of_drm_find_panel(const struct device_node *np) > { > return ERR_PTR(-ENODEV); > } > +int of_drm_get_panel_orientation(const struct device_node *np, > + enum drm_panel_orientation *orientation) > +{ > + return -ENODEV; > +} > #endif > > #endif > -- > 2.22.0.410.gd8fdbe21b5-goog ^ permalink raw reply [flat|nested] 36+ messages in thread
* Re: [PATCH v3 1/4] drm/panel: Add helper for reading DT rotation @ 2019-06-24 20:36 ` Sam Ravnborg 0 siblings, 0 replies; 36+ messages in thread From: Sam Ravnborg @ 2019-06-24 20:36 UTC (permalink / raw) To: Derek Basehore Cc: Philipp Zabel, Maxime Ripard, intel-gfx, Joonas Lahtinen, Maarten Lankhorst, linux-kernel, Jani Nikula, David Airlie, Thierry Reding, Matthias Brugger, dri-devel, Daniel Vetter, Rodrigo Vivi, CK Hu, linux-mediatek, Sean Paul, linux-arm-kernel Hi Derek. On Fri, Jun 21, 2019 at 08:41:02PM -0700, Derek Basehore wrote: > This adds a helper function for reading the rotation (panel > orientation) from the device tree. > > Signed-off-by: Derek Basehore <dbasehore@chromium.org> > --- > drivers/gpu/drm/drm_panel.c | 42 +++++++++++++++++++++++++++++++++++++ > include/drm/drm_panel.h | 7 +++++++ > 2 files changed, 49 insertions(+) > > diff --git a/drivers/gpu/drm/drm_panel.c b/drivers/gpu/drm/drm_panel.c > index dbd5b873e8f2..507099af4b57 100644 > --- a/drivers/gpu/drm/drm_panel.c > +++ b/drivers/gpu/drm/drm_panel.c > @@ -172,6 +172,48 @@ struct drm_panel *of_drm_find_panel(const struct device_node *np) > return ERR_PTR(-EPROBE_DEFER); > } > EXPORT_SYMBOL(of_drm_find_panel); > + > +/** > + * of_drm_get_panel_orientation - look up the rotation of the panel using a > + * device tree node > + * @np: device tree node of the panel > + * @orientation: orientation enum to be filled in > + * > + * Looks up the rotation of a panel in the device tree. The rotation in the > + * device tree is counter clockwise. > + * > + * Return: 0 when a valid rotation value (0, 90, 180, or 270) is read or the > + * rotation property doesn't exist. -EERROR otherwise. > + */ This function should better spell out why it talks about rotation versus orientation. It happens that orientation, due to bad design choices is named rotation in DT. But then this function is all about orientation, that just happens to be named rotation in DT. And the comments associated to the function should reflect this. something like: /** * of_drm_get_panel_orientation - look up the orientation of the panel using a * device tree node * @np: device tree node of the panel * @orientation: orientation enum to be filled in * * Looks up the rotation property of a panel in the device tree. * The orientation of the panel is expressed as a property named * "rotation" in the device tree. * The rotation in the device tree is counter clockwise. * * Return: 0 when a valid orientation value (0, 90, 180, or 270) is read or the * rotation property doesn't exist. -EERROR otherwise. */ This would at least remove some of my confusiuon. And then maybe add a bit more explanation to the binding property description too. Sam > +int of_drm_get_panel_orientation(const struct device_node *np, > + enum drm_panel_orientation *orientation) > +{ > + int rotation, ret; > + > + ret = of_property_read_u32(np, "rotation", &rotation); > + if (ret == -EINVAL) { > + /* Don't return an error if there's no rotation property. */ > + *orientation = DRM_MODE_PANEL_ORIENTATION_UNKNOWN; > + return 0; > + } > + > + if (ret < 0) > + return ret; > + > + if (rotation == 0) > + *orientation = DRM_MODE_PANEL_ORIENTATION_NORMAL; > + else if (rotation == 90) > + *orientation = DRM_MODE_PANEL_ORIENTATION_RIGHT_UP; > + else if (rotation == 180) > + *orientation = DRM_MODE_PANEL_ORIENTATION_BOTTOM_UP; > + else if (rotation == 270) > + *orientation = DRM_MODE_PANEL_ORIENTATION_LEFT_UP; > + else > + return -EINVAL; > + > + return 0; > +} > +EXPORT_SYMBOL(of_drm_get_panel_orientation); > #endif > > MODULE_AUTHOR("Thierry Reding <treding@nvidia.com>"); > diff --git a/include/drm/drm_panel.h b/include/drm/drm_panel.h > index 8c738c0e6e9f..3564952f1a4f 100644 > --- a/include/drm/drm_panel.h > +++ b/include/drm/drm_panel.h > @@ -197,11 +197,18 @@ int drm_panel_detach(struct drm_panel *panel); > > #if defined(CONFIG_OF) && defined(CONFIG_DRM_PANEL) > struct drm_panel *of_drm_find_panel(const struct device_node *np); > +int of_drm_get_panel_orientation(const struct device_node *np, > + enum drm_panel_orientation *orientation); > #else > static inline struct drm_panel *of_drm_find_panel(const struct device_node *np) > { > return ERR_PTR(-ENODEV); > } > +int of_drm_get_panel_orientation(const struct device_node *np, > + enum drm_panel_orientation *orientation) > +{ > + return -ENODEV; > +} > #endif > > #endif > -- > 2.22.0.410.gd8fdbe21b5-goog _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 36+ messages in thread
* Re: [PATCH v3 1/4] drm/panel: Add helper for reading DT rotation 2019-06-24 20:36 ` Sam Ravnborg (?) @ 2019-06-25 22:12 ` dbasehore . -1 siblings, 0 replies; 36+ messages in thread From: dbasehore . @ 2019-06-25 22:12 UTC (permalink / raw) To: Sam Ravnborg Cc: linux-kernel, Maarten Lankhorst, Maxime Ripard, Sean Paul, David Airlie, Daniel Vetter, Thierry Reding, Jani Nikula, Joonas Lahtinen, Rodrigo Vivi, CK Hu, Philipp Zabel, Matthias Brugger, dri-devel, Intel Graphics, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE, moderated list:ARM/Mediatek SoC support On Mon, Jun 24, 2019 at 1:36 PM Sam Ravnborg <sam@ravnborg.org> wrote: > > Hi Derek. > > On Fri, Jun 21, 2019 at 08:41:02PM -0700, Derek Basehore wrote: > > This adds a helper function for reading the rotation (panel > > orientation) from the device tree. > > > > Signed-off-by: Derek Basehore <dbasehore@chromium.org> > > --- > > drivers/gpu/drm/drm_panel.c | 42 +++++++++++++++++++++++++++++++++++++ > > include/drm/drm_panel.h | 7 +++++++ > > 2 files changed, 49 insertions(+) > > > > diff --git a/drivers/gpu/drm/drm_panel.c b/drivers/gpu/drm/drm_panel.c > > index dbd5b873e8f2..507099af4b57 100644 > > --- a/drivers/gpu/drm/drm_panel.c > > +++ b/drivers/gpu/drm/drm_panel.c > > @@ -172,6 +172,48 @@ struct drm_panel *of_drm_find_panel(const struct device_node *np) > > return ERR_PTR(-EPROBE_DEFER); > > } > > EXPORT_SYMBOL(of_drm_find_panel); > > + > > +/** > > + * of_drm_get_panel_orientation - look up the rotation of the panel using a > > + * device tree node > > + * @np: device tree node of the panel > > + * @orientation: orientation enum to be filled in > > + * > > + * Looks up the rotation of a panel in the device tree. The rotation in the > > + * device tree is counter clockwise. > > + * > > + * Return: 0 when a valid rotation value (0, 90, 180, or 270) is read or the > > + * rotation property doesn't exist. -EERROR otherwise. > > + */ > This function should better spell out why it talks about rotation versus > orientation. > > It happens that orientation, due to bad design choices is named rotation > in DT. > But then this function is all about orientation, that just happens to be > named rotation in DT. > And the comments associated to the function should reflect this. > > something like: > /** > * of_drm_get_panel_orientation - look up the orientation of the panel using a > * device tree node > * @np: device tree node of the panel > * @orientation: orientation enum to be filled in > * > * Looks up the rotation property of a panel in the device tree. > * The orientation of the panel is expressed as a property named > * "rotation" in the device tree. > * The rotation in the device tree is counter clockwise. > * > * Return: 0 when a valid orientation value (0, 90, 180, or 270) is read or the > * rotation property doesn't exist. -EERROR otherwise. > */ I'll clear this up in the next patch set. > > This would at least remove some of my confusiuon. > And then maybe add a bit more explanation to the binding property > description too. Tried this, yet I got told off for adding kernel details to the DT documentation (which is frowned upon). > > Sam > > > > > > > > > > > > > > +int of_drm_get_panel_orientation(const struct device_node *np, > > + enum drm_panel_orientation *orientation) > > +{ > > + int rotation, ret; > > + > > + ret = of_property_read_u32(np, "rotation", &rotation); > > + if (ret == -EINVAL) { > > + /* Don't return an error if there's no rotation property. */ > > + *orientation = DRM_MODE_PANEL_ORIENTATION_UNKNOWN; > > + return 0; > > + } > > + > > + if (ret < 0) > > + return ret; > > + > > + if (rotation == 0) > > + *orientation = DRM_MODE_PANEL_ORIENTATION_NORMAL; > > + else if (rotation == 90) > > + *orientation = DRM_MODE_PANEL_ORIENTATION_RIGHT_UP; > > + else if (rotation == 180) > > + *orientation = DRM_MODE_PANEL_ORIENTATION_BOTTOM_UP; > > + else if (rotation == 270) > > + *orientation = DRM_MODE_PANEL_ORIENTATION_LEFT_UP; > > + else > > + return -EINVAL; > > + > > + return 0; > > +} > > +EXPORT_SYMBOL(of_drm_get_panel_orientation); > > #endif > > > > MODULE_AUTHOR("Thierry Reding <treding@nvidia.com>"); > > diff --git a/include/drm/drm_panel.h b/include/drm/drm_panel.h > > index 8c738c0e6e9f..3564952f1a4f 100644 > > --- a/include/drm/drm_panel.h > > +++ b/include/drm/drm_panel.h > > @@ -197,11 +197,18 @@ int drm_panel_detach(struct drm_panel *panel); > > > > #if defined(CONFIG_OF) && defined(CONFIG_DRM_PANEL) > > struct drm_panel *of_drm_find_panel(const struct device_node *np); > > +int of_drm_get_panel_orientation(const struct device_node *np, > > + enum drm_panel_orientation *orientation); > > #else > > static inline struct drm_panel *of_drm_find_panel(const struct device_node *np) > > { > > return ERR_PTR(-ENODEV); > > } > > +int of_drm_get_panel_orientation(const struct device_node *np, > > + enum drm_panel_orientation *orientation) > > +{ > > + return -ENODEV; > > +} > > #endif > > > > #endif > > -- > > 2.22.0.410.gd8fdbe21b5-goog Thanks for the review ^ permalink raw reply [flat|nested] 36+ messages in thread
* Re: [PATCH v3 1/4] drm/panel: Add helper for reading DT rotation @ 2019-06-25 22:12 ` dbasehore . 0 siblings, 0 replies; 36+ messages in thread From: dbasehore . @ 2019-06-25 22:12 UTC (permalink / raw) To: Sam Ravnborg Cc: Philipp Zabel, Maxime Ripard, Intel Graphics, Joonas Lahtinen, Maarten Lankhorst, linux-kernel, Jani Nikula, David Airlie, Thierry Reding, Matthias Brugger, dri-devel, Daniel Vetter, Rodrigo Vivi, CK Hu, moderated list:ARM/Mediatek SoC support, Sean Paul, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE On Mon, Jun 24, 2019 at 1:36 PM Sam Ravnborg <sam@ravnborg.org> wrote: > > Hi Derek. > > On Fri, Jun 21, 2019 at 08:41:02PM -0700, Derek Basehore wrote: > > This adds a helper function for reading the rotation (panel > > orientation) from the device tree. > > > > Signed-off-by: Derek Basehore <dbasehore@chromium.org> > > --- > > drivers/gpu/drm/drm_panel.c | 42 +++++++++++++++++++++++++++++++++++++ > > include/drm/drm_panel.h | 7 +++++++ > > 2 files changed, 49 insertions(+) > > > > diff --git a/drivers/gpu/drm/drm_panel.c b/drivers/gpu/drm/drm_panel.c > > index dbd5b873e8f2..507099af4b57 100644 > > --- a/drivers/gpu/drm/drm_panel.c > > +++ b/drivers/gpu/drm/drm_panel.c > > @@ -172,6 +172,48 @@ struct drm_panel *of_drm_find_panel(const struct device_node *np) > > return ERR_PTR(-EPROBE_DEFER); > > } > > EXPORT_SYMBOL(of_drm_find_panel); > > + > > +/** > > + * of_drm_get_panel_orientation - look up the rotation of the panel using a > > + * device tree node > > + * @np: device tree node of the panel > > + * @orientation: orientation enum to be filled in > > + * > > + * Looks up the rotation of a panel in the device tree. The rotation in the > > + * device tree is counter clockwise. > > + * > > + * Return: 0 when a valid rotation value (0, 90, 180, or 270) is read or the > > + * rotation property doesn't exist. -EERROR otherwise. > > + */ > This function should better spell out why it talks about rotation versus > orientation. > > It happens that orientation, due to bad design choices is named rotation > in DT. > But then this function is all about orientation, that just happens to be > named rotation in DT. > And the comments associated to the function should reflect this. > > something like: > /** > * of_drm_get_panel_orientation - look up the orientation of the panel using a > * device tree node > * @np: device tree node of the panel > * @orientation: orientation enum to be filled in > * > * Looks up the rotation property of a panel in the device tree. > * The orientation of the panel is expressed as a property named > * "rotation" in the device tree. > * The rotation in the device tree is counter clockwise. > * > * Return: 0 when a valid orientation value (0, 90, 180, or 270) is read or the > * rotation property doesn't exist. -EERROR otherwise. > */ I'll clear this up in the next patch set. > > This would at least remove some of my confusiuon. > And then maybe add a bit more explanation to the binding property > description too. Tried this, yet I got told off for adding kernel details to the DT documentation (which is frowned upon). > > Sam > > > > > > > > > > > > > > +int of_drm_get_panel_orientation(const struct device_node *np, > > + enum drm_panel_orientation *orientation) > > +{ > > + int rotation, ret; > > + > > + ret = of_property_read_u32(np, "rotation", &rotation); > > + if (ret == -EINVAL) { > > + /* Don't return an error if there's no rotation property. */ > > + *orientation = DRM_MODE_PANEL_ORIENTATION_UNKNOWN; > > + return 0; > > + } > > + > > + if (ret < 0) > > + return ret; > > + > > + if (rotation == 0) > > + *orientation = DRM_MODE_PANEL_ORIENTATION_NORMAL; > > + else if (rotation == 90) > > + *orientation = DRM_MODE_PANEL_ORIENTATION_RIGHT_UP; > > + else if (rotation == 180) > > + *orientation = DRM_MODE_PANEL_ORIENTATION_BOTTOM_UP; > > + else if (rotation == 270) > > + *orientation = DRM_MODE_PANEL_ORIENTATION_LEFT_UP; > > + else > > + return -EINVAL; > > + > > + return 0; > > +} > > +EXPORT_SYMBOL(of_drm_get_panel_orientation); > > #endif > > > > MODULE_AUTHOR("Thierry Reding <treding@nvidia.com>"); > > diff --git a/include/drm/drm_panel.h b/include/drm/drm_panel.h > > index 8c738c0e6e9f..3564952f1a4f 100644 > > --- a/include/drm/drm_panel.h > > +++ b/include/drm/drm_panel.h > > @@ -197,11 +197,18 @@ int drm_panel_detach(struct drm_panel *panel); > > > > #if defined(CONFIG_OF) && defined(CONFIG_DRM_PANEL) > > struct drm_panel *of_drm_find_panel(const struct device_node *np); > > +int of_drm_get_panel_orientation(const struct device_node *np, > > + enum drm_panel_orientation *orientation); > > #else > > static inline struct drm_panel *of_drm_find_panel(const struct device_node *np) > > { > > return ERR_PTR(-ENODEV); > > } > > +int of_drm_get_panel_orientation(const struct device_node *np, > > + enum drm_panel_orientation *orientation) > > +{ > > + return -ENODEV; > > +} > > #endif > > > > #endif > > -- > > 2.22.0.410.gd8fdbe21b5-goog Thanks for the review _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 36+ messages in thread
* Re: [PATCH v3 1/4] drm/panel: Add helper for reading DT rotation @ 2019-06-25 22:12 ` dbasehore . 0 siblings, 0 replies; 36+ messages in thread From: dbasehore . @ 2019-06-25 22:12 UTC (permalink / raw) To: Sam Ravnborg Cc: Philipp Zabel, Maxime Ripard, Intel Graphics, linux-kernel, David Airlie, Matthias Brugger, dri-devel, CK Hu, moderated list:ARM/Mediatek SoC support, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE On Mon, Jun 24, 2019 at 1:36 PM Sam Ravnborg <sam@ravnborg.org> wrote: > > Hi Derek. > > On Fri, Jun 21, 2019 at 08:41:02PM -0700, Derek Basehore wrote: > > This adds a helper function for reading the rotation (panel > > orientation) from the device tree. > > > > Signed-off-by: Derek Basehore <dbasehore@chromium.org> > > --- > > drivers/gpu/drm/drm_panel.c | 42 +++++++++++++++++++++++++++++++++++++ > > include/drm/drm_panel.h | 7 +++++++ > > 2 files changed, 49 insertions(+) > > > > diff --git a/drivers/gpu/drm/drm_panel.c b/drivers/gpu/drm/drm_panel.c > > index dbd5b873e8f2..507099af4b57 100644 > > --- a/drivers/gpu/drm/drm_panel.c > > +++ b/drivers/gpu/drm/drm_panel.c > > @@ -172,6 +172,48 @@ struct drm_panel *of_drm_find_panel(const struct device_node *np) > > return ERR_PTR(-EPROBE_DEFER); > > } > > EXPORT_SYMBOL(of_drm_find_panel); > > + > > +/** > > + * of_drm_get_panel_orientation - look up the rotation of the panel using a > > + * device tree node > > + * @np: device tree node of the panel > > + * @orientation: orientation enum to be filled in > > + * > > + * Looks up the rotation of a panel in the device tree. The rotation in the > > + * device tree is counter clockwise. > > + * > > + * Return: 0 when a valid rotation value (0, 90, 180, or 270) is read or the > > + * rotation property doesn't exist. -EERROR otherwise. > > + */ > This function should better spell out why it talks about rotation versus > orientation. > > It happens that orientation, due to bad design choices is named rotation > in DT. > But then this function is all about orientation, that just happens to be > named rotation in DT. > And the comments associated to the function should reflect this. > > something like: > /** > * of_drm_get_panel_orientation - look up the orientation of the panel using a > * device tree node > * @np: device tree node of the panel > * @orientation: orientation enum to be filled in > * > * Looks up the rotation property of a panel in the device tree. > * The orientation of the panel is expressed as a property named > * "rotation" in the device tree. > * The rotation in the device tree is counter clockwise. > * > * Return: 0 when a valid orientation value (0, 90, 180, or 270) is read or the > * rotation property doesn't exist. -EERROR otherwise. > */ I'll clear this up in the next patch set. > > This would at least remove some of my confusiuon. > And then maybe add a bit more explanation to the binding property > description too. Tried this, yet I got told off for adding kernel details to the DT documentation (which is frowned upon). > > Sam > > > > > > > > > > > > > > +int of_drm_get_panel_orientation(const struct device_node *np, > > + enum drm_panel_orientation *orientation) > > +{ > > + int rotation, ret; > > + > > + ret = of_property_read_u32(np, "rotation", &rotation); > > + if (ret == -EINVAL) { > > + /* Don't return an error if there's no rotation property. */ > > + *orientation = DRM_MODE_PANEL_ORIENTATION_UNKNOWN; > > + return 0; > > + } > > + > > + if (ret < 0) > > + return ret; > > + > > + if (rotation == 0) > > + *orientation = DRM_MODE_PANEL_ORIENTATION_NORMAL; > > + else if (rotation == 90) > > + *orientation = DRM_MODE_PANEL_ORIENTATION_RIGHT_UP; > > + else if (rotation == 180) > > + *orientation = DRM_MODE_PANEL_ORIENTATION_BOTTOM_UP; > > + else if (rotation == 270) > > + *orientation = DRM_MODE_PANEL_ORIENTATION_LEFT_UP; > > + else > > + return -EINVAL; > > + > > + return 0; > > +} > > +EXPORT_SYMBOL(of_drm_get_panel_orientation); > > #endif > > > > MODULE_AUTHOR("Thierry Reding <treding@nvidia.com>"); > > diff --git a/include/drm/drm_panel.h b/include/drm/drm_panel.h > > index 8c738c0e6e9f..3564952f1a4f 100644 > > --- a/include/drm/drm_panel.h > > +++ b/include/drm/drm_panel.h > > @@ -197,11 +197,18 @@ int drm_panel_detach(struct drm_panel *panel); > > > > #if defined(CONFIG_OF) && defined(CONFIG_DRM_PANEL) > > struct drm_panel *of_drm_find_panel(const struct device_node *np); > > +int of_drm_get_panel_orientation(const struct device_node *np, > > + enum drm_panel_orientation *orientation); > > #else > > static inline struct drm_panel *of_drm_find_panel(const struct device_node *np) > > { > > return ERR_PTR(-ENODEV); > > } > > +int of_drm_get_panel_orientation(const struct device_node *np, > > + enum drm_panel_orientation *orientation) > > +{ > > + return -ENODEV; > > +} > > #endif > > > > #endif > > -- > > 2.22.0.410.gd8fdbe21b5-goog Thanks for the review _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply [flat|nested] 36+ messages in thread
* [PATCH v3 2/4] drm/panel: set display info in panel attach 2019-06-22 3:41 ` Derek Basehore (?) @ 2019-06-22 3:41 ` Derek Basehore -1 siblings, 0 replies; 36+ messages in thread From: Derek Basehore @ 2019-06-22 3:41 UTC (permalink / raw) To: linux-kernel Cc: Maarten Lankhorst, Maxime Ripard, Sean Paul, David Airlie, Daniel Vetter, Thierry Reding, Sam Ravnborg, Jani Nikula, Joonas Lahtinen, Rodrigo Vivi, CK Hu, Philipp Zabel, Matthias Brugger, dri-devel, intel-gfx, linux-arm-kernel, linux-mediatek, Derek Basehore Devicetree systems can set panel orientation via a panel binding, but there's no way, as is, to propagate this setting to the connector, where the property need to be added. To address this, this patch sets orientation, as well as other fixed values for the panel, in the drm_panel_attach function. These values are stored from probe in the drm_panel struct. Signed-off-by: Derek Basehore <dbasehore@chromium.org> --- drivers/gpu/drm/drm_panel.c | 28 ++++++++++++++++++++++++++++ include/drm/drm_panel.h | 14 ++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/drivers/gpu/drm/drm_panel.c b/drivers/gpu/drm/drm_panel.c index 507099af4b57..5690fca30236 100644 --- a/drivers/gpu/drm/drm_panel.c +++ b/drivers/gpu/drm/drm_panel.c @@ -104,11 +104,23 @@ EXPORT_SYMBOL(drm_panel_remove); */ int drm_panel_attach(struct drm_panel *panel, struct drm_connector *connector) { + struct drm_display_info *info; + if (panel->connector) return -EBUSY; panel->connector = connector; panel->drm = connector->dev; + info = &connector->display_info; + info->width_mm = panel->width_mm; + info->height_mm = panel->height_mm; + info->bpc = panel->bpc; + info->panel_orientation = panel->orientation; + info->bus_flags = panel->bus_flags; + if (panel->bus_formats) + drm_display_info_set_bus_formats(&connector->display_info, + panel->bus_formats, + panel->num_bus_formats); return 0; } @@ -128,6 +140,22 @@ EXPORT_SYMBOL(drm_panel_attach); */ int drm_panel_detach(struct drm_panel *panel) { + struct drm_display_info *info; + + if (!panel->connector) + goto out; + + info = &panel->connector->display_info; + info->width_mm = 0; + info->height_mm = 0; + info->bpc = 0; + info->panel_orientation = DRM_MODE_PANEL_ORIENTATION_UNKNOWN; + info->bus_flags = 0; + kfree(info->bus_formats); + info->bus_formats = NULL; + info->num_bus_formats = 0; + +out: panel->connector = NULL; panel->drm = NULL; diff --git a/include/drm/drm_panel.h b/include/drm/drm_panel.h index 3564952f1a4f..760ca5865962 100644 --- a/include/drm/drm_panel.h +++ b/include/drm/drm_panel.h @@ -37,6 +37,8 @@ struct display_timing; * struct drm_panel_funcs - perform operations on a given panel * @disable: disable panel (turn off back light, etc.) * @unprepare: turn off panel + * @detach: detach panel->connector (clear internal state, etc.) + * @attach: attach panel->connector (update internal state, etc.) * @prepare: turn on panel and perform set up * @enable: enable panel (turn on back light, etc.) * @get_modes: add modes to the connector that the panel is attached to and @@ -93,6 +95,18 @@ struct drm_panel { const struct drm_panel_funcs *funcs; + /* + * panel information to be set in the connector when the panel is + * attached. + */ + unsigned int width_mm; + unsigned int height_mm; + unsigned int bpc; + int orientation; + const u32 *bus_formats; + unsigned int num_bus_formats; + u32 bus_flags; + struct list_head list; }; -- 2.22.0.410.gd8fdbe21b5-goog ^ permalink raw reply related [flat|nested] 36+ messages in thread
* [PATCH v3 2/4] drm/panel: set display info in panel attach @ 2019-06-22 3:41 ` Derek Basehore 0 siblings, 0 replies; 36+ messages in thread From: Derek Basehore @ 2019-06-22 3:41 UTC (permalink / raw) To: linux-kernel Cc: Derek Basehore, Philipp Zabel, Maxime Ripard, Sam Ravnborg, intel-gfx, Joonas Lahtinen, Maarten Lankhorst, Jani Nikula, David Airlie, Thierry Reding, Matthias Brugger, dri-devel, Daniel Vetter, Rodrigo Vivi, CK Hu, linux-mediatek, Sean Paul, linux-arm-kernel Devicetree systems can set panel orientation via a panel binding, but there's no way, as is, to propagate this setting to the connector, where the property need to be added. To address this, this patch sets orientation, as well as other fixed values for the panel, in the drm_panel_attach function. These values are stored from probe in the drm_panel struct. Signed-off-by: Derek Basehore <dbasehore@chromium.org> --- drivers/gpu/drm/drm_panel.c | 28 ++++++++++++++++++++++++++++ include/drm/drm_panel.h | 14 ++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/drivers/gpu/drm/drm_panel.c b/drivers/gpu/drm/drm_panel.c index 507099af4b57..5690fca30236 100644 --- a/drivers/gpu/drm/drm_panel.c +++ b/drivers/gpu/drm/drm_panel.c @@ -104,11 +104,23 @@ EXPORT_SYMBOL(drm_panel_remove); */ int drm_panel_attach(struct drm_panel *panel, struct drm_connector *connector) { + struct drm_display_info *info; + if (panel->connector) return -EBUSY; panel->connector = connector; panel->drm = connector->dev; + info = &connector->display_info; + info->width_mm = panel->width_mm; + info->height_mm = panel->height_mm; + info->bpc = panel->bpc; + info->panel_orientation = panel->orientation; + info->bus_flags = panel->bus_flags; + if (panel->bus_formats) + drm_display_info_set_bus_formats(&connector->display_info, + panel->bus_formats, + panel->num_bus_formats); return 0; } @@ -128,6 +140,22 @@ EXPORT_SYMBOL(drm_panel_attach); */ int drm_panel_detach(struct drm_panel *panel) { + struct drm_display_info *info; + + if (!panel->connector) + goto out; + + info = &panel->connector->display_info; + info->width_mm = 0; + info->height_mm = 0; + info->bpc = 0; + info->panel_orientation = DRM_MODE_PANEL_ORIENTATION_UNKNOWN; + info->bus_flags = 0; + kfree(info->bus_formats); + info->bus_formats = NULL; + info->num_bus_formats = 0; + +out: panel->connector = NULL; panel->drm = NULL; diff --git a/include/drm/drm_panel.h b/include/drm/drm_panel.h index 3564952f1a4f..760ca5865962 100644 --- a/include/drm/drm_panel.h +++ b/include/drm/drm_panel.h @@ -37,6 +37,8 @@ struct display_timing; * struct drm_panel_funcs - perform operations on a given panel * @disable: disable panel (turn off back light, etc.) * @unprepare: turn off panel + * @detach: detach panel->connector (clear internal state, etc.) + * @attach: attach panel->connector (update internal state, etc.) * @prepare: turn on panel and perform set up * @enable: enable panel (turn on back light, etc.) * @get_modes: add modes to the connector that the panel is attached to and @@ -93,6 +95,18 @@ struct drm_panel { const struct drm_panel_funcs *funcs; + /* + * panel information to be set in the connector when the panel is + * attached. + */ + unsigned int width_mm; + unsigned int height_mm; + unsigned int bpc; + int orientation; + const u32 *bus_formats; + unsigned int num_bus_formats; + u32 bus_flags; + struct list_head list; }; -- 2.22.0.410.gd8fdbe21b5-goog _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply related [flat|nested] 36+ messages in thread
* [PATCH v3 2/4] drm/panel: set display info in panel attach @ 2019-06-22 3:41 ` Derek Basehore 0 siblings, 0 replies; 36+ messages in thread From: Derek Basehore @ 2019-06-22 3:41 UTC (permalink / raw) To: linux-kernel Cc: Derek Basehore, Philipp Zabel, Maxime Ripard, Sam Ravnborg, intel-gfx, David Airlie, Matthias Brugger, dri-devel, CK Hu, linux-mediatek, linux-arm-kernel Devicetree systems can set panel orientation via a panel binding, but there's no way, as is, to propagate this setting to the connector, where the property need to be added. To address this, this patch sets orientation, as well as other fixed values for the panel, in the drm_panel_attach function. These values are stored from probe in the drm_panel struct. Signed-off-by: Derek Basehore <dbasehore@chromium.org> --- drivers/gpu/drm/drm_panel.c | 28 ++++++++++++++++++++++++++++ include/drm/drm_panel.h | 14 ++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/drivers/gpu/drm/drm_panel.c b/drivers/gpu/drm/drm_panel.c index 507099af4b57..5690fca30236 100644 --- a/drivers/gpu/drm/drm_panel.c +++ b/drivers/gpu/drm/drm_panel.c @@ -104,11 +104,23 @@ EXPORT_SYMBOL(drm_panel_remove); */ int drm_panel_attach(struct drm_panel *panel, struct drm_connector *connector) { + struct drm_display_info *info; + if (panel->connector) return -EBUSY; panel->connector = connector; panel->drm = connector->dev; + info = &connector->display_info; + info->width_mm = panel->width_mm; + info->height_mm = panel->height_mm; + info->bpc = panel->bpc; + info->panel_orientation = panel->orientation; + info->bus_flags = panel->bus_flags; + if (panel->bus_formats) + drm_display_info_set_bus_formats(&connector->display_info, + panel->bus_formats, + panel->num_bus_formats); return 0; } @@ -128,6 +140,22 @@ EXPORT_SYMBOL(drm_panel_attach); */ int drm_panel_detach(struct drm_panel *panel) { + struct drm_display_info *info; + + if (!panel->connector) + goto out; + + info = &panel->connector->display_info; + info->width_mm = 0; + info->height_mm = 0; + info->bpc = 0; + info->panel_orientation = DRM_MODE_PANEL_ORIENTATION_UNKNOWN; + info->bus_flags = 0; + kfree(info->bus_formats); + info->bus_formats = NULL; + info->num_bus_formats = 0; + +out: panel->connector = NULL; panel->drm = NULL; diff --git a/include/drm/drm_panel.h b/include/drm/drm_panel.h index 3564952f1a4f..760ca5865962 100644 --- a/include/drm/drm_panel.h +++ b/include/drm/drm_panel.h @@ -37,6 +37,8 @@ struct display_timing; * struct drm_panel_funcs - perform operations on a given panel * @disable: disable panel (turn off back light, etc.) * @unprepare: turn off panel + * @detach: detach panel->connector (clear internal state, etc.) + * @attach: attach panel->connector (update internal state, etc.) * @prepare: turn on panel and perform set up * @enable: enable panel (turn on back light, etc.) * @get_modes: add modes to the connector that the panel is attached to and @@ -93,6 +95,18 @@ struct drm_panel { const struct drm_panel_funcs *funcs; + /* + * panel information to be set in the connector when the panel is + * attached. + */ + unsigned int width_mm; + unsigned int height_mm; + unsigned int bpc; + int orientation; + const u32 *bus_formats; + unsigned int num_bus_formats; + u32 bus_flags; + struct list_head list; }; -- 2.22.0.410.gd8fdbe21b5-goog _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply related [flat|nested] 36+ messages in thread
* Re: [PATCH v3 2/4] drm/panel: set display info in panel attach 2019-06-22 3:41 ` Derek Basehore (?) @ 2019-06-24 23:04 ` dbasehore . -1 siblings, 0 replies; 36+ messages in thread From: dbasehore . @ 2019-06-24 23:04 UTC (permalink / raw) To: linux-kernel Cc: Maarten Lankhorst, Maxime Ripard, Sean Paul, David Airlie, Daniel Vetter, Thierry Reding, Sam Ravnborg, Jani Nikula, Joonas Lahtinen, Rodrigo Vivi, CK Hu, Philipp Zabel, Matthias Brugger, dri-devel, Intel Graphics, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE, moderated list:ARM/Mediatek SoC support On Fri, Jun 21, 2019 at 8:41 PM Derek Basehore <dbasehore@chromium.org> wrote: > > Devicetree systems can set panel orientation via a panel binding, but > there's no way, as is, to propagate this setting to the connector, > where the property need to be added. > To address this, this patch sets orientation, as well as other fixed > values for the panel, in the drm_panel_attach function. These values > are stored from probe in the drm_panel struct. > > Signed-off-by: Derek Basehore <dbasehore@chromium.org> > --- > drivers/gpu/drm/drm_panel.c | 28 ++++++++++++++++++++++++++++ > include/drm/drm_panel.h | 14 ++++++++++++++ > 2 files changed, 42 insertions(+) > > diff --git a/drivers/gpu/drm/drm_panel.c b/drivers/gpu/drm/drm_panel.c > index 507099af4b57..5690fca30236 100644 > --- a/drivers/gpu/drm/drm_panel.c > +++ b/drivers/gpu/drm/drm_panel.c > @@ -104,11 +104,23 @@ EXPORT_SYMBOL(drm_panel_remove); > */ > int drm_panel_attach(struct drm_panel *panel, struct drm_connector *connector) > { > + struct drm_display_info *info; > + > if (panel->connector) > return -EBUSY; > > panel->connector = connector; > panel->drm = connector->dev; > + info = &connector->display_info; > + info->width_mm = panel->width_mm; > + info->height_mm = panel->height_mm; > + info->bpc = panel->bpc; > + info->panel_orientation = panel->orientation; > + info->bus_flags = panel->bus_flags; > + if (panel->bus_formats) > + drm_display_info_set_bus_formats(&connector->display_info, > + panel->bus_formats, > + panel->num_bus_formats); > > return 0; > } > @@ -128,6 +140,22 @@ EXPORT_SYMBOL(drm_panel_attach); > */ > int drm_panel_detach(struct drm_panel *panel) > { > + struct drm_display_info *info; > + > + if (!panel->connector) > + goto out; > + > + info = &panel->connector->display_info; > + info->width_mm = 0; > + info->height_mm = 0; > + info->bpc = 0; > + info->panel_orientation = DRM_MODE_PANEL_ORIENTATION_UNKNOWN; > + info->bus_flags = 0; > + kfree(info->bus_formats); > + info->bus_formats = NULL; > + info->num_bus_formats = 0; > + > +out: > panel->connector = NULL; > panel->drm = NULL; > > diff --git a/include/drm/drm_panel.h b/include/drm/drm_panel.h > index 3564952f1a4f..760ca5865962 100644 > --- a/include/drm/drm_panel.h > +++ b/include/drm/drm_panel.h > @@ -37,6 +37,8 @@ struct display_timing; > * struct drm_panel_funcs - perform operations on a given panel > * @disable: disable panel (turn off back light, etc.) > * @unprepare: turn off panel > + * @detach: detach panel->connector (clear internal state, etc.) > + * @attach: attach panel->connector (update internal state, etc.) > * @prepare: turn on panel and perform set up > * @enable: enable panel (turn on back light, etc.) > * @get_modes: add modes to the connector that the panel is attached to and > @@ -93,6 +95,18 @@ struct drm_panel { > > const struct drm_panel_funcs *funcs; > > + /* > + * panel information to be set in the connector when the panel is > + * attached. > + */ > + unsigned int width_mm; > + unsigned int height_mm; > + unsigned int bpc; > + int orientation; > + const u32 *bus_formats; > + unsigned int num_bus_formats; > + u32 bus_flags; Should probably put these in a struct to ensure the connector and panel have the same data types. Will do in a following patch if we stay with this. > + > struct list_head list; > }; > > -- > 2.22.0.410.gd8fdbe21b5-goog > ^ permalink raw reply [flat|nested] 36+ messages in thread
* Re: [PATCH v3 2/4] drm/panel: set display info in panel attach @ 2019-06-24 23:04 ` dbasehore . 0 siblings, 0 replies; 36+ messages in thread From: dbasehore . @ 2019-06-24 23:04 UTC (permalink / raw) To: linux-kernel Cc: Philipp Zabel, Maxime Ripard, Sam Ravnborg, Intel Graphics, Joonas Lahtinen, Maarten Lankhorst, Jani Nikula, David Airlie, Thierry Reding, Matthias Brugger, dri-devel, Daniel Vetter, Rodrigo Vivi, CK Hu, moderated list:ARM/Mediatek SoC support, Sean Paul, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE On Fri, Jun 21, 2019 at 8:41 PM Derek Basehore <dbasehore@chromium.org> wrote: > > Devicetree systems can set panel orientation via a panel binding, but > there's no way, as is, to propagate this setting to the connector, > where the property need to be added. > To address this, this patch sets orientation, as well as other fixed > values for the panel, in the drm_panel_attach function. These values > are stored from probe in the drm_panel struct. > > Signed-off-by: Derek Basehore <dbasehore@chromium.org> > --- > drivers/gpu/drm/drm_panel.c | 28 ++++++++++++++++++++++++++++ > include/drm/drm_panel.h | 14 ++++++++++++++ > 2 files changed, 42 insertions(+) > > diff --git a/drivers/gpu/drm/drm_panel.c b/drivers/gpu/drm/drm_panel.c > index 507099af4b57..5690fca30236 100644 > --- a/drivers/gpu/drm/drm_panel.c > +++ b/drivers/gpu/drm/drm_panel.c > @@ -104,11 +104,23 @@ EXPORT_SYMBOL(drm_panel_remove); > */ > int drm_panel_attach(struct drm_panel *panel, struct drm_connector *connector) > { > + struct drm_display_info *info; > + > if (panel->connector) > return -EBUSY; > > panel->connector = connector; > panel->drm = connector->dev; > + info = &connector->display_info; > + info->width_mm = panel->width_mm; > + info->height_mm = panel->height_mm; > + info->bpc = panel->bpc; > + info->panel_orientation = panel->orientation; > + info->bus_flags = panel->bus_flags; > + if (panel->bus_formats) > + drm_display_info_set_bus_formats(&connector->display_info, > + panel->bus_formats, > + panel->num_bus_formats); > > return 0; > } > @@ -128,6 +140,22 @@ EXPORT_SYMBOL(drm_panel_attach); > */ > int drm_panel_detach(struct drm_panel *panel) > { > + struct drm_display_info *info; > + > + if (!panel->connector) > + goto out; > + > + info = &panel->connector->display_info; > + info->width_mm = 0; > + info->height_mm = 0; > + info->bpc = 0; > + info->panel_orientation = DRM_MODE_PANEL_ORIENTATION_UNKNOWN; > + info->bus_flags = 0; > + kfree(info->bus_formats); > + info->bus_formats = NULL; > + info->num_bus_formats = 0; > + > +out: > panel->connector = NULL; > panel->drm = NULL; > > diff --git a/include/drm/drm_panel.h b/include/drm/drm_panel.h > index 3564952f1a4f..760ca5865962 100644 > --- a/include/drm/drm_panel.h > +++ b/include/drm/drm_panel.h > @@ -37,6 +37,8 @@ struct display_timing; > * struct drm_panel_funcs - perform operations on a given panel > * @disable: disable panel (turn off back light, etc.) > * @unprepare: turn off panel > + * @detach: detach panel->connector (clear internal state, etc.) > + * @attach: attach panel->connector (update internal state, etc.) > * @prepare: turn on panel and perform set up > * @enable: enable panel (turn on back light, etc.) > * @get_modes: add modes to the connector that the panel is attached to and > @@ -93,6 +95,18 @@ struct drm_panel { > > const struct drm_panel_funcs *funcs; > > + /* > + * panel information to be set in the connector when the panel is > + * attached. > + */ > + unsigned int width_mm; > + unsigned int height_mm; > + unsigned int bpc; > + int orientation; > + const u32 *bus_formats; > + unsigned int num_bus_formats; > + u32 bus_flags; Should probably put these in a struct to ensure the connector and panel have the same data types. Will do in a following patch if we stay with this. > + > struct list_head list; > }; > > -- > 2.22.0.410.gd8fdbe21b5-goog > _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 36+ messages in thread
* Re: [PATCH v3 2/4] drm/panel: set display info in panel attach @ 2019-06-24 23:04 ` dbasehore . 0 siblings, 0 replies; 36+ messages in thread From: dbasehore . @ 2019-06-24 23:04 UTC (permalink / raw) To: linux-kernel Cc: Maarten Lankhorst, Maxime Ripard, Sean Paul, David Airlie, Daniel Vetter, Thierry Reding, Sam Ravnborg, Jani Nikula, Joonas Lahtinen, Rodrigo Vivi, CK Hu, Philipp Zabel, Matthias Brugger, dri-devel, Intel Graphics, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE, moderated list:ARM/Mediatek SoC support On Fri, Jun 21, 2019 at 8:41 PM Derek Basehore <dbasehore@chromium.org> wrote: > > Devicetree systems can set panel orientation via a panel binding, but > there's no way, as is, to propagate this setting to the connector, > where the property need to be added. > To address this, this patch sets orientation, as well as other fixed > values for the panel, in the drm_panel_attach function. These values > are stored from probe in the drm_panel struct. > > Signed-off-by: Derek Basehore <dbasehore@chromium.org> > --- > drivers/gpu/drm/drm_panel.c | 28 ++++++++++++++++++++++++++++ > include/drm/drm_panel.h | 14 ++++++++++++++ > 2 files changed, 42 insertions(+) > > diff --git a/drivers/gpu/drm/drm_panel.c b/drivers/gpu/drm/drm_panel.c > index 507099af4b57..5690fca30236 100644 > --- a/drivers/gpu/drm/drm_panel.c > +++ b/drivers/gpu/drm/drm_panel.c > @@ -104,11 +104,23 @@ EXPORT_SYMBOL(drm_panel_remove); > */ > int drm_panel_attach(struct drm_panel *panel, struct drm_connector *connector) > { > + struct drm_display_info *info; > + > if (panel->connector) > return -EBUSY; > > panel->connector = connector; > panel->drm = connector->dev; > + info = &connector->display_info; > + info->width_mm = panel->width_mm; > + info->height_mm = panel->height_mm; > + info->bpc = panel->bpc; > + info->panel_orientation = panel->orientation; > + info->bus_flags = panel->bus_flags; > + if (panel->bus_formats) > + drm_display_info_set_bus_formats(&connector->display_info, > + panel->bus_formats, > + panel->num_bus_formats); > > return 0; > } > @@ -128,6 +140,22 @@ EXPORT_SYMBOL(drm_panel_attach); > */ > int drm_panel_detach(struct drm_panel *panel) > { > + struct drm_display_info *info; > + > + if (!panel->connector) > + goto out; > + > + info = &panel->connector->display_info; > + info->width_mm = 0; > + info->height_mm = 0; > + info->bpc = 0; > + info->panel_orientation = DRM_MODE_PANEL_ORIENTATION_UNKNOWN; > + info->bus_flags = 0; > + kfree(info->bus_formats); > + info->bus_formats = NULL; > + info->num_bus_formats = 0; > + > +out: > panel->connector = NULL; > panel->drm = NULL; > > diff --git a/include/drm/drm_panel.h b/include/drm/drm_panel.h > index 3564952f1a4f..760ca5865962 100644 > --- a/include/drm/drm_panel.h > +++ b/include/drm/drm_panel.h > @@ -37,6 +37,8 @@ struct display_timing; > * struct drm_panel_funcs - perform operations on a given panel > * @disable: disable panel (turn off back light, etc.) > * @unprepare: turn off panel > + * @detach: detach panel->connector (clear internal state, etc.) > + * @attach: attach panel->connector (update internal state, etc.) > * @prepare: turn on panel and perform set up > * @enable: enable panel (turn on back light, etc.) > * @get_modes: add modes to the connector that the panel is attached to and > @@ -93,6 +95,18 @@ struct drm_panel { > > const struct drm_panel_funcs *funcs; > > + /* > + * panel information to be set in the connector when the panel is > + * attached. > + */ > + unsigned int width_mm; > + unsigned int height_mm; > + unsigned int bpc; > + int orientation; > + const u32 *bus_formats; > + unsigned int num_bus_formats; > + u32 bus_flags; Should probably put these in a struct to ensure the connector and panel have the same data types. Will do in a following patch if we stay with this. > + > struct list_head list; > }; > > -- > 2.22.0.410.gd8fdbe21b5-goog > ^ permalink raw reply [flat|nested] 36+ messages in thread
* [PATCH v3 3/4] drm/connector: Split out orientation quirk detection 2019-06-22 3:41 ` Derek Basehore (?) @ 2019-06-22 3:41 ` Derek Basehore -1 siblings, 0 replies; 36+ messages in thread From: Derek Basehore @ 2019-06-22 3:41 UTC (permalink / raw) To: linux-kernel Cc: Maarten Lankhorst, Maxime Ripard, Sean Paul, David Airlie, Daniel Vetter, Thierry Reding, Sam Ravnborg, Jani Nikula, Joonas Lahtinen, Rodrigo Vivi, CK Hu, Philipp Zabel, Matthias Brugger, dri-devel, intel-gfx, linux-arm-kernel, linux-mediatek, Derek Basehore Not every platform needs quirk detection for panel orientation, so split the drm_connector_init_panel_orientation_property into two functions. One for platforms without the need for quirks, and the other for platforms that need quirks. Signed-off-by: Derek Basehore <dbasehore@chromium.org> --- drivers/gpu/drm/drm_connector.c | 45 ++++++++++++++++++++++++--------- drivers/gpu/drm/i915/intel_dp.c | 4 +-- drivers/gpu/drm/i915/vlv_dsi.c | 5 ++-- include/drm/drm_connector.h | 2 ++ 4 files changed, 39 insertions(+), 17 deletions(-) diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c index e17586aaa80f..c4b01adf927a 100644 --- a/drivers/gpu/drm/drm_connector.c +++ b/drivers/gpu/drm/drm_connector.c @@ -1894,31 +1894,23 @@ EXPORT_SYMBOL(drm_connector_set_vrr_capable_property); * drm_connector_init_panel_orientation_property - * initialize the connecters panel_orientation property * @connector: connector for which to init the panel-orientation property. - * @width: width in pixels of the panel, used for panel quirk detection - * @height: height in pixels of the panel, used for panel quirk detection * * This function should only be called for built-in panels, after setting * connector->display_info.panel_orientation first (if known). * - * This function will check for platform specific (e.g. DMI based) quirks - * overriding display_info.panel_orientation first, then if panel_orientation - * is not DRM_MODE_PANEL_ORIENTATION_UNKNOWN it will attach the - * "panel orientation" property to the connector. + * This function will check if the panel_orientation is not + * DRM_MODE_PANEL_ORIENTATION_UNKNOWN. If not, it will attach the "panel + * orientation" property to the connector. * * Returns: * Zero on success, negative errno on failure. */ int drm_connector_init_panel_orientation_property( - struct drm_connector *connector, int width, int height) + struct drm_connector *connector) { struct drm_device *dev = connector->dev; struct drm_display_info *info = &connector->display_info; struct drm_property *prop; - int orientation_quirk; - - orientation_quirk = drm_get_panel_orientation_quirk(width, height); - if (orientation_quirk != DRM_MODE_PANEL_ORIENTATION_UNKNOWN) - info->panel_orientation = orientation_quirk; if (info->panel_orientation == DRM_MODE_PANEL_ORIENTATION_UNKNOWN) return 0; @@ -1941,6 +1933,35 @@ int drm_connector_init_panel_orientation_property( } EXPORT_SYMBOL(drm_connector_init_panel_orientation_property); +/** + * drm_connector_init_panel_orientation_property_quirk - + * initialize the connecters panel_orientation property with a quirk + * override + * @connector: connector for which to init the panel-orientation property. + * @width: width in pixels of the panel, used for panel quirk detection + * @height: height in pixels of the panel, used for panel quirk detection + * + * This function will check for platform specific (e.g. DMI based) quirks + * overriding display_info.panel_orientation first, then if panel_orientation + * is not DRM_MODE_PANEL_ORIENTATION_UNKNOWN it will attach the + * "panel orientation" property to the connector. + * + * Returns: + * Zero on success, negative errno on failure. + */ +int drm_connector_init_panel_orientation_property_quirk( + struct drm_connector *connector, int width, int height) +{ + int orientation_quirk; + + orientation_quirk = drm_get_panel_orientation_quirk(width, height); + if (orientation_quirk != DRM_MODE_PANEL_ORIENTATION_UNKNOWN) + connector->display_info.panel_orientation = orientation_quirk; + + return drm_connector_init_panel_orientation_property(connector); +} +EXPORT_SYMBOL(drm_connector_init_panel_orientation_property_quirk); + int drm_connector_set_obj_prop(struct drm_mode_object *obj, struct drm_property *property, uint64_t value) diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c index b099a9dc28fd..7d4e61cf5463 100644 --- a/drivers/gpu/drm/i915/intel_dp.c +++ b/drivers/gpu/drm/i915/intel_dp.c @@ -7282,8 +7282,8 @@ static bool intel_edp_init_connector(struct intel_dp *intel_dp, intel_panel_setup_backlight(connector, pipe); if (fixed_mode) - drm_connector_init_panel_orientation_property( - connector, fixed_mode->hdisplay, fixed_mode->vdisplay); + drm_connector_init_panel_orientation_property_quirk(connector, + fixed_mode->hdisplay, fixed_mode->vdisplay); return true; diff --git a/drivers/gpu/drm/i915/vlv_dsi.c b/drivers/gpu/drm/i915/vlv_dsi.c index bfe2891eac37..fa9833dbe359 100644 --- a/drivers/gpu/drm/i915/vlv_dsi.c +++ b/drivers/gpu/drm/i915/vlv_dsi.c @@ -1650,6 +1650,7 @@ static void intel_dsi_add_properties(struct intel_connector *connector) if (connector->panel.fixed_mode) { u32 allowed_scalers; + int orientation; allowed_scalers = BIT(DRM_MODE_SCALE_ASPECT) | BIT(DRM_MODE_SCALE_FULLSCREEN); if (!HAS_GMCH(dev_priv)) @@ -1660,9 +1661,7 @@ static void intel_dsi_add_properties(struct intel_connector *connector) connector->base.state->scaling_mode = DRM_MODE_SCALE_ASPECT; - connector->base.display_info.panel_orientation = - vlv_dsi_get_panel_orientation(connector); - drm_connector_init_panel_orientation_property( + drm_connector_init_panel_orientation_property_quirk( &connector->base, connector->panel.fixed_mode->hdisplay, connector->panel.fixed_mode->vdisplay); diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h index 47e749b74e5f..0468fd9a4418 100644 --- a/include/drm/drm_connector.h +++ b/include/drm/drm_connector.h @@ -1370,6 +1370,8 @@ void drm_connector_set_link_status_property(struct drm_connector *connector, void drm_connector_set_vrr_capable_property( struct drm_connector *connector, bool capable); int drm_connector_init_panel_orientation_property( + struct drm_connector *connector); +int drm_connector_init_panel_orientation_property_quirk( struct drm_connector *connector, int width, int height); int drm_connector_attach_max_bpc_property(struct drm_connector *connector, int min, int max); -- 2.22.0.410.gd8fdbe21b5-goog ^ permalink raw reply related [flat|nested] 36+ messages in thread
* [PATCH v3 3/4] drm/connector: Split out orientation quirk detection @ 2019-06-22 3:41 ` Derek Basehore 0 siblings, 0 replies; 36+ messages in thread From: Derek Basehore @ 2019-06-22 3:41 UTC (permalink / raw) To: linux-kernel Cc: Derek Basehore, Philipp Zabel, Maxime Ripard, Sam Ravnborg, intel-gfx, Joonas Lahtinen, Maarten Lankhorst, Jani Nikula, David Airlie, Thierry Reding, Matthias Brugger, dri-devel, Daniel Vetter, Rodrigo Vivi, CK Hu, linux-mediatek, Sean Paul, linux-arm-kernel Not every platform needs quirk detection for panel orientation, so split the drm_connector_init_panel_orientation_property into two functions. One for platforms without the need for quirks, and the other for platforms that need quirks. Signed-off-by: Derek Basehore <dbasehore@chromium.org> --- drivers/gpu/drm/drm_connector.c | 45 ++++++++++++++++++++++++--------- drivers/gpu/drm/i915/intel_dp.c | 4 +-- drivers/gpu/drm/i915/vlv_dsi.c | 5 ++-- include/drm/drm_connector.h | 2 ++ 4 files changed, 39 insertions(+), 17 deletions(-) diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c index e17586aaa80f..c4b01adf927a 100644 --- a/drivers/gpu/drm/drm_connector.c +++ b/drivers/gpu/drm/drm_connector.c @@ -1894,31 +1894,23 @@ EXPORT_SYMBOL(drm_connector_set_vrr_capable_property); * drm_connector_init_panel_orientation_property - * initialize the connecters panel_orientation property * @connector: connector for which to init the panel-orientation property. - * @width: width in pixels of the panel, used for panel quirk detection - * @height: height in pixels of the panel, used for panel quirk detection * * This function should only be called for built-in panels, after setting * connector->display_info.panel_orientation first (if known). * - * This function will check for platform specific (e.g. DMI based) quirks - * overriding display_info.panel_orientation first, then if panel_orientation - * is not DRM_MODE_PANEL_ORIENTATION_UNKNOWN it will attach the - * "panel orientation" property to the connector. + * This function will check if the panel_orientation is not + * DRM_MODE_PANEL_ORIENTATION_UNKNOWN. If not, it will attach the "panel + * orientation" property to the connector. * * Returns: * Zero on success, negative errno on failure. */ int drm_connector_init_panel_orientation_property( - struct drm_connector *connector, int width, int height) + struct drm_connector *connector) { struct drm_device *dev = connector->dev; struct drm_display_info *info = &connector->display_info; struct drm_property *prop; - int orientation_quirk; - - orientation_quirk = drm_get_panel_orientation_quirk(width, height); - if (orientation_quirk != DRM_MODE_PANEL_ORIENTATION_UNKNOWN) - info->panel_orientation = orientation_quirk; if (info->panel_orientation == DRM_MODE_PANEL_ORIENTATION_UNKNOWN) return 0; @@ -1941,6 +1933,35 @@ int drm_connector_init_panel_orientation_property( } EXPORT_SYMBOL(drm_connector_init_panel_orientation_property); +/** + * drm_connector_init_panel_orientation_property_quirk - + * initialize the connecters panel_orientation property with a quirk + * override + * @connector: connector for which to init the panel-orientation property. + * @width: width in pixels of the panel, used for panel quirk detection + * @height: height in pixels of the panel, used for panel quirk detection + * + * This function will check for platform specific (e.g. DMI based) quirks + * overriding display_info.panel_orientation first, then if panel_orientation + * is not DRM_MODE_PANEL_ORIENTATION_UNKNOWN it will attach the + * "panel orientation" property to the connector. + * + * Returns: + * Zero on success, negative errno on failure. + */ +int drm_connector_init_panel_orientation_property_quirk( + struct drm_connector *connector, int width, int height) +{ + int orientation_quirk; + + orientation_quirk = drm_get_panel_orientation_quirk(width, height); + if (orientation_quirk != DRM_MODE_PANEL_ORIENTATION_UNKNOWN) + connector->display_info.panel_orientation = orientation_quirk; + + return drm_connector_init_panel_orientation_property(connector); +} +EXPORT_SYMBOL(drm_connector_init_panel_orientation_property_quirk); + int drm_connector_set_obj_prop(struct drm_mode_object *obj, struct drm_property *property, uint64_t value) diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c index b099a9dc28fd..7d4e61cf5463 100644 --- a/drivers/gpu/drm/i915/intel_dp.c +++ b/drivers/gpu/drm/i915/intel_dp.c @@ -7282,8 +7282,8 @@ static bool intel_edp_init_connector(struct intel_dp *intel_dp, intel_panel_setup_backlight(connector, pipe); if (fixed_mode) - drm_connector_init_panel_orientation_property( - connector, fixed_mode->hdisplay, fixed_mode->vdisplay); + drm_connector_init_panel_orientation_property_quirk(connector, + fixed_mode->hdisplay, fixed_mode->vdisplay); return true; diff --git a/drivers/gpu/drm/i915/vlv_dsi.c b/drivers/gpu/drm/i915/vlv_dsi.c index bfe2891eac37..fa9833dbe359 100644 --- a/drivers/gpu/drm/i915/vlv_dsi.c +++ b/drivers/gpu/drm/i915/vlv_dsi.c @@ -1650,6 +1650,7 @@ static void intel_dsi_add_properties(struct intel_connector *connector) if (connector->panel.fixed_mode) { u32 allowed_scalers; + int orientation; allowed_scalers = BIT(DRM_MODE_SCALE_ASPECT) | BIT(DRM_MODE_SCALE_FULLSCREEN); if (!HAS_GMCH(dev_priv)) @@ -1660,9 +1661,7 @@ static void intel_dsi_add_properties(struct intel_connector *connector) connector->base.state->scaling_mode = DRM_MODE_SCALE_ASPECT; - connector->base.display_info.panel_orientation = - vlv_dsi_get_panel_orientation(connector); - drm_connector_init_panel_orientation_property( + drm_connector_init_panel_orientation_property_quirk( &connector->base, connector->panel.fixed_mode->hdisplay, connector->panel.fixed_mode->vdisplay); diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h index 47e749b74e5f..0468fd9a4418 100644 --- a/include/drm/drm_connector.h +++ b/include/drm/drm_connector.h @@ -1370,6 +1370,8 @@ void drm_connector_set_link_status_property(struct drm_connector *connector, void drm_connector_set_vrr_capable_property( struct drm_connector *connector, bool capable); int drm_connector_init_panel_orientation_property( + struct drm_connector *connector); +int drm_connector_init_panel_orientation_property_quirk( struct drm_connector *connector, int width, int height); int drm_connector_attach_max_bpc_property(struct drm_connector *connector, int min, int max); -- 2.22.0.410.gd8fdbe21b5-goog _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply related [flat|nested] 36+ messages in thread
* [PATCH v3 3/4] drm/connector: Split out orientation quirk detection @ 2019-06-22 3:41 ` Derek Basehore 0 siblings, 0 replies; 36+ messages in thread From: Derek Basehore @ 2019-06-22 3:41 UTC (permalink / raw) To: linux-kernel Cc: Derek Basehore, Philipp Zabel, Maxime Ripard, Sam Ravnborg, intel-gfx, David Airlie, Matthias Brugger, dri-devel, CK Hu, linux-mediatek, linux-arm-kernel Not every platform needs quirk detection for panel orientation, so split the drm_connector_init_panel_orientation_property into two functions. One for platforms without the need for quirks, and the other for platforms that need quirks. Signed-off-by: Derek Basehore <dbasehore@chromium.org> --- drivers/gpu/drm/drm_connector.c | 45 ++++++++++++++++++++++++--------- drivers/gpu/drm/i915/intel_dp.c | 4 +-- drivers/gpu/drm/i915/vlv_dsi.c | 5 ++-- include/drm/drm_connector.h | 2 ++ 4 files changed, 39 insertions(+), 17 deletions(-) diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c index e17586aaa80f..c4b01adf927a 100644 --- a/drivers/gpu/drm/drm_connector.c +++ b/drivers/gpu/drm/drm_connector.c @@ -1894,31 +1894,23 @@ EXPORT_SYMBOL(drm_connector_set_vrr_capable_property); * drm_connector_init_panel_orientation_property - * initialize the connecters panel_orientation property * @connector: connector for which to init the panel-orientation property. - * @width: width in pixels of the panel, used for panel quirk detection - * @height: height in pixels of the panel, used for panel quirk detection * * This function should only be called for built-in panels, after setting * connector->display_info.panel_orientation first (if known). * - * This function will check for platform specific (e.g. DMI based) quirks - * overriding display_info.panel_orientation first, then if panel_orientation - * is not DRM_MODE_PANEL_ORIENTATION_UNKNOWN it will attach the - * "panel orientation" property to the connector. + * This function will check if the panel_orientation is not + * DRM_MODE_PANEL_ORIENTATION_UNKNOWN. If not, it will attach the "panel + * orientation" property to the connector. * * Returns: * Zero on success, negative errno on failure. */ int drm_connector_init_panel_orientation_property( - struct drm_connector *connector, int width, int height) + struct drm_connector *connector) { struct drm_device *dev = connector->dev; struct drm_display_info *info = &connector->display_info; struct drm_property *prop; - int orientation_quirk; - - orientation_quirk = drm_get_panel_orientation_quirk(width, height); - if (orientation_quirk != DRM_MODE_PANEL_ORIENTATION_UNKNOWN) - info->panel_orientation = orientation_quirk; if (info->panel_orientation == DRM_MODE_PANEL_ORIENTATION_UNKNOWN) return 0; @@ -1941,6 +1933,35 @@ int drm_connector_init_panel_orientation_property( } EXPORT_SYMBOL(drm_connector_init_panel_orientation_property); +/** + * drm_connector_init_panel_orientation_property_quirk - + * initialize the connecters panel_orientation property with a quirk + * override + * @connector: connector for which to init the panel-orientation property. + * @width: width in pixels of the panel, used for panel quirk detection + * @height: height in pixels of the panel, used for panel quirk detection + * + * This function will check for platform specific (e.g. DMI based) quirks + * overriding display_info.panel_orientation first, then if panel_orientation + * is not DRM_MODE_PANEL_ORIENTATION_UNKNOWN it will attach the + * "panel orientation" property to the connector. + * + * Returns: + * Zero on success, negative errno on failure. + */ +int drm_connector_init_panel_orientation_property_quirk( + struct drm_connector *connector, int width, int height) +{ + int orientation_quirk; + + orientation_quirk = drm_get_panel_orientation_quirk(width, height); + if (orientation_quirk != DRM_MODE_PANEL_ORIENTATION_UNKNOWN) + connector->display_info.panel_orientation = orientation_quirk; + + return drm_connector_init_panel_orientation_property(connector); +} +EXPORT_SYMBOL(drm_connector_init_panel_orientation_property_quirk); + int drm_connector_set_obj_prop(struct drm_mode_object *obj, struct drm_property *property, uint64_t value) diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c index b099a9dc28fd..7d4e61cf5463 100644 --- a/drivers/gpu/drm/i915/intel_dp.c +++ b/drivers/gpu/drm/i915/intel_dp.c @@ -7282,8 +7282,8 @@ static bool intel_edp_init_connector(struct intel_dp *intel_dp, intel_panel_setup_backlight(connector, pipe); if (fixed_mode) - drm_connector_init_panel_orientation_property( - connector, fixed_mode->hdisplay, fixed_mode->vdisplay); + drm_connector_init_panel_orientation_property_quirk(connector, + fixed_mode->hdisplay, fixed_mode->vdisplay); return true; diff --git a/drivers/gpu/drm/i915/vlv_dsi.c b/drivers/gpu/drm/i915/vlv_dsi.c index bfe2891eac37..fa9833dbe359 100644 --- a/drivers/gpu/drm/i915/vlv_dsi.c +++ b/drivers/gpu/drm/i915/vlv_dsi.c @@ -1650,6 +1650,7 @@ static void intel_dsi_add_properties(struct intel_connector *connector) if (connector->panel.fixed_mode) { u32 allowed_scalers; + int orientation; allowed_scalers = BIT(DRM_MODE_SCALE_ASPECT) | BIT(DRM_MODE_SCALE_FULLSCREEN); if (!HAS_GMCH(dev_priv)) @@ -1660,9 +1661,7 @@ static void intel_dsi_add_properties(struct intel_connector *connector) connector->base.state->scaling_mode = DRM_MODE_SCALE_ASPECT; - connector->base.display_info.panel_orientation = - vlv_dsi_get_panel_orientation(connector); - drm_connector_init_panel_orientation_property( + drm_connector_init_panel_orientation_property_quirk( &connector->base, connector->panel.fixed_mode->hdisplay, connector->panel.fixed_mode->vdisplay); diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h index 47e749b74e5f..0468fd9a4418 100644 --- a/include/drm/drm_connector.h +++ b/include/drm/drm_connector.h @@ -1370,6 +1370,8 @@ void drm_connector_set_link_status_property(struct drm_connector *connector, void drm_connector_set_vrr_capable_property( struct drm_connector *connector, bool capable); int drm_connector_init_panel_orientation_property( + struct drm_connector *connector); +int drm_connector_init_panel_orientation_property_quirk( struct drm_connector *connector, int width, int height); int drm_connector_attach_max_bpc_property(struct drm_connector *connector, int min, int max); -- 2.22.0.410.gd8fdbe21b5-goog _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply related [flat|nested] 36+ messages in thread
* Re: [Intel-gfx] [PATCH v3 3/4] drm/connector: Split out orientation quirk detection 2019-06-22 3:41 ` Derek Basehore @ 2019-06-23 12:11 ` Hans de Goede -1 siblings, 0 replies; 36+ messages in thread From: Hans de Goede @ 2019-06-23 12:11 UTC (permalink / raw) To: Derek Basehore, linux-kernel Cc: Philipp Zabel, Maxime Ripard, Sam Ravnborg, intel-gfx, David Airlie, Matthias Brugger, dri-devel, CK Hu, linux-mediatek, linux-arm-kernel Hi, On 22-06-19 05:41, Derek Basehore wrote: > Not every platform needs quirk detection for panel orientation, so > split the drm_connector_init_panel_orientation_property into two > functions. One for platforms without the need for quirks, and the > other for platforms that need quirks. > > Signed-off-by: Derek Basehore <dbasehore@chromium.org> > --- > drivers/gpu/drm/drm_connector.c | 45 ++++++++++++++++++++++++--------- > drivers/gpu/drm/i915/intel_dp.c | 4 +-- > drivers/gpu/drm/i915/vlv_dsi.c | 5 ++-- > include/drm/drm_connector.h | 2 ++ > 4 files changed, 39 insertions(+), 17 deletions(-) > > diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c > index e17586aaa80f..c4b01adf927a 100644 > --- a/drivers/gpu/drm/drm_connector.c > +++ b/drivers/gpu/drm/drm_connector.c > @@ -1894,31 +1894,23 @@ EXPORT_SYMBOL(drm_connector_set_vrr_capable_property); > * drm_connector_init_panel_orientation_property - > * initialize the connecters panel_orientation property > * @connector: connector for which to init the panel-orientation property. > - * @width: width in pixels of the panel, used for panel quirk detection > - * @height: height in pixels of the panel, used for panel quirk detection > * > * This function should only be called for built-in panels, after setting > * connector->display_info.panel_orientation first (if known). > * > - * This function will check for platform specific (e.g. DMI based) quirks > - * overriding display_info.panel_orientation first, then if panel_orientation > - * is not DRM_MODE_PANEL_ORIENTATION_UNKNOWN it will attach the > - * "panel orientation" property to the connector. > + * This function will check if the panel_orientation is not > + * DRM_MODE_PANEL_ORIENTATION_UNKNOWN. If not, it will attach the "panel > + * orientation" property to the connector. > * > * Returns: > * Zero on success, negative errno on failure. > */ > int drm_connector_init_panel_orientation_property( > - struct drm_connector *connector, int width, int height) > + struct drm_connector *connector) > { > struct drm_device *dev = connector->dev; > struct drm_display_info *info = &connector->display_info; > struct drm_property *prop; > - int orientation_quirk; > - > - orientation_quirk = drm_get_panel_orientation_quirk(width, height); > - if (orientation_quirk != DRM_MODE_PANEL_ORIENTATION_UNKNOWN) > - info->panel_orientation = orientation_quirk; > > if (info->panel_orientation == DRM_MODE_PANEL_ORIENTATION_UNKNOWN) > return 0; > @@ -1941,6 +1933,35 @@ int drm_connector_init_panel_orientation_property( > } > EXPORT_SYMBOL(drm_connector_init_panel_orientation_property); > > +/** > + * drm_connector_init_panel_orientation_property_quirk - > + * initialize the connecters panel_orientation property with a quirk > + * override > + * @connector: connector for which to init the panel-orientation property. > + * @width: width in pixels of the panel, used for panel quirk detection > + * @height: height in pixels of the panel, used for panel quirk detection > + * > + * This function will check for platform specific (e.g. DMI based) quirks > + * overriding display_info.panel_orientation first, then if panel_orientation > + * is not DRM_MODE_PANEL_ORIENTATION_UNKNOWN it will attach the > + * "panel orientation" property to the connector. > + * > + * Returns: > + * Zero on success, negative errno on failure. > + */ > +int drm_connector_init_panel_orientation_property_quirk( > + struct drm_connector *connector, int width, int height) > +{ > + int orientation_quirk; > + > + orientation_quirk = drm_get_panel_orientation_quirk(width, height); > + if (orientation_quirk != DRM_MODE_PANEL_ORIENTATION_UNKNOWN) > + connector->display_info.panel_orientation = orientation_quirk; > + > + return drm_connector_init_panel_orientation_property(connector); > +} > +EXPORT_SYMBOL(drm_connector_init_panel_orientation_property_quirk); > + > int drm_connector_set_obj_prop(struct drm_mode_object *obj, > struct drm_property *property, > uint64_t value) > diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c > index b099a9dc28fd..7d4e61cf5463 100644 > --- a/drivers/gpu/drm/i915/intel_dp.c > +++ b/drivers/gpu/drm/i915/intel_dp.c > @@ -7282,8 +7282,8 @@ static bool intel_edp_init_connector(struct intel_dp *intel_dp, > intel_panel_setup_backlight(connector, pipe); > > if (fixed_mode) > - drm_connector_init_panel_orientation_property( > - connector, fixed_mode->hdisplay, fixed_mode->vdisplay); > + drm_connector_init_panel_orientation_property_quirk(connector, > + fixed_mode->hdisplay, fixed_mode->vdisplay); > > return true; > > diff --git a/drivers/gpu/drm/i915/vlv_dsi.c b/drivers/gpu/drm/i915/vlv_dsi.c > index bfe2891eac37..fa9833dbe359 100644 > --- a/drivers/gpu/drm/i915/vlv_dsi.c > +++ b/drivers/gpu/drm/i915/vlv_dsi.c > @@ -1650,6 +1650,7 @@ static void intel_dsi_add_properties(struct intel_connector *connector) > > if (connector->panel.fixed_mode) { > u32 allowed_scalers; > + int orientation; > > allowed_scalers = BIT(DRM_MODE_SCALE_ASPECT) | BIT(DRM_MODE_SCALE_FULLSCREEN); > if (!HAS_GMCH(dev_priv)) The above chunk seems to be a leftover from the previous version of this series. Otherwise this patch looks good, with this fixed you can add my: Reviewed-by: Hans de Goede <hdegoede@redhat.com> Regards, Hans > @@ -1660,9 +1661,7 @@ static void intel_dsi_add_properties(struct intel_connector *connector) > > connector->base.state->scaling_mode = DRM_MODE_SCALE_ASPECT; > > - connector->base.display_info.panel_orientation = > - vlv_dsi_get_panel_orientation(connector); > - drm_connector_init_panel_orientation_property( > + drm_connector_init_panel_orientation_property_quirk( > &connector->base, > connector->panel.fixed_mode->hdisplay, > connector->panel.fixed_mode->vdisplay); > diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h > index 47e749b74e5f..0468fd9a4418 100644 > --- a/include/drm/drm_connector.h > +++ b/include/drm/drm_connector.h > @@ -1370,6 +1370,8 @@ void drm_connector_set_link_status_property(struct drm_connector *connector, > void drm_connector_set_vrr_capable_property( > struct drm_connector *connector, bool capable); > int drm_connector_init_panel_orientation_property( > + struct drm_connector *connector); > +int drm_connector_init_panel_orientation_property_quirk( > struct drm_connector *connector, int width, int height); > int drm_connector_attach_max_bpc_property(struct drm_connector *connector, > int min, int max); > ^ permalink raw reply [flat|nested] 36+ messages in thread
* Re: [Intel-gfx] [PATCH v3 3/4] drm/connector: Split out orientation quirk detection @ 2019-06-23 12:11 ` Hans de Goede 0 siblings, 0 replies; 36+ messages in thread From: Hans de Goede @ 2019-06-23 12:11 UTC (permalink / raw) To: Derek Basehore, linux-kernel Cc: Maxime Ripard, intel-gfx, dri-devel, David Airlie, CK Hu, linux-mediatek, Philipp Zabel, Matthias Brugger, Sam Ravnborg, linux-arm-kernel Hi, On 22-06-19 05:41, Derek Basehore wrote: > Not every platform needs quirk detection for panel orientation, so > split the drm_connector_init_panel_orientation_property into two > functions. One for platforms without the need for quirks, and the > other for platforms that need quirks. > > Signed-off-by: Derek Basehore <dbasehore@chromium.org> > --- > drivers/gpu/drm/drm_connector.c | 45 ++++++++++++++++++++++++--------- > drivers/gpu/drm/i915/intel_dp.c | 4 +-- > drivers/gpu/drm/i915/vlv_dsi.c | 5 ++-- > include/drm/drm_connector.h | 2 ++ > 4 files changed, 39 insertions(+), 17 deletions(-) > > diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c > index e17586aaa80f..c4b01adf927a 100644 > --- a/drivers/gpu/drm/drm_connector.c > +++ b/drivers/gpu/drm/drm_connector.c > @@ -1894,31 +1894,23 @@ EXPORT_SYMBOL(drm_connector_set_vrr_capable_property); > * drm_connector_init_panel_orientation_property - > * initialize the connecters panel_orientation property > * @connector: connector for which to init the panel-orientation property. > - * @width: width in pixels of the panel, used for panel quirk detection > - * @height: height in pixels of the panel, used for panel quirk detection > * > * This function should only be called for built-in panels, after setting > * connector->display_info.panel_orientation first (if known). > * > - * This function will check for platform specific (e.g. DMI based) quirks > - * overriding display_info.panel_orientation first, then if panel_orientation > - * is not DRM_MODE_PANEL_ORIENTATION_UNKNOWN it will attach the > - * "panel orientation" property to the connector. > + * This function will check if the panel_orientation is not > + * DRM_MODE_PANEL_ORIENTATION_UNKNOWN. If not, it will attach the "panel > + * orientation" property to the connector. > * > * Returns: > * Zero on success, negative errno on failure. > */ > int drm_connector_init_panel_orientation_property( > - struct drm_connector *connector, int width, int height) > + struct drm_connector *connector) > { > struct drm_device *dev = connector->dev; > struct drm_display_info *info = &connector->display_info; > struct drm_property *prop; > - int orientation_quirk; > - > - orientation_quirk = drm_get_panel_orientation_quirk(width, height); > - if (orientation_quirk != DRM_MODE_PANEL_ORIENTATION_UNKNOWN) > - info->panel_orientation = orientation_quirk; > > if (info->panel_orientation == DRM_MODE_PANEL_ORIENTATION_UNKNOWN) > return 0; > @@ -1941,6 +1933,35 @@ int drm_connector_init_panel_orientation_property( > } > EXPORT_SYMBOL(drm_connector_init_panel_orientation_property); > > +/** > + * drm_connector_init_panel_orientation_property_quirk - > + * initialize the connecters panel_orientation property with a quirk > + * override > + * @connector: connector for which to init the panel-orientation property. > + * @width: width in pixels of the panel, used for panel quirk detection > + * @height: height in pixels of the panel, used for panel quirk detection > + * > + * This function will check for platform specific (e.g. DMI based) quirks > + * overriding display_info.panel_orientation first, then if panel_orientation > + * is not DRM_MODE_PANEL_ORIENTATION_UNKNOWN it will attach the > + * "panel orientation" property to the connector. > + * > + * Returns: > + * Zero on success, negative errno on failure. > + */ > +int drm_connector_init_panel_orientation_property_quirk( > + struct drm_connector *connector, int width, int height) > +{ > + int orientation_quirk; > + > + orientation_quirk = drm_get_panel_orientation_quirk(width, height); > + if (orientation_quirk != DRM_MODE_PANEL_ORIENTATION_UNKNOWN) > + connector->display_info.panel_orientation = orientation_quirk; > + > + return drm_connector_init_panel_orientation_property(connector); > +} > +EXPORT_SYMBOL(drm_connector_init_panel_orientation_property_quirk); > + > int drm_connector_set_obj_prop(struct drm_mode_object *obj, > struct drm_property *property, > uint64_t value) > diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c > index b099a9dc28fd..7d4e61cf5463 100644 > --- a/drivers/gpu/drm/i915/intel_dp.c > +++ b/drivers/gpu/drm/i915/intel_dp.c > @@ -7282,8 +7282,8 @@ static bool intel_edp_init_connector(struct intel_dp *intel_dp, > intel_panel_setup_backlight(connector, pipe); > > if (fixed_mode) > - drm_connector_init_panel_orientation_property( > - connector, fixed_mode->hdisplay, fixed_mode->vdisplay); > + drm_connector_init_panel_orientation_property_quirk(connector, > + fixed_mode->hdisplay, fixed_mode->vdisplay); > > return true; > > diff --git a/drivers/gpu/drm/i915/vlv_dsi.c b/drivers/gpu/drm/i915/vlv_dsi.c > index bfe2891eac37..fa9833dbe359 100644 > --- a/drivers/gpu/drm/i915/vlv_dsi.c > +++ b/drivers/gpu/drm/i915/vlv_dsi.c > @@ -1650,6 +1650,7 @@ static void intel_dsi_add_properties(struct intel_connector *connector) > > if (connector->panel.fixed_mode) { > u32 allowed_scalers; > + int orientation; > > allowed_scalers = BIT(DRM_MODE_SCALE_ASPECT) | BIT(DRM_MODE_SCALE_FULLSCREEN); > if (!HAS_GMCH(dev_priv)) The above chunk seems to be a leftover from the previous version of this series. Otherwise this patch looks good, with this fixed you can add my: Reviewed-by: Hans de Goede <hdegoede@redhat.com> Regards, Hans > @@ -1660,9 +1661,7 @@ static void intel_dsi_add_properties(struct intel_connector *connector) > > connector->base.state->scaling_mode = DRM_MODE_SCALE_ASPECT; > > - connector->base.display_info.panel_orientation = > - vlv_dsi_get_panel_orientation(connector); > - drm_connector_init_panel_orientation_property( > + drm_connector_init_panel_orientation_property_quirk( > &connector->base, > connector->panel.fixed_mode->hdisplay, > connector->panel.fixed_mode->vdisplay); > diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h > index 47e749b74e5f..0468fd9a4418 100644 > --- a/include/drm/drm_connector.h > +++ b/include/drm/drm_connector.h > @@ -1370,6 +1370,8 @@ void drm_connector_set_link_status_property(struct drm_connector *connector, > void drm_connector_set_vrr_capable_property( > struct drm_connector *connector, bool capable); > int drm_connector_init_panel_orientation_property( > + struct drm_connector *connector); > +int drm_connector_init_panel_orientation_property_quirk( > struct drm_connector *connector, int width, int height); > int drm_connector_attach_max_bpc_property(struct drm_connector *connector, > int min, int max); > _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 36+ messages in thread
* Re: [Intel-gfx] [PATCH v3 3/4] drm/connector: Split out orientation quirk detection 2019-06-22 3:41 ` Derek Basehore @ 2019-06-24 13:24 ` Ville Syrjälä -1 siblings, 0 replies; 36+ messages in thread From: Ville Syrjälä @ 2019-06-24 13:24 UTC (permalink / raw) To: Derek Basehore Cc: linux-kernel, Philipp Zabel, Maxime Ripard, Sam Ravnborg, intel-gfx, David Airlie, Matthias Brugger, dri-devel, CK Hu, linux-mediatek, linux-arm-kernel On Fri, Jun 21, 2019 at 08:41:04PM -0700, Derek Basehore wrote: > Not every platform needs quirk detection for panel orientation, so > split the drm_connector_init_panel_orientation_property into two > functions. One for platforms without the need for quirks, and the > other for platforms that need quirks. > > Signed-off-by: Derek Basehore <dbasehore@chromium.org> > --- > drivers/gpu/drm/drm_connector.c | 45 ++++++++++++++++++++++++--------- > drivers/gpu/drm/i915/intel_dp.c | 4 +-- > drivers/gpu/drm/i915/vlv_dsi.c | 5 ++-- > include/drm/drm_connector.h | 2 ++ > 4 files changed, 39 insertions(+), 17 deletions(-) > > diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c > index e17586aaa80f..c4b01adf927a 100644 > --- a/drivers/gpu/drm/drm_connector.c > +++ b/drivers/gpu/drm/drm_connector.c > @@ -1894,31 +1894,23 @@ EXPORT_SYMBOL(drm_connector_set_vrr_capable_property); > * drm_connector_init_panel_orientation_property - > * initialize the connecters panel_orientation property > * @connector: connector for which to init the panel-orientation property. > - * @width: width in pixels of the panel, used for panel quirk detection > - * @height: height in pixels of the panel, used for panel quirk detection > * > * This function should only be called for built-in panels, after setting > * connector->display_info.panel_orientation first (if known). > * > - * This function will check for platform specific (e.g. DMI based) quirks > - * overriding display_info.panel_orientation first, then if panel_orientation > - * is not DRM_MODE_PANEL_ORIENTATION_UNKNOWN it will attach the > - * "panel orientation" property to the connector. > + * This function will check if the panel_orientation is not > + * DRM_MODE_PANEL_ORIENTATION_UNKNOWN. If not, it will attach the "panel > + * orientation" property to the connector. > * > * Returns: > * Zero on success, negative errno on failure. > */ > int drm_connector_init_panel_orientation_property( > - struct drm_connector *connector, int width, int height) > + struct drm_connector *connector) > { > struct drm_device *dev = connector->dev; > struct drm_display_info *info = &connector->display_info; > struct drm_property *prop; > - int orientation_quirk; > - > - orientation_quirk = drm_get_panel_orientation_quirk(width, height); > - if (orientation_quirk != DRM_MODE_PANEL_ORIENTATION_UNKNOWN) > - info->panel_orientation = orientation_quirk; > > if (info->panel_orientation == DRM_MODE_PANEL_ORIENTATION_UNKNOWN) > return 0; > @@ -1941,6 +1933,35 @@ int drm_connector_init_panel_orientation_property( > } > EXPORT_SYMBOL(drm_connector_init_panel_orientation_property); > > +/** > + * drm_connector_init_panel_orientation_property_quirk - > + * initialize the connecters panel_orientation property with a quirk > + * override > + * @connector: connector for which to init the panel-orientation property. > + * @width: width in pixels of the panel, used for panel quirk detection > + * @height: height in pixels of the panel, used for panel quirk detection > + * > + * This function will check for platform specific (e.g. DMI based) quirks > + * overriding display_info.panel_orientation first, then if panel_orientation > + * is not DRM_MODE_PANEL_ORIENTATION_UNKNOWN it will attach the > + * "panel orientation" property to the connector. > + * > + * Returns: > + * Zero on success, negative errno on failure. > + */ > +int drm_connector_init_panel_orientation_property_quirk( > + struct drm_connector *connector, int width, int height) > +{ > + int orientation_quirk; > + > + orientation_quirk = drm_get_panel_orientation_quirk(width, height); > + if (orientation_quirk != DRM_MODE_PANEL_ORIENTATION_UNKNOWN) > + connector->display_info.panel_orientation = orientation_quirk; > + > + return drm_connector_init_panel_orientation_property(connector); > +} > +EXPORT_SYMBOL(drm_connector_init_panel_orientation_property_quirk); > + > int drm_connector_set_obj_prop(struct drm_mode_object *obj, > struct drm_property *property, > uint64_t value) > diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c > index b099a9dc28fd..7d4e61cf5463 100644 > --- a/drivers/gpu/drm/i915/intel_dp.c > +++ b/drivers/gpu/drm/i915/intel_dp.c > @@ -7282,8 +7282,8 @@ static bool intel_edp_init_connector(struct intel_dp *intel_dp, > intel_panel_setup_backlight(connector, pipe); > > if (fixed_mode) > - drm_connector_init_panel_orientation_property( > - connector, fixed_mode->hdisplay, fixed_mode->vdisplay); > + drm_connector_init_panel_orientation_property_quirk(connector, > + fixed_mode->hdisplay, fixed_mode->vdisplay); > > return true; > > diff --git a/drivers/gpu/drm/i915/vlv_dsi.c b/drivers/gpu/drm/i915/vlv_dsi.c > index bfe2891eac37..fa9833dbe359 100644 > --- a/drivers/gpu/drm/i915/vlv_dsi.c > +++ b/drivers/gpu/drm/i915/vlv_dsi.c > @@ -1650,6 +1650,7 @@ static void intel_dsi_add_properties(struct intel_connector *connector) > > if (connector->panel.fixed_mode) { > u32 allowed_scalers; > + int orientation; > > allowed_scalers = BIT(DRM_MODE_SCALE_ASPECT) | BIT(DRM_MODE_SCALE_FULLSCREEN); > if (!HAS_GMCH(dev_priv)) > @@ -1660,9 +1661,7 @@ static void intel_dsi_add_properties(struct intel_connector *connector) > > connector->base.state->scaling_mode = DRM_MODE_SCALE_ASPECT; > > - connector->base.display_info.panel_orientation = > - vlv_dsi_get_panel_orientation(connector); Where did that go? > - drm_connector_init_panel_orientation_property( > + drm_connector_init_panel_orientation_property_quirk( > &connector->base, > connector->panel.fixed_mode->hdisplay, > connector->panel.fixed_mode->vdisplay); > diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h > index 47e749b74e5f..0468fd9a4418 100644 > --- a/include/drm/drm_connector.h > +++ b/include/drm/drm_connector.h > @@ -1370,6 +1370,8 @@ void drm_connector_set_link_status_property(struct drm_connector *connector, > void drm_connector_set_vrr_capable_property( > struct drm_connector *connector, bool capable); > int drm_connector_init_panel_orientation_property( > + struct drm_connector *connector); > +int drm_connector_init_panel_orientation_property_quirk( > struct drm_connector *connector, int width, int height); > int drm_connector_attach_max_bpc_property(struct drm_connector *connector, > int min, int max); > -- > 2.22.0.410.gd8fdbe21b5-goog > > _______________________________________________ > Intel-gfx mailing list > Intel-gfx@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/intel-gfx -- Ville Syrjälä Intel ^ permalink raw reply [flat|nested] 36+ messages in thread
* Re: [Intel-gfx] [PATCH v3 3/4] drm/connector: Split out orientation quirk detection @ 2019-06-24 13:24 ` Ville Syrjälä 0 siblings, 0 replies; 36+ messages in thread From: Ville Syrjälä @ 2019-06-24 13:24 UTC (permalink / raw) To: Derek Basehore Cc: Maxime Ripard, intel-gfx, linux-kernel, dri-devel, David Airlie, CK Hu, linux-mediatek, Philipp Zabel, Matthias Brugger, Sam Ravnborg, linux-arm-kernel On Fri, Jun 21, 2019 at 08:41:04PM -0700, Derek Basehore wrote: > Not every platform needs quirk detection for panel orientation, so > split the drm_connector_init_panel_orientation_property into two > functions. One for platforms without the need for quirks, and the > other for platforms that need quirks. > > Signed-off-by: Derek Basehore <dbasehore@chromium.org> > --- > drivers/gpu/drm/drm_connector.c | 45 ++++++++++++++++++++++++--------- > drivers/gpu/drm/i915/intel_dp.c | 4 +-- > drivers/gpu/drm/i915/vlv_dsi.c | 5 ++-- > include/drm/drm_connector.h | 2 ++ > 4 files changed, 39 insertions(+), 17 deletions(-) > > diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c > index e17586aaa80f..c4b01adf927a 100644 > --- a/drivers/gpu/drm/drm_connector.c > +++ b/drivers/gpu/drm/drm_connector.c > @@ -1894,31 +1894,23 @@ EXPORT_SYMBOL(drm_connector_set_vrr_capable_property); > * drm_connector_init_panel_orientation_property - > * initialize the connecters panel_orientation property > * @connector: connector for which to init the panel-orientation property. > - * @width: width in pixels of the panel, used for panel quirk detection > - * @height: height in pixels of the panel, used for panel quirk detection > * > * This function should only be called for built-in panels, after setting > * connector->display_info.panel_orientation first (if known). > * > - * This function will check for platform specific (e.g. DMI based) quirks > - * overriding display_info.panel_orientation first, then if panel_orientation > - * is not DRM_MODE_PANEL_ORIENTATION_UNKNOWN it will attach the > - * "panel orientation" property to the connector. > + * This function will check if the panel_orientation is not > + * DRM_MODE_PANEL_ORIENTATION_UNKNOWN. If not, it will attach the "panel > + * orientation" property to the connector. > * > * Returns: > * Zero on success, negative errno on failure. > */ > int drm_connector_init_panel_orientation_property( > - struct drm_connector *connector, int width, int height) > + struct drm_connector *connector) > { > struct drm_device *dev = connector->dev; > struct drm_display_info *info = &connector->display_info; > struct drm_property *prop; > - int orientation_quirk; > - > - orientation_quirk = drm_get_panel_orientation_quirk(width, height); > - if (orientation_quirk != DRM_MODE_PANEL_ORIENTATION_UNKNOWN) > - info->panel_orientation = orientation_quirk; > > if (info->panel_orientation == DRM_MODE_PANEL_ORIENTATION_UNKNOWN) > return 0; > @@ -1941,6 +1933,35 @@ int drm_connector_init_panel_orientation_property( > } > EXPORT_SYMBOL(drm_connector_init_panel_orientation_property); > > +/** > + * drm_connector_init_panel_orientation_property_quirk - > + * initialize the connecters panel_orientation property with a quirk > + * override > + * @connector: connector for which to init the panel-orientation property. > + * @width: width in pixels of the panel, used for panel quirk detection > + * @height: height in pixels of the panel, used for panel quirk detection > + * > + * This function will check for platform specific (e.g. DMI based) quirks > + * overriding display_info.panel_orientation first, then if panel_orientation > + * is not DRM_MODE_PANEL_ORIENTATION_UNKNOWN it will attach the > + * "panel orientation" property to the connector. > + * > + * Returns: > + * Zero on success, negative errno on failure. > + */ > +int drm_connector_init_panel_orientation_property_quirk( > + struct drm_connector *connector, int width, int height) > +{ > + int orientation_quirk; > + > + orientation_quirk = drm_get_panel_orientation_quirk(width, height); > + if (orientation_quirk != DRM_MODE_PANEL_ORIENTATION_UNKNOWN) > + connector->display_info.panel_orientation = orientation_quirk; > + > + return drm_connector_init_panel_orientation_property(connector); > +} > +EXPORT_SYMBOL(drm_connector_init_panel_orientation_property_quirk); > + > int drm_connector_set_obj_prop(struct drm_mode_object *obj, > struct drm_property *property, > uint64_t value) > diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c > index b099a9dc28fd..7d4e61cf5463 100644 > --- a/drivers/gpu/drm/i915/intel_dp.c > +++ b/drivers/gpu/drm/i915/intel_dp.c > @@ -7282,8 +7282,8 @@ static bool intel_edp_init_connector(struct intel_dp *intel_dp, > intel_panel_setup_backlight(connector, pipe); > > if (fixed_mode) > - drm_connector_init_panel_orientation_property( > - connector, fixed_mode->hdisplay, fixed_mode->vdisplay); > + drm_connector_init_panel_orientation_property_quirk(connector, > + fixed_mode->hdisplay, fixed_mode->vdisplay); > > return true; > > diff --git a/drivers/gpu/drm/i915/vlv_dsi.c b/drivers/gpu/drm/i915/vlv_dsi.c > index bfe2891eac37..fa9833dbe359 100644 > --- a/drivers/gpu/drm/i915/vlv_dsi.c > +++ b/drivers/gpu/drm/i915/vlv_dsi.c > @@ -1650,6 +1650,7 @@ static void intel_dsi_add_properties(struct intel_connector *connector) > > if (connector->panel.fixed_mode) { > u32 allowed_scalers; > + int orientation; > > allowed_scalers = BIT(DRM_MODE_SCALE_ASPECT) | BIT(DRM_MODE_SCALE_FULLSCREEN); > if (!HAS_GMCH(dev_priv)) > @@ -1660,9 +1661,7 @@ static void intel_dsi_add_properties(struct intel_connector *connector) > > connector->base.state->scaling_mode = DRM_MODE_SCALE_ASPECT; > > - connector->base.display_info.panel_orientation = > - vlv_dsi_get_panel_orientation(connector); Where did that go? > - drm_connector_init_panel_orientation_property( > + drm_connector_init_panel_orientation_property_quirk( > &connector->base, > connector->panel.fixed_mode->hdisplay, > connector->panel.fixed_mode->vdisplay); > diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h > index 47e749b74e5f..0468fd9a4418 100644 > --- a/include/drm/drm_connector.h > +++ b/include/drm/drm_connector.h > @@ -1370,6 +1370,8 @@ void drm_connector_set_link_status_property(struct drm_connector *connector, > void drm_connector_set_vrr_capable_property( > struct drm_connector *connector, bool capable); > int drm_connector_init_panel_orientation_property( > + struct drm_connector *connector); > +int drm_connector_init_panel_orientation_property_quirk( > struct drm_connector *connector, int width, int height); > int drm_connector_attach_max_bpc_property(struct drm_connector *connector, > int min, int max); > -- > 2.22.0.410.gd8fdbe21b5-goog > > _______________________________________________ > Intel-gfx mailing list > Intel-gfx@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/intel-gfx -- Ville Syrjälä Intel _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 36+ messages in thread
* Re: [Intel-gfx] [PATCH v3 3/4] drm/connector: Split out orientation quirk detection 2019-06-24 13:24 ` Ville Syrjälä (?) @ 2019-07-02 3:24 ` dbasehore . -1 siblings, 0 replies; 36+ messages in thread From: dbasehore . @ 2019-07-02 3:24 UTC (permalink / raw) To: Ville Syrjälä Cc: linux-kernel, Philipp Zabel, Maxime Ripard, Sam Ravnborg, Intel Graphics, David Airlie, Matthias Brugger, dri-devel, CK Hu, moderated list:ARM/Mediatek SoC support, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE On Mon, Jun 24, 2019 at 6:24 AM Ville Syrjälä <ville.syrjala@linux.intel.com> wrote: > > On Fri, Jun 21, 2019 at 08:41:04PM -0700, Derek Basehore wrote: > > Not every platform needs quirk detection for panel orientation, so > > split the drm_connector_init_panel_orientation_property into two > > functions. One for platforms without the need for quirks, and the > > other for platforms that need quirks. > > > > Signed-off-by: Derek Basehore <dbasehore@chromium.org> > > --- > > drivers/gpu/drm/drm_connector.c | 45 ++++++++++++++++++++++++--------- > > drivers/gpu/drm/i915/intel_dp.c | 4 +-- > > drivers/gpu/drm/i915/vlv_dsi.c | 5 ++-- > > include/drm/drm_connector.h | 2 ++ > > 4 files changed, 39 insertions(+), 17 deletions(-) > > > > diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c > > index e17586aaa80f..c4b01adf927a 100644 > > --- a/drivers/gpu/drm/drm_connector.c > > +++ b/drivers/gpu/drm/drm_connector.c > > @@ -1894,31 +1894,23 @@ EXPORT_SYMBOL(drm_connector_set_vrr_capable_property); > > * drm_connector_init_panel_orientation_property - > > * initialize the connecters panel_orientation property > > * @connector: connector for which to init the panel-orientation property. > > - * @width: width in pixels of the panel, used for panel quirk detection > > - * @height: height in pixels of the panel, used for panel quirk detection > > * > > * This function should only be called for built-in panels, after setting > > * connector->display_info.panel_orientation first (if known). > > * > > - * This function will check for platform specific (e.g. DMI based) quirks > > - * overriding display_info.panel_orientation first, then if panel_orientation > > - * is not DRM_MODE_PANEL_ORIENTATION_UNKNOWN it will attach the > > - * "panel orientation" property to the connector. > > + * This function will check if the panel_orientation is not > > + * DRM_MODE_PANEL_ORIENTATION_UNKNOWN. If not, it will attach the "panel > > + * orientation" property to the connector. > > * > > * Returns: > > * Zero on success, negative errno on failure. > > */ > > int drm_connector_init_panel_orientation_property( > > - struct drm_connector *connector, int width, int height) > > + struct drm_connector *connector) > > { > > struct drm_device *dev = connector->dev; > > struct drm_display_info *info = &connector->display_info; > > struct drm_property *prop; > > - int orientation_quirk; > > - > > - orientation_quirk = drm_get_panel_orientation_quirk(width, height); > > - if (orientation_quirk != DRM_MODE_PANEL_ORIENTATION_UNKNOWN) > > - info->panel_orientation = orientation_quirk; > > > > if (info->panel_orientation == DRM_MODE_PANEL_ORIENTATION_UNKNOWN) > > return 0; > > @@ -1941,6 +1933,35 @@ int drm_connector_init_panel_orientation_property( > > } > > EXPORT_SYMBOL(drm_connector_init_panel_orientation_property); > > > > +/** > > + * drm_connector_init_panel_orientation_property_quirk - > > + * initialize the connecters panel_orientation property with a quirk > > + * override > > + * @connector: connector for which to init the panel-orientation property. > > + * @width: width in pixels of the panel, used for panel quirk detection > > + * @height: height in pixels of the panel, used for panel quirk detection > > + * > > + * This function will check for platform specific (e.g. DMI based) quirks > > + * overriding display_info.panel_orientation first, then if panel_orientation > > + * is not DRM_MODE_PANEL_ORIENTATION_UNKNOWN it will attach the > > + * "panel orientation" property to the connector. > > + * > > + * Returns: > > + * Zero on success, negative errno on failure. > > + */ > > +int drm_connector_init_panel_orientation_property_quirk( > > + struct drm_connector *connector, int width, int height) > > +{ > > + int orientation_quirk; > > + > > + orientation_quirk = drm_get_panel_orientation_quirk(width, height); > > + if (orientation_quirk != DRM_MODE_PANEL_ORIENTATION_UNKNOWN) > > + connector->display_info.panel_orientation = orientation_quirk; > > + > > + return drm_connector_init_panel_orientation_property(connector); > > +} > > +EXPORT_SYMBOL(drm_connector_init_panel_orientation_property_quirk); > > + > > int drm_connector_set_obj_prop(struct drm_mode_object *obj, > > struct drm_property *property, > > uint64_t value) > > diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c > > index b099a9dc28fd..7d4e61cf5463 100644 > > --- a/drivers/gpu/drm/i915/intel_dp.c > > +++ b/drivers/gpu/drm/i915/intel_dp.c > > @@ -7282,8 +7282,8 @@ static bool intel_edp_init_connector(struct intel_dp *intel_dp, > > intel_panel_setup_backlight(connector, pipe); > > > > if (fixed_mode) > > - drm_connector_init_panel_orientation_property( > > - connector, fixed_mode->hdisplay, fixed_mode->vdisplay); > > + drm_connector_init_panel_orientation_property_quirk(connector, > > + fixed_mode->hdisplay, fixed_mode->vdisplay); > > > > return true; > > > > diff --git a/drivers/gpu/drm/i915/vlv_dsi.c b/drivers/gpu/drm/i915/vlv_dsi.c > > index bfe2891eac37..fa9833dbe359 100644 > > --- a/drivers/gpu/drm/i915/vlv_dsi.c > > +++ b/drivers/gpu/drm/i915/vlv_dsi.c > > @@ -1650,6 +1650,7 @@ static void intel_dsi_add_properties(struct intel_connector *connector) > > > > if (connector->panel.fixed_mode) { > > u32 allowed_scalers; > > + int orientation; > > > > allowed_scalers = BIT(DRM_MODE_SCALE_ASPECT) | BIT(DRM_MODE_SCALE_FULLSCREEN); > > if (!HAS_GMCH(dev_priv)) > > @@ -1660,9 +1661,7 @@ static void intel_dsi_add_properties(struct intel_connector *connector) > > > > connector->base.state->scaling_mode = DRM_MODE_SCALE_ASPECT; > > > > - connector->base.display_info.panel_orientation = > > - vlv_dsi_get_panel_orientation(connector); > > Where did that go? Oops. Nice catch. > > > - drm_connector_init_panel_orientation_property( > > + drm_connector_init_panel_orientation_property_quirk( > > &connector->base, > > connector->panel.fixed_mode->hdisplay, > > connector->panel.fixed_mode->vdisplay); > > diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h > > index 47e749b74e5f..0468fd9a4418 100644 > > --- a/include/drm/drm_connector.h > > +++ b/include/drm/drm_connector.h > > @@ -1370,6 +1370,8 @@ void drm_connector_set_link_status_property(struct drm_connector *connector, > > void drm_connector_set_vrr_capable_property( > > struct drm_connector *connector, bool capable); > > int drm_connector_init_panel_orientation_property( > > + struct drm_connector *connector); > > +int drm_connector_init_panel_orientation_property_quirk( > > struct drm_connector *connector, int width, int height); > > int drm_connector_attach_max_bpc_property(struct drm_connector *connector, > > int min, int max); > > -- > > 2.22.0.410.gd8fdbe21b5-goog > > > > _______________________________________________ > > Intel-gfx mailing list > > Intel-gfx@lists.freedesktop.org > > https://lists.freedesktop.org/mailman/listinfo/intel-gfx > > -- > Ville Syrjälä > Intel Thanks for the review ^ permalink raw reply [flat|nested] 36+ messages in thread
* Re: [Intel-gfx] [PATCH v3 3/4] drm/connector: Split out orientation quirk detection @ 2019-07-02 3:24 ` dbasehore . 0 siblings, 0 replies; 36+ messages in thread From: dbasehore . @ 2019-07-02 3:24 UTC (permalink / raw) To: Ville Syrjälä Cc: Maxime Ripard, Intel Graphics, linux-kernel, dri-devel, David Airlie, CK Hu, moderated list:ARM/Mediatek SoC support, Philipp Zabel, Matthias Brugger, Sam Ravnborg, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE On Mon, Jun 24, 2019 at 6:24 AM Ville Syrjälä <ville.syrjala@linux.intel.com> wrote: > > On Fri, Jun 21, 2019 at 08:41:04PM -0700, Derek Basehore wrote: > > Not every platform needs quirk detection for panel orientation, so > > split the drm_connector_init_panel_orientation_property into two > > functions. One for platforms without the need for quirks, and the > > other for platforms that need quirks. > > > > Signed-off-by: Derek Basehore <dbasehore@chromium.org> > > --- > > drivers/gpu/drm/drm_connector.c | 45 ++++++++++++++++++++++++--------- > > drivers/gpu/drm/i915/intel_dp.c | 4 +-- > > drivers/gpu/drm/i915/vlv_dsi.c | 5 ++-- > > include/drm/drm_connector.h | 2 ++ > > 4 files changed, 39 insertions(+), 17 deletions(-) > > > > diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c > > index e17586aaa80f..c4b01adf927a 100644 > > --- a/drivers/gpu/drm/drm_connector.c > > +++ b/drivers/gpu/drm/drm_connector.c > > @@ -1894,31 +1894,23 @@ EXPORT_SYMBOL(drm_connector_set_vrr_capable_property); > > * drm_connector_init_panel_orientation_property - > > * initialize the connecters panel_orientation property > > * @connector: connector for which to init the panel-orientation property. > > - * @width: width in pixels of the panel, used for panel quirk detection > > - * @height: height in pixels of the panel, used for panel quirk detection > > * > > * This function should only be called for built-in panels, after setting > > * connector->display_info.panel_orientation first (if known). > > * > > - * This function will check for platform specific (e.g. DMI based) quirks > > - * overriding display_info.panel_orientation first, then if panel_orientation > > - * is not DRM_MODE_PANEL_ORIENTATION_UNKNOWN it will attach the > > - * "panel orientation" property to the connector. > > + * This function will check if the panel_orientation is not > > + * DRM_MODE_PANEL_ORIENTATION_UNKNOWN. If not, it will attach the "panel > > + * orientation" property to the connector. > > * > > * Returns: > > * Zero on success, negative errno on failure. > > */ > > int drm_connector_init_panel_orientation_property( > > - struct drm_connector *connector, int width, int height) > > + struct drm_connector *connector) > > { > > struct drm_device *dev = connector->dev; > > struct drm_display_info *info = &connector->display_info; > > struct drm_property *prop; > > - int orientation_quirk; > > - > > - orientation_quirk = drm_get_panel_orientation_quirk(width, height); > > - if (orientation_quirk != DRM_MODE_PANEL_ORIENTATION_UNKNOWN) > > - info->panel_orientation = orientation_quirk; > > > > if (info->panel_orientation == DRM_MODE_PANEL_ORIENTATION_UNKNOWN) > > return 0; > > @@ -1941,6 +1933,35 @@ int drm_connector_init_panel_orientation_property( > > } > > EXPORT_SYMBOL(drm_connector_init_panel_orientation_property); > > > > +/** > > + * drm_connector_init_panel_orientation_property_quirk - > > + * initialize the connecters panel_orientation property with a quirk > > + * override > > + * @connector: connector for which to init the panel-orientation property. > > + * @width: width in pixels of the panel, used for panel quirk detection > > + * @height: height in pixels of the panel, used for panel quirk detection > > + * > > + * This function will check for platform specific (e.g. DMI based) quirks > > + * overriding display_info.panel_orientation first, then if panel_orientation > > + * is not DRM_MODE_PANEL_ORIENTATION_UNKNOWN it will attach the > > + * "panel orientation" property to the connector. > > + * > > + * Returns: > > + * Zero on success, negative errno on failure. > > + */ > > +int drm_connector_init_panel_orientation_property_quirk( > > + struct drm_connector *connector, int width, int height) > > +{ > > + int orientation_quirk; > > + > > + orientation_quirk = drm_get_panel_orientation_quirk(width, height); > > + if (orientation_quirk != DRM_MODE_PANEL_ORIENTATION_UNKNOWN) > > + connector->display_info.panel_orientation = orientation_quirk; > > + > > + return drm_connector_init_panel_orientation_property(connector); > > +} > > +EXPORT_SYMBOL(drm_connector_init_panel_orientation_property_quirk); > > + > > int drm_connector_set_obj_prop(struct drm_mode_object *obj, > > struct drm_property *property, > > uint64_t value) > > diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c > > index b099a9dc28fd..7d4e61cf5463 100644 > > --- a/drivers/gpu/drm/i915/intel_dp.c > > +++ b/drivers/gpu/drm/i915/intel_dp.c > > @@ -7282,8 +7282,8 @@ static bool intel_edp_init_connector(struct intel_dp *intel_dp, > > intel_panel_setup_backlight(connector, pipe); > > > > if (fixed_mode) > > - drm_connector_init_panel_orientation_property( > > - connector, fixed_mode->hdisplay, fixed_mode->vdisplay); > > + drm_connector_init_panel_orientation_property_quirk(connector, > > + fixed_mode->hdisplay, fixed_mode->vdisplay); > > > > return true; > > > > diff --git a/drivers/gpu/drm/i915/vlv_dsi.c b/drivers/gpu/drm/i915/vlv_dsi.c > > index bfe2891eac37..fa9833dbe359 100644 > > --- a/drivers/gpu/drm/i915/vlv_dsi.c > > +++ b/drivers/gpu/drm/i915/vlv_dsi.c > > @@ -1650,6 +1650,7 @@ static void intel_dsi_add_properties(struct intel_connector *connector) > > > > if (connector->panel.fixed_mode) { > > u32 allowed_scalers; > > + int orientation; > > > > allowed_scalers = BIT(DRM_MODE_SCALE_ASPECT) | BIT(DRM_MODE_SCALE_FULLSCREEN); > > if (!HAS_GMCH(dev_priv)) > > @@ -1660,9 +1661,7 @@ static void intel_dsi_add_properties(struct intel_connector *connector) > > > > connector->base.state->scaling_mode = DRM_MODE_SCALE_ASPECT; > > > > - connector->base.display_info.panel_orientation = > > - vlv_dsi_get_panel_orientation(connector); > > Where did that go? Oops. Nice catch. > > > - drm_connector_init_panel_orientation_property( > > + drm_connector_init_panel_orientation_property_quirk( > > &connector->base, > > connector->panel.fixed_mode->hdisplay, > > connector->panel.fixed_mode->vdisplay); > > diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h > > index 47e749b74e5f..0468fd9a4418 100644 > > --- a/include/drm/drm_connector.h > > +++ b/include/drm/drm_connector.h > > @@ -1370,6 +1370,8 @@ void drm_connector_set_link_status_property(struct drm_connector *connector, > > void drm_connector_set_vrr_capable_property( > > struct drm_connector *connector, bool capable); > > int drm_connector_init_panel_orientation_property( > > + struct drm_connector *connector); > > +int drm_connector_init_panel_orientation_property_quirk( > > struct drm_connector *connector, int width, int height); > > int drm_connector_attach_max_bpc_property(struct drm_connector *connector, > > int min, int max); > > -- > > 2.22.0.410.gd8fdbe21b5-goog > > > > _______________________________________________ > > Intel-gfx mailing list > > Intel-gfx@lists.freedesktop.org > > https://lists.freedesktop.org/mailman/listinfo/intel-gfx > > -- > Ville Syrjälä > Intel Thanks for the review _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 36+ messages in thread
* Re: [Intel-gfx] [PATCH v3 3/4] drm/connector: Split out orientation quirk detection @ 2019-07-02 3:24 ` dbasehore . 0 siblings, 0 replies; 36+ messages in thread From: dbasehore . @ 2019-07-02 3:24 UTC (permalink / raw) To: Ville Syrjälä Cc: linux-kernel, Philipp Zabel, Maxime Ripard, Sam Ravnborg, Intel Graphics, David Airlie, Matthias Brugger, dri-devel, CK Hu, moderated list:ARM/Mediatek SoC support, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE On Mon, Jun 24, 2019 at 6:24 AM Ville Syrjälä <ville.syrjala@linux.intel.com> wrote: > > On Fri, Jun 21, 2019 at 08:41:04PM -0700, Derek Basehore wrote: > > Not every platform needs quirk detection for panel orientation, so > > split the drm_connector_init_panel_orientation_property into two > > functions. One for platforms without the need for quirks, and the > > other for platforms that need quirks. > > > > Signed-off-by: Derek Basehore <dbasehore@chromium.org> > > --- > > drivers/gpu/drm/drm_connector.c | 45 ++++++++++++++++++++++++--------- > > drivers/gpu/drm/i915/intel_dp.c | 4 +-- > > drivers/gpu/drm/i915/vlv_dsi.c | 5 ++-- > > include/drm/drm_connector.h | 2 ++ > > 4 files changed, 39 insertions(+), 17 deletions(-) > > > > diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c > > index e17586aaa80f..c4b01adf927a 100644 > > --- a/drivers/gpu/drm/drm_connector.c > > +++ b/drivers/gpu/drm/drm_connector.c > > @@ -1894,31 +1894,23 @@ EXPORT_SYMBOL(drm_connector_set_vrr_capable_property); > > * drm_connector_init_panel_orientation_property - > > * initialize the connecters panel_orientation property > > * @connector: connector for which to init the panel-orientation property. > > - * @width: width in pixels of the panel, used for panel quirk detection > > - * @height: height in pixels of the panel, used for panel quirk detection > > * > > * This function should only be called for built-in panels, after setting > > * connector->display_info.panel_orientation first (if known). > > * > > - * This function will check for platform specific (e.g. DMI based) quirks > > - * overriding display_info.panel_orientation first, then if panel_orientation > > - * is not DRM_MODE_PANEL_ORIENTATION_UNKNOWN it will attach the > > - * "panel orientation" property to the connector. > > + * This function will check if the panel_orientation is not > > + * DRM_MODE_PANEL_ORIENTATION_UNKNOWN. If not, it will attach the "panel > > + * orientation" property to the connector. > > * > > * Returns: > > * Zero on success, negative errno on failure. > > */ > > int drm_connector_init_panel_orientation_property( > > - struct drm_connector *connector, int width, int height) > > + struct drm_connector *connector) > > { > > struct drm_device *dev = connector->dev; > > struct drm_display_info *info = &connector->display_info; > > struct drm_property *prop; > > - int orientation_quirk; > > - > > - orientation_quirk = drm_get_panel_orientation_quirk(width, height); > > - if (orientation_quirk != DRM_MODE_PANEL_ORIENTATION_UNKNOWN) > > - info->panel_orientation = orientation_quirk; > > > > if (info->panel_orientation == DRM_MODE_PANEL_ORIENTATION_UNKNOWN) > > return 0; > > @@ -1941,6 +1933,35 @@ int drm_connector_init_panel_orientation_property( > > } > > EXPORT_SYMBOL(drm_connector_init_panel_orientation_property); > > > > +/** > > + * drm_connector_init_panel_orientation_property_quirk - > > + * initialize the connecters panel_orientation property with a quirk > > + * override > > + * @connector: connector for which to init the panel-orientation property. > > + * @width: width in pixels of the panel, used for panel quirk detection > > + * @height: height in pixels of the panel, used for panel quirk detection > > + * > > + * This function will check for platform specific (e.g. DMI based) quirks > > + * overriding display_info.panel_orientation first, then if panel_orientation > > + * is not DRM_MODE_PANEL_ORIENTATION_UNKNOWN it will attach the > > + * "panel orientation" property to the connector. > > + * > > + * Returns: > > + * Zero on success, negative errno on failure. > > + */ > > +int drm_connector_init_panel_orientation_property_quirk( > > + struct drm_connector *connector, int width, int height) > > +{ > > + int orientation_quirk; > > + > > + orientation_quirk = drm_get_panel_orientation_quirk(width, height); > > + if (orientation_quirk != DRM_MODE_PANEL_ORIENTATION_UNKNOWN) > > + connector->display_info.panel_orientation = orientation_quirk; > > + > > + return drm_connector_init_panel_orientation_property(connector); > > +} > > +EXPORT_SYMBOL(drm_connector_init_panel_orientation_property_quirk); > > + > > int drm_connector_set_obj_prop(struct drm_mode_object *obj, > > struct drm_property *property, > > uint64_t value) > > diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c > > index b099a9dc28fd..7d4e61cf5463 100644 > > --- a/drivers/gpu/drm/i915/intel_dp.c > > +++ b/drivers/gpu/drm/i915/intel_dp.c > > @@ -7282,8 +7282,8 @@ static bool intel_edp_init_connector(struct intel_dp *intel_dp, > > intel_panel_setup_backlight(connector, pipe); > > > > if (fixed_mode) > > - drm_connector_init_panel_orientation_property( > > - connector, fixed_mode->hdisplay, fixed_mode->vdisplay); > > + drm_connector_init_panel_orientation_property_quirk(connector, > > + fixed_mode->hdisplay, fixed_mode->vdisplay); > > > > return true; > > > > diff --git a/drivers/gpu/drm/i915/vlv_dsi.c b/drivers/gpu/drm/i915/vlv_dsi.c > > index bfe2891eac37..fa9833dbe359 100644 > > --- a/drivers/gpu/drm/i915/vlv_dsi.c > > +++ b/drivers/gpu/drm/i915/vlv_dsi.c > > @@ -1650,6 +1650,7 @@ static void intel_dsi_add_properties(struct intel_connector *connector) > > > > if (connector->panel.fixed_mode) { > > u32 allowed_scalers; > > + int orientation; > > > > allowed_scalers = BIT(DRM_MODE_SCALE_ASPECT) | BIT(DRM_MODE_SCALE_FULLSCREEN); > > if (!HAS_GMCH(dev_priv)) > > @@ -1660,9 +1661,7 @@ static void intel_dsi_add_properties(struct intel_connector *connector) > > > > connector->base.state->scaling_mode = DRM_MODE_SCALE_ASPECT; > > > > - connector->base.display_info.panel_orientation = > > - vlv_dsi_get_panel_orientation(connector); > > Where did that go? Oops. Nice catch. > > > - drm_connector_init_panel_orientation_property( > > + drm_connector_init_panel_orientation_property_quirk( > > &connector->base, > > connector->panel.fixed_mode->hdisplay, > > connector->panel.fixed_mode->vdisplay); > > diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h > > index 47e749b74e5f..0468fd9a4418 100644 > > --- a/include/drm/drm_connector.h > > +++ b/include/drm/drm_connector.h > > @@ -1370,6 +1370,8 @@ void drm_connector_set_link_status_property(struct drm_connector *connector, > > void drm_connector_set_vrr_capable_property( > > struct drm_connector *connector, bool capable); > > int drm_connector_init_panel_orientation_property( > > + struct drm_connector *connector); > > +int drm_connector_init_panel_orientation_property_quirk( > > struct drm_connector *connector, int width, int height); > > int drm_connector_attach_max_bpc_property(struct drm_connector *connector, > > int min, int max); > > -- > > 2.22.0.410.gd8fdbe21b5-goog > > > > _______________________________________________ > > Intel-gfx mailing list > > Intel-gfx@lists.freedesktop.org > > https://lists.freedesktop.org/mailman/listinfo/intel-gfx > > -- > Ville Syrjälä > Intel Thanks for the review ^ permalink raw reply [flat|nested] 36+ messages in thread
* [PATCH v4 4/4] drm/mtk: add panel orientation property 2019-06-22 3:41 ` Derek Basehore (?) @ 2019-06-22 3:41 ` Derek Basehore -1 siblings, 0 replies; 36+ messages in thread From: Derek Basehore @ 2019-06-22 3:41 UTC (permalink / raw) To: linux-kernel Cc: Maarten Lankhorst, Maxime Ripard, Sean Paul, David Airlie, Daniel Vetter, Thierry Reding, Sam Ravnborg, Jani Nikula, Joonas Lahtinen, Rodrigo Vivi, CK Hu, Philipp Zabel, Matthias Brugger, dri-devel, intel-gfx, linux-arm-kernel, linux-mediatek, Derek Basehore This inits the panel orientation property for the mediatek dsi driver if the panel orientation (connector.display_info.panel_orientation) is not DRM_MODE_PANEL_ORIENTATION_UNKNOWN. Signed-off-by: Derek Basehore <dbasehore@chromium.org> --- drivers/gpu/drm/mediatek/mtk_dsi.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/drivers/gpu/drm/mediatek/mtk_dsi.c b/drivers/gpu/drm/mediatek/mtk_dsi.c index 4a0b9150a7bb..08ffdc7526dd 100644 --- a/drivers/gpu/drm/mediatek/mtk_dsi.c +++ b/drivers/gpu/drm/mediatek/mtk_dsi.c @@ -782,10 +782,18 @@ static int mtk_dsi_create_connector(struct drm_device *drm, struct mtk_dsi *dsi) DRM_ERROR("Failed to attach panel to drm\n"); goto err_connector_cleanup; } + + ret = drm_connector_init_panel_orientation_property(&dsi->conn); + if (ret) { + DRM_ERROR("Failed to init panel orientation\n"); + goto err_panel_detach; + } } return 0; +err_panel_detach: + drm_panel_detach(dsi->panel); err_connector_cleanup: drm_connector_cleanup(&dsi->conn); return ret; -- 2.22.0.410.gd8fdbe21b5-goog ^ permalink raw reply related [flat|nested] 36+ messages in thread
* [PATCH v4 4/4] drm/mtk: add panel orientation property @ 2019-06-22 3:41 ` Derek Basehore 0 siblings, 0 replies; 36+ messages in thread From: Derek Basehore @ 2019-06-22 3:41 UTC (permalink / raw) To: linux-kernel Cc: Derek Basehore, Philipp Zabel, Maxime Ripard, Sam Ravnborg, intel-gfx, Joonas Lahtinen, Maarten Lankhorst, Jani Nikula, David Airlie, Thierry Reding, Matthias Brugger, dri-devel, Daniel Vetter, Rodrigo Vivi, CK Hu, linux-mediatek, Sean Paul, linux-arm-kernel This inits the panel orientation property for the mediatek dsi driver if the panel orientation (connector.display_info.panel_orientation) is not DRM_MODE_PANEL_ORIENTATION_UNKNOWN. Signed-off-by: Derek Basehore <dbasehore@chromium.org> --- drivers/gpu/drm/mediatek/mtk_dsi.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/drivers/gpu/drm/mediatek/mtk_dsi.c b/drivers/gpu/drm/mediatek/mtk_dsi.c index 4a0b9150a7bb..08ffdc7526dd 100644 --- a/drivers/gpu/drm/mediatek/mtk_dsi.c +++ b/drivers/gpu/drm/mediatek/mtk_dsi.c @@ -782,10 +782,18 @@ static int mtk_dsi_create_connector(struct drm_device *drm, struct mtk_dsi *dsi) DRM_ERROR("Failed to attach panel to drm\n"); goto err_connector_cleanup; } + + ret = drm_connector_init_panel_orientation_property(&dsi->conn); + if (ret) { + DRM_ERROR("Failed to init panel orientation\n"); + goto err_panel_detach; + } } return 0; +err_panel_detach: + drm_panel_detach(dsi->panel); err_connector_cleanup: drm_connector_cleanup(&dsi->conn); return ret; -- 2.22.0.410.gd8fdbe21b5-goog _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply related [flat|nested] 36+ messages in thread
* [PATCH v4 4/4] drm/mtk: add panel orientation property @ 2019-06-22 3:41 ` Derek Basehore 0 siblings, 0 replies; 36+ messages in thread From: Derek Basehore @ 2019-06-22 3:41 UTC (permalink / raw) To: linux-kernel Cc: Derek Basehore, Philipp Zabel, Maxime Ripard, Sam Ravnborg, intel-gfx, David Airlie, Matthias Brugger, dri-devel, CK Hu, linux-mediatek, linux-arm-kernel This inits the panel orientation property for the mediatek dsi driver if the panel orientation (connector.display_info.panel_orientation) is not DRM_MODE_PANEL_ORIENTATION_UNKNOWN. Signed-off-by: Derek Basehore <dbasehore@chromium.org> --- drivers/gpu/drm/mediatek/mtk_dsi.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/drivers/gpu/drm/mediatek/mtk_dsi.c b/drivers/gpu/drm/mediatek/mtk_dsi.c index 4a0b9150a7bb..08ffdc7526dd 100644 --- a/drivers/gpu/drm/mediatek/mtk_dsi.c +++ b/drivers/gpu/drm/mediatek/mtk_dsi.c @@ -782,10 +782,18 @@ static int mtk_dsi_create_connector(struct drm_device *drm, struct mtk_dsi *dsi) DRM_ERROR("Failed to attach panel to drm\n"); goto err_connector_cleanup; } + + ret = drm_connector_init_panel_orientation_property(&dsi->conn); + if (ret) { + DRM_ERROR("Failed to init panel orientation\n"); + goto err_panel_detach; + } } return 0; +err_panel_detach: + drm_panel_detach(dsi->panel); err_connector_cleanup: drm_connector_cleanup(&dsi->conn); return ret; -- 2.22.0.410.gd8fdbe21b5-goog _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply related [flat|nested] 36+ messages in thread
* Re: [PATCH v4 4/4] drm/mtk: add panel orientation property 2019-06-22 3:41 ` Derek Basehore (?) @ 2019-07-01 1:59 ` CK Hu -1 siblings, 0 replies; 36+ messages in thread From: CK Hu @ 2019-07-01 1:59 UTC (permalink / raw) To: Derek Basehore Cc: linux-kernel, Philipp Zabel, Maxime Ripard, Sam Ravnborg, intel-gfx, Joonas Lahtinen, Maarten Lankhorst, Jani Nikula, David Airlie, Thierry Reding, Matthias Brugger, dri-devel, Daniel Vetter, Rodrigo Vivi, linux-mediatek, Sean Paul, linux-arm-kernel Hi, Derek: On Fri, 2019-06-21 at 20:41 -0700, Derek Basehore wrote: > This inits the panel orientation property for the mediatek dsi driver > if the panel orientation (connector.display_info.panel_orientation) is > not DRM_MODE_PANEL_ORIENTATION_UNKNOWN. > Reviewed-by: CK Hu <ck.hu@mediatek.com> > Signed-off-by: Derek Basehore <dbasehore@chromium.org> > --- > drivers/gpu/drm/mediatek/mtk_dsi.c | 8 ++++++++ > 1 file changed, 8 insertions(+) > > diff --git a/drivers/gpu/drm/mediatek/mtk_dsi.c b/drivers/gpu/drm/mediatek/mtk_dsi.c > index 4a0b9150a7bb..08ffdc7526dd 100644 > --- a/drivers/gpu/drm/mediatek/mtk_dsi.c > +++ b/drivers/gpu/drm/mediatek/mtk_dsi.c > @@ -782,10 +782,18 @@ static int mtk_dsi_create_connector(struct drm_device *drm, struct mtk_dsi *dsi) > DRM_ERROR("Failed to attach panel to drm\n"); > goto err_connector_cleanup; > } > + > + ret = drm_connector_init_panel_orientation_property(&dsi->conn); > + if (ret) { > + DRM_ERROR("Failed to init panel orientation\n"); > + goto err_panel_detach; > + } > } > > return 0; > > +err_panel_detach: > + drm_panel_detach(dsi->panel); > err_connector_cleanup: > drm_connector_cleanup(&dsi->conn); > return ret; ^ permalink raw reply [flat|nested] 36+ messages in thread
* Re: [PATCH v4 4/4] drm/mtk: add panel orientation property @ 2019-07-01 1:59 ` CK Hu 0 siblings, 0 replies; 36+ messages in thread From: CK Hu @ 2019-07-01 1:59 UTC (permalink / raw) To: Derek Basehore Cc: Daniel Vetter, Maxime Ripard, Sean Paul, intel-gfx, Joonas Lahtinen, Maarten Lankhorst, linux-kernel, Jani Nikula, David Airlie, Thierry Reding, linux-mediatek, dri-devel, Philipp Zabel, Rodrigo Vivi, Matthias Brugger, Sam Ravnborg, linux-arm-kernel Hi, Derek: On Fri, 2019-06-21 at 20:41 -0700, Derek Basehore wrote: > This inits the panel orientation property for the mediatek dsi driver > if the panel orientation (connector.display_info.panel_orientation) is > not DRM_MODE_PANEL_ORIENTATION_UNKNOWN. > Reviewed-by: CK Hu <ck.hu@mediatek.com> > Signed-off-by: Derek Basehore <dbasehore@chromium.org> > --- > drivers/gpu/drm/mediatek/mtk_dsi.c | 8 ++++++++ > 1 file changed, 8 insertions(+) > > diff --git a/drivers/gpu/drm/mediatek/mtk_dsi.c b/drivers/gpu/drm/mediatek/mtk_dsi.c > index 4a0b9150a7bb..08ffdc7526dd 100644 > --- a/drivers/gpu/drm/mediatek/mtk_dsi.c > +++ b/drivers/gpu/drm/mediatek/mtk_dsi.c > @@ -782,10 +782,18 @@ static int mtk_dsi_create_connector(struct drm_device *drm, struct mtk_dsi *dsi) > DRM_ERROR("Failed to attach panel to drm\n"); > goto err_connector_cleanup; > } > + > + ret = drm_connector_init_panel_orientation_property(&dsi->conn); > + if (ret) { > + DRM_ERROR("Failed to init panel orientation\n"); > + goto err_panel_detach; > + } > } > > return 0; > > +err_panel_detach: > + drm_panel_detach(dsi->panel); > err_connector_cleanup: > drm_connector_cleanup(&dsi->conn); > return ret; _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 36+ messages in thread
* Re: [PATCH v4 4/4] drm/mtk: add panel orientation property @ 2019-07-01 1:59 ` CK Hu 0 siblings, 0 replies; 36+ messages in thread From: CK Hu @ 2019-07-01 1:59 UTC (permalink / raw) To: Derek Basehore Cc: Maxime Ripard, intel-gfx, linux-kernel, David Airlie, linux-mediatek, dri-devel, Philipp Zabel, Matthias Brugger, Sam Ravnborg, linux-arm-kernel Hi, Derek: On Fri, 2019-06-21 at 20:41 -0700, Derek Basehore wrote: > This inits the panel orientation property for the mediatek dsi driver > if the panel orientation (connector.display_info.panel_orientation) is > not DRM_MODE_PANEL_ORIENTATION_UNKNOWN. > Reviewed-by: CK Hu <ck.hu@mediatek.com> > Signed-off-by: Derek Basehore <dbasehore@chromium.org> > --- > drivers/gpu/drm/mediatek/mtk_dsi.c | 8 ++++++++ > 1 file changed, 8 insertions(+) > > diff --git a/drivers/gpu/drm/mediatek/mtk_dsi.c b/drivers/gpu/drm/mediatek/mtk_dsi.c > index 4a0b9150a7bb..08ffdc7526dd 100644 > --- a/drivers/gpu/drm/mediatek/mtk_dsi.c > +++ b/drivers/gpu/drm/mediatek/mtk_dsi.c > @@ -782,10 +782,18 @@ static int mtk_dsi_create_connector(struct drm_device *drm, struct mtk_dsi *dsi) > DRM_ERROR("Failed to attach panel to drm\n"); > goto err_connector_cleanup; > } > + > + ret = drm_connector_init_panel_orientation_property(&dsi->conn); > + if (ret) { > + DRM_ERROR("Failed to init panel orientation\n"); > + goto err_panel_detach; > + } > } > > return 0; > > +err_panel_detach: > + drm_panel_detach(dsi->panel); > err_connector_cleanup: > drm_connector_cleanup(&dsi->conn); > return ret; _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply [flat|nested] 36+ messages in thread
* [PATCH v4 0/4] Panel rotation patches @ 2019-07-02 23:42 Derek Basehore 2019-07-02 23:42 ` Derek Basehore 0 siblings, 1 reply; 36+ messages in thread From: Derek Basehore @ 2019-07-02 23:42 UTC (permalink / raw) To: linux-kernel Cc: Maarten Lankhorst, Maxime Ripard, Sean Paul, David Airlie, Daniel Vetter, Thierry Reding, Sam Ravnborg, Jani Nikula, Joonas Lahtinen, Rodrigo Vivi, CK Hu, Philipp Zabel, Matthias Brugger, dri-devel, intel-gfx, linux-arm-kernel, linux-mediatek, Derek Basehore This adds the plumbing for reading panel rotation from the devicetree and sets up adding a panel property for the panel orientation on Mediatek SoCs when a rotation is present. v4 changes: -fixed some changes made to the i915 driver -clarified comments on of orientation helper v3 changes: -changed from attach/detach callbacks to directly setting fixed panel values in drm_panel_attach -removed update to Documentation -added separate function for quirked panel orientation property init v2 changes: fixed build errors in i915 Derek Basehore (4): drm/panel: Add helper for reading DT rotation drm/panel: set display info in panel attach drm/connector: Split out orientation quirk detection drm/mtk: add panel orientation property drivers/gpu/drm/drm_connector.c | 45 ++++++++++++++----- drivers/gpu/drm/drm_panel.c | 70 ++++++++++++++++++++++++++++++ drivers/gpu/drm/i915/intel_dp.c | 4 +- drivers/gpu/drm/i915/vlv_dsi.c | 5 +-- drivers/gpu/drm/mediatek/mtk_dsi.c | 8 ++++ include/drm/drm_connector.h | 2 + include/drm/drm_panel.h | 21 +++++++++ 7 files changed, 138 insertions(+), 17 deletions(-) -- 2.22.0.410.gd8fdbe21b5-goog ^ permalink raw reply [flat|nested] 36+ messages in thread
* [PATCH v4 4/4] drm/mtk: add panel orientation property 2019-07-02 23:42 [PATCH v4 0/4] Panel rotation patches Derek Basehore 2019-07-02 23:42 ` Derek Basehore @ 2019-07-02 23:42 ` Derek Basehore 0 siblings, 0 replies; 36+ messages in thread From: Derek Basehore @ 2019-07-02 23:42 UTC (permalink / raw) To: linux-kernel Cc: Maarten Lankhorst, Maxime Ripard, Sean Paul, David Airlie, Daniel Vetter, Thierry Reding, Sam Ravnborg, Jani Nikula, Joonas Lahtinen, Rodrigo Vivi, CK Hu, Philipp Zabel, Matthias Brugger, dri-devel, intel-gfx, linux-arm-kernel, linux-mediatek, Derek Basehore This inits the panel orientation property for the mediatek dsi driver if the panel orientation (connector.display_info.panel_orientation) is not DRM_MODE_PANEL_ORIENTATION_UNKNOWN. Signed-off-by: Derek Basehore <dbasehore@chromium.org> --- drivers/gpu/drm/mediatek/mtk_dsi.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/drivers/gpu/drm/mediatek/mtk_dsi.c b/drivers/gpu/drm/mediatek/mtk_dsi.c index 4a0b9150a7bb..08ffdc7526dd 100644 --- a/drivers/gpu/drm/mediatek/mtk_dsi.c +++ b/drivers/gpu/drm/mediatek/mtk_dsi.c @@ -782,10 +782,18 @@ static int mtk_dsi_create_connector(struct drm_device *drm, struct mtk_dsi *dsi) DRM_ERROR("Failed to attach panel to drm\n"); goto err_connector_cleanup; } + + ret = drm_connector_init_panel_orientation_property(&dsi->conn); + if (ret) { + DRM_ERROR("Failed to init panel orientation\n"); + goto err_panel_detach; + } } return 0; +err_panel_detach: + drm_panel_detach(dsi->panel); err_connector_cleanup: drm_connector_cleanup(&dsi->conn); return ret; -- 2.22.0.410.gd8fdbe21b5-goog ^ permalink raw reply related [flat|nested] 36+ messages in thread
* [PATCH v4 4/4] drm/mtk: add panel orientation property @ 2019-07-02 23:42 ` Derek Basehore 0 siblings, 0 replies; 36+ messages in thread From: Derek Basehore @ 2019-07-02 23:42 UTC (permalink / raw) To: linux-kernel Cc: Derek Basehore, Philipp Zabel, Maxime Ripard, Sam Ravnborg, intel-gfx, Joonas Lahtinen, Maarten Lankhorst, Jani Nikula, David Airlie, Thierry Reding, Matthias Brugger, dri-devel, Daniel Vetter, Rodrigo Vivi, CK Hu, linux-mediatek, Sean Paul, linux-arm-kernel This inits the panel orientation property for the mediatek dsi driver if the panel orientation (connector.display_info.panel_orientation) is not DRM_MODE_PANEL_ORIENTATION_UNKNOWN. Signed-off-by: Derek Basehore <dbasehore@chromium.org> --- drivers/gpu/drm/mediatek/mtk_dsi.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/drivers/gpu/drm/mediatek/mtk_dsi.c b/drivers/gpu/drm/mediatek/mtk_dsi.c index 4a0b9150a7bb..08ffdc7526dd 100644 --- a/drivers/gpu/drm/mediatek/mtk_dsi.c +++ b/drivers/gpu/drm/mediatek/mtk_dsi.c @@ -782,10 +782,18 @@ static int mtk_dsi_create_connector(struct drm_device *drm, struct mtk_dsi *dsi) DRM_ERROR("Failed to attach panel to drm\n"); goto err_connector_cleanup; } + + ret = drm_connector_init_panel_orientation_property(&dsi->conn); + if (ret) { + DRM_ERROR("Failed to init panel orientation\n"); + goto err_panel_detach; + } } return 0; +err_panel_detach: + drm_panel_detach(dsi->panel); err_connector_cleanup: drm_connector_cleanup(&dsi->conn); return ret; -- 2.22.0.410.gd8fdbe21b5-goog _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply related [flat|nested] 36+ messages in thread
* [PATCH v4 4/4] drm/mtk: add panel orientation property @ 2019-07-02 23:42 ` Derek Basehore 0 siblings, 0 replies; 36+ messages in thread From: Derek Basehore @ 2019-07-02 23:42 UTC (permalink / raw) To: linux-kernel Cc: Derek Basehore, Philipp Zabel, Maxime Ripard, Sam Ravnborg, intel-gfx, David Airlie, Matthias Brugger, dri-devel, CK Hu, linux-mediatek, linux-arm-kernel This inits the panel orientation property for the mediatek dsi driver if the panel orientation (connector.display_info.panel_orientation) is not DRM_MODE_PANEL_ORIENTATION_UNKNOWN. Signed-off-by: Derek Basehore <dbasehore@chromium.org> --- drivers/gpu/drm/mediatek/mtk_dsi.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/drivers/gpu/drm/mediatek/mtk_dsi.c b/drivers/gpu/drm/mediatek/mtk_dsi.c index 4a0b9150a7bb..08ffdc7526dd 100644 --- a/drivers/gpu/drm/mediatek/mtk_dsi.c +++ b/drivers/gpu/drm/mediatek/mtk_dsi.c @@ -782,10 +782,18 @@ static int mtk_dsi_create_connector(struct drm_device *drm, struct mtk_dsi *dsi) DRM_ERROR("Failed to attach panel to drm\n"); goto err_connector_cleanup; } + + ret = drm_connector_init_panel_orientation_property(&dsi->conn); + if (ret) { + DRM_ERROR("Failed to init panel orientation\n"); + goto err_panel_detach; + } } return 0; +err_panel_detach: + drm_panel_detach(dsi->panel); err_connector_cleanup: drm_connector_cleanup(&dsi->conn); return ret; -- 2.22.0.410.gd8fdbe21b5-goog _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply related [flat|nested] 36+ messages in thread
end of thread, other threads:[~2019-07-03 0:47 UTC | newest] Thread overview: 36+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2019-06-22 3:41 [PATCH v3 0/4] Panel rotation patches Derek Basehore 2019-06-22 3:41 ` Derek Basehore 2019-06-22 3:41 ` Derek Basehore 2019-06-22 3:41 ` [PATCH v3 1/4] drm/panel: Add helper for reading DT rotation Derek Basehore 2019-06-22 3:41 ` Derek Basehore 2019-06-22 3:41 ` Derek Basehore 2019-06-24 20:36 ` Sam Ravnborg 2019-06-24 20:36 ` Sam Ravnborg 2019-06-25 22:12 ` dbasehore . 2019-06-25 22:12 ` dbasehore . 2019-06-25 22:12 ` dbasehore . 2019-06-22 3:41 ` [PATCH v3 2/4] drm/panel: set display info in panel attach Derek Basehore 2019-06-22 3:41 ` Derek Basehore 2019-06-22 3:41 ` Derek Basehore 2019-06-24 23:04 ` dbasehore . 2019-06-24 23:04 ` dbasehore . 2019-06-24 23:04 ` dbasehore . 2019-06-22 3:41 ` [PATCH v3 3/4] drm/connector: Split out orientation quirk detection Derek Basehore 2019-06-22 3:41 ` Derek Basehore 2019-06-22 3:41 ` Derek Basehore 2019-06-23 12:11 ` [Intel-gfx] " Hans de Goede 2019-06-23 12:11 ` Hans de Goede 2019-06-24 13:24 ` Ville Syrjälä 2019-06-24 13:24 ` Ville Syrjälä 2019-07-02 3:24 ` dbasehore . 2019-07-02 3:24 ` dbasehore . 2019-07-02 3:24 ` dbasehore . 2019-06-22 3:41 ` [PATCH v4 4/4] drm/mtk: add panel orientation property Derek Basehore 2019-06-22 3:41 ` Derek Basehore 2019-06-22 3:41 ` Derek Basehore 2019-07-01 1:59 ` CK Hu 2019-07-01 1:59 ` CK Hu 2019-07-01 1:59 ` CK Hu 2019-07-02 23:42 [PATCH v4 0/4] Panel rotation patches Derek Basehore 2019-07-02 23:42 ` [PATCH v4 4/4] drm/mtk: add panel orientation property Derek Basehore 2019-07-02 23:42 ` Derek Basehore 2019-07-02 23:42 ` Derek Basehore
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.