Re: [PATCH v2 02/11] drm: Add support_bits parameter to drm_property_create_bitmask()

2014-02-11 Thread Sagar Arun Kamble
Reviewed-by: Sagar Kamble 
Tested-by: Sagar Kamble 

On Mon, 2014-02-10 at 16:05 +0200, ville.syrj...@linux.intel.com wrote:
> From: Ville Syrjälä 
> 
> Make drm_property_create_bitmask() a bit more generic by allowing the
> caller to specify which bits are in fact supported. This allows multiple
> callers to use the same enum list, but still create different versions
> of the same property with different list of supported bits.
> 
> v2: Populate values[] array as non-sparse
> Make supported_bits 64bit
> Fix up omapdrm call site (Rob)
> 
> Cc: Tomi Valkeinen 
> Cc: Rob Clark 
> Cc: Sagar Kamble 
> Cc: dri-de...@lists.freedesktop.org
> Signed-off-by: Ville Syrjälä 
> ---
> This should also make my original "drm: Add 
> drm_mode_create_rotation_property()"
> patch do the right thing. So patch 03/11 of the series needs to be replaced 
> with the
> original.
> 
>  drivers/gpu/drm/drm_crtc.c   | 18 ++
>  drivers/gpu/drm/omapdrm/omap_plane.c |  5 -
>  include/drm/drm_crtc.h   |  3 ++-
>  3 files changed, 20 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c
> index 3b7d32d..6e099069 100644
> --- a/drivers/gpu/drm/drm_crtc.c
> +++ b/drivers/gpu/drm/drm_crtc.c
> @@ -2906,10 +2906,12 @@ EXPORT_SYMBOL(drm_property_create_enum);
>  struct drm_property *drm_property_create_bitmask(struct drm_device *dev,
>int flags, const char *name,
>const struct drm_prop_enum_list *props,
> -  int num_values)
> +  int num_props,
> +  uint64_t supported_bits)
>  {
>   struct drm_property *property;
> - int i, ret;
> + int i, ret, index = 0;
> + int num_values = hweight64(supported_bits);
>  
>   flags |= DRM_MODE_PROP_BITMASK;
>  
> @@ -2917,8 +2919,16 @@ struct drm_property 
> *drm_property_create_bitmask(struct drm_device *dev,
>   if (!property)
>   return NULL;
>  
> - for (i = 0; i < num_values; i++) {
> - ret = drm_property_add_enum(property, i,
> + for (i = 0; i < num_props; i++) {
> + if (!(supported_bits & (1ULL << props[i].type)))
> + continue;
> +
> + if (WARN_ON(index >= num_values)) {
> + drm_property_destroy(dev, property);
> + return NULL;
> + }
> +
> + ret = drm_property_add_enum(property, index++,
> props[i].type,
> props[i].name);
>   if (ret) {
> diff --git a/drivers/gpu/drm/omapdrm/omap_plane.c 
> b/drivers/gpu/drm/omapdrm/omap_plane.c
> index 046d5e6..0d97650 100644
> --- a/drivers/gpu/drm/omapdrm/omap_plane.c
> +++ b/drivers/gpu/drm/omapdrm/omap_plane.c
> @@ -309,7 +309,10 @@ void omap_plane_install_properties(struct drm_plane 
> *plane,
>   { DRM_REFLECT_Y,  "reflect-y" },
>   };
>   prop = drm_property_create_bitmask(dev, 0, "rotation",
> - props, ARRAY_SIZE(props));
> + props, ARRAY_SIZE(props),
> + BIT(DRM_ROTATE_0) | BIT(DRM_ROTATE_90) |
> + BIT(DRM_ROTATE_180) | 
> BIT(DRM_ROTATE_270) |
> + BIT(DRM_REFLECT_X) | 
> BIT(DRM_REFLECT_Y));
>   if (prop == NULL)
>   return;
>   priv->rotation_prop = prop;
> diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h
> index d5c46c1..4e6d2aa 100644
> --- a/include/drm/drm_crtc.h
> +++ b/include/drm/drm_crtc.h
> @@ -1070,7 +1070,8 @@ extern struct drm_property 
> *drm_property_create_enum(struct drm_device *dev, int
>  struct drm_property *drm_property_create_bitmask(struct drm_device *dev,
>int flags, const char *name,
>const struct drm_prop_enum_list *props,
> -  int num_values);
> +  int num_props,
> +  uint64_t supported_bits);
>  struct drm_property *drm_property_create_range(struct drm_device *dev, int 
> flags,
>const char *name,
>uint64_t min, uint64_t max);


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH v2 02/11] drm: Add support_bits parameter to drm_property_create_bitmask()

2014-02-11 Thread Sagar Arun Kamble
Reviewed-by: Sagar Kamble sagar.a.kam...@intel.com
Tested-by: Sagar Kamble sagar.a.kam...@intel.com

On Mon, 2014-02-10 at 16:05 +0200, ville.syrj...@linux.intel.com wrote:
 From: Ville Syrjälä ville.syrjala at linux.intel.com
 
 Make drm_property_create_bitmask() a bit more generic by allowing the
 caller to specify which bits are in fact supported. This allows multiple
 callers to use the same enum list, but still create different versions
 of the same property with different list of supported bits.
 
 v2: Populate values[] array as non-sparse
 Make supported_bits 64bit
 Fix up omapdrm call site (Rob)
 
 Cc: Tomi Valkeinen tomi.valkei...@ti.com
 Cc: Rob Clark robdcl...@gmail.com
 Cc: Sagar Kamble sagar.a.kam...@intel.com
 Cc: dri-de...@lists.freedesktop.org
 Signed-off-by: Ville Syrjälä ville.syrj...@linux.intel.com
 ---
 This should also make my original drm: Add 
 drm_mode_create_rotation_property()
 patch do the right thing. So patch 03/11 of the series needs to be replaced 
 with the
 original.
 
  drivers/gpu/drm/drm_crtc.c   | 18 ++
  drivers/gpu/drm/omapdrm/omap_plane.c |  5 -
  include/drm/drm_crtc.h   |  3 ++-
  3 files changed, 20 insertions(+), 6 deletions(-)
 
 diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c
 index 3b7d32d..6e099069 100644
 --- a/drivers/gpu/drm/drm_crtc.c
 +++ b/drivers/gpu/drm/drm_crtc.c
 @@ -2906,10 +2906,12 @@ EXPORT_SYMBOL(drm_property_create_enum);
  struct drm_property *drm_property_create_bitmask(struct drm_device *dev,
int flags, const char *name,
const struct drm_prop_enum_list *props,
 -  int num_values)
 +  int num_props,
 +  uint64_t supported_bits)
  {
   struct drm_property *property;
 - int i, ret;
 + int i, ret, index = 0;
 + int num_values = hweight64(supported_bits);
  
   flags |= DRM_MODE_PROP_BITMASK;
  
 @@ -2917,8 +2919,16 @@ struct drm_property 
 *drm_property_create_bitmask(struct drm_device *dev,
   if (!property)
   return NULL;
  
 - for (i = 0; i  num_values; i++) {
 - ret = drm_property_add_enum(property, i,
 + for (i = 0; i  num_props; i++) {
 + if (!(supported_bits  (1ULL  props[i].type)))
 + continue;
 +
 + if (WARN_ON(index = num_values)) {
 + drm_property_destroy(dev, property);
 + return NULL;
 + }
 +
 + ret = drm_property_add_enum(property, index++,
 props[i].type,
 props[i].name);
   if (ret) {
 diff --git a/drivers/gpu/drm/omapdrm/omap_plane.c 
 b/drivers/gpu/drm/omapdrm/omap_plane.c
 index 046d5e6..0d97650 100644
 --- a/drivers/gpu/drm/omapdrm/omap_plane.c
 +++ b/drivers/gpu/drm/omapdrm/omap_plane.c
 @@ -309,7 +309,10 @@ void omap_plane_install_properties(struct drm_plane 
 *plane,
   { DRM_REFLECT_Y,  reflect-y },
   };
   prop = drm_property_create_bitmask(dev, 0, rotation,
 - props, ARRAY_SIZE(props));
 + props, ARRAY_SIZE(props),
 + BIT(DRM_ROTATE_0) | BIT(DRM_ROTATE_90) |
 + BIT(DRM_ROTATE_180) | 
 BIT(DRM_ROTATE_270) |
 + BIT(DRM_REFLECT_X) | 
 BIT(DRM_REFLECT_Y));
   if (prop == NULL)
   return;
   priv-rotation_prop = prop;
 diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h
 index d5c46c1..4e6d2aa 100644
 --- a/include/drm/drm_crtc.h
 +++ b/include/drm/drm_crtc.h
 @@ -1070,7 +1070,8 @@ extern struct drm_property 
 *drm_property_create_enum(struct drm_device *dev, int
  struct drm_property *drm_property_create_bitmask(struct drm_device *dev,
int flags, const char *name,
const struct drm_prop_enum_list *props,
 -  int num_values);
 +  int num_props,
 +  uint64_t supported_bits);
  struct drm_property *drm_property_create_range(struct drm_device *dev, int 
 flags,
const char *name,
uint64_t min, uint64_t max);


--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH v2 02/11] drm: Add support_bits parameter to drm_property_create_bitmask()

2014-02-10 Thread ville . syrjala
From: Ville Syrjälä 

Make drm_property_create_bitmask() a bit more generic by allowing the
caller to specify which bits are in fact supported. This allows multiple
callers to use the same enum list, but still create different versions
of the same property with different list of supported bits.

v2: Populate values[] array as non-sparse
Make supported_bits 64bit
Fix up omapdrm call site (Rob)

Cc: Tomi Valkeinen 
Cc: Rob Clark 
Cc: Sagar Kamble 
Cc: dri-de...@lists.freedesktop.org
Signed-off-by: Ville Syrjälä 
---
This should also make my original "drm: Add drm_mode_create_rotation_property()"
patch do the right thing. So patch 03/11 of the series needs to be replaced 
with the
original.

 drivers/gpu/drm/drm_crtc.c   | 18 ++
 drivers/gpu/drm/omapdrm/omap_plane.c |  5 -
 include/drm/drm_crtc.h   |  3 ++-
 3 files changed, 20 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c
index 3b7d32d..6e099069 100644
--- a/drivers/gpu/drm/drm_crtc.c
+++ b/drivers/gpu/drm/drm_crtc.c
@@ -2906,10 +2906,12 @@ EXPORT_SYMBOL(drm_property_create_enum);
 struct drm_property *drm_property_create_bitmask(struct drm_device *dev,
 int flags, const char *name,
 const struct drm_prop_enum_list *props,
-int num_values)
+int num_props,
+uint64_t supported_bits)
 {
struct drm_property *property;
-   int i, ret;
+   int i, ret, index = 0;
+   int num_values = hweight64(supported_bits);
 
flags |= DRM_MODE_PROP_BITMASK;
 
@@ -2917,8 +2919,16 @@ struct drm_property *drm_property_create_bitmask(struct 
drm_device *dev,
if (!property)
return NULL;
 
-   for (i = 0; i < num_values; i++) {
-   ret = drm_property_add_enum(property, i,
+   for (i = 0; i < num_props; i++) {
+   if (!(supported_bits & (1ULL << props[i].type)))
+   continue;
+
+   if (WARN_ON(index >= num_values)) {
+   drm_property_destroy(dev, property);
+   return NULL;
+   }
+
+   ret = drm_property_add_enum(property, index++,
  props[i].type,
  props[i].name);
if (ret) {
diff --git a/drivers/gpu/drm/omapdrm/omap_plane.c 
b/drivers/gpu/drm/omapdrm/omap_plane.c
index 046d5e6..0d97650 100644
--- a/drivers/gpu/drm/omapdrm/omap_plane.c
+++ b/drivers/gpu/drm/omapdrm/omap_plane.c
@@ -309,7 +309,10 @@ void omap_plane_install_properties(struct drm_plane *plane,
{ DRM_REFLECT_Y,  "reflect-y" },
};
prop = drm_property_create_bitmask(dev, 0, "rotation",
-   props, ARRAY_SIZE(props));
+   props, ARRAY_SIZE(props),
+   BIT(DRM_ROTATE_0) | BIT(DRM_ROTATE_90) |
+   BIT(DRM_ROTATE_180) | 
BIT(DRM_ROTATE_270) |
+   BIT(DRM_REFLECT_X) | 
BIT(DRM_REFLECT_Y));
if (prop == NULL)
return;
priv->rotation_prop = prop;
diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h
index d5c46c1..4e6d2aa 100644
--- a/include/drm/drm_crtc.h
+++ b/include/drm/drm_crtc.h
@@ -1070,7 +1070,8 @@ extern struct drm_property 
*drm_property_create_enum(struct drm_device *dev, int
 struct drm_property *drm_property_create_bitmask(struct drm_device *dev,
 int flags, const char *name,
 const struct drm_prop_enum_list *props,
-int num_values);
+int num_props,
+uint64_t supported_bits);
 struct drm_property *drm_property_create_range(struct drm_device *dev, int 
flags,
 const char *name,
 uint64_t min, uint64_t max);
-- 
1.8.3.2

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH v2 02/11] drm: Add support_bits parameter to drm_property_create_bitmask()

2014-02-10 Thread ville . syrjala
From: Ville Syrjälä ville.syrjala at linux.intel.com

Make drm_property_create_bitmask() a bit more generic by allowing the
caller to specify which bits are in fact supported. This allows multiple
callers to use the same enum list, but still create different versions
of the same property with different list of supported bits.

v2: Populate values[] array as non-sparse
Make supported_bits 64bit
Fix up omapdrm call site (Rob)

Cc: Tomi Valkeinen tomi.valkei...@ti.com
Cc: Rob Clark robdcl...@gmail.com
Cc: Sagar Kamble sagar.a.kam...@intel.com
Cc: dri-de...@lists.freedesktop.org
Signed-off-by: Ville Syrjälä ville.syrj...@linux.intel.com
---
This should also make my original drm: Add drm_mode_create_rotation_property()
patch do the right thing. So patch 03/11 of the series needs to be replaced 
with the
original.

 drivers/gpu/drm/drm_crtc.c   | 18 ++
 drivers/gpu/drm/omapdrm/omap_plane.c |  5 -
 include/drm/drm_crtc.h   |  3 ++-
 3 files changed, 20 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c
index 3b7d32d..6e099069 100644
--- a/drivers/gpu/drm/drm_crtc.c
+++ b/drivers/gpu/drm/drm_crtc.c
@@ -2906,10 +2906,12 @@ EXPORT_SYMBOL(drm_property_create_enum);
 struct drm_property *drm_property_create_bitmask(struct drm_device *dev,
 int flags, const char *name,
 const struct drm_prop_enum_list *props,
-int num_values)
+int num_props,
+uint64_t supported_bits)
 {
struct drm_property *property;
-   int i, ret;
+   int i, ret, index = 0;
+   int num_values = hweight64(supported_bits);
 
flags |= DRM_MODE_PROP_BITMASK;
 
@@ -2917,8 +2919,16 @@ struct drm_property *drm_property_create_bitmask(struct 
drm_device *dev,
if (!property)
return NULL;
 
-   for (i = 0; i  num_values; i++) {
-   ret = drm_property_add_enum(property, i,
+   for (i = 0; i  num_props; i++) {
+   if (!(supported_bits  (1ULL  props[i].type)))
+   continue;
+
+   if (WARN_ON(index = num_values)) {
+   drm_property_destroy(dev, property);
+   return NULL;
+   }
+
+   ret = drm_property_add_enum(property, index++,
  props[i].type,
  props[i].name);
if (ret) {
diff --git a/drivers/gpu/drm/omapdrm/omap_plane.c 
b/drivers/gpu/drm/omapdrm/omap_plane.c
index 046d5e6..0d97650 100644
--- a/drivers/gpu/drm/omapdrm/omap_plane.c
+++ b/drivers/gpu/drm/omapdrm/omap_plane.c
@@ -309,7 +309,10 @@ void omap_plane_install_properties(struct drm_plane *plane,
{ DRM_REFLECT_Y,  reflect-y },
};
prop = drm_property_create_bitmask(dev, 0, rotation,
-   props, ARRAY_SIZE(props));
+   props, ARRAY_SIZE(props),
+   BIT(DRM_ROTATE_0) | BIT(DRM_ROTATE_90) |
+   BIT(DRM_ROTATE_180) | 
BIT(DRM_ROTATE_270) |
+   BIT(DRM_REFLECT_X) | 
BIT(DRM_REFLECT_Y));
if (prop == NULL)
return;
priv-rotation_prop = prop;
diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h
index d5c46c1..4e6d2aa 100644
--- a/include/drm/drm_crtc.h
+++ b/include/drm/drm_crtc.h
@@ -1070,7 +1070,8 @@ extern struct drm_property 
*drm_property_create_enum(struct drm_device *dev, int
 struct drm_property *drm_property_create_bitmask(struct drm_device *dev,
 int flags, const char *name,
 const struct drm_prop_enum_list *props,
-int num_values);
+int num_props,
+uint64_t supported_bits);
 struct drm_property *drm_property_create_range(struct drm_device *dev, int 
flags,
 const char *name,
 uint64_t min, uint64_t max);
-- 
1.8.3.2

--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/